Вы перенесли mq5 файл без смены расширения в МТ4?
чтобы скомпилировать под MQL4, надо сменить расширение.
Вы перенесли mq5 файл без смены расширения в МТ4?
чтобы скомпилировать под MQL4, надо сменить расширение.
Понятно. Но, вроде как библиотеки компилируются и без замены расширения.
Моя "сверхзадача" - сделать единую библиотеку, которая бы без изменений работала и на МТ5, где у меня уже много оттестированных классов, и на МТ4, где я только начинаю работать. Как раз макросы __МТ5__ и __МТ4__ - здорово помогли. Фактически, я сделал файл с классами таймсерий, который совершенно без изменений компилируется (пока не проверял на запуск, но компиляция - уже неплохо) и на МТ4 и на МТ5, при этом на МТ5 - используются только классы Стандартной Библиотеки, а на МТ4 - там, где есть аналоги, используются также классы Стандартной Библиотеки, а там, где их нет - используются самописные классы с аналогичной функциональностью.
Единственная загвоздка - сейчас приходится использовать не очень-то правильную конструкцию:
#ifdef DEFAULT_BUFFER_SIZE
учитывая, что макрос DEFAULT_BUFFER_SIZE - определен только в СБ от МТ5, а в СБ от МТ4 его нет (пока ?).
Но хотелось бы, конечно, более нормального дефайна, который зависит от реальной платформы, а не от расширения компилируемого файла. Тем более, что, скажем, у файлов MQH - расширение вобще одинаково как для МТ4, так и для МТ5. А большинство моих классов лежит в библиотеках - заголовки в MQH и имплементация в MQ5.
Вы можете все рабочие файлы держать в MQH, а иметь только разные стартовые mq4 и mq5 файлы.
Хм... Да, это тоже мысль.
Надо все файлы по-прежнему держать в .MQ5, но при этом иметь один файл .MQ4, включающий в себя всю библиотеку - и одним этим файлом ее полностью перекомпилировать.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую.
Есть задача - писать код так, чтобы он без изменений компилировался как на МТ4 так и на МТ5.
Поскольку терминалы работают по-разному, а кроме того, Стандартная Библиотека имеет существенные отличия на МТ4 и МТ5 даже в структуре таких базовых классов, как таймсерии - необходимо, чтобы в коде были фрагменты, которые отдельно компилируются для МТ4 и для МТ5.
Мне казалось, что задача с появлением макросов #ifdef, __MQL4__ и __MQL5__ - решается запросто.
Пишем конструкцию типа:
#ifdef __MT5__
...
// код для МТ5
...
#else
...
// код для МТ4
...
#endif
И в результате МТ5 - будет воспринимать свой участок кода, МТ4 - свой.
Но, оказывается, все не так просто. Если .MQ5 модуль перенести без изменений в МТ4 - то все равно будет компилирован участок для МТ5. При этом если тот же модуль переименовать в .MQ4 - начнет выполняться код для МТ4.
Похоже, (как я понял), макросы __МТ5__ и __МТ4__ показывают не тип терминала, а тип компилируемого модуля - то есть, просто его расширение.
В документации также описаны макросы __MT4BUILD__ и __MT5BUILD__ - но они оба определены в новом МТ4.
Как же определить в момент компиляции, на каком терминале - МТ4 или МТ5 идет компиляция ?