
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.
Die Kernlogik der Strategie basiert auf der Positionsbeziehung zwischen mehreren EMA-Indikatoren und der Interaktion von Preisen mit kritischen EMAs:
Trendbeurteilung:
Eintrittszeichen:
Errichtung von Lagerstätten in Chargen:
Dynamische Schadenshemmung:
Gesamtrisikokontrolle:
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.
Systematische Trendbeurteilung:
Genaue Eintrittsverfahren:
Intelligente Geldverwaltung:
Flexible Profitstrategien:
Strenge Risikokontrollen:
Äußerst anpassungsfähig:
Rückstandsrisiko:
Der finanzielle Druck für die Errichtung von Lagerstätten in Chargen:
Einschränkungen der Fix-Periode-Parameter:
Potenzielle Probleme bei der Symmetrieverhütung:
Eintrittsbedingungen sind zu streng:
Risiko der Datenabhängigkeit:
Einführung eines adaptiven Parametermechanismus:
Erweiterte Filterung von Eingangssignalen:
Verbesserung der Finanzverwaltung:
Optimierung der Stop-Loss-Mechanismen:
Zeitfilter hinzufügen:
Hinzufügen von Trendstärken:
Erstellen von mehrperiodischen Synchronisationen:
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.
/*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))