Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1403

 
Marco Nicholas Comentário( ) no switch() ao invés da mesma impressão.

É realmente assim tão difícil tentar você mesmo?

 
Vitaly Muzichenko #:

Seria realmente tão difícil tentar você mesmo?

Eu experimentei, funciona.

Devido à ajuda interna de F1 sobre a "troca", tal questão surgiu, pois somente a impressão é especificada ali. E notei anteriormente queComment( ) in void OnTick() atrasamuito a execução do código .

 
Comprei um indicador mas quando o instalo recebo a caixa de diálogo da comunidade MQL5 e ela me diz que meu login e senha não são válidos, mas mesmo assim estou inserindo as credenciais enviadas para meu e-mail, já mudei a senha, mas nada e estou registrado.
 
Alguém pode me ajudar em como eu posso fazer isso?
 
kduarte #:
Alguém pode me ajudar em como eu posso fazer isso?

Certifique-se de que você está usando seu login kduarte e que sua senha de conta MQL5 não é maior do que 10 caracteres.

 
Vladimir Karputov #:

Você não controla os ORDENS de forma alguma, você verifica o número e o tipo da POSIÇÃO no código. Além disso - você trabalha incorretamente com POSIÇÕES (erro para usar 'PositionSelect(_Symbol)' se seu tipo de conta é hedging). Seu algoritmo tem sérios erros de projeto.

O que você deve fazer:

1. Trabalhar EXCLUSIVAMENTE no momento do nascimento de um novo bar. Se não houver uma nova barra - não faça nada, não faça movimentos desnecessários.

2. Este item será divulgado depois que o item 1 for concluído.

Olá Vladimir,

Mais uma vez, muito obrigado pelas dicas que caíram. Levei algum tempo para entender as coisas.

O que eu mudei com base em suas dicas:

- Mudei a lógica de abertura e fechamento para uma versão hedging.

- Agora trabalho com o nascimento de uma nova barra para alguns cálculos/colocação de pedidos.


Como estas mudanças são aplicadas, os pedidos agora só são abertos e fechados uma única vez. Mas agora eu tenho um problema com o retrocesso. Recebo um erro de que o conjunto na linha 121 está fora de alcance. Você pode me apontar na direção certa? Tentei usar um array do tipo duplo para fechar os preços e copyClose, mas ainda assim recebo o erro então.

Também entusiasmado com o item 2 :)


Código até agora:

Em amarelo, destaquei a linha 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 # :


Verifique o resultado da operação:

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

Verifique o resultado da operação:

Omg! Muito obrigado!
 
Olá comerciantes... por favor ajude

Como alterar o risco em porcentagem para o tamanho do lote ou corrigir o lote no detalhamento do EA Especialistas: detalhamento.

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


 

Boa tarde, especialistas, por favor, ajudem-me a entender qual é o erro. Conectou o indicador da vista de negociação via pinconnector à conta demo mt5. Não estou recebendo nenhum sinal. Anexei uma captura de tela da tela de registro

Arquivos anexados: