Die Ressourcen sind geladen. Beförderung...

Eine Analyse der quantitativen Handelsstrategie auf Basis der Gauss-Fehlerfunktion

Schriftsteller:ChaoZhang, Datum: 2024-01-19 14:28:03
Tags:

img

Übersicht

Diese Strategie ist eine quantitative Handelsstrategie, die auf dem P-Signal-Indikator basiert, der durch die Gauss-Fehlerfunktion berechnet wird, um Preisveränderungen zu messen.

Strategie Logik

Der Kernindikator dieser Strategie ist P-Signal.

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

Hier stellt ser die Preisreihe dar, int stellt den Parameter nPoints dar, der die Anzahl der zurückblickenden Balken darstellt.

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

Die Bedeutung der gesamten Formel besteht darin, den gleitenden Durchschnitt des Preises durch die Standardabweichung des Preises zu dividieren, dann durch sqrt(2) für die Standardisierung zu dividieren und schließlich durch die Gauss-Fehlerfunktion auf (-1, 1) -Bereich abzubilden. Das heißt, wenn die Preisschwankung größer als der Durchschnitt ist, ist das P-Signal nahe 1; wenn die Preisschwankung kleiner als der Durchschnitt ist, ist das P-Signal nahe -1.

Die Strategie verwendet den Wert des P-Signals und das Zeichen seiner Änderung, um Ein- und Ausgänge zu bestimmen:

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

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

Es geht lang, wenn das P-Signal kleiner als 0 ist und sich auf positiv ändert. Es schließt die Position, wenn das P-Signal größer als 0 ist und sich auf negativ ändert.

Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die Gauss-Fehlerfunktion kann sehr gut in die normale Verteilung passen, was mit den meisten Finanzzeitreiheverteilungen übereinstimmt.
  2. Automatische Anpassung der Parameter durch Standardabweichung des Preises.
  3. P-Signal kombiniert die Vorteile des Trendfolgs und der mittleren Umkehrung. Es berücksichtigt sowohl den Kursschwankungstrend als auch Umkehrpunkte, was hilft, Chancen sowohl beim Trendhandel als auch beim Umkehrhandel zu erfassen.

Risiken

Diese Strategie birgt auch einige Risiken:

  1. Als typische Hochfrequenz-Handelsstrategie kann sie mehr Trades generieren und somit höhere Transaktionskosten und Slippage-Risiken mit sich bringen.
  2. P-Signal kann viele falsche Signale erzeugen, wenn der Preis keinen klaren Trend oder Muster hat.
  3. Schwierige Parameteroptimierung. Komplexe Beziehung zwischen mehreren Parametern macht die Parameteroptimierung schwierig.

Zur Verringerung dieser Risiken können einige Maßnahmen in Betracht gezogen werden: Hinzufügen von Filtern zur Verringerung der Handelsfrequenz; Optimierung der Parameterkombination und Festlegung der Transaktionskosten; Live-Tests und Auswahl geeigneter Produkte.

Erweiterung

Es gibt Raum für weitere Verbesserungen:

  1. Hinzufügen von Filtern, um falsche Signale zu vermeiden, z. B. AND/OR mit anderen Indikatoren, um Lärm zu filtern.
  2. Optimierung der Parameterkombination. Anpassung der Größe von nPoints in verschiedenen Produkten und Zeitrahmen zur Verbesserung der Stabilität.
  3. Die Anpassung der nPoints an die Marktvolatilität kann die Robustheit verbessern.
  4. Einbeziehung von Methoden des maschinellen Lernens, Einsatz von KI-Algorithmen für Parameter, Filter und Produktrechnik.

Schlussfolgerung

Zusammenfassend ist die Kernidee dieser Strategie eine innovative, passende Preisverteilung mit Gauss-Funktion und automatische Anpassung von Parametern. Aber als Hochfrequenz-Handelsstrategie erfordert sie weitere Tests und Optimierungen bei der Risikokontrolle und Parameter-Ausrichtung, bevor sie im Live-Handel stabil profitabel ist, insbesondere als Hochfrequenz-Handelsstrategie.


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

Mehr