Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 1301
- Рейтинг:
- Опубликован:
- 2024.01.16 23:28
- Обновлен:
- 2024.08.10 14:50
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Данная библиотека уменьшает рутинные действия при работе со входными параметрами.
ООП.
В качестве примера использования возьмем торговый советник. Разумно при написании торговой логики использовать ООП-подход, поскольку это облегчает встраивание ТС в более сложные системы.
Архитектурно ООП-советник для Тестера выглядит так.
class SYSTEM { public: virtual void OnTick() {} // Входные данные выводятся в строку. virtual string ToString( void ) const = NULL; // Входные данные задаются строкой. virtual int FromString( const string Str ) = NULL; }; SYSTEM* System = NULL; void OnInit() { System = new SYSTEM; } void OnTick() { System.OnTick(); } void OnDeinit( const int ) { delete System; }
Этот советник ничего не делает. Но когда заходит речь не о торговой логике, а лишь только о работе со входными параметрами, код серьезно разрастается, что ухудшает читаемость и повышает вероятность ошибки. Фактически требуется производить неприятную рутинную работу.
Все входные параметры в виде строки.
Немного отвлечемся на выделенные в коде строки.
Торговая практика показывает, что входные параметры удобно сохранять/читать в строковом виде, чтобы можно было быстро и наглядно видеть интересуемые (найденные) наборы входных параметров.
Amount = 1, Count = 2, Period = 3, Koef = 4.5, Log = 6.7, Flag = true Amount = 2, Count = 3, Period = 4, Koef = 4.56, Log = 7.89, Flag = false
Например, в тексте выше два набора входных параметров.
ООП-классика работы со входными параметрами.
input int inAmount = 1; input int inCount = 2; input int inPeriod = 3; input double inKoef = 4.56; input double inLog = 7.89; input bool inFlag = true; struct INPUT_STRUCT { int Amount; int Count; int Period; double Koef; double Log; bool Flag; string ToString( void ) const { string Str = NULL; #define TOSTRING(A) Str += (::StringLen(Str) ? ", " : NULL ) + #A + " = " + (string)(this.A); TOSTRING(Amount); TOSTRING(Count); TOSTRING(Period); TOSTRING(Koef); TOSTRING(Log); TOSTRING(Flag); #undef TOSTRING return(Str); } // Не стал писать. int FromString( const string Str ) { return(0); } } inInputs = {inAmount, inCount, inPeriod, inKoef, inLog, inFlag}; #include <fxsaber\Input_Struct\Example_OnTick.mqh> void EXAMPLE::OnTick( void ) { // Код Системы... // this.Inputs содержит входные параметры. }
Выше громоздкий код - все тот же советник-пустышка, но только с добавлением (выделенный текст) работы со входными параметрами. Код неприятный, да еще и без реализации важного метода INPUT_STRUCT::FromString.
Если захотите добавить/убрать один входной параметр, то придется в пяти местах этого кода делать соответствующие изменения. И так каждый раз!
ООП-альтернатива работы со входными параметрами.
#include <fxsaber\Input_Struct\Input_Struct.mqh> // Структура входных параметров. INPUT_STRUCT inInputs; MACROS_INPUT(int, Amount, 1); MACROS_INPUT(int, Count, 2); MACROS_INPUT(int, Period, 3); MACROS_INPUT(double, Koef, 4.56); MACROS_INPUT(double, Log, 7.89); MACROS_INPUT(bool, Flag, true); #include <fxsaber\Input_Struct\Example_OnTick.mqh> void EXAMPLE::OnTick( void ) { // Код Системы... // this.Inputs содержит входные параметры. }
Выделенного текста стало заметно меньше. При этом все методы реализованы.
Сценарии использования.
- Минимальные время и вероятность ошибки при изменении набора входных параметров.
- Больше уделения времени торговой логике, а не техническим особенностям.
- Сохранение/чтение наборов входных параметров через строку.
- Значительное упрощение написания сложных систем (портфели и т.д.).
- Легкое подключения кастомных алгоритмов оптимизации.
Обратите внимание, что при ООП-подходе много повторяющегося текста можно спрятать в mqh-файлы - как это сделано в обоих примерах выше. ООП может быть еще и лаконичным.
Особенности.
- Предложенная структура входных параметров является простой, что значительно расширяет возможности применения.
- "Измененные" структуры могут передаваться друг в друга через оператор присваивания. И всегда имеют один и тот же размер.
- Библиотека кроссплатформенная.
![MA Price display](https://c.mql5.com/i/code/indicator.png)
Индикатор написан по просьбе по просьбе на форуме.
![MT4Orders QuickReport](https://c.mql5.com/i/code/library.png)
Быстрая JavaScript версия библиотеки Report от fxsaber для торговых команд в стиле MT4 реализованных через MT4Orders или Virtual. Работает до 10 раз быстрее, размер НТМL файлов меньше, может выгрузить и отобразить до 5.4 млн. строк отчета.
![Simple_Pending_Orders_Time](https://c.mql5.com/i/code/expert.png)
Советник работает с отложенными ордерами Buy Stop и Sell Stop по времени, заданному в его входных параметрах.
![Simple_Price_EA](https://c.mql5.com/i/code/expert.png)
Простейший советник, который анализирует движение цены на заданном количестве баров и открывает соответствующую позицию.