сontinue в for - страница 6

 
EfremovSergey:

Так а эта пауза не тормознёт весь алгоритм на 3 секунды? 3 секунды - это целая вечность для моего советника, это только маленький кусочек кода, а за ним ещё куча всяких событий висит

тормознет

сделайте паузу 100 мс

это опытным путем подбирается, но обычно если не дает сервер закрыть ордер на текущем тике, то повторные попытки мало что дают - проще на следующем тик повторить закрытие, в общем экспериментально подбирайте паузу

ЗЫ: RefrashRates() нужно обязательно после Sleep() использовать

 

Я бы убрал всю эту строчку:

if(result==false && error==0){err=("ErrorOrderModify"+Symbol()+GetLastError()); error++; alarm(); i--; continue;}

А вместо этого завести переменную, в которую записывать неудачные попытки на каждом тике. Ну дальше делать выводы: информировать и прекращать попытки.


И проверку на близость стопов и тейков к текущей цене обязательно. А то, это как раз первый кандидат на отказ сервера. 

 
Igor Makanu:

тормознет

сделайте паузу 100 мс

это опытным путем подбирается, но обычно если не дает сервер закрыть ордер на текущем тике, то повторные попытки мало что дают - проще на следующем тик повторить закрытие, в общем экспериментально подбирайте паузу

ЗЫ: RefrashRates() нужно обязательно после Sleep() использовать

Sleep тут как бы вроде и не требуется... В первом тике две попытки и отправка сообщения, потом попытка каждый новый тик до тех пор, пока void alarm() не обнулит error и так по кругу. Но можно две попытки и не делать, на каждом тике в любом случае советник будет пытаться выполнить условия прописанные в цикле for.

 
Aleksei Stepanenko:

Я бы убрал всю эту строчку:

А вместо этого завести переменную, в которую записывать неудачные попытки на каждом тике. Ну дальше делать выводы: информировать и прекращать попытки.


И проверку на близость стопов и тейков к текущей цене обязательно. А то это как раз первый кандидат на отказ сервера. 

Строчка завязана на void alarm(), в ней формируется текст отправляемого сообщения.

void OnTimer()
{
work(); 
alarm();
}

void alarm()
{ if(error==1)
  {
  SendNotification(err);                                 // отправляем сообщениe
  }                                                    
  
if(error>0)                                           // таймер задержки времени
   error++;
if(error>300)                                       // 30 секунд (300 циклов void OnTimer() по 100 мс)
   error=0;  
}  

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

 
EfremovSergey:

От проверки стопов желание их выставить не отменяется,

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

 
Aleksei Stepanenko:

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

Я вас понял, вполне. Просто на моём счету StopLevel=0 и можно стопиться хоть внутри спреда, это больше необходимо если сбой связи или что-то подобное.

 
Аааа, ну тогда Ок 
 
Aleksei Stepanenko:
Аааа, ну тогда Ок 

))

 
Парни, перешли к обсуждению несовместимых конструкций. GO ELSE, IF TО, ну и всё такое. Могу оттопыриться, но спиртное заканчивается.