Diese Strategie wird
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.
Dies ist eine Breakout-Strategie, die den Preiskanal verwendet, um den allgemeinen Trend zu beurteilen.
Die Verwendung des Preiskanals zur Bestimmung der allgemeinen Trendrichtung kann Marktlärm wirksam filtern.
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.
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.
Die Strategielogik ist einfach und leicht umzusetzen.
Anpassungsfähige Parameter wie Kanalzeit, Handelsprodukte, Handelszeiten usw. machen es sehr anpassungsfähig.
Die Strategie birgt auch einige potenzielle Risiken:
Es besteht immer noch die Wahrscheinlichkeit eines fehlgeschlagenen Ausbruchs, der zu Verlusten führen kann.
Bei starken Marktschwankungen kann der Preiskanal versagen.
Das Fehlen eines Stop-Loss-Mechanismus führt nicht zu einer wirksamen Verlustkontrolle.
Einfache Handelsregeln haben zu hohe Risiken.
Unfähig, sich an komplexere Marktumgebungen anzupassen.
Die entsprechenden Lösungen sind:
Optimieren Sie die Parameter, um die Erfolgsrate des Ausbruchs zu verbessern.
Fügen Sie den Volatilitätsindex hinzu, um unruhige Märkte zu vermeiden.
Fügen Sie den mobilen Stop-Loss hinzu.
Durchführung eines Komplexitätstests zur Überprüfung der Überanpassung.
Erhöhung der Modelle für maschinelles Lernen zur Verbesserung der Anpassungsfähigkeit.
Die wichtigsten Optimierungsrichtungen sind:
Hinzufügen eines Stop-Loss-Mechanismus, um Risiken besser zu kontrollieren.
Optimieren von Parametern wie Kanalzeit, Breakout-Schwelle usw. Finden Sie optimale Parameter durch genetischen Algorithmus, Gittersuche usw.
Fügen Sie Filterbedingungen hinzu, um die Gewissheit des Ausbruchs zu erhöhen.
Fügen Sie maschinelle Lernmodelle wie LSTM hinzu, um die Vorhersagekapazität und Anpassungsfähigkeit durch die Nutzung mehrer Daten zu verbessern.
Portfoliooptimierung durchführen, verschiedene Arten von Breakout-Strategien kombinieren, um Orthogonalität zu erreichen und Ähnlichkeiten zu reduzieren.
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()