В процессе загрузки ресурсов... загрузка...

Количественная стратегия торговли, основанная на образах перемен на уровнях поддержки и сопротивления

Автор:Чао Чжан, Дата: 2024-06-07 16:45:09
Тэги:

img

Обзор

Эта стратегия основана на образах переворота (молот, поглощение и доджи) и уровнях поддержки и сопротивления в техническом анализе, торгуя на 1-часовом графике.

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

Логика стратегии

  1. Вычислить самый низкий минимум и самый высокий максимум в течение указанного периода просмотра с использованием функций ta.lowest() и ta.highest() для определения уровней поддержки и сопротивления.
  2. Проверьте, не образует ли текущий свечник молот, поглощающий рисунок или додзи.
  3. Если вблизи уровня поддержки появляется тенденция восстановления роста, ввести длинную позицию; если вблизи уровня сопротивления появляется тенденция снижения роста, ввести короткую позицию.
  4. Установите цену получения прибыли на 3% выше входной цены и цену остановки потери на 1% ниже входной цены.
  5. Закрыть позицию, когда цена достигнет уровня получения прибыли или стоп-лосса.

Преимущества стратегии

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

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

  1. На рыночных диапазонах частые сигналы об обратном движении могут привести к переоценке и убыткам комиссионных.
  2. Определение уровней поддержки и сопротивления зависит от выбора периода обратного обзора, и разные периоды обратного обзора могут привести к разным результатам.
  3. Надежность обратных моделей не является абсолютной, и ложные сигналы могут привести к потерям.

Решения:

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

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

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

Резюме

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


/*backtest
start: 2024-05-07 00:00:00
end: 2024-06-06 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Kingcoinmilioner

//@version=5
strategy("Reversal Patterns at Support and Resistance", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Parameters
support_resistance_lookback = input.int(50, title="Support/Resistance Lookback Period")
reversal_tolerance = input.float(0.01, title="Reversal Tolerance (percent)", step=0.01) / 100
take_profit_percent = input.float(3, title="Take Profit (%)") / 100
stop_loss_percent = input.float(1, title="Stop Loss (%)") / 100

// Functions to identify key support and resistance levels
findSupport() =>
    ta.lowest(low, support_resistance_lookback)

findResistance() =>
    ta.highest(high, support_resistance_lookback)

// Identify reversal patterns
isHammer() =>
    body = math.abs(close - open)
    lowerWick = open > close ? (low < close ? close - low : open - low) : (low < open ? open - low : close - low)
    upperWick = high - math.max(open, close)
    lowerWick > body * 2 and upperWick < body

isEngulfing() =>
    (close[1] < open[1] and close > open and close > open[1] and open < close[1]) 
    (close[1] > open[1] and close < open and close < open[1] and open > close[1])

isDoji() =>
    math.abs(open - close) <= (high - low) * 0.1

// Identify support and resistance levels
support = findSupport()
resistance = findResistance()

// Check for reversal patterns at support and resistance
hammerAtSupport = isHammer() and (low <= support * (1 + reversal_tolerance))
engulfingAtSupport = isEngulfing() and (low <= support * (1 + reversal_tolerance))
dojiAtSupport = isDoji() and (low <= support * (1 + reversal_tolerance))

hammerAtResistance = isHammer() and (high >= resistance * (1 - reversal_tolerance))
engulfingAtResistance = isEngulfing() and (high >= resistance * (1 - reversal_tolerance))
dojiAtResistance = isDoji() and (high >= resistance * (1 - reversal_tolerance))

// Trading logic
if (hammerAtSupport or engulfingAtSupport or dojiAtSupport)
    strategy.entry("Long", strategy.long)
    stop_level = low * (1 - stop_loss_percent)
    take_profit_level = close * (1 + take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Long", stop=stop_level, limit=take_profit_level)

if (hammerAtResistance or engulfingAtResistance or dojiAtResistance)
    strategy.entry("Short", strategy.short)
    stop_level = high * (1 + stop_loss_percent)
    take_profit_level = close * (1 - take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Short", stop=stop_level, limit=take_profit_level)

// Plot support and resistance levels for visualization
plot(support, color=color.green, linewidth=1, title="Support Level")
plot(resistance, color=color.red, linewidth=1, title="Resistance Level")

// Plot reversal patterns on the chart for visualization
plotshape(series=hammerAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer at Support")
plotshape(series=engulfingAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Engulfing at Support")
plotshape(series=dojiAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Doji at Support")

plotshape(series=hammerAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Hammer at Resistance")
plotshape(series=engulfingAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulfing at Resistance")
plotshape(series=dojiAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Doji at Resistance")


Больше