
Es handelt sich um eine hochentwickelte, dynamische Grid-Strategie zur Quantifizierung von Trends. Die Hauptidee der Strategie besteht darin, mehrere Grid-Linien in einem vordefinierten Preisbereich zu unterteilen und automatisch einen Kauf- oder Verkaufsposten zu erstellen, wenn der Preis die Grid-Linien berührt, um so in einem schwankenden Umfeld zu profitieren. Die Strategie bietet auch die Funktion, die Grid-Linien-Position dynamisch anzupassen, um die Grid-Layout entsprechend der jüngsten Preisentwicklung zu optimieren.
Die Kernprinzipien der Strategie lauten:
Zunächst werden die oberen und unteren Grenzen des Rasters und die Anzahl der Gitterlinien entsprechend den Benutzereinstellungen festgelegt. Die Grenzen können feststehende Werte sein oder automatisch auf Basis der jüngsten Höhen und Tiefen oder eines Moving Averages berechnet werden.
Innerhalb der festgelegten Grenzen werden die Preisspanne in mehrere Gitter unterteilt. Jede Gitterlinie entspricht einem Kauf- oder Verkaufspreis.
Jedes Mal, wenn der Preis die Gitterlinie berührt, überprüft die Strategie, ob bereits Positionen für die entsprechende Gitterlinie gehalten werden. Wenn keine Positionen gekauft werden, werden die Positionen gekauft, wenn keine Positionen gekauft werden, werden die Positionen verkauft.
Die Strategie kann bei Preisschwankungen profitieren, indem sie zu relativ hohen Preisen verkauft und zu niedrigen Preisen gekauft wird.
Wenn der Benutzer die Funktion “Automatische Anpassung der Grenze” aktiviert hat, wird die Position der Gitterlinie angepasst, um das Layout des Gitterplatzes zu optimieren, basierend auf den Höhen und Tiefen der letzten Preise oder dem eingestellten Moving Average.
Durch die oben genannten Prinzipien kann die Strategie automatisch bei Preisschwankungen niedrig kaufen und hoch verkaufen und die Vorteile entsprechend der Tendenz anpassen, um die Gesamterträge zu erhöhen.
Die Dynamic Grid Strategy hat folgende Vorteile:
Anpassungsfähig. Die Anpassungsfähigkeit an Erschütterungen ist sehr gut. Die Anpassungsfähigkeit an Erschütterungen kann durch die Einstellung von Parametern an verschiedene Märkte und Sorten angepasst werden.
Hohe Automatisierung. Da die Strategie auf strenger mathematischer Logik basiert und der Standort für die Ein- und Auslagerung eindeutig festgelegt ist, kann ein vollständig automatisierter Handel realisiert werden, wodurch die Störung durch subjektive Emotionen verringert wird.
Risikokontrolle. Durch die Einstellung von Parametern wie Anzahl der Grids, Grid-Grenzen, kann die Risikolock für jeden Handel effektiv kontrolliert werden, wodurch das Gesamtrisiko in einem akzeptablen Bereich gehalten wird.
Trendadaptivität. Die Strategie enthält die Funktion, die Grenzen des Rasters dynamisch anzupassen, so dass das Raster den Preistrends folgen und optimiert werden kann, was die Profitabilität unter trendigen Bedingungen erhöht.
Da die Grid-Trading-Strategie von Natur aus in Preisschwankungen häufig hoch und niedrig ist, kann die Strategie dauerhaft profitabel sein, solange die Preisschwankungen bestehen, und hat daher eine hohe Gewinnrate auf lange Sicht.
Obwohl die Vorteile der Strategie klar sind, gibt es auch Risiken:
Trendrisiko: Wenn ein starker einseitiger Trend durch die Gittergrenze führt, ist der Gewinnraum für diese Strategie begrenzt und es kann zu einem größeren Rückzug kommen.
Die Strategie hat viele Parameter, einschließlich der Anzahl der Gitter, der anfänglichen Grenze, der dynamischen Grenzparameter usw. Die unterschiedlichen Parameterkombinationen haben einen großen Einfluss auf die Strategieleistung, und die tatsächliche Optimierung ist schwierig.
Die Grid-Strategie ist im Wesentlichen eine Hochfrequenz-Strategie, die sehr häufig platziert wird, was zu höheren Handelskosten und einem potenziellen Risiko für Ausrutscher führt.
Die Strategie ist stark von schwankenden Verhaltensweisen abhängig, und es ist wahrscheinlich, dass die Strategie bei einem schnellen einseitigen Trend einen größeren Rückschlag erleidet.
Um diese Risiken abzuwenden, können Verbesserungen in folgenden Bereichen vorgenommen werden: Hinzufügung von Trend-Bestimmungskennzahlen als Filterbedingungen für die Strategie-Einleitung, Optimierung des Parameter-Suchraums und der Methoden, Einführung von Geldmanagement- und Positionskontrolllogiken, Erhöhung der Trend-Breakout-Logik usw. Durch diese Optimierungen kann die Stabilität und Profitabilität der Strategie weiter verbessert werden.
Auf der Grundlage der oben erwähnten Analysen sind die wichtigsten Optimierungsmöglichkeiten für die Strategie:
Einführung von Trendfilterbedingungen. Vor dem Start der Strategie sollten Trendmessgrößen wie Moving Averages, ADX usw. hinzugefügt werden. Die Strategie sollte nur bei einem Schock starten, während bei einem Trend die Wartezeit eingehalten wird, um das Risiko eines Rückzugs bei einem Trend zu vermeiden.
Optimierung der Parametersuche. Die Optimierung der Grid-Parameter durch intelligente Algorithmen wie genetische Algorithmen, Partikelgruppen-Algorithmen usw. führt automatisch zur Suche nach der optimalen Parameterkombination und erhöht die Effizienz und Qualität der Optimierung.
Erhöhung der Risikomanagement-Logik. Die Strategie umfasst mehr Risikomanagement-Logik, wie z. B. die dynamische Anpassung der Gitterbreite an die Preisfluktuation, die Einstellung des Maximal-Rücknahme-Schwellenwertes für die Auslösung von Pläne, um das Risiko besser zu kontrollieren.
Einführung von Trendstopps. Setzen Sie einen Trend, der die Stop-Line überschreitet, in einem bestimmten Prozentsatz an der Grid-Grenze. Sobald der Preis die Stop-Line überschreitet, ist die Position vollständig platziert, um einen massiven Rückschlag unter den Trendbedingungen zu vermeiden.
Optimierung der Transaktionsdurchführung. Optimierung der Transaktionsdurchführung, z. B. durch die Verwendung von fortgeschrittenen Auflagen- und Auftragsalgorithmen, um die Frequenz und die Kosten der Transaktionen zu reduzieren und die Effizienz der Ausführung zu verbessern.
Durch diese Optimierungen kann die Anpassungsfähigkeit, Stabilität und Profitabilität der Strategie verbessert werden, um sie näher an die Bedürfnisse der lokalen Bevölkerung zu bringen.
Insgesamt ist die dynamische Grid-Trend-Tracking-Strategie eine mittel- und hochfrequente Handelsstrategie, die auf dem Grid-Handelsprinzip basiert und gleichzeitig eine Dynamik-Anpassung und Trend-Anpassungsmechanismen integriert. Ihre Vorteile liegen in der starken Anpassungsfähigkeit, hohen Automatisierungsgrad, Risikokontrolle, guten Trend-Anpassungsfähigkeit, Gewinnrate Stabilität usw. Gleichzeitig bestehen jedoch auch starke Risiken wie Trendrisiken, Schwierigkeiten bei der Optimierung der Parameter, häufiger Handel und Abhängigkeit von den Verhaltensbedingungen.
Die Grid-Trading-Strategie selbst ist eine relativ ausgereifte und praktische Methode der Quantifizierung, die die Vorteile des klassischen Grid-Tradings durch die dynamische Optimierung der Strategie und die Hinzufügung von Trendadaptionsmechanismen erweitert und entwickelt. Sie bietet Investoren eine neue Art von Quantifizierungs-Trading-Strategie und -möglichkeiten bei turbulenten Verhältnissen. Mit weiteren Optimierungen und Verbesserungen ist die Strategie in Aussicht, ein hervorragendes Mittel- und Hochfrequenz-Quantifizierungs-Trading-Instrument zu werden.
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool) // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"]) // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average
i_boundLookback = input(group="Grid Bounds", title="(Auto) Bound Lookback", defval=250, type=input.integer, maxval=500, minval=0) // when calculating auto grid bounds, how far back should we look for a High & Low, or what should the length be of our sma
i_boundDev = input(group="Grid Bounds", title="(Auto) Bound Deviation", defval=0.10, type=input.float, maxval=1, minval=-1) // if sourcing auto bounds from High & Low, this percentage will (positive) widen or (negative) narrow the bound limits. If sourcing from Average, this is the deviation (up and down) from the sma, and CANNOT be negative.
i_upperBound = input(group="Grid Bounds", title="(Manual) Upper Boundry", defval=0.285, type=input.float) // for manual grid bounds only. The upperbound price of your grid
i_lowerBound = input(group="Grid Bounds", title="(Manual) Lower Boundry", defval=0.225, type=input.float) // for manual grid bounds only. The lowerbound price of your grid.
i_gridQty = input(group="Grid Lines", title="Grid Line Quantity", defval=8, maxval=15, minval=3, type=input.integer) // how many grid lines are in your grid
f_getGridBounds(_bs, _bl, _bd, _up) =>
if _bs == "Hi & Low"
_up ? highest(close, _bl) * (1 + _bd) : lowest(close, _bl) * (1 - _bd)
else
avg = sma(close, _bl)
_up ? avg * (1 + _bd) : avg * (1 - _bd)
f_buildGrid(_lb, _gw, _gq) =>
gridArr = array.new_float(0)
for i=0 to _gq-1
array.push(gridArr, _lb+(_gw*i))
gridArr
f_getNearGridLines(_gridArr, _price) =>
arr = array.new_int(3)
for i = 0 to array.size(_gridArr)-1
if array.get(_gridArr, i) > _price
array.set(arr, 0, i == array.size(_gridArr)-1 ? i : i+1)
array.set(arr, 1, i == 0 ? i : i-1)
break
arr
var upperBound = i_autoBounds ? f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, true) : i_upperBound // upperbound of our grid
var lowerBound = i_autoBounds ? f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, false) : i_lowerBound // lowerbound of our grid
var gridWidth = (upperBound - lowerBound)/(i_gridQty-1) // space between lines in our grid
var gridLineArr = f_buildGrid(lowerBound, gridWidth, i_gridQty) // an array of prices that correspond to our grid lines
var orderArr = array.new_bool(i_gridQty, false) // a boolean array that indicates if there is an open order corresponding to each grid line
var closeLineArr = f_getNearGridLines(gridLineArr, close) // for plotting purposes - an array of 2 indices that correspond to grid lines near price
var nearTopGridLine = array.get(closeLineArr, 0) // for plotting purposes - the index (in our grid line array) of the closest grid line above current price
var nearBotGridLine = array.get(closeLineArr, 1) // for plotting purposes - the index (in our grid line array) of the closest grid line below current price
strategy.initial_capital = 50000
for i = 0 to (array.size(gridLineArr) - 1)
if close < array.get(gridLineArr, i) and not array.get(orderArr, i) and i < (array.size(gridLineArr) - 1)
buyId = i
array.set(orderArr, buyId, true)
strategy.entry(id=tostring(buyId), long=true, qty=(strategy.initial_capital/(i_gridQty-1))/close, comment="#"+tostring(buyId))
if close > array.get(gridLineArr, i) and i != 0
if array.get(orderArr, i-1)
sellId = i-1
array.set(orderArr, sellId, false)
strategy.close(id=tostring(sellId), comment="#"+tostring(sellId))
if i_autoBounds
upperBound := f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, true)
lowerBound := f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, false)
gridWidth := (upperBound - lowerBound)/(i_gridQty-1)
gridLineArr := f_buildGrid(lowerBound, gridWidth, i_gridQty)
closeLineArr := f_getNearGridLines(gridLineArr, close)
nearTopGridLine := array.get(closeLineArr, 0)
nearBotGridLine := array.get(closeLineArr, 1)