Quantitative Handelsstrategie basierend auf der Gaußschen Fehlerfunktion


Erstellungsdatum: 2024-01-19 14:28:03 zuletzt geändert: 2024-01-19 14:28:03
Kopie: 1 Klicks: 647
1
konzentrieren Sie sich auf
1617
Anhänger

Quantitative Handelsstrategie basierend auf der Gaußschen Fehlerfunktion

Überblick

Die Strategie ist eine quantitative Trading-Strategie, die P-Signal-Indikatoren für die Berechnung von Preisänderungen basierend auf der Gauss-Fehlerfunktion verwendet. Sie verwendet P-Signal-Indikatoren, um Preistrends und Wendepunkte zu ermitteln und so die Ein- und Ausstiegszeiten zu bestimmen.

Strategieprinzip

Das Kernindikator der Strategie ist das P-Signal. Die Berechnungsformel für das P-Signal lautet wie folgt:

fPSignal(ser, int) => 
    nStDev = stdev(ser, int)
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)

Die Formel besteht aus drei Teilen:

  1. nStDev ist die Standarddifferenz des Preises;
  2. nSma ist der einfache gleitende Durchschnitt der Preise.
  3. fErf ist die Gauss-Fehlerfunktion。

Die gesamte Formel bedeutet, dass der Moving Average der Preise durch die Standarddifferenz der Preise geteilt wird, dann durch sqrt ((2) standardisiert und dann durch die Gauss-Fehlerfunktion auf den Bereich ((-1, 1) abgebildet wird. Das heißt, wenn die Preisschwankungen größer als der Durchschnitt sind, ist das P-Signal nahe bei 1; wenn die Preisschwankungen kleiner als der Durchschnitt sind, ist das P-Signal nahe bei −1.

Die Strategie nutzt die P-Signal-Werte und ihre wechselnden Symbole, um Ein- und Ausstieg zu bestimmen:

strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)  

strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)

Wenn das P-Signal kleiner als 0 ist und sich positiv verändert, dann ist das Plus; wenn das P-Signal größer als 0 ist und sich negativ verändert, dann ist das Negativ.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die Gauss-Fehlerfunktion passt gut zur Normalverteilung, was den meisten Verteilungsmerkmalen der Finanzzeitreihen entspricht.
  2. Die Parameter werden automatisch an die Standarddifferenz des Preises angepasst. Dies erlaubt eine größere Bandbreite an Strategieparametern und eine größere Flexibilität gegenüber Marktveränderungen.
  3. Der P-Signal-Indikator kombiniert die Vorzüge von Trend und ReversalTrade. Es berücksichtigt sowohl die Tendenz der Preisschwankungen als auch die Reversalpunkte, was hilfreich ist, um Trend- und Reversal-Handelschancen zu erfassen.

Risikoanalyse

Die Strategie birgt auch einige Risiken, die sich in folgenden Punkten widerspiegeln:

  1. Die Strategie ist typisch für Hochfrequenz-Handelsstrategien, die mehr Transaktionen erzeugen und höhere Transaktionskosten und Slippage-Risiken mit sich bringen.
  2. Der P-Signal-Indikator erzeugt eine große Menge falscher Signale in Märkten, in denen die Preise nicht eindeutig trendiert und regelmäßig sind.
  3. Parameteroptimierung ist schwierig. Die Beziehungen zwischen mehreren Parametern in der Formel sind komplex, was die Parameteroptimierung schwieriger macht.

Um diese Risiken zu verringern, kann man überlegen, die Filterbedingungen zu erhöhen und die Handelsfrequenz zu reduzieren; Optimierung der Parameterpalette und der Handelskosten-Einstellung; Festplatten-Gehärte, die Wahl der richtigen Sorten.

Optimierungsrichtung

Die Strategie bietet Raum für weitere Optimierungen, insbesondere in folgenden Bereichen:

  1. Filterbedingungen hinzufügen, um falsche Signale zu vermeiden. Zum Beispiel, wenn andere Indikatoren kombiniert werden, werden die AND- oder OR-Bedingungen verwendet, um einen Teil der Noise zu filtern.
  2. Optimierung der Parameterkombination. Anpassung der Größe von nPoints in verschiedenen Sorten und Perioden zur Verbesserung der Strategie-Stabilität.
  3. Berücksichtigen Sie die dynamischen Parameter. Lassen Sie die nPoints-Parameter an die Marktschwankungen angepasst werden, was die Robustheit der Strategie verbessern kann.
  4. Mit Hilfe von KI-Algorithmen optimiert man Parameter, Filterbedingungen und die Auswahl von mehreren Sorten.

Zusammenfassen

Insgesamt ist die Kernidee der Strategie neu, indem die Gauss-Funktion zur Anpassung der Preisverteilung verwendet wird, um die Parameterklasse automatisch anzupassen. Als Hochfrequenz-Handelsstrategie erfordert es jedoch weitere Tests und Optimierungen, insbesondere in Bezug auf Risikokontrolle und Parameteranpassung, um die Gewinne im realen Markt zu stabilisieren.

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