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

RSIと移動平均の組み合わせた定量取引戦略の傾向

作者: リン・ハーンチャオチャン, 日付: 2025-01-06 10:58:42
タグ:RSIマルチSMATPSL

img

概要

この戦略は,相対強度指数 (RSI) と単純な移動平均 (SMA) を組み合わせたトレンドフォロー取引システムである.動向指数を用い,動向をRSIと確認し,トレンドと動向が一致するときに取引を実行する.この戦略には,効果的なリスク管理のための包括的なストップ・ロストとテイク・プロフィートメカニズムが含まれます.

戦略原則

基本論理は2つの技術指標の組み合わせに基づいています

  1. 移動平均 (MA): 全体的な傾向を決定するために使用されます.価格がMAを超えると上昇傾向が認識され,MAを下回ると下落傾向が認識されます.
  2. 相対強度指数 (RSI): 価格の勢いを確認するために使用される.RSIが値を下げると下落する勢い (例えば45) が確認される.

取引信号生成論理:

  • ローング条件: 価格がMA以上,RSIが購入限界以上
  • 短期間条件: 価格がMA以下,RSIが販売限界以下

リスク管理は,エントリー価格の固定パーセントとして設定された,パーセントベースのストップ・ロストとテイク・プロフィートレベルを使用します.

戦略 の 利点

  1. シグナル安定性:トレンドとモメントの二重確認によって偽信号を減らす
  2. リスク管理を徹底する ストップ・ロスの固定割合と,収益を上げることで,取引ごとにリスクを効果的に制御する
  3. パラメータの柔軟性: MA 期間や RSI 限界値のような主要なパラメータは,異なる市場特性に最適化できます.
  4. 明確な戦略論理: 取引規則は理解し実行する シンプルで直感的な
  5. 高い適応性:様々な取引時間枠に適用可能

戦略リスク

  1. トレンド逆転リスク: トレンド転換時に連続的な停止が起こる可能性があります.
  2. 範囲限定の市場リスク:横向市場での頻繁な取引損失の可能性
  3. パラメータ依存性: 適正なパラメータは,市場環境によって大きく異なる可能性があります.
  4. 変動リスク:高波動の際に重大な変動が起こり得る
  5. 技術指標の遅延:MAとRSIには固有の遅延があり,エントリータイミングを遅らせる可能性があります.

戦略の最適化方向

  1. ダイナミックパラメータの最適化: 市場変動に基づいて MA 期間と RSI 値を調整する適応パラメータメカニズムを導入する
  2. 市場環境のフィルタリング: 波動性の高い状況でポジションのサイズ調整または取引を一時停止するために波動性フィルタリングメカニズムを追加する
  3. 複数のタイムフレーム分析:方向の精度を向上させるために,より長いタイムフレームのトレンド確認を組み込む
  4. ストップ・ロスの最適化: 利益の保護のためにトラッキング・ストップを実施する
  5. シグナルフィルタリング: 信号信頼性を向上させるために音量および他の補助指標を追加

概要

この戦略は,トレンドとモメンタム指標を組み合わせて論理的に明確でリスク制御された取引システムを構築する.固有のリスクが存在するが,戦略は適切なパラメータ設定とリスク管理を通じて良い実用性を示している.将来の最適化は動的パラメータ調整,市場環境の認識,信号品質の改善に焦点を当て,戦略の安定性と収益性を向上させる可能性がある.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © raiford87

//@version=6
strategy("RSI + MA Trend Strategy (v6)",
     shorttitle="RSI_MA_Trend_v6",
     overlay=true,
     initial_capital=50000,
     default_qty_type=strategy.fixed,
     default_qty_value=1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 1. USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────────────
maLength       = input.int(50,   "Moving Average Length")
rsiLength      = input.int(14,   "RSI Length")
rsiBuyLevel    = input.int(55,   "RSI > X for Buy",  minval=1, maxval=99)
rsiSellLevel   = input.int(45,   "RSI < X for Sell", minval=1, maxval=99)

stopLossPerc   = input.float(1.0,  "Stop Loss %",    minval=0.1)
takeProfitPerc = input.float(2.0,  "Take Profit %",  minval=0.1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 2. INDICATOR CALCULATIONS
// ─────────────────────────────────────────────────────────────────────────────────────
maValue = ta.sma(close, maLength)
rsiVal  = ta.rsi(close, rsiLength)

// Trend conditions
bullTrend = close > maValue
bearTrend = close < maValue

// RSI conditions
rsiBull   = rsiVal > rsiBuyLevel
rsiBear   = rsiVal < rsiSellLevel

// ─────────────────────────────────────────────────────────────────────────────────────
// 3. ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────────────
longCondition  = bullTrend and rsiBull
shortCondition = bearTrend and rsiBear

if longCondition
    strategy.entry("RSI MA Long", strategy.long)
if shortCondition
    strategy.entry("RSI MA Short", strategy.short)

// ─────────────────────────────────────────────────────────────────────────────────────
// 4. STOP LOSS & TAKE PROFIT
// ─────────────────────────────────────────────────────────────────────────────────────
stopLossLevel   = stopLossPerc   * 0.01
takeProfitLevel = takeProfitPerc * 0.01

if strategy.position_size > 0
    stopPriceLong = strategy.position_avg_price * (1 - stopLossLevel)
    tpPriceLong   = strategy.position_avg_price * (1 + takeProfitLevel)
    strategy.exit("Exit Long", from_entry="RSI MA Long", stop=stopPriceLong, limit=tpPriceLong)

if strategy.position_size < 0
    stopPriceShort = strategy.position_avg_price * (1 + stopLossLevel)
    tpPriceShort   = strategy.position_avg_price * (1 - takeProfitLevel)
    strategy.exit("Exit Short", from_entry="RSI MA Short", stop=stopPriceShort, limit=tpPriceShort)

// ─────────────────────────────────────────────────────────────────────────────────────
// 5. PLOT SIGNALS & LEVELS
// ─────────────────────────────────────────────────────────────────────────────────────
plot(maValue, color=color.yellow, linewidth=2, title="Moving Average")

plotchar(longCondition,  title="Long Signal",  char='▲', location=location.belowbar, color=color.green, size=size.tiny)
plotchar(shortCondition, title="Short Signal", char='▼', location=location.abovebar, color=color.red,   size=size.tiny)

// Plot Stop & TP lines
posIsLong  = strategy.position_size > 0
posIsShort = strategy.position_size < 0

plotStopLong = posIsLong ? strategy.position_avg_price * (1 - stopLossLevel) : na
plotTpLong   = posIsLong ? strategy.position_avg_price * (1 + takeProfitLevel): na
plotStopShort= posIsShort? strategy.position_avg_price * (1 + stopLossLevel) : na
plotTpShort  = posIsShort? strategy.position_avg_price * (1 - takeProfitLevel): na

plot(plotStopLong,  color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Long")
plot(plotTpLong,    color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Long")
plot(plotStopShort, color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Short")
plot(plotTpShort,   color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Short")


関連性

もっと