На основе стратегии Super Trend


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

На основе стратегии Super Trend

Обзор

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

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

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

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

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

Стратегия супертронда основана на следующих основных принципах:

  1. Расчет ATR: вы можете выбрать расчет SMA или использовать встроенный показатель ATR. Формула для версии SMA выглядит так:
   atr2 = sma(tr, Periods) 
  1. Вычислять находящиеся на и спускающиеся: находящиеся на и спускающихся вниз в цене за вычетом ATR умноженного на ATR, находящиеся на и спускающихся вниз в цене за добавление ATR умноженного на ATR.
   up = close - (Multiplier * atr)
   dn = close + (Multiplier * atr)
  1. Оценить отношение цены к верхнему и нижнему треку, рассчитать направление тренда. Когда цена вверх проходит нижний трек, тенденция является многоглавой, когда цена вниз проходит нижний трек, тенденция является пустой.
   trend := trend == -1 and close > dn ? 1 : trend == 1 and close < up ? -1 : trend 
  1. Появление торгового сигнала при переходе в тренд, как и при переходе от многого к пустому:
   sellSignal = trend == -1 and trend[1] == 1
  1. Фильтрация на основе торговых сигналов и других условий.

  2. Установка стоп-лосс и стоп-стоп для блокировки прибыли или избежания риска.

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

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

В этой стратегии есть следующие преимущества:

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

  2. ATR параметры настраиваются и могут быть оптимизированы для получения оптимального сочетания параметров для разных сортов.

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

  4. Предоставляется возможность выбора сразу же войти в первый список или ждать сигнала, выбор может быть сделан в зависимости от особенностей сорта.

  5. Встроенный стоп-стоп может повысить устойчивость стратегии к риску или закрепить больше прибыли.

  6. Настраиваемые торговые подсказки могут быть интегрированы в автоматизированные или робототехнические торговые системы для обеспечения беспилотного обслуживания.

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

Однако есть и другие риски:

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

  2. Неправильные параметры ATR могут привести к частым сделкам или пропущенным тенденциям. Параметры должны быть оптимизированы для оптимального баланса.

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

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

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

Направление оптимизации стратегии

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

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

  2. Для тестирования различных ATR-париметров, обычно 2-5 наиболее подходящих, можно постепенно корректировать, чтобы найти оптимальное значение.

  3. Попробуйте добавить другие показатели для определения многолетнего полета, такие как MACD, KD и т. д., чтобы отфильтровать ложные сигналы.

  4. Оптимизация параметров тормозной остановки для нахождения оптимальной комбинации параметров. Можно ввести динамическую тормозную остановку.

  5. Тестирование различных временных диапазонов торгов. Кратколинейные разновидности для более коротких периодов времени.

  6. Попытайтесь автоматически выбирать контракты, следя за высокой ликвидностью или высокой волатильностью.

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

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

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