Стратегия следования за трендом на основе ATR и индекса волатильности


Дата создания: 2024-01-04 15:31:34 Последнее изменение: 2024-01-04 15:31:34
Копировать: 1 Количество просмотров: 590
1
Подписаться
1621
Подписчики

Стратегия следования за трендом на основе ATR и индекса волатильности

Обзор

Эта стратегия использует среднюю реальную амплитуду ((ATR) и волатильный индекс ((CHOP) в качестве основных технических показателей для идентификации и отслеживания тенденций. Когда индекс прорывается вверх и вниз, в сочетании с направлением тенденции используется в качестве входного сигнала.

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

  1. Используйте ATR для вычисления размера корпуса, построения каналов Рипока и определения направления ценовых тенденций.
  2. Используйте индикатор CHOP, чтобы определить, подходит ли рынок для торговли, который включает в себя наивысшую цену, наименьшую цену и ATR, когда он находится в диапазоне 38.2-61.8, что означает замедление колебаний рынка; в противном случае это означает, что рынок колеблется сильно и не подходит для торговли.
  3. Когда индикатор CHOP прорывается вниз с верхней полосы 61.8, цена входит в нисходящую тенденцию, и если краткосрочная быстрая EMA также показывает ценовую лидирующую позицию, она делает пробел; наоборот, когда CHOP прорывается вверх с нижней полосы 38.2 и краткосрочная EMA поднимает цену, она делает больше.
  4. Используйте стратегию остановки или остановки, когда цена вновь входит в зону 38.2-61.8 в CHOP.

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

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

  1. Используйте канал Ripple, созданный ATR, чтобы эффективно отслеживать тенденции цен.
  2. Индекс CHOP используется для оценки рыночных колебаний, чтобы избежать ошибочных сделок во время сильных колебаний.
  3. В сочетании с быстрой оценкой краткосрочных тенденций EMA, избегайте обратной операции.
  4. Стоп-стоп-стратегия контролирует одноразовые потери.

Анализ рисков

Основные риски, связанные с этой стратегией:

  1. При шокирующих событиях ATR-каналы и индикаторы CHOP могут создавать ошибочные сигналы. Параметры могут быть соответствующим образом скорректированы для устранения ошибочных сигналов.
  2. Одно техническое сочетание не позволяет полностью избежать убытков и требует человеческого вмешательства для определения тенденций.
  3. Стоп-позиции установлены слишком свободно, а одиночные потери могут быть слишком большими. Стоп-позиции следует соответственно уменьшить.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Добавление других вспомогательных показателей для определения сигнала, таких как форма K-линий, количество сделок и т. д., повышает точность сигнала.
  2. Оптимизация параметров ATR и CHOP, чтобы они лучше фиксировали колебания цен.
  3. Настройка динамического места остановки ущерба для большего пространства для остановки ущерба и более быстрой остановки ущерба.
  4. После оценки тенденции на большом уровне, следует расширить пределы остановки, чтобы получить большую прибыль в тренде.

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

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

Исходный код стратегии
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © sharatgbhat

//@version=4
strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500)
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating = input(defval=false, type=input.bool, title="Oscillating")
normalize = input(defval=false, type=input.bool, title="Normalize")
vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close / methodvalue

currclose = float(na)
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = int(na)
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol / barcount : vol

plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume")

length = input(14, minval=1)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

MomentumBull = close>ema(close,8)
MomentumBear = close<ema(close,8)
Tradecon = crossunder(ci,61.8)

if (MomentumBull and directionIsUp and Tradecon)
	strategy.entry("Buy", strategy.long)
if (MomentumBear and directionIsDown and Tradecon )
    strategy.entry("Sell", strategy.short)
    strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10)
    strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)