Выполнить максимум открытых ордеров в МТ5 советник
У меня есть одна проблема в моем коде, а именно
Выполнить максимум открытых ордеров в МТ5 советник
Строки кодов внутри файла .mq5 не являются полными, что затрудняет его работу
для работы максимальных открытых ордеров.
Мне нужна функция/коды, которые не позволят советнику, если максимальное число
из указанных(вводимых в пользовательский интерфейс) ордеров уже открыты
Я смог добавить этот дисплей в пользовательский интерфейс самостоятельно, но не смог найти правильные коды для его выполнения. это не ограничение максимального порядка.
brife описание об этом
--------------------------
МТ5 советник торгует программным обеспечением. код работает нормально, но моя проблема в том, что у меня есть одно текстовое поле, в которое я ввожу max open order например 10. Если 10 ордеров уже открыты, то нужна функция/коды, которые не позволят советнику, если максимальное количество
указанные ордера уже открыты. значит, не больше 10. это моя проблема. в моем коде я попробовал это сделать, сделав функцию inpMaxOrder (), но она не работает из-за моей проблемы.
Что я уже пробовал:
int OnInit() { ExtMaxOrder = * m_adjusted_point; //--- create handle of the indicator iMACD handle_iMACD=iMACD(m_symbol.Name(),MACD_period,MACD_fast_ema_period,MACD_slow_ema_period,MACD_signal_period,MACD_applied_price); //--- if the handle is not created if(handle_iMACD==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iMACD indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(MACD_period), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); } //--- create handle of the indicator iStochastic handle_iStochastic=iStochastic(m_symbol.Name(),Period(),Sto_Kperiod,Sto_Dperiod,Sto_slowing,Sto_ma_method,Sto_price_field); //--- if the handle is not created if(handle_iStochastic==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iStochastic indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } void PrintResult(CTrade &trade,CSymbolInfo &symbol) { Print("Code of request result: "+IntegerToString(trade.ResultRetcode())); Print("code of request result: "+trade.ResultRetcodeDescription()); Print("deal ticket: "+IntegerToString(trade.ResultDeal())); Print("order ticket: "+IntegerToString(trade.ResultOrder())); Print("volume of deal or order: "+DoubleToString(trade.ResultVolume(),2)); Print("price, confirmed by broker: "+DoubleToString(trade.ResultPrice(),symbol.Digits())); Print("current bid price: "+DoubleToString(trade.ResultBid(),symbol.Digits())); Print("current ask price: "+DoubleToString(trade.ResultAsk(),symbol.Digits())); Print("broker comment: "+trade.ResultComment()); } void Trailing() { if(InpTrailingStop==0) return; for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingStop+ExtTrailingStep) if(m_position.StopLoss()<m_position.pricecurrent()-(exttrailingstop+exttrailingstep)) { ="" if(!m_trade.positionmodify(m_position.ticket(), ="" m_symbol.normalizeprice(m_position.pricecurrent()-exttrailingstop), ="" m_position.takeprofit())) ="" print("modify="" ",m_position.ticket(), ="" "="" position="" -=""> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); continue; } } else { if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingStop+ExtTrailingStep) if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingStop+ExtTrailingStep))) || (m_position.StopLoss()==0)) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTrailingStop), m_position.TakeProfit())) Print("Modify ",m_position.Ticket(), " Position -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } } } // Max Open Orders | bool inpMaxOrder() { if(OrdersTotal() >= InpMaxOrder) return(true); return(false); }
Richard MacCutchan
Вам нужно объяснить (как я предложил вчера), в чем именно заключается проблема и где в коде она возникает. И это может помочь (или нет) объяснить, что такое MT5 EA.
Member 9720862
МТ5 советник торгует программным обеспечением. код работает нормально, но моя проблема в том, что у меня есть одно текстовое поле, в которое я ввожу max open order например 10. Если 10 ордеров уже открыты, то нужна функция/коды, которые не позволят советнику, если максимальное количество
указанные ордера уже открыты. значит, не больше 10. это моя проблема. в моем коде я попробовал это сделать, сделав функцию inpMaxOrder (), но она не работает из-за моей проблемы.