Сама стратегия будет предоставлена разработчику после того как будут согласованы все пункты описаные ниже.
Качество кода: Работа должна содержать чистый код с комментариями на английском языке.
Организация структур: Все структуры должны содержать только простые типы данных. Для оптимального выравнивания памяти данные внутри структур должны быть организованы от самого большого типа к самому малому. Допускается использование статических массивов простых типов внутри структур.
Типы данных: Массивы и переменные должны быть только простых типов.
Входные параметры: Все 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.