Strategie zur Kombination von mehrmodellenhaften Kerzenmustern

Schriftsteller:ChaoZhang, Datum: 2023-10-17 15:53:06
Tags:

img

Übersicht

Diese Strategie kombiniert mehrere Kerzenmustermodelle zum Handel mit Aktien.

Grundsätze

Die Kernlogik dieser Strategie besteht darin, mehrere Regeln für die Erkennung von Kerzenmustern zu erstellen und dann Handelssignale durch Kombination dieser Regeln zu generieren.

Erstens definiert es einige grundlegende Variablen, um die Eigenschaften der Kerzen zu beschreiben, wie die Größe des Kerzenkörpers, den Eröffnungspreis, den Schlusskurs usw.

Anhand des Verhältnisses zwischen dem Schlusskurs und dem Eröffnungskurs definiert er dann 3 Arten von Handelsbalken: 1 für Anstieg, -1 für Abstieg und 0 für keine Veränderung.

Auf dieser Grundlage werden 3 Regeln zur Erkennung von Kerzenmustern konstruiert:

  1. Engulfing Pattern: Die aktuelle Kerze verschlingt die vorherige und erzeugt Kauf- oder Verkaufssignale.

  2. Harami-Muster: Vorherige Kerze verschlingt die aktuelle und erzeugt Kauf- oder Verkaufssignale.

  3. Harami Cross Pattern: Kombination von Harami und Doji, die Kauf- oder Verkaufssignale erzeugt.

Nach diesen Kerzenmustern kann der Zeitpunkt des Kaufs und Verkaufs bestimmt werden. Einige zusätzliche Bedingungen werden kombiniert, um ungültige Signale wie Handelszeitbereichsgrenze auszufiltern.

Die Handelslogik prüft zunächst die bestehende Position, wenn sie der Signalrichtung widerspricht, schließt sie zuerst die aktuelle Position und eröffnet dann eine neue Position entsprechend dem Signal.

Vorteile

  • Die Kombination erhöht die Stabilität. Ein einziges Muster ist anfällig für spezifische Marktbedingungen. Kombination kann die Zuverlässigkeit verbessern.

  • Bestätigung verbessert die Genauigkeit, verschiedene Muster überprüfen sich gegenseitig, falsche Signale können vermieden werden.

  • Flexibilität: Nutzer können Modelle frei kombinieren und Parameter an unterschiedliche Marktdynamiken anpassen.

  • Risikokontrolle. Stop-Loss und Positionsmanagement-Logik verwalten Risiken effektiv.

Risiken

  • Mehr Parameter bedeuten mehr Komplexität, eine falsche Kombination kann die Leistung beeinträchtigen.

  • Parameter-Tuning erfordert Fachwissen. Wie man richtige Musterparameter setzt, braucht Erfahrung.

  • Einseitiges Haltenrisiko. Lang oder kurz begrenzt nur das Gewinnpotenzial.

  • Vermisste Umkehrpunkte. Wenn man sich auf Muster konzentriert, verliert man die Trendumkehrsignale aus den Augen. Wenn man andere Indikatoren hinzufügt, kann man potenzielle Umkehrpunkte erkennen.

Erweiterung

  • Hinzufügen von Stop Loss zur Verringerung des Holding Risikos.

  • Einbeziehung anderer technischer Indikatoren zur Bestimmung des allgemeinen Trends, wobei der Handel gegen den Haupttrend vermieden wird. z.B. MACD, Bollinger Band usw.

  • Test-Modellparameter für verschiedene Produkte und Festlegung optimaler Parametermengen für jedes Produkt.

  • Einführung von maschinellem Lernen zur Optimierung von Parametern und Mustererkennung mithilfe von KI.

Schlussfolgerung

Diese Strategie baut ein relativ stabiles kurzfristiges Handelssystem auf, indem sie mehrere Kerzenmuster kombiniert. Aber Parameter-Tuning und Risikokontrolle müssen noch verbessert werden, um komplexere Märkte anzupassen. Insgesamt hat sie eine solide Logik und hat nach der Anhäufung ausreichender Daten und Erfahrungen und der Nutzung von maschinellem Lernen für intelligente Optimierung ein großes Potenzial.


/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's CandleModels Tests", shorttitle = "CandleModels tests", 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")

eng = input(true, defval = true, title = "Model Engulfing")
har = input(true, defval = true, title = "Model Harami")
harc = input(true, defval = true, title = "Model Harami Cross")

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")
rev = input(false, defval = false, title = "Reversive trading")

//Body
body = abs(close - open)
abody = sma(body, 10)

//MinMax Bars
min = min(close, open)
max = max(close, open)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
doji = body < abody / 10
up1 = eng and bar == 1 and bar[1] == -1 and min <= min[1] and max >= max[1]
dn1 = eng and bar == -1 and bar[1] == 1 and min <= min[1] and max >= max[1]
up2 = har and bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1]
dn2 = har and bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1]
up3 = harc and doji and bar[1] == -1 and low >= min[1] and high <= max[1]
dn3 = harc and doji and bar[1] == 1 and low >= min[1] and high <= max[1]
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 and rev == false

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mehr