
Эта стратегия использует сверхтрендовый индикатор для определения ценового тренда и вступает в позиции по оптовой или по внешней цене при смене тренда. Эта стратегия позволяет корректировать ATR-циклы и ATR-множители для оптимизации параметров. Кроме того, эта стратегия также предоставляет возможность изменить метод расчета ATR, что приводит к несколько иным результатам.
Также в стратегии встроена функция диапазона дат обратного отсчета и торговли только в определенные периоды времени. Это особенно полезно для торговли акциями в течение дня. При включении опции временного диапазона можно выбрать, войти в текущую позицию сразу же в начале периода времени или войти в первую позицию после ожидания изменения тенденции.
Стратегия также может устанавливать стоп-пороги и остановки на основе процентов. В большинстве случаев не требуется дополнительно устанавливать стоп-пороги, поскольку они предоставляются на основе ATR, который сам по себе обеспечивает супертенденция. Таким образом, можно использовать только стоп-пороги для оптимизации механизма выхода.
Наконец, стратегия имеет настраиваемую информацию о входе и выходе сделок, которая может использоваться в автоматизированных торговых услугах.
Стратегия супертронда основана на следующих основных принципах:
atr2 = sma(tr, Periods)
up = close - (Multiplier * atr)
dn = close + (Multiplier * atr)
trend := trend == -1 and close > dn ? 1 : trend == 1 and close < up ? -1 : trend
sellSignal = trend == -1 and trend[1] == 1
Фильтрация на основе торговых сигналов и других условий.
Установка стоп-лосс и стоп-стоп для блокировки прибыли или избежания риска.
Выше приведены ключевые моменты стратегии сверхтенденции, которые в сочетании с оптимизацией параметров позволяют получить лучшие торговые результаты.
В этой стратегии есть следующие преимущества:
Показатель супертенденции сам по себе является эффективным инструментом для отслеживания ценовых тенденций и является обычным инструментом для отслеживания стоп-лосс.
ATR параметры настраиваются и могут быть оптимизированы для получения оптимального сочетания параметров для разных сортов.
Можно установить временной диапазон для ретроспективных и фиксированных сделок, чтобы адаптироваться к потребностям различных торговых периодов.
Предоставляется возможность выбора сразу же войти в первый список или ждать сигнала, выбор может быть сделан в зависимости от особенностей сорта.
Встроенный стоп-стоп может повысить устойчивость стратегии к риску или закрепить больше прибыли.
Настраиваемые торговые подсказки могут быть интегрированы в автоматизированные или робототехнические торговые системы для обеспечения беспилотного обслуживания.
Однако есть и другие риски:
Сверхтенденциальные индикаторы могут создавать больше ложных сигналов, и их необходимо фильтровать в сочетании с другими индикаторами.
Неправильные параметры ATR могут привести к частым сделкам или пропущенным тенденциям. Параметры должны быть оптимизированы для оптимального баланса.
Слишком близкое к точке остановки может привести к преждевременному выходу из выгодных позиций, а слишком далекое от точки остановки может привести к недостаточной прибыли.
Неправильно установленный временной диапазон может привести к пропуску основных торговых часов или неуместному использованию гарантии.
В отношении вышеуказанных рисков можно решить путем соответствующей корректировки параметров или добавления фильтрующих условий, повышая стабильность стратегии.
Эта стратегия может быть улучшена в следующих аспектах:
Попробуйте различные параметры цикла ATR, чтобы найти подходящую точку равновесия.
Для тестирования различных ATR-париметров, обычно 2-5 наиболее подходящих, можно постепенно корректировать, чтобы найти оптимальное значение.
Попробуйте добавить другие показатели для определения многолетнего полета, такие как MACD, KD и т. д., чтобы отфильтровать ложные сигналы.
Оптимизация параметров тормозной остановки для нахождения оптимальной комбинации параметров. Можно ввести динамическую тормозную остановку.
Тестирование различных временных диапазонов торгов. Кратколинейные разновидности для более коротких периодов времени.
Попытайтесь автоматически выбирать контракты, следя за высокой ликвидностью или высокой волатильностью.
Эта стратегия является наиболее распространенной и практичной стратегией отслеживания тенденций. Она имеет параметры, которые можно настроить и эффективно отслеживать тенденции, но есть и определенные риски, которые необходимо избегать.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © REV0LUTI0N
//@version=4
// Strategy
strategy("Supertrend Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
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)
enableentry = input(true, title="Enter First Trade ASAP")
waitentry = input(false, title="Wait To Enter First Trade")
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
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
Long = (trend == 1 ? up : na)
buySignal = trend == 1 and trend[1] == -1
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
Short = (trend == 1 ? na : dn)
sellSignal = trend == -1 and trend[1] == 1
// Strategy Backtesting
startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')
time_cond = true
//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))
// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100
longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)
plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")
// Alert messages
message_enterlong = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
// Strategy Execution
if Long and time_cond and timetobuy and enableentry
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if Short and time_cond and timetobuy and enableentry
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if buySignal and time_cond and timetobuy and waitentry
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if sellSignal and time_cond and timetobuy and waitentry
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if strategy.position_size > 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closeshort)
if strategy.position_size > 0 and enablesl and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
if strategy.position_size > 0 and enabletp and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)