Esta estratégia combina o conceito de negociação de tartarugas com a análise de fase de Niko Bakker, usando três médias móveis de diferentes ciclos para determinar a direção da tendência para seguir a tendência.
Calcule três médias móveis de diferentes ciclos: o período médio móvel rápido é de 8 dias, o período médio médio móvel é de 21 dias e o período médio móvel lento é de 55 dias.
Determinar as condições de entrada: quando a média móvel rápida cruzar acima da média móvel média e as três médias móveis estiverem em tendência ascendente, fazer o longo; quando a média móvel rápida cruzar abaixo da média móvel média e as três médias móveis estiverem em tendência descendente, fazer o curto.
Determinar as condições de saída: fechar posições quando a média móvel rápida cruza a média móvel média na direção oposta.
Dimensão de posição: usar dimensionamento de posição fixo, abrir 1 contrato de cada vez.
O uso de três médias móveis ajuda a determinar a direção da tendência e evitar falhas.
Seguindo a tendência para o potencial de lucro.
A utilização de médias móveis resulta em lucros estáveis e em reduções relativamente baixas.
A estratégia de stop loss controlada reduz a probabilidade de grandes perdas.
São propensos a pequenas perdas, reduzindo a eficiência dos lucros.
As médias móveis estão atrasadas e podem perder os pontos de inversão da tendência.
O dimensionamento das posições fixas não pode controlar de forma eficaz os riscos, podendo causar uma chamada de margem durante uma flutuação significativa do mercado.
A otimização inadequada dos parâmetros leva a excesso de negociação, aumentando os custos de negociação e o deslizamento.
Otimizar os períodos de média móvel para se adequarem às características do instrumento de negociação.
Utilize o ATR para ajustar dinamicamente o dimensionamento da posição.
Adicione estratégia de stop loss.
Incorporar indicadores de volume de negociação para determinar a fiabilidade das tendências.
Esta estratégia integra indicadores técnicos tradicionais e a filosofia da negociação de tartarugas, usando três médias móveis para rastrear tendências. Com a otimização adequada dos parâmetros, pode alcançar uma boa lucratividade. Mas também tem alguns riscos. Stop loss, dimensionamento de posição e outras medidas precisam ser utilizadas para controlar riscos e obter lucros constantes a longo prazo a partir desta estratégia quantitativa de negociação.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JoshuaMcGowan //@version=4 // 1. Define strategy settings strategy(title="Triple Moving Average", overlay=true, pyramiding=0, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=4, slippage=2) fastMALen = input(title="Fast MA Length", type=input.integer, defval=8) medMALen = input(title="Medium MA Length", type=input.integer, defval=21) slowMALen = input(title="Slow MA Length", type=input.integer, defval=55) //endMonth = input(title="End Month Backtest", type=input.integer, defval=11) //endYear = input(title="End Year Backtest", type=input.integer, defval=2019) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2016, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true) riskPerc = input(title="Risk %", type=input.float, defval=0.5, step=0.25) // 2. Calculate strategy values fastMA = sma(close, fastMALen) medMA = sma(close, medMALen) slowMA = sma(close, slowMALen) //Position Sizing riskEquity = (riskPerc / 100) * strategy.equity atrCurrency = (atr(20) * syminfo.pointvalue) posSize = usePosSize ? floor(riskEquity / atrCurrency) : 1 //Backtest Window //tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0)) // 3. Determine long trading conditions enterLong = crossover(fastMA, medMA) and (fastMA > slowMA) and (medMA > slowMA) and window() exitLong = crossunder(fastMA, medMA) // 4. Code short trading conditions enterShort = crossunder(fastMA, medMA) and (fastMA < slowMA) and (medMA < slowMA) and window() exitShort = crossover(fastMA, medMA) // 5. Output strategy data plot(series=fastMA, color=color.green, title="Fast MA") plot(series=medMA, color=color.purple, title="Medium MA") plot(series=slowMA, color=color.red, title="Slow MA", linewidth=2) bgColour = enterLong and (strategy.position_size < 1) ? color.green : enterShort and (strategy.position_size > -1) ? color.red : exitLong and (strategy.position_size > 0) ? color.lime : exitShort and (strategy.position_size < 0) ? color.orange : na bgcolor(color=bgColour, transp=85) // 6. Submit entry orders if (enterLong) strategy.entry(id="EL", long=true, qty=1) if (enterShort) strategy.entry(id="ES", long=false, qty=1) // 7. Submit exit orders strategy.close_all(when=exitLong and (strategy.position_size > 0)) strategy.close_all(when=exitShort and (strategy.position_size < 0)) strategy.close_all(when=not window()) //END