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.
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.
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 de cette stratégie sont les suivants:
Cette stratégie comporte également certains risques:
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.
Il y a encore des possibilités d'amélioration:
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.