この戦略は,RSIオーバーセールシグナルと動的ATRストップ・ロスをベースとした定量的な取引システムである.日々のタイムフレームデータを利用し,RSIオーバーセールシグナルと200日間の移動平均トレンドフィルターを組み合わせ,過剰セール市場条件でリバウンド機会を捕捉する.この戦略は動的ATRストップ・ロスと静的パーセントストップ・ロスメカニズムの両方を採用し,段階的なポジション削減を通じて実施される3倍の利益目標とともに,RSIオーバーセールシグナルと200日間の移動平均トレンドフィルターを組み合わせている.
基本論理には次の主要な要素が含まれます.
トレンド依存性: 戦略は,変動する市場で頻繁に停止を引き起こす可能性があります. 提案: 偽信号 を 減らす ため に 振動器 の フィルター を 追加 する.
"%の固定ストップ損失"は,単一の取引で大きな損失をもたらす可能性があります. 提案:個人リスク耐性に基づいてストップ・ロスの割合を調整する.
引き下げリスク: 段階的な利益引き上げは,強いトレンドにおいて,ポジションを早すぎに引き下げることがあります. 提案: 動的な利益目標を考えたり,傾向を追うために部分を維持してください.
この戦略は,動的なATRストップ損失とトリプル利益目標によって補完された,移動平均トレンドフィルタリングとRSIオーバーセールシグナルを組み合わせて,完全な取引システムを構築する.その強みは柔軟なリスク制御と合理的な利益管理にあります.市場状況と個人リスクの好みに基づいて最適化が必要ですが.シグナルシステム,ストップ損失メカニズム,および利益の戦略の継続的な改善を通じて,システムはライブ取引でより良いパフォーマンスの可能性を示しています.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03) // Rsi oversoldLevel = input(30, title="Oversold Level") overboughtLevel = input(70, title="Overbought Level") rsi = ta.rsi(close, 5) rsi_overbought = rsi > overboughtLevel rsi_oversold = rsi < oversoldLevel // Sma 200 lenghtSMA = input(200, title = "SMA lenght") sma200 = ta.sma(close, lenghtSMA) // ATR stop-loss atrLength = input.int(20, title="ATR Length") atrMultiplier = input.float(1.5, title="ATR Multiplier") atrValue = ta.atr(atrLength) var float long_stop_level = na var float short_stop_level = na var float tp1_level = na var float tp2_level = na var float tp3_level = na // Strategy entry long = (rsi_oversold ) and close > sma200 // Take Profit levels tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1) tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1) tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1) if long strategy.entry('Long', strategy.long) long_stop_level := close - atrMultiplier * atrValue tp1_level := strategy.position_avg_price * (1 + tp_1 / 100) tp2_level := strategy.position_avg_price * (1 + tp_2 / 100) tp3_level := strategy.position_avg_price * (1 + tp_3 / 100) // basic SL - this code is from author RafaelZioni, modified by wielkieef sl = input.float(25.0, 'Basic Stop Loss %', step=0.1) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // ATR SL if (strategy.position_size > 0 and (close <= long_stop_level)) strategy.close("Long") tp1_level := na tp2_level := na tp3_level := na plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss") // TP levels if (strategy.position_size > 0) if (not na(tp1_level) and close >= tp1_level) tp1_level := na if (not na(tp2_level) and close >= tp2_level) tp2_level := na if (not na(tp3_level) and close >= tp3_level) tp3_level := na plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1") plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2") plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3") // Strategy exit points for Take Profits strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl)) strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl)) strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl)) // by wielkieef