Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!
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;
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;
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!