Stratégie vectorielle normalisée à l'échelle avec inversion moyenne de Karobein

Auteur:ChaoZhang est là., Date: 2023-11-03 16h56 et 13h
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indicateur Karobein Mean Reversion et la dynamique des prix. Elle utilise des indicateurs auxiliaires de la dynamique des prix pour le jugement de la tendance et combine l'indicateur Karobein Mean Reversion pour une entrée spécifique.

Principe de stratégie

Premièrement, la stratégie calcule le taux de variation des prix à différentes périodes pour obtenir l'indicateur de dynamique des prix.

L'indicateur est calculé en fonction de la nature moyenne de la réversion des prix, qui peut refléter l'accélération et la trajectoire des fluctuations des prix.

Lorsque l'indicateur de dynamique des prix génère un signal, si l'indicateur de réversion moyenne de Karobein se trouve dans la zone directionnelle correspondante, un signal d'entrée est généré.

Les avantages

  1. La stratégie prend en considération de manière exhaustive la dynamique des prix et les facteurs de renversement moyens, avec une forte capacité de jugement des tendances.

  2. L'indicateur Karobein Mean Reversion peut localiser avec précision les points de basculement des prix et améliorer la précision des temps d'entrée.

  3. La période de conservation peut être librement réglée par réglage de paramètres, adaptée à différents délais.

  4. Le seuil dynamique peut être ajusté en temps réel pour une réponse adaptative aux changements du marché.

Les risques

  1. En tant que tendance suivant la stratégie, il est enclin à être pris au piège dans les tendances liées à la plage.

  2. L'indicateur Karobein Mean Reversion présente un certain décalage, qui peut manquer les points de basculement des prix.

  3. Le paramètre de la période de détention devrait être surveillé afin d'éviter une expansion des pertes résultant de périodes de détention excessives.

  4. Le seuil dynamique devrait être fixé de manière appropriée et non trop large, sinon les opportunités d'entrée pourraient être manquées.

Les méthodes de gestion des risques correspondantes:

  1. Les indicateurs de jugement des tendances peuvent être utilisés pour prévoir les marchés variés et les positions de sortie dans le temps.

  2. Choisir des délais raisonnables pour l'indicateur d'inversion de la moyenne de Karobein afin de réduire les délais.

  3. Testez différents paramètres de la période de conservation et choisissez ceux qui conviennent.

  4. Ajustez la plage de seuil dynamique pour éviter les entrées manquantes.

Directions de renforcement

  1. Testez différentes périodes pour le calcul de l'élan des prix afin d'optimiser les paramètres.

  2. Ajoutez des indicateurs de volatilité pour détecter les marchés en évolution et définir un stop loss.

  3. Optimiser les paramètres de l'indicateur d'inversion de la moyenne de Karobein pour le rendre plus sensible.

  4. Ajoutez des filtres supplémentaires comme le volume pour améliorer la qualité du signal.

  5. Utiliser des algorithmes d'apprentissage automatique pour optimiser dynamiquement les paramètres.

Conclusion

Cette stratégie utilise de manière complète l'élan des prix et les facteurs de renversement moyens, avec de fortes capacités de jugement des tendances et de génération de signaux. Elle peut s'adapter à différents environnements de marché grâce à l'ajustement des paramètres. D'autres optimisations peuvent être effectuées en ce qui concerne le moment d'entrée et le stop loss pour rendre la stratégie plus robuste.


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


Plus de