Эта стратегия использует средний истинный диапазон (ATR) и индекс CHOP в качестве основных технических индикаторов для выявления и отслеживания тенденций.
Используйте ATR для расчета размера коробки и сооружения канала Renko для определения направления ценового тренда.
Применять индекс CHOP, чтобы судить, пригоден ли рынок для торговли. Этот индекс включает в себя самую высокую цену, самую низкую цену и ATR. Когда он находится между 38,2-61,8, он указывает на низкую волатильность рынка; в противном случае он сигнализирует о высокой волатильности и неуместном торговом рынке.
Когда индекс CHOP прорывается через верхнюю рельсу 61.8, цена вступает в нисходящую тенденцию. Если краткосрочная быстрая EMA также показывает, что цена лидирует, перейдите на короткий. И наоборот, когда CHOP прорывается через нижнюю рельсу 38.2 и краткосрочная EMA повышается, перейдите на длинный.
Используйте стратегию стоп-лосс/приобретения прибыли. Когда цена вновь входит в зону 38.2-61.8 CHOP, закрывайте позицию со стоп-лосом или приобретете прибыль.
Эта стратегия сочетает в себе суждение о тренде и контроль волатильности, которые могут одновременно улавливать ценовые тенденции и контролировать риски.
Канал Renko, построенный ATR, может эффективно отслеживать тенденции цен.
Индекс CHOP оценивает уровень волатильности рынка, чтобы избежать неправильной торговли при сильных колебаниях.
Сочетание быстрой EMA для определения направления краткосрочного тренда позволяет избежать обратной операции.
Стратегия стоп-лосс/прибыль контролирует однократные убытки.
Основные риски этой стратегии:
На боковом рынке сигналы ATR и CHOP могут производить неправильные сигналы.
Для определения основных тенденций требуется ручное вмешательство.
Позиция стоп-лосса, установленная слишком свободно, может привести к переувеличению одиночной потери.
Эта стратегия может быть оптимизирована в следующих аспектах:
Увеличьте другие вспомогательные индикаторы для определения сигналов, таких как модели свечей, объем и т. Д., Чтобы улучшить точность сигнала.
Оптимизировать параметры ATR и CHOP, чтобы лучше улавливать колебания цен.
Установите динамические позиции стоп-лосса/стоп-лосса для получения большей прибыли и более быстрого стоп-лосса.
Правильно ослабить диапазон стоп-лосса после определения основного тренда, чтобы получить больше прибыли в тренде.
Эта стратегия интегрирует широко используемые технические индикаторы и является простой и практичной. С корректировкой параметров и оптимизацией можно получить удовлетворительные эффекты отслеживания. Но она все еще требует ручного суждения о основных тенденциях и не может быть полностью автоматизирована. Она может служить вспомогательным инструментом принятия решений и справочником для других стратегий.
/*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)