
これは、SuperTrend インジケーター、指数移動平均 (EMA)、および平均真の範囲 (ATR) に基づいたトレンド追跡戦略です。この戦略では、初期ストップロスと移動ストップロスと組み合わせて複数のテクニカル指標を使用し、市場動向の動的な追跡とリスク管理を実現します。この戦略の核心は、SuperTrend インジケーターを通じてトレンド方向の変化を捉え、トレンドの確認に EMA を使用し、利益を保護するためにダブル ストップロス メカニズムを設定することです。
この戦略は、次のコアコンポーネントに基づいて実行されます。
スーパートレンドの方向が下向きになり、終値が EMA を上回ると、システムはポジションを保持せずにロング シグナルを発行します。逆に、スーパートレンドの方向が上向きになり、終値が EMA を下回ると、システムはショート シグナルを送信します。
これは、複数のテクニカル指標とリスク管理メカニズムを組み合わせた完全な取引戦略です。 SuperTrend インジケーターを通じてトレンドを捉え、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