Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1403

 
Marco Nicholas Comment() in switch() invece della stessa Print.

È davvero così difficile provare da soli?

 
Vitaly Muzichenko #:

Sarebbe davvero così difficile provarci da soli?

L'ho provato, funziona.

A causa dell'aiuto interno di F1 su "switch", è sorta una tale domanda, perché solo Print è specificato lì. E ho notato prima cheComment() in void OnTick() rallenta molto l'esecuzione del codice.

 
Ho comprato un indicatore ma quando lo installo mi appare la finestra di dialogo della comunità MQL5 e mi dice che il mio login e la mia password non sono validi, ma nonostante ciò sto inserendo le credenziali inviate alla mia email, ho già cambiato la password, ma niente e sono registrato.
 
Qualcuno può aiutarmi su come posso fare questo?
 
kduarte #:
Qualcuno può aiutarmi su come posso fare questo?

Assicurati di usare il tuo login kduarte e che la password del tuo account MQL5 non sia più lunga di 10 caratteri.

 
Vladimir Karputov #:

Non controlli gli ORDINI in alcun modo, controlli il numero e il tipo di POSIZIONE nel codice. Inoltre - lavorate erroneamente con le POSIZIONI (errore di usare 'PositionSelect(_Symbol)' se il vostro tipo di conto è di copertura). Il tuo algoritmo ha gravi errori di progettazione.

Cosa dovreste fare:

1. Lavorare ESCLUSIVAMENTE al momento della nascita di una nuova barra. Se non c'è una nuova barra - non fare nulla, non fare movimenti inutili.

2. Questo punto sarà divulgato dopo aver completato il punto 1.

Ciao Vladimir,

Ancora una volta grazie mille per i suggerimenti caduti. Mi ci è voluto un po' per capire le cose.

Cosa ho cambiato in base ai tuoi suggerimenti:

- Ho cambiato la logica di apertura e chiusura in una versione di copertura.

- Ora lavoro con la nascita di una nuova barra per alcuni calcoli/inserimento ordini.


Da quando sono state applicate queste modifiche, gli ordini vengono ora aperti e chiusi solo una volta. Ma ora ho un problema con il backtesting. Ottengo un errore che l'array nella linea 121 è fuori portata. Potete indicarmi la direzione giusta? Ho provato a usare un array di tipo doppio per i prezzi di chiusura e copyClose, ma ottengo ancora l'errore.

Anche eccitato per il punto 2 :)


Codice finora:

In giallo ho evidenziato la linea 121.

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 # :


Controllare il risultato dell'operazione:

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

Controllare il risultato dell'operazione:

Omg! Grazie mille!
 
Ciao commercianti... Per favore aiutatemi

Come modificare il rischio in percentuale in dimensione del lotto o correggere il lotto nella ripartizione EA Esperti: ripartizione.

 //+------------------------------------------------------------------+
//|                           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 ()));
  }
//+------------------------------------------------------------------+


 

Buon pomeriggio, esperti, per favore aiutatemi a capire qual è l'errore. Collegato l'indicatore da trading view tramite pinconnector al conto demo mt5. Non ricevo alcun segnale. Ho allegato uno screenshot della schermata del log

Motivazione: