Помогите найти ошибку в коде советника МТ4

 

Здравствуйте. Вот написал простенького советника. Принцип работы советника простой: открываем позицию в определенное время и закрываем также в указанное в настройках время. Не могу найти ошибку, почему не закрывается позиция в 11:05, может кто подскажет.
Все ресурсы перелопатил не смог найти решение...




//---- input parameters
extern int BuyHour = 11;
extern int BuyMinute = 30;
extern int CloseHour = 14;
extern int CloseMinute = 55;
extern int SellHour = 3;
extern int SellMinute = 30;
extern int Close2Hour = 11;
extern int Close2Minute = 05;
extern double Lots=0.1;
extern int StopLoss=1000;
extern int TakeProfit=1000;



int start()
{


if (TimeHour(TimeCurrent())==BuyHour && TimeMinute(TimeCurrent())==BuyMinute)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Открытие по времени",777,0,Gold);

}

if (TimeHour(TimeCurrent())==CloseHour && TimeMinute(TimeCurrent())==CloseMinute)
{
OrderCloseBy(777,778);


}


if (TimeHour(TimeCurrent())==SellHour && TimeMinute(TimeCurrent())==SellMinute)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Открытие по времени",888,0,Red);

}

if (TimeHour(TimeCurrent())==Close2Hour && TimeMinute(TimeCurrent())==Close2Minute)
{
OrderCloseBy(888,889);


}

return(0); //выходим из start()
}

 

ticket и opposite - это не Magic Number

 
WWer писал(а) >>

ticket и opposite - это не Magic Number

Спасибо.Значит ticket и opposite надо получить через функцию OrderTicket и OrderSend? Уточните пожалуста, как выглядит процедура получения ticket и opposite через эти функции, будьте добры.

 

OrderSelect(int index, int select, int pool=MODE_TRADES) - сначало нужно выбрать ордер,

и потом OrderTicket() - возвращает номер тикета для текущего выбранного ордера.


 

Не всегда всё бывает просто, поэтому в вашем коде я не рекомендую использовать OrderCloseBy(), так как для этого нужно иметь 2 противоположных ордера, а у вас это не гарантируется.

Не жадничайте уже этим спредом :)

 
WWer писал(а) >>

OrderSelect(int index, int select, int pool=MODE_TRADES) - сначало нужно выбрать ордер,

и потом OrderTicket() - возвращает номер тикета для текущего выбранного ордера.

index - Позиция ордера или номер ордера в зависимости от второго параметра.

Тогда вытекают вопросы:

1. Как узнать и получить index ордера?

2. Номер ордера в моем случае будет равен 0, значит запись OrderSelect(0, SELECT_BY_TICKET) будет корректной?

3. Почему нельзя в этой функции использовать например такую запись OrderSelect(OrderTicket(), SELECT_BY_TICKET) ?

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