Dynamische Grid-Trading-Strategie


Erstellungsdatum: 2023-12-01 14:41:57 zuletzt geändert: 2023-12-01 14:41:57
Kopie: 0 Klicks: 1253
1
konzentrieren Sie sich auf
1619
Anhänger

Dynamische Grid-Trading-Strategie

Überblick

Die Dynamische Gitter-Handelsstrategie setzt die Gitter-Handelszone dynamisch durch die Berechnung der Moving Averages und ihrer Auf- und Abfahrten. Wenn der Preis die Gitter-Bereich überschreitet, wird ein Handelssignal nach der festgelegten Gitterlinie ausgesendet, um Gewinne zu erzielen.

Strategieprinzip

Die Strategie berechnet zunächst den Moving Average für die definierte Periode n, sowie den Moving Average auf und ab.(1 + der Eingabeparameter std), wobei der Unterstrahl der Moving Average ist(1 - Eingabe-Parameter std) ◦ So kann ein dynamisch angepasster Transaktionsbereich gebildet werden ◦

Dann definieren wir in der Bandbreite eine Gitterlinie mit einer Abstand von m Strichen. Wenn der Preis steigt und eine bestimmte Gitterlinie durchbricht, wird ein Mehrsignal in dieser Gitterlinie ausgegeben. Wenn der Preis fällt und eine bestimmte Gitterlinie durchbricht, wird ein Flachpositionssignal in der oberen Gitterlinie ausgegeben, die dieser Gitterlinie entspricht.

Konkret werden die Transaktionszustände der einzelnen Gitterlinien mit einem Bool-Array der Order_array aufgezeichnet. Wenn eine der Gitterlinien mehrere Bedingungen auslöst, wird der entsprechende Status in der Order_array als wahr eingestellt, um zu zeigen, dass die Gitterlinie bereits gehalten wird. Wenn der Preis fällt, wird der entsprechende Status der oberen Gitterlinie der Order_array als falsch eingestellt, um ein Gleichstellungssignal zu senden.

Analyse der Stärken

Die Strategie hat folgende Vorteile:

  1. Die Bereiche, in denen der Moving Average eingesetzt wird, können entsprechend der Marktvolatilität angepasst werden, um die Strategie besser an den Markt anzupassen.

  2. Die Grid-Design kann automatisch Stop-Loss-Verfahren durchführen, um zu verhindern, dass die Verluste aus Extremsituationen vergrößert werden.

  3. Die Größen- und Vermögensverteilung des Grids erfolgt in gleicher Abständen und gleichmäßiger Verteilung, wodurch die Größe der einzelnen Positionen gut kontrolliert und das Risiko der einzelnen Positionen verringert wird.

  4. Das Signal für mehrere Positionen ist vernünftig eingestellt, sodass der Handel nach und nach ablaufen kann und der Stop-Loss rechtzeitig eingestellt wird.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Wenn die Märkte langfristig schwach sind und nicht in der Lage sind, die Gitterlinie zu durchbrechen, geraten die Strategien in einen orientierungslosen Schwingungshandel, der zu einem Verlust von Kontomitteln führen kann.

  2. Die gewählten Parameter std und die Anzahl der Grids sind möglicherweise nicht vollständig vernünftig und müssen anhand der Analyse der verschiedenen Transaktionsarten festgelegt werden. Wenn die Parameter falsch eingestellt werden, führt dies dazu, dass der Transaktionsbereich und das Grid zu groß oder zu klein sind, was die Effektivität der Strategie beeinträchtigt.

  3. Die Strategie berücksichtigt nicht einige extreme Situationen, wie z. B. Preissprung, kurze Explosions-Auf- oder Abwärtsbewegungen. Diese Situationen können dazu führen, dass die Strategie mehrere Gitter durchbricht und Verluste verursacht, die über das Risiko hinausgehen.

Optimierungsrichtung

Die Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Die Einführung von Machine-Learning-Algorithmen, die Modelle trainieren können, um den Auf- und Abstieg von Moving Averages vorherzusagen, macht die Handelszone intelligenter und dynamischer.

  2. Anpassungsparameter können verwendet werden, um die Anzahl der Grids, die Kapitalverteilung und die Größe der Positionen zu optimieren.

  3. Es ist möglich, eine bedingte Einzahlung einzurichten, eine zusätzliche Stop-Loss-Einzahlung auf einer bestimmten Grilllinie einzurichten, die als vorherige Stop-Loss fungiert und die Verluste unter Extremsituationen kontrolliert.

  4. Die Ausnahmebehandlung von Extremsituationen, wie z. B. Erhöhung der Position zum ersten Mal, Überspringen des direkten Stopps durch das mittlere Raster, kann mit Ausnahmefällen wie Preissprung konfrontiert werden.

Zusammenfassen

Die Dynamic Grid Trading Strategie ist insgesamt gut konzipiert und bietet die Möglichkeit, ein automatisches Stop-Loss-System mit Hilfe des Grids zu erstellen, das für die Handelsarten geeignet ist, bei denen die Preisschwankungen häufiger auftreten. Die Strategie birgt jedoch auch ein gewisses Marktrisiko und erfordert eine optimierte Behandlung von Parametern und Ausnahmefällen, um die Strategie robuster zu machen.

Strategiequellcode
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
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)    
strategy.initial_capital = 10000
// Entry Conditions
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)