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

リスク・リターン最適化システムを持つ二重移動平均のクロスRSIモメント戦略

作者: リン・ハーンチャオチャン開催日:2024年11月12日 16時58分
タグ:SMARSIATRRR

img

概要

これは,二重移動平均クロスオーバー,RSIオーバーバイト/オーバーセール条件,およびリスク・リターン比率管理を組み合わせる定量的な取引戦略である.この戦略は,より正確な取引信号フィルタリングのためにオーバーバイト/オーバーセールゾーンを識別するためにRSI指標を使用しながら,短期および長期移動平均クロスオーバーを通じて市場傾向の方向性を決定する.また,ATRベースのダイナミックストップ・ロスの設定と固定リスク・リターン比率の利益目標管理システムを統合する.

戦略の原則

この戦略は,トレンド決定の基礎として9日および21日間の移動平均値を使用し,RSIインジケーターのオーバーバイト/オーバーセールゾーン (35/65) をシグナル確認のために使用する.ロングエントリー条件では,オーバーセール領域の長期MAとRSIより高い短期MAが要求される (35未満);ショートエントリーでは,オーバーバイト領域の長期MAとRSIより低い短期MAが要求される (65以上).この戦略は,ストップロスト距離のATR値の1.5倍を使用し,リスク・リターン比2:1に基づいて利益目標を自動的に計算する.オーバートレードを防ぐために,最低3時間の保持期間が実装される.

戦略 の 利点

  1. 複数の信号の確認メカニズムは,取引の信頼性を著しく向上させる
  2. ダイナミックストップ・ロスの設定は市場の変動に適応する
  3. 長期的に安定した収益性における 固定リスク/報酬比の援助
  4. 最低保有期間が過剰取引を効果的に防止する
  5. ビジュアルマークシステムにより戦略の監視とバックテストの分析が容易になる
  6. バックグラウンドの色が変化すると,直感的に現在の位置の状態が表示されます

戦略リスク

  1. 二重MAシステムでは,様々な市場で誤った信号が生じる可能性があります.
  2. RSI指標は強いトレンドで取引機会を逃す可能性があります
  3. 固定リスク/リターン比は,特定の市場条件で柔軟性が欠けることがあります.
  4. ATRの停止は,変動のピークに対して十分に迅速に対応しない可能性があります.
  5. 最低保有期間が,ストップ・ロスの機会を逃す可能性があります.

戦略の最適化方向

  1. 市場状況に基づく適応型移動平均期間の選択を導入する
  2. 信号品質を改善するためにトレンド強度フィルターを追加
  3. 異なる市場環境のために ダイナミックなリスク・リターン比調整システムを 開発する
  4. 信号の信頼性を高めるため,音量指標を統合する
  5. 取引のタイミングを最適化するために市場変動分析モジュールを追加
  6. パラメータ最適化のための機械学習アルゴリズムを組み込む

概要

この戦略は,複数の技術指標の調整を通じて比較的完全な取引システムを構築する.入口信号品質だけでなく,リスク管理と利益目標設定にも焦点を当てています.最適化のための領域がある一方で,全体的なフレームワークデザインは,良い実用的な価値と拡張のための余地があり,合理的です.モジュール式デザインは,後の最適化にも便利性を提供します.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("JakeJohn", overlay=true)

// Input parameters
smaShortLength = input(9, title="Short SMA Length")
smaLongLength = input(21, title="Long SMA Length")
lengthRSI = input(14, title="RSI Length")
rsiOverbought = input(65, title="RSI Overbought Level")
rsiOversold = input(35, title="RSI Oversold Level")
riskRewardRatio = input(2, title="Risk/Reward Ratio") // 2:1
atrMultiplier = input(1.5, title="ATR Multiplier") // Multiplier for ATR to set stop loss

// Calculate indicators
smaShort = ta.sma(close, smaShortLength)
smaLong = ta.sma(close, smaLongLength)
rsi = ta.rsi(close, lengthRSI)
atr = ta.atr(14)

// Entry conditions
longCondition = (smaShort > smaLong) and (rsi < rsiOversold) // Buy when short SMA is above long SMA and RSI is oversold
shortCondition = (smaShort < smaLong) and (rsi > rsiOverbought) // Sell when short SMA is below long SMA and RSI is overbought

// Variables for trade management
var float entryPrice = na
var float takeProfit = na
var int entryBarIndex = na

// Entry logic for long trades
if (longCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice + (entryPrice - (entryPrice - (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Buy", strategy.long)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, high, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

// Entry logic for short trades
if (shortCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice - (entryPrice - (entryPrice + (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Sell", strategy.short)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, low, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)

// Manage trade duration and exit after a minimum of 3 hours
if (strategy.position_size != 0)
    // Check if the trade has been open for at least 3 hours (180 minutes)
    if (bar_index - entryBarIndex >= 180) // 3 hours in 1-minute bars
        if (strategy.position_size > 0)
            strategy.exit("Take Profit Long", from_entry="Buy", limit=takeProfit)
        else
            strategy.exit("Take Profit Short", from_entry="Sell", limit=takeProfit)

// Background colors for active trades
var color tradeColor = na
if (strategy.position_size > 0)
    tradeColor := color.new(color.green, 90) // Light green for long trades
else if (strategy.position_size < 0)
    tradeColor := color.new(color.red, 90) // Light red for short trades
else
    tradeColor := na // No color when no trade is active

bgcolor(tradeColor, title="Trade Background")

// Plotting position tools
if (strategy.position_size > 0)
    // Plot long position tool
    strategy.exit("TP Long", limit=takeProfit)
    
if (strategy.position_size < 0)
    // Plot short position tool
    strategy.exit("TP Short", limit=takeProfit)

// Plotting indicators
plot(smaShort, color=color.green, title="Short SMA", linewidth=2)
plot(smaLong, color=color.red, title="Long SMA", linewidth=2)

// Visual enhancements for RSI
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi, color=color.blue, title="RSI", linewidth=2)

// Ensure there's at least one plot function
plot(close, color=color.black, title="Close Price", display=display.none) // Hidden plot for compliance


関連性

もっと