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


Дата создания: 2024-02-22 17:27:18 Последнее изменение: 2024-02-22 17:27:18
Копировать: 0 Количество просмотров: 550
1
Подписаться
1617
Подписчики

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

Обзор

Основная идея этой стратегии состоит в том, чтобы объединить индикатор супертенденции и индикатор среднего тренда ((ADX), чтобы осуществить определение и отслеживание тренда. Индикатор супертенденции используется для определения направления текущей ценовой тенденции, а ADX используется для определения силы тренда и торговли только при сильной тенденции. Кроме того, стратегия также использует цвет объекта K-линии, индикатор объема торговли и т. Д., Чтобы сформировать более полные правила торговли.

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

Стратегический принцип

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

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

  3. Цвет объекта K-линии определяет текущий тренд вверх или вниз в сочетании с индикатором супертенденции, формируя подтверждение.

  4. Увеличение объемов торгов является признанным сигналом.

  5. Установка стоп-лосса и стоп-поста для блокировки прибыли и контроля риска.

  6. Очистить все позиции до окончания установленного времени на диске.

Стратегические преимущества

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

  2. Политические параметры меньше, их легче понять и реализовать.

  3. Наконец-то, мы получили контроль над риском и установили стоп-лост и стоп-стоп.

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

Стратегический риск

  1. При корректировке глубины большого диапазона возможны большие убытки.

  2. В результате, в течение нескольких недель, в течение нескольких месяцев, в течение нескольких месяцев, в течение нескольких месяцев, в течение нескольких месяцев, в течение нескольких месяцев.

  3. “Черная лебедь” - это событие, которое привело к существенным изменениям в политике

Решение риска:

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

  2. Повышение уровня стоп-лосса и контроль одиночных убытков

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

Направление оптимизации стратегии

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

  2. Можно тестировать различные параметры ADX, чтобы определить оптимальную комбинацию параметров.

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

  4. Также можно комбинировать такие стратегии, как прорыв, чтобы вовремя остановить потерю при разрыве тренда.

Подвести итог

Общая идея этой стратегии ясна, она определяет направление ценовой тенденции с помощью сверхтенденции, определяет силу тенденции с помощью 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 **********