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


Дата создания: 2024-06-07 16:45:09 Последнее изменение: 2024-06-07 16:45:09
Копировать: 3 Количество просмотров: 611
1
Подписаться
1617
Подписчики

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

Обзор

Стратегия основана на реверсивных формах в техническом анализе (линии, поглощающих формах и звездочках), а также на позициях поддержки и сопротивления, и торгуется на 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")