(MQL5) Объединение двух и более советников в один - страница 2

 
Mickey Moose:

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

Тебе-то зачем? Ну, автоматом ))) Можно кнопочкой

 
Mickey Moose:

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

В смысле ? У меня никаких переключений.

Каждая ТС - это просто объект, наследник базового класса-шаблона CEAPartsFactoryT (темплейт фабрики частей эксперта), в своем конструкторе она прописывается в глобальный статический массив. Соответственно, в приведенном примере, на этапе начальной инициализации - в статическом массиве оказываются четыре указателя.

Далее, общий "каркас" советника в стандартной функции OnInit() просматривает этот массив, проверяет, чтобы указатели в нем указывали на существующие объекты-ТС, проверяет, чтобы не повторялись магики, и вызывает функцию OnInit() у каждого из указателей.

Затем, в стандартной функции OnTick() - этот общий "каркас" вызывает у каждого указателя функцию OnTick().

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

Соответственно, отдельные ТС друг про друга "не знают". У них есть возможность выяснить это, я ее предусмотрел, но пока ни разу не пользовался - нужды не было.

В приведенном коде - две трендовых и две флетовых ТС работают совершенно независимо. "Переключения", как такового, нет - каждый OnTick() проходит во все четыре ТС, и уже сами ТС смотрят, когда им работать, а когда нет.  В теории может быть открыто куча одинаковых сделок, причем половина будет открыта трендовыми, а другая - флетовыми ТС.  

Реально - каждая ТС оптимизируется отдельно, и если ограничение по времени показывает улучшение результатов - оно будет задействовано. Но, опять же - совершенно независимо для всех четырех (или сколько их там будет) ТС.

 


 
Georgiy Merts:

В смысле ? У меня никаких переключений.

Каждая ТС - это просто объект, наследник базового класса-шаблона CEAPartsFactoryT (темплейт фабрики частей эксперта), в своем конструкторе она прописывается в глобальный статический массив. Соответственно, в приведенном примере, на этапе начальной инициализации - в статическом массиве оказываются четыре указателя.

Далее, общий "каркас" советника в стандартной функции OnInit() просматривает этот массив, проверяет, чтобы указатели в нем указывали на существующие объекты-ТС, проверяет, чтобы не повторялись магики, и вызывает функцию OnInit() у каждого из указателей.

Затем, в стандартной функции OnTick() - этот общий "каркас" вызывает у каждого указателя функцию OnTick().

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

Соответственно, отдельные ТС друг про друга "не знают". У них есть возможность выяснить это, я ее предусмотрел, но пока ни разу не пользовался - нужды не было.

В приведенном коде - две трендовых и две флетовых ТС работают совершенно независимо. "Переключения", как такового, нет - каждый OnTick() проходит во все четыре ТС, и уже сами ТС смотрят, когда им работать, а когда нет.  В теории может быть открыто куча одинаковых сделок, причем половина будет открыта трендовыми, а другая - флетовыми ТС.  

Реально - каждая ТС оптимизируется отдельно, и если ограничение по времени показывает улучшение результатов - оно будет задействовано. Но, опять же - совершенно независимо для всех четырех (или сколько их там будет) ТС.

 


Мне интересна эта тема. Но к сожелению не так хорошо знаком с програмированием. А у вас  шаблона не найдется для общего каркаса? 
 

у меня для этих целей создан класс расчета канала и класс торговли. 

создаю сколько надо копий или вызываю разные стратегии. для каждой вызываю свой торговый класс. И все отлично работает.