Нкжна помощь в завершении бота.

 

кто может подсказать как решить проблему закрытия ордера? Есть код выполнения на закрытие

код закрытия

выполняет не правильное закрытие сделки

  не правильное закрытие

при установке правильного условия 


бот отказывается принимать это условие

сделка без закрытия

вопрос остается открытым в чем причина? И как правильно написать код?

 
всё херня - переделывай, для начала ордер можно было бы и выбрать для приличия функцией OrderSelect(), а там уже видно будет
 

Во первых правильно вставьте код.
По коду у вас проверка по ASK позиции BUY. А закрывается она по BID. Вполне может быть что из-за этого и не правильные закрытия. Спред ни кто не отменял.

Ну и выбор ордера вполне логичен. Хотя может он у вас выбран уже в другой функции.
 
1leprecon1:

вопрос остается открытым в чем причина?

В том, что непонятно, какой именно ордер выбран. Вполне возможно, что OrderType(), OrderTicket() и OrderLots() указывают на Луну.

И как правильно написать код?

О таких проблемах лучше писать соответствующем разделе форума (для МТ4), а код вставлять через Alt+S.

 
Ihor Herasko:

В том, что непонятно, какой именно ордер выбран. Вполне возможно, что OrderType(), OrderTicket() и OrderLots() указывают на Луну.


Если указывает на луну то почему проверку закрытия ордера проходит? Включая проверку закрытия условия по RSI.
 
Konstantin Nikitin:

Во первых правильно вставьте код.
По коду у вас проверка по ASK позиции BUY. А закрывается она по BID. Вполне может быть что из-за этого и не правильные закрытия. Спред ни кто не отменял.

Ну и выбор ордера вполне логичен. Хотя может он у вас выбран уже в другой функции.
Спред ни кто не отменял, но условие отношение МА к Ask
 
1leprecon1:
Если указывает на луну то почему проверку закрытия ордера проходит? Включая проверку закрытия условия по RSI.

Какой-то ордер всегда выбран. Вот его и закрывает советник. Но что там в реальности происходит - непонятно. Поэтому сначала выбирают нужный ордер (OrderSelect()), а уже потом совершают с ним действия.

 
Ihor Herasko:

Какой-то ордер всегда выбран. Вот его и закрывает советник. Но что там в реальности происходит - непонятно. Поэтому сначала выбирают нужный ордер (OrderSelect()), а уже потом совершают с ним действия.

Но ордер один, больше ордеров нет соответственно и выбирать ему не из чего. Стратегия линейная. Или бот через определенное время может потерять адрес ордера? %-/
 
1leprecon1:
Но ордер один, больше ордеров нет соответственно и выбирать ему не из чего. Стратегия линейная. Или бот через определенное время может потерять адрес ордера? %-/

История счета тоже пустая? Ордер может быть выбран из истории счета.

В любом случае ордер нужно выбрать. Покажите, что происходит до вызова функции CheckForClose(). Там есть вызов OrderSelect()?

 
bool CloseOrder_b = False;
bool CloseOrder_s = False;

for(int pos = 0; pos < OrdersTotal(); pos++){
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;

if(OrderSymbol() == Symbol() && OrderMagicNumber() == ... && OrderType() == OP_BUY && ...){
CloseOrder_b = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),(int)MarketInfo(Symbol(),MODE_SPREAD),clrNONE);}

if(OrderSymbol() == Symbol() && OrderMagicNumber() == ... && OrderType() == OP_SELL && ...){
CloseOrder_s = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),(int)MarketInfo(Symbol(),MODE_SPREAD),clrNONE);}

}

Подставь свои условия в код.

 
Ihor Herasko:

История счета тоже пустая? Ордер может быть выбран из истории счета.

В любом случае ордер нужно выбрать. Покажите, что происходит до вызова функции CheckForClose(). Там есть вызов OrderSelect(с

сделал проверку ошибок 

выводит именно ошибку условия, то-есть ему не нравится именно условие. Наипростейшее МА по отношению к Ask