Stratégie de trading vectoriel normalisée avec optimisation de la fonction d'activation


Date de création: 2024-01-22 09:02:30 Dernière modification: 2024-01-22 09:02:30
Copier: 0 Nombre de clics: 578
1
Suivre
1617
Abonnés

Stratégie de trading vectoriel normalisée avec optimisation de la fonction d’activation

Aperçu

Cette stratégie est une amélioration de la stratégie de drkhodakarami de vecteur d’uniformisation de l’échelle, principalement en ajoutant une fonction d’activation pour améliorer la performance de la stratégie. La stratégie utilise le décalage de l’axe du temps pour calculer le taux de variation du marché et effectue plus de signaux de compression par le biais d’un jugement de la marge.

Principe de stratégie

  1. Calculer le pourcentage de variation du prix de clôture sur la ligne de temps définie x
  2. Passer x à la fonction d’activation pour obtenir la séquence traitée p
  3. Réglez le seuil de th positif-négatif, en faisant plus lorsque p est en haut de th, et en faisant moins lorsque p est en bas de th
  4. Arrêter le redessiné pour éviter les fausses signaux

Analyse des avantages

  1. Introduction d’une fonction d’activation qui filtre le bruit et améliore la qualité du signal
  2. Logique de placement et d’ouverture de positions pour une négociation automatique
  3. L’ajout d’espace de personnalisation des paramètres pour plus de marchés
  4. La conception visuelle est excellente et reflète intuitivement les signaux de transaction

Analyse des risques

  1. Une mauvaise définition des seuils peut entraîner des opportunités manquées
  2. Une mauvaise sélection de la fonction d’activation peut filtrer les informations du marché
  3. Problème de déformation du signal provoqué par la refonte

La solution est simple:

  1. Ajustez les paramètres de seuil pour trouver la valeur optimale
  2. Essayez différentes fonctions d’activation et trouvez la meilleure
  3. Ajout d’une logique de détection de refonte pour confirmer l’efficacité du signal

Direction d’optimisation

  1. Ajoutez des paramètres de seuil d’adaptation
  2. Optimiser les paramètres de la fonction d’activation
  3. Ajout d’une logique d’arrêt automatique
  4. Combinaison de plus de facteurs de filtrage

Résumer

La stratégie est basée sur drkhodakarami, introduisant des fonctions d’activation pour améliorer les performances, élargissant l’espace d’optimisation des paramètres et mieux s’adapter aux changements du marché. En même temps, la conception visuelle est excellente et reflète intuitivement les opportunités de négociation.

Code source de la stratégie
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: capissimo
strategy("Scaled Normalized Vector Strategy, ver.4", precision=2, overlay=false)
// This is a modification of my Scaled Normalized Vector Strategy  
// original: Drkhodakarami (https://www.tradingview.com/script/Fxv2xFWe-Normalized-Vector-Strategy-By-Drkhodakarami-Opensource/)

price    = input(close,  "Price Data")
tf       = input(18,     "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])
mmx      = input(233,    "Minimax Lookback", options=[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584])
showVol  = input(false,  "Volume")
useold   = input(true,   "Use Old System")
method   = input("Swish", "Activation", options=["Step", "LReLU", "Swish", "None"])

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

getdiff(prc, tf) =>
    prev  = scaleMinimax((useold ? security(syminfo.tickerid, tostring(tf), prc[1], barmerge.gaps_off, barmerge.lookahead_on) 
                                 : security(syminfo.tickerid, tostring(tf), prc[1])), tf, 0, 1)
    curr  = scaleMinimax((useold ? security(syminfo.tickerid, tostring(tf), hlc3, barmerge.gaps_off, barmerge.lookahead_on)  
                                 : security(syminfo.tickerid, tostring(tf), hlc3)), tf, 0, 1)
    (curr/prev) - 1

relu(x) => max(x, 0)
lrelu(x, alpha) => relu(x) - alpha * relu(-x)
step(x) => x >= 0 ? 1 : -1
log2(x) => log(x) / log(2)
sigmoid(x) => 1 / (1 + exp(-x))
swish(x) => x * sigmoid(x)

f(m) => method==m

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
x    = getdiff(prix, tf)
p    = f("Swish") ? swish(x) : f("Step") ? step(x) : f("LReLU") ? lrelu(x, .8) : x
th   = thresh/div
long = crossover(p, th)
short= crossunder(p, -th)

lime  = color.new(color.lime, 10), fuchsia = color.new(color.fuchsia, 10), 
black = color.new(color.black, 100), gray = color.new(color.gray, 50)
bg    = long ? lime : short ? fuchsia : black
cl    = p > th ? color.green : p < -th ? color.red : color.silver

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

strategy.entry("L", true, 1, when=long)
strategy.entry("S", false, 1, when=short)

alertcondition(long, title='Long', message='Long Signal!')
alertcondition(short, 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, mmx, -1, 1), color=color.orange, transp=0)