На основе стратегии прорыва двойного тренда


Дата создания: 2024-02-19 11:52:40 Последнее изменение: 2024-02-19 11:52:40
Копировать: 0 Количество просмотров: 711
1
Подписаться
1617
Подписчики

На основе стратегии прорыва двойного тренда

Обзор

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

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

Линия тренда

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

Межлинейный пересечение

Стратегия использует короткую 5-дневную линию и длинную 34-дневную линию, чтобы построить стратегию пересечения медленной средней линии. На короткой средней линии проход на длинную среднюю линию является сигналом покупки, а на нижней - сигналом продажи. Используйте быструю среднюю линию для захвата краткосрочных тенденций, а медленная средняя линия для отслеживания долгосрочных тенденций.

Ценный канал

Стратегия также предусматривает 5-дневный ценовой канал, чтобы преодолеть верхние и нижние торги, чтобы поймать кратковременные ценовые прорывы.

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

Стратегические преимущества

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

  2. Быстрые средние и ценовые каналы позволяют своевременно уловить изменения в краткосрочных ценовых тенденциях. Медленные средние и трендовые линии отслеживают долгосрочные тенденции, входящие и выходящие из рынка относительно стабильны.

  3. Структура кода ясна, параметры показателя могут быть изменены, и могут быть оптимизированы для различных циклов и сортов.

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

Стратегический риск

  1. Существует определенный риск ложного прорыва, особенно в сценариях ценовых колебаний, которые могут привести к убыткам.

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

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

  • Для риска ложного прорыва можно фильтровать показатели объема торгов, например, увеличение объема торгов при прорыве или закрытие цены на определенную K-линию до предыдущего высокого или предыдущего низкого уровня.

  • Для предотвращения риска покупки, можно установить фильтрующие условия для показателей перекупа и перепродажи, например, RSI, чтобы избежать перекупа. Или установить линию стоп-лосса, чтобы ускорить стоп-лосс.

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

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

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

  2. Для различных торговых разновидностей, настройка параметров средней линии и параметров ценового канала была адаптирована к особенностям данной разновидности.

  3. Увеличение стратегии остановки убытков, сдерживание единичных убытков с помощью мобильных остановок, привязки остановок и т. д.

  4. Применение адаптивного метода, снижение частоты открытия позиций, когда рынок вступает в фазу шок-очистки; увеличение частоты торговли, когда тенденция очевидна.

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

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

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

Исходный код стратегии
/*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")