Здравствуйте. Есть непонимание:
Как с помощью Trade\Trade.mqh модифицировать выставленный ордер?
команда OrderModify требует выставления 7и параметров, в том числе последний: StopLimit ордер, хотя в стандартном варианте требуется всего 6.
Я из за этого не могу подвинуть BuyStop и SellStop, и не понимаю, как модифицировать существующий СеллСтоп ордер..
Приходиться через дилейт и новое выставление..
При этом все равно пытаюсь понять, как воспользоваться этой командой, чтоб не переписывать советника заново..
Я изначально его заточил под Trade.mqh
Вам же дали ссылку - https://www.mql5.com/ru/code/27646 Вам можно объединить Ваш эксперт с этой функцией (Экспертом)
- www.mql5.com
ещё есть в терминале в экспертах - Mean Reversion.mq5 -
может вникнуть как работает - и подправить под Ваш эксперт
//+------------------------------------------------------------------+ //| Move limit orders according to trend | //+------------------------------------------------------------------+ bool ModifyLimitOrder(int trend) { double price; double stoploss; double takeprofit; ulong ticket; ExtSymbolInfo.Refresh(); ExtSymbolInfo.RefreshRates(); int digits=ExtSymbolInfo.Digits(); double point=ExtSymbolInfo.Point(); double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); //--- uptrend if(trend==1) { price=NormalizeDouble(ExtLowChannel, digits); //--- open price of Buy Limit order must be lower than current Ask if(price>ExtSymbolInfo.Ask()) return(true); stoploss =NormalizeDouble(price-ExtChannelRange, digits); takeprofit=NormalizeDouble(price+ExtChannelRange, digits); //--- go through the list of all orders int orders=OrdersTotal(); for(int i=0; i<orders; i++) { if((ticket=OrderGetTicket(i))!=0) { //--- get the name of the symbol and the order id (magic) string symbol=OrderGetString(ORDER_SYMBOL); long magic =OrderGetInteger(ORDER_MAGIC); ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); //--- if they correspond to our values if(type==ORDER_TYPE_BUY_LIMIT && symbol==Symbol() && magic==InpMagicNumber) { //--- if the new price does not differ from the current open price double current_price=OrderGetDouble(ORDER_PRICE_OPEN); if(MathAbs(current_price-price)<=point) continue; // skip the order //--- modify an order if(!ExtTrade.OrderModify(ticket, price, stoploss, takeprofit, 0, 0)) { PrintFormat("%s Failed Modify BuyLimit at %G (sl=%G tp=%G)failed. Error=%d", Symbol(), price, stoploss, takeprofit, GetLastError()); return(false); } } } } } //--- downtrend if(trend==-1) { price=NormalizeDouble(ExtUpChannel+spread, digits); //--- open price of Sell Limit order must be higher than current Ask if(price<ExtSymbolInfo.Bid()) return(true); stoploss =NormalizeDouble(price+ExtChannelRange, digits); takeprofit=NormalizeDouble(price-ExtChannelRange, digits); //--- go through the list of all orders int orders=OrdersTotal(); for(int i=0; i<orders; i++) { if((ticket=OrderGetTicket(i))!=0) { //--- get the name of the symbol and the order id (magic) string symbol=OrderGetString(ORDER_SYMBOL); long magic =OrderGetInteger(ORDER_MAGIC); ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); //--- if they correspond to our values if(type==ORDER_TYPE_SELL_LIMIT && symbol==Symbol() && magic==InpMagicNumber) { //--- if the new price does not differ from the current open price double current_price=OrderGetDouble(ORDER_PRICE_OPEN); if(MathAbs(current_price-price)<=point) continue; // skip the order //--- modify an order if(!ExtTrade.OrderModify(ticket, price, stoploss, takeprofit, 0, 0)) { PrintFormat("%s Failed Modify SellLimit at %G (sl=%G tp=%G)failed. Error=%d", Symbol(), price, stoploss, takeprofit, GetLastError()); return(false); } } } } } //--- return(true); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте. Есть непонимание:
Как с помощью Trade\Trade.mqh модифицировать выставленный ордер?
команда OrderModify требует выставления 7и параметров, в том числе последний: StopLimit ордер, хотя в стандартном варианте требуется всего 6.
Я из за этого не могу подвинуть BuyStop и SellStop, и не понимаю, как модифицировать существующий СеллСтоп ордер..
Приходиться через дилейт и новое выставление..
При этом все равно пытаюсь понять, как воспользоваться этой командой, чтоб не переписывать советника заново..
Я изначально его заточил под Trade.mqh