
Стратегия двойного прорыва тренда использует множество технических показателей, в основном включая трендовые линии, пересечения средних линий и прорывы ценовых каналов, чтобы идентифицировать изменения в тенденции рынка и захватить возможности для обратного тренда. Эта стратегия, в сочетании с отслеживанием тенденции и сигналом прорыва, является более устойчивой для входа и выхода, но также имеет определенный риск ложного прорыва.
Сначала стратегия использует высокие и низкие точки для разделения полярных тенденций, а когда цена пересекает трендовую линию, это означает, что потенциальная тенденция изменится. Склонность рассчитывается с использованием метода ATR, чтобы приблизить ее к фактической колебанию.
Стратегия использует короткую 5-дневную линию и длинную 34-дневную линию, чтобы построить стратегию пересечения медленной средней линии. На короткой средней линии проход на длинную среднюю линию является сигналом покупки, а на нижней - сигналом продажи. Используйте быструю среднюю линию для захвата краткосрочных тенденций, а медленная средняя линия для отслеживания долгосрочных тенденций.
Стратегия также предусматривает 5-дневный ценовой канал, чтобы преодолеть верхние и нижние торги, чтобы поймать кратковременные ценовые прорывы.
Эти три технических показателя используются в этой стратегии, чтобы создать надежный механизм двойного суждения и избежать ошибочных сделок.
Интеграция различных технических показателей позволяет определить, что сигнал является более устойчивым и уменьшает потери, вызванные ложным прорывом.
Быстрые средние и ценовые каналы позволяют своевременно уловить изменения в краткосрочных ценовых тенденциях. Медленные средние и трендовые линии отслеживают долгосрочные тенденции, входящие и выходящие из рынка относительно стабильны.
Структура кода ясна, параметры показателя могут быть изменены, и могут быть оптимизированы для различных циклов и сортов.
В сочетании с трендовым суждением и сигналом о прорыве, в трендовом бычьем рынке более радикальная ситуация способствует получению прибыли; во время сбора диапазона частота торгов с прорывным сигналом снижается, что помогает избежать крупных потрясений.
Существует определенный риск ложного прорыва, особенно в сценариях ценовых колебаний, которые могут привести к убыткам.
Пересечение средней линии является отстающим сигналом, и в случае резкого изменения тенденции существует риск выхода на более высокие ставки или снижения цены.
Интеграция множества технических показателей требует большого количества тестирования и вычислений при оптимизации параметров, что является трудоемким.
Для риска ложного прорыва можно фильтровать показатели объема торгов, например, увеличение объема торгов при прорыве или закрытие цены на определенную K-линию до предыдущего высокого или предыдущего низкого уровня.
Для предотвращения риска покупки, можно установить фильтрующие условия для показателей перекупа и перепродажи, например, RSI, чтобы избежать перекупа. Или установить линию стоп-лосса, чтобы ускорить стоп-лосс.
Для задач по оптимизации параметров можно использовать методы машинного обучения для поиска оптимальных комбинаций параметров в большом количестве исторических данных.
Добавить к этому показатель объема сделки или показатель перекупа и перепродажи, чтобы оценить надежность тренда, установить строгие фильтрующие условия, чтобы избежать убытков от ложных прорывов.
Для различных торговых разновидностей, настройка параметров средней линии и параметров ценового канала была адаптирована к особенностям данной разновидности.
Увеличение стратегии остановки убытков, сдерживание единичных убытков с помощью мобильных остановок, привязки остановок и т. д.
Применение адаптивного метода, снижение частоты открытия позиций, когда рынок вступает в фазу шок-очистки; увеличение частоты торговли, когда тенденция очевидна.
При помощи методов глубокого обучения модели обучаются определению точек купли-продажи, дополняют или заменяют традиционные технические показатели, используют способность глубокого обучения для генерализации и поиска более эффективных торговых стратегий.
Эта стратегия объединяет несколько часто используемых технических показателей в систему двойного суждения, которая позволяет эффективно идентифицировать изменения тенденций и демонстрирует хорошую стабильность при обратном измерении. Однако следует также обратить внимание на определенный риск ложного прорыва, оптимизировать его путем добавления фильтрующих условий, стратегий остановки убытков, регулирования параметров и применения методов машинного обучения, что позволяет дополнительно повысить реальную производительность стратегии.
/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FinanceUpPvtLtd
//@version=5
strategy("FINANCE UP FREE STRATEGY (+919665229664)", overlay=true)
// Script 01 - Trendlines
length_tl = input.int(14, 'Swing Detection Lookback')
mult_tl = input.float(1., 'Slope', minval=0, step=.1)
calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
upCss_tl = input(color.teal, 'Up Trendline Color', group='Style')
dnCss_tl = input(color.red, 'Down Trendline Color', group='Style')
showExt_tl = input(true, 'Show Extended Lines')
var upper_tl = 0.
var lower_tl = 0.
var slope_ph_tl = 0.
var slope_pl_tl = 0.
var offset_tl = backpaint_tl ? length_tl : 0
n_tl = bar_index
src_tl = close
ph_tl = ta.pivothigh(length_tl, length_tl)
pl_tl = ta.pivotlow(length_tl, length_tl)
slope_tl = switch calcMethod_tl
'Atr' => ta.atr(length_tl) / length_tl * mult_tl
'Stdev' => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
var upos_tl = 0
var dnos_tl = 0
upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl
// var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
// var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
// if ph_tl and showExt_tl
// uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
// uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
// if pl_tl and showExt_tl
// dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
// dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))
plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)
plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)
alertcondition(upos_tl > upos_tl[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout', 'Price broke the up-trendline downward')
// Script 02 - Channel Breakout
length_channel = input.int(title="Channel Length", minval=1, maxval=1000, defval=5)
upBound_channel = ta.highest(high, length_channel)
downBound_channel = ta.lowest(low, length_channel)
if (not na(close[length_channel]))
strategy.entry("LE-LE", strategy.long, stop=upBound_channel + syminfo.mintick, comment="LE-LE")
strategy.entry("BECH-DE", strategy.short, stop=downBound_channel - syminfo.mintick, comment="BECH-DE")
// Script 03 - MA Cross
shortlen_ma = input.int(5, "Short MA Length", minval=1)
longlen_ma = input.int(34, "Long MA Length", minval=1)
short_ma = ta.sma(close, shortlen_ma)
long_ma = ta.sma(close, longlen_ma)
plot(short_ma, color=#FF6D00, title="Short MA")
plot(long_ma, color=#43A047, title="Long MA")
plot(ta.cross(short_ma, long_ma) ? short_ma : na, color=#2962FF, style=plot.style_cross, linewidth=4, title="Cross")