
Die P-Signal-Umkehr-Strategie ist eine quantitative Handelsstrategie für probabilische Signalräume, die auf statistischen Parametern und Fehlerfunktionen basiert. Sie erfasst die Handelssignale dynamisch, um die Wendepunkte des Marktes zu erfassen, indem sie die Parameter der Extremwertverteilung einer Reihe von K-Linien verfolgt.
Der Kern der Strategie ist das P-Signal, welches die statistischen Parameter für Moving Averages und Standard Differenzen kombiniert, die durch eine Gauss-Fehlerfunktion zwischen -1 und 1 abgebildet werden, um eine quantitative Urteilsmarke zu bilden. Das P-Signal macht null, wenn es von positiv zu negativ umgekehrt ist, und macht mehr, wenn es von negativ zu positiv umgekehrt ist, um eine Umkehrstrategie zu bilden.
Die Strategieparameter umfassen Cardinality, ΔErf und Beobachtungszeit. Cardinality steuert die Anzahl der Stichproben, ΔErf steuert die Dead Zone der Fehlerfunktion, reduziert die Transaktionsfrequenz.
Der größte Vorteil der P-Signal-Umkehrstrategie besteht darin, dass sie auf der Wahrscheinlichkeitsverteilung der statistischen Parameter basiert, um die Merkmale des Marktes effektiv zu beurteilen und Umkehrmöglichkeiten zu erfassen. Im Vergleich zu einem einzigen technischen Indikator kombiniert sie mehr Marktinformationen, so dass die Beurteilung umfassender und zuverlässiger ist.
Außerdem ist die Strategie parametrisch ausgelegt, so dass der Benutzer den Parameterraum nach seinen Bedürfnissen anpassen kann, um die beste Kombination zu finden. Dies gewährleistet die Anpassungsfähigkeit und Flexibilität der Strategie.
Das Hauptrisiko der P-Signal-Umkehrstrategie besteht darin, dass sie zu sehr auf die Parameter der Wahrscheinlichkeitsverteilung angewiesen ist und leicht von außergewöhnlichen Daten beeinflusst wird. Darüber hinaus ist die Verlustquote der Umkehrstrategie im Allgemeinen niedrig und die Einzelleistung begrenzt.
Die Auswirkung von Datenunregelmäßigkeiten kann durch Erhöhung der Cardinality-Parameter und Erhöhung der Stichprobenmenge verringert werden. Der ΔErf-Bereich kann entsprechend vergrößert und die Handelsfrequenz verringert werden, um das Risiko zu kontrollieren.
Die P-Signal-Umkehrstrategie kann in folgenden Bereichen optimiert werden:
In Kombination mit anderen Indikatoren filtern Sie abweichende Signale, wie z. B. ein Anstieg des Handelsvolumens.
Die Beurteilung wird in mehreren Zeitrahmen überprüft, um die Stabilität der Beurteilung zu erhöhen.
Erhöhung der Stop-Loss-Strategie und Verringerung der Einzelschäden.
Optimierung der Parameter auf der Suche nach der optimalen Kombination, um die Gewinnquote zu erhöhen.
Dynamische Anpassung der Parameter in Kombination mit maschinellem Lernen.
Die P-Signal-Umkehr-Strategie baut auf einer probabilitätsbasierten Verteilung eine Quantifizierungs-Trading-Framework auf, die Parameter sind flexibel und benutzerfreundlich. Sie beurteilt die statistischen Merkmale des Marktes und fängt Umkehrmöglichkeiten ein. Die Strategie kann die Stabilität und Profitabilität durch Multi-Indikator-Verifizierung, Stop-Loss-Optimierung usw. weiter verbessern.
/*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.