Strategie zur Umkehrung des P-Signals

Schriftsteller:ChaoZhang, Datum: 2024-01-29 14:44:56
Tags:

img

Übersicht

Die P-Signal-Umkehrstrategie ist eine quantitative Handelsstrategie, die auf der Grundlage statistischer Parameter und Fehlerfunktionen erstellt wurde, um einen probabilistischen Signalraum zu konstruieren.

Strategieprinzipien

Der Kernindikator dieser Strategie ist das P-Signal, das die statistischen Parameter von gleitenden Durchschnitten und Standardabweichungen kombiniert und durch die Gauss-Fehlerfunktion auf den Bereich von -1 bis 1 abbildet, um einen quantifizierten Urteilsindikator zu bilden.

Strategieparameter sind Kardinalität, ΔErf und Beobachtungszeit. Kardinalität steuert die Stichprobengröße, ΔErf steuert das tote Band der Fehlerfunktion, um die Handelsfrequenz zu reduzieren. Beobachtungszeit steuert die Startzeit der Strategie.

Analyse der Vorteile

Der größte Vorteil der P-Signal-Umkehrstrategie besteht darin, dass sie auf den Wahrscheinlichkeitsverteilungen statistischer Parameter basiert, die die charakteristischen Punkte des Marktes effektiv beurteilen und Umkehrchancen erfassen können.

Darüber hinaus ist das parametrizierte Design der Strategie gut geregelt, so dass die Benutzer den Parameterraum entsprechend ihren eigenen Bedürfnissen anpassen können, um die optimale Kombination zu finden.

Risikoanalyse

Das Hauptrisiko der P-Signal-Umkehrstrategie besteht darin, dass sie sich zu sehr auf die Parameter der Wahrscheinlichkeitsverteilung stützt, die leicht von abnormalen Daten beeinflusst wird, was zu Fehleinschätzungen führt.

Die Erhöhung des Kardinalitätsparameters zur Erhöhung der Stichprobengröße kann die Auswirkungen von Datenanomalien reduzieren.

Optimierungsrichtlinien

Die Strategie zur Umkehrung des P-Signals kann in folgenden Aspekten optimiert werden:

  1. Verwenden Sie andere Indikatoren, um abnormale Anzeichen wie starke Volumenzuwächse auszuschließen.

  2. Validieren Sie Signale über mehrere Zeitrahmen hinweg, um die Stabilität des Urteils zu verbessern.

  3. Steigern Sie die Stop-Loss-Strategien, um Einzelverluste zu reduzieren.

  4. Optimierung der Parameter, um die beste Kombination zu finden und die Rentabilität zu verbessern.

  5. Einbeziehung von maschinellem Lernen für dynamische Parameteranpassung.

Zusammenfassung

Die P-Signal-Umkehrstrategie etabliert einen quantitativen Handelsrahmen auf der Grundlage von Wahrscheinlichkeitsverteilungen mit flexiblen Parameterdesigns und Benutzerfreundlichkeit. Sie beurteilt effektiv die statistischen Merkmale der Märkte und erfasst Umkehrmöglichkeiten. Die Strategie kann durch Multi-Indikator-Validierung, Stop-Loss-Optimierung und andere Mittel die Stabilität und Rentabilität weiter verbessern. Sie bietet ein effizientes und zuverlässiges Paradigma für den algorithmischen Handel mit quantitativen Techniken.


/*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.



Mehr