Различная отработка в тестере и реале.

 
if (op==1){
   if (OrdersTotal()!=0) {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);OrderClose(OrderTicket(),OrderLots(),Ask,35,Red);}
   OrderSend(Symbol(),OP_SELL,lot,Bid,5,0,0,"A",16384,0,Blue);
          }
if (op==2){
   if (OrdersTotal()!=0) {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);OrderClose(OrderTicket(),OrderLots(),Bid,35,Red);}
   OrderSend(Symbol(),OP_BUY,lot,Ask,5,0,0,"A",16384,0,Blue);
          }

При отработке в тестере все нормально. А вот при отработке в реале, бывает, но не каждый раз. Что через какое то время открывается еще 1 ордер в ту же сторону. Каким образом это происходит для меня загадка.



 
Aver:
if (op==1){
   if (OrdersTotal()!=0) {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);OrderClose(OrderTicket(),OrderLots(),Ask,35,Red);}
   OrderSend(Symbol(),OP_SELL,lot,Bid,5,0,0,"A",16384,0,Blue);
          }
if (op==2){
   if (OrdersTotal()!=0) {OrderSelect(0,SELECT_BY_POS,MODE_TRADES);OrderClose(OrderTicket(),OrderLots(),Bid,35,Red);}
   OrderSend(Symbol(),OP_BUY,lot,Ask,5,0,0,"A",16384,0,Blue);
          }

При отработке в тестере все нормально. А вот при отработке в реале, бывает, но не каждый раз. Что через какое то время открывается еще 1 ордер в ту же сторону. Каким образом это происходит для меня загадка.

Ваш кусок кода совершенно не о чем не говорит но судя по коду

если вы формируете op=1 то у вас откроется SELL

если через минуту вы его еще раз сформируете у вас закроется SELL и опять откроется SELL

Вам поможет распринтовка!

ВСТАВЛЯЙТЕ до выполненияи и после выполнения Print(.... ваши переменные

кроме того ВАШ код очень прост и не сожержит обработку ошибок - анализ на открытие позиции после сигнала

а если ваш сигнал был а позиция не открылась? сигнал будет пропущен - разумеется если он не формируется повторно при остутвии позиции

торговый КОД не может и не должен быть примитивным

---

реал быстро расставляет на места все недочеты тестера

 

op=1  и op=2 не может быть сформирован 2 раза подряд. Но вопрос не об этом.

Если вы заметили то перед открытием ордера происходит закрытие открытых, если таковые имеются. Так что суть вопроса, почему не происходит закрытия.

Так что как формируется op - дело десятое.

 
Aver:

op=1 и op=2 не может быть сформирован 2 раза подряд. Но вопрос не об этом.

Если вы заметили то перед открытием ордера происходит закрытие открытых, если таковые имеются. Так что суть вопроса, почему не происходит закрытия.

Так что как формируется op - дело десятое.

При попытке закрытия советник получает реквот, а при попытке открытия не получает.



Надо переделать код:



if (OrderClose(...)) {

OrderSend(...);

}


т.е. воткнуть проверку на предмет закрытия предыдущей позы.


В тестере реквоты не бывают, а отсюда и разница

 
Reshetov:
Aver:

op=1 и op=2 не может быть сформирован 2 раза подряд. Но вопрос не об этом.

Если вы заметили то перед открытием ордера происходит закрытие открытых, если таковые имеются. Так что суть вопроса, почему не происходит закрытия.

Так что как формируется op - дело десятое.

При попытке закрытия советник получает реквот, а при попытке открытия не получает.



Надо переделать код:



if (OrderClose(...)) {

OrderSend(...);

}


т.е. воткнуть проверку на предмет закрытия предыдущей позы.


В тестере реквоты не бывают, а отсюда и разница

Ясно. Благодарю.

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