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

Автор:Чао Чжан, Дата: 2024-01-15 11:35:47
Тэги:

img

Обзор

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

Логика стратегии

Стратегия использует индикатор ATR для построения канала восходящего и нисходящего тренда. В частности, линия канала восходящего тренда - это цена закрытия минус N раз индикатор ATR; линия канала нисходящего тренда - это цена закрытия плюс N раз индикатор ATR. Значение N может быть скорректировано с помощью параметров.

Когда цена проходит через канал восходящего тренда, генерируется сигнал покупки; когда цена проходит через канал нисходящего тренда, генерируется сигнал продажи. Канал динамически корректируется на основе последних цен для отслеживания тенденций.

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

Преимущества

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

Риски

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

Улучшение:

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

Руководство по оптимизации

  • Добавить другие индикаторы для фильтра для более надежных сигналов
  • Добавление стратегии стоп-лосса для снижения риска
  • Провести оптимизацию параметров для поиска оптимального
  • Оптимизировать сроки входа и выхода для повышения уровня прибыли

Резюме

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


/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.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='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '买入')
shortCondition = sellSignal
if shortCondition and window()
    strategy.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Больше