Динамическая стратегия поглощения

Автор:Чао Чжан, Дата: 2024-02-29 11:24:18
Тэги:

基于动态吞噬趋势策略

Обзор

Динамическая стратегия поглощения - это стратегия, которая использует средний реальный диапазон колебаний (ATR) для выявления волатильности рынка, сверхтенденционный индикатор для определения направления рынка, а также для выполнения множественных пустых операций, если они соответствуют форме поглощения и совпадают с направлением тренда. Стоп-лосс и стоп-позиции также рассчитываются на основе динамики поглощения.

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

  1. Вычисляется ATR, который используется для измерения волатильности рынка.
  2. Вычисляется сверхтенденционный показатель, который определяет направление основных тенденций на рынке.
  3. Определение условий рынка с несколькими главами и рынка с несколькими главами.
  4. Выявление форм многоголовых поглощений (в восходящей тенденции) и пустых головых поглощений (в нисходящей тенденции), соответствующих направлению тренда.
  5. Стойкость потерь и стоп-поток рассчитываются в зависимости от формы поглощения.
  6. При обнаружении формы поглощения и совпадении с направлением тренда выполняются операции "сделать больше" или "сделать меньше".
  7. Когда цена касается стоп-лосс или стоп-трид, происходит разрыв.
  8. На графике указаны формы поглощения.

Анализ стратегических преимуществ

В частности, в частности:

  1. В сочетании с поглощающей формой и тенденцией, чтобы определить торговые сигналы, улучшить качество сигналов.
  2. Поскольку мы знаем, что мы не можем изменить ситуацию, мы должны быть готовы к тому, что произойдет.
  3. Если вы хотите, чтобы ваш сигнал был более четким, вы можете легко определить время действия.
  4. Стратегия поглощения и снятия убытков следует тренду и контролирует риски.
  5. Фреймворк кода прост, его легко оптимизировать и улучшить.

Стратегический анализ рисков

В то же время в этой стратегии есть некоторые риски:

  1. Поглощающая форма может быть ложным прорывом, а ошибочное распознавание может привести к потерям.
  2. Трудно понять параметры формы поглощения, такие как размер объема, длительность времени и т.д.
  3. Неидеальные механизмы определения трендов могут привести к неконформированным операциям.
  4. Установка стоп-потери и стоп-полеты зависит от опыта и может быть слишком субъективной.
  5. Эффект зависит от параметровой оптимизации и требует проверки большого количества исторических данных.

В связи с указанными рисками можно контролировать и улучшать их следующими способами: 1. В сочетании с другими техническими показателями фильтрует сигналы фальшивого прорыва. 2. Используйте более надежные методы вычисления параметров, такие как адаптивный ATR. 3. повышение надежности механизмов определения тенденций, например, внедрение моделей машинного обучения; 4. Найти оптимальные комбинации параметров с использованием генетических алгоритмов и т.д.; 5. Повторная проверка в более длительное время, чтобы обеспечить стабильность параметров.

Оптимизация стратегии

В этом случае у вас есть много возможностей для оптимизации:

  1. Можно внедрить модели машинного обучения, чтобы повысить точность определения тенденций.
  2. В сочетании с новыми методами распознавания форм улучшается распознавание форм глотания.
  3. Оптимизируйте остановки с использованием новейших стратегий остановки.
  4. На основе высокочастотных данных может быть разработана стратегия прорыва поглощения, более подходящая для операций на короткой линии.
  5. Применяется для изменения и оптимизации параметров различных сортов.

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

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Malikdrajat


//@version=4
strategy("Engulfing with Trend", overlay=true)

Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2

up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Define Downtrend and Uptrend conditions
downtrend = trend == -1
uptrend = trend == 1


// Engulfing 
boringThreshold = input(25, title="Boring Candle Threshold (%)", minval=1, maxval=100, step=1)
engulfingThreshold = input(50, title="Engulfing Candle Threshold (%)", minval=1, maxval=100, step=1)
stopLevel = input(200, title="Stop Level (Pips)", minval=1)


// Boring Candle (Inside Bar) and Engulfing Candlestick Conditions
isBoringCandle = abs(open[1] - close[1]) * 100 / abs(high[1] - low[1]) <= boringThreshold
isEngulfingCandle = abs(open - close) * 100 / abs(high - low) <= engulfingThreshold

// Bullish and Bearish Engulfing Conditions
bullEngulfing = uptrend and close[1] < open[1] and close > open[1] and not isBoringCandle and not isEngulfingCandle
bearEngulfing = downtrend and close[1] > open[1] and close < open[1] and not isBoringCandle and not isEngulfingCandle

// Stop Loss, Take Profit, and Entry Price Calculation
bullStop = close + (stopLevel * syminfo.mintick)
bearStop = close - (stopLevel * syminfo.mintick)
bullSL = low 
bearSL = high
bullTP = bullStop + (bullStop - low)
bearTP = bearStop - (high - bearStop)

// Entry Conditions
enterLong = bullEngulfing and uptrend
enterShort = bearEngulfing and downtrend

// Exit Conditions
exitLong = crossover(close, bullTP) or crossover(close, bullSL)
exitShort = crossover(close, bearTP) or crossover(close, bearSL)

// Check if exit conditions are met by the next candle
exitLongNextCandle = exitLong and (crossover(close[1], bullTP[1]) or crossover(close[1], bullSL[1]))
exitShortNextCandle = exitShort and (crossover(close[1], bearTP[1]) or crossover(close[1], bearSL[1]))

// Strategy Execution
strategy.entry("Buy", strategy.long, when=enterLong )
strategy.entry("Sell", strategy.short, when=enterShort )

// Exit Conditions for Long (Buy) Positions
if (bullEngulfing and not na(bullTP) and not na(bullSL))
    strategy.exit("Exit Long", from_entry="Buy", stop=bullSL, limit=bullTP)

// Exit Conditions for Short (Sell) Positions
if (bearEngulfing and not na(bearTP) and not na(bearSL))
    strategy.exit("Exit Short", from_entry="Sell", stop=bearSL, limit=bearTP)

// Plot Shapes and Labels
plotshape(bullEngulfing, style=shape.triangleup, location=location.abovebar, color=color.green)
plotshape(bearEngulfing, style=shape.triangledown, location=location.abovebar, color=color.red)

// Determine OP, SL, and TP
plot(bullEngulfing ? bullStop : na, title="Bullish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearStop : na, title="Bearish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullSL : na, title="Bullish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearSL : na, title="Bearish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullTP : na, title="Bullish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearTP : na, title="Bearish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)



Больше информации