Эксперт выставляет ордера в заданное время. По большей части инструментов все работает нормально, а по некоторым выставление ордеров не происходит. Но вручную ордера ставятся без проблем. Я так понимаю, что если нет цены , то и в ручную не выставит. Пример: выставить ордера по СТ (Cotton) в >= 20:10. Появляется 11,12 минута - ничего не происходит. Вручную ставит.
Кто что подскажет?
Приложи код, посмотрю.
extern int TakeProfit = 500; extern int StopLoss = 5; extern int lev= 30; extern int risk = 50; extern int HourOpen = 20; extern int MinutesOpen = 10; extern int SecondsOpen = 30; extern int HourClose = 16; extern int MinutesClose = 30; extern int SecondsClose = 0; int ho, mo, so, Lots; int pos; int init() { return(0); } int deinit() { return(0); } int start() { mo=Minute(); so=Seconds(); ho=Hour(); Lots=MathCeil(AccountBalance()*risk/10000.0)/10.0; if (Lots<0.1) Lots=0.1; //*----------------------------------------------------------------------- //|Блок выставления ордеров //*----------------------------------------------------------------------- if(mo==MinutesOpen && so>=SecondsOpen && ho==HourOpen) { if(OrderTotal(OP_BUYSTOP)==0) { OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+lev*Point,3, (Ask+lev*Point)-StopLoss*Point, Ask+(TakeProfit+lev)*Point,"Покупка",222,0,Blue); } if(OrderTotal(OP_SELLSTOP)==0) { OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-lev*Point,3, (Bid-lev*Point)+StopLoss*Point, Bid-(TakeProfit+lev)*Point,"Продажа",222,0,Red); } } //|удаление всех ордеров по данному инструменту if(TimeHour(TimeCurrent())==HourClose && TimeMinute(TimeCurrent())>=MinutesClose && TimeSeconds(TimeCurrent())>=SecondsClose)//и здесь тоже может не сработать { for(pos=OrdersTotal()-1; pos>=0; pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Blue); } if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Red); } if(OrderType()==OP_BUYSTOP) { OrderDelete(OrderTicket(),Blue); } if(OrderType()==OP_SELLSTOP) { OrderDelete(OrderTicket(),Red); } } } else Print("Ошибка ", GetLastError()); } } return(0); } int OrderTotal(int type) { int order=0; for(int pos=OrdersTotal()-1; pos>=0; pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true) { if(OrderSymbol()==Symbol() && OrderType()==type) { order++; } } else Print("Ошибка ", GetLastError()); } return(order); }Вот код эксперта. Может дело во времени выставления? Дело в том что в 18-19 (время МТ4) ордера ставятся без проблем.
mo==MinutesOpen && so>=SecondsOpenВот вам индикатор, который показывает время последней пришедшей коттировки от ДЦ, поставте его себе и всё сразу поймёте.
//+------------------------------------------------------------------+ //| ServerTime.mq4 | //| Copyright © 2005, komposter | //| mailto:komposterius@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, komposter" #property link "mailto:komposterius@mail.ru" #property indicator_chart_window extern color TextColor = Yellow; int init() { ObjectCreate( "ServerTime", OBJ_LABEL, 0,0,0,0,0,0,0); ObjectSet( "ServerTime", OBJPROP_CORNER, 0); ObjectSet( "ServerTime", OBJPROP_XDISTANCE, 0); ObjectSet( "ServerTime", OBJPROP_YDISTANCE, 12); ObjectSetText( "ServerTime", "", 12, "Arial", TextColor); return(0); } int deinit() { ObjectDelete ( "ServerTime" ); return(0); } int start() { ObjectSetText( "ServerTime", TimeToStr( CurTime(), TIME_SECONDS ), 12, "Arial", TextColor ); return(0); }
Да строчки знакомые :) Дело в том что мне нужно точное время, иначе смысла в этом эксперте для меня нет. Вот и возник вопрос: почему минутки рисуются, ордера вручную ставятся, а экспертом нет. Вот в чем дело-то
А возможно брать цену с последней пришедшей котировки и выставлять ордера по ней в заданное время, скажем через 1-10 минут?
А возможно брать цену с последней пришедшей котировки и выставлять ордера по ней в заданное время, скажем через 1-10 минут?
Можно, но отложенные. Да и там есть стоп-левел - если цена слишком близко рыночной не получится. Так что наверно у вас не получится.
А возможно брать цену с последней пришедшей котировки и выставлять ордера по ней в заданное время, скажем через 1-10 минут?
Можно, но отложенные. Да и там есть стоп-левел - если цена слишком близко рыночной не получится. Так что наверно у вас не получится.
Хотя бы посмотреть как это выглядит для начала, попробовать. А потом решать возможно или нет
Так никто не ответил:
почему вручную выставляются ордера когда нет котировки, а экспертом нет.
Никто не знает что ли?
Так никто не ответил:
почему вручную выставляются ордера когда нет котировки, а экспертом нет.
Никто не знает что ли?
if(mo==MinutesOpen && so>=SecondsOpen && ho==HourOpen)Судя по вашему коду, вы хотите выставить ордер точно в заданную минуту. Однако, если в эту минуту от сервера не приходил ни один тик на терминал, то следовательно, процедура int start()
незапускалась ни разу в эту минуту. Последствия очевидны - условие не может быть выполнено, т.к. в ту самую минуту для которого оно предназначено, условие не проходит проверку. Start запускается только по приходу новой цены, но никак не в заданное время.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Эксперт выставляет ордера в заданное время. По большей части инструментов все работает нормально, а по некоторым выставление ордеров не происходит. Но вручную ордера ставятся без проблем. Я так понимаю, что если нет цены , то и в ручную не выставит. Пример: выставить ордера по СТ (Cotton) в >= 20:10. Появляется 11,12 минута - ничего не происходит. Вручную ставит.
Кто что подскажет?