Hochleistungs-algorithmische Handelsstrategie auf der Grundlage quantitativer Modelle

Schriftsteller:ChaoZhang, Datum: 2023-12-22 13:14:33
Tags:

img

Übersicht

Diese Strategie ist eine leistungsstarke algorithmische Handelsstrategie, die auf quantitativen Modellen basiert. Sie verwendet das Modelius Volume-Modell als Basismodell und erweitert und optimiert es weiter. Diese Strategie kann quantitative Handelsmöglichkeiten auf dem Markt erfassen und stetige Gewinne erzielen.

Strategieprinzip

Der Kern dieser Strategie ist das Modelius-Volumenmodell. Dieses Modell identifiziert quantitative Handelschancen auf dem Markt, indem Preis- und Volumenänderungen erkannt werden. Insbesondere kombiniert die Strategie den Schlusskurs, den Offenkurs, den höchsten Preis, den niedrigsten Preis, um die Richtung der aktuellen K-Linie auf der Grundlage bestimmter Regeln zu berechnen. Wenn sich die Richtung der K-Linie ändert, wird die Qualität der quantitativen Handelsmöglichkeit basierend auf dem Handelsvolumen beurteilt. Darüber hinaus kombiniert die Strategie auch den SAR-Indikator und den gleitenden Durchschnittsindikator, um den Ein- und Ausstiegszeitpunkt zu bestimmen.

Die grundlegende Handelslogik besteht darin, lang zu gehen, wenn der Indikator von negativ zu positiv durchbricht, und kurz zu gehen, wenn der Indikator von positiv zu negativ durchbricht.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass das Modelius-Volumenmodell quantitative Handelschancen effektiv identifizieren kann. Im Vergleich zu traditionellen technischen Indikatoren legt dieses Modell mehr Wert auf Volumenänderungen, was im heutigen hochfrequenten quantitativen Handel sehr praktisch ist. Darüber hinaus sind die Einstiegsregeln der Strategie relativ streng, was quantitative Handelschancen effektiv vermeiden und gleichzeitig die Wahrscheinlichkeit von Störungen so weit wie möglich reduzieren kann.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass das Modelius-Volumenmodell selbst nicht vollständig Lärm vermeiden kann. Wenn es zu abnormalen Marktschwankungen kommt, führt dies zu falschen Handelssignalen. Darüber hinaus beeinflussen die Parameter-Einstellungen in der Strategie auch die Endergebnisse.

Um Risiken zu kontrollieren, können die Parameter entsprechend angepasst und mit anderen Indikatoren für Hilfsbeurteilungen kombiniert werden.

Optimierungsrichtlinien

Es gibt immer noch Raum für die Optimierung dieser Strategie. Zum Beispiel können Algorithmen des maschinellen Lernens in Betracht gezogen werden, um die Parameter-Einstellungen dynamisch zu optimieren. Oder Kombination von Sentiment-Analyse und anderen Indikatoren zur Verbesserung der Entscheidungsgenauigkeit. Darüber hinaus kann die Korrelation zwischen verschiedenen Sorten untersucht werden, um ein Multi-Variety-Arbitrage-Modell zu etablieren.

Zusammenfassung

Zusammenfassend lässt sich sagen, dass diese Strategie die Vorteile des quantitativen Modells von Modelius Volume nutzt und eine Reihe von algorithmischen Handelsstrategien mit hoher Funktionsfähigkeit entwirft.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=3
strategy(title="strategy modelius volume model ", shorttitle="mvm",overlay=true, calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating=input(defval=true, type=bool, title="Oscillating")
normalize=input(defval=false, type=bool, title="Normalize")
vol = useTrueRange == "Always" or (useTrueRange == "Auto" and na(volume))? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close/methodvalue

currclose = na
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = na
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol/barcount : vol


x=isOscillating and directionIsDown ? -res : res

TP = input(0) * 10
SL = input(0) * 10
TS = input(1) * 10
TO = input(3) * 10
CQ = 100

TPP = (TP > 0) ? TP : na
SLP = (SL > 0) ? SL : na
TSP = (TS > 0) ? TS : na
TOP = (TO > 0) ? TO : na

longCondition = crossover(x,0)
if (longCondition)
    strategy.entry("Long", strategy.long)


shortCondition = crossunder(x,0)
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("Close Short", "Short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)
strategy.exit("Close Long", "Long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)

Mehr