Quant Lights es una estrategia combinada que utiliza el indicador estocástico y el indicador OTT. La estrategia utiliza el indicador estocástico para generar señales de compra y venta, y las combina con el indicador OTT para filtrar las señales, tratando de capturar la gran tendencia y reducir el impacto de las fluctuaciones del mercado que causan señales falsas.
La idea central de la estrategia es superponer el indicador OTT sobre el indicador estocástico para filtrar la señal. El indicador estocástico compara el precio con los precios más altos y más bajos en el período de tiempo especificado para juzgar si el precio está en un área extrema.
El código establece el nivel más alto del estocástico en 1080 y el nivel más bajo en 1020. Cuando el valor estocástico está entre ellos, es un área limitada por el rango. Cuando el estocástico genera señales de compra / venta, el código determinará la validez de la señal en función del indicador OTT. Si el precio cruza por encima de la línea promedio OTT, se emite una señal de compra. Si el precio cruza por debajo de la línea promedio OTT, se emite una señal de venta.
Esta combinación aprovecha el Estocástico para determinar las condiciones de sobrecompra y sobreventa y generar señales de entrada, mientras que el OTT es responsable de rastrear las tendencias y utilizar paradas para filtrar las señales falsas causadas por fluctuaciones excesivas del mercado, optimizando así la precisión y la volatilidad de la señal.
La estrategia combina indicadores estocásticos y OTT para optimizar los siguientes aspectos:
En resumen, al utilizar OTT para filtrar las señales estocásticas, la estrategia mejora efectivamente la calidad de las señales y los rendimientos de la inversión, al tiempo que reduce el número de transacciones y la volatilidad de la estrategia, logrando el efecto de bajo riesgo, altos rendimientos y un seguimiento cercano de las tendencias.
Con respecto a los riesgos anteriores, se pueden adoptar las siguientes medidas para mejorar:
La estrategia se puede optimizar aún más en los siguientes aspectos:
Ajustar la configuración de parámetros de acuerdo con los diferentes mercados y tipos de acciones. Los valores por defecto actuales son universales y pueden ser probados por separado para diferentes acciones para encontrar las combinaciones óptimas de parámetros.
Introducir mecanismos de toma de ganancias y movimiento de paradas. Actualmente, el uso de paradas fijas dinámicas no puede rastrear dinámicamente las pérdidas y ganancias. Se puede realizar una prueba de la introducción de paradas móviles y tomar ganancias para un mayor control de riesgos y ganancias.
Optimizar la lógica de juicio de señales. La lógica de juicio actual es relativamente simple, marcando directamente las señales de compra y venta cuando los precios se rompen o bajan. Se pueden incorporar más indicadores y patrones de precios para garantizar la confiabilidad de la señal.
Aumentar las condiciones de posición abierta y los mecanismos de filtrado. La estrategia actual procesa cada señal indiscriminadamente. Se pueden introducir indicadores de volumen, indicadores de volumen de negociación y otras condiciones de posición abierta, así como una cierta ventana de tiempo de señal para filtrar señales falsas.
Prueba diferentes combinaciones de indicadores con OTT. Actualmente se utiliza la combinación estocástica y OTT. Se puede probar la efectividad de combinar otros indicadores como MACD y RSI con OTT.
Integrar módulos de gestión de capital y dimensionamiento de posiciones. Actualmente no existen mecanismos de gestión de capital y control de posiciones, que dependen enteramente de paradas. Se pueden probar diferentes tipos de métodos de gestión de capital y dimensionamiento de posiciones para controlar aún más los riesgos individuales y generales.
Quant Lights es una estrategia cuantitativa que combina orgánicamente el indicador estocástico con el indicador OTT. Utiliza las fortalezas complementarias de los dos indicadores para mejorar la precisión de la señal y capturar de manera efectiva las tendencias principales al tiempo que reduce los riesgos.
Las ventajas de la estrategia incluyen una baja tasa de error, señales claras y una pequeña volatilidad.
Al mismo tiempo, todavía hay margen de mejora en esta estrategia. A través de la optimización de parámetros, la mejora del mecanismo de parada, la mejora de señales y mecanismos de filtrado, etc., la estrategia puede desarrollarse hacia una dirección más estable, automatizada e inteligente. Este es también el objetivo de nuestro trabajo de seguimiento.
/*backtest start: 2023-12-27 00:00:00 end: 2024-01-03 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © KivancOzbilgic //created by: @Anil_Ozeksi //developer: ANIL ÖZEKŞİ //author: @kivancozbilgic strategy(title="Stochastic Optimized Trend Tracker", shorttitle="SOTT", format=format.price, precision=2) periodK = input(250, title="%K Length", minval=1) smoothK = input(50, title="%K Smoothing", minval=1) src1 = input(close, title="Source") length=input(3, "OTT Period", minval=1) percent=input(0.618, "OTT Percent", type=input.float, step=0.1, minval=0) showsupport = input(title="Show Support Line?", type=input.bool, defval=false) showsignalsc = input(title="Show Stochastic/OTT Crossing Signals?", type=input.bool, defval=false) Var_Func1(src1,length)=> valpha1=2/(length+1) vud11=src1>src1[1] ? src1-src1[1] : 0 vdd11=src1<src1[1] ? src1[1]-src1 : 0 vUD1=sum(vud11,9) vDD1=sum(vdd11,9) vCMO1=nz((vUD1-vDD1)/(vUD1+vDD1)) VAR1=0.0 VAR1:=nz(valpha1*abs(vCMO1)*src1)+(1-valpha1*abs(vCMO1))*nz(VAR1[1]) VAR1=Var_Func1(src1,length) k = Var_Func1(stoch(close, high, low, periodK), smoothK) src=k+1000 Var_Func(src,length)=> valpha=2/(length+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=sum(vud1,9) vDD=sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) VAR=0.0 VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) VAR=Var_Func(src,length) h0 = hline(1080, "Upper Band", color=#606060) h1 = hline(1020, "Lower Band", color=#606060) fill(h0, h1, color=#9915FF, transp=80, title="Background") plot(k+1000, title="%K", color=#0094FF) MAvg=Var_Func(src, length) fark=MAvg*percent*0.01 longStop = MAvg - fark longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = MAvg + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir MT = dir==1 ? longStop: shortStop OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line") OTTC = #B800D9 pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0) alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!") alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!") alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!") buySignalc = crossover(src, OTT[2]) plotshape(buySignalc and showsignalsc ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) sellSignallc = crossunder(src, OTT[2]) plotshape(sellSignallc and showsignalsc ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) dummy0 = input(true, title = "=Backtest 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 = 2005, title = "From Year", minval = 2005) 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 = 9999, title = "To Year", minval = 2006) Start = timestamp(FromYear, FromMonth, FromDay, 00, 00) Finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) Timerange() => time >= Start and time <= Finish ? true : false if buySignalc strategy.entry("Long", strategy.long,when=Timerange()) if sellSignallc strategy.entry("Short", strategy.short,when=Timerange())