この戦略は,スーパートレンド指標,指数関数移動平均 (EMA) および平均真数範囲 (ATR) をベースとしたトレンドフォロー戦略である.この戦略は,複数の技術指標,初期ストップ損失およびトレーリングストップ損失の組み合わせを通じて動的トレンド追跡とリスク管理を達成する.戦略の核心は,トレンド確認のためにEMAを使用し,トレンド方向の変化をスーパートレンド指標を使用して把握し,利益を保護するために二重ストップ損失メカニズムを設定することである.
戦略は以下の基本要素に基づいています. 1. 傾向方向の変化を特定するためのスーパートレンド指標,ATR期間16と因子3.02で計算 2. 傾向の方向性を確認するためのトレンドフィルターとしての49期EMA 3. 初期ストップロスは50ポイントで設定され,各取引の基本保護を提供します. 4. 70ポイントの利益後,トレーリングストップロスは活性化し,価格変動を動的に追跡します
システムでは,スーパートレンドの方向が下がり,閉値がEMAより上である場合,既存のポジションがない限り,ロングシグナルを生成する.逆に,スーパートレンドの方向が上昇し,閉値がEMA以下である場合,ショートシグナルが生成される.
この戦略は,複数の技術指標とリスク管理メカニズムを組み合わせた完全な取引戦略である.スーパートレンド指標によるトレンドキャプチャ,EMAによる方向確認,ダブルストップロスのメカニズムと組み合わせることで,有利なリスク・リターン比を達成する.この戦略の最適化可能性は主に動的パラメータ調整,市場環境評価,リスク管理システムの強化にある.実用的な応用では,詳細な歴史的なデータバックテストを行い,特定の取引機器の特徴に応じてパラメータを調整することを推奨する.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy(" nifty supertrend triton", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Input parameters atrPeriod = input.int(16, "ATR Length", step=1) factor = input.float(3.02, "Factor", step=0.01) maPeriod = input.int(49, "Moving Average Period", step=1) trailPoints = input.int(70, "Trailing Points", step=1) // Points after which trailing stop activates initialStopLossPoints = input.int(50, "Initial Stop Loss Points", step=1) // Initial stop loss of 50 points // Calculate Supertrend [_, direction] = ta.supertrend(factor, atrPeriod) // Calculate EMA ema = ta.ema(close, maPeriod) // Variables to track stop loss levels var float trailStop = na var float entryPrice = na var float initialStopLoss = na // To track the initial stop loss // Generate buy and sell signals if ta.change(direction) < 0 and close > ema if strategy.position_size == 0 // Only open a new long position if no current position strategy.entry("Buy", strategy.long) entryPrice := close // Record the entry price for the long position initialStopLoss := entryPrice - initialStopLossPoints // Set initial stop loss for long position trailStop := na // Reset trailing stop for long if ta.change(direction) > 0 and close < ema if strategy.position_size == 0 // Only open a new short position if no current position strategy.entry("Sell", strategy.short) entryPrice := close // Record the entry price for the short position initialStopLoss := entryPrice + initialStopLossPoints // Set initial stop loss for short position trailStop := na // Reset trailing stop for short // Apply initial stop loss for long positions if (strategy.position_size > 0) // Check if in a long position if close <= initialStopLoss // If the price drops to or below the initial stop loss strategy.close("Buy", "Initial Stop Loss Hit") // Exit the long position // Apply trailing stop logic for long positions if (strategy.position_size > 0) // Check if in a long position if (close - entryPrice >= trailPoints) // If the price has moved up by the threshold trailStop := na(trailStop) ? close - trailPoints : math.max(trailStop, close - trailPoints) // Adjust trailing stop upwards if not na(trailStop) and close < trailStop // If the price drops below the trailing stop strategy.close("Buy", "Trailing Stop Hit") // Exit the long position // Apply initial stop loss for short positions if (strategy.position_size < 0) // Check if in a short position if close >= initialStopLoss // If the price rises to or above the initial stop loss strategy.close("Sell", "Initial Stop Loss Hit") // Exit the short position // Apply trailing stop logic for short positions if (strategy.position_size < 0) // Check if in a short position if (entryPrice - close >= trailPoints) // If the price has moved down by the threshold trailStop := na(trailStop) ? close + trailPoints : math.min(trailStop, close + trailPoints) // Adjust trailing stop downwards if not na(trailStop) and close > trailStop // If the price rises above the trailing stop strategy.close("Sell", "Trailing Stop Hit") // Exit the short position