
Это стратегия следования за трендом, основанная на индикаторе SuperTrend, экспоненциальной скользящей средней (EMA) и среднем истинном диапазоне (ATR). Эта стратегия использует несколько технических индикаторов в сочетании с первоначальным стоп-лоссом и скользящим стоп-лоссом для достижения динамического отслеживания рыночных тенденций и контроля рисков. Суть стратегии заключается в отслеживании изменений направления тренда с помощью индикатора SuperTrend, использовании EMA для подтверждения тренда и установке двойного стоп-лосса для защиты прибыли.
Стратегия основана на следующих основных компонентах:
Когда направление SuperTrend меняет направление на нисходящее и цена закрытия оказывается выше EMA, система подает длинный сигнал без удержания позиции. Напротив, когда направление SuperTrend разворачивается вверх и цена закрытия оказывается ниже 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