Estratégia de Trailing Stop Loss de Média Móvel MACD Cross Trend


Data de criação: 2023-11-06 11:56:14 última modificação: 2023-11-06 11:56:14
cópia: 0 Cliques: 623
1
focar em
1617
Seguidores

Estratégia de Trailing Stop Loss de Média Móvel MACD Cross Trend

Visão geral

A estratégia usa o indicador MACD para determinar a direção da tendência, combinando a linha média EMA e a linha média SMA como julgamento auxiliar. O sinal de entrada atravessa a linha de sinal na linha reta do MACD e tende para cima, o stop loss é o preço que cai para o stop loss flutuante calculado pelo ATR. A estratégia também configura saídas em lotes, primeiro eliminando uma parte da posição para obter lucro, em seguida, quando o preço atinge uma alta maior, e depois eliminando a parte da posição para garantir um grande lucro.

Princípios

Sinais de entrada

Quando a linha rápida EMA atravessa a linha lenta EMA, indica que a tendência de mudança de preço a curto prazo é melhor do que a tendência de longo prazo e é considerada um sinal de compra. Ao mesmo tempo, a SMA lenta atravessada no SMA rápido também indica que o impulso de aumento de preço a curto prazo é melhor do que o longo prazo.

Método de amortização

O ATR é usado para calcular o Stop Loss. O ATR pode efetivamente refletir a amplitude de oscilação do preço. Quando o preço cai abaixo dessa amplitude de oscilação, o Stop Loss é retirado. O ATR pode ser ajustado periodicamente, reduzindo os períodos para que o Stop Loss seja mais preciso, mas mais fácil de ser quebrado.

Forma de partida

Comece por lotes, primeiro, depois de um pequeno aumento, leve parte do dinheiro de retorno da posição. Em seguida, quando o preço aumenta drasticamente, leve parte do lucro da posição. Finalmente, segure parte da posição e mantenha até que o ponto de parada atire o ponto de parada. Isso pode bloquear parte do lucro e manter o lucro por algum tempo.

Vantagens

  • O MACD pode ser usado para determinar a direção da tendência, auxiliado por sinais cruzados de EMA e SMA, para determinar com mais precisão o momento de entrada
  • O Stop Loss calculado pelo ATR permite a realização de um Stop Loss e o acompanhamento de uma tendência
  • A partir daí, você pode ganhar dinheiro, bloquear os lucros e ficar com eles por um tempo.

Riscos e soluções

  • O MACD e os indicadores de tendência correm o risco de emitir sinais errados. Os parâmetros podem ser ajustados de forma apropriada ou outros indicadores podem ser adicionados para auxiliar no julgamento.
  • Risco de ATR ser ultrapassado. O ATR pode ser ampliado de acordo com o ciclo ou o coeficiente de parada.
  • Risco de ser preso durante o rastreamento de posições. Pode reduzir a proporção de posições de rastreamento e parar os prejuízos a tempo.

Direção de otimização

  • Optimizar os parâmetros do MACD para um julgamento mais preciso das tendências

  • Optimizar os parâmetros do ciclo ATR para tornar o stop loss mais adequado

  • Optimizar a proporção de saídas e o controle de posições, reduzindo o risco de cobertura

  • Aumentar o stop-loss móvel ou considerar o stop-loss de otimização do indicador de flutuação

Resumir

A estratégia combina vários indicadores, como MACD, EMA / SMA, para determinar a direção da tendência, a fim de obter um momento de entrada preciso. Ao mesmo tempo, o ATR flutuante é usado para bloquear os lucros e acompanhar a tendência para obter melhores resultados.

Código-fonte da estratégia
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Deobald

//@version=4
strategy("MACD Strategy", overlay=true)

// FUNCTIONS

Ema(src,p) =>
    ema = 0.
    sf = 2/(p+1)
    ema := nz(ema[1] + sf*(src - ema[1]),src)

Sma(src,p) => a = cum(src), (a - a[max(p,0)])/max(p,0)

Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

/// TREND
ribbon_period = input(34, "Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)


// MACD
fast_length = input(title="Fast Length", type=input.integer, defval=3)
slow_length = input(title="Slow Length", type=input.integer, defval=5)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 2)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? Sma(src, fast_length) : Ema(src, fast_length)
slow_ma = sma_source ? Sma(src, slow_length) : Ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? Sma(macd, signal_length) : Ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)



// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(1, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(10, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(5, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(50, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)




// Stop Loss
multiplier = input(2.2, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(17,"ATR period", minval=1, step=1)

// Strategy
entry_long=crossover(macd,signal) and leadLine2 < leadLine1
entry_price_long=valuewhen(entry_long,close,0)
SL_floating_long = entry_price_long - multiplier*Atr(ATR_period)
exit_long= close < SL_floating_long 

///// BACKTEST PERIOD ///////
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() => true

if testPeriod()
    strategy.entry("long", strategy.long, comment="Long", when=entry_long)
    strategy.exit("TP1","long", qty_percent=long_tp1_qty, limit=long_take_level_1)//, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.exit("TP2", qty_percent=long_tp2_qty, limit=long_take_level_2) //, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.close_all("long", when=exit_long, comment="exit long" )


// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? SL_floating_long : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")