Strategie für den Ausbruch des Preiskanals

Schriftsteller:ChaoZhang, Datum: 2024-01-16 14:22:57
Tags:

img

Diese Strategie wird Price Channel Breakout Strategy genannt. Ihre Hauptidee besteht darin, den Preiskanal zu verwenden, um Markttrend und -richtung zu bestimmen und Positionen zu etablieren, wenn der Preis aus dem Kanal bricht. Erst wird der Preiskanalbereich gezogen, dann wird beurteilt, ob es zwei aufeinanderfolgende rote oder grüne K-Linien gibt. Wenn die letzte K-Linie durch die Hälfte der Kanalbreite bricht und außerhalb des Kanals schließt, generiert sie Kauf- oder Verkaufssignale.

Strategie Logik

Die Strategie berechnet den höchsten Höchststand und das niedrigste Tiefstand über einen bestimmten Zeitraum in der Vergangenheit mit Hilfe der Funktionen höchste ((() und niedrigste ((() um die oberen und unteren Schienen des Preiskanals zu bestimmen. Der Mittelpunkt des Kanals wird als der Durchschnitt der oberen und unteren Schienen definiert. Es berechnet dann die K-Linienkorpusgröße und glättet sie mit SMA, um festzustellen, ob der letzte K-Linienkorpus größer als die Hälfte des durchschnittlichen Körpers ist. Es beurteilt auch, ob die letzten beiden K-Linien in der gleichen Richtung (zwei aufeinanderfolgende rote oder grüne) sind. Wenn diese Bedingungen erfüllt sind, generiert es Kauf- / Verkaufssignale und schließt, wenn der Preis in die Kanalrichtung zurückfällt.

Analyse der Vorteile

Dies ist eine Breakout-Strategie, die den Preiskanal verwendet, um den allgemeinen Trend zu beurteilen.

  1. Die Verwendung des Preiskanals zur Bestimmung der allgemeinen Trendrichtung kann Marktlärm wirksam filtern.

  2. Zwei aufeinanderfolgende K-Linien, die den Kanal in der gleichen Richtung durchbrechen, zeigen eine stärkere Dynamik und eine höhere Erfolgsrate des Ausbruchs an.

  3. Ein K-Linien-Körper, der größer ist als die Hälfte des durchschnittlichen Körpers, kann verhindern, dass man durch falsche Ausbrüche irregeführt wird.

  4. Die Strategielogik ist einfach und leicht umzusetzen.

  5. Anpassungsfähige Parameter wie Kanalzeit, Handelsprodukte, Handelszeiten usw. machen es sehr anpassungsfähig.

Risikoanalyse

Die Strategie birgt auch einige potenzielle Risiken:

  1. Es besteht immer noch die Wahrscheinlichkeit eines fehlgeschlagenen Ausbruchs, der zu Verlusten führen kann.

  2. Bei starken Marktschwankungen kann der Preiskanal versagen.

  3. Das Fehlen eines Stop-Loss-Mechanismus führt nicht zu einer wirksamen Verlustkontrolle.

  4. Einfache Handelsregeln haben zu hohe Risiken.

  5. Unfähig, sich an komplexere Marktumgebungen anzupassen.

Die entsprechenden Lösungen sind:

  1. Optimieren Sie die Parameter, um die Erfolgsrate des Ausbruchs zu verbessern.

  2. Fügen Sie den Volatilitätsindex hinzu, um unruhige Märkte zu vermeiden.

  3. Fügen Sie den mobilen Stop-Loss hinzu.

  4. Durchführung eines Komplexitätstests zur Überprüfung der Überanpassung.

  5. Erhöhung der Modelle für maschinelles Lernen zur Verbesserung der Anpassungsfähigkeit.

Optimierungsrichtlinien

Die wichtigsten Optimierungsrichtungen sind:

  1. Hinzufügen eines Stop-Loss-Mechanismus, um Risiken besser zu kontrollieren.

  2. Optimieren von Parametern wie Kanalzeit, Breakout-Schwelle usw. Finden Sie optimale Parameter durch genetischen Algorithmus, Gittersuche usw.

  3. Fügen Sie Filterbedingungen hinzu, um die Gewissheit des Ausbruchs zu erhöhen.

  4. Fügen Sie maschinelle Lernmodelle wie LSTM hinzu, um die Vorhersagekapazität und Anpassungsfähigkeit durch die Nutzung mehrer Daten zu verbessern.

  5. Portfoliooptimierung durchführen, verschiedene Arten von Breakout-Strategien kombinieren, um Orthogonalität zu erreichen und Ähnlichkeiten zu reduzieren.

Schlussfolgerung

Abschließend ist dies eine quantitative Strategie, die auf dem Preiskanal basiert, um Trends zu bestimmen und Breakout-Signale zu entdecken. Sie hat den Vorteil, Trends zu beurteilen und Breakouts zu bestätigen, hat aber auch gewisse Risiken eines falschen Breakouts. Wir können die Strategie durch Parameteroptimierung, Stop-Loss, Filter usw. verbessern, um Risiken zu reduzieren. In der Zwischenzeit kann die Einführung von Machine-Learning-Modellen die Vorhersagefähigkeit weiter verbessern. Insgesamt ist dies ein vielversprechender quantitativer Strategieansatz, der es wert ist, recherchiert und verbessert zu werden.


/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.0", shorttitle = "Price Channel str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel")
showcl = input(true, defval = true, title = "Show center-line")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
col = showcl ? blue : na
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Signals
body = abs(close - open)
abody = sma(body, 10)
up = rbars and close > center and body > abody / 2
dn = gbars and close < center and body > abody / 2
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if exit
    strategy.close_all()

Mehr