Erro do robô no testador de estratégias mini-índice sl: 20 tp: -10 [Invalid stops]

 

Olá.

Comecei a fazer um curso pela internet de MQL5 e o código que está idêntico ao do curso funciona bem no curso, tem um erro quando eu executo no testador de estratégias não abre posição.

O código no testador de estratégia sempre da o mesmo erro, não abre posição, desde já agradeço se alguém poder me ajudar.

failed exchange sell 5 WINJ21 at 115105 sl: 20 tp: -10 [Invalid stops]

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

#include <Trade\Trade.mqh>

input ulong    INPVOLUME      = 10;
input double   INPTAKE_PROFIT = 10.0;
input double   INPSTOP_LOSS   = 20.0;

CTrade trade;

MqlRates rates[];
MqlTick  tick;

int OnInit()
  {
      
      ArraySetAsSeries( rates, true);
   

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   int copied = CopyRates( _Symbol, _Period, 0, 5, rates );
   if (copied < 3 ) return;
   
   if ( OrdersTotal() >= 1 ) return;
   
   if ( ! PositionSelect( _Symbol ) )return;
   if (PositionsTotal() >= 1 ) return;
   
   if ( SymbolInfoTick( _Symbol , tick ) ) return;
         
   if ( BuyStrategy() && IsNewCandle( rates[0] ) ) {   
      BuyMarket ( INPVOLUME , tick.last - INPSTOP_LOSS , tick.last + INPTAKE_PROFIT ) ;
      
    }
      
   if ( SellStrategy() && IsNewCandle( rates[0] ) ) {   
      SellMarket ( INPVOLUME , tick.last + INPSTOP_LOSS , tick.last - INPTAKE_PROFIT ) ;
    } 
   
  }
//+------------------------------------------------------------------+

bool  BuyStrategy() {

      bool buy = false;
      if ( rates[2].low < rates[1].low) buy = true;
      
      return buy;
}

bool  SellStrategy() {

      bool sell = false;
      if ( rates[2].high > rates[1].high) sell = true;
      
      return sell;
}

bool IsNewCandle( MqlRates & _rates) {
     bool isNew = false;
     if ( MathAbs ( _rates.high - _rates.low ) < 10 ) isNew = true;
     
     return isNew;
}

bool BuyMarket( ulong _volume , double _sl , double _tp ) {
     bool ok = trade.Buy( _volume , _Symbol ,0.0 , _sl , _tp );
     
     if ( ! ok )  {
     int errorCode = GetLastError();
     Print("BuyMarket: " , errorCode );
     ResetLastError();
     
     }
     
     return ok;     
}

bool SellMarket( ulong _volume , double _sl , double _tp ) {
     bool ok = trade.Sell( _volume, _Symbol, 0.0 , _sl , _tp );
     
     if ( ! ok )  {
     int errorCode = GetLastError();
     Print("BuyMarket: " , errorCode );
     ResetLastError();
     
     }
     
     return ok;     
}
Estratégias de teste - Trading algorítmico, robôs comerciais - Ajuda para o MetaTrader 5
Estratégias de teste - Trading algorítmico, robôs comerciais - Ajuda para o MetaTrader 5
  • www.metatrader5.com
O testador de estratégias permite testar e otimizar estratégias de negociação ( experts ) antes de as usar em uma...
 
Andujar:

Olá.

Comecei a fazer um curso pela internet de MQL5 e o código que está idêntico ao do curso funciona bem no curso, tem um erro quando eu executo no testador de estratégias não abre posição.

O código no testador de estratégia sempre da o mesmo erro, não abre posição, desde já agradeço se alguém poder me ajudar.

failed exchange sell 5 WINJ21 at 115105 sl: 20 tp: -10 [Invalid stops]

Olá,

SL e TP são preços,  então os valores corretos de SL / TP  no exemplo seriam  ===>    SL: 115125  TP: 115095 .  Examina o valor de tick.last.

Obs: Não entendi a condição abaixo.  Se (true) return?

if ( SymbolInfoTick( _Symbol , tick ) ) return;   
 
Rogerio Giannetti Torres:

Olá,

SL e TP são preços,  então os valores corretos de SL / TP  no exemplo seriam  ===>    SL: 115125  TP: 115095 .  Examina o valor de tick.last.

Obs: Não entendi a condição abaixo.  Se (true) return?

Obrigado, agora entendi.
 

Olá, iniciei agora no MT5 demo e estou tendo problema para abrir posição manual no mini índice, porém quando mudo para ações, o problema não ocorre.

este é o erro que aparece: "failed exchange buy 115 WINQ23 at market [Invalid price]". O que devo fazer para resolver isso?

 
lucas944 #:

Olá, iniciei agora no MT5 demo e estou tendo problema para abrir posição manual no mini índice, porém quando mudo para ações, o problema não ocorre.

este é o erro que aparece: "failed exchange buy 115 WINQ23 at market [Invalid price]". O que devo fazer para resolver isso?

1) Abra um topico seu e nao roube o de outra pessoa.

2) Conheça o mercado em que opera. Voce realmente quer abrir 115 contratos no mini indice de agosto? Quanto mais contrato pra frente, menor a liquidez e voce esta quase 4 contratos pra frente. Acreditaria que nao tem ninguem no book dai o demo rejeita a ordem.