
Стратегия представляет собой автоматизированную торговую систему, основанную на распознавании K-линейных форм. Она включает в себя десять классических K-линейных форм, включая пять позитивных форм (обезьяна, многоголовый поглотитель, проникновение, утренняя звезда и три белых солдата) и пять падежных форм (навес, воздушный поглотитель, облако, сумерки и три чёрных змеи). Стратегия предоставляет трейдерам потенциальные рыночные обратные сигналы и торговые возможности путем реального распознавания и анализа этих форм.
В основе стратегии лежит программирование для точного распознавания различных форм K-линий. Каждая форма имеет свое уникальное математическое определение и условные суждения:
Это рационально разработанная, логически ясная торговая стратегия для идентификации K-линейных форм. Она реализует наиболее часто используемые в традиционном техническом анализе K-линейные формы путем программирования, предоставляя трейдерам объективный, систематизированный торговый инструмент. Несмотря на некоторые присущие ему ограничения, при надлежащей оптимизации и совместной работе с другими техническими инструментами эта стратегия может предоставить ценные справочные сигналы для принятия торговых решений. Модульная конструкция стратегии также обеспечивает хорошую основу для последующего расширения функций и оптимизации производительности.
/*backtest
start: 2024-11-10 00:00:00
end: 2024-12-09 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// Author: Raymond Ngobeni
strategy('Candlestick Pattern Strategy [Ubaton]', 'Ubaton - Candlestick Pattern Strategy', overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
// User Inputs: Enable/Disable Patterns
// Bullish Patterns
enableHammer = input.bool(true, "Show Hammer")
enableBullEngulfing = input.bool(true, "Show Bullish Engulfing")
enablePiercingLine = input.bool(true, "Show Piercing Line")
enableMorningStar = input.bool(true, "Show Morning Star")
enableThreeWhiteSoldiers = input.bool(true, "Show Three White Soldiers")
// Bearish Patterns
enableHangingMan = input.bool(true, "Show Hanging Man")
enableBearEngulfing = input.bool(true, "Show Bearish Engulfing")
enableDarkCloudCover = input.bool(true, "Show Dark Cloud Cover")
enableEveningStar = input.bool(true, "Show Evening Star")
enableThreeBlackCrows = input.bool(true, "Show Three Black Crows")
// Helper Functions
isHammer() =>
bodySize = math.abs(open - close)
shadowSize = low < math.min(open, close) ? math.min(open, close) - low : na
shadowSize >= 2 * bodySize and high - math.max(open, close) <= bodySize
isBullishEngulfing() =>
close[1] < open[1] and close > open and open <= close[1] and close >= open[1]
isPiercingLine() =>
close[1] < open[1] and close > close[1] + (open[1] - close[1]) * 0.5 and close < open[1]
isMorningStar() =>
close[2] < open[2] and math.abs(close[1] - open[1]) < (high[1] - low[1]) * 0.3 and close > open
isThreeWhiteSoldiers() =>
close > open and close[1] > open[1] and close[2] > open[2] and open > close[1] and open[1] > close[2]
isHangingMan() =>
bodySize = math.abs(open - close)
shadowSize = low < math.min(open, close) ? math.min(open, close) - low : na
shadowSize >= 2 * bodySize and high - math.max(open, close) <= bodySize and close < open
isBearishEngulfing() =>
close[1] > open[1] and close < open and open >= close[1] and close <= open[1]
isDarkCloudCover() =>
close[1] > open[1] and open > close[1] and close < open[1] and close < close[1] + (open[1] - close[1]) * 0.5
isEveningStar() =>
close[2] > open[2] and math.abs(close[1] - open[1]) < (high[1] - low[1]) * 0.3 and close < open
isThreeBlackCrows() =>
close < open and close[1] < open[1] and close[2] < open[2] and open < close[1] and open[1] < close[2]
// Detect Patterns
// Bullish
hammerDetected = enableHammer and isHammer()
bullEngulfDetected = enableBullEngulfing and isBullishEngulfing()
piercingDetected = enablePiercingLine and isPiercingLine()
morningStarDetected = enableMorningStar and isMorningStar()
threeWhiteDetected = enableThreeWhiteSoldiers and isThreeWhiteSoldiers()
// Bearish
hangingManDetected = enableHangingMan and isHangingMan()
bearEngulfDetected = enableBearEngulfing and isBearishEngulfing()
darkCloudDetected = enableDarkCloudCover and isDarkCloudCover()
eveningStarDetected = enableEveningStar and isEveningStar()
threeBlackDetected = enableThreeBlackCrows and isThreeBlackCrows()
// Plot Bullish Patterns
plotshape(enableHammer and hammerDetected, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer")
plotshape(enableBullEngulfing and bullEngulfDetected, title="Bullish Engulfing", location=location.belowbar, color=color.green, style=shape.labelup, text="Engulf")
plotshape(enablePiercingLine and piercingDetected, title="Piercing Line", location=location.belowbar, color=color.green, style=shape.labelup, text="Piercing")
plotshape(enableMorningStar and morningStarDetected, title="Morning Star", location=location.belowbar, color=color.green, style=shape.labelup, text="Morning")
plotshape(enableThreeWhiteSoldiers and threeWhiteDetected, title="Three White Soldiers", location=location.belowbar, color=color.green, style=shape.labelup, text="3 Soldiers")
// Plot Bearish Patterns
plotshape(enableHangingMan and hangingManDetected, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging")
plotshape(enableBearEngulfing and bearEngulfDetected, title="Bearish Engulfing", location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulf")
plotshape(enableDarkCloudCover and darkCloudDetected, title="Dark Cloud Cover", location=location.abovebar, color=color.red, style=shape.labeldown, text="Dark Cloud")
plotshape(enableEveningStar and eveningStarDetected, title="Evening Star", location=location.abovebar, color=color.red, style=shape.labeldown, text="Evening")
plotshape(enableThreeBlackCrows and threeBlackDetected, title="Three Black Crows", location=location.abovebar, color=color.red, style=shape.labeldown, text="3 Crows")
// Strategy Execution
if hammerDetected or bullEngulfDetected or piercingDetected or morningStarDetected or threeWhiteDetected
strategy.entry("Bullish Entry", strategy.long)
if hangingManDetected or bearEngulfDetected or darkCloudDetected or eveningStarDetected or threeBlackDetected
strategy.entry("Bearish Entry", strategy.short)