Estratégia de stop profit e stop loss de média móvel de três índices


Data de criação: 2024-02-04 10:38:42 última modificação: 2024-02-04 10:38:42
cópia: 0 Cliques: 680
1
focar em
1617
Seguidores

Estratégia de stop profit e stop loss de média móvel de três índices

Visão geral

A estratégia de stop loss de três indicadores de linha média é uma estratégia de acompanhamento de tendências baseada em três médias móveis de indicadores de três períodos diferentes. Ela usa ao mesmo tempo o indicador de amplitude real média para definir o stop loss e gerenciar o risco.

Princípio da estratégia

A estratégia usa três médias móveis indexadas: linha rápida, linha média e linha lenta. Faça mais quando a linha média atravessa a linha lenta; leve quando a linha rápida atravessa a linha média abaixo. Esta é uma estratégia típica de acompanhamento de tendências, que determina a direção da tendência através da conversão de três linhas uniformes.

Ao mesmo tempo, a estratégia usa o indicador de amplitude real média para calcular o ponto de parada. Concretamente, o ponto de parada múltipla é o preço de entrada + amplitude real média.*Coeficiente de paragem; paragem em branco como preço de entrada - amplitude real média*O coeficiente de suspensão. O princípio de suspensão é semelhante ao de suspensão. Isso pode efetivamente limitar o risco unilateral.

Análise de vantagens

  1. Os indicadores de decisão são intuitivos, claros e fáceis de entender.
  2. É muito sistemático e fácil de quantificar.
  3. Seguimento de tendências e controle de riscos.

Análise de Riscos

  1. O problema é que há um atraso e não há uma captação em tempo hábil.
  2. A tendência é de que os tremores se deteriorem facilmente.
  3. A configuração dos parâmetros precisa ser otimizada, caso contrário, a implementação não será eficaz.

As medidas de resposta ao risco incluem: redução apropriada do ciclo de linha média, otimização do coeficiente de parada e parada e adição de outros indicadores de decisão para auxiliar o julgamento.

Direção de otimização

  1. Combinação de vários indicadores de linha média para encontrar o melhor parâmetro.
  2. Adicionar outros indicadores técnicos, como MACD, RSI, etc.
  3. Parâmetros de otimização automática com algoritmos de aprendizagem de máquina.
  4. O Stop Loss é ajustado com base na dinâmica da amplitude real.
  5. Combinado com indicadores de emoção, evite transações excessivamente lotadas.

Resumir

A estratégia é, em geral, uma estratégia de acompanhamento de tendências de efeito estável, configuração de parâmetros simples, fácil de implementar. O risco unilateral pode ser limitado pelo stop loss dinâmico da amplitude real média. Mas é necessário prestar atenção à otimização de parâmetros e à combinação de indicadores, para evitar otimização excessiva e atrasos na tomada de decisão.

Código-fonte da estratégia
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//© Densz
strategy("3EMA with TP & SL (ATR)", overlay=true )

// INPUTS
startTime           =       input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000"))
endTime             =       input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))

slowEMALength       =       input(title="Slow EMA Length", type = input.integer, defval = 55)
middleEMALength     =       input(title="Middle EMA Length", type = input.integer, defval = 21)
fastEMALength       =       input(title="Fast EMA Length", type = input.integer, defval = 9)

trendMALength       =       input(title="Trend indicator MA Length", type = input.integer, defval = 200)

atrLength           =       input(title="ATR Length", type = input.integer, defval = 14)
tpATRMult           =       input(title="Take profit ATR multiplier", type = input.integer, defval = 3)
slATRMult           =       input(title="Stop loss ATR multiplier", type = input.integer, defval = 2)

rsiLength           =       input(title="RSI Length", type = input.integer, defval = 14)

// Indicators
slowEMA             =       ema(close, slowEMALength)
middEMA             =       ema(close, middleEMALength)
fastEMA             =       ema(close, fastEMALength)
atr                 =       atr(atrLength)

rsiValue            =       rsi(close, rsiLength)
isRsiOB             =       rsiValue >= 80
isRsiOS             =       rsiValue <= 20

sma200              =       sma(close, trendMALength)

inDateRange         =       true

// Plotting
plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50)
plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50)
plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50)

plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10)
plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB")
plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS")

float takeprofit    =       na
float stoploss      =       na

var line tpline     =       na
var line slline     =       na

if strategy.position_size != 0
    takeprofit := takeprofit[1]
    stoploss := stoploss[1]
    line.set_x2(tpline, bar_index)
    line.set_x2(slline, bar_index)
    line.set_extend(tpline, extend.none)
    line.set_extend(slline, extend.none)
    
// STRATEGY
goLong  = crossover(middEMA, slowEMA) and inDateRange
closeLong = crossunder(fastEMA, middEMA) and inDateRange


if goLong
    takeprofit := close + atr * tpATRMult
    stoploss := close - atr * slATRMult
    // tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted)
    // slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted)
    // label.new(bar_index, takeprofit, "TP", style=label.style_labeldown)
    // label.new(bar_index, stoploss, "SL", style=label.style_labelup)
    strategy.entry("Long", strategy.long, when = goLong)
    strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit)
if closeLong
    takeprofit := na
    stoploss := na
    strategy.close(id = "Long", when = closeLong)

if (not inDateRange)
    strategy.close_all()