Стратегия отслеживания импульса и тренда

Автор:Чао Чжан, Дата: 2024-02-22 17:27:18
Тэги:

img

Обзор

Основная идея этой стратегии состоит в том, чтобы объединить индикатор Super Trend и индекс среднего направленного движения (ADX) для оценки и отслеживания тенденций. Индикатор Super Trend используется для определения текущего направления ценового тренда, а ADX используется для определения силы тренда. Торги совершаются только в условиях сильного тренда. Кроме того, стратегия также использует цвет тела свечи, объем торговли и другие индикаторы для подтверждения, формируя относительно полный набор правил торговли.

В целом эта стратегия относится к стратегии отслеживания тенденций, целью которой является определение четких тенденций в среднесрочной и долгосрочной перспективе, при этом избегая вмешательства периодов консолидации и колебаний.

Принципы стратегии

  1. Используйте индикатор Super Trend для определения направления ценового тренда. Когда цена стоит выше Super Trend, это длинный сигнал, а когда она стоит ниже Super Trend, это короткий сигнал.

  2. Используйте ADX для оценки силы тренда. Торговые сигналы генерируются только тогда, когда ADX превышает порог, чтобы можно было отфильтровать периоды с неясной консолидацией.

  3. Цвет тела светильника используется для оценки того, находится ли он в настоящее время в восходящем или нисходящем направлении, в сочетании с индикатором Super Trend для формирования подтверждения.

  4. Расширение объема торговли служит сигналом подтверждения, позиции устанавливаются только при увеличении объема торговли.

  5. Установите стоп-лосс и возьмите прибыль, чтобы зафиксировать прибыль и контролировать риски.

  6. Закройте все позиции до конца дня.

Преимущества стратегии

  1. Отслеживать средне- и долгосрочные тенденции, избегать колебаний и достигать высокой прибыльности.

  2. Стратегия имеет несколько параметров и легко понять и реализовать.

  3. Риски хорошо контролируются с помощью стоп-лосса и прибыли.

  4. Использование нескольких показателей для подтверждения может уменьшить количество ложных сигналов.

Риски стратегии

  1. Может понести большие потери во время крупных корректировок на рынке.

  2. Отдельные акции могут иметь резкие перепады из-за изменений в фундаментальных показателях.

  3. Чёрный лебедь события от крупных изменений политики.

Решения:

  1. Соответственно корректировать параметры ADX, чтобы обеспечить торговлю только при сильных тенденциях.

  2. Увеличить процент стоп-лосса для контроля суммы единого убытка.

  3. Внимательно следите за политикой и важными событиями, активно сокращайте потери, если это необходимо.

Руководство по оптимизации

  1. Испытайте различные комбинации параметров супер-тенденции, чтобы найти тот, который генерирует самые стабильные сигналы.

  2. Испытать различные комбинации параметров ADX для определения оптимальных настроек.

  3. Добавьте другие подтверждающие показатели, такие как волатильность и полосы Боллинджера, чтобы еще больше уменьшить ложные сигналы.

  4. Комбинируйте с стратегиями прорыва, чтобы своевременно сократить потери, когда тенденции нарушаются.

Резюме

Общая логика этой стратегии ясна, используя 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 **********

Больше