Neo traderBot

Neo traderBot

Você sabia?

Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!

leaf leftleaf right
Notifications
Clear all

[Solucionado] Backtesting Roda no WDO, mas não Roda no DOLFUT

4 Posts
2 Usuários
0 Reactions
164 Visualizações
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

Boa tarde, esse código roda no backtesting em Mini contratos de Dolar "WDO", intraday, 5,12 min, mas quando tento rodar ele no DOLFUT para fazer backtesting e comparar os resultados ele não roda. Alguém saberia o motivo e como corrigir? 

Obs. A reentrada "preço médio" ou "Martingale" é proposital.

input

  BollingerLenght(19);
  BollingerMult(2);
  BollingerMaType(0);
  StrategyDirection (2)				//0. Long,  1. Short, 2. Both

  //HORÁRIO DA ESTRATÉGIA

  HorarioIncio(905);
  HorarioLimite(1600);
  HorarioFim(1730);
  DayTrade(1);    

var
  bbUpper,bbLower         : Float;
  sinalC,sinalV                 : Boolean;
  saidaC,saidaV               : Boolean;
  dentroHorario               : Boolean;

Begin
  
// ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
// REGRAS DO SETUP  ====================================

  bbUpper := BollingerBands(BollingerMult,BollingerLenght,BollingerMaType)|0|;
  bbLower := BollingerBands(BollingerMult,BollingerLenght,BollingerMaType)|1|;
  bbBasis := media(BollingerLenght, close);
  dentrohorario := (Time >= HorarioIncio) and (TIME <= HorarioLimite); 

  sinalC := (close[1] < bbLower[1]) and (close > bbLower);
  sinalV := (close[1] > bbUpper) and (close < bbUpper);
  saidaC := (close > bbBasis);
  saidaV := (close < bbBasis);
   
//Define entradas ==========================================

  {StrategyDirection  0. Long,  1. Short, 2. Both}
  If (sinalC) and ((StrategyDirection = 0) or (StrategyDirection = 2)) then
    BuyAtMarket(1);
  
If (sinalV) and ((StrategyDirection = 1) or (StrategyDirection = 2)) then
    SellShortAtMarket(1);

 //Buscar Saídas no alvo ======================================

  SellToCoverLimit (bbBasis);
  BuyToCoverLimit  (bbBasis);

//Fecha Posições no final do dia ================================ 
 
 If (DayTrade = 1) then
   begin
      If (Time >= HorarioFim) then
        ClosePosition;
   End;
End;

   
Citar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Olá @Credson!

É só tirar a quantidade de contratos das ordens de compra e venda que funciona. Pelo menos aqui rodou para o DOLFUT e INDFUT.

 

  {StrategyDirection  0. Long,  1. Short, 2. Both}
  If (sinalC) and ((StrategyDirection = 0) or (StrategyDirection = 2)) then
    BuyAtMarket;
  
If (sinalV) and ((StrategyDirection = 1) or (StrategyDirection = 2)) then
    SellShortAtMarket;

   
ReplyCitar
Credson
(@m4tr1xbr)
Membro Moderator
Registrou: 2 anos atrás
Posts: 45
Iniciador do tópico  

@admin, grande Johnathas, depois que eu postei no fórum fui testar e vi que era por causa da quantidade de ordens. Só uma pergunta você sabe o porque dessa restrição?


   
ReplyCitar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Opa, @credson!

O lote padrão de negociação de contrato cheio, seja dólar ou índice é de 5 contratos.

Você perceberá que a estratégia funciona passando como parâmetro nas ordens uma quantidade múltipla de 5 para os contratos cheios.

Ao não fornecer parâmetro, a ordem será executada com o lote mínimo.

Quando se especifica uma quantidade que não é múltipla de lote mínimo, o Profit ignora o comando.

 

abs!


   
ReplyCitar