Количественная торговая стратегия на основе модели разворота тренда в двух таймфреймах

MA
Дата создания: 2025-01-10 15:47:53 Последнее изменение: 2025-01-10 15:47:53
Копировать: 1 Количество просмотров: 385
1
Подписаться
1617
Подписчики

Количественная торговая стратегия на основе модели разворота тренда в двух таймфреймах

Обзор

Данная стратегия представляет собой количественную торговую систему, основанную на двух классических свечных моделях: «молот» и «повешенный». Стратегия работает путем выявления этих разворотных моделей на рынке для прогнозирования потенциальных поворотных моментов в поведении цены. Система объединяет несколько технических индикаторов для подтверждения достоверности сигнала, включая пропорциональное соотношение между телом и тенью K-линии, направление тренда и другие факторы, что позволяет точно определять точки разворота рынка.

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

Основная логика стратегии заключается в программном определении двух ключевых свечных моделей:

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

Стратегия количественно оценивает эти закономерности, устанавливая строгие параметры, в том числе:

  • Минимальный множитель длины тела свечи
  • Отношение нижней тени к высоте свечи
  • Период удержания

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

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

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

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

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

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

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

Эта стратегия реализует систематическое применение классической теории технического анализа посредством количественных методов и имеет большую практическую ценность. Благодаря оптимизации параметров и совершенствованию механизмов контроля рисков стратегия может поддерживать стабильную эффективность в различных рыночных условиях. Модульная конструкция стратегии также обеспечивает хорошую основу для последующей оптимизации.

Исходный код стратегии
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Hammer and Hanging Man Strategy", overlay=true)

// Input parameters
length = input.int(5, title="Minimum Candle Body Length (Multiplier)", minval=1)
shadowRatio = input.float(1, title="Lower Shadow to Candle Height Ratio", minval=1.0)
holdPeriods = input.int(26, title="Hold Periods (Bars)", minval=1)  // Holding period in bars

// Function to calculate the absolute value
absValue(x) =>
    x >= 0 ? x : -x

// Function to check if it is a Hammer
isHammer() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close > open

// Function to check if it is a Hanging Man
isHangingMan() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close < open

// Detect the candles
hammer = isHammer()
hangingMan = isHangingMan()

// Trading logic: Long on Hammer, Short on Hanging Man
if hammer
    strategy.entry("Long", strategy.long)  // Long entry on Hammer

if hangingMan
    strategy.entry("Short", strategy.short)  // Short entry on Hanging Man

// Exit after X bars
if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Long")

if strategy.position_size < 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Short")

// Visualization of signals
plotshape(hammer, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer")
plotshape(hangingMan, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging Man")