AlgoTrading Solutions
AlgoTrading Solutions личный блог
01 ноября 2018, 11:35

Вещественные типы данных в 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.

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

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

    как совет начинающим, не учите MQL, придете в итоге в тупик, платформа урезанная и зацикливает разработчика только на ней, отсекая и искривляя знания в области алготрейдинга, лучше изучить отдельно язык программирования, как приоритет C# и С++, в довесок лучше нагрузиться еще Python, и ни когда не слушать тех, кто говорит — Python скриптовый язык и он из-за этого очень медленный, на мой взгляд Python лучшее решение в алготрейдинге, а в связке с С++ это адская смесь ))
    • Boris Litvinov
      01 ноября 2018, 13:29
      Константин, в прошлый раз практически это и написал, С++ учите!
      • Константин
        01 ноября 2018, 14:16
        AlgoTrading Solutions, это не агитирование, если вы не в курсе, то тот же MQL полностью основан на синтаксисе С++ `98, есть различия из-за одного момента, в MQL работает пул памяти, поэтому у пользователей нет прямой возможности обратиться к сущности по адресу в памяти, только через дескриптор в пуле, ну и по мелочи есть различия

        а вашим читателям стоит задуматься над тем, что яписал выше, т.к. ориентируясь только на MQL, они идут в никуда, уже сейчас используя МТ4 и МТ5 как коннектор, можно спокойно писать код на нормальных языках, где куча библиотек под различный анализ, а используя библиотеки из стандартной поставки MQL, есть шанс налететь на очередные грабли, почитайте форум mql5.com, там одни проблемы по их использованию стандартной библиотеки
        а если использовать те же Python библиотеки, то пользователь ограждается от детских ошибок т.к. там библиотеки протестированы тысячами программистов, прежде чем их двинули в продакшн
          • Константин
            01 ноября 2018, 14:43
            AlgoTrading Solutions, слова ни чего не значат, покажите мне код — Линус Торвальд



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

            кстати данный код будет работать напрямую в С++ и в MQL
              • Константин
                01 ноября 2018, 15:02
                AlgoTrading Solutions, на то оно и программирование, что придти к одному знаменателю можно через огромный оверхед и кучу велосипедов )))
                а проблема у MQ одна — изобрели С++ и назвали его MQL, а т.к. тестеров языка мало, то и ошибки там детские
                кроме того у них не то что не принят, а даже не собираются принимать стандарт языка, как это принято, т.е. все основано на справке, которая периодически правится ими же, одни и те же сущности могут работать в разных билдах по разному, при чем меняя свое поведение по несколько раз
                я поэтому и приверженец стабильных языков, а не лисапедов ))
                просто когда учите народ, то объясняйте сразу главные проблемы языка, что бы будущие программисты знали с чем столкнутся
  • Константин
    01 ноября 2018, 14:18
     по использованию NaN я про то и написал, что лучше создать свой функционал, который основан на тактике тысяч программистов, а не на черном ящике MetaQuotes, не я один попадал с их NormalizeDouble, во время периодических обновлений, они конечно потом приводят все в норму, но это потом
  • Константин
    01 ноября 2018, 14:20
    а с массивами string вы не попали последнее время ни разу? я дак сперва запаниковал, потом зашел на их форум и понял, что это ппц, у них эта проблема висела несколько билдов, исправили только в 1934

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

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

  • Макс Максименко
    22 апреля 2020, 21:40
    MQL самый мерзкий язык с которым мне приходилось сталкиваться у них 5-4=0.99999999999999999999999991

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн