Многопериодная комбинированная торговая стратегия распознавания образов K-линии

JSC CP TS
Дата создания: 2024-12-11 11:04:35 Последнее изменение: 2024-12-11 11:04:35
Копировать: 0 Количество просмотров: 480
1
Подписаться
1617
Подписчики

Многопериодная комбинированная торговая стратегия распознавания образов K-линии

Обзор

Стратегия представляет собой автоматизированную торговую систему, основанную на распознавании K-линейных форм. Она включает в себя десять классических K-линейных форм, включая пять позитивных форм (обезьяна, многоголовый поглотитель, проникновение, утренняя звезда и три белых солдата) и пять падежных форм (навес, воздушный поглотитель, облако, сумерки и три чёрных змеи). Стратегия предоставляет трейдерам потенциальные рыночные обратные сигналы и торговые возможности путем реального распознавания и анализа этих форм.

Стратегический принцип

В основе стратегии лежит программирование для точного распознавания различных форм K-линий. Каждая форма имеет свое уникальное математическое определение и условные суждения:

  1. Для одноконечных форм K-линий (например, подвесная линия, подвесная линия) суждение основывается на пропорциональном отношении объекта к теневой линии
  2. Для двух K-линейных форм (например, поглощающих, проникающих), можно судить о взаимосвязи позиции цены открытия и закрытия двух соседних K-линий
  3. Для трех K-линейных форм (например, три белых солдата, три черных петуха) необходимо одновременно удовлетворить направление движения и позиционные отношения трех последовательных K-линий. Политика позволяет пользователю через параметры гибко выбирать, включать или отключать определение конкретных форм.

Стратегические преимущества

  1. Комплексность: охватывает десять наиболее характерных форм K-линий, способных улавливать различные типы рыночных обратных сигналов
  2. Гибкость: пользователь может свободно выбирать портфель форм, которые необходимо идентифицировать, в зависимости от рыночных условий и индивидуального стиля торговли
  3. Визуализация: с помощью четкой системы маркировки интуитивно показывают местоположение и тип различных форм
  4. Автоматизация: полностью запрограммированный процесс суждения, исключающий субъективность и эмоциональность человеческого суждения
  5. Практичность: четкая логика стратегии, удобная для использования в сочетании с другими техническими показателями или торговыми системами

Стратегический риск

  1. Риск задержки: подтверждение формы K-линии требует ожидания закрытия K-линии, что может привести к небольшой задержке времени входа
  2. Риск ложного сигнала: в условиях колебаний рынка, простое использование формы K-линии может привести к появлению большего количества ложных сигналов.
  3. Зависимость от рыночной конъюнктуры: стратегия лучше работает на рынках с заметной тенденцией, но может оказаться менее эффективной на рынках с переходной позицией
  4. Риск настройки параметров: чрезмерное включение формовой идентификации может привести к слишком интенсивному сигналу, влияющему на суждение
  5. Риск сдерживания убытков: стратегия сама по себе не содержит полноценного механизма сдерживания убытков и требует дополнительных мер по контролю риска

Направление оптимизации стратегии

  1. Введение фильтрации трендов: в сочетании с движущимися средними или трендовыми индикаторами, отфильтровывается обратный сигнал
  2. Увеличение подтверждения объема сделок: проверка эффективности форм с помощью изменения объема сделок
  3. Усовершенствование управления рисками: добавление динамических функций по установке стоп-лосса и целевых показателей прибыли
  4. Оптимизация параметров формы: критерии для параметров формы, адаптированные для различных рынков и временных периодов
  5. Добавление форматных весов: настройка различных систем весов сигналов в зависимости от надежности различных форм

Подвести итог

Это рационально разработанная, логически ясная торговая стратегия для идентификации 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)