Une analyse de la stratégie de négociation quantitative basée sur la fonction d'erreur gaussienne

Auteur:ChaoZhang est là., Date: 2024-01-19 14h28:03
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de trading quantitative basée sur l'indicateur P-Signal calculé par la fonction d'erreur de Gauss pour mesurer les variations de prix.

La logique de la stratégie

L'indicateur de base de cette stratégie est le signal P. La formule de calcul du signal P est:

fPSignal(ser, int) =>
    nStDev = stdev(ser, int) 
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)

Ici, ser représente la série de prix, int représente le paramètre nPoints, qui est le nombre de barres à regarder en arrière.

  1. nStDev est l'écart type du prix;
  2. nSma est la moyenne mobile simple du prix;
  3. fErf est la fonction d'erreur gaussienne.

La signification de toute la formule est de prendre la moyenne mobile du prix divisé par l'écart type du prix, puis divisé par sqrt (((2) pour la normalisation, et finalement mappé à (-1, 1) gamme par la fonction d'erreur de Gauss.

La stratégie utilise la valeur du signal P et le signe de son changement pour déterminer les entrées et les sorties:

strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)

strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)  

Il va long lorsque le signal P est inférieur à 0 et change à positif. Il ferme la position lorsque le signal P est supérieur à 0 et change à négatif.

Les avantages

Les avantages de cette stratégie sont les suivants:

  1. Utiliser la fonction d'erreur de Gauss pour s'adapter à la distribution des prix.
  2. Adaptation automatique des paramètres par déviation type du prix, ce qui rend la stratégie plus robuste dans différentes conditions de marché.
  3. Le P-Signal combine les avantages du suivi de tendance et de la réversion moyenne. Il prend en compte à la fois la tendance de fluctuation des prix et les points d'inversion, ce qui aide à saisir les opportunités dans le trading de tendance et le trading d'inversion.

Les risques

Cette stratégie comporte également certains risques:

  1. Risque de négociation à haute fréquence. En tant que stratégie de négociation typique à haute fréquence, elle peut générer plus de transactions, entraînant ainsi des coûts de transaction et des risques de glissement plus élevés.
  2. P-Signal peut produire de nombreux faux signaux lorsque le prix n'a pas de tendance ou de modèle clair.
  3. L'optimisation des paramètres est difficile. La relation complexe entre plusieurs paramètres rend l'optimisation des paramètres difficile.

Pour réduire ces risques, certaines mesures peuvent être prises en considération: l'ajout de filtres pour réduire la fréquence des échanges; l'optimisation de la combinaison de paramètres et la fixation des coûts de transaction; les tests en direct et le choix des produits appropriés.

Amélioration

Il y a encore des possibilités d'amélioration:

  1. Ajout de filtres pour éviter les faux signaux, par exemple ET/OU avec d'autres indicateurs pour filtrer un certain bruit.
  2. Optimisation de la combinaison de paramètres. Ajustement de la taille des nPoints sur différents produits et délais pour améliorer la stabilité.
  3. En tenant compte des paramètres dynamiques, l'ajustement adaptatif des nPoints en fonction de la volatilité du marché peut améliorer la robustesse.
  4. Incorporer des méthodes d'apprentissage automatique, en utilisant des algorithmes d'IA sur les paramètres, les filtres et l'optimisation du temps entre les produits.

Conclusion

En conclusion, l'idée de base de cette stratégie est innovante, adaptant la distribution des prix avec la fonction de Gauss et ajustant automatiquement les paramètres. Mais en tant que stratégie de trading haute fréquence, elle nécessite des tests et une optimisation supplémentaires sur le contrôle des risques et l'ajustement des paramètres avant une rentabilité stable dans le trading en direct, en particulier en tant que stratégie de trading haute fréquence.


/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// **********************************************************************************************************
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// P-Signal Strategy © Kharevsky
// @version=4
// **********************************************************************************************************
strategy("P-Signal Strategy", precision = 3)
// Parameters and const of P-Signal.
nPoints = input(title = "Number of Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.")
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0/(1.0 + 0.5*abs(x))
    nAns = 1.0 - nT*exp(-x*x - 1.26551223 + 
     nT*( 1.00002368 + nT*( 0.37409196 + nT*( 0.09678418 + 
     nT*(-0.18628806 + nT*( 0.27886807 + nT*(-1.13520398 + 
     nT*( 1.48851587 + nT*(-0.82215223 + nT*( 0.17087277 ))))))))))
    x >= 0 ? nAns : -nAns
fPSignal(ser, int) => 
    nStDev = stdev(ser, int)
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)
// Strat.
float nPSignal = sma(fPSignal(change(ohlc4), nIntr), nIntr)
float ndPSignal = sign(nPSignal[0] - nPSignal[1])
strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)
strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)
// Plotting. 
hline(+1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
hline(-1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
plot(nPSignal, color = color.blue, style = plot.style_line)
plot(strategy.position_size, color = color.white, style = plot.style_cross)
// Alerts.
if(strategy.position_size[0] > strategy.position_size[1])
    alert("P-Signal strategy opened the long position: " + syminfo.tickerid + " " + timeframe.period, alert.freq_once_per_bar)
if(strategy.position_size[0] < strategy.position_size[1])
    alert("P-Signal strategy closed the long position: " + syminfo.tickerid + " " + timeframe.period, alert.freq_once_per_bar)
// The end.

Plus de