
Überblick
Die Strategie basiert auf der Berechnung eines einfachen gleitenden Durchschnitts des Preises (SMA) als zentrale Linie der Markttrends, und setzt dann einen bestimmten Prozentsatz der Gitterlinie unter der zentralen Linie. Wenn der Preis zwischen diesen Gitterlinien schwankt, kauft die Strategie ein, wenn der Preis die unteren Gitterlinien berührt, und verkauft, wenn er die oberen Gitterlinien berührt. Diese Handelsmethode ist besonders geeignet für die Verwendung in einem Marktumfeld, in dem die Preise schwanken, aber die Gesamtheit um die Gitterlinie schwankt.
Strategieprinzip
Die Kernprinzipien der QT-Strategie basieren auf der Mittelwert-Rückgangseigenschaft des Marktpreises. Die Strategie wird durch folgende Schritte umgesetzt:
- Der Code verwendet einen 300-Stunden-Moving Average, der lange genug ist, um kurzfristige Schwankungen zu filtern.
- Auf der Grundlage eines gleitenden Durchschnitts wird eine Auf- und Abweichungsrate (in diesem Fall 3%) festgelegt, um die oberen und unteren Grenzen des Gitterhandels zu bestimmen.
- Grilllinien, die gleichmäßig zwischen den oberen und unteren Grenzen verteilt sind, je nach Anzahl der vom Benutzer eingestellten Grilllinien (maximal 15).
- Die Verwendung eines Boolean-Arrays, um die Position jedes Gitterplatzes aufzuzeichnen, um die genaue Ausführung des Handels zu gewährleisten.
- Transaktionslogik:
- Wenn der Preis unter einer bestimmten Gitterlinie liegt und die Position nicht gehalten wird, wird in dieser Gitterposition gekauft.
- Wenn der Preis höher ist als eine bestimmte Gitterlinie und die nächste niedrigere Gitterposition bereits gehalten wird, wird die Position der niedrigeren Position platziert.
Das Wesen der Strategie besteht darin, hohe Preisschwankungen innerhalb eines bestimmten Bereichs zu erfassen, um “Low-Buy-High-Sell” zu erreichen. Die Strategie erlaubt es, mehrere Positionen gleichzeitig zu halten (bis zu 15), wobei jeder Position einer anderen Gitterlinie entspricht. Diese Konstruktion ermöglicht es der Strategie, die Preisschwankungen besser zu nutzen.
Strategische Vorteile
Die Adaptive Linear Grid Quantitative Trading Strategie hat folgende wesentliche Vorteile:
- AnpassungsfähigkeitDie Strategie basiert auf einem beweglichen Durchschnitt, der die Position des Rasters automatisch anpasst, um sich an unterschiedliche Marktbedingungen und Änderungen des Preisniveaus anzupassen.
- GefährdungsunterschiedeDas Unternehmen hat die Möglichkeit, die Risiken von Einzelgeschäften zu reduzieren, indem es die Transaktionen an mehreren Gitterpositionen verteilt.
- Häufige GewinnchancenIn einem unsicheren Markt kann die Strategie die Gelegenheit nutzen, von kleinen Schwankungen profitieren zu können.
- Klares Ein- und AusgangssignalDie Handelssignale basieren auf eindeutigen Preis-Touch-Gitter-Linien-Bedingungen, reduzieren subjektive Urteile und verbessern die Konsistenz der Strategie-Ausführung.
- Parameter sind einfach zu ändernDie Strategie erfordert nur die Anpassung der drei Hauptparameter für die Länge des gleitenden Durchschnitts, die Gridverzerrung und die Anzahl der Gitter, um Optimierung und Rückmessung zu ermöglichen.
- Klarheit der LogikDie Verwendung einer Array-Struktur zum Speichern von Grid-Preisen und Auftragszuständen, eine klare Code-Logik, die leicht zu verstehen und zu pflegen ist.
- Visuelle UnterstützungStrategie: Die Strategie bietet eine visuelle Darstellung der Gitterlinie, die es dem Händler ermöglicht, die Handelsbereiche und potenziellen Handelsplätze visuell zu beobachten.
Strategisches Risiko
Obwohl die Strategie so konzipiert ist, gibt es folgende potenzielle Risiken:
- TrendmarktrisikenIn einem stark trendigen Markt können die Preise in eine Richtung weitergehen, was dazu führt, dass die Strategie auf einer Seite weiterhin Positionen eröffnet und keine Positionsmöglichkeiten hat, was zu einer erhöhten Kapitalbesetzung und möglicherweise zu größeren Verlusten führt. Die Lösung besteht darin, die Trendfilterbedingungen zu erhöhen oder eine maximale Positionsbeschränkung festzulegen.
- ParameterempfindlichkeitDie Einstellungen für die Länge der beweglichen Mittelwerte und die Grid-Abweichung haben einen großen Einfluss auf die Strategie-Performance. Unpassende Parameter können dazu führen, dass das Grid zu breit wird (niedrige Transaktionsfrequenz) oder zu eng (höhere Falschsignale). Es wird empfohlen, die optimale Kombination der Parameter durch ausreichende Rückmessung zu bestimmen.
- VermögensverwaltungsrisikenDie Strategie erlaubt bis zu 15 gleichzeitige Positionen. Unzulässige Kontrolle des Kapitalanteils pro Transaktion kann zu einer Überkonzentration der Mittel führen. Die Positionsgröße pro Transaktion sollte entweder als festes Kapitalanteil oder als dynamisch angepasst werden.
- Einfluss von Schlupfpunkten und GebührenHigh-frequency-trading-Strategien sind empfindlicher auf Gleitpunkte und Gebühren, insbesondere wenn das Netz eng ist. Es wird empfohlen, diese Kostenfaktoren in der Rückmessung zu berücksichtigen und die Netzbreite entsprechend anzupassen.
- LiquiditätsrisikenDie Strategie wird beeinflusst, wenn in einem Markt mit geringer Liquidität oder in Zeiten starker Schwankungen die Ausführung von Geschäften zu idealen Preisen schwierig ist. Die Auswahl von Handelsarten mit ausreichender Liquidität sollte berücksichtigt werden, und es sollte in Erwägung gezogen werden, einen Schlupfpunkt zu schützen.
Richtung der Strategieoptimierung
Basierend auf der Analyse des Codes kann die Strategie in folgenden Richtungen optimiert werden:
- Trendfilter hinzufügenIn Kombination mit anderen technischen Indikatoren (z. B. MACD, RSI oder DMI), um Markttrends zu beurteilen, Pause oder Anpassung der Grid-Trading-Strategie in einem offensichtlichen Trendmarkt, um Verluste durch Gegenhandel zu vermeiden.
- Dynamische GitterbreiteDie Grid-Spalten werden bei steigender Volatilität erweitert und bei sinkender Volatilität verkleinert, um sich besser an unterschiedliche Marktbedingungen anzupassen.
- Einführung eines Stop-Loss-MechanismusEs ist möglich, dynamische Stopps oder Fixed-Ratio-Stopps auf Basis von ATR zu berücksichtigen.
- Optimierung der KapitalverwaltungUm die Effizienz der Kapitalnutzung und die Fähigkeit zur Risikokontrolle zu verbessern.
- Filterzeit erhöhenAnalyse der Markteigenschaften in unterschiedlichen Zeiträumen, Aktivierung von Strategien in geeigneten Zeitabschnitten, Verringerung der Handelsfrequenz oder Aussetzung von Geschäften in ungeeigneten Zeitabschnitten.
- Bestätigung mehrerer ZeiträumeEs ist wichtig zu wissen, dass die Anzahl der Transaktionen, die mit der Bestätigung von Transaktionen in Verbindung gebracht werden, in kürzeren und längeren Zeiträumen reduziert wird, um falsche Signale und ungültige Transaktionen zu reduzieren.
- Codeeffizienz optimierenDie Gridline-Visualisierung des aktuellen Codes verwendet wiederholte Plot-Aussagen, die mit Loop-Struktur-Optimierung zur Verbesserung der Code-Komplexität und -Wartbarkeit verwendet werden können.
Zusammenfassen
Die Adaptive Grid Quantitative Trading Strategie ist ein Grid Trading System, das auf der Regression der Mittelwertprinzip basiert und die Handelschancen durch die Einstellung des Grids um den Moving Average erfasst. Die Strategie ist schlicht, hat weniger Parameter und ist leicht anpassbar und eignet sich besonders für Anwendungen in turbulenten Märkten. Die Hauptvorteile der Strategie liegen in ihrer Adaptivität und Risikodistributionsfähigkeit, die sich automatisch an unterschiedliche Preisniveaus anpasst und das Risiko über mehrere Gridpositionen verteilt.
Die Strategie kann jedoch in stark trendigen Märkten mit Risiken konfrontiert sein, die durch die Erhöhung der Trendfilterung und der Stop-Loss-Mechanismen optimiert werden müssen. Darüber hinaus sind Optimierungsrichtungen wie die dynamische Anpassung der Gitterbreite, die Verbesserung der Kapitalverwaltung und die Erhöhung der Bestätigung mehrerer Zeitzyklen erforschenswert. Durch diese Optimierungen wird die Strategie in verschiedenen Marktumgebungen zu stabileren und besseren Leistungen führen.
Für erfahrene Quantitative Trader bietet diese Strategie einen guten Rahmen, der weiter angepasst und optimiert werden kann, je nach individuellen Handelsstilen und Risikopräferenzen, um die Vorteile von Grid Trading bei der Erfassung von Marktfluktuationen zu nutzen.
Strategiequellcode
/*backtest
start: 2025-04-01 00:00:00
end: 2025-06-22 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy('Grid Trading Strategy', overlay=true, pyramiding=15)
// 输入参数设置
ma_length = input.int(300, '移动平均线长度', group='移动平均线条件', step=10)
std = input.float(0.03, title='网格上下偏差率', group='网格条件', step=0.01)
grid = input.int(15, maxval=15, title='网格线数量', group='网格条件')
// 计算移动平均线及网格边界
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
// 创建网格价格数组
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
array.push(grid_array, lower_bound + grid_width * i)
// 创建订单状态布尔数组(只初始化一次)
var order_array = array.new_bool(grid, false)
// 执行交易逻辑
for i = 0 to grid - 1 by 1
// 买入逻辑:价格低于网格线且该位置未持仓
if close < array.get(grid_array, i) and not array.get(order_array, i)
buy_id = i
array.set(order_array, buy_id, true)
strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
// 卖出逻辑:价格高于网格线且下一个网格位置持仓
if close > array.get(grid_array, i) and i != 0
if array.get(order_array, i - 1)
sell_id = i - 1
array.set(order_array, sell_id, false)
strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))
// 可视化网格线
plot(grid > 0 ? array.get(grid_array, 0) : na, color=color.yellow, transp=10)
plot(grid > 1 ? array.get(grid_array, 1) : na, color=color.yellow, transp=10)
plot(grid > 2 ? array.get(grid_array, 2) : na, color=color.yellow, transp=10)
plot(grid > 3 ? array.get(grid_array, 3) : na, color=color.yellow, transp=10)
plot(grid > 4 ? array.get(grid_array, 4) : na, color=color.yellow, transp=10)
plot(grid > 5 ? array.get(grid_array, 5) : na, color=color.yellow, transp=10)
plot(grid > 6 ? array.get(grid_array, 6) : na, color=color.yellow, transp=10)
plot(grid > 7 ? array.get(grid_array, 7) : na, color=color.yellow, transp=10)
plot(grid > 8 ? array.get(grid_array, 8) : na, color=color.yellow, transp=10)
plot(grid > 9 ? array.get(grid_array, 9) : na, color=color.yellow, transp=10)
plot(grid > 10 ? array.get(grid_array, 10) : na, color=color.yellow, transp=10)
plot(grid > 11 ? array.get(grid_array, 11) : na, color=color.yellow, transp=10)
plot(grid > 12 ? array.get(grid_array, 12) : na, color=color.yellow, transp=10)
plot(grid > 13 ? array.get(grid_array, 13) : na, color=color.yellow, transp=10)
plot(grid > 14 ? array.get(grid_array, 14) : na, color=color.yellow, transp=10)