Блог им. AlgoTrader1

Вещественные типы данных в MQL4 и MQL5

Всех приветствую. Продолжаем изучение языка MQL4.

В прошлый раз мы рассмотрели целые типы данных, а сегодня поговорим о вещественных типах. Они предназначены для того, чтобы хранить не только целую, но и дробную часть числа. Поэтому они гораздо более универсальны, чем целые типы данных. В плане математических операций с целыми числами мы ограничены тем, что результат обязательно должен быть целым, иначе мы потеряем дробную часть числа. По этой причине целые типы чаще всего применяются для нумерации элементов массива и для всевозможных счётчиков, когда нам необходимо посчитать сколько раз выполнилось какое-либо условие. Например, перебрать все активные ордера и посчитать сколько из них каждого типа: (buy, sell, buy stop, buy limit, sell stop, sell limit).

Вещественные типы в этом смысле могут применяться гораздо шире, в самых разных математических операциях, потому что хранят целую и дробную часть числа.

Вещественных типов данных в языке MQL4 (и в MQL5 тоже) всего 2:

  • float
  • double

Причём, почти всегда рациональнее использовать тип double. Он точнее, имеет более широкий диапазон значений и в связи с этим максимально универсален. Есть единственная причина иногда использовать тип float – экономия памяти при работе с очень большими массивами вещественных чисел. Если переменная типа float весит в памяти 4 байта, то переменная double занимает 8 байт. Хотя, с современными объёмами оперативной памяти в компьютерах это вряд ли станет проблемой. Да и задачи, когда возникает необходимость работать с огромными массивами вещественных значений, попадаются не часто.

Вещественные типы данных в языке MQL5 полностью совпадают. Так что содержание поста актуально и для тех, кто изучает MQL5.

Все подробности о вещественных типах данных, а так же примеры применения можно узнать из закреплённого видео. Спасибо за внимание.

  • обсудить на форуме:
  • MQL5,
  • MQL4
★5
12 комментариев
лучше всего по работе с вещественными типами описывается в С++, обязательно нужно сделать упор на сравнение вещественных типов, т.к. в этом заключается у многих начинающих программистов ошибка
и ни в коем случае не уповать на NormalizeDouble(...) из функционала MQL, со мной не раз эта функция играла злую шутку, в итоге написал собственную функцию сравнения с использованием NaN и нужной точности в разрядах...

как совет начинающим, не учите MQL, придете в итоге в тупик, платформа урезанная и зацикливает разработчика только на ней, отсекая и искривляя знания в области алготрейдинга, лучше изучить отдельно язык программирования, как приоритет C# и С++, в довесок лучше нагрузиться еще Python, и ни когда не слушать тех, кто говорит — Python скриптовый язык и он из-за этого очень медленный, на мой взгляд Python лучшее решение в алготрейдинге, а в связке с С++ это адская смесь ))
avatar
Константин, в прошлый раз практически это и написал, С++ учите!
avatar
Константин, ничто не мешает проверять число на NaN, а затем уже округлять.

Не пойму к чему Вы занимаетесь агитированием за  C#, С++, Python... в теме, которая посвящена другому языку программирования. Ну не нравится Вам MQL, — никаких вопросов. Не мешайте изучать тем, кому он интересен и не сбивайте людей с толку.
avatar
AlgoTrading Solutions, это не агитирование, если вы не в курсе, то тот же MQL полностью основан на синтаксисе С++ `98, есть различия из-за одного момента, в MQL работает пул памяти, поэтому у пользователей нет прямой возможности обратиться к сущности по адресу в памяти, только через дескриптор в пуле, ну и по мелочи есть различия

а вашим читателям стоит задуматься над тем, что яписал выше, т.к. ориентируясь только на MQL, они идут в никуда, уже сейчас используя МТ4 и МТ5 как коннектор, можно спокойно писать код на нормальных языках, где куча библиотек под различный анализ, а используя библиотеки из стандартной поставки MQL, есть шанс налететь на очередные грабли, почитайте форум mql5.com, там одни проблемы по их использованию стандартной библиотеки
а если использовать те же Python библиотеки, то пользователь ограждается от детских ошибок т.к. там библиотеки протестированы тысячами программистов, прежде чем их двинули в продакшн
avatar
Константин, с чего Вы взяли, что я не в курсе заимствования синтаксиса из C++? Не сомневаюсь, что никакой из моих материалов Вы не смотрели, но решили зайти, построить из себя специалиста...

Это именно агитирование. Вы что-то предлагаете, может у Вас свои курсы по обучению на C++, C#, Python? Даже если так, это не место для их рекламы.

Если программированию Вы не обучаете, MQL Вас не интересует, то что Вы тут делаете?! Вам-то, собственно, какое дело до того, кто чем интересуется и что изучает? Ваш вклад какой? Посоветовать изучать что-то другое? Вы, может быть, считаете что одним этим действием оказали зрителям несравненную помощь… но это не так. 

Те, у кого проблем не возникает, ничего не пишут. Поэтому никакой статистикой приведённый пример назвать нельзя. 
avatar
AlgoTrading Solutions, слова ни чего не значат, покажите мне код — Линус Торвальд



это к тому, что лучше использовать простые реализации свои, а не чужие, на ошибки не налетишь, пользуйтесь ))
и не нужно ни какой агрессии, у меня не было целью вас как то очернить, но не зная С++, сам MQL становится реально черным ящиком, а этого вы не доводите до своих читателей

кстати данный код будет работать напрямую в С++ и в MQL
avatar
Константин, не надо недооценивать свои способности ошибаться) Такое тоже возможно. Исправляя чужие ошибки можно и своих нагородить. 

По поводу «своих велосипедов» ничего не имею против, сам иногда изобретаю то, что уже есть, если мне не нравится реализация.
avatar
AlgoTrading Solutions, на то оно и программирование, что придти к одному знаменателю можно через огромный оверхед и кучу велосипедов )))
а проблема у MQ одна — изобрели С++ и назвали его MQL, а т.к. тестеров языка мало, то и ошибки там детские
кроме того у них не то что не принят, а даже не собираются принимать стандарт языка, как это принято, т.е. все основано на справке, которая периодически правится ими же, одни и те же сущности могут работать в разных билдах по разному, при чем меняя свое поведение по несколько раз
я поэтому и приверженец стабильных языков, а не лисапедов ))
просто когда учите народ, то объясняйте сразу главные проблемы языка, что бы будущие программисты знали с чем столкнутся
avatar
 по использованию NaN я про то и написал, что лучше создать свой функционал, который основан на тактике тысяч программистов, а не на черном ящике MetaQuotes, не я один попадал с их NormalizeDouble, во время периодических обновлений, они конечно потом приводят все в норму, но это потом
avatar
а с массивами string вы не попали последнее время ни разу? я дак сперва запаниковал, потом зашел на их форум и понял, что это ппц, у них эта проблема висела несколько билдов, исправили только в 1934

вот и думайте прежде чем бездумно использовать их типы, которые в нормальных языках считаются сложными типами данных — классами

и если автор такой умный, то пусть напишет здесь как тип string представлен в том же MQL, раньше эта инфа была у них доступна, но с некоторого времени ее убрали, видимо пользователи стали задавать не нужные вопросы

avatar
Сам с проблемой с массивами string не сталкивался. По поводу представления типа string есть информация в справке. 


avatar
MQL самый мерзкий язык с которым мне приходилось сталкиваться у них 5-4=0.99999999999999999999999991

теги блога AlgoTrading Solutions

....все тэги



UPDONW
Новый дизайн