Quantas Luzes Movendo Média Tracking Tendência Estratégia de otimização

Autora:ChaoZhang, Data: 2024-01-04 15:44:23
Tags:

img

Resumo

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.

Princípio da estratégia

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.

Análise das vantagens

A estratégia combina indicadores estocásticos e OTT para otimizar os seguintes aspectos:

  1. Melhoria da precisão do sinal. juízes estocásticos sobrecompras e sobrevendidas condições, OTT filtra sinais falsos causados por flutuações dos mercados.
  2. Redução da volatilidade da estratégia, limita a perda atual através de paradas dinâmicas, filtrando muitas falhas.
  3. O Stochastic fornece sinais básicos e o OTT acompanha as principais tendências.
  4. Reduz a interferência excessiva do sinal, melhora a qualidade do sinal e reduz os sinais inúteis.
  5. Quantifica as configurações de parada dinâmica, garante qualitativamente a perda atual e reduz ainda mais a volatilidade da estratégia.
  6. O sistema integra indicadores de tendência e sobrecompra/supervenda.

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.

Análise de riscos

  • O âmbito de aplicação desta estratégia é relativamente restrito, sendo principalmente adequado para ações com tendências óbvias, tendo menos impacto em ações com grandes flutuações de preços ou em ações em consolidação lateral.
  • A estratégia não considera os fundamentos das acções e o ambiente macro, por isso há algum ponto cego.
  • Configurações de parâmetros sensíveis: vários parâmetros do Estocástico e do OTT precisam de ajuste profissional, caso contrário, isso afetará a lucratividade da estratégia.
  • As paradas estão muito soltas, levando algumas perdas potenciais que precisam de mais otimização.
  • A Comissão considera que a Comissão não pode, por si só, dar resposta a estas questões, dado que a Comissão não tem qualquer conhecimento da situação actual.

Relativamente aos riscos acima referidos, podem ser tomadas as seguintes medidas para melhorar:

  1. Usar diferentes combinações de parâmetros para diferentes tipos de unidades populacionais.
  2. Aumentar os sinais incorporando fundamentos e notícias.
  3. Otimizar os parâmetros através de testes para encontrar as configurações ideais.
  4. Introduzir paradas em movimento para reduzir ainda mais os riscos.
  5. Modificar as condições de julgamento e utilizar mecanismos de confirmação de sinal mais rigorosos.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Resumo

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())

  
  



Mais.