Адаптивная стратегия торговли каналом супертенденции

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

Обзор

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

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

  1. Вычислить стандартное отклонение цены и волатильность ATR, использовать волатильность для корректировки ширины канала.

  2. Постройте двойные каналы сверхтенденции, с более чувствительным внутренним слоем и более стабильным внешним слоем.

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

  4. Двойная структура канала помогает отфильтровать ложные прорывы.

  5. Волатильность ATR адаптирует ширину канала, более широкую при росте волатильности для адаптивного эффекта.

Преимущества

  1. Супертенд-каналы просты и эффективны в отслеживании тенденций.

  2. Двойной канал фильтрует ложные прорывы и улучшает качество сигнала.

  3. Адаптация к волатильности позволяет каналам соответствовать различным рыночным условиям.

  4. Легко реализовать с простой настройкой параметров.

  5. Визуализированные каналы и прорывы формируют интуитивные торговые сигналы.

Риски

  1. Сигналы прорыва могут приводить к ложным сигналам, что приводит к ненужным потерям.

  2. Он не может определить направление тренда, риски торговли против тренда.

  3. Адаптивная настройка может быть слишком чувствительной, с перенастройками.

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

  5. Как тенденция, следующая за стратегией, он борется на рынках с диапазоном.

Улучшение

  1. Параметры испытания влияние на адаптивный эффект.

  2. Для определения основных тенденций включить MA.

  3. Оптимизируйте подтверждение выхода, чтобы избежать ложных выходов.

  4. Добавить стоп-лосс к лимиту по сделке.

  5. Оцените настройку канала на частоту торговли.

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

Заключение

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


/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000)

//Inputs
multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1)
period = input(title="Period", type=input.integer, step=1, defval=10, minval=1)
SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false)


////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

dev = stdev(close, period)
stdDev = (dev / close) * 100 + 1
MultDev = SelfAdjust ? multi * stdDev : multi

up_lev1 = hl2 - MultDev * atr(period)
dn_lev1 = hl2 + MultDev * atr(period)
up_lev2 = hl2 - (MultDev * 2 * atr(period))
dn_lev2 = hl2 + (MultDev * 2 * atr(period))

up_trend1 = 0.0
up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1
up_trend2 = 0.0
up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2

down_trend1 = 0.0
down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1
down_trend2 = 0.0
down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2

trend1 = 0
trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1)
trend2 = 0
trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1)

st_line1 = trend1 == 1 ? up_trend1 : down_trend1
st_line2 = trend2 == 1 ? up_trend2 : down_trend2

// Plotting
plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1")
plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2")
fill(plot1, plot2, color = color.aqua, title = "Cloud")

buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1
sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1

if(buy and time_cond)
    strategy.entry("long", long = true , comment="long")

if (close < st_line1 and time_cond or close < st_line2 and time_cond)
    strategy.close("long")
    
if (not time_cond)
    strategy.close_all()





 


Больше