Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1403

 
Marco Nicholas Comment() in switch() anstelle des gleichen Print verwenden.

Ist es wirklich so schwierig, es selbst zu versuchen?

 
Vitaly Muzichenko #:

Ist es wirklich so schwierig, es selbst zu versuchen?

Ich habe es ausprobiert, es funktioniert.

Aufgrund der internen F1-Hilfe zum Thema "Schalter" kam eine solche Frage auf, da dort nur Print angegeben ist. Und ich habe vorhin festgestellt, dassComment() in void OnTick() die Codeausführung stark verlangsamt.

 
Ich habe einen Indikator gekauft, aber wenn ich ihn installiere, erhalte ich das MQL5-Community-Dialogfeld und es sagt mir, dass mein Login und mein Passwort nicht gültig sind, aber trotzdem gebe ich die an meine E-Mail gesendeten Anmeldedaten ein, ich habe das Passwort bereits geändert, aber nichts und ich bin registriert.
 
Kann mir jemand helfen, wie ich das machen kann?
 
kduarte #:
Kann mir jemand helfen, wie ich dies tun kann?

Vergewissern Sie sich, dass Sie Ihr kduarte-Login verwenden und dass Ihr MQL5-Kontopasswort nicht länger als 10 Zeichen ist.

 
Vladimir Karputov #:

Sie kontrollieren die ORDERS in keiner Weise, Sie überprüfen die Anzahl und den Typ der POSITION im Code. Außerdem arbeiten Sie falsch mit POSITIONEN (Fehler bei der Verwendung von 'PositionSelect(_Symbol)', wenn Ihr Kontotyp Hedging ist). Ihr Algorithmus weist schwerwiegende Designfehler auf.

Was Sie tun sollten:

1. Arbeiten Sie AUSSCHLIESSLICH zu dem Zeitpunkt, an dem ein neuer Balken entsteht. Wenn es keinen neuen Balken gibt - machen Sie nichts, machen Sie keine unnötigen Bewegungen.

2. Dieser Punkt wird offengelegt, nachdem Punkt 1 abgeschlossen ist.

Hallo Vladimir,

Nochmals vielen Dank für die Hinweise, die ich erhalten habe. Ich habe eine Weile gebraucht, um die Dinge herauszufinden.

Was ich auf der Grundlage deiner Tipps geändert habe:

- Ich habe die Logik für das Öffnen und Schließen auf eine Absicherungsversion geändert.

- Ich arbeite jetzt mit der Geburt eines neuen Balkens für einige Berechnungen/Orderplatzierung.


Seitdem diese Änderungen angewendet werden, werden Aufträge nur noch einmal geöffnet und geschlossen. Aber jetzt habe ich ein Problem mit Backtesting. Ich erhalte eine Fehlermeldung, dass das Array in Zeile 121 außerhalb des Bereichs liegt. Können Sie mir die richtige Richtung zeigen? Ich habe versucht, ein Array vom Typ double für Schlusskurse und copyClose zu verwenden, bekomme dann aber immer noch den Fehler.

Bin auch gespannt auf Punkt 2 :)


Bisheriger Code:

In gelb habe ich die Zeile 121 hervorgehoben.

void OnTick()

{ 
        MqlTradeRequest request;
        MqlTradeResult Result;
        ZeroMemory(request);
        
//Setting newBar event handler
bool newBar = true;
int barShift =0;

newBar = NewBar.CheckNewBar(_Symbol,_Period);
barShift = 1;
        
// Get current market orders
        ulong buyTicket = 0, sellTicket = 0;
        for(int i = 0; i < PositionsTotal(); i++)
        {
           ulong ticket = PositionGetTicket(i);
           PositionSelectByTicket(ticket);
           
           if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
           {
              buyTicket = ticket;
              Buy_openend = true;
           }
           else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
           {
              sellTicket = ticket;
              Sell_openend = true;
           }
        }
   



if(newBar == true)
  {
      double closingprice[];
      datetime date_time[];
      MqlRates bar[];
      ArraySetAsSeries(bar,true);
      ArrayResize(bar,80);
      CopyRates(_Symbol,_Period,0,56,bar);
      
      
      double close = bar[1].close;
      datetime time = bar[1].time;

datetime startTime = CreateDateTime(OpentimeHH,OpentimeMM);
datetime endTime = CreateDateTime(EndtimeHH,EndtimeMM);

if(OpentimeHH <= EndtimeHH)
          {
          endTime -= TIME_ADD_DAY;
          }
      
Comment(close,time, "start time:", startTime, "endtime:", endTime);

int bar_index = iBarShift(_Symbol, PERIOD_CURRENT, endTime,true);
double closeprev = bar[bar_index].close; //line 121


// Check for trade conditions
bool BuyCondition = (close >= closeprev) && (bar[1].time == startTime) && (Buy_openend == false);
bool SellCondition = (close <= closeprev) && (bar[1].time == startTime) && (Sell_openend == false);


// Open Market buy order
if(BuyCondition)
  {
   //Close Posible Sell Order
   if(sellTicket > 0)
     {
      PositionSelectByTicket(sellTicket);
      request.action = TRADE_ACTION_DEAL;
      request.type   = ORDER_TYPE_BUY;
      request.symbol = _Symbol;
      request.position = sellTicket;
      request.volume = PositionGetDouble(POSITION_VOLUME);
      request.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      request.type_filling = ORDER_FILLING_IOC;
      request.deviation = 50;
      
      bool sent = OrderSend(request,Result);
     }
     
     request.action = TRADE_ACTION_DEAL;
                request.type = ORDER_TYPE_BUY;
                request.symbol = _Symbol;
                request.position = 0;
                request.volume = TradeVolume;
                request.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
                request.type_filling = ORDER_FILLING_IOC;
                request.sl = 0;
                request.tp = 0;
                request.deviation = 50;
                
                bool sent = OrderSend(request,Result);
  }

//Open Market Sell Order
if(SellCondition)
  {
     //Close posible buy orders
     if(buyTicket > 0)
       {
      PositionSelectByTicket(buyTicket);
      request.action = TRADE_ACTION_DEAL;
      request.type   = ORDER_TYPE_SELL;
      request.symbol = _Symbol;
      request.position = buyTicket;
      request.volume = PositionGetDouble(POSITION_VOLUME);
      request.price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
      request.type_filling = ORDER_FILLING_IOC;
      request.deviation = 50;
      
      bool sent = OrderSend(request,Result);
     }
  request.action = TRADE_ACTION_DEAL;
                request.type = ORDER_TYPE_SELL;
                request.symbol = _Symbol;
                request.position = 0;
                request.volume = TradeVolume;
                request.price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
                request.type_filling = ORDER_FILLING_IOC;
                request.sl = 0;
                request.tp = 0;
                request.deviation = 50;
                
                bool sent = OrderSend(request,Result);
  }
}
  }
 
Divania111 # :


Überprüfen Sie das Ergebnis des Vorgangs:

int bar_index = iBarShift ( _Symbol , PERIOD_CURRENT , endTime, true );
 
Vladimir Karputov #:

Überprüfen Sie das Ergebnis des Vorgangs:

Omg! Vielen Dank!
 
Hallo Händler ... Bitte helfen Sie

So ändern Sie das Risiko in Prozent in Losgröße oder fixieren Lose in EA-Aufschlüsselungsexperten: Aufschlüsselung.

 //+------------------------------------------------------------------+
//|                           breakdown(barabashkakvn's edition).mq5 |
//|                                                           Arist0 |
//|                                              arist0.rr@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Arist0"
#property link        "arist0.rr@gmail.com"
#property version    "1.001"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
#include <Trade\AccountInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Expert\Money\MoneyFixedMargin.mqh>
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                       // trading object
CSymbolInfo    m_symbol;                     // symbol info object
CAccountInfo   m_account;                     // account info wrapper
COrderInfo     m_order;                       // pending orders object
CMoneyFixedMargin *m_money;
//--- input parameters
input ushort    InpStopLoss       = 50 ;       // Stop Loss (in pips)
input ushort    InpTakeProfit     = 50 ;       // Take Profit (in pips)
input ushort    InpTrailingStop   = 5 ;         // Trailing Stop (in pips)
input ushort    InpTrailingStep   = 5 ;         // Trailing Step (in pips)
input ushort    InpMinDistance    = 25 ;       // Minimum distance
input double    Risk              = 5 ;         // Risk in percent for a deal from a free margin
input ulong     m_magic           = 585000550 ; // magic number
//---
ulong           m_slippage= 10 ;                 // slippage

double          ExtStopLoss= 0.0 ;
double          ExtTakeProfit= 0.0 ;
double          ExtTrailingStop= 0.0 ;
double          ExtTrailingStep= 0.0 ;
double          ExtMinDistance= 0.0 ;

double          m_adjusted_point;             // point value adjusted for 3 or 5 points

bool            bln_delete_all= false ;
datetime        dt_last_delete= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (InpTrailingStop!= 0 && InpTrailingStep== 0 )
     {
       string text=( TerminalInfoString ( TERMINAL_LANGUAGE )== "Russian" )?
                   "Трейлинг невозможен: параметр \"Trailing Step\" равен нулю!" :
                   "Trailing is not possible: parameter \"Trailing Step\" is zero!" ;
       Alert ( __FUNCTION__ , " ERROR! " ,text);
       return ( INIT_PARAMETERS_INCORRECT );
     }
   if (!m_symbol.Name( Symbol ())) // sets symbol name
       return ( INIT_FAILED );
   RefreshRates();
//---
   m_trade.SetExpertMagicNumber(m_magic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetDeviationInPoints(m_slippage);
//--- tuning for 3 or 5 digits
   int digits_adjust= 1 ;
   if (m_symbol. Digits ()== 3 || m_symbol. Digits ()== 5 )
      digits_adjust= 10 ;
   m_adjusted_point=m_symbol. Point ()*digits_adjust;

   ExtStopLoss    = InpStopLoss     * m_adjusted_point;
   ExtTakeProfit  = InpTakeProfit   * m_adjusted_point;
   ExtTrailingStop= InpTrailingStop * m_adjusted_point;
   ExtTrailingStep= InpTrailingStep * m_adjusted_point;
   ExtMinDistance = InpMinDistance  * m_adjusted_point;
//---
   if (m_money!= NULL )
       delete m_money;
   m_money= new CMoneyFixedMargin;
   if (m_money!= NULL )
     {
       if (!m_money.Init( GetPointer (m_symbol), Period (),m_symbol. Point ()*digits_adjust))
         return ( INIT_FAILED );
      m_money.Percent(Risk);
     }
   else
     {
       Print ( __FUNCTION__ , ", ERROR: Object CMoneyFixedMargin is NULL" );
       return ( INIT_FAILED );
     }
//---
   bln_delete_all= false ;
   dt_last_delete= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   if (m_money!= NULL )
       delete m_money;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (bln_delete_all)
     {
       if (IsPendingOrdersExists())
        {
         DeleteAllPendingOrders();
         //dt_last_delete=iTime(m_symbol.Name(),Period(),0);
         return ;
        }
       else
        {
         bln_delete_all= false ;
         dt_last_delete= iTime (m_symbol.Name(), PERIOD_D1 , 0 );
        }
     }
//---
   if (IsPendingOrdersExists() && dt_last_delete< iTime (m_symbol.Name(), PERIOD_D1 , 0 ))
     {
      bln_delete_all= true ;
       return ;
     }
//---
   if (!IsPendingOrdersExists())
     {
       if (!RefreshRates())
         return ;
       //---
       double price= iHigh (m_symbol.Name(), PERIOD_D1 , 1 )+ExtMinDistance;
       double sl=(InpStopLoss== 0 )? 0.0 :price-ExtStopLoss;
       double tp=(InpTakeProfit== 0 )? 0.0 :price+ExtTakeProfit;
      PendingBuyStop(price,sl,tp);
       //---
      price= iLow (m_symbol.Name(), PERIOD_D1 , 1 )-ExtMinDistance;
      sl=(InpStopLoss== 0 )? 0.0 :price+ExtStopLoss;
      tp=(InpTakeProfit== 0 )? 0.0 :price-ExtTakeProfit;
      PendingSellStop(price,sl,tp);

      dt_last_delete= iTime (m_symbol.Name(), PERIOD_D1 , 0 );
       return ;
     }
//---
   Trailing();
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//---
   double res= 0.0 ;
   int losses= 0.0 ;
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       long      deal_ticket       = 0 ;
       long      deal_order        = 0 ;
       long      deal_time         = 0 ;
       long      deal_time_msc     = 0 ;
       long      deal_type         =- 1 ;
       long      deal_entry        =- 1 ;
       long      deal_magic        = 0 ;
       long      deal_reason       =- 1 ;
       long      deal_position_id  = 0 ;
       double    deal_volume       = 0.0 ;
       double    deal_price        = 0.0 ;
       double    deal_commission   = 0.0 ;
       double    deal_swap         = 0.0 ;
       double    deal_profit       = 0.0 ;
       string    deal_symbol       = "" ;
       string    deal_comment      = "" ;
       string    deal_external_id  = "" ;
       if ( HistoryDealSelect (trans.deal))
        {
         deal_ticket       = HistoryDealGetInteger (trans.deal, DEAL_TICKET );
         deal_order        = HistoryDealGetInteger (trans.deal, DEAL_ORDER );
         deal_time         = HistoryDealGetInteger (trans.deal, DEAL_TIME );
         deal_time_msc     = HistoryDealGetInteger (trans.deal, DEAL_TIME_MSC );
         deal_type         = HistoryDealGetInteger (trans.deal, DEAL_TYPE );
         deal_entry        = HistoryDealGetInteger (trans.deal, DEAL_ENTRY );
         deal_magic        = HistoryDealGetInteger (trans.deal, DEAL_MAGIC );
         deal_reason       = HistoryDealGetInteger (trans.deal, DEAL_REASON );
         deal_position_id  = HistoryDealGetInteger (trans.deal, DEAL_POSITION_ID );

         deal_volume       = HistoryDealGetDouble (trans.deal, DEAL_VOLUME );
         deal_price        = HistoryDealGetDouble (trans.deal, DEAL_PRICE );
         deal_commission   = HistoryDealGetDouble (trans.deal, DEAL_COMMISSION );
         deal_swap         = HistoryDealGetDouble (trans.deal, DEAL_SWAP );
         deal_profit       = HistoryDealGetDouble (trans.deal, DEAL_PROFIT );

         deal_symbol       = HistoryDealGetString (trans.deal, DEAL_SYMBOL );
         deal_comment      = HistoryDealGetString (trans.deal, DEAL_COMMENT );
         deal_external_id  = HistoryDealGetString (trans.deal, DEAL_EXTERNAL_ID );
        }
       else
         return ;
       if (deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if (deal_entry== DEAL_ENTRY_IN )
             if (deal_type== DEAL_TYPE_BUY || deal_type== DEAL_TYPE_SELL )
               DeleteAllPendingOrders();
     }
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates( void )
  {
//--- refresh rates
   if (!m_symbol.RefreshRates())
     {
       Print ( "RefreshRates error" );
       return ( false );
     }
//--- protection against the return value of "zero"
   if (m_symbol.Ask()== 0 || m_symbol.Bid()== 0 )
       return ( false );
//---
   return ( true );
  }
//+------------------------------------------------------------------+
//| Pending order of Buy Stop                                        |
//+------------------------------------------------------------------+
void PendingBuyStop( double price, double sl, double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

   double check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
   Print ( "sl=" , DoubleToString (sl,m_symbol. Digits ()),
         ", CheckOpenLong: " , DoubleToString (check_open_long_lot, 2 ),
         ", Balance: " ,     DoubleToString (m_account.Balance(), 2 ),
         ", Equity: " ,     DoubleToString (m_account.Equity(), 2 ),
         ", FreeMargin: " , DoubleToString (m_account.FreeMargin(), 2 ));
   if (check_open_long_lot== 0.0 )
     {
       Print ( __FUNCTION__ , ", ERROR: method CheckOpenLong returned the value of \"0.0\"" );
       return ;
     }
//--- check volume before OrderSend to avoid "not enough money" error (CTrade)
   double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(), ORDER_TYPE_BUY );
   if (check_volume_lot!= 0.0 )
     {
       if (check_volume_lot>=check_open_long_lot)
        {
         if (m_trade.BuyStop(check_open_long_lot,m_symbol.NormalizePrice(price),
            m_symbol.Name(),m_symbol.NormalizePrice(sl),m_symbol.NormalizePrice(tp)))
           {
             if (m_trade.ResultOrder()== 0 )
              {
               Print ( "#1 Buy Stop -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                     ", description of result: " ,m_trade.ResultRetcodeDescription());
               PrintResultTrade(m_trade,m_symbol);
              }
             else
              {
               Print ( "#2 Buy Stop -> true. Result Retcode: " ,m_trade.ResultRetcode(),
                     ", description of result: " ,m_trade.ResultRetcodeDescription());
               PrintResultTrade(m_trade,m_symbol);
              }
           }
         else
           {
             Print ( "#3 Buy Stop -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                   ", description of result: " ,m_trade.ResultRetcodeDescription());
            PrintResultTrade(m_trade,m_symbol);
           }
        }
       else
        {
         Print ( __FUNCTION__ , ", ERROR: method CheckVolume (" , DoubleToString (check_volume_lot, 2 ), ") " ,
               "< method CheckOpenLong (" + DoubleToString (check_open_long_lot, 2 )+ ")" );
         return ;
        }
     }
   else
     {
       Print ( __FUNCTION__ , ", ERROR: method CheckVolume returned the value of \"0.0\"" );
       return ;
     }
//---
  }
//+------------------------------------------------------------------+
//| Pending order of Sell Stop                                       |
//+------------------------------------------------------------------+
void PendingSellStop( double price, double sl, double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

   double check_open_short_lot=m_money.CheckOpenShort(m_symbol.Bid(),sl);
   Print ( "sl=" , DoubleToString (sl,m_symbol. Digits ()),
         ", CheckOpenLong: " , DoubleToString (check_open_short_lot, 2 ),
         ", Balance: " ,     DoubleToString (m_account.Balance(), 2 ),
         ", Equity: " ,     DoubleToString (m_account.Equity(), 2 ),
         ", FreeMargin: " , DoubleToString (m_account.FreeMargin(), 2 ));
   if (check_open_short_lot== 0.0 )
     {
       Print ( __FUNCTION__ , ", ERROR: method CheckOpenShort returned the value of \"0.0\"" );
       return ;
     }
//--- check volume before OrderSend to avoid "not enough money" error (CTrade)
   double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_short_lot,m_symbol.Bid(), ORDER_TYPE_SELL );
   if (check_volume_lot!= 0.0 )
     {
       if (check_volume_lot>=check_open_short_lot)
        {
         if (m_trade.SellStop(check_open_short_lot,m_symbol.NormalizePrice(price),
            m_symbol.Name(),m_symbol.NormalizePrice(sl),m_symbol.NormalizePrice(tp)))
           {
             if (m_trade.ResultOrder()== 0 )
              {
               Print ( "#1 Sell Stop -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                     ", description of result: " ,m_trade.ResultRetcodeDescription());
               PrintResultTrade(m_trade,m_symbol);
              }
             else
              {
               Print ( "#2 Sell Stop -> true. Result Retcode: " ,m_trade.ResultRetcode(),
                     ", description of result: " ,m_trade.ResultRetcodeDescription());
               PrintResultTrade(m_trade,m_symbol);
              }
           }
         else
           {
             Print ( "#3 Sell Stop -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                   ", description of result: " ,m_trade.ResultRetcodeDescription());
            PrintResultTrade(m_trade,m_symbol);
           }
        }
       else
        {
         Print ( __FUNCTION__ , ", ERROR: method CheckVolume (" , DoubleToString (check_volume_lot, 2 ), ") " ,
               "< method CheckOpenShort (" + DoubleToString (check_open_short_lot, 2 )+ ")" );
         return ;
        }
     }
   else
     {
       Print ( __FUNCTION__ , ", ERROR: method CheckVolume returned the value of \"0.0\"" );
       return ;
     }
//---
  }
//+------------------------------------------------------------------+
//| Print CTrade result                                              |
//+------------------------------------------------------------------+
void PrintResultTrade(CTrade &trade,CSymbolInfo &symbol)
  {
   Print ( "Code of request result: " + IntegerToString (trade.ResultRetcode()));
   Print ( "code of request result as a string: " +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 (symbol.Bid(),symbol. Digits ())+ " (the requote): " + DoubleToString (trade.ResultBid(),symbol. Digits ()));
   Print ( "Current ask price: " + DoubleToString (symbol.Ask(),symbol. Digits ())+ " (the requote): " + DoubleToString (trade.ResultAsk(),symbol. Digits ()));
   Print ( "Broker comment: " +trade.ResultComment());
  }
//+------------------------------------------------------------------+
//| Is pendinf orders exists                                         |
//+------------------------------------------------------------------+
bool IsPendingOrdersExists( void )
  {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // returns the number of current orders
       if (m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==m_magic)
             return ( true );
//---
   return ( false );
  }
//+------------------------------------------------------------------+
//| Delete all pending orders                                        |
//+------------------------------------------------------------------+
void DeleteAllPendingOrders( void )
  {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // returns the number of current orders
       if (m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if (m_order. Symbol ()==m_symbol.Name() && m_order.Magic()==m_magic)
            m_trade.OrderDelete(m_order.Ticket());
  }
//+------------------------------------------------------------------+
//| Trailing                                                         |
//+------------------------------------------------------------------+
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());
                     RefreshRates();
                     m_position.SelectByIndex(i);
                     PrintResultModify(m_trade,m_symbol,m_position);
                     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());
                     RefreshRates();
                     m_position.SelectByIndex(i);
                     PrintResultModify(m_trade,m_symbol,m_position);
                    }
              }

           }
  }
//+------------------------------------------------------------------+
//| Print CTrade result                                              |
//+------------------------------------------------------------------+
void PrintResultModify(CTrade &trade,CSymbolInfo &symbol,CPositionInfo &position)
  {
   Print ( "Code of request result: " + IntegerToString (trade.ResultRetcode()));
   Print ( "code of request result as a string: " +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 (symbol.Bid(),symbol. Digits ())+ " (the requote): " + DoubleToString (trade.ResultBid(),symbol. Digits ()));
   Print ( "Current ask price: " + DoubleToString (symbol.Ask(),symbol. Digits ())+ " (the requote): " + DoubleToString (trade.ResultAsk(),symbol. Digits ()));
   Print ( "Broker comment: " +trade.ResultComment());
   Print ( "Price of position opening: " + DoubleToString (position.PriceOpen(),symbol. Digits ()));
   Print ( "Price of position's Stop Loss: " + DoubleToString (position.StopLoss(),symbol. Digits ()));
   Print ( "Price of position's Take Profit: " + DoubleToString (position.TakeProfit(),symbol. Digits ()));
   Print ( "Current price by position: " + DoubleToString (position.PriceCurrent(),symbol. Digits ()));
  }
//+------------------------------------------------------------------+


 

Guten Tag, liebe Experten, bitte helfen Sie mir zu verstehen, was der Fehler ist. Habe den Indikator aus der Handelsansicht über den Pinconnector mit dem mt5 Demokonto verbunden. Ich erhalte keine Signale. Ich habe einen Screenshot des Protokollbildschirms beigefügt

Grund der Beschwerde: