Эта стратегия в основном сочетает в себе перекрестные сигналы Hull Moving Average и WT, чтобы использовать преимущества каждого индикатора для более точного определения тренда и сроков входа.
Стратегия состоит из крестовых сигналов Hull Moving Average и WT.
Часть Hull Moving Average рассчитывает краткосрочные и долгосрочные Hull MAs и заполняет цвета, чтобы определить направление тренда.
Короткий корпус MA = WMA ((2*WMA ((n/2) - WMA ((n), sqrt ((n))
Длинный корпус MA = WMA(WMA(n/3) *3 - WMA(n/2), n/2)
Когда короткий MA пересекает длинный MA, это бычий сигнал, в противном случае медвежий сигнал.
Часть WT рассчитывает линии WT и наблюдает за их пересечениями для определения записей.
TCI = (Close - EMA(Close,n1)) / (k * STD(Close - EMA(Close,n1),n1))
WT1 = EMA ((TCI,n2)
WT2 = SMA(WT1,m)
Где TCI представляет собой Тренд Композит Индекс, отражающий отклонение цены от EMA; WT1 - это EMA TCI, WT2 - SMA WT1, m обычно равен 4. Пересечение WT1 над WT2 указывает на бычий сигнал, в то время как пересечение WT1 под WT2 указывает на медвежий сигнал.
Объединив суждение о тенденции Hull MA и сигналы WT, мы можем выйти на рынок в правильном направлении.
Преимущества этой стратегии:
Hull MA зафиксирует изменения цен быстрее, изменяя расчет, и эффективно фильтрует рыночный шум для надежного определения тренда.
WT использует колебания цен в канале для быстрого определения поворотных моментов и получения относительно точных торговых сигналов.
В комбинации учитываются как тенденция, так и пересечение для лучшего контроля риска при выравнивании тренда.
Параметры Hull MA и WT могут быть настроены для корректировки и оптимизации на основе характеристик символов и торговых предпочтений.
Сигналы Hull MA и WT могут использоваться отдельно или вместе для проверки как тренда, так и перекрестного измерения.
Стоп-лосс и прибыль могут быть установлены для эффективного контроля рисков единой торговли.
Основными рисками этой стратегии являются:
Как Hull MA, так и WT в некоторой степени сглаживают цены, что может вызвать отставание сигналов о входе.
WT может генерировать ложные сигналы дивергенции бычьего/медвежьего направления без четкой тенденции.
Неправильные параметры могут повлиять на результаты торговли и требуют постоянной оптимизации.
Стоп-лосс может часто запускаться во время консолидации тренда, вызывая определенные потери.
Риски могут быть устранены и оптимизированы следующим образом:
Настройка параметров Hull MA и WT для нахождения оптимального баланса.
Добавить механизмы проверки тренда, чтобы избежать ложных сигналов WT без подтвержденной тенденции.
Оптимизируйте параметры с помощью обратного тестирования и демонстрационной торговли и устанавливайте разумные диапазоны стоп-лосса.
Уменьшить размер позиции или прекратить торговлю, когда тенденция неясна.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
Проверьте различные скользящие средние в сочетании с WT, чтобы найти лучший баланс, например, KAMA, TEMA и т.д.
Добавьте другие индикаторы, такие как осцилляторы, полосы Боллинджера, чтобы улучшить точность решений.
Оптимизируйте параметры с помощью бэкстестинга и демо-трейдинга.
Оптимизируйте стратегии стоп-лосса, например, стоп-стоп, основанный на волатильности, переход от близкого к дальнему и т.д., чтобы уменьшить нежелательное запускание.
Оптимизировать стратегии размещения позиций, уменьшить размеры и частоту в неясных тенденциях для снижения рисков.
Внедрить машинное обучение и другие передовые методы для более умных торговых решений и адаптивных параметров.
Эта стратегия сочетает в себе сильные стороны Hull MA сглаживания и WT пересечения как для суждения о тренде, так и для проверки. Торговля с подтвержденным направлением помогает контролировать риски. Дальнейшие улучшения могут быть внесены в оптимизацию параметров, стратегии остановки потерь, размещение позиций и т. Д. Интеграция других индикаторов и интеллектуальных методов также являются будущими направлениями оптимизации. В целом, это практическая тенденция, следующая за стратегией с простотой, надежностью и легкостью оптимизации.
/*backtest start: 2023-08-26 00:00:00 end: 2023-09-25 00:00:00 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/ // WT CROSS @author [© LazyBear] // © pigsq // @version=5 strategy("Kahlman HullMA / WT Cross Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100) _1 = input(false, '───────── SP/TP SETTINGS ─────────') stoploss1 = input(title='Stop Loss On/Off?', defval=true) stoploss = input.float(5, "Stop Loss", minval = 1, step = 1)/100 takeprofit1 = input(title='Take Profit On/Off?', defval=true) takeprofit = input.float(10, "Take Profit", minval = 1, step = 1)/100 _2 = input(false, '──────── WT CROSS SETTINGS ────────') wtcross = input(title='WT Cross On/Off?', defval=true) wtcross2 = input(title='Change WT Cross Method ( If WT Cross ON )', defval=false) /// WT CROSS /// n1 = input(10, 'Channel Length') n2 = input(21, 'Average Length') ap = hlc3 esa = ta.ema(ap, n1) r = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * r) tci = ta.ema(ci, n2) wt1 = tci wt2 = ta.sma(wt1, 4) /// WT CROSS /// /// HULL TREND WITH KAHLMAN /// _3 = input(false, '──────── HULLMA SETTINGS ────────') srchull = input(hl2, 'Source') lengthhull = input(24, 'Lookback') gain = input(10000, 'Gain') kh = input(true, 'Use Kahlman') hma(_srchull, _lengthhull) => ta.wma((2 * ta.wma(_srchull, _lengthhull / 2)) - ta.wma(_srchull, _lengthhull), math.round(math.sqrt(_lengthhull))) hma3(_srchull, _lengthhull) => p = lengthhull / 2 ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p) kahlman(x, g) => kf = 0.0 dk = x - nz(kf[1], x) smooth = nz(kf[1], x) + dk * math.sqrt(g / 10000 * 2) velo = 0.0 velo := nz(velo[1], 0) + g / 10000 * dk kf := smooth + velo kf a = kh ? kahlman(hma(srchull, lengthhull), gain) : hma(srchull, lengthhull) b = kh ? kahlman(hma3(srchull, lengthhull), gain) : hma3(srchull, lengthhull) c = b > a ? color.lime : color.red crossdn = a > b and a[1] < b[1] crossup = b > a and b[1] < a[1] p1hma = plot(a, color=c, linewidth=1, title='Long Plot', transp=75) p2hma = plot(b, color=c, linewidth=1, title='Short Plot', transp=75) fill(p1hma, p2hma, color=c, title='Fill', transp=55) /// HULL TREND WITH KAHLMAN /// /// DATE /// _4 = input(false, '───────── DATE SETTINGS ─────────') FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12) FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31) FromYear = input.int(defval=999, title='From Year', minval=999) ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12) ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31) ToYear = input.int(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 /// DATE /// /// LONG/SHORT CONDITION /// longCondition = crossup and ta.crossover(wt1,wt2) longCondition1 = crossup longCondition2 = crossup and wt1 > wt2 if (wtcross == true ? longCondition : wtcross == false ? longCondition1:na) strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long") else if (wtcross2 == true ? longCondition2 : wtcross2 == false ? longCondition:na) strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long") shortCondition = crossdn and ta.crossunder(wt1,wt2) shortCondition1 = crossdn shortCondition2 = crossdn and wt1 < wt2 if (wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na) strategy.entry("SHORT", strategy.short, when=window(), comment="Enter Short") else if (wtcross2 == true ? shortCondition2 : wtcross2 == false ? shortCondition:na) strategy.entry("LONG", strategy.long, when=window(), comment="Enter Short") /// LONG/SHORT CONDITION /// /// CLOSE STRATEGY /// strategy.close("LONG", when=wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na, comment = "Close Long") strategy.close("SHORT", when=wtcross == true ? longCondition : wtcross == false ? longCondition1:na, comment = "Close Short") /// EXIT STRATEGY /// strategy.exit("LONG", when=strategy.position_size > 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 - stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 + takeprofit):na, comment="Exit Long") strategy.exit("SHORT", when=strategy.position_size < 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 + stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 - takeprofit):na, comment ="Exit Short") /// LONG SL/TP LINE /// plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 - stoploss) : na, title='Long Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr) plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeprofit) : na, title='Long Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr) /// LONG SL/TP LINE /// /// SHORT SL/TP LINE /// plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 + stoploss) : na, title='Short Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr) plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeprofit) : na, title='Short Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr) /// SHORT SL/TP LINE ///