資源の読み込みに... 荷物...

EMAとスーパートレンドの組み合わせ 定量取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-06-17 16:52:17
タグ:エイマ

img

概要

この戦略は,指数移動平均値 (EMA) とスーパートレンド指標を組み合わせて,買い・売るシグナルを生成する.価格が20日間のEMAを超え,スーパートレンド指標が上昇傾向にあるとき,買い信号が生成される.価格が20日間のEMAを下回り,スーパートレンド指標が下落傾向にあるとき,売り信号が生成される.この戦略は,EMAをフィルタリング条件として利用しながら,トレンド市場状況を把握することを目的としている.

戦略原則

  1. トレンド決定のフィルタリング条件として20日間のEMAを計算する.
  2. 超トレンド指標を計算します.これは平均真差 (ATR) と上昇傾向/下落傾向に基づいて上部と下部帯をグラフ化します.
  3. スーパートレンド指標のトレンド方向と20日間のEMAに対する価格の相対的な位置に基づいて購入・売却信号を生成する:
    • 価格が20日間の EMAを突破し,スーパートレンド指標が上昇傾向にあるとき,買い信号が生成されます.
    • 価格が20日間の EMAを下回り,スーパートレンド指標が下落傾向にあるとき,セールシグナルが生成されます.
  4. この戦略は,買い信号でロングポジションに入手し,売り信号で終了します.

戦略 の 利点

  1. EMA と Supertrend インジケーターを組み合わせることで,この戦略は市場の傾向状況を効果的に把握し,誤ったシグナルを減らすことができます.
  2. スーパートレンド指標はATRをベースにしており,上位と下位帯間の距離を動的に調整し,異なる市場の変動に適応できます.
  3. EMA をトレンド決定のフィルタリング条件として使用すると,トレンド方向にポジションが開かれ,戦略の勝率が増加します.
  4. 戦略の論理は単純で直ぐで 分かりやすく実行できます

戦略リスク

  1. 不安定な市場では,この戦略は頻繁に買い売り信号を生むことがあり,過剰な取引と取引コストの侵食につながります.
  2. この戦略は,EMAとスーパートレンド指標に依存しており,特定の市場条件では効果がなくなり,遅れることもあります.
  3. この戦略は,非常に不安定な市場状況下で大きな引き下げをもたらす可能性があるストップ・ロースやポジションサイジングなどのリスク管理を考慮していない.

戦略の最適化方向

  1. ATRに基づく動的ストップ・ロスの設定など,ストップ・ロスのメカニズムを導入し,取引毎の最大損失を制御する.
  2. EMAとスーパートレンド指標のパラメータを最適化し,最適なパラメータ組み合わせを見つけるためにパラメータ最適化方法を使用し,戦略の適応性と安定性を向上させる.
  3. ポジションのサイズを市場変動や口座の利益と損失に基づいて動的に調整することで,全体的なリスクを管理する.
  4. 偽信号をさらに減らすために,取引量,変動等などの他のフィルタリング条件を追加することを検討する.

概要

この戦略は,20日間のEMAとスーパートレンドインジケーターを組み合わせて買い売りシグナルを生成し,トレンド市場の条件を把握することを目的としている.この戦略の利点は,そのシンプルさとEMAとスーパートレンドインジケーターの組み合わせにある.これは誤った信号を効果的に減らすことができる.しかし,不安定な市場で,戦略は頻繁に取引され,リスク管理措置がない.将来の改善は,ストップロスト,ポジションサイズ,パラメータ最適化方法を組み込むことを考慮することができます.全体的に,この戦略はトレードトレンドにシンプルで効果的なアプローチを提供します.しかし,実践的な適用のためにさらなる最適化と精製が必要です.


/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("20 EMA and Supertrend Strategy", overlay=true)

// Inputs
emaLength = input(20, title="EMA Length")
supertrendMultiplier = input.float(3.0, title="Supertrend Multiplier")
supertrendPeriod = input(10, title="Supertrend Period")

// EMA Calculation
ema = ta.ema(close, emaLength)

// Supertrend Calculation
Periods = supertrendPeriod
src = hl2
Multiplier = supertrendMultiplier
changeATR= input.bool(true, title="Change ATR Calculation Method?")
showsignals = input.bool(true, title="Show Buy/Sell Signals?")
highlighting = input.bool(true, title="Highlighter On/Off?")
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = na(up[1]) ? up : up[1]
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = na(dn[1]) ? dn : dn[1]
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := na(trend[1]) ? trend : trend[1]
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(series=buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(series=buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.white)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(series=sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(series=sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.white)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Buy and Sell Signals based on EMA and Supertrend
buySignalEMA = ta.crossover(close, ema) and trend == 1
sellSignalEMA = ta.crossunder(close, ema) and trend == -1

// Plot EMA
plot(ema, color=color.blue, title="20 EMA")

// Plot Buy and Sell Signals
plotshape(series=buySignalEMA, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")
plotshape(series=sellSignalEMA, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")

// Strategy Entries and Exits
if (buySignalEMA)
    strategy.entry("Buy", strategy.long)

if (sellSignalEMA)
    strategy.close("Buy")


関連性

もっと