255 EMAとMACDに基づく反転取引戦略


作成日: 2023-09-20 15:08:14 最終変更日: 2023-09-20 15:08:14
コピー: 0 クリック数: 748
1
フォロー
1617
フォロワー

概要

この戦略は,255周期のEMAとMACDの指標を利用して,逆転の取引機会を探します. 255EMAから遠ざかった価格で,MACDの金叉または死叉が発生したときに逆転入りをします.

戦略原則

  1. 255周期のEMAを中長期のトレンドとして使用する.価格がEMAから遠ざかることは,超買超売の領域に入ることを意味する.

  2. EMA上は上軌を設定し,EMA下は下軌を設定し,軌道の幅はATR指標によって動的に調整する.

  3. 価格が上線より高い時は超買区,下線より低い時は超売区である。これらの場合,反転信号の出現を待たなければならない。

  4. MACD指標は標準パラメータ ((12,26,9) を採用している.MACD金叉は多頭シグナルで,死叉は空頭シグナルである.

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