Diese Strategie kombiniert mehrere Kerzenmustermodelle zum Handel mit Aktien.
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:
Engulfing Pattern: Die aktuelle Kerze verschlingt die vorherige und erzeugt Kauf- oder Verkaufssignale.
Harami-Muster: Vorherige Kerze verschlingt die aktuelle und erzeugt Kauf- oder Verkaufssignale.
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.
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.
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.
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.
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()