Странные заходы по торговой системе

 
Здравствуйте. Написал советника по 2 скользящим и RSX. Стратегия простая. Прогонял в тестере за годы, всё отлично. Когда запустил онлайн. Бывает возникают моменты, когда советник находится в Лонге и просто перезаходит в позицию - Закрывает позицию и сразу же открывает. Код стандартный.


if (Buy_Condition)
     {
         // есть ли в данный момент открытая позиция на покупку?
         if (Buy_opened || Sell_opened) 
         {
            Print("Уже открыта позиция!!!");
            return; // не добавлять к открытой позиции на покупку
         }
               
               double BuyPrice=NormalizeDouble(mysymbol.Ask(),_Digits);               //--- последняя цена ask
               stloss = NormalizePrice(_Symbol,mrate[1].close - atr[1]*percentStopATR*_Point); //--- Stop Loss
               if(mytrade.Buy(1,_Symbol,BuyPrice,stloss,0)) 
               {
                 Print("Ордер на покупку был успешно размещен, Ticket#:",mytrade.ResultOrder(),"!!");
                 BuyTicket = mytrade.ResultOrder();
                 isBuy = true;
               }
                else
                 {
                    Print("Ордер на покупку объема:",mytrade.RequestVolume(), 
                          ", sl:", mytrade.RequestSL(),
                          ", цена:", mytrade.RequestPrice(), 
                          " не выполнен -ошибка:",mytrade.ResultRetcodeDescription());
                    return;
                 }
       }
  
В чем может быть ошибка или почему он себя так ведет? В коде нету больше мест, где присутствуют торговые команды. 
 
Fresto:
Здравствуйте. Написал советника по 2 скользящим и RSX. Стратегия простая. Прогонял в тестере за годы, всё отлично. Когда запустил онлайн. Бывает возникают моменты, когда советник находится в Лонге и просто перезаходит в позицию - Закрывает позицию и сразу же открывает. Код стандартный.


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

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

bool Buy_Condition = (maF[2] < maS[2] && maF[1] > maS[1] && rsx[1] < UP); // При пересечении скользящих maF и maS и значение rsx меньше UP
А на счет нулевого бара, где он у меня тут задействован? Везде же индекс 1. 0 бар под индексом 0.
 
Вопрос не в условии открытия, а в условии закрытия.
 
Слышали про клиринги? Если нет - советую почитать вот эту статью: https://www.mql5.com/ru/articles/1284
Основы биржевого ценообразования на примере срочной секции Московской биржи
Основы биржевого ценообразования на примере срочной секции Московской биржи
  • 2014.12.12
  • Vasiliy Sokolov
  • www.mql5.com
Статья описывает теорию биржевого ценообразования и специфику клиринговых расчетов срочной секции Московской биржи. Материал будет интересен как начинающим трейдерам, желающим получить свой первый биржевой опыт по торговле деривативами, так и опытным форекс-трейдерам, рассматривающих возможность переноса своей торговли на централизованную биржевую площадку.
 
Alexey Kozitsyn:
Слышали про клиринги? Если нет - советую почитать вот эту статью: https://www.mql5.com/ru/articles/1284

Спасибо большое. Не знал, что в МТ5 показывается подряд несколько позиций в связи с клирингом.