Estrategia de vector normalizada a escala con la inversión de la media de Karobein

El autor:¿ Qué pasa?, Fecha: 2023-11-03 16:56:13
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el indicador de reversión media de Karobein y el impulso de precios. Utiliza indicadores auxiliares de impulso de precios para el juicio de tendencias y combina el indicador de reversión media de Karobein para una entrada específica. Esta estrategia es adecuada para el comercio a medio y largo plazo.

Principio de la estrategia

En primer lugar, la estrategia calcula la tasa de cambio de precios en diferentes períodos para obtener el indicador de impulso de precios. Cuando el indicador de impulso de precios cruza por encima de la línea de umbral dinámico, se genera una señal larga. Cuando cruza por debajo, se genera una señal corta.

Luego combina el indicador de reversión media de Karobein para determinar el momento específico de entrada. El indicador de reversión media de Karobein se calcula sobre la base de la naturaleza de reversión media de los precios, que puede reflejar la aceleración y el camino de las fluctuaciones de precios.

Cuando el indicador de impulso de precios genera una señal, si el indicador de la reversión media de Karobein está en el área direccional correspondiente, se genera una señal de entrada.

Ventajas

  1. La estrategia tiene en cuenta de manera exhaustiva el impulso de los precios y los factores de reversión promedio, con una fuerte capacidad de juicio de tendencia.

  2. El indicador Karobein Mean Reversion puede localizar con precisión los puntos de inflexión de los precios y mejorar la precisión del tiempo de entrada.

  3. El período de retención se puede controlar libremente mediante ajuste de parámetros, adecuado para diferentes plazos.

  4. El umbral dinámico se puede ajustar en tiempo real para una respuesta adaptativa a los cambios del mercado.

Los riesgos

  1. Como una tendencia que sigue la estrategia, es propenso a quedar atrapado en tendencias de rango.

  2. El indicador Karobein Mean Reversion tiene un cierto retraso, que puede faltar a los puntos de inflexión de los precios.

  3. El parámetro del período de retención debe ser monitoreado para evitar la expansión de las pérdidas por períodos de retención excesivos.

  4. El umbral dinámico debe fijarse adecuadamente y no demasiado ancho, de lo contrario se pueden perder oportunidades de entrada.

Métodos de gestión de riesgos correspondientes:

  1. Los indicadores de evaluación de tendencias pueden utilizarse para predecir los mercados variados y las posiciones de salida a tiempo.

  2. Se seleccionarán retrasos razonables para el indicador de reversión media de Karobein para reducir los retrasos.

  3. Prueba diferentes parámetros de período de retención y elige los adecuados.

  4. Ajustar el rango de umbral dinámico para evitar la falta de entradas.

Direcciones de mejora

  1. Prueba diferentes períodos para el cálculo del impulso del precio para optimizar los parámetros.

  2. Añadir indicadores de volatilidad para detectar mercados variados y establecer el stop loss.

  3. Optimizar los parámetros del indicador de reversión media de Karobein para hacerlo más sensible.

  4. Añadir filtros adicionales como el volumen para mejorar la calidad de la señal.

  5. Utilice algoritmos de aprendizaje automático para optimizar dinámicamente los parámetros.

Conclusión

Esta estrategia utiliza ampliamente el impulso del precio y los factores de reversión media, con fuertes capacidades en el juicio de tendencias y generación de señales. Puede adaptarse a diferentes entornos de mercado a través del ajuste de parámetros. Se pueden hacer optimizaciones adicionales con respecto al momento de entrada y al stop loss para hacer que la estrategia sea más robusta.


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


Más.