Викс фиксирует линейную регрессионную стратегию лова рыбы на дне

Автор:Чао Чжан, Дата: 2024-01-30 16:56:39
Тэги:

img

Обзор

Основная идея этой стратегии состоит в том, чтобы объединить индикатор Vix Fix и его линейную регрессию для точного определения дна рынка.

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

  1. Вычислить индикатор Vix Fix, который хорошо оценивает дно рынка
  2. Применение линейной регрессии на Vix Fix. Когда цвет гистограммы линейной регрессии становится зеленым, это означает, что линейная регрессия Vix Fix начинает расти, сигнал покупки может быть задействован
  3. Комбинировать с зелеными столбцами индикатора Vix Fix для дальнейшего подтверждения времени записи
  4. Когда линейная регрессия гистограмма цвет становится красным, это означает, что Vix Fix линейная регрессия начинает снижаться, сигнал продажи запускается

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

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

  1. Стратегия использует линейную регрессию для фильтрации некоторых ложных сигналов индикатора Vix Fix, что делает сигналы покупки / продажи более точными и надежными
  2. Линейная регрессия улучшает чувствительность и своевременность сигналов и может быстро улавливать переломные моменты на рынке
  3. Логика стратегии проста и ясна, легко понять и реализовать, подходит для количественной торговли
  4. Существует множество настраиваемых параметров, которые можно гибко регулировать для адаптации к изменениям рынка

Риски и решения

  1. Эта стратегия используется в основном для определения общего дна рынка, не подходит для отдельных запасов
  2. Линейная регрессия не может полностью отфильтровать ложные сигналы.
  3. Необходимость надлежащей корректировки параметров для адаптации к изменениям рынка и избежания сбоев
  4. Рекомендуется комбинировать с другими показателями для дальнейшего подтверждения сигналов.

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

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

Заключение

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


/*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"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("VixFixLinReg-Strategy", shorttitle="VixFixLinReg - Strategy",
                     overlay=false, initial_capital = 100000, 
                     default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, 
                     commission_value = 0.01)
pd = input(22, title="LookBack Period Standard Deviation High")
bbl = input(20, title="Bolinger Band Length")
mult = input(2.0    , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up")
lb = input(50  , title="Look Back Period Percentile High")
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%")
hp = input(false, title="Show High Range - Based on Percentile and LookBack Period?")
sd = input(false, title="Show Standard Deviation Line?")
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true
considerVIXFixClose = input(false)
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

atrLen = input(22)
atrMult = input(5)
initialStopBar = input(5)
waitForCloseBeforeStop = input(true)
f_getStop(atrLen, atrMult)=>
    stop = strategy.position_size > 0 ? close - (atrMult * atr(atrLen)) : lowest(initialStopBar)
    stop := strategy.position_size > 0 ? max(stop,nz(stop[1], stop)) : lowest(initialStopBar)
    stop

wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100

sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev

rangeHigh = (highest(wvf, lb)) * ph
rangeLow = (lowest(wvf, lb)) * pl


col = wvf >= upperBand or wvf >= rangeHigh ? color.lime : color.gray

val = linreg(wvf, pd, 0)
absVal = abs(val)

linRegColor = val>val[1]? (val > 0 ? color.green : color.orange): (val > 0 ? color.lime : color.red)
plot(hp and rangeHigh ? rangeHigh : na, title="Range High Percentile", style=plot.style_line, linewidth=4, color=color.orange)
plot(hp and rangeLow ? rangeLow : na, title="Range High Percentile", style=plot.style_line, linewidth=4, color=color.orange)
plot(wvf, title="Williams Vix Fix", style=plot.style_histogram, linewidth = 4, color=col)
plot(sd and upperBand ? upperBand : na, title="Upper Band", style=plot.style_line, linewidth = 3, color=color.aqua)

plot(-absVal, title="Linear Regression", style=plot.style_histogram, linewidth=4, color=linRegColor)

vixFixState = (col == color.lime) ? 1: 0
vixFixState := strategy.position_size == 0? max(vixFixState, nz(vixFixState[1],0)) : vixFixState

longCondition = (vixFixState == 1 and linRegColor == color.lime) and inDateRange
exitLongCondition = (linRegColor == color.orange or linRegColor == color.red) and considerVIXFixClose

stop = f_getStop(atrLen, atrMult)
label_x = time+(60*60*24*1000*20) 
myLabel = label.new(x=label_x, y=0, text="Stop : "+tostring(stop), xloc=xloc.bar_time, style=label.style_none, textcolor=color.black, size=size.normal)
label.delete(myLabel[1])
strategy.entry("Long", strategy.long, when=longCondition, oca_name="oca_buy")
strategy.close("Long", when=exitLongCondition or (close < stop and waitForCloseBeforeStop and linRegColor == color.green))
strategy.exit("ExitLong", "Long", stop = stop, when=not waitForCloseBeforeStop and linRegColor == color.green)

Больше