この戦略は,移動平均値,RSI指標,およびトレーリングストップ損失に基づいた定量的な取引システムである.技術分析からのトレンドフォローおよびモメントインディケーターを組み合わせ,厳格なエントリーおよび出口条件を通じてリスク制御取引を達成する.コア論理は,上向きのトレンドで過剰販売機会を探し,トレーリングストップを使用して利益を保護することである.
この戦略は,トレンド判断のためのベースラインとして200日間のシンプル・ムービング・アベア (SMA) を使用し,トレード・シグナルを生成するために相対強度指数 (RSI) と組み合わせています.具体的には: 1. 200 日間の SMA を使って主要トレンドを判断し,価格が平均以上であるときだけロングポジションを考慮する. 2. RSI が 設定された 限界値 (デフォルト 40) 以下の値を下回るときに 過売り信号を識別する. 3. 両条件が満たされ,最後の出口 (デフォルト10日) 以降の待機期間が経過した場合にロングエントリを起動する 4. トレイリング・ストップ・ロスト (デフォルト 5%) を通してポジション保有時の利益を保護する 5. 価格がトレイルストップまたは200日SMAを下回るとポジションを退場する
この戦略は,完全な構造と明確な論理を持つ定量的な取引戦略である.複数の技術指標を組み合わせることでリスクを制御しながら安定した収益を追求する.最適化余地があるにもかかわらず,基本的な枠組みは良い実用性と拡張性を持っています.この戦略は中長期投資家に適しており,異なる市場環境にうまく適応します.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("200 SMA Crossover Strategy", overlay=false) // Define inputs smaLength = input.int(200, title="SMA Length") rsiLength = input.int(14, title="RSI Length") rsiThreshold = input.float(40, title="RSI Threshold") trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)") waitingPeriod = input.int(10, title="Waiting Period (Days)") // Calculate 200 SMA sma200 = ta.sma(close, smaLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Plot the 200 SMA and RSI plot(sma200, color=color.blue, linewidth=2, title="200 SMA") plot(rsi, color=color.purple, title="RSI", display=display.none) // Define buy and sell conditions var isLong = false var float lastExitTime = na var float trailStopPrice = na // Explicitly declare timeSinceExit as float float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000) canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod buyCondition = close > sma200 and rsi < rsiThreshold and canEnter if (buyCondition and not isLong) strategy.entry("Buy", strategy.long) trailStopPrice := na isLong := true // Update trailing stop loss if long if (isLong) trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100)) // Check for trailing stop loss or sell condition if (isLong and (close < trailStopPrice or close < sma200)) strategy.close("Buy") lastExitTime := time isLong := false // Plot buy and sell signals plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")