この戦略は,二重RSI (相対強度指数) 指標に基づく適応型取引システムである.この戦略は,市場動向と取引機会を特定し,マネーマネジメントとリスク管理メカニズムを通じて取引パフォーマンスを最適化するために,異なるタイムフレームからのRSI指標を組み合わせている.この戦略の核心強みは,多期RSI間のシネージで,取引の安全性を維持しながら収益性を向上させる.
この戦略は, 7 期間の RSI インディケーターを主要な取引信号として使用し,日々の RSI をトレンドフィルターとして組み合わせます. 短期間の RSI が 40 を超え,日々の RSI が 55 を超えるとロングポジションが開始されます. ポジション中に価格が初期エントリー価格を下回ると,システムは自動的に平均コストを下げるためにポジションに追加します. RSI が 60 を超えるとポジションが閉鎖されます.リスク管理のために 5% のストップロスを実装します. 戦略には,総資本と事前に設定されたリスク比率に基づいてポジションサイズを自動的に計算するマネーマネジメントモジュールも含まれます.
この戦略は,技術分析とリスク管理を組み合わせた完全な取引システムである.マルチペリオドRSI調整を通じて取引信号を生成し,マネーマネジメントとストップロスのメカニズムを通じてリスクを制御する.この戦略はトレンド市場に適しているが,実際の市場状況に基づいてパラメータ最適化が必要である.このシステムの優れた拡張性により,さらなる最適化に余地がある.
/*backtest start: 2024-11-12 00:00:00 end: 2024-12-11 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Dual RSI with Rebuy Logic + Capital, Commission, and Stop Loss", overlay=true) // Parameter rsi_length = input.int(7, title="RSI Length") daily_rsi_length = input.int(7, title="Daily RSI Length") capital = input.float(10000, title="Initial Capital", minval=0) // Kapital risk_per_trade = input.float(0.01, title="Risk per Trade (%)", minval=0.01, maxval=1.0) // Risikogröße in Prozent commission = input.float(0.1, title="Commission (%)", minval=0, maxval=100) // Kommission in Prozent stop_loss_pct = input.float(5, title="Stop Loss (%)", minval=0.1, maxval=100) // Stop-Loss in Prozent // Ordergröße berechnen risk_amount = capital * risk_per_trade order_size = risk_amount / close // Größe der Order basierend auf Risikogröße und Preis // Daily RSI day_rsi = request.security(syminfo.tickerid, "D", ta.rsi(close, daily_rsi_length), lookahead=barmerge.lookahead_on) // RSI auf aktuellem Timeframe rsi = ta.rsi(close, rsi_length) // Kauf- und Verkaufsbedingungen buy_condition = rsi[1] < 40 and rsi > rsi[1] and day_rsi > 55 sell_condition = rsi[1] > 60 and rsi < rsi[1] // Variablen, um den Preis des ersten Kaufs zu speichern var float first_buy_price = na var bool is_position_open = false // Kauf-Logik if buy_condition if not is_position_open // Initiales Kaufsignal strategy.entry("Buy", strategy.long, qty=1) first_buy_price := close is_position_open := true else if close < first_buy_price // Rebuy-Signal, nur wenn Preis niedriger als erster Kaufpreis strategy.entry("Rebuy", strategy.long, qty=1) // Verkaufs-Logik if sell_condition and is_position_open strategy.close("Buy") strategy.close("Rebuy") first_buy_price := na // Zurücksetzen des Kaufpreises is_position_open := false // Stop-Loss-Bedingung if is_position_open // Stop-Loss-Preis berechnen (5% unter dem Einstiegspreis) stop_loss_price = first_buy_price * (1 - stop_loss_pct / 100) // Stop-Loss für "Buy" und "Rebuy" festlegen strategy.exit("Stop Loss Buy", from_entry="Buy", stop=stop_loss_price) strategy.exit("Stop Loss Rebuy", from_entry="Rebuy", stop=stop_loss_price) // Performance-Metriken berechnen (mit Kommission) gross_profit = strategy.netprofit / capital * 100 commission_cost = commission / 100 * strategy.closedtrades net_profit = gross_profit - commission_cost // Debug-Plots plot(first_buy_price, title="First Buy Price", color=color.blue, linewidth=1) plotchar(buy_condition, title="Buy Condition", char='B', location=location.abovebar, color=color.green) plotchar(sell_condition, title="Sell Condition", char='S', location=location.belowbar, color=color.red) // Debugging für Performance