
Dies ist eine automatische Handelsstrategie, die auf Kartenform basiert. Die Strategie kontrolliert das Risiko, indem sie mehrere Kartenformsignale identifiziert, bei der Erfüllung der Formbedingungen eingegeben wird und Stop-Loss, Stop-Stops und Tracking-Stops eingerichtet werden.
Die Strategie identifiziert die folgenden Kartenformen als Einstiegssignale: Paketform, Umhüllform, Zwei-Spitzen-Form, Star-Auf-Form, Schwarze-Wolken-Stadt-Form, Schwangerschafts-Form, Drei-Soldaten-Form, Trigger-Form usw. Wenn die oben genannten Kauf-Signale erkannt werden, wird eine Mehr-Einführung durchgeführt; Wenn ein Verkaufssignal erkannt wird, wird eine leere Einführung durchgeführt.
Darüber hinaus ist die Strategie auch Stop-Loss, Stop-Stops und Tracking-Stops eingerichtet, um das Risiko zu kontrollieren. Insbesondere wird der Stop-Loss-Punkt als ein bestimmter Prozentsatz unter dem Einstiegspreis eingestellt, der Stop-Stops-Punkt als ein bestimmter Wert über dem Einstiegspreis und der Tracking-Stops-Punkt als ein bestimmter dynamischer Punkt über dem Einstiegspreis.
Es ist wichtig zu betonen, dass die Strategie auch eine Handelszeit festlegt, in der alle Positionen in der Strategie definierten Handelszeit platziert werden, um Übernachtungsrisiken zu vermeiden.
Der größte Vorteil dieser Strategie besteht darin, dass die Kartenform, ein wirksamer technischer Indikator, als Einstiegsgrundlage verwendet wird. Die große Menge an historischen Daten zeigt, dass es sehr wahrscheinlich ist, dass bestimmte K-Linie-Formen, wenn sie auftreten, einen Wandel in der Nachfrage-Versorgungsbeziehung und der Marktpsychologie anzeigen, was einen guten Zeitpunkt für unseren Einstieg darstellt.
Ein weiterer Vorteil ist die Einrichtung eines ausgereiften Risikokontrollmechanismus. Egal ob Stop Loss, Stop Stop oder Tracking Stop Loss, es ist möglich, Risiken außerhalb des erträglichen Bereichs zu vermeiden und zu kontrollieren.
Schließlich ist die Strategie flexibel und kann an verschiedene Sorten und Handelspräferenzen angepasst werden, indem die Formparameter und die Risikokontrolle angepasst werden.
Die größte Gefahr dieser Strategie besteht in der Instabilität der Kartenform als technischer Indikator. Obwohl die Kartenform die sich ändernden Markttrends eindeutig widerspiegelt, ist sie auch anfällig für zufällige Marktschwankungen, so dass die Wahrscheinlichkeit für falsche Signale nicht gering ist.
Darüber hinaus gibt es keine notwendige Kausalbeziehung zwischen Kartenform und nachträglichen Preisveränderungen. Selbst wenn typische Formen erkannt werden, besteht die Wahrscheinlichkeit, dass die Preise in die entgegengesetzte Richtung der Form erwartet werden.
Um die oben genannten Risiken zu verringern, kann neben der strikten Einhaltung von Stop-Loss, Stop-Stop- und Tracking-Stopp-Regeln auch die Kombination mit anderen, stabileren Indikatoren in Betracht gezogen werden, um die potenziellen Risiken zu vermeiden, die von einem einzigen technischen Indikator ausgehen.
In Anbetracht der begrenzten Formstabilität der Karte kann man versuchen, diese mit stabileren Indikatoren zu kombinieren. Dies kann beispielsweise mit Trend-Indikatoren wie Brin-Bands, Moving Averages oder Shock-Indikatoren wie RSI, MACD verwendet werden. Dies kann zur Filterung von Einstiegsmomenten verwendet werden, um die Wahrscheinlichkeit von Noise-Trading zu verringern.
Eine weitere mögliche Optimierungsrichtung ist der Einsatz von Methoden des maschinellen Lernens. Die Ausbildung von großen Mengen an historischen Daten, wie z. B. über neuronale Netzwerke, zur Erstellung statistischer Beziehungsmodelle zwischen der Form und der tatsächlichen Preisentwicklung. Dies kann die Genauigkeit der Formsignale verbessern.
Schließlich kann die Strategie als Grundrahmen verwendet werden, um mit komplexeren Algorithmen optimiert zu werden, um für Hochfrequenz-Handel zu sorgen. Zum Beispiel kann eine detailliertere Stop-Loss-Methode verwendet werden, oder komplexe Modellierung mit mehr Dateninterfaces in einer höheren Sprache.
Insgesamt ist die Strategie, die Kartenform als ein wirksames technisches Kennzeichen für die Signal-Eingabe nutzt, ein gutes Stop-Loss, Stop-Stop- und Tracking-Risiko für die Stop-Loss-Logik-Kontrolle, eine Strategie, die es wert ist, in der Praxis zu überprüfen. Coding Angle ermutigt die Verwendung der Strategie als grundlegenden Rahmen für die Optimierung, um eine bessere Wirkung auf der Praxis zu erzielen.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//DanyChe
//The script allows you to test popular candlestick patterns on various instruments and timeframes. In addition, you can configure risk management (if the value is zero, it means the function is disabled), and you can also specify the time of the trading session (for example, so that the positions are not transferred to the next day).
//The author is grateful to JayRogers and Phi35, their code examples helped a lot in writing the strategy.
strategy("Candle Patterns Strategy", shorttitle="CPS", overlay=true)
//--- Patterns Input ---
OnEngulfing = input(defval=true, title="Engulfing")
OnHarami = input(defval=true, title="Harami")
OnPiercingLine = input(defval=true, title="Piercing Line / Dark Cloud Cover")
OnMorningStar = input(defval=true, title="Morning Star / Evening Star ")
OnBeltHold = input(defval=true, title="Belt Hold")
OnThreeWhiteSoldiers = input(defval=true, title="Three White Soldiers / Three Black Crows")
OnThreeStarsInTheSouth = input(defval=true, title="Three Stars in the South")
OnStickSandwich = input(defval=true, title="Stick Sandwich")
OnMeetingLine = input(defval=true, title="Meeting Line")
OnKicking = input(defval=true, title="Kicking")
OnLadderBottom = input(defval=true, title="Ladder Bottom")
//--- Risk Management Input ---
inpsl = input(defval = 100, title="Stop Loss", minval = 0)
inptp = input(defval = 1000, title="Take Profit", minval = 0)
inptrail = input(defval = 40, title="Trailing Stop", minval = 0)
// If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled
sl = inpsl >= 1 ? inpsl : na
tp = inptp >= 1 ? inptp : na
trail = inptrail >= 1 ? inptrail : na
//--- Session Input ---
sess = input(defval = "0000-0000", title="Trading session")
t = time('240', sess)
session_open = na(t) ? false : true
// --- Candlestick Patterns ---
//Engulfing
bullish_engulfing = high[0]>high[1] and low[0]<low[1] and open[0]<open[1] and close[0]>close[1] and close[0]>open[0] and close[1]<close[2] and close[0]>open[1] ? OnEngulfing : na
bearish_engulfing = high[0]>high[1] and low[0]<low[1] and open[0]>open[1] and close[0]<close[1] and close[0]<open[0] and close[1]>close[2] and close[0]<open[1] ? OnEngulfing : na
//Harami
bullish_harami = open[1]>close[1] and close[1]<close[2] and open[0]>close[1] and open[0]<open[1] and close[0]>close[1] and close[0]<open[1] and high[0]<high[1] and low[0]>low[1] and close[0]>=open[0] ? OnHarami : na
bearish_harami = open[1]<close[1] and close[1]>close[2] and open[0]<close[1] and open[0]>open[1] and close[0]<close[1] and close[0]>open[1] and high[0]<high[1] and low[0]>low[1] and close[0]<=open[0] ? OnHarami : na
//Piercing Line/Dark Cloud Cover
piercing_line = close[2]>close[1] and open[0]<low[1] and close[0]>avg(open[1],close[1]) and close[0]<open[1] ? OnPiercingLine : na
dark_cloud_cover = close[2]<close[1] and open[0]>high[1] and close[0]<avg(open[1],close[1]) and close[0]>open[1] ? OnPiercingLine : na
//Morning Star/Evening Star
morning_star = close[3]>close[2] and close[2]<open[2] and open[1]<close[2] and close[1]<close[2] and open[0]>open[1] and open[0]>close[1] and close[0]>close[2] and open[2]-close[2]>close[0]-open[0] ? OnMorningStar : na
evening_star = close[3]<close[2] and close[2]>open[2] and open[1]>close[2] and close[1]>close[2] and open[0]<open[1] and open[0]<close[1] and close[0]<close[2] and close[2]-open[2]>open[0]-close[0] ? OnMorningStar : na
//Belt Hold
bullish_belt_hold = close[1]<open[1] and low[1]>open[0] and close[1]>open[0] and open[0]==low[0] and close[0]>avg(close[0],open[0]) ? OnBeltHold :na
bearish_belt_hold = close[1]>open[1] and high[1]<open[0] and close[1]<open[0] and open[0]==high[0] and close[0]<avg(close[0],open[0]) ? OnBeltHold :na
//Three White Soldiers/Three Black Crows
three_white_soldiers = close[3]<open[3] and open[2]<close[3] and close[2]>avg(close[2],open[2]) and open[1]>open[2] and open[1]<close[2] and close[1]>avg(close[1],open[1]) and open[0]>open[1] and open[0]<close[1] and close[0]>avg(close[0],open[0]) and high[1]>high[2] and high[0]>high[1] ? OnThreeWhiteSoldiers : na
three_black_crows = close[3]>open[3] and open[2]>close[3] and close[2]<avg(close[2],open[2]) and open[1]<open[2] and open[1]>close[2] and close[1]<avg(close[1],open[1]) and open[0]<open[1] and open[0]>close[1] and close[0]<avg(close[0],open[0]) and low[1]<low[2] and low[0]<low[1] ? OnThreeWhiteSoldiers : na
//Three Stars in the South
three_stars_in_the_south = open[3]>close[3] and open[2]>close[2] and open[2]==high[2] and open[1]>close[1] and open[1]<open[2] and open[1]>close[2] and low[1]>low[2] and open[1]==high[1] and open[0]>close[0] and open[0]<open[1] and open[0]>close[1] and open[0]==high[0] and close[0]==low[0] and close[0]>=low[1] ? OnThreeStarsInTheSouth : na
//Stick Sandwich
stick_sandwich = open[2]>close[2] and open[1]>close[2] and open[1]<close[1] and open[0]>close[1] and open[0]>close[0] and close[0]==close[2] ? OnStickSandwich : na
//Meeting Line
bullish_ml = open[2]>close[2] and open[1]>close[1] and close[1]==close[0] and open[0]<close[0] and open[1]>=high[0] ? OnMeetingLine : na
bearish_ml = open[2]<close[2] and open[1]<close[1] and close[1]==close[0] and open[0]>close[0] and open[1]<=low[0] ? OnMeetingLine : na
//Kicking
bullish_kicking = open[1]>close[1] and open[1]==high[1] and close[1]==low[1] and open[0]>open[1] and open[0]==low[0] and close[0]==high[0] and close[0]-open[0]>open[1]-close[1] ? OnKicking : na
bearish_kicking = open[1]<close[1] and open[1]==low[1] and close[1]==high[1] and open[0]<open[1] and open[0]==high[0] and close[0]==low[0] and open[0]-close[0]>close[1]-open[1] ? OnKicking : na
//Ladder Bottom
ladder_bottom = open[4]>close[4] and open[3]>close[3] and open[3]<open[4] and open[2]>close[2] and open[2]<open[3] and open[1]>close[1] and open[1]<open[2] and open[0]<close[0] and open[0]>open[1] and low[4]>low[3] and low[3]>low[2] and low[2]>low[1] ? OnLadderBottom : na
// ---Plotting ---
plotshape(bullish_engulfing, text='Engulfing', style=shape.triangleup, color=#1FADA2, editable=true, title="Bullish Engulfing Text")
plotshape(bearish_engulfing,text='Engulfing', style=shape.triangledown, color=#F35A54, editable=true, title="Bearish Engulfing Text")
plotshape(bullish_harami,text='Harami', style=shape.triangleup, color=#1FADA2, editable=true, title="Bullish Harami Text")
plotshape(bearish_harami,text='Harami', style=shape.triangledown, color=#F35A54, editable=true, title="BEarish Harami Text")
plotshape(piercing_line,text='Piercing Line', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(dark_cloud_cover,text='Dark Cloud Cover', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(morning_star,text='Morning Star', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(evening_star,text='Evening Star', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(bullish_belt_hold,text='Belt Hold', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(bearish_belt_hold,text='Belt Hold', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(three_white_soldiers,text='Three White Soldiers', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(three_black_crows,text='Three Black Crows', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(three_stars_in_the_south,text='3 Stars South', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(stick_sandwich,text='Stick Sandwich', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(bullish_ml,text='Meeting Line', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(bearish_ml,text='Meeting Line', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(bullish_kicking,text='Kicking', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(bearish_kicking,text='Kicking', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(ladder_bottom,text='Ladder Bottom', style=shape.triangleup, color=#1FADA2, editable=false)
// --- STRATEGY ---
SignalUp = bullish_engulfing or bullish_harami or piercing_line or morning_star or bullish_belt_hold or three_white_soldiers or three_stars_in_the_south or stick_sandwich or bullish_ml or bullish_kicking or ladder_bottom
SignalDown = bearish_engulfing or bearish_harami or dark_cloud_cover or evening_star or bearish_belt_hold or three_black_crows or bearish_ml or bearish_kicking
strategy.entry("long", true, when = SignalUp and session_open)
strategy.entry("short", false, when = SignalDown and session_open)
strategy.close("long", when = not session_open)
strategy.close("short", when = not session_open)
strategy.exit("Risk Exit long", from_entry = "long", profit = tp, trail_points = trail, loss = sl)
strategy.exit("Risk Exit short", from_entry = "short", profit = tp, trail_points = trail, loss = sl )