Долгосрочная стратегия торговли на основе SuperTrend

Автор:Чао Чжан, Дата: 2023-09-20 17:14:33
Тэги:

Обзор

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

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

  1. Верхняя и нижняя полосы рассчитываются на основе периода ATR, мультипликатора.

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

  3. Движущаяся средняя добавляется в качестве фильтра тренда. Купить только в том случае, если цена превышает MA при прорыве выше верхней полосы. Продать только в том случае, если цена ниже MA при прорыве ниже нижней полосы. Это избегает фальшивых прорывов.

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

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

Преимущества этой стратегии:

  1. SuperTrend динамически отслеживает изменения цен и своевременно отражает изменения тренда.

  2. ATR-стоп-лосс корректирует стопы на основе волатильности рынка, помогая зафиксировать прибыль.

  3. Фильтр MA устраняет ложные сигналы от шума на различных рынках.

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

  5. Только изменение торговой тенденции делает его подходящим для долгосрочного хранения.

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

Основными рисками являются:

  1. СуперТренд чувствителен к параметрам. Частые корректировки диапазона могут привести к переоценке.

  2. На нестабильных рынках часто возникают остановки.

  3. Не учитывая затраты на торговлю, небольшие счета страдают больше.

  4. Отсутствие стоп-лосса означает высокий риск вывода.

  5. Тенденционный фильтр может упустить некоторые возможности.

Риски могут быть уменьшены:

  1. Оптимизация параметров ATR для более низкой частоты регулировки полосы.

  2. Добавление эквивалентной штрих-фильтрации, чтобы избежать остановки с помощью высокочастотных незначительных колебаний.

  3. Использование стоп-лосса и прибыли для защиты прибыли.

  4. Настройка скользящего среднего периода на балансовый эффект фильтрации.

  5. Оптимизация управления деньгами для снижения затрат на торговлю.

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

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

  1. Проверьте различные источники цен, такие как близкие, высокие и т. Д.

  2. Попробуйте другие динамические индикаторы стоп-лосса, такие как Chandelier Exit.

  3. Добавьте размер позиций для оптимизации использования капитала.

  4. Включить показатели волатильности для уточнения записей.

  5. Используйте стоп-лосс и получение прибыли для контроля рисков.

  6. Настройка параметров для разных рынков.

  7. Исследуйте машинное обучение для оптимизации параметров.

  8. Комбинировать другие показатели для повышения точности фильтра.

Заключение

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


/*backtest
start: 2020-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)

atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? 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

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1 and close > ma
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0))

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1 and close < ma
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(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)
    strategy.entry("BUY", strategy.long, when = window())

shortCondition = sellSignal
if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short, when = window())

buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)


Больше