255 Estratégia de negociação de reversão do EMA e do MACD

Autora:ChaoZhang, Data: 2023-09-20 15:08:14
Tags:

Resumo

Esta estratégia utiliza o indicador EMA e MACD de 255 períodos para identificar oportunidades de negociação de reversão.

Estratégia lógica

  1. A EMA de 255 períodos é utilizada para determinar a direcção da tendência a médio e longo prazo.

  2. As bandas superior e inferior são definidas com base na EMA, com a largura da banda ajustada dinamicamente pelo indicador ATR.

  3. Quando o preço está acima da faixa superior, está na região de sobrecompra. Quando está abaixo da faixa inferior, está na região de sobrevenda. Estas são situações para antecipar inversões.

  4. O indicador MACD usa parâmetros padrão (12, 26, 9).

  5. Em combinação com os sinais de sobrecompra/supervenda da EMA e do MACD, as posições de reversão são tomadas quando o preço está longe da EMA e ocorre uma reversão do MACD.

Análise das vantagens

  1. A EMA de 255 períodos pode determinar bem as tendências de médio a longo prazo.

  2. Os crossovers do MACD podem captar de forma sensível oportunidades de reversão de curto prazo.

  3. As faixas da EMA ajudam a identificar as regiões de sobrecompra/supervenda para evitar a perseguição de tendências.

  4. A negociação reversa permite entradas precoces antes das inversões de preços, com algumas características baseadas em planos.

  5. O ATR dinâmico pode controlar os riscos de forma eficaz.

Análise de riscos

  1. Os sinais MACD podem ter falsas inversões, levando a perdas desnecessárias.

  2. É provável que as reversões falhem em cenários de tendências fortes, pelo que devem ser evitadas reversões cegas.

  3. A definição de stop loss demasiado apertada pode provocar uma interrupção prematura, enquanto a definição demasiado ampla pode resultar num controlo insuficiente do risco.

  4. Ajuste de parâmetros inadequado também pode afetar o desempenho da estratégia, exigindo otimização iterativa.

  5. Os custos de negociação também podem afetar a rentabilidade final e devem ser tidos em conta.

Orientações de otimização

  1. Teste diferentes períodos de EMA para encontrar um melhor indicador de tendência de médio a longo prazo.

  2. Tente combinar outros indicadores com a EMA para identificar sobrecompra/supervenda, por exemplo, Bandas de Bollinger, KD, RSI.

  3. Otimizar os parâmetros do MACD para uma melhor sensibilidade ou estabilidade.

  4. Teste outros métodos de stop loss, como trailing stop para bloquear lucros.

  5. Otimizar os parâmetros em diferentes produtos e prazos de robustez.

  6. Incorporar um filtro de força de tendência para evitar reversões em tendências fortes.

Conclusão

Esta estratégia combina tendência de médio a longo prazo EMA e reversões de curto prazo MACD, negociando reverso em regiões sobrecompradas / sobrevendidas. É uma estratégia de reversão básica com prós e contras.


/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-19 00:00:00
period: 15m
basePeriod: 5m
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/
// © bufirolas

//--- From 15 Trading Examples by Trader Alyx ---
// Seems like this strategy works better if we reverse the EMA filter logic.

// "Description: This basic scalping strategy allows you to enter the market based upon sentiment
// provided by the EMA, set at 255 periods. When price is trading below the 255 EMA, you would
// look to enter a LONG BUY positions, and when price is trading above the 255 EMA, you would
// look to enter a SELL SHORT position. The MACD lagging indicator will show you clear signals for
// when to do this. When the MACD lines cross in a bullish manner and price is below the 255
// EMA, buy. When the MACD lines cross in a bearish manner and price is above the 255 EMA,
// sell.
// NOTE: Make sure that price is trading away from the 255EMA before entering a LONG or SHORT
// position. As you can see in the chart below, the clearest signs for trade entry were presented
// when price was trading AWAY from the 255EMA"

//@version=4
// strategy("255 EMA Strategy", overlay=true, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=100, commission_value = 0.04, initial_capital=100)

//Inputs
i_reverse=input(false, title="Trade Reverse")
i_EMAreverse=input(true, title="EMA Reverse Entry")
i_EMAlength=input(defval=255, title="EMA Length")
i_EMAexpander=input(defval=5, title="EMA Expander")
i_MACDmult=input(defval=1, minval=1, title="MACD Mult")

//SL & TP Calculations
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.2, title="SL Expander")*.01
i_TPExpander=input(defval=0, step=.2, title="TP Expander")*.01


//Strategy Variables
EMA=ema(close,i_EMAlength)
[macdLine, signalLine, histLine]=macd(close, 12*i_MACDmult, 26*i_MACDmult, 9*i_MACDmult)
EMAupper=EMA+((atr(100))*i_EMAexpander)
EMAlower=EMA-((atr(100))*i_EMAexpander)

//SL & TP Variables
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)

//Calculations
EMAbuy=i_EMAreverse ? close > EMAupper : close < EMAlower
EMAsell=i_EMAreverse ? close < EMAlower : close > EMAupper
MACDbuy=crossover(macdLine, signalLine)
MACDsell=crossunder(macdLine, signalLine)

//SL & TP Calculations
bought=strategy.position_size != strategy.position_size[1]
lSL=valuewhen(bought, SwingLow, 0)*(1-i_SLExpander)
sSL=valuewhen(bought, SwingHigh, 0)*(1+i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))*(1-i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price)*(1+i_TPExpander*100)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? lSL : isshort ? sSL : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
strategy.entry("long", long=not i_reverse?true:false, when=EMAbuy and MACDbuy)
strategy.entry("short", long=not i_reverse?false:true, when=EMAsell and MACDsell)

//Exits
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(EMA, "EMA", color=color.white, linewidth=2)
plot(EMAupper, "EMA Upper Band")
plot(EMAlower, "EMA Lower Band")
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")





Mais.