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

 
Aleksei Stepanenko:

Лучше убрать. Если ордер не модифицировался, нужно запомнить это и на следующем тике произвести следующую попытку. А то Вы в цикле забомбите сервер.

чтобы не забомбить сервак для этого error и сравнивается с нулём, а потом error++ и void alarm(), то есть максимум 2 попытки в за один тик

 
А у Вас и запоминать не надо, тейки и стопы останутся нулевыми, просто уберите i--? и со следующим тиком будет новая попытка. 
 
Aleksei Stepanenko:
А у Вас и запоминать не надо, тейки и стопы останутся нулевыми, просто уберите i--? и со следующим тиком будет новая попытка. 

i-- не будет если error больше нуля

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

для этого error и сравнивается с нулём

Ну смотрите сами, 2 попытки в тик тоже не много. Но немного мудрёно. Если дожидаться следующего тика, код сильно упроститься. 

 
void alrm() обнулит error не раньше чем через 30 секунд - это чтоб мобилу не завалило сообщениями
 
EfremovSergey:

continue лишнее согласен, a i-- чтобы сделать вторую попытку

так не делают

хотите повторно выполнить действие организуйте внутри еще один дополнительный цикл и паузу поставьте 1000 - 3000 мс

примерно что то такое нужно писать:

bool result=false;
int j = 3;
while(!result && j>0)
{
   result=OrderModify(OrderTicket(),pr,sl,tp,0);
   if(result==false && error==0){err=("ErrorOrderModify"+Symbol()+GetLastError()); error++; alarm(); Sleep(1000);}
   j--;
}


но лучше найдите поиском по форуму "только полезные функции от КИМ" https://www.mql5.com/ru/forum/131859

и модифицируйте под свои задачи если не будет готовой функции, они все одинаково по логике написаны


UPD: наверное так будет лучше по теме топика )))

for(int j=0; j<3 && !result; j++;)
{....
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

Плюс к этому, делать в цикле попытки, мне кажется не очень идея.

Попробовали - не получилось - подождали следующий тик - снова попробовали.

Может сервер занят? Зачем долбить? А так отозвался, значит живой.
 
Igor Makanu:

так не делают

хотите повторно выполнить действие организуйте внутри еще один дополнительный цикл и паузу поставьте 1000 - 3000 мс

примерно что то такое нужно писать:


но лучше найдите поиском по форуму "только полезные функции от КИМ" https://www.mql5.com/ru/forum/131859

и модифицируйте под свои задачи если не будет готовой функции, они все одинаково по логике написаны

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

 
Aleksei Stepanenko:

Плюс к этому, делать в цикле попытки, мне кажется не очень идея.

Попробовали - не получилось - подождали следующий тик - снова попробовали.

+1