Помогите разобраться с error 130. Почему Invalid S/L or T/P ???

 

Эксперт пробует открыть позицию, а сервер возвращает ошибку130

10:53:41 '1263805': instant order buy 1.00 GBPCAD at 1.82150 sl: 1.80644 tp: 1.84325
10:53:41 '1263805': order buy 1.00 GBPCAD opening at 1.82150 sl: 1.80644 tp: 1.84325 failed [Invalid S/L or T/P]
10:53:41 '1263805': instant order buy 1.00 GBPCAD at 1.82140 sl: 1.80644 tp: 1.84299
10:53:42 '1263805': order buy 1.00 GBPCAD opening at 1.82140 sl: 1.80644 tp: 1.84299 failed [Invalid S/L or T/P]
10:53:42 '1263805': instant order buy 1.00 GBPCAD at 1.82120 sl: 1.80644 tp: 1.84247
10:53:43 '1263805': order buy 1.00 GBPCAD opening at 1.82120 sl: 1.80644 tp: 1.84247 failed [Invalid S/L or T/P]
значения SL и TP вродебы установлены верно.... В ручном режиме с данными значениями SL и TP ордер проходит, а в эксперте нет :(

Код вроде тоже составлен верно:

RefreshRates();  
  BID = MarketInfo("GBPCAD",9);  
  ASK = MarketInfo("GBPCAD",10);  
  SL=iMA("GBPCAD",5,8,0,1,0,24);  
  TP=BID + (BID-SL)*2;  
  Ticket=OrderSend("GBPCAD",OP_BUY,Lots,ASK,20,SL,TP);  

Заранее благодарен.

 

Скорее всего потому, что ваш ДЦ может без видимых причин на часок-другой увеличить стопуровни.

 StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);

Например,  если допустимые значения стопуровней =10, то часто перед новостями, а ещё чаще  "просто так" (чтоб жизсть малиной не казалась) какой ниб нетрезвый сотрудник ДЦ может увеличить стопуровень до 30 и более.

И если в коде этот форсмажор  не предусмотрен, то журнал дает ошибку!

Попробуйте так:

В ОРДЕРСЕНД замените стопы на _sl  и  _tp

int init()
{
if(SL<StopLevel) _sl = StopLevel; else _sl=SL;
if(TP<StopLevel) _tp = StopLevel; else _tp=TP;
.... ....
int start()
{
 
 StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);

 

только у топикстартера не 10 и даже не 30 а где-то 150 и 200.

РоманС, попробуй значения тейка и лося округлить до 4 знаком после занятой.

котировки идут с 5-ю знаками, но ограничение на тейки и лоси может быть до 4.

Но я не уверен

 
Скорее всего так и есть, так как для этой пары установлено 5 знаком после запятой, но последний знак всегда 0.
 
rid >>:

Скорее всего потому, ДЦ может без видимых причин на часок-другой увеличить стопуровни.

Например,  если допустимые значения стопуровней =10, то часто перед новостями, а ещё чаще  "просто так" (чтоб жизсть малиной не казалась) какой ниб нетрезвый сотрудник ДЦ может увеличить стопуровень до 30 и более.

И если в коде этот форсмажор  не предусмотрен, то журнал дает ошибку!

10:53:41 '1263805': instant order buy 1.00 GBPCAD at 1.82150 sl: 1.80644 tp: 1.84325

считаем 1,82150-1,80644=0,01506 т.е. 1506 пунктов это насколько нужно быть нетрезвым, чтоб настолько задрать стопуровень, к тому же на следующий день ситуация повторилась. Тут проблема в другом зарыта, поэтому я интерисуюсь, кто-нибудь с таким сталкивался??? какие еще события могут приводить к ошибке 130???

 

Ну тогда можно вот так:

int init()
{
if(SL<StopLevel) _sl = StopLevel; else _sl=SL;
if(TP<StopLevel) _tp = StopLevel; else _tp=TP;

if(Digits == 5)
  {//Для котировок с 6-ти значн. нумерацией
   TP = TP * 10;
   SL = SL * 10;
   TrailingStop = Trailing*10;
   Max_Spread = Max_Spread*10;
  
   } 

}
 
Piccioli >>:
Скорее всего так и есть, так как для этой пары установлено 5 знаком после запятой, но последний знак всегда 0.

Спасибо за совет, сейчас попробую. Хотя вчера советник мин 5 долбился за 5 мин. мог быть и "0"....

Хотя если учесть что "0" должен быть и у с.л. и у т.п. то да... такое возможно

 
Огромное спасибо Piccioli, все получилось, причина была действительно в 4 знаке
Причина обращения: