не обнуляется m_position.Volume() при написании кастомного Cexpert Money. Доливка.

 

Доброго времени суток, форумчане!

долго шерстил форум в поисках похожих тем и проблем. нашёл несколько схожих, но не решающих мою проблему топиков. Надеюсь, что кто-нибудь сможет подсказать, в чём проблема.

Суть её такова, что есть модифицированный класс CExpert. который в функции Processing() открывает в одном инструменте позиции более 1ого раза, т.е. наращивает позицию при генерации сигнала в одну и ту же сторону.

после создания пользовательского класса CExpertMoney, в котором возвращался бы ноль, если объём текущей позциии был бы равен предельному возможному размеру позиции, но, почему-то, эта функция отрабатывает один раз, а дальше размер открытой позиции кэшируется и всегда равен 2.

это тем более странно, что функция m_position.Volume() используется и в других включаемых файлах без кэширования.

Моя конечная цель - сделать включаемый файл, который мог бы регулировать количество открытых лотов после доливки на n раз.

   double maxvol=2;
   double lot=0;
   if (m_position.Volume()>maxvol)
      lot=0;
      Print("THIS POS IS MAXED: ", m_position.Volume(), ", ", maxvol);

   if (m_position.Volume()<maxvol)   lot=m_lots;

изучив код CExpert я нашёл функцию MaxOrders, значение которой по умолчанию равно 1. пробовал менять её на любое другое значение - результата это не дало.


во вложении приложил включаемый файл, который можно присоединить к советнику из мастера MQL и воспроизвести результат.

результаты работы тестера во вложении

в отсутствие открытых позиций и сигнала на покупку возвращается кэшированное значение

        2015.01.12 10:30:00   THIS POS IS MAXED: 2.0, 2.0
        2015.01.12 10:30:00   false m_position.Volume(): 2.0, maxvol: 2.0, lot:0.0, m_lots: 1.0

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

Доброго времени суток, форумчане!

долго шерстил форум в поисках похожих тем и проблем. нашёл несколько схожих, но не решающих мою проблему топиков. Надеюсь, что кто-нибудь сможет подсказать, в чём проблема.

Суть её такова, что есть модифицированный класс CExpert. который в функции Processing() открывает в одном инструменте позиции более 1ого раза, т.е. наращивает позицию при генерации сигнала в одну и ту же сторону.

после создания пользовательского класса CExpertMoney, в котором возвращался бы ноль, если объём текущей позциии был бы равен предельному возможному размеру позиции, но, почему-то, эта функция отрабатывает один раз, а дальше размер открытой позиции кэшируется и всегда равен 2.

По признакам или условие неверное или не правильно работает цикл перебора позиций или может быть что угодно) весь код советника выложите и Вам смогут что то внятное ответить

Причина обращения: