Quant Lights é uma estratégia combinada usando o indicador estocástico e o indicador OTT. A estratégia usa o indicador estocástico para gerar sinais de compra e venda, e os combina com o indicador OTT para filtrar os sinais, tentando capturar a grande tendência e reduzir o impacto das flutuações do mercado que causam falsos sinais.
A ideia central da estratégia é sobrepor o indicador OTT ao indicador Estocástico para filtragem de sinal. O indicador Estocástico compara o preço com os preços mais altos e mais baixos no período de tempo especificado para julgar se o preço está em uma área extrema. O indicador OTT usa médias móveis e paradas dinâmicas para rastrear tendências.
O código define o alto nível do estocástico em 1080 e o baixo nível em 1020. Quando o valor estocástico está entre eles, é uma área limitada por faixa. Quando o estocástico gera sinais de compra / venda, o código determinará a validade do sinal com base no indicador OTT. Se o preço cruzar acima da linha média OTT, um sinal de compra é emitido. Se o preço cruzar abaixo da linha média OTT, um sinal de venda é emitido.
Esta combinação aproveita o Stochastic para determinar condições de sobrecompra e sobrevenda e gerar sinais de entrada, enquanto o OTT é responsável por rastrear tendências e usar paradas para filtrar sinais falsos causados por flutuações excessivas do mercado, otimizando assim a precisão e a volatilidade do sinal.
A estratégia combina indicadores estocásticos e OTT para otimizar os seguintes aspectos:
Em resumo, ao utilizar a OTT para filtrar os sinais estocásticos, a estratégia melhora efetivamente a qualidade dos sinais e os retornos dos investimentos, reduzindo simultaneamente o número de transações e a volatilidade da estratégia, alcançando o efeito de baixo risco, altos retornos e acompanhamento minucioso das tendências.
Relativamente aos riscos acima referidos, podem ser tomadas as seguintes medidas para melhorar:
A estratégia pode ser ainda melhorada nos seguintes aspectos:
Ajustar as configurações dos parâmetros de acordo com diferentes mercados e tipos de ações. Os valores padrão atuais são universais e podem ser testados separadamente para diferentes ações para encontrar as combinações ideais de parâmetros.
Introduzir mecanismos de take profit e move stop. Atualmente, o uso de paradas fixas dinâmicas é incapaz de rastrear dinamicamente perdas e ganhos. Pode-se testar a introdução de paradas em movimento e tirar lucros para maior controle de risco e lucro.
Otimizar a lógica de julgamento de sinais. A lógica de julgamento atual é relativamente simples, marcando diretamente os sinais de compra e venda quando os preços se quebram ou caem. Mais indicadores e padrões de preço podem ser incorporados para garantir a confiabilidade do sinal.
A estratégia atual processa todos os sinais indiscriminadamente. Indicadores de volume, indicadores de volume de negociação e outras condições de posição aberta podem ser introduzidos, bem como uma certa janela de tempo de sinal para filtrar sinais falsos.
Teste diferentes combinações de indicadores com OTT. Atualmente usando a combinação estocástica e OTT. A eficácia da combinação de outros indicadores, como MACD e RSI com OTT, pode ser testada.
Integrar módulos de gestão de capital e dimensionamento de posição. Atualmente, não existem mecanismos de gestão de capital e controlo de posição, que dependem inteiramente de paradas.
Quant Lights é uma estratégia quantitativa que combina organicamente o indicador estocástico com o indicador OTT. Utiliza os pontos fortes complementares dos dois indicadores para melhorar a precisão do sinal e capturar efetivamente as principais tendências, reduzindo os riscos.
As vantagens da estratégia incluem baixa taxa de erro, sinais claros e baixa volatilidade.
Ao mesmo tempo, ainda há espaço para melhoria nesta estratégia. Através da otimização de parâmetros, melhoria do mecanismo de parada, aprimoramento de sinais e mecanismos de filtragem, etc., a estratégia pode se desenvolver em direção a uma direção mais estável, automatizada e inteligente.
/*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())