(MQL5) Объединение двух и более советников в один

 

Собственно вопрос как заголовок темы: какие существуют способы объединения двух или более советников в один на MQL5?

Первый вариант я знаю! Но все же!

 

Исходники

Каждый советник подключается к мультисоветнику через макросы + инклуд.

Далее прописываются однотипные On-функции. Любой советник подключается к мультисоветнику за минуту.

Сильно желательно, чтобы глобальные функции и переменные не пересекались.


EX5

Пишется один советник, который открывает нужное количество чартов и запускает на каждом нужного советника. При удалении мультисоветника все делается в обратном порядке - закрываются чарты.

 
fxsaber:

Исходники

Каждый советник подключается к мультисоветнику через макросы + инклуд.

Далее прописываются однотипные On-функции. Любой советник подключается к мультисоветнику за минуту.

Сильно желательно, чтобы глобальные функции и переменные не пересекались.


EX5

Пишется один советник, который открывает нужное количество чартов и запускает на каждом нужного советника. При удалении мультисоветника все делается в обратном порядке - закрываются чарты.

Да, как вариант! А если все объединить несколько в один код, через триггеры?

 
issah5:

Да, как вариант! А если все объединить несколько в один код, через триггеры?

В один код - см. "Исходники".

 
fxsaber:

В один код - см. "Исходники".

Опять же на примере того же N-_Candles . Как правильно можно соединить два одинаковых советника чтобы каждый фрагмент торговал по своей валютной паре? Смотрел на примере MQL4 с примером кода

// Список внешних переменных обоих экспертов
.........
extern bool Expert_1 = true; 
extern bool Expert_2 = true;

//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
if (Expert_1)  
   Expert_1(//Список фактических параметров эксперта 1);
if (Expert_2)  
   Expert_2(//Список фактических параметров эксперта 2);  
   return(0);
  }
//+------------------------------------------------------------------+
void Expert_1(//Список формальных параметров эксперта 1)
  {
   // Код эксперта 1
   .........
   return(0);
  }
void Expert_2(//Список формальных параметров эксперта 2)
  {
   // Код эксперта 2
   .........
   return(0);
  }
 
issah5:

Опять же на примере того же N-_Candles . Как правильно можно соединить два одинаковых советника чтобы каждый фрагмент торговал по своей валютной паре? Смотрел на примере MQL4 с примером кода

Извините, не интересно.

 

"Прямое" объединение советников в код - нереально. Как минимум потому, что в каждом из них есть функции обработки событий.

Однако, сама идея - вполне реализуема. 

То есть, имеется один шаблон, содержащий все необходимые функции, и способный подключать к себе модули, отрабатывающие правила ТС.

Скажем, вот код моего советника, содержащего 4 ТС:

#include <MyLib\DebugOrRelease\DebugSupport.mqh>
#include <MyLib\Common\CurSymEnum.mq5>

#include <MyLib\Factories\ForTrade\EURJPY\EURJPY_FactoriesIncludes.mqh>


CTrendSAR_EURJPY_01_EPF epfFact_1(NULL);
CTrendSP_EURJPY_01_EPF epfFact_2(NULL);
CFlatSP_EURJPY_01_EPF epfFact_3(NULL);
CFlatSAR_EURJPY_01_EPF epfFact_4(NULL);

// Файл шаблона советника
#include <MyLib\TSTemplate\ExpertAdvisorT.mq5>

В данном случае - 4 ТС предназначены для работы на евроиене, две трендовых ТС, две флетовых ТС.

Подключение ТС состоит чисто в объявлении класса этой ТС - все необходимые действия содержатся внутри самих классов. Каждый класс описан в своей паре файлов mqh-mq5, и все эти 8 файлов - подключаются через общий файл EURJPY_FactoriesIncludes.mqh

Функции же обработки сообщений - содержатся в шаблоне ExpertAdvisorT.mq5

 
https://www.mql5.com/ru/articles/2179
Универсальный торговый эксперт: Торговля в группе и управление портфелем стратегий (Часть 4)
Универсальный торговый эксперт: Торговля в группе и управление портфелем стратегий (Часть 4)
  • 2016.02.03
  • Vasiliy Sokolov
  • www.mql5.com
Довольно часто приходится создавать алгоритмы, которые должны "уживаться" друг с другом, т.е. на работу каждого отдельного алгоритма не должна влиять работа других алгоритмов, происходящая в это же время. Эта ситуация возникает, когда необходимо объединить несколько алгоритмов в один исполняющий модуль ex5. Несмотря на свою кажущуюся простоту...
 
Спасибо за подсказки! но так и не разобрался... воспользуюсь первым вариантом )
 

Все элементарно делается на плагинах. Техника плагинов давно отработана, см. по ссылке

В гугле вбить "c++ система плагинов"

 
George Merts:

"Прямое" объединение советников в код - нереально. Как минимум потому, что в каждом из них есть функции обработки событий.

Однако, сама идея - вполне реализуема. 

То есть, имеется один шаблон, содержащий все необходимые функции, и способный подключать к себе модули, отрабатывающие правила ТС.

Скажем, вот код моего советника, содержащего 4 ТС:

В данном случае - 4 ТС предназначены для работы на евроиене, две трендовых ТС, две флетовых ТС.

Подключение ТС состоит чисто в объявлении класса этой ТС - все необходимые действия содержатся внутри самих классов. Каждый класс описан в своей паре файлов mqh-mq5, и все эти 8 файлов - подключаются через общий файл EURJPY_FactoriesIncludes.mqh

Функции же обработки сообщений - содержатся в шаблоне ExpertAdvisorT.mq5

а как реализовано переключение трендовой от флетовой стратегий?