255 EMA 및 MACD 역전 거래 전략

저자:차오장, 날짜: 2023-09-20 15:08:14
태그:

전반적인 설명

이 전략은 회전 거래 기회를 식별하기 위해 255 기간 EMA와 MACD 지표를 사용합니다. 가격이 255 EMA와 MACD 교차가 발생했을 때 회전 포지션을 입력합니다.

전략 논리

  1. 255주기 EMA는 중장기 트렌드 방향을 결정하는 데 사용됩니다. EMA에서 멀리 떨어져있는 가격은 과소매/ 과소매 영역을 나타냅니다.

  2. 상단 및 하단 대역은 EMA를 기반으로 설정되며, 대역 폭은 ATR 지표에 의해 동적으로 조정됩니다.

  3. 가격이 상위 범위를 넘어서면, 그것은 과잉 매입 영역에 있습니다. 하위 범위를 넘어서면, 그것은 과잉 판매 영역에 있습니다. 이것은 반전을 예상하는 상황입니다.

  4. MACD 지표는 표준 매개 변수 (12, 26, 9) 를 사용합니다. MACD 크로스오버는 상승 신호이며 죽음의 크로스 (death cross) 는 하락 신호입니다.

  5. EMA 과잉 구매/ 과잉 판매 및 MACD 신호와 결합하면 가격이 EMA에서 멀리 떨어져 있고 MACD 반전이 발생하면 역행 지위가 취됩니다.

이점 분석

  1. 255주기 EMA는 중장기 동향을 상당히 잘 파악할 수 있습니다.

  2. MACD 크로스오버는 단기적 역전 기회를 민감하게 파악할 수 있습니다.

  3. EMA 대역은 트렌드 추종을 피하기 위해 과반 구매/ 과반 판매 지역을 식별하는 데 도움이 됩니다.

  4. 리버스 트레이딩은 일부 계획에 기반한 특징으로 가격 반전을 앞두고 초기 입력을 허용합니다.

  5. 동적 ATR 스톱 손실은 위험을 효과적으로 제어 할 수 있습니다.

위험 분석

  1. MACD 신호는 잘못된 반전으로 인해 불필요한 손실이 발생할 수 있습니다.

  2. 강력한 트렌드 시나리오에서 반전이 실패할 가능성이 있으므로 맹목적인 반전을 피해야 합니다.

  3. 너무 긴 스톱 로스를 설정하면 조기 중단될 수 있고 너무 넓은 스톱 로스는 위험 통제가 불충분할 수 있습니다.

  4. 부적절한 매개 변수 조정도 전략 성능에 영향을 미치며 반복 최적화를 요구합니다.

  5. 거래 비용도 최종 수익성에 영향을 미칠 수 있으므로 고려해야 합니다.

최적화 방향

  1. 중장기 트렌드 가이드를 더 잘 찾기 위해 다른 EMA 기간을 테스트하십시오.

  2. 다른 지표와 EMA를 결합하여 과잉 구매/ 과잉 판매를 확인해보십시오. 예를 들어 볼링거 밴드, KD, RSI.

  3. 더 나은 민감성 또는 안정성을 위해 MACD 매개 변수를 최적화하십시오.

  4. 다른 스톱 로스 방법을 테스트해 보세요. 수익을 확보하기 위해 트레일 스톱처럼요.

  5. 다양한 제품과 시간 프레임에 걸쳐 견고성을 위한 매개 변수를 최적화합니다.

  6. 강한 트렌드에서 반전을 피하기 위해 트렌드 강도 필터를 포함합니다.

결론

이 전략은 EMA 중장기 트렌드 및 MACD 단기 역전, 과잉 구매 / 과잉 판매 지역에서 역전 거래를 결합합니다. 장단점이있는 기본 역전 전략입니다. 추가 매개 변수 조정 및 위험 통제는 효율적인 거래 시스템으로 전환 할 수 있습니다. 그러나 모든 전략은 기계적 신호가 아니라 시장 환경에 따라 적응 조정이 필요합니다.


/*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")





더 많은