Specifiche
-
Сама стратегия будет предоставлена разработчику после того как будут согласованы все пункты описаные ниже.
-
Качество кода: Работа должна содержать чистый код с комментариями на английском языке.
-
Организация структур: Все структуры должны содержать только простые типы данных. Для оптимального выравнивания памяти данные внутри структур должны быть организованы от самого большого типа к самому малому. Допускается использование статических массивов простых типов внутри структур.
-
Типы данных: Массивы и переменные должны быть только простых типов.
-
Входные параметры: Все input -параметры должны использоваться в коде через единую структуру, поля которой дублируют входные параметры.
-
Глобальные переменные: * Использование автономных глобальных и статических переменных запрещено.
-
Если без глобального состояния не обойтись, все такие переменные должны быть собраны в структуру и использоваться только через неё.
-
-
Парадигма программирования: Использование классов и объектов (ООП) запрещено. Код должен быть написан строго в стиле функционального программирования.
-
Интерфейс и графика: Использование графических объектов на графике и расчеты на их основе в логике советника запрещены.
-
Индикаторы: Вызов стандартных и ка с томных индикаторов через iCustom или встроенные функции MQL запрещен. Все необходимые индикаторы должны быть полностью реализованы (написаны с нуля) внутри кода советника.
-
Информация о символе: Данные из SymbolInfo , относящиеся к торговому инструменту, должны быть занесены в структуру и инициализированы один раз в специальной функции. В коде должны использоваться данные только из этой структуры.
-
Тиковые данные: Текущая рыночная информация должна храниться в структуре типа MqlTick , которая заполняется в самом начале функции OnTick . Все расчеты должны использовать данные только из этой структуры.
-
Работа с временем:
-
Тип данных datetime полностью исключен; вместо него используется только тип int .
-
Получение текущего времени допускается только из структуры MqlTick последнего пришедшего тика.
-
Использование стандартных функций MQL для работы с временем (например, TimeCurrent() , TimeToStruct() и др.) не допускается .
-
Запрещённые типы данных: color, double. Вместо double всегда использовать float.
-
Использование ArraySetAsSeries(rates,true) запрещено.
-
-
История: Получение исторической информации (баров) — только с использованием структуры MqlRates .
-
Единицы измерения: Все дистанции и отступы измеряются в SYMBOL_TRADE_TICK_SIZE .
-
Оптимизация производительности:
-
Использовать умножение вместо деления везде, где это возможно.
-
Использовать сложные условия вместо множественных вложенных if .
-
Избегать вложенных циклов везде, где это возможно.
-
-
Логирование: Все важные события, торговые операции и ошибки должны выводиться в журнал с помощью функции Print() . Сообщения должны быть информативными и на английском языке. Запрещено использовать функции Alert() , MessageBox() или любые другие, прерывающие работу или требующие взаимодействия с пользователем.
-
Стиль кода: Названия функций с маленькой буквы camelCase, названия переменных snake_case. SCREAMING_SNAKE_CASE для констант.
-
Описание кода: Каждая функция должна иметь краткое описание, которое должно содержать об щее описание, описание аргументов и возвращаемого значения.
-
Библиотеки: Если в предоставленной базе кода (codebase) есть аналог стандартной функции MQL, необходимо использовать версию из базы кода.
-
Кроссплатформенность: Советник должен компилироваться без ошибок и предупреждений как в MT4, так и в MT5.