Estrategia de pesca de fondo de regresión lineal de Vix Fix

El autor:¿ Qué pasa?, Fecha: 2024-01-30 16:56:39
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es combinar el indicador Vix Fix y su regresión lineal para capturar con precisión los fondos del mercado.

Estrategia lógica

  1. Calcular el indicador Vix Fix, que es bueno para juzgar los fondos del mercado
  2. Cuando el histograma de regresión lineal se vuelve verde, significa que la regresión lineal de Vix Fix comienza a aumentar, una señal de compra puede activarse
  3. Combinar con las columnas verdes del indicador Vix Fix para confirmar aún más el momento de las entradas
  4. Cuando el color del histograma de regresión lineal se vuelve rojo, significa que la regresión lineal Vix Fix comienza a disminuir, se activa una señal de venta

El proceso anterior utiliza la regresión lineal para mejorar la precisión y la puntualidad de las señales de Vix Fix, filtrando algunas señales falsas y capturando así con precisión los fondos.

Análisis de ventajas

  1. La estrategia utiliza la regresión lineal para filtrar algunas señales falsas del indicador Vix Fix, haciendo que las señales de compra / venta sean más precisas y confiables
  2. La regresión lineal mejora la sensibilidad y la puntualidad de las señales y puede capturar rápidamente los puntos de inflexión del mercado
  3. La lógica de la estrategia es simple y clara, fácil de entender e implementar, adecuada para el comercio cuantitativo
  4. Hay muchos parámetros configurables que se pueden ajustar de manera flexible para adaptarse a los cambios del mercado

Riesgos y soluciones

  1. Esta estrategia se utiliza principalmente para determinar el fondo general del mercado, no es adecuada para existencias individuales
  2. La regresión lineal no puede filtrar completamente las señales falsas.
  3. Necesidad de ajustar adecuadamente los parámetros para adaptarse a los cambios del mercado y evitar fallos
  4. Se recomienda combinar con otros indicadores para confirmar aún más las señales

Direcciones de optimización

  1. Considere combinar con indicadores de volatilidad o de volumen en el balance para filtrar aún más las señales
  2. Estudiar métodos de optimización adaptativa de parámetros para hacer más inteligente la estrategia
  3. Explorar métodos de aprendizaje automático para predecir las tendencias de Vix Fix con modelos más complejos
  4. Trate de aplicar métodos similares a las existencias individuales para estudiar cómo filtrar las señales falsas

Conclusión

Esta estrategia utiliza el indicador Vix Fix para juzgar los mínimos, al tiempo que introduce una regresión lineal para mejorar la calidad de la señal, capturando así efectivamente los mínimos del mercado. La estrategia es simple, práctica y produce resultados decentes. El principal riesgo radica en las señales falsas que no se filtran por completo. Todavía necesitamos optimizar la configuración de los parámetros y considerar la introducción de otros medios para confirmar aún más las señales para hacer la estrategia más robusta. En general, esta estrategia proporciona una nueva forma efectiva de determinar los mínimos del mercado, y vale la pena una mayor investigación.


/*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)

Más.