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 クロスオーバーは上昇信号であり,デスクロスは下落信号である.

  5. 価格が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")





もっと