Эта стратегия определяет длинные возможности с использованием индикатора SuperTrend. Она использует ATR и мультипликатор для определения динамических уровней поддержки для длинного входа.
Верхняя и нижняя полосы рассчитываются на основе периода ATR, мультипликатора.
Нынешний тренд отслеживается, с 1 для восходящего тренда и -1 для нисходящего тренда. Перерыв цены выше верхней полосы переключает тренд снизу вверх, генерируя сигнал покупки. Перерыв ниже нижней полосы переключает сверху вниз, генерируя сигнал продажи.
Движущаяся средняя добавляется в качестве фильтра тренда. Купить только в том случае, если цена превышает MA при прорыве выше верхней полосы. Продать только в том случае, если цена ниже MA при прорыве ниже нижней полосы. Это избегает фальшивых прорывов.
Визуальные помощники подчеркивают тенденции, сигналы и т. д., чтобы помочь в принятии решений.
Преимущества этой стратегии:
SuperTrend динамически отслеживает изменения цен и своевременно отражает изменения тренда.
ATR-стоп-лосс корректирует стопы на основе волатильности рынка, помогая зафиксировать прибыль.
Фильтр MA устраняет ложные сигналы от шума на различных рынках.
Визуальный дизайн интуитивно представляет механику стратегии и ситуацию на рынке.
Только изменение торговой тенденции делает его подходящим для долгосрочного хранения.
Основными рисками являются:
СуперТренд чувствителен к параметрам. Частые корректировки диапазона могут привести к переоценке.
На нестабильных рынках часто возникают остановки.
Не учитывая затраты на торговлю, небольшие счета страдают больше.
Отсутствие стоп-лосса означает высокий риск вывода.
Тенденционный фильтр может упустить некоторые возможности.
Риски могут быть уменьшены:
Оптимизация параметров ATR для более низкой частоты регулировки полосы.
Добавление эквивалентной штрих-фильтрации, чтобы избежать остановки с помощью высокочастотных незначительных колебаний.
Использование стоп-лосса и прибыли для защиты прибыли.
Настройка скользящего среднего периода на балансовый эффект фильтрации.
Оптимизация управления деньгами для снижения затрат на торговлю.
Стратегия может быть улучшена в следующих аспектах:
Проверьте различные источники цен, такие как близкие, высокие и т. Д.
Попробуйте другие динамические индикаторы стоп-лосса, такие как Chandelier Exit.
Добавьте размер позиций для оптимизации использования капитала.
Включить показатели волатильности для уточнения записей.
Используйте стоп-лосс и получение прибыли для контроля рисков.
Настройка параметров для разных рынков.
Исследуйте машинное обучение для оптимизации параметров.
Комбинировать другие показатели для повышения точности фильтра.
Эта стратегия использует 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)