Модификация ордера ошибка 130

 

Всем привет! Советник работает хорошо, но бывает выскакивает ошибка 130, а бывает не выставляет ТП, бывает очень редко, в основном на движухе и то не всегда. Но это очень напрягает. Вот кусок кода и модификация ордера. NumberOfTry=5 , то есть всего 5 попыток. Понимаю, что цена за это время пока он крутит эти 5 попыток цикле уходит дальше чем ТП+Проскальзывание и потому вылетает эта ошибка 130. Но как сделать, чтобы он открывал по цене какая есть? Хотя тоже понимаю, что цена может рвануть сильно и никакое проскальзывание не спасёт и будет невозможно выставить ТП даже по новой цене или это не так? В общем, помогите опытные товарищи, советом как поступить?!

{                     
         int TpOneBuy = 0;
         TpOneBuy = Mass[CountTradesBuy()];
         ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,comment,Magic,0,Blue);
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               {
                  TPBuy=NormalizeDouble(Ask+TpOneBuy*Point,Digits);
                  for(CountTP=0; CountTP<NumberOfTry; CountTP++) // Цикл повторения попыток установки ТР
                     {
                        if(OrderModify(ticket,OrderOpenPrice(),0,TPBuy,0)) break;
                           else
                              {
                                 ErrorTP=GetLastError();
                                 Print("Ошибка установки TP Buy = ",ErrorTP);
                                 Sleep(400);
                              }
                     }
               }
 
Artem Onopin:

Всем привет! Советник работает хорошо, но бывает выскакивает ошибка 130, а бывает не выставляет ТП, бывает очень редко, в основном на движухе и то не всегда. Но это очень напрягает. Вот кусок кода и модификация ордера. NumberOfTry=5 , то есть всего 5 попыток. Понимаю, что цена за это время пока он крутит эти 5 попыток цикле уходит дальше чем ТП+Проскальзывание и потому вылетает эта ошибка 130. Но как сделать, чтобы он открывал по цене какая есть? Хотя тоже понимаю, что цена может рвануть сильно и никакое проскальзывание не спасёт и будет невозможно выставить ТП даже по новой цене или это не так? В общем, помогите опытные товарищи, советом как поступить?!

Добрый день.
замените Аsк на MarketInfo(_Symbol,MODE_ASK)
в большинстве случаев помогает.

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

с уважением.
 
Andrey Kisselyov:
Добрый день.
замените Аsк на MarketInfo(_Symbol,MODE_ASK)
в большинстве случаев помогает.

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

с уважением.

Спасибо буду пробовать. Вот что получилось))

{                     
         int TpOneBuy = 0;
         TpOneBuy = Mass[CountTradesBuy()];
         ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,comment,Magic,0,Blue);
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               {
                  for(CountTP=0; CountTP<NumberOfTry; CountTP++) // Цикл повторения попыток установки ТР
                     {
                      TPBuy=NormalizeDouble(MarketInfo(_Symbol,MODE_ASK)+TpOneBuy*Point,Digits);
                        if(OrderModify(ticket,OrderOpenPrice(),0,TPBuy,0)) break;
                           else
                              {
                                 ErrorTP=GetLastError();
                                 Print("Ошибка установки TP Buy = ",ErrorTP);
                                 Sleep(400);
                              }
                     }
               }
     }
 
Artem Onopin:

Спасибо буду пробовать. Вот что получилось))

на ордере я бы то же аск поменял.
да и написал бы по другому, но это уже другая история.)))

с уважением
 
Andrey Kisselyov:
на ордере я бы то же аск поменял.
да и написал бы по другому, но это уже другая история.)))

с уважением

А нельзя ли по подробней, почему не Ask и как можно по другому написать? Можно просто словами объяснить код не обязательно, мне для расширения кругозора))

Если на счёт применения continue; Это я помню и обязательно применю, код действительно работает быстрее.

 
Artem Onopin:

А нельзя ли по подробней, почему не Ask и как можно по другому написать? Можно просто словами объяснить код не обязательно, мне для расширения кругозора))

Если на счёт применения continue; Это я помню и обязательно применю, код действительно работает быстрее.

не нужно торопиться, все придет с опытом, а пытливый ум сделает ваши навыки совершенными, но для того чтоб все произошло нужно пробовать разные варианты, смотреть справку, очень много работать и так далее.
как то ко мне обратился человек, узнал что я программист, и задал вопрос по программированию(прислал свой код) а в ответ получил не 10 строчек своего кода, а одну строчку моего, и был очень удивлен. спросил "а как, где можно этому научиться?" и услышал ответ "все придет с опытом"...

с уважением.
 
Andrey Kisselyov:
не нужно торопиться, все придет с опытом, а пытливый ум сделает ваши навыки совершенными, но для того чтоб все произошло нужно пробовать разные варианты, смотреть справку, очень много работать и так далее.
как то ко мне обратился человек, узнал что я программист, и задал вопрос по программированию(прислал свой код) а в ответ получил не 10 строчек своего кода, а одну строчку моего, и был очень удивлен. спросил "а как, где можно этому научиться?" и услышал ответ "все придет с опытом"...

с уважением.

Спасибо, намек понял)))

 
Andrey Kisselyov:

А стот ли мне сделать проверку на допустимую дистанцию ТП к рыночной цене, ведь по этой причине тоже может быть ошибка 130 ?
 
Artem Onopin:
А стот ли мне сделать проверку на допустимую дистанцию ТП к рыночной цене, ведь по этой причине тоже может быть ошибка 130 ?
вариантов много.
самый быстрый из них выбрать максимальное из двух, ваш тейк или минимально допустимую дистанцию.

с уважением.
 
Artem Onopin:

Всем привет! Советник работает хорошо, но бывает выскакивает ошибка 130, а бывает не выставляет ТП, бывает очень редко, в основном на движухе и то не всегда. Но это очень напрягает. Вот кусок кода и модификация ордера. NumberOfTry=5 , то есть всего 5 попыток. Понимаю, что цена за это время пока он крутит эти 5 попыток цикле уходит дальше чем ТП+Проскальзывание и потому вылетает эта ошибка 130. Но как сделать, чтобы он открывал по цене какая есть? Хотя тоже понимаю, что цена может рвануть сильно и никакое проскальзывание не спасёт и будет невозможно выставить ТП даже по новой цене или это не так? В общем, помогите опытные товарищи, советом как поступить?!


Вы сначала открываетесь а потом модифицируете? Может проще сразу открываться с Тейком?

 
Evgeny Belyaev:

Вы сначала открываетесь а потом модифицируете? Может проще сразу открываться с Тейком?


Не все конторы это позволяют, так, для справки.