Стратегия кросс-периода на основе AlphaTrend


Дата создания: 2023-09-28 11:05:27 Последнее изменение: 2023-09-28 11:05:27
Копировать: 0 Количество просмотров: 903
1
Подписаться
1617
Подписчики

Обзор

Эта стратегия основана на индикаторе AlphaTrend, который объединяет в себе преимущества обоих показателей RSI и MFI, чтобы получить лучший стратегический эффект на многополосных трендовых рынках. Эта стратегия в основном определяет, пробивает ли цена кривую AlphaTrend, чтобы захватить направление тенденции.

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

  1. Вычисление показателя ATR для измерения степени волатильности рынка
  2. Если нет данных о объемах сделок, используйте RSI для определения свободного рынка; если есть объемы сделок, используйте MFI для определения свободного рынка
  3. Расчет по ATR и многопространственному суждению
  4. Вычислите кривую AlphaTrend, которая сочетает в себе динамическую корректировку вверх и вниз по орбите
  5. Сигналы покупки и продажи появляются, когда цены пересекают кривую AlphaTrend

Стратегия основывается на кривой AlphaTrend для определения направления ценового тренда, она комплексно учитывает волатильность рынка ATR, RSI и MFI, что позволяет эффективно отслеживать ценовой тренд. Когда цена пробивает кривую, это показывает, что тенденция изменилась.

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

  1. Индекс AlphaTrend объединяет преимущества обоих индикаторов RSI и MFI, позволяя одновременно адаптироваться к рыночной ситуации
  2. Динамическая настройка верхней и нижней полос может быть автоматически скорректирована в зависимости от рыночных колебаний
  3. Интегрированная информация о ценах и объемах сделок, не подверженная ошибочным сигналам.
  4. Применение прорывных методов позволяет своевременно улавливать новые тенденции.
  5. Логика ясна, реализация проста и понятна

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

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

  1. В случае возможного прорыва кривой AlphaTrend необходимо проверить комбинацию с другими показателями
  2. Сигналы о недействительности могут появляться несколько раз в случае крупных потрясений
  3. Неправильная настройка параметров индикатора также может повлиять на эффективность стратегии
  4. Стоп-лосс может быть нарушен в случае резкого падения, поэтому следует быть осторожным с крупными убытками

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

Оптимизация стратегии

  1. Вы можете попробовать различные комбинации параметров, чтобы найти оптимальный параметр.
  2. В сочетании с другими показателями могут формироваться вспомогательные условия, помогающие при выборе
  3. Можно установить динамическую остановку или отследить остановку, чтобы контролировать риск
  4. В зависимости от рыночных условий можно использовать различную частоту торгов (например, 5 минут, 15 минут и т. д.)
  5. Оптимизировать время входа, установить более точные условия входа

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

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

Стратегия AlphaTrend в целом является простой и эффективной стратегией слежения за трендом. Она объединяет цены и объемы торгов, адаптируется к пустоте.

Исходный код стратегии
/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-26 00:00:00
period: 30m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
// pv additions, simplification and strategy conversion @ treigen
//@version=5
strategy('AlphaTrend For ProfitView', overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000)
coeff = input.float(1.5, 'Multiplier', step=0.1)
AP = input(15, 'Common Period')
ATR = ta.sma(ta.tr, AP)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)

i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting')
i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting')
timeCond = true

pv_ex = input.string('', title='Exchange', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_sym = input.string('', title='Symbol', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_acc = input.string("", title="Account", group='PV Settings')
pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings')
pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings')
pv_alert_test = input.bool(false, title="Test Alerts", tooltip="Will immediately execute the alerts, so you may see what it sends. The first line on these test alerts will be excluded from any real alert triggers" ,group='PV Settings')

upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(close, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT


k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])

var exsym = ""
if barstate.isfirst
    exsym := pv_ex == "" ? "" : "ex=" + pv_ex + ","
    exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym + ","


if barstate.isconfirmed and timeCond 
    if strategy.position_size <= 0 and buySignalk
        strategy.entry("Buy", strategy.long)
        alert(pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)
    if strategy.position_size >= 0 and sellSignalk
        strategy.entry("Sell", strategy.short)
        alert(pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)


//  Only used for testing/debugging alert messages
if pv_alert_test
    alert("<![Alert Test]!>\n" + pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)
    alert("<![Alert Test]!>\n" + pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)