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

RSIモメントフィルタを搭載した戦略をフォローするマルチテクニカル指標傾向

作者: リン・ハーンチャオチャン開催日:2024年12月20日 14時10分43秒
タグ:エイマRSIATRSMAマックド

img

概要

これはトレンドフォローする戦略で,複数の技術指標を組み合わせ,主に指数移動平均 (EMA) クロスオーバー,スーパートレンド指標,相対強度指数 (RSI) を使用して取引機会を特定する.この戦略は,指標を有機的に統合し,トレンドフォローにモメンタムフィルタリングを追加し,動的なストップ・ロストとテイク・プロフィートポジショニングのためにATRを使用することで完全な取引システムを達成する.

戦略の原則

戦略は,取引信号を決定するために三重フィルタリングメカニズムを使用します.

  1. EMAクロスオーバーシステムは,短期的なトレンド変化を記録し,速い EMAが遅い EMAを横切ると長い信号,低めの EMAを横切ると短い信号を生成します.
  2. スーパートレンド指標は,ATRに基づいて動的なサポート/レジスタンスラインを計算し,全体的なトレンド方向性を確認します. 価格がスーパートレンドラインの上,それ以下でショートする場合のみロングポジションが許可されます.
  3. RSI インディケーターは,過剰購入または過剰販売の市場条件をフィルタリングします.RSIが過剰購入レベルを下回る場合にのみロングエントリが許可され,過剰販売レベルを超えるとショートエントリが許可されます.

この戦略には,ATRベースのダイナミックストップ・ロスト・テイク・プロフィート・システムがあり,市場変動に基づいてリスク管理パラメータを自動的に調整する.また,低流動性の期間を避けるため,タイムフィルターによって取引を特定の期間に制限する.

戦略 の 利点

  1. 複数の技術指標の組み合わせにより,より信頼性の高い取引信号が提供され,単一の指標から来るかもしれない偽信号は避けられます.
  2. ダイナミックストップ・ロストとテイク・プロフィートの設定は,異なる市場の変動条件に適応し,非常に不安定な市場でより多くの呼吸空間を可能にします.
  3. RSIフィルタリングメカニズムは,極端な市場状況下で入場するリスクを効果的に軽減します.
  4. 時間フィルタ機能により,トレーダーは非効率な期間を回避し,特定の取引セッションに集中できます.

戦略リスク

  1. 複数のフィルタリング条件が 取引機会を逃す可能性があります
  2. ストップ・ロスのレベルは 急速に不安定な市場では 簡単に引き起こすことができます
  3. 過剰なパラメータ最適化によりオーバーフィッティングの問題が発生する可能性があります.
  4. 高周波取引は大きな取引コストを伴う可能性があります

戦略の最適化方向

  1. 追加的な確認として 音量指標を追加することを検討する.
  2. 適応性のあるパラメータ調整メカニズムを導入し,異なる市場環境により良い適応を図る.
  3. 傾向強度フィルターを導入し,弱い傾向市場での過剰取引を避ける.
  4. 市場状況に基づいてポジションサイズを動的に調整するよりインテリジェントなポジションサイズシステムを開発する.

概要

この戦略は,複数の技術指標とフィルタリング条件を組み合わせて,比較的完全な取引システムを構築する.その主な利点は,複数の確認メカニズムとダイナミックなリスク管理にありますが,パラメータ最適化と取引コストに注意を払わなければならない.継続的な最適化と改善を通じて,戦略は異なる市場環境で安定したパフォーマンスを維持する可能性があります.


/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Supertrend + EMA Crossover with RSI Filter", shorttitle="ST_EMA_RSI", overlay=true)

// Input parameters for EMA
fastEMA          = input.int(3,  title="Fast EMA Period", minval=1)
slowEMA          = input.int(6,  title="Slow EMA Period", minval=1)
atrLength        = input.int(3,  title="ATR Length", minval=1)

// Using a fixed multiplier for Supertrend calculation
stMultiplier = 1

// Stop loss and take profit multipliers
stopLossATR      = input.float(2.5, title="Stop Loss ATR Multiplier", minval=0.1, step=0.1)
takeProfitATR    = input.float(4,   title="Take Profit ATR Multiplier", minval=0.1, step=0.1)

// RSI inputs
rsiLength      = input.int(10, title="RSI Length", minval=1)
rsiOverbought  = input.float(65, title="RSI Overbought Level", minval=50.0, maxval=100.0)
rsiOversold    = input.float(30.0, title="RSI Oversold Level",   minval=0.0, maxval=50.0)

// Declare the RSI plot toggle input as a global variable
bool rsiPlotEnabled = input.bool(true, title="Show RSI in separate panel")

// Time filter inputs
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 2023 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime   = input(title="End Filter",   defval=timestamp("28 Apr 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Date/time filtering logic
inDateRange = true

// Calculate EMAs
fastEMALine = ta.ema(close, fastEMA)
slowEMALine = ta.ema(close, slowEMA)

// Calculate ATR
atr = ta.atr(atrLength)

// Calculate Supertrend using fixed multiplier
up = high - (stMultiplier * atr)
dn = low +  (stMultiplier * atr)

var float trendUp = na
var float trendDown = na
var int trend = na

trendUp   := na(trendUp[1])   ? up : (close[1] > trendUp[1]   ? math.min(up, trendUp[1])   : up)
trendDown := na(trendDown[1]) ? dn : (close[1] < trendDown[1] ? math.max(dn, trendDown[1]) : dn)

trend := close > nz(trendUp[1]) ? 1 : close < nz(trendDown[1]) ? -1 : nz(trend[1], 1)
supertrend = trend == 1 ? trendUp : trendDown

// Calculate RSI
myRSI = ta.rsi(close, rsiLength)

// Entry conditions with RSI filter
longEntryCondition  = ta.crossover(fastEMALine, slowEMALine) and (trend == 1) and (myRSI < rsiOverbought)
shortEntryCondition = ta.crossunder(fastEMALine, slowEMALine) and (trend == -1) and (myRSI > rsiOversold)

// Strategy entries
if inDateRange and longEntryCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)

if inDateRange and shortEntryCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)

// Stops and targets
if strategy.position_size > 0
    longStopLoss   = strategy.position_avg_price - stopLossATR * atr
    longTakeProfit = strategy.position_avg_price + takeProfitATR * atr
    strategy.exit("Long SL/TP", "Long", stop=longStopLoss, limit=longTakeProfit)

if strategy.position_size < 0
    shortStopLoss   = strategy.position_avg_price + stopLossATR * atr
    shortTakeProfit = strategy.position_avg_price - takeProfitATR * atr
    strategy.exit("Short SL/TP", "Short", stop=shortStopLoss, limit=shortTakeProfit)

// Plot EMAs and Supertrend
plot(fastEMALine, title="Fast EMA", color=color.new(color.blue, 0))
plot(slowEMALine, title="Slow EMA", color=color.new(color.red, 0))
plot(trend == 1 ? supertrend : na, title="Supertrend Up", color=color.green, style=plot.style_linebr)
plot(trend == -1 ? supertrend : na, title="Supertrend Down", color=color.red, style=plot.style_linebr)

// Plot RSI and hlines
plot(rsiPlotEnabled ? myRSI : na, title="RSI", color=color.new(color.purple, 0))
hline(rsiOverbought, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(rsiOversold,   "Oversold",   color=color.green, linestyle=hline.style_dotted)

// Plot entry signals
plotshape(longEntryCondition, title="Long Entry Signal", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0))
plotshape(shortEntryCondition, title="Short Entry Signal", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0))


関連性

もっと