Обсуждение статьи "Разрабатываем мультивалютный советник (Часть 1): Совместная работа нескольких торговых стратегий" - страница 3

 
Yuriy Bykov #:

занимаюсь переделкой по сути почти с нуля своего ранее написанного кода за последние несколько лет

При рефакторинге всегда хочется сделать так, чтобы потом не переделывать и было удобно/перспективно.

Child( const string sInputs ) : Parent(sInputs)
{
  this.SetInputs(sInputs);
}

virtual int SetInputs( const string sInputs )
{
  return(this.Inputs.FromString(sInputs) + this.Parent::SetInputs(sInputs));
} 

В итоге к такому решению работы со входными пришел.

 
fxsaber #:

При рефакторинге всегда хочется сделать так, чтобы потом не переделывать и было удобно/перспективно.

Видится архитектурно-перспективным, когда CStrategy делится на три сущности: торговое ядро (дает сигналы), торговая часть (осуществляет торговлю сигналов) и ММ

class CSimpleVolumeStrategy : public CStrategy {
private:
   //---  Параметры сигнала к открытию
   int               signalPeriod_;       // Количество свечей для усреднения объемов
   double            signalDeviation_;    // Относ. откл. от среднего для открытия первого ордера
   double            signaAddlDeviation_; // Относ. откл. от среднего для открытия второго и последующих ордеров

   //---  Параметры отложенных ордеров
   int               openDistance_;       // Расстояние от цены до отлож. ордера
   double            stopLevel_;          // Stop Loss (в пунктах)
   double            takeLevel_;          // Take Profit (в пунктах)
   int               ordersExpiration_;   // Время истечения отложенных ордеров (в минутах)

   //---  Параметры управление капиталом
   int               maxCountOfOrders_;   // Макс. количество одновременно отрытых ордеров

Здесь все скопом. А ведь удобно, когда можно поменять то же ядро (new Core2 вместо new Core1) с другими входными. При этом замену делать без какой-либо возни со входными, т.к. они задаются синтаксически одинаково - строка.


Аналогично с управлением и ММ. В общем, предлагаю еще раз подумать над универсальной архитектурой.

 
fxsaber #:
Видится архитектурно-перспективным, когда CStrategy делится на три сущности: торговое ядро (дает сигналы), торговая часть (осуществляет торговлю сигналов) и ММ...

Так уже, кажется, такой подход реализован в СБ - класс CExpert.

И даже есть класс  CStrategy у Василия Соколова ))

Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
  • www.mql5.com
CExpert - Базовые классы экспертов - Модули стратегий - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Стандартный класс CExpert видел, но он мне не подошел. В нем было добавлено слишком много того, что мне было не нужно. Еще несколько обескураживала иерархия наследования, когда базовый класс для реализации алгоритмов управления капиталом и рисками и базовый класс для создания генераторов торговых сигналов унаследованы от одного базового класса.

Цикл статей Васили Соколова не видел, спасибо за ссылку, посмотрю.

 
Denis Kirichenko #:

Так уже, кажется, такой подход реализован в СБ - класс CExpert.

Там, похоже, решалась задача встройки в Мастер стратегий. Т.е. исходный подход совсем иной. Безусловно, некие пересечения имеются, но это, скорее, совпадение.

 
Denis Kirichenko #:

И даже есть класс  CStrategy у Василия Соколова ))

Мне видится, что архитектурный скелет должен быть предельно лаконичным и простым в использовании. Поэтому базовый класс ТС такой.

Дальше небольшое обрастание сухожилиями. Должно быть очень просто.

К сожалению, у Василия иной подход.

 
fxsaber #:

Мне видится, что архитектурный скелет должен быть предельно лаконичным и простым в использовании. Поэтому базовый класс ТС такой.

Дальше небольшое обрастание сухожилиями. Должно быть очень просто.

Есть нечто похожее простое (в интерфейсном плане), но расширенное (в плане реализации) в книге.

interface TradingSignal
{
   virtual int signal(void);
};

interface TradingStrategy
{
   virtual bool trade(void);
};

...
...
AutoPtr<TradingStrategy> strategy;
   
int OnInit()
{
   strategy = new SimpleStrategy(
      new BandOsMaSignal(...параметры...), Magic, StopLoss, Lots);
   return INIT_SUCCEEDED;
}
   
void OnTick()
{
   if(strategy[] != NULL)
   {
      strategy[].trade();
   }
}
...
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
  • www.mql5.com
Автоматизация торговли - Программирование на MQL5 для трейдеров - Учебник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Stanislav Korotky #:

Есть нечто похожее простое (в интерфейсном плане), но расширенное (в плане реализации) в книге.

Где скачать исходники?

 
fxsaber #:

Где скачать исходники?

https://www.mql5.com/ru/code/45595

Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
  • www.mql5.com
В шестой части книги "Программирование на MQL5 для трейдеров" мы изучим ключевую составляющую языка MQL5 — автоматизацию торговли. Начнем с описания основных сущностей, таких как спецификации финансовых инструментов и настройки торгового счета, которые необходимы для создания корректных советников.
Причина обращения: