Советник не открывает позиции

 

  Дамы и господа!

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

  Вот, допустим, часть кода

  if (B==1)
  {
  MIN=10000;
  Order_Sell=1;
  Open_Sell_1=Bid;  
  t_MIN=0;
  t_MAX=0; 
  t_MIN1=0;
  t_MAX1=0; 
  AOMAX=0;
  AOMIN=0;
  AOMAX1=0;
  AOMIN1=0;  
  B=0;  
  start=0; 
  ticket1=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,MIN1+0.9*(MAX-MIN1),Bid-200*Point);
  if(OrderSelect(ticket1, SELECT_BY_TICKET)==true) ticket1=OrderTicket( );
  Alert ("Открыта продажа");
  } 

Сообщение, что открыта продажа появляется, а сделка не открывается, хотя всё находится в одном блоке.  На тестре всё без ошибок работает, а вот в on-line не все сделки открываются, хотя сообщение об открытие появляется. 

   Кто-нибудь сталкивался с такой проблеммой? Подскажите, пожалуйста, в чём дело.

 
И в журнале тоже смотрел. Не выдаёт никаких ошибок. Просто открытие сделки игнорируется.
 

В вашем случае сообщение "Открыта продажа" будет появляться вне зависимости от результата открытия позиции. Лучше сделать так:

ticket1=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,MIN1+0.9*(MAX-MIN1),Bid-200*Point);
if(ticket1 > 0)
  Alert ("Открыта продажа");
 else
  Print("Ошибка №", GetLastError());
 
 
MIN1+0.9*(MAX-MIN1)
а здесь что ?
 
satop >>:
а здесь что ?

Как что? Размер стопа. 

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

 
Scriptong >>:

В вашем случае сообщение "Открыта продажа" будет появляться вне зависимости от результата открытия позиции. Лучше сделать так:



  Ошибок никаких не выдаёт в журнале. Такое впечатление, что строки  

ticket1=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,MIN1+0.9*(MAX-MIN1),Bid-200*Point);
вообще нету.
 
FOReignEXchange >>:

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

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

 
Спсибо. Щас попробую
 

ERR_INVALID_STOPS 130 Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера). Попытку можно повторять только в том случае, если ошибка произошла из-за устаревания цены. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы. 


Вот такую вот ошибку выдаёт.


Проверял на советнике,где вот часть кода, которая открывает позиции 

if ((Bid-MIN)>30*Point && (Bid-MIN)<40*Point && N==0 && Order<=0)
   {
   OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Bid-20*Point,Ask+30*Point);
   N=1;
   Order=1;
   t_Close=0;
   Stop_Buy=Ask-20*Point;
   if (OrderSelect(ticket,SELECT_BY_POS)==true) ticket=OrderTicket();   
   if(ticket > 0)
   Alert ("Открыта покупка");
   else
   Print("Ошибка №", GetLastError());
   }   

Со стопами вроде всё нормально, а выдаёт ошибку 130.

 

Пробовал ставить стопы так 

OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-20*Point,Ask+30*Point);


Всё равно ошибка 130.

 

А теперь параллельно выведите в том же Print следующую информацию:

Print("Ошибка №", GetLastError(), ", стоплевел = ", MarketInfo(Symbol(), MODE_STOPLEVEL), ", спрэд = ", MarketInfo(Symbol(), MODE_SPREAD));

Скорее всего вы пытаетесь на пятизнаках выставить стоп в 20 пунктов, что на четырехзнаках эквивалентно 2-ум.

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