Strategie für das Kerzenmuster
Die Candlestick-Muster-Strategie ist eine Strategie, die Handelsentscheidungen auf der Grundlage von Candlestick-Mustern trifft. Diese Strategie kann verschiedene gängige Candlestick-Muster erkennen, einschließlich Engulfing-Muster, Harami-Muster, Morgensterne, drei schwarze Krähen usw., und erzeugt Handelssignale, wenn diese Muster erkannt werden. Die Strategie unterstützt auch benutzerdefinierte Stop-Loss-, Take-Profit- und Trailing-Stop-Parameter, um Risiken effektiv zu kontrollieren.
Die Kernlogik dieser Strategie besteht darin, verschiedene Arten von Kerzenmustern durch bedingte Urteile im Pine Script-Code zu identifizieren.
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]
Die obige Logik beurteilt die Beziehung zwischen den hohen, niedrigen, offenen und geschlossenen Preisen der aktuellen K-Linie und der vorherigen beiden K-Linien.
Wenn ein qualifiziertes Candlestick-Muster identifiziert wird, wird die entsprechende lange oder kurze Handelssignalvariable auf true gesetzt. Dann wird während der Handelssitzung überprüft, ob das Handelssignal ausgelöst wird. Wenn ausgelöst, wird eine Bestellung platziert und ein Stop-Loss, Take-Profit und Trailing-Stop gesetzt, um Risiken zu kontrollieren.
Kerzenmuster sind nicht immer zuverlässige Signale
Lösung: Kombination mit Trendindikatoren, Vermeidung der Verwendung während der Bereichsgebundenen Märkte
Ein einzelnes Muster kann falsche Signale haben
Lösung: Sie müssen Signale aus sehr kurzfristigen Mustern ausfiltern
Falsche Einstellungen von Parametern können Verluste verstärken
Lösung: Strenge Festlegung von Stop-Loss- und Take-Profit-Parametern auf der Grundlage der Risikotoleranz
Die Kerzenmusterstrategie identifiziert kurzfristige Wendepunkte mithilfe technischer Analysegrafiken, was eine gängige kurzfristige Strategie ist. Diese Strategie unterstützt mehrere Muster und anpassbare Risikokontrolle, die sehr flexibel zu verwenden ist. Die Zuverlässigkeit der Mustersignale ist jedoch nicht hoch. Sie kann nicht alleine verwendet werden und muss mit Trend und anderen Faktoren zusammenarbeiten, um ihren Wert zu maximieren.
/*backtest start: 2023-11-19 00:00:00 end: 2023-11-24 02:00:00 period: 5m basePeriod: 1m 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('60', 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 )