Стратегия межциклического арбитража, основанная на нескольких показателях

Автор:Чао Чжан, Дата: 2024-01-29 11:10:33
Тэги:

img

Обзор

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

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

Тремя техническими индикаторами, используемыми в этой стратегии, являются Keltner Channel (KC), Volatility Stop (Vstop) и Williams Alligator (WAE). Keltner Channel используется для определения того, находятся ли цены за пределами диапазона канала и, таким образом, генерируют торговые сигналы.

  1. Когда цена выше верхней рельсы Keltner Channel, это считается бычьим сигналом. Когда цена ниже нижней рельсы Keltner Channel, это считается медвежьим сигналом.

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

  3. Индикатор Williams Alligator оценивает, находятся ли цены в сильном восходящем или нисходящем тренде, рассчитывая ширину канала MACD и полосы Боллинджера.

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

Анализ преимуществ

Наибольшее преимущество этой стратегии заключается в точных торговых сигналах, предоставляемых комбинацией нескольких индикаторов. Три индикатора работают в разные временные рамки и перекрестно проверяют друг друга, что может эффективно снизить вероятность ошибочного суждения и повысить точность сигналов. Кроме того, установка Volatility Stop динамична и может регулировать позицию стоп-лосса в соответствии с волатильностью в режиме реального времени для дальнейшего контроля рисков.

По сравнению с едиными индикаторными стратегиями, эта комбинированная стратегия может обеспечить более точные и эффективные торговые сигналы.

Анализ рисков

Основным риском этой стратегии является то, что неправильное настройка параметров может вызвать переустановку. Три индикатора имеют в общей сложности 8 параметров. Неправильные настройки могут негативно повлиять на стратегию. Кроме того, отношение веса между индикаторами также должно быть правильно настроено, иначе сигналы могут нейтрализовать друг друга и стать недействительными.

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

Руководство по оптимизации

Пространство оптимизации этой стратегии в основном сосредоточено на двух аспектах: настройке параметров и улучшении стратегий стоп-лосса.

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

  2. Улучшить стратегию стоп-лосса, чтобы еще больше уменьшить ненужные стоп-лосы, обеспечивая при этом стоп-лосс, тем самым повышая показатель выигрыша.

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

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

Резюме

Эта стратегия создает кросс-циклическую систему арбитража посредством сочетания Keltner Channel, Volatility Stop и Williams Alligator. Комбинация мультииндикаторов улучшает точность сигнала и динамический стоп-лосс контролирует риски. Но есть возможности для улучшения в установке и оптимизации параметров. В целом эта стратегия имеет сильную научность и стоит дальнейших исследований и применения.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("QuarryLake", overlay=true)  ///Ultilized modified full kelly for this strategy = 36%

///Keltner channel///
nPeriod = input(title="Keltner Period", type=input.integer, defval=200, minval=1)
Mult = input(title="Keltner Mult", type=input.integer, defval=5, minval=1)
xPrice = ema(hlc3, nPeriod)
xMove = ema(high - low, nPeriod)
xMoveMult = xMove * Mult
xUpper = xPrice + xMoveMult
xLower = xPrice - xMoveMult

// plot(xPrice, color=red, title="KSmid")
p1 = plot(xUpper, color=color.white, title="KSup")
p2 = plot(xLower, color=color.white, title="KSdn")
fill(p1, p2, color=close > xUpper ? color.green : close < xLower ? color.red : color.white)

kclongcondition = close > xUpper
kcshortcondition = close < xLower
kccloselongcondition = crossunder(close, xUpper)
kccloseshortcondition = crossover(close, xLower)

///Volatility Stop///
length = input(title="Vstop length", type=input.integer, defval=3, minval=1)
mult1 = 1.5

atr_ = atr(length)
max1 = 0.0
min1 = 0.0
is_uptrend_prev = false
stop = 0.0
vstop_prev = 0.0
vstop1 = 0.0
is_uptrend = false
is_trend_changed = false
max_ = 0.0
min_ = 0.0
vstop = 0.0
max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)
is_uptrend_prev := nz(is_uptrend[1], true)
stop := is_uptrend_prev ? max1 - mult1 * atr_ : min1 + mult1 * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult1 * atr_ : min_ + mult1 * atr_ : 
   vstop1

plot(vstop, color=is_uptrend ? color.green : color.red, style=plot.style_line, linewidth=1)

vstoplongcondition = close > vstop
vstoplongclosecondition = crossunder(close, vstop)
vstopshortcondition = close < vstop
vstopshortclosecondition = crossover(close, vstop)

///Waddah Attar Explosion///
sensitivity = input(150, title="Sensitivity")
fastLength = input(20, title="FastEMA Length")
slowLength = input(40, title="SlowEMA Length")
channelLength = input(20, title="BB Channel Length")
mult = input(2.0, title="BB Stdev Multiplier")
DEAD_ZONE = nz(rma(tr(true), 100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
    fastMA = ema(source, fastLength)
    slowMA = ema(source, slowLength)
    fastMA - slowMA
calc_BBUpper(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis + dev
calc_BBLower(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis - dev
t1 = (calc_macd(close, fastLength, slowLength) - 
   calc_macd(close[1], fastLength, slowLength)) * sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) - 
   calc_macd(close[3], fastLength, slowLength)) * sensitivity
e1 = calc_BBUpper(close, channelLength, mult) - 
   calc_BBLower(close, channelLength, mult)
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0

waelongcondition = trendUp and trendUp > DEAD_ZONE and trendUp > e1
waeshortcondition = trendDown and trendDown > DEAD_ZONE and trendDown > e1

///Long Entry///
longcondition = kclongcondition and vstoplongcondition and waelongcondition
if longcondition
    strategy.entry("Long", strategy.long)

///Long exit///
closeconditionlong = kccloselongcondition or vstoplongclosecondition
if closeconditionlong
    strategy.close("Long")

///Short Entry///
shortcondition = kcshortcondition and vstopshortcondition and waeshortcondition
if shortcondition
    strategy.entry("Short", strategy.short)

///Short exit///
closeconditionshort = kccloseshortcondition or vstopshortclosecondition
if closeconditionshort
    strategy.close("Short")

///Free Hong Kong, the revolution of our time///


Больше