Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Часто выкладываешь исходный код? Узнай, как это делать правильно!
natural
29
natural 2014.06.26 10:11 

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

void OnTick()

{

  if (Kolichestvo_orderov() == 0)

    { 

       ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Proskalzovanie, 0, 0, "", Magic_nomer, 0, Blue);

       if (ticket > 0 )

         {

          TP = NormalizeDouble (Ask + TakeProfit * Point, Digits);

          ticket = OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);

         }

    } 

     

     

     else

     {

      int opredelenie_tipa_ordera = Vizov_funkcii_poiska_tipa_ordera();

      if (opredelenie_tipa_ordera == OP_BUY)

       {

        cena = Vizov_funkcii_poiska_poslednei_ceny_na_pokupku(OP_BUY);

        if(Ask <= cena - Shag_mejdu_orderami * Point)

          {

           Posledni_lot = Poisk_poslednego_lota(OP_BUY);

           Posledni_lot = NormalizeDouble (Posledni_lot * Koficent_umnojeniya, 2);

           ticket = OrderSend(Symbol(), OP_BUY, Posledni_lot, Ask, Proskalzovanie, 0, 0, "", Magic_nomer, 0, Blue);

           if (ticket > 0)

           Modifik_Order(OP_BUY);

          }

        }

        

      

      }

      return;

}  

//+-----------------------------------------------------------------------------------------------------------------------------------------------------+

void Modifik_Order(int tip_ordera)

{

    double p_cena = 0;

                    

    for (int i = OrdersTotal()-1; i>=0; i--)

    {

        if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))

          {

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_nomer && OrderType() == OP_BUY)

            cena = OrderOpenPrice();

            p_cena = NormalizeDouble(cena - (Shag_mejdu_orderami / 2) * Point, Digits);

            TP = NormalizeDouble(p_cena + TakeProfit * Point, Digits);

          }

     }

          

     for (int i = OrdersTotal()-1; i>=0; i--)

    {

        if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))

          {

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_nomer && OrderType() == OP_BUY)

            {

               stariy_lot = OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0);

            }

          }

    }

Карпутов Владимир
203
Карпутов Владимир 2014.06.26 11:12  

Для вставки кода используйте, пожалуйста, кнопку вставки кода: Правильно вставляем код на форуме

По Вашему коду: при наличии ордеров >0 идёт вызов нескольких функций :

Vizov_funkcii_poiska_poslednei_ceny_na_pokupku(OP_BUY)

и т. п.

Пройдите в режиме пошаговой отладки и просмотрите какие значения передаются на модификацию ордера.

natural
29
natural 2014.06.26 17:01  
спасибо за ответ кажется понял где ошибка
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий