Estratégia de acompanhamento de tendência de média móvel tripla


Data de criação: 2024-02-01 11:02:17 última modificação: 2024-02-01 11:02:17
cópia: 2 Cliques: 600
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendência de média móvel tripla

Visão geral

Esta estratégia combina o conceito de negociação de corvos com a análise de fases de Niko Bakkers, usando três médias móveis de diferentes períodos para determinar a direção da tendência e obter lucros de acompanhamento da tendência. Faça mais quando a média móvel rápida atravessa a média móvel rápida e as três médias móveis estão na mesma tendência de alta ou baixa; e faça zero quando a média móvel rápida atravessa a média móvel rápida e as três médias móveis estão na mesma tendência de alta ou baixa.

Princípio da estratégia

  1. Calcule as médias móveis de três períodos diferentes: média móvel rápida de 8 dias, média móvel rápida de 21 dias e média móvel lenta de 55 dias.

  2. Os critérios de admissão são: fazer mais quando a média móvel rápida atravessa a média móvel rápida e todas as três médias móveis estão em alta; fazer vazio quando a média móvel rápida atravessa a média móvel rápida abaixo da média móvel rápida e todas as três médias móveis estão em baixa.

  3. Para julgar as condições de partida: a média móvel rápida é invertida e a média móvel rápida é travada para equilibrar a posição.

  4. Controle de posicionamento: posicionamento fixo, 1 pessoa por cada abertura de posição. Também é possível ajustar a posição de acordo com a dinâmica do ATR.

Vantagens estratégicas

  1. O uso de três médias móveis ajuda a determinar a direção da tendência e a evitar falsas rupturas.

  2. O blogueiro também escreveu sobre o tema:

  3. A média móvel, por sua vez, tem um lucro estável e retira relativamente pouco.

  4. Estratégias controladas de parada de prejuízos para reduzir a probabilidade de grandes perdas.

Análise de Riscos

  1. É fácil gerar pequenos prejuízos repetidos e reduzir a eficiência dos lucros.

  2. A média móvel está atrasada e pode ter perdido o ponto de viragem.

  3. As posições fixas não são capazes de controlar os riscos de forma eficaz, podendo explodir em caso de uma grande turbulência.

  4. A otimização inadequada dos parâmetros pode levar a abertura e fechamento de posições com demasiada frequência, aumentando as taxas de transação e a perda de pontos de deslizamento.

Direção de otimização

  1. Optimizar os parâmetros de periodicidade das médias móveis para que sejam mais adequadas às características das variedades de negociação.

  2. Aplicação do indicador de volatilidade ATR para ajuste dinâmico de posições.

  3. Acompanhe a estratégia de Stop Loss.

  4. A confiabilidade da tendência, combinada com os indicadores de volume de transações.

Resumir

Esta estratégia integra os indicadores tradicionais de análise técnica com a filosofia de negociação de corvos. Usando três médias móveis para rastrear tendências, é possível obter melhores resultados de lucro se os parâmetros forem otimizados adequadamente.

Código-fonte da estratégia
/*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