Dynamische Netzhandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-01 14:41:57
Tags:

img

Übersicht

Die Dynamic Grid Trading Strategie berechnet die gleitende Durchschnittslinie und ihre oberen und unteren Spuren, um den Grid-Trading-Bereich dynamisch zu setzen.

Strategieprinzip

Die Strategie berechnet zunächst die gleitende Durchschnittslinie des definierten Zeitraums n und die oberen und unteren Spuren der gleitenden Durchschnittslinie. Die obere Spur ist die gleitende Durchschnittslinie * (1 + Eingabeparameter std), und die untere Spur ist die gleitende Durchschnittslinie * (1 - Eingabeparameter std). Dies konstruiert eine dynamisch angepasste Handelsbereichszone.

Wenn die Preise steigen und durch eine Gitterlinie durchbrechen, wird an dieser Gitterlinie ein langes Signal ausgegeben; wenn die Preise fallen und eine Gitterlinie durchbrechen, wird an der vorherigen Gitterlinie, die dieser Gitterlinie entspricht, ein Schlusssignal ausgegeben. Durch diese umgekehrte Operation können Gewinne erzielt werden, wenn die Preise schwanken.

Speziell verwenden wir eine bool-Array order_array, um den Handelsstatus jeder Gitterlinie aufzuzeichnen. Wenn eine Gitterlinie eine lange Bedingung auslöst, wird der entsprechende Zustand in order_array auf true gesetzt, was anzeigt, dass die Gitterlinie bereits eine Position hat. Wenn die Preise fallen und die Gitterlinie durchbrechen, wird der Zustand der vorherigen Gitterlinie in order_array auf false gesetzt und ein Schlusssignal ausgegeben.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Verwendung gleitender Durchschnitte zur Erstellung eines dynamisch angepassten Handelsbereichs kann den Bereich anhand der Marktvolatilität anpassen, um die Strategie an den Markt anpassungsfähiger zu machen.

  2. Das Gitterdesign kann automatisch Gewinn und Stop-Loss erzielen, um eine Vergrößerung der Verluste durch extreme Marktbedingungen zu verhindern.

  3. Die Grid-Menge und die Kapitalzuweisung sind gleich weit voneinander entfernt und gleich zugeordnet, wodurch die Größe der einzelnen Positionen gut kontrolliert und das Risiko der einzelnen Positionen verringert werden kann.

  4. Die Einstellungen von Long- und Close-Signalen sind angemessen, um im Trend zu handeln und rechtzeitig Gewinne zu erzielen und Verluste zu stoppen.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Wenn der Markt langfristig schwach ist und die Netzlinien nicht durchbrechen kann, gerät die Strategie in ziellose schwankende Geschäfte, und wechselnde Longs und Shorts können zu einer Kapitaleerosion im Konto führen.

  2. Die ausgewählten Parameter std und die Anzahl der Gitter sind möglicherweise nicht vollständig angemessen und müssen nach Analyse der verschiedenen Handelsvarianten bestimmt werden.

  3. Die Strategie berücksichtigt nicht einige extreme Marktbedingungen, wie z. B. Preislücken, kurzfristige explosive Anstiege oder -rückgänge usw. Diese Bedingungen können dazu führen, dass die Strategie mehrere Netze durchbricht, was zu Verlusten führt, die über die Kontrolle des Risikos hinausgehen.

Optimierungsrichtlinien

Die Strategie kann auch in folgenden Aspekten optimiert werden:

  1. Maschinelle Lernalgorithmen können eingeführt werden, um Modelle zu trainieren, um die oberen und unteren Spuren gleitender Durchschnitte vorherzusagen, wodurch Handelszonen intelligenter und dynamischer werden.

  2. Parameter wie die Anzahl der Netze, die Kapitalzuweisungsquote, die Positionsgröße usw. können anhand anpassungsfähiger Parameter an die Merkmale der verschiedenen Handelsziele angepasst werden.

  3. Bedingte Aufträge können so eingerichtet werden, dass Stop-Loss-Aufträge im Voraus in einem bestimmten Abstand von Netzlinien gesetzt werden, um die Rolle von vorherigen Stop-Loss und Kontrollverlusten in extremen Marktbedingungen zu spielen.

  4. Entwerfen Sie einen Ausnahmebehandlungsmechanismus für extreme Marktbedingungen, wie z. B. Erhöhung der Anfangsposition, Überspringen von Zwischengrid direkt für Stop Loss usw., der mit Situationen wie Preislücken umgehen kann.

Zusammenfassung

Die dynamische Grid-Handelsstrategie ist als Ganzes vernünftig konzipiert. Sie kann ein automatisches Take-Profit-Stop-Loss-System mit Grids konstruieren, das für den Handel mit Varianten mit häufigen Preisschwankungen geeignet ist. Allerdings gibt es in dieser Strategie immer noch bestimmte Marktrisiken. Parameter und außergewöhnliche Situationen müssen optimiert werden, bevor die Strategie robuster wird.


/*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)

Mehr