
La stratégie de retournement de signal P est une stratégie de négociation quantifiée de signaux spatiaux probabilisés construits sur des paramètres statistiques et des fonctions d’erreur. Elle capte dynamiquement les signaux de négociation pour capturer les points de retournement du marché en suivant les paramètres de la distribution des valeurs extrêmes d’une série de lignes K.
L’indicateur central de la stratégie est le signal P, qui combine les paramètres statistiques des moyennes mobiles et de l’écart-type pour former un indicateur de jugement quantitatif, mappé entre -1 et 1 par la fonction d’erreur de Gauss. Le signal P est négatif lorsqu’il est inversé de positif à négatif, et plus lorsqu’il est inversé de négatif à positif, ce qui forme la logique de la stratégie de renversement.
Les paramètres de stratégie comprennent la cardinalité, ΔErf et le temps d’observation. La cardinalité contrôle le nombre d’échantillons, ΔErf contrôle les zones mortes de la fonction d’erreur, réduit la fréquence des transactions. Le temps d’observation contrôle le début de la stratégie.
Le plus grand avantage de la stratégie de retournement de signal P est qu’elle est basée sur la distribution de probabilité des paramètres statistiques, permettant de juger efficacement les caractéristiques du marché et de capturer les opportunités de retournement. Comparé à un seul indicateur technique, il combine plus d’informations sur le marché, un jugement plus complet et plus fiable.
De plus, la stratégie est conçue pour être paramétrable, ce qui permet à l’utilisateur d’ajuster l’espace paramétrique en fonction de ses besoins pour trouver la meilleure combinaison. Cela garantit l’adaptabilité et la flexibilité de la stratégie.
Le risque principal de la stratégie de réversion du signal P est qu’elle repose trop sur des paramètres de la distribution de probabilité et qu’elle est susceptible de produire des erreurs de jugement sous l’influence de données anormales. De plus, les taux de perte des stratégies de réversion sont généralement faibles et les bénéfices individuels sont limités.
Il est possible de réduire l’impact des anomalies de données en augmentant le nombre d’échantillons en augmentant les paramètres de cardinalité. Augmenter la plage ΔErf de manière appropriée et réduire la fréquence des transactions pour contrôler le risque.
Les stratégies d’inversion du signal P peuvent être optimisées dans les domaines suivants:
Le filtrage des signaux anormaux, combinés à d’autres indicateurs, tels que des caractéristiques telles que l’augmentation du volume des transactions.
La validation des signaux sur plusieurs périodes permet de renforcer la stabilité des jugements.
Augmenter les stratégies de stop loss et réduire les pertes individuelles.
Optimiser les paramètres pour trouver la meilleure combinaison et augmenter le taux de profit.
La modification dynamique des paramètres de jugement associée à l’apprentissage automatique.
La stratégie P-Signal inverse est un cadre de négociation quantifiée avec une distribution de probabilité de repose, une conception de paramètres flexible et conviviale. Elle est efficace pour juger les caractéristiques statistiques du marché et saisir les opportunités de reprise.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// **********************************************************************************************************
// 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 RVS © Kharevsky
// **********************************************************************************************************
strategy('P-Signal Strategy RVS.', precision=3, process_orders_on_close=true, pyramiding=0,
commission_type=strategy.commission.percent,
commission_value=0.2)
// Parameters and const of P-Signal.
nPoints = input.int(title='Cardinality:', defval=4, minval=4, maxval=200, group='Parameters of strategy.')
ndErf = input.float(title='|ΔErf|:', defval=0, minval=0, maxval=1, step=0.01, group='Parameters of strategy.')
tStartDate = input(title='Start date:', defval=timestamp('30 Dec 1957 00:00 +0300'), group='Observation time.')
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
nT = 1.0 / (1.0 + 0.5 * math.abs(x))
nAns = 1.0 - nT * math.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 = ta.stdev(ser, int)
nSma = ta.sma(ser, int)
nStDev > 0 ? fErf(nSma / nStDev / math.sqrt(2)) : math.sign(nSma)
// Data.
float nPSignal = ta.sma(fPSignal(ta.change(ohlc4), nIntr), nIntr)
float ndPSignal = math.sign(nPSignal[0] - nPSignal[1])
bool isStartDate = true
// Reversal Strategy.
strategy.entry('short', strategy.short, when=isStartDate and nPSignal > ndErf and ndPSignal < 0)
strategy.entry('long', strategy.long, when=isStartDate and nPSignal < -ndErf and ndPSignal > 0)
// Plotting.
hline(+1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
plot(nPSignal, color=color.new(color.blue, 0), style=plot.style_line)
// Table of state.
if barstate.isconfirmed
var Table = table.new(position=position.bottom_right, columns=3, rows=1,
frame_color=color.new(color.orange, 70), frame_width=1,
border_color=color.new(color.orange, 70), border_width=1)
table.cell(table_id=Table, column=0, row=0,
text=strategy.position_size > 0 ? 'Long: ' + str.tostring(strategy.position_size) : 'Short: ' + str.tostring(strategy.position_size),
text_color=strategy.position_size > 0 ? color.green : color.red)
table.cell(table_id=Table, column=1, row=0,
text='Net P/L: ' + str.tostring(strategy.netprofit, '#.#'),
text_color=strategy.netprofit > 0 ? color.green : color.red)
table.cell(table_id=Table, column=2, row=0,
text='Open P/L: ' + str.tostring(strategy.openprofit, '#.#'),
text_color=strategy.openprofit > 0 ? color.green : color.red)
// The end.