Один и тот же файл не может компилироваться как MQL4 и MQL5
Проблема
С некоторых пор мой код не отличается для MQL4 и MQL5. Новые возможности MQL5 нужны крайне редко, и без них можно обходиться. С другой стороны, MQL4 достаточно близок к MQL5. В итоге можно писать код так, чтобы он компилировался и почти одинаково работал в MT4 и MT5. Однако для MT4 код компилируется только из файлов с расширением .mq4
, а для MT5 - .mq5
. Приходится иметь два файла с одинаковым содержимым.
Решение
- Связать файлы жесткой ссылкой (пока использую этот метод с утилитой для принудительной синхронизации)
- минус: будет проблема с системами контроля версий (вернее, клиенскими программами), т.к. они зачастую при откате изменений пересоздают файл
- минус: система (win7x64, win10x64) не сразу обновляет информацию об обновлении файлов, связанных жесткой ссылкой, требуется обращение (хотя бы чтение свойств) ко всем "синонимам"
- Копировать вручную.
- минус: просто неудобно, и можно ошибиться
- Найти какую-нибудь программу-синхронизатор
- минус: после пары случаев удаления инфы такими программами доверия ко всему классу таким программ нет
- Мягкая ссылка.
- минус: кажется, это вообще не работает с MT
- Писать в основном коде только минимальную обёртку для вызова методов класса индикатора в файлах
.mqh
(этот вариант кажется лучшим)- минус: сложнее отлаживать, после внесения правок нужно всегда переключаться на основной файл для компиляции, либо использовать Ctrl+F7, если открыт только скрипт с инклюдами
- минус: каждый индикатор сразу разбивается как минимум на 2 файла
- плюс: можно придумать интерфейс для вызова из робота, это будет работать быстрее, чем через
iCustom
- минус: всё равно приходится синхронизировать основной файл
Идеальным решением было бы наличие общего расширения для MQL4 и MQL5 плюс директива, указывающая платформы назначения.