Member 9720862 Ответов: 1

Выполнить максимум открытых ордеров в МТ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 (), но она не работает из-за моей проблемы.

1 Ответов

Рейтинг:
2

Richard MacCutchan

// Max Open Orders                                                         |
bool inpMaxOrder() 
{
   if(OrdersTotal() >= InpMaxOrder)  
      return(true);                  
    return(false);
}

Во-первых, вы уверены, что это должно вернуться true если OrdersTotal больше, чем InpMaxOrder- Я ожидал бы обратного.

А во-вторых, я нигде в предыдущем коде не вижу, чтобы вы действительно вызывали эту функцию.