Доливка в экспертах созданных при помощи МАСТЕРА MQL5 (стандартная библиотека)

 

Создаю эксперта при помощи Мастера MQL5 (стандартная библиотека), но в нем если уже есть открытая позиции не происходит доливки.

Хотел поменять поведение, но никак не получается разобраться где зашита проверка. 

Подскажите куда смотреть? 

 
Vassa:

Создаю эксперта при помощи Мастера MQL5 (стандартная библиотека), но в нем если уже есть открытая позиции не происходит доливки.

Хотел поменять поведение, но никак не получается разобраться где зашита проверка. 

Подскажите куда смотреть? 

Проверка "зашита" в методе bool CExpert::Processing()

bool CExpert::Processing()
  {
//--- check if open positions
   if(m_position.Select(m_symbol.Name()))
     {
      //--- open position is available
      //--- check the possibility of reverse the position
      if(CheckReverse()) return(true);
      //--- check the possibility of closing the position/delete pending orders
      if(!CheckClose())
        {
         //--- check the possibility of modifying the position
         if(CheckTrailingStop()) return(true);
         //--- return without operations
         return(false);
        }
     }
//--- check if plased pending orders

Смотрите на подчёркнутую строчку. Именно она отвечает за то, что если есть открытая позиция и ни каких действий с ней (позицией) не производилось (не развернули, не закрыли и не модифицировали), то //--- return without operations.

Предвосхищая Ваше желание внести изменения непосредственно в файл Expert.mqh, спешу сказать, что этого делать не нужно. При очередном апдейте, Вы можете потерять свои изменения.

Выхода два:

1. "Простой". Скопировать куда-нибудь файл Expert.mqh, и править копию. При этом нужно будет изменить путь к файлу Expert.mqh в Вашем эксперте (файле ???.mq5).

    У этого "выхода" есть один крупный недостаток: при изменениях стандартной библиотеки (а смею Вас заверить, изменения ещё будут), Ваш эксперт может их (изменения) не заметить.

2. "Правильный". Создать свой класс, унаследовав его от базового класса CExpert (типа CMyExpert : public CExpert). В своём классе потребуется переопределить только один метод:

   virtual bool      Processing();
    далее, Вы можете его (переопределённый метод) наполнять своим функционалом ни чего не боясь.
 
uncleVic:

    У этого "выхода" есть один крупный недостаток: при изменениях стандартной библиотекисмею Вас заверить, изменения ещё будут)


А когда 'Стандартеная библиотека' станет действительно Стандартной, замучился уже после каждой корректировки переделывать работающие на её основе скрипты , эксперты под новый 'имидж'.

Так мы никогда на реальный реал не выйдем. Кому нужны такие неожиданности, как-то, все сделки, позиции, начинают восприниматься, как Buy, в результате замены просто Type в методах классов СDealInfo, CPositiionInfo, CIOrderInfo на DealType, PositionType, OrderType ? И даже ошибки компиляции не выдаётся, только предупреждение о приведении типов.

 
Valmars:

А когда 'Стандартеная библиотека' станет действительно Стандартной, замучился уже после каждой корректировки переделывать работающие на её основе скрипты , эксперты под новый 'имидж'.

Так мы никогда на реальный реал не выйдем. Кому нужны такие неожиданности, как-то, все сделки, позиции, начинают восприниматься, как Buy, в результате замены просто Type в методах классов СDealInfo, CPositiionInfo, CIOrderInfo на DealType, PositionType, OrderType ? И даже ошибки компиляции не выдаётся, только предупреждение о приведении типов.

Мне очень жаль, но пришлось изменить наследование классов (для удобства дальнейшего использования). Такие "злобные" изменения, я думаю, были в последний раз.
 
uncleVic:
Мне очень жаль, но пришлось изменить наследование классов (для удобства дальнейшего использования). Такие "злобные" изменения, я думаю, были в последний раз.
Боюсь что нет, хотя надеюсь на обратное...
 
Interesting:
Боюсь что нет, хотя надеюсь на обратное...
Не-не. Бесполезно.
Причина обращения: