Stratégie de trading quantitative basée sur la fonction d'erreur gaussienne


Date de création: 2024-01-19 14:28:03 Dernière modification: 2024-01-19 14:28:03
Copier: 1 Nombre de clics: 647
1
Suivre
1617
Abonnés

Stratégie de trading quantitative basée sur la fonction d’erreur gaussienne

Aperçu

Cette stratégie est une stratégie de trading quantitative basée sur la fonction d’erreur de Gauss pour calculer les variations de prix de l’indicateur P-Signal. Elle utilise l’indicateur P-Signal pour déterminer la tendance des prix et les points de basculement, afin de déterminer les moments d’entrée et de sortie.

Principe de stratégie

L’indicateur central de la stratégie est le P-Signal. La formule de calcul du P-Signal est la suivante:

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équence de prix, int représente le paramètre nPoints, c’est-à-dire combien de lignes K. La formule est composée de trois parties:

  1. nStDev est la différence standard entre les prix;
  2. nSma est la moyenne mobile simple des prix;
  3. fErf est la fonction d’erreur de Gauss。

L’ensemble de la formule signifie que la moyenne mobile du prix divisée par la différence standard du prix, puis divisée par sqrt ((2) est normalisée, puis cartographiée par la fonction d’erreur de Gauss dans la plage ((-1, 1) ≠; c’est-à-dire que si la fluctuation des prix est supérieure à la moyenne, le signal P est proche de 1; si la fluctuation des prix est inférieure à la moyenne, le signal P est proche de −1 ≠.

Les stratégies utilisent les valeurs de P-Signal et les symboles qui les modifient pour décider de l’entrée et de la sortie:

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

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

Faire plus quand le P-Signal est inférieur à 0 et positif; faire plus quand le P-Signal est supérieur à 0 et négatif.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. La fonction d’erreur de Gauss s’adapte très bien à la distribution normale, ce qui correspond à la plupart des caractéristiques de la distribution des séquences de temps financières.
  2. Les paramètres sont automatiquement ajustés en fonction de l’écart-type des prix. Cela permet une plus large gamme de paramètres stratégiques et une plus grande sensibilité aux changements du marché.
  3. L’indicateur P-Signal combine les avantages de la tendance et du revers. Il prend en compte à la fois les tendances de fluctuation des prix et les points de revers, ce qui est utile pour capturer les opportunités de trading de tendance et de revers.

Analyse des risques

Cette stratégie comporte aussi des risques, principalement:

  1. La stratégie est typique des stratégies de trading à haute fréquence, qui génèrent plus de transactions et assument des coûts de transaction et des risques de glissement plus élevés.
  2. Les indicateurs P-Signal produisent de nombreux faux signaux dans les marchés où les prix ne sont pas clairement tendance et réguliers.
  3. L’optimisation des paramètres est difficile. Les relations entre plusieurs paramètres de la formule sont complexes, ce qui rend l’optimisation des paramètres plus difficile.

Pour réduire ces risques, on peut envisager d’augmenter les conditions de filtrage, de réduire la fréquence des transactions; d’optimiser la configuration des ensembles de paramètres et des coûts de transaction; d’affiner le disque réel et de choisir la variété appropriée.

Direction d’optimisation

Il y a encore de la place pour optimiser la stratégie, principalement dans les domaines suivants:

  1. Ajouter des conditions de filtrage pour éviter les faux signaux. Par exemple, en combinant avec d’autres indicateurs, faire des conditions AND ou OR pour filtrer une partie du bruit.
  2. Optimiser les combinaisons de paramètres. Ajuster la taille des nPoints selon les variétés et les périodes, améliorer la stabilité de la stratégie.
  3. Prendre en compte les paramètres dynamiques. Laisser les paramètres nPoints s’adapter à la volatilité du marché peut améliorer la robustesse de la stratégie.
  4. Utilisation d’algorithmes d’IA pour optimiser les paramètres, les conditions de filtrage et la sélection multivariée.

Résumer

Dans l’ensemble, la stratégie est novatrice, utilisant la fonction Gauss pour adapter la distribution des prix et ajuster automatiquement la gamme de paramètres. Cependant, en tant que stratégie de trading à haute fréquence, elle nécessite des tests et des optimisations supplémentaires, en particulier en matière de contrôle des risques et d’ajustement des paramètres, pour assurer la stabilité des bénéfices sur le marché réel.

Code source de la stratégie
/*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.