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.
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.
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.
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.
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.
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)