Transitive Handelsstrategie auf der Grundlage des Kalman-Filters und der Mittelumkehrung

Schriftsteller:ChaoZhang, Datum: 2023-12-29
Tags:

img

Übersicht

Diese Strategie nutzt die Konzepte des Kalman-Filters und der mittleren Reversion, um abnormale kurzfristige Schwankungen der Aktienkurse zu erfassen und den Richthandel mit Aktien umzusetzen. Die Strategie stellt zunächst ein Preisverhältnismodell zwischen einer Aktie und einem Marktindex her und verwendet dann die Kalman-Filtertechnik, um das Verhältnis vorherzusagen und zu filtern. Handelssignale werden generiert, wenn das Verhältnis von normalen Niveaus abweicht. Darüber hinaus beinhaltet die Strategie auch Volumenfilterung, um falsche Trades zu vermeiden.

Strategieprinzip

Die Kernidee der Strategie besteht darin, ein Preisverhältnismodell zwischen dem Preis der Aktie selbst und dem Preis des Marktindex zu etablieren. Dieses Verhältnis spiegelt das Preisniveau einzelner Aktien im Verhältnis zum Gesamtmarkt wider. Wenn das Verhältnis hoch ist, wird davon ausgegangen, dass die einzelne Aktie überbewertet ist und ein Verkaufssignal generiert wird. Wenn das Verhältnis niedrig ist, wird davon ausgegangen, dass die einzelne Aktie unterbewertet ist und ein Kaufsignal generiert wird.

Um das Verhältnissignal reibungslos zu filtern, verwendet die Strategie den Kalman-Filter-Algorithmus. Der Kalman-Filter gewichtet den tatsächlichen beobachteten Wert des Verhältnisses mit dem vorhergesagten Wert und aktualisiert die Vorhersage des Verhältnisses in Echtzeit. Und berechnet einen reibungslosen Kalman-Filterwert. Handelssignale werden erzeugt, wenn der gefilterte Wert 2 Standardabweichungen über oder unter dem Normalwert liegt.

Darüber hinaus berücksichtigt die Strategie auch Handelsvolumenfaktoren. Echte Handelssignale werden nur generiert, wenn das Handelsvolumen groß ist. Dadurch werden einige falsche Trades vermieden.

Analyse der Vorteile

Der größte Vorteil dieser Strategie ist die effektive Glättung und Vorhersage des Preisverhältnisses mithilfe des Kalman-Filteralgorithmus. Im Vergleich zu einfachen Mittelumkehrmodellen kann der Kalman-Filter die dynamischen Preisänderungen besser widerspiegeln, insbesondere wenn die Preise stark schwanken. Dies ermöglicht es der Strategie, Preisanomalien rechtzeitig zu erkennen und genaue Handelssignale zu generieren.

Zweitens erhöht die Kombination von Handelsvolumen auch die praktische Anwendbarkeit der Strategie.

Insgesamt kombiniert die Strategie erfolgreich Kalman-Filterung, mittlere Reversion, Handelsvolumenanalyse und andere Techniken zu einer robusten quantitativen Handelsstrategie.

Risikoanalyse

Obwohl die Strategie theoretisch und technisch solide ist, bestehen bei der tatsächlichen Anwendung noch einige potenzielle Risiken, die beachtet werden müssen.

Die erste ist das Modellrisiko. Einige wichtige Parameter im Kalman-Filtermodell, wie Prozesslärmvarianz, Beobachtungslärmvarianz usw., müssen auf der Grundlage historischer Daten geschätzt werden. Wenn die Schätzung ungenau ist oder es zu einer großen Veränderung der Marktbedingungen kommt, führt dies zu Abweichungen in der Modellvorhersage.

Der zweite ist das Risiko von Slippage-Kosten. Häufiger Handel wird höhere Slippage-Kosten verursachen, was die Strategierenditen untergräbt. Parameteroptimierung und Transaktionsvolumenfilterung können unnötige Transaktionen bis zu einem gewissen Grad reduzieren.

Wenn der gesamte Markt stark schwankt, wird auch das Preisverhältnis zwischen einzelnen Aktien und dem Markt abnormal sein. Die Strategie wird dann falsche Signale erzeugen. Wir können in Betracht ziehen, einen stabileren Index als Benchmark zu wählen.

Optimierungsrichtlinien

Es besteht Raum für eine weitere Optimierung der Strategie:

  1. Verwenden Sie komplexere Deep-Learning-Modelle, um Preisverhältnisse anzupassen und vorherzusagen. Dies kann die Genauigkeit und Robustheit des Modells verbessern.

  2. Optimieren Sie die Regeln für die Filterung des Handelsvolumens, um dynamischere und intelligentere Schwellenwerte zu erreichen, wodurch die Wahrscheinlichkeit falscher Trades verringert wird.

  3. Verschiedene Marktindizes als Strategie-Benchmarks testen und Indizes mit kleineren und stabileren Schwankungen auswählen, um die Auswirkungen des Systemrisikos zu verringern.

  4. Einbeziehung von Fundamentalanalysen von Aktien, um den Handel mit einigen Aktien mit deutlich verschlechterten Fundamentaldaten zu vermeiden.

  5. Verwenden Sie hochfrequente Intraday-Daten für Strategie-Backtesting und Optimierung. Dies verbessert die tatsächliche Handelsleistung der Strategie.

Schlussfolgerung

Die Strategie erfasst erfolgreich abnormale kurzfristige Kursschwankungen in Aktien mit dem Kalman-Filtermodell. In der Zwischenzeit verbessert die Einführung von Volumensignalen auch die Praktikabilität der Strategie. Obwohl es noch einige Modellrisiken und Marktrisiken gibt, ist dies eine sehr vielversprechende quantitative Handelsstrategie. Es gibt viel Raum für Verbesserungen und Anwendungsmöglichkeiten in der zukünftigen Modell- und Signaloptimierung.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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/
// © xXM3GAXx

//@version=5
strategy("My strategy", overlay=true)

//SPY or QQQ
context = request.security("BTC_USDT:swap", timeframe.period, input(close))
//our stock
particular = input(close)

//ratio
src = ta.roc(particular, 1) / math.abs(ta.roc(context, 1))

//kalman calculation
Sharpness = input.float(1.0)
K = input.float(1.0)


greencolor =  color.lime
redcolor =  color.red

velocity = 0.0
kfilt = 0.0

Distance = src - nz(kfilt[1], src)
Error = nz(kfilt[1], src) + Distance * math.sqrt(Sharpness*K/ 100)
velocity := nz(velocity[1], 0) + Distance*K / 100
kfilt := Error + velocity

//2 std devs up and down
upper = kfilt[1] + 2 * ta.stdev(kfilt, input(20))
lower = kfilt[1] - 2 * ta.stdev(kfilt, input(20))

//plotting for visuals
plot(kfilt, color=velocity > 0 ? greencolor : redcolor, linewidth = 2)
plot(upper)
plot(lower)
//plot(ta.ema(ta.roc(particular, 1)/ta.roc(context, 1), 5), color = #00ffff, linewidth=2)

//volume data
vol = volume
volema = ta.ema(volume, 10)

//buy when ratio too low
longCondition = kfilt<=lower and vol>=volema
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

//sell when ratio too high
shortCondition = kfilt>=upper and vol>=volema
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


Mehr