Estratégia de vetor normalizada em escala com reversão da média de Karobein

Autora:ChaoZhang, Data: 2023-11-03 16:56:13
Tags:

img

Resumo

Esta estratégia baseia-se no indicador de reversão média de Karobein e no ímpeto de preço. Ele usa indicadores auxiliares de ímpeto de preço para julgamento da tendência e combina o indicador de reversão média de Karobein para entrada específica. Esta estratégia é adequada para negociação de médio e longo prazo.

Princípio da estratégia

Em primeiro lugar, a estratégia calcula a taxa de mudança dos preços em diferentes períodos para obter o indicador de momento do preço. Quando o indicador de momento do preço cruza acima da linha de limiar dinâmico, um sinal longo é gerado. Quando cruza abaixo, um sinal curto é gerado.

O indicador de reversão média de Karobein é calculado com base na natureza média de reversão dos preços, que pode refletir a aceleração e o caminho das flutuações de preços.

Quando o indicador de momento do preço gera um sinal, se o indicador de Reversão Mean Karobein estiver na área direcional correspondente, um sinal de entrada é gerado.

Vantagens

  1. A estratégia considera de forma abrangente a dinâmica dos preços e os fatores de reversão média, com uma forte capacidade de julgamento da tendência.

  2. O indicador Karobein Mean Reversion pode localizar com precisão os pontos de virada dos preços e melhorar a precisão do tempo de entrada.

  3. O período de retenção pode ser controlado livremente por ajuste de parâmetros, adequado para diferentes prazos.

  4. O limiar dinâmico pode ser ajustado em tempo real para dar resposta adaptativa às alterações do mercado.

Riscos

  1. Como uma tendência que segue uma estratégia, é propenso a ser preso em tendências de gama.

  2. O indicador Karobein Mean Reversion tem um certo atraso, que pode perder os pontos de virada dos preços.

  3. O parâmetro do período de detenção deve ser monitorizado para evitar a expansão das perdas decorrentes de períodos de detenção excessivos.

  4. O limiar dinâmico deve ser estabelecido de forma adequada e não demasiado amplo, caso contrário, poderão perder-se oportunidades de entrada.

Métodos de gestão de riscos correspondentes:

  1. Os indicadores de avaliação da tendência podem ser utilizados para prever mercados variáveis e posições de saída no tempo.

  2. Escolher atrasos razoáveis para o indicador de reversão média de Karobein para reduzir os atrasos.

  3. Teste diferentes parâmetros de período de retenção e escolha os adequados.

  4. Ajustar o intervalo de limiar dinâmico para evitar a ausência de entradas.

Orientações para a melhoria

  1. Teste diferentes períodos para o cálculo do momento do preço para otimizar os parâmetros.

  2. Adicionar indicadores de volatilidade para detectar mercados variáveis e definir stop loss.

  3. Otimizar os parâmetros do indicador de reversão da média de Karobein para torná-lo mais sensível.

  4. Adicionar filtros adicionais como volume para melhorar a qualidade do sinal.

  5. Usar algoritmos de aprendizagem de máquina para otimizar dinamicamente parâmetros.

Conclusão

Esta estratégia utiliza de forma abrangente o impulso do preço e os fatores de reversão média, com fortes capacidades em julgamento de tendências e geração de sinais. Pode se adaptar a diferentes ambientes de mercado através do ajuste de parâmetros. Podem ser feitas melhorias adicionais em relação ao tempo de entrada e stop loss para tornar a estratégia mais robusta. Esta estratégia merece mais pesquisa e aplicação.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: capissimo
strategy("Normalized Vector Strategy, ver.3 (sc)", precision=2, overlay=false)
// This is a scaled Normalized Vector Strategy with a Karobein Oscillator
// original: Drkhodakarami (https://www.tradingview.com/script/Fxv2xFWe-Normalized-Vector-Strategy-By-Drkhodakarami-Opensource/)

// Repainting: in general there two types of repainting:
// * when the last candle is constantly being redrawn
// * when the indicator draws a different configuration after it has been deactivated/reactivated, i.e. refreshed

// The former is a natural behaviour, which presents a constant source of frustration, 
// when a signal directly depends on the current market situation and can be overcome 
// with various indirect techniques like divergence.

// The latter suggests a flaw in the indicator design.
// Unfortunately, the Normalized Vector Strategy is repainting in the latter sense, although being
// really promising. Would be nice if our community suggests a solution to this problem ))

// This strat consistently performs with high accuracy, showing up to 96% scores
// Here are some of the best parameters:
// TF     Lookback   Performance (ca.)
// 1m     13         92%
// 3m     34         92%
// 5m     85         92%
// 15m    210        90%
// 30m    360        89%
// 1H     1440,720   94%, 87%

// The Karobein Oscillator has an intrinsic sinusoidal behaviour that helps in determining direction and timing.
// It does not repaint.
// original: alexgrover (https://www.tradingview.com/script/JiNi0f62-Karobein-Oscillator/)

scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

price    = input(close,  "Price Data")
tf       = input(34,     "Timeframe", minval=1, maxval=1440)
thresh   = input(14.,    "Threshold", minval=.1, step=.1) 
div      = input(1000000,"Divisor", options=[1,10,100,1000,10000,100000,1000000,10000000,100000000])
showVol  = input(false,  "Volume")
useold   = input(true,   "Use Old System")

lime  = color.new(color.lime, 10), fuchsia = color.new(color.fuchsia, 10), 
black = color.new(color.black, 100), gray = color.new(color.gray, 50)

vol  = useold ? security(syminfo.tickerid, tostring(tf), volume, barmerge.gaps_off, barmerge.lookahead_on) 
              : security(syminfo.tickerid, tostring(tf), volume)
obv  = cum(change(price) > 0 ? vol : change(price) < 0 ? -vol : 0*vol)
prix = showVol ? obv : price
    
getdiff(prc, tf) =>
    prev  = useold ? security(syminfo.tickerid, tostring(tf), prc[1], barmerge.gaps_off, barmerge.lookahead_on) :
                     security(syminfo.tickerid, tostring(tf), prc[1])
    curr  = useold ? security(syminfo.tickerid, tostring(tf), prc, barmerge.gaps_off, barmerge.lookahead_on) : 
                     security(syminfo.tickerid, tostring(tf), prc)
    (curr/prev) - 1
    
p  = getdiff(prix, tf)
up = thresh/div, dn = -thresh/div
longCondition  = crossover(p, up)
shortCondition = crossunder(p, dn)

bg = longCondition ? lime : shortCondition ? fuchsia : black
cl = p > up ? color.green : p < dn ? color.red : color.silver

bgcolor(bg, editable=false)
plot(scaleMinimax(up, 2500, -1, 1), color=lime, editable=false, transp=0)
hline(0, linestyle=hline.style_dotted, title="base line", color=gray, editable=false)
plot(scaleMinimax(dn, 2500, -1, 1), color=fuchsia, editable=false, transp=0)
plot(scaleMinimax(p, 2500, -1, 1), color=cl, style=plot.style_histogram, transp=70, editable=false)
plot(scaleMinimax(p, 2500, -1, 1), color=cl, style=plot.style_linebr, title="prediction", transp=0, editable=false)

strategy.entry("L", true, 1, when=longCondition)
strategy.entry("S", false, 1, when=shortCondition)

alertcondition(longCondition, title='Long', message='Long Signal!')
alertcondition(shortCondition, title='Short', message='Short Signal!')

//*** Karobein Oscillator
per  = input(8, "Karobein Osc Lookback")

prix2  = ema(price, per)
a = ema(prix2 < prix2[1] ? prix2/prix2[1] : 0, per)
b = ema(prix2 > prix2[1] ? prix2/prix2[1] : 0, per)
c = (prix2/prix2[1])/(prix2/prix2[1] + b)
d = 2*((prix2/prix2[1])/(prix2/prix2[1] + c*a)) - 1

plot(scaleMinimax(d, 2500, -1, 1), color=color.orange, transp=0)


Mais.