Блог им. Kostefan

Cumulative Trend with Heikin Ashi — стратегия для торговли по тренду.

    • 24 октября 2026, 22:05
    • |
    • McDuck
  • Еще
Cumulative Trend with Heikin Ashi — стратегия для торговли по тренду.

Эта стратегия объединяет анализ кумулятивной дельты, свечи Heikin Ashi, скользящие средние и индикаторы волатильности. Основная идея — не пытаться угадать каждое движение рынка, а дождаться формирования направленного тренда и входить в сделку, когда движение подтверждается дополнительными фильтрами.

Как работает стратегия

В основе индикаторной части лежит кумулятивная дельта. Она накапливает изменения цены и отображается в виде линии или свечей. По умолчанию расчёт начинается заново в 09:00, что позволяет отслеживать движение внутри торговой сессии. Дополнительно стратегия распределяет объём свечей между условными покупками и продажами в зависимости от направления расчётной дельты.

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

На графике также доступны SMA 14 и 28, а также EMA 12 и 26. Они помогают оценивать динамику и визуально сравнивать краткосрочные изменения с более плавным движением расчётной линии.

По каким правилам открываются сделки

Главный торговый сигнал строится на трендовом алгоритме с использованием ATR. Параметры ATR помогают определить динамические уровни, относительно которых меняется направление стратегии.

Для подтверждения силы движения используется ADX. По умолчанию сделка рассматривается, когда его значение превышает 30. Это помогает отсеивать часть слабых и боковых движений.

Направление сделки дополнительно фильтруется экспоненциальными средними:

  • Покупка: цена должна находиться выше EMA 200 и, если включён дополнительный фильтр, выше EMA 50.

  • Продажа: цена должна находиться ниже EMA 200 и, если включён дополнительный фильтр, ниже EMA 50.

Можно выбрать торговлю только в лонг, только в шорт или в обоих направлениях.

Управление рисками

Для расчёта размера позиции стратегия использует текущий капитал и заданный процент риска. По умолчанию риск установлен на уровне 1% капитала на сделку, а расстояние для расчёта объёма позиции определяется через ATR.

Также предусмотрен трейлинг-стоп с множителем 2 ATR. Его задача — сопровождать открытую позицию и помогать сохранять часть прибыли при развороте цены. Настройки предусматривают и тейк-профит с множителем 4 ATR, однако в текущем коде этот параметр ещё не подключён к реальному выходу из сделки.

Моё мнение

Главное преимущество такого подхода — сочетание нескольких факторов вместо торговли по одному сигналу. ATR помогает отслеживать изменение направления, ADX оценивает силу тренда, а EMA 50 и EMA 200 выступают дополнительными фильтрами. Кумулятивная дельта и свечи Heikin Ashi позволяют визуально оценивать характер движения.

При этом стратегия не гарантирует прибыль и может получать убытки во время резких разворотов и длительного бокового движения. Перед использованием на реальном счёте её стоит проверить на исторических данных и на демосчёте, учитывая комиссии, проскальзывание и особенности конкретного инструмента.

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

Cumulative Trend with Heikin Ashi — стратегия для торговли по тренду.
//@version=5
strategy("Cumulative Trend with Heikin Ashi and Strategy", overlay=true)

// User Inputs for Cumulative Delta Reset
startHour = input.int(9, title="Start Hour for Cumulative Delta Reset")
startMinute = input.int(0, title="Start Minute for Cumulative Delta Reset")
linestyle = input.string("Candle", title="Line Style", options=["Candle", "Line"])
hacandle = input.bool(true, title="Use Heikin Ashi")
colorup = input.color(color.green, title="Candle Color Up")
colordown = input.color(color.red, title="Candle Color Down")
bcolup = input.color(color.green, title="Border Color Up")
bcoldown = input.color(color.red, title="Border Color Down")
wcolup = input.color(color.green, title="Wick Color Up")
wcoldown = input.color(color.red, title="Wick Color Down") // Цвет фитиля вниз

// MA and EMA Inputs
showma1 = input.bool(true, title="Show SMA 1")
ma1len = input.int(14, title="SMA 1 Length")
ma1col = input.color(color.blue, title="SMA 1 Color")
showma2 = input.bool(true, title="Show SMA 2")
ma2len = input.int(28, title="SMA 2 Length")
ma2col = input.color(color.purple, title="SMA 2 Color")
showema1 = input.bool(true, title="Show EMA 1")
ema1len = input.int(12, title="EMA 1 Length")
ema1col = input.color(color.orange, title="EMA 1 Color")
showema2 = input.bool(true, title="Show EMA 2")
ema2len = input.int(26, title="EMA 2 Length")
ema2col = input.color(color.red, title="EMA 2 Color")

// Delta Calculation Replacement
deltaLength = input.int(10, title="Delta Length")
volumeFilter = input.float(0, title="Volume Filter")

var float cumDelta = na
isNewSession = (hour == startHour and minute == startMinute)

delta = close - close[1]
if (isNewSession or na(cumDelta))
    cumDelta := 0
cumDelta += delta

deltaDirection = ta.sma(cumDelta, deltaLength) > ta.sma(cumDelta[1], deltaLength)
buyVolume = deltaDirection ? volume : 0
sellVolume = not deltaDirection ? volume : 0

var float cumBuyVolume = na
var float cumSellVolume = na
if (isNewSession)
    cumBuyVolume := 0
    cumSellVolume := 0
cumBuyVolume += buyVolume
cumSellVolume += sellVolume

float ctl = na
float o = na
float h = na
float l = na
float c = na
if linestyle == 'Candle'
    o := cumDelta[1]
    h := math.max(cumDelta, cumDelta[1])
    l := math.min(cumDelta, cumDelta[1])
    c := cumDelta
else
    ctl := cumDelta

plot(ctl, title="CDV Line", color=color.blue, linewidth=2)

// Heikin Ashi Candle Calculations
float haclose = na
float haopen = na
float hahigh = na
float halow = na
haclose := (o + h + l + c) / 4
haopen := na(haopen[1]) ? (o + c) / 2 : (haopen[1] + haclose[1]) / 2
hahigh := math.max(h, math.max(haopen, haclose))
halow := math.min(l, math.min(haopen, haclose))

// Select Candlestick Type
c_ = hacandle ? haclose : c
o_ = hacandle ? haopen : o
h_ = hacandle ? hahigh : h
l_ = hacandle ? halow : l

plotcandle(o_, h_, l_, c_, title='CDV Candles', color=o_ <= c_ ? colorup : colordown, bordercolor=o_ <= c_ ? bcolup : bcoldown, wickcolor=o_ <= c_ ? wcolup : wcoldown)

// Moving Averages
plot(showma1 and linestyle == "Candle" ? ta.sma(c_, ma1len) : na, title="SMA 1", color=ma1col)
plot(showma2 and linestyle == "Candle"  ? ta.sma(c_, ma2len) : na, title="SMA 2", color=ma2col)
plot(showema1 and linestyle == "Candle"  ? ta.ema(c_, ema1len) : na, title="EMA 1", color=ema1col)
plot(showema2 and linestyle == "Candle"  ? ta.ema(c_, ema2len) : na, title="EMA 2", color=ema2col)

// Strategy Inputs
length = input.int(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
riskPercent = input.float(title='Risk % per Trade', defval=1, step=0.1)
adxThreshold = input.float(title='ADX Threshold', defval=30)
useEMA50 = input.bool(title='Use 50 EMA Filter', defval=true)
emaFilterPref = input.string(title='Trade Direction', defval='Both', options=['Long Only', 'Short Only', 'Both'])
useTrailingStop = input.bool(title='Use Trailing Stop', defval=true)
trailMultiplier = input.float(title='Trailing Stop ATR Multiplier', defval=2.0, step=0.1)
tpATR = input.float(title='Take Profit ATR Multiplier', defval=4.0, step=0.1)

// Strategy Calculations
atr = mult * ta.atr(length)
ema200 = ta.ema(close, 200)
ema50 = ta.ema(close, 50)
[_, _, adxValue] = ta.dmi(length, 14)

// Long/Short Stop Calculation
longStop = ta.highest(close, length) - atr
shortStop = ta.lowest(close, length) + atr
var int dir = 1
dir := close > shortStop ? 1 : close < longStop ? -1 : dir

buySignal = dir == 1 and adxValue > adxThreshold
sellSignal = dir == -1 and adxValue > adxThreshold

// Position Sizing
capital = strategy.equity
riskAmount = capital * (riskPercent / 100)
stopDistance = atr * 0.5
positionSize = riskAmount / stopDistance

// Trading Logic
if (buySignal and close > ema200 and (not useEMA50 or close > ema50) and (emaFilterPref == 'Both' or emaFilterPref == 'Long Only'))
    strategy.entry("Long", strategy.long, qty = positionSize)
if (sellSignal and close < ema200 and (not useEMA50 or close < ema50) and (emaFilterPref == 'Both' or emaFilterPref == 'Short Only'))
    strategy.entry("Short", strategy.short, qty = positionSize)

// Trailing Stop
if (useTrailingStop)
    if (strategy.position_size > 0)
        strategy.exit("Trailing Long", from_entry="Long", trail_offset=atr * trailMultiplier, trail_price=close)
    else if (strategy.position_size < 0)
        strategy.exit("Trailing Short", from_entry="Short", trail_offset=atr * trailMultiplier, trail_price=close)

// Signal Alerts
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")

alertcondition(buySignal, title='Buy Alert', message='Buy Signal Triggered')
alertcondition(sellSignal, title='Sell Alert', message='Sell Signal Triggered')

// Display Cumulative Volumes
plot(cumBuyVolume, title="Cumulative Buy Volume", color=color.green, linewidth=2)
plot(cumSellVolume, title="Cumulative Sell Volume", color=color.red, linewidth=2)
hline(0, "Zero Line", color=color.gray)


Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
538 | ★2
3 комментария
Кумулятивная «дельта», похоже, представляет собой аналог Каги, Ренки и P&F-нотацию.
Я использую совокупный инструмент этих нотаций и ATR/МА так же, как показано в посте. Одно отличие: силу по ATR считаю >60.
Eugene Bright, Нет возможности в том терминале сделать дельту по сделкам, в КВИК да есть.
avatar
Если смотреть смартлаб с ПК то там еще есть код стратегии.
avatar

Читайте на SMART-LAB:
Фото
Главное на рынке облигаций за неделю: ставка без изменений, спрос на ОФЗ стабилизируется
Индекс RGBI к концу недели закрепился в районе 111,8 пункта, показав околонулевую динамику. После восстановления неделей ранее рынок ОФЗ...
Фото
Курс интересный. А мне он подойдёт?
Возможно, вы уже посмотрели программу «Айкидо трейдера», сохранили ссылку и пока думаете. Хочется понять, что из этого пригодится именно вам....
📉 Цена налоговой оптимизации: чем новые правила для ПИФов грозят инвесторам
Правительство предложило ввести налог 15% на пассивные доходы закрытых и интервальных ПИФов для «квалов». Управляющие опасаются, что новые...
Фото
НМТП - РСБУ за сложный 3-й квартал. Прибыль порта сломлена, но не обнулена

теги блога McDuck

....все тэги



UPDONW
Новый дизайн