Strategie zur Verfolgung mehrerer gleitender Durchschnittswerte und dynamisches Positionsverwaltungssystem

EMA ATR
Erstellungsdatum: 2025-02-27 10:20:18 zuletzt geändert: 2025-02-27 10:20:18
Kopie: 0 Klicks: 478
2
konzentrieren Sie sich auf
319
Anhänger

Strategie zur Verfolgung mehrerer gleitender Durchschnittswerte und dynamisches Positionsverwaltungssystem Strategie zur Verfolgung mehrerer gleitender Durchschnittswerte und dynamisches Positionsverwaltungssystem

Überblick

Die Strategie baut ein vollständiges Handelssystem auf, das Trendsurteile, Einstiegssignale, Batchbuilding, dynamische Stop-Loss- und Dynamische Stop-Ops umfasst. Die Strategie unterstützt nicht nur mehrfache Aufnahme von Positionen, sondern kann bis zu 5 Handelspositionen aufbauen, und für jede Position gibt es unabhängige Risikokontrollen. Die System erfasst die Wendepunkte der Markttrends durch die Anordnung der EMA-Indikatoren und die Wechselbeziehung zwischen den Preisen und den Schlüssellinien.

Strategieprinzip

Die Kernlogik der Strategie basiert auf der Positionsbeziehung zwischen mehreren EMA-Indikatoren und der Interaktion von Preisen mit kritischen EMAs:

  1. Trendbeurteilung:

    • Mehrseitige Trendbedingungen: EMA12 > EMA144 > EMA169 > EMA576 > EMA676
    • Die oberflächliche Trendbedingungen: EMA12 < EMA144 < EMA169 < EMA576 < EMA676
  2. Eintrittszeichen:

    • Mehrköpfiger Einstieg: Auf der Grundlage eines Mehrköpfigen Trends, wenn der Tiefpunkt die EMA144 überschreitet und der Schlusskurs oberhalb der EMA169 liegt
    • Blank-Eintritt: Auf Basis der Blank-Trend-Erfüllung, wenn der Hochpunkt die EMA144 überschreitet und der Schlusskurs unter der EMA169 liegt
  3. Errichtung von Lagerstätten in Chargen:

    • Erste Position: Eintrittssignal erfüllt und keine Position gehalten
    • Zweite Position: Eintrittssignal erfüllt und derzeit eine Position hält
    • Drei bis fünf Haltungen: Auf der Grundlage der Eingangssignale, die mehr als 50 K-Linien vom letzten Haltungsort entfernt sind
  4. Dynamische Schadenshemmung:

    • Jede Position verwendet einen dynamischen Stop-Loss-Punkt, basierend auf dem Mindestpreis (Mehrköpfe) oder dem Höchstpreis (Leerköpfe) der 12 K-Linien zum Zeitpunkt des Aufbaus der Position
    • Mit einer symmetrischen Stop-Loss-Strategie mit einem Zielpreis von “Eintrittspreis + (Eintrittspreis - Stop-Loss-Preis) “
    • Bündeltergebnis: Jede Position wird zu 50% abgelöst, wenn sie den Stop-Loss erreicht hat, und der Rest wird gehalten, bis der Stop-Loss erreicht ist
  5. Gesamtrisikokontrolle:

    • Wenn EMA12 und EMA144 gekreuzt werden: ((EMA12 fällt in einem mehrseitigen Trend unter EMA144, oder EMA12 überschreitet EMA144 in einem ungebundenen Trend), vollständig platte Position

Insgesamt wird in der Strategie die Richtung der Markttrends durch die Anordnung von mehreren EMAs festgelegt, der Einstiegszeitpunkt durch die Interaktion des Preises mit dem EMA144 bestimmt und ein dynamischer Stop-Loss-Stop-Platz durch die jüngsten Preisschwankungen festgelegt. Gleichzeitig wird die Kapitalverwaltung optimiert, indem die Lagerhaltung und die Zulassung der Gewinne in Chargen aufgeteilt werden, um schließlich ein vollständiges Handelssystem zu bilden.

Strategische Vorteile

  1. Systematische Trendbeurteilung:

    • Trends mit fünf verschiedenen EMAs, um die Gefahr von False Breaks zu verringern
    • Eine Reihe von EMA-Indikatoren bietet quantitative Maßstäbe für die Stärke von Trends und macht Handelsentscheidungen objektiver
  2. Genaue Eintrittsverfahren:

    • Die Kombination von Preis-Gleichgewichts-Kreuzung als Einstiegs-Trigger erhöht die Zeitwirksamkeit des Einstiegs.
    • Anforderung der Bestätigung von Eintrittssignalen innerhalb von 12 K-Linien zur Verringerung des Risikos von verspäteten Transaktionen
  3. Intelligente Geldverwaltung:

    • - Batch-Aufbau von bis zu 5 Lagerstätten für verschiedene Phasen der Marktentwicklung
    • Nachträgliches Bauen von Lagern mit minimalem Zeitabstand (< 50 K-Linien), um ein Überbauen in kurzer Zeit zu vermeiden
  4. Flexible Profitstrategien:

    • Nutzung des Prinzips der “symmetrischen Stop-Loss”, um einen Vorteil zu erzielen, basierend auf den Zielen für den Einstiegspreis und die dynamische Berechnung der Stop-Loss-Punkte
    • Bündelung der Gewinne ((50% der Positionen), lockert einen Teil der Gewinne, während der Erhöhungsraum bleibt
  5. Strenge Risikokontrollen:

    • Jede Position hat einen eigenen Stop-Loss-Punkt, basierend auf den jüngsten Schwankungen (die 12 K-Linien)
    • Trendwechselsignal ((EMA12 und EMA144 Kreuzung) auslöst vollständige Pause und rechtzeitige Stop-Loss
  6. Äußerst anpassungsfähig:

    • Unterstützung von Mehr- und Leerköpfen und Anpassung an verschiedene Marktumgebungen
    • Durch Anpassung der Parameter (z. B. ATR-Multiplikator, Anzahl der K-Linien) an unterschiedliche Sorten und Perioden

Strategisches Risiko

  1. Rückstandsrisiko:

    • Die EMA zeigt eine gewisse Nachlässigkeit, die bei starken Schwankungen des Marktes zu schlechten Einstiegs- oder Ausstiegszeiten führen kann.
    • Mitigationsmethoden: Die Kombination von kurzfristigen Dynamometern kann als Hilfsmittel zur Verbesserung der Reaktionsgeschwindigkeit des Systems in Betracht gezogen werden
  2. Der finanzielle Druck für die Errichtung von Lagerstätten in Chargen:

    • Die Strategie, maximal fünf Positionen zu halten, könnte zu einer zu hohen Konzentration führen.
    • Mitigationsmethode: Die Verteilung der Mittel sollte in einem angemessenen Verhältnis zum Gesamtbetrag festgelegt werden, um eine ausgewogene Verteilung zu gewährleisten.
  3. Einschränkungen der Fix-Periode-Parameter:

    • Die EMA-Perioden in den Codes (§ 12, 144, 169, 576, 676) sind fest, sie können nicht für alle Marktbedingungen gelten.
    • Mitigationsmethoden: Einführung von Methoden zur Berechnung des Anpassungszyklus oder Einrichtung eines speziellen Parameteroptimierungsprozesses für verschiedene Sorten
  4. Potenzielle Probleme bei der Symmetrieverhütung:

    • Symmetrische Stopps können in stark trendigen Märkten zu früh profitieren und größere Gewinnspielräume verpassen
    • Mitigationsmethode: Ein Tracking-Stop für die verbleibenden 50% der Positionen kann in Betracht gezogen werden, um sich an starke Trends anzupassen
  5. Eintrittsbedingungen sind zu streng:

    • Eine Kombination aus mehreren Bedingungen ((Gleichgewicht + Preiskreuzung + Schließungserklärung) kann zu einem fehlenden Teil des effektiven Signals führen
    • Mitigationsmethode: Optionale Einstiegsmechanismen für verschiedene Marktphasen, um die Sensitivität der Signalfassung zu erhöhen
  6. Risiko der Datenabhängigkeit:

    • Strategien, die auf langfristige EMAs (wie 576, 676) angewiesen sind, benötigen ausreichend historische Daten, um effektiv zu funktionieren
    • Erleichterungsmethode: In Fällen, in denen keine Daten vorliegen, kann die Verwendung von alternativen Indikatoren oder eine Anpassung der Berechnungsmethode für eine langfristige EMA in Betracht gezogen werden

Richtung der Strategieoptimierung

  1. Einführung eines adaptiven Parametermechanismus:

    • Umwandlung der festen EMA-Perioden (12 , 144 , 169 , 576 , 676) in Anpassungsparameter, die auf Marktvolatilität basieren
    • Optimierungsgrund: Die optimale EMA-Zyklus unterscheidet sich erheblich unter verschiedenen Marktumständen, und die Adaptionsmechanismen können die Allgemeingültigkeit der Strategie verbessern
  2. Erweiterte Filterung von Eingangssignalen:

    • Indikatoren wie Umsatz, Marktfluktuation (z. B. ATR), um zusätzliche Bestätigungsbedingungen für Einstiegssignale hinzuzufügen
    • Optimierungsgrund: Ein rein linearer Kreuzungssignal ist anfällig für Marktlärm, zusätzliche Filterbedingungen verbessern die Signalqualität
  3. Verbesserung der Finanzverwaltung:

    • Anteil an Kapital pro Positionseröffnung, dynamisch angepasst auf Basis der Konto-Gesamtsumme und der Marktfluktuation
    • Optimierungsgrund: Die Verteilung der Mittel in der derzeitigen Strategie ist fest, kann nicht automatisch an das Risiko angepasst werden, und die Einführung einer dynamischen Kapitalverwaltung verbessert die Effizienz der Verwendung der Mittel
  4. Optimierung der Stop-Loss-Mechanismen:

    • Differentierte Stop-Loss-Strategien für verschiedene Lagerstätten, z. B. ein fixiertes Verhältnis von Stop-Loss für den ersten Lagerbau und ein Tracking-Loss für den späteren Lagerbau
    • Optimierungsgrund: Einheitliche Stop-Loss-Strategien sind schwierig für die Bedürfnisse in verschiedenen Marktphasen, differenzierte Strategien können flexibler auf Marktveränderungen reagieren
  5. Zeitfilter hinzufügen:

    • Einführung von Zeitfiltermechanismen, um schwankende Zeiten (z. B. Vor- und Nach-Opening) oder wichtige Daten zu vermeiden
    • Gründe für die Optimierung: Marktbewegungen in bestimmten Zeitabschnitten haben oft keine Richtung, und die Zeitfilterung verhindert unnötige Geschäfte
  6. Hinzufügen von Trendstärken:

    • Entwicklung von Trendstärke-Indikatoren, die nur dann den Handel erlauben, wenn die Trendstärke eine Schwelle erreicht
    • Optimierungsgrund: Die aktuelle Strategie kann auch bei schwachen Trends Signale erzeugen, und die Einführung einer Trendstärke-Bewertung kann falsche Signale in wackligen Märkten reduzieren
  7. Erstellen von mehrperiodischen Synchronisationen:

    • Trendbeurteilung in Verbindung mit höheren Zeiträumen als Filter für die Handelsrichtung
    • Optimierungsgrund: Ein-Zyklus-Trading-Systeme sind anfällig für kurzfristige Schwankungen, Multi-Zyklus-Synchronisation erhöht die Stabilität des Systems

Zusammenfassen

Die Strategie ist eine strukturierte, logisch eindeutige und quantitative Handelsstrategie, die durch die Kombination von mehreren EMAs einen Rahmen für die Trendentscheidung schafft, den Einstieg durch die Interaktion von Preisen mit den kritischen Mittellinien bestimmt und durch die Erstellung von Lagerpositionen und dynamischen Stop-Loss-Stopps eine präzise Kapitalverwaltung und Risikokontrolle ermöglicht. Der Vorteil der Strategie liegt in der systematischen Trendentscheidung, der präzisen Einstiegsmechanismen, der intelligenten Kapitalverwaltung und der strengen Risikokontrolle, so dass sie in verschiedenen Marktumgebungen eine gewisse Anpassung hat.

Die Strategie ist jedoch auch mit Risiken verbunden, wie z. B. der Verzögerung der Durchschnittslinie, der Festlegung von Parameterbeschränkungen und der Geldmanagement-Spannung. Um die Strategie weiter zu verbessern, können Optimierungsmöglichkeiten wie die Einführung von Anpassungsparametermechanismen, die Erhöhung der Signalfilterung, die Verbesserung des Geldmanagementsystems, die Optimierung der Stop-Loss-Mechanismen und die Einrichtung von mehrzyklischen Synchronsystemen in Betracht gezogen werden.

Insgesamt bietet die Strategie einen handlungsfähigen Rahmen für den Quantifizierungshandel durch ausgewogene Trendverfolgung und Risikokontrolle. Durch kontinuierliche Optimierung und Anpassung der Parameter an die spezifische Marktumgebung wird die Strategie eine stabile Performance im tatsächlichen Handel erwarten.

Strategiequellcode
/*backtest
start: 2024-09-08 00:00:00
end: 2024-12-08 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("专业级交易系统", overlay=false, close_entries_rule = "ANY")
x1 = input.float(1.5,"atr倍数",step=0.1)
x2 = input.int(50,"k线数量",step=1)
s1 = strategy.opentrades.entry_price(0)
s2 = strategy.opentrades.entry_price(1)
s3 = strategy.opentrades.entry_price(2)
s4 = strategy.opentrades.entry_price(3)
s5 = strategy.opentrades.entry_price(4)
s6 = strategy.opentrades.entry_price(5)
s7 = strategy.opentrades.entry_price(6)
s8 = strategy.opentrades.entry_price(7)
s9 = strategy.opentrades.entry_price(8)
c = strategy.position_size,o = strategy.opentrades
ema12_len = input.int(12,"EMA12长度")
ema144_len = input.int(144, "EMA144长度")
ema169_len = input.int(169,"EMA169长度")
ema576_len = input.int(376, "EMA576长度")
ema676_len = input.int(576,"EMA676长度")
ema12 = ta.ema(close,ema12_len)
ema144 = ta.ema(close, ema144_len)
ema169 = ta.ema(close, ema169_len)
ema576 = ta.ema(close, ema576_len)
ema676 = ta.ema(close, ema676_len)
e3 = ta.valuewhen(o ==2 and o[1] == 1 and c > 0,bar_index,0)
e4 = ta.valuewhen(o ==3 and o[1] == 2 and c > 0,bar_index,0)
e5 = ta.valuewhen(o ==4 and o[1] == 3 and c > 0,bar_index,0)
le1 = false
le1 := c <= 0 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 ? false : le1[1]
le11 = false
le11 := le1 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144,bar_index,0) < 12 ? true : false
le2 = false
le2 := c > 0 and o == 1 and o[1] == 1 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 1? false : le2[1]
le21 = false
le21 := le2 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
le3 = false
le3 := c > 0 and o == 2 and o[1] == 2 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 2? false : le3[1]
le31 = false
le31 := le3 and bar_index - e3 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
le4 = false
le4 := c > 0 and o == 3 and o[1] == 3 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 3? false : le4[1]
le41 = false
le41 := le4 and bar_index - e4 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
le5 = false
le5 := c > 0 and o == 4 and o[1] == 4 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 4? false : le5[1]
le51 = false
le51 := le5 and bar_index - e5 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
d1 = ta.valuewhen(o == 1 and o[1] == 0 and c > 0,ta.lowest(12),0)
d2 = ta.valuewhen(o == 2 and o[1] == 1 and c > 0,ta.lowest(12),0)
d3 = ta.valuewhen(o == 3 and o[1] == 2 and c > 0,ta.lowest(12),0)
d4 = ta.valuewhen(o == 4 and o[1] == 3 and c > 0,ta.lowest(12),0)
d5 = ta.valuewhen(o == 5 and o[1] == 4 and c > 0,ta.lowest(12),0)
if le11 and close > ema12 and o == 0
    strategy.order("l1",strategy.long,comment="第一单")
if c > 0 and o > 0
    strategy.exit("出场1","l1",limit = 2*s1- d1,stop= d1,qty_percent = 50)
    strategy.exit("出场11","l1",stop= d1)

if le21 and close > ema12 and o == 1
    strategy.order("l2",strategy.long,comment="第二单")
if c > 0 and o == 2
    strategy.exit("出场2","l2",limit = 2*s2- d2,stop= d2,qty_percent = 50)
    strategy.exit("出场21","l2",stop= d2)

if le31 and close > ema12 and o == 2
    strategy.order("l3",strategy.long,comment="第三单")
if c > 0 and o == 3
    strategy.exit("出场3","l3",limit = 2*s3- d3,stop= d3,qty_percent = 50)
    strategy.exit("出场31","l3",stop= d3)

if le41 and close > ema12 and o == 3
    strategy.order("l4",strategy.long,comment="第四单")
if c > 0 and o == 4 
    strategy.exit("出场4","l4",limit = 2*s4- d4,stop= d4,qty_percent = 50)
    strategy.exit("出场41","l4",stop= d4)

if le51 and close > ema12 and o == 4
    strategy.order("l5",strategy.long,comment="第五单")
if c > 0 and o == 5
    strategy.exit("出场5","l5",limit = 2*s5- d5,stop= d5,qty_percent = 50)
    strategy.exit("出场51","l5",stop= d5)
bgcolor(le2?color.red:na)
if c > 0 and ema12 < ema144
    strategy.close_all("跌破均线全部出场")

//做空
es3 = ta.valuewhen(o ==2 and o[1] == 1 and c < 0,bar_index,0)
es4 = ta.valuewhen(o ==3 and o[1] == 2 and c < 0,bar_index,0)
es5 = ta.valuewhen(o ==4 and o[1] == 3 and c < 0,bar_index,0)
se1 = false
se1 := c >= 0 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 ? false : se1[1]
se11 = false
se11 := se1 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144,bar_index,0) < 12 ? true : false
se2 = false
se2 := c < 0 and o == 1 and o[1] == 1 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 1? false : se2[1]
se21 = false
se21 := se2 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
se3 = false
se3 := c < 0 and o == 2 and o[1] == 2 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 2? false : se3[1]
se31 = false
se31 := se3 and bar_index - es3 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
se4 = false
se4 := c < 0 and o == 3 and o[1] == 3 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 3? false : se4[1]
se41 = false
se41 := se4 and bar_index - es4 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
se5 = false
se5 := c < 0 and o == 4 and o[1] == 4 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 4? false : se5[1]
se51 = false
se51 := se5 and bar_index - es5 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
ds1 = ta.valuewhen(o == 1 and o[1] == 0 and c < 0 ,ta.highest(12),0)
ds2 = ta.valuewhen(o == 2 and o[1] == 1 and c < 0,ta.highest(12),0)
ds3 = ta.valuewhen(o == 3 and o[1] == 2 and c < 0,ta.highest(12),0)
ds4 = ta.valuewhen(o == 4 and o[1] == 3 and c < 0,ta.highest(12),0)
ds5 = ta.valuewhen(o == 5 and o[1] == 4 and c < 0,ta.highest(12),0)
if se11 and close < ema12 and o == 0
    strategy.order("s1",strategy.short,comment="第一单")
if c < 0 and o > 0
    strategy.exit("出场1","s1",limit = 2*s1- ds1,stop= ds1,qty_percent = 50)
    strategy.exit("出场11","s1",stop= ds1)

if se21 and close < ema12 and o == 1
    strategy.order("s2",strategy.short,comment="第二单")
if c < 0 and o == 2
    strategy.exit("出场2","s2",limit = 2*s2- ds2,stop= ds2,qty_percent = 50)
    strategy.exit("出场21","s2",stop= ds2)

if se31 and close < ema12 and o == 2
    strategy.order("s3",strategy.short,comment="第三单")
if c < 0 and o == 3
    strategy.exit("出场3","s3",limit = 2*s3- ds3,stop= ds3,qty_percent = 50)
    strategy.exit("出场31","s3",stop= ds3)

if se41 and close < ema12 and o == 3
    strategy.order("s4",strategy.short,comment="第四单")
if c < 0 and o == 4 
    strategy.exit("出场4","s4",limit = 2*s4- ds4,stop= ds4,qty_percent = 50)
    strategy.exit("出场41","s4",stop= ds4)

if se51 and close < ema12 and o == 4
    strategy.order("s5",strategy.short,comment="第五单")
if c < 0 and o == 5
    strategy.exit("出场5","s5",limit = 2*s5- ds5,stop= ds5,qty_percent = 50)
    strategy.exit("出场51","s5",stop= ds5)
bgcolor(se1?color.red:na)
if c < 0 and ema12 > ema144
    strategy.close_all("跌破均线全部出场")
kaiguan = input.bool(true,"均线开关")
plot(ema12,force_overlay=true)
plot(ema144, "EMA144", color=color.new(#008000, 0),force_overlay=true)
plot(ema169, "EMA169", color=color.red,force_overlay=true)
plot(kaiguan?ema576:na,color=color.yellow,force_overlay=true)
plot(kaiguan?ema676:na,color=color.yellow,force_overlay=true)
//plotshape(series=entrySignal,title="买入信号",location=location.belowbar,color=color.new(color.green, 0),style=shape.labelup,text="BUY",textcolor=color.new(color.white, 0))