
La stratégie de négociation P-Signal multi-cadres est une stratégie de négociation d’algorithmes de monnaie numérique basée sur des principes statistiques et combinée à une analyse multi-cadres. La stratégie utilise la fonction d’erreur de Gauss et l’indicateur P-Signal pour modéliser la ligne du jour, de la semaine et de la lune de Bitcoin.
L’indicateur central de la stratégie P-Signal est le P-Signal, qui combine les écarts statistiques standard et les moyennes mobiles simples, mappées sur une plage de -1 à 1 par la fonction d’erreur de Gauss, pour détecter si le marché est conforme à la distribution normale. La formule de calcul spécifique est la suivante:
fErf(x) = 1.0 - 1.0/(1.0 + 0.5*abs(x)) * exp(-x*x - 1.26551223 + ...) # 高斯误差函数
fPSignal(ser, n) = fErf((stdev(ser, n) > 0 ? sma(ser, n)/stdev(ser, n)/sqrt(2) : 1)) # P-Signal指标
La stratégie calcule les indicateurs P-Signal sur les périodes de jour, de jour et de lune, en faisant des positions plus élevées et plus faibles lorsque l’indicateur traverse l’axe 0 et en réglant le contrôle de la valve de valeur de l’indicateur pour répéter l’ouverture des positions.
Le plus grand avantage de la stratégie P-Signal est l’utilisation de plusieurs périodes pour améliorer la stabilité de la stratégie. La ligne solaire capture les fluctuations à court terme du marché et la ligne hebdomadaire filtre les ruptures de faux. De plus, l’indicateur P-Signal lui-même a une certaine capacité de prévision qui peut amplifier les fluctuations des tendances.
Comparativement à une seule période, une période pluriannuelle permet d’exploiter les pertes de la ligne du jour lors des retraits, tandis que la fréquence des transactions est réduite en cas de choc en utilisant une période de temps supérieure. Globalement, cette combinaison permet de réduire au maximum les retraits absolus et relatifs tout en garantissant des gains.
Le plus grand risque de la stratégie P-Signal est que l’indicateur lui-même est une boîte noire pour les traders quantifiés. Il est difficile de déterminer la pertinence de l’indicateur pour un marché particulier et de déterminer la portée optimale de ses paramètres. Cela peut entraîner une mauvaise performance de la stratégie en bourse.
En outre, la stratégie elle-même présente certaines limites. Par exemple, l’incapacité de gérer les situations de marché extrêmes, le décalage de l’indicateur comme signal de négociation peut être retardé, etc. Ces problèmes peuvent devenir des risques cachés en temps réel.
Pour résoudre ces problèmes, nous pouvons ajuster les paramètres de l’indicateur, optimiser la méthode de stop-loss, introduire plus d’indicateurs auxiliaires, etc. Mais à condition de vérifier la stabilité de la stratégie dans une zone de retour suffisamment grande.
La stratégie de P-Signal peut être optimisée dans plusieurs domaines:
Remplacez les paramètres de l’indicateur P-Signal: nIntr_D, nIntr_W et nIntr_M pour trouver la combinaison optimale de paramètres
Augmentation de l’arrêt de la perte: suivi de l’arrêt de la perte, de l’arrêt de la perte de temps, de l’arrêt de l’ATR, etc., pour trouver le meilleur arrêt de la perte
Introduction d’indicateurs auxiliaires: stratégies de renforcement de la capacité de jugement sur des situations spécifiques, par exemple l’introduction de tendances de jugement MACD
Optimisation de la gestion des positions: définir des positions dynamiques, optimiser l’efficacité de l’utilisation des fonds
Paramètres d’optimisation de l’apprentissage automatique: recherche de paramètres globaux optimaux à l’aide de réseaux neuronaux et d’algorithmes génétiques
P-Signal est une stratégie de trading à plusieurs temps globalement très prometteuse. Elle combine des principes statistiques et des indicateurs techniques pour améliorer la stabilité en utilisant l’analyse à plusieurs temps. Si nous pouvons résoudre certaines de ses limitations par un grand nombre de rétroactions et d’optimisations, il est tout à fait possible de la transformer en une stratégie de trading de crypto-monnaie algorithmique réellement utilisable.
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 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
// A good strategy should be able to handle backtesting.
// @version=4
// **********************************************************************************************************
strategy("P-Signal Strategy:", precision = 3, pyramiding = 3)
//
// Parameters and const of P-Signal.
//
nPoints_D = input(title = "Number of D Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.")
nPoints_W = input(title = "Number of W Bars", type = input.integer, defval = 4, minval = 4, maxval = 100, group = "Parameters of observation.")
nPoints_M = input(title = "Number of M Bars", type = input.integer, defval = 6, minval = 4, maxval = 100, group = "Parameters of observation.")
int nIntr_D = nPoints_D - 1
int nIntr_W = nPoints_W - 1
int nIntr_M = nPoints_M - 1
bool bDValveOpen = true
bool bWValveOpen = true
bool bMValveOpen = true
//
// 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)
//
// Signals for the strategy.
//
float nPSignal_D = sma(fPSignal(change(ohlc4), nIntr_D), nIntr_D)
float ndPSignal_D = sign(nPSignal_D[0] - nPSignal_D[1])
//
float nPSignal_W = sma(security(syminfo.tickerid, "W",fPSignal(change(ohlc4), nIntr_W)), nIntr_W)
float ndPSignal_W = sign(nPSignal_W[0] - nPSignal_W[1])
//
float nPSignal_M = sma(security(syminfo.tickerid, "M",fPSignal(change(ohlc4), nIntr_M)), nIntr_M)
float ndPSignal_M = sign(nPSignal_M[0] - nPSignal_M[1])
//
// P-Signal 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_D, color = color.blue, style = plot.style_line)
//
// Multi Frame Strategy
// ... Day
if(nPSignal_D < 0 and ndPSignal_D > 0 and bDValveOpen)
strategy.entry("long_D", strategy.long, 1)
bDValveOpen := false
if(nPSignal_D > 0 and ndPSignal_D < 0)
strategy.close("long_D")
bDValveOpen := true
// ... Week
if(nPSignal_W < 0 and ndPSignal_W > 0 and bWValveOpen)
strategy.entry("long_W", strategy.long, 1)
bWValveOpen := false
if(nPSignal_W > 0 and ndPSignal_W < 0)
strategy.close("long_W")
bWValveOpen := true
// ... Month
if(nPSignal_M < 0 and ndPSignal_M > 0 and bMValveOpen)
strategy.entry("long_M", strategy.long, 1)
bMValveOpen := false
if(nPSignal_M > 0 and ndPSignal_M < 0)
strategy.close("long_M")
bMValveOpen := true
// The end.