Основная идея этой стратегии состоит в том, чтобы объединить индикатор Super Trend и индекс среднего направленного движения (ADX) для оценки и отслеживания тенденций. Индикатор Super Trend используется для определения текущего направления ценового тренда, а ADX используется для определения силы тренда. Торги совершаются только в условиях сильного тренда. Кроме того, стратегия также использует цвет тела свечи, объем торговли и другие индикаторы для подтверждения, формируя относительно полный набор правил торговли.
В целом эта стратегия относится к стратегии отслеживания тенденций, целью которой является определение четких тенденций в среднесрочной и долгосрочной перспективе, при этом избегая вмешательства периодов консолидации и колебаний.
Используйте индикатор Super Trend для определения направления ценового тренда. Когда цена стоит выше Super Trend, это длинный сигнал, а когда она стоит ниже Super Trend, это короткий сигнал.
Используйте ADX для оценки силы тренда. Торговые сигналы генерируются только тогда, когда ADX превышает порог, чтобы можно было отфильтровать периоды с неясной консолидацией.
Цвет тела светильника используется для оценки того, находится ли он в настоящее время в восходящем или нисходящем направлении, в сочетании с индикатором Super Trend для формирования подтверждения.
Расширение объема торговли служит сигналом подтверждения, позиции устанавливаются только при увеличении объема торговли.
Установите стоп-лосс и возьмите прибыль, чтобы зафиксировать прибыль и контролировать риски.
Закройте все позиции до конца дня.
Отслеживать средне- и долгосрочные тенденции, избегать колебаний и достигать высокой прибыльности.
Стратегия имеет несколько параметров и легко понять и реализовать.
Риски хорошо контролируются с помощью стоп-лосса и прибыли.
Использование нескольких показателей для подтверждения может уменьшить количество ложных сигналов.
Может понести большие потери во время крупных корректировок на рынке.
Отдельные акции могут иметь резкие перепады из-за изменений в фундаментальных показателях.
Чёрный лебедь события от крупных изменений политики.
Решения:
Соответственно корректировать параметры ADX, чтобы обеспечить торговлю только при сильных тенденциях.
Увеличить процент стоп-лосса для контроля суммы единого убытка.
Внимательно следите за политикой и важными событиями, активно сокращайте потери, если это необходимо.
Испытайте различные комбинации параметров супер-тенденции, чтобы найти тот, который генерирует самые стабильные сигналы.
Испытать различные комбинации параметров ADX для определения оптимальных настроек.
Добавьте другие подтверждающие показатели, такие как волатильность и полосы Боллинджера, чтобы еще больше уменьшить ложные сигналы.
Комбинируйте с стратегиями прорыва, чтобы своевременно сократить потери, когда тенденции нарушаются.
Общая логика этой стратегии ясна, используя Super Trend для определения направления тренда цены, ADX для определения силы тренда и торговли вдоль сильных тенденций. Стоп-лосс и прибыль устанавливаются для контроля рисков. Стратегия имеет несколько параметров и легко оптимизируется. Она может служить хорошим примером для изучения простых и эффективных стратегий отслеживания тренда.
/*backtest start: 2023-02-15 00:00:00 end: 2024-02-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Intraday Strategy Template // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © vikris //@version=4 strategy("[VJ]Hulk Smash Intra", overlay=true, calc_on_every_tick = false, pyramiding=0,default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=2000) // ********** Strategy inputs - Start ********** // Used for intraday handling // Session value should be from market start to the time you want to square-off // your intraday strategy // Important: The end time should be at least 2 minutes before the intraday // square-off time set by your broker var i_marketSession = input(title="Market session", type=input.session, defval="0915-1455", confirm=true) // Make inputs that set the take profit % (optional) longProfitPerc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=1) * 0.01 shortProfitPerc = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=1) * 0.01 // Set stop loss level with input options (optional) longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01 shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01 var float i_multiplier = input(title = "ST Multiplier", type = input.float, defval = 2, step = 0.1, confirm=true) var int i_atrPeriod = input(title = "ST ATR Period", type = input.integer, defval = 10, confirm=true) len = input(title="ADX Length", type=input.integer, defval=14) th = input(title="ADX Threshold", type=input.integer, defval=20) adxval = input(title="ADX Momemtum Value", type=input.integer, defval=25) // ********** Strategy inputs - End ********** // ********** Supporting functions - Start ********** // A function to check whether the bar or period is in intraday session barInSession(sess) => time(timeframe.period, sess) != 0 // ********** Supporting functions - End ********** // ********** Strategy - Start ********** [superTrend, dir] = supertrend(i_multiplier, i_atrPeriod) colResistance = dir == 1 and dir == dir[1] ? color.new(color.red, 0) : color.new(color.red, 100) colSupport = dir == -1 and dir == dir[1] ? color.new(color.green, 0) : color.new(color.green, 100) // Super Trend Long/short condition stlong = close > superTrend stshort = close < superTrend // Figure out take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // Determine stop loss price longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) //Vol Confirmation vol = volume > volume[1] //Candles colors greenCandle = (close > open) redCandle = (close < open) // See if intraday session is active bool intradaySession = barInSession(i_marketSession) // Trade only if intraday session is active TrueRange = max(max(high - low, abs(high - nz(close[1]))), abs(low - nz(close[1]))) DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? max(high - nz(high[1]), 0) : 0 DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? max(nz(low[1]) - low, 0) : 0 SmoothedTrueRange = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / len + TrueRange SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - nz(SmoothedDirectionalMovementPlus[1]) / len + DirectionalMovementPlus SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - nz(SmoothedDirectionalMovementMinus[1]) / len + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus) * 100 ADX = sma(DX, len) // a = plot(DIPlus, color=color.green, title="DI+", transp=100) // b = plot(DIMinus, color=color.red, title="DI-", transp=100) //Final Long/Short Condition longCondition = stlong and redCandle and vol and ADX>adxval shortCondition = stshort and greenCandle and vol and ADX >adxval //Long Strategy - buy condition and exits with Take profit and SL if (longCondition and intradaySession) stop_level = longStopPrice profit_level = longExitPrice strategy.entry("My Long Entry Id", strategy.long) strategy.exit("TP/SL", "My Long Entry Id",stop=stop_level, limit=profit_level) //Short Strategy - sell condition and exits with Take profit and SL if (shortCondition and intradaySession) stop_level = shortStopPrice profit_level = shortExitPrice strategy.entry("My Short Entry Id", strategy.short) strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level) // Square-off position (when session is over and position is open) squareOff = (not intradaySession) and (strategy.position_size != 0) strategy.close_all(when = squareOff, comment = "Square-off") // ********** Strategy - End **********