Многоуровневая количественная трендовая торговая стратегия, основанная на прорыве уровней поддержки и сопротивления и бэктестинге

Pivot SR MA BREAKOUT RETEST Trend
Дата создания: 2025-02-20 16:00:35 Последнее изменение: 2025-02-20 16:00:35
Копировать: 2 Количество просмотров: 377
2
Подписаться
319
Подписчики

Многоуровневая количественная трендовая торговая стратегия, основанная на прорыве уровней поддержки и сопротивления и бэктестинге Многоуровневая количественная трендовая торговая стратегия, основанная на прорыве уровней поддержки и сопротивления и бэктестинге

Обзор

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

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

Стратегия включает в себя следующие ключевые логики:

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

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

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("SR Breakout & Retest Strategy (4hr)", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// ===== USER INPUTS =====
leftBars    = input.int(3, "Left Pivot Bars", minval=1)
rightBars   = input.int(3, "Right Pivot Bars", minval=1)
tolerance   = input.float(0.005, "Retest Tolerance (Fraction)", step=0.001)

// ===== PIVOT CALCULATION =====
pLow  = ta.pivotlow(low, leftBars, rightBars)
pHigh = ta.pivothigh(high, leftBars, rightBars)

// ===== STATE VARIABLES FOR CANDIDATE LEVELS =====
var float candidateSupport  = na
var bool  supportBroken     = false
var bool  supportRetested   = false

var float candidateResistance = na
var bool  resistanceBroken    = false
var bool  resistanceRetested  = false

// ===== UPDATE CANDIDATE LEVELS =====
if not na(pLow)
    candidateSupport := pLow
    supportBroken    := false
    supportRetested  := false

if not na(pHigh)
    candidateResistance := pHigh
    resistanceBroken    := false
    resistanceRetested  := false

// ===== CHECK FOR BREAKOUT & RETEST =====
// -- Support: Price breaks below candidate support and then retests it --
if not na(candidateSupport)
    if not supportBroken and low < candidateSupport
        supportBroken := true

    if supportBroken and not supportRetested and close >= candidateSupport and math.abs(low - candidateSupport) <= candidateSupport * tolerance
        supportRetested := true
        label.new(bar_index, candidateSupport, "Support Retest", 
                  style=label.style_label_up, color=color.green, textcolor=color.white, size=size.tiny)
        // Example trading logic: Enter a long position on support retest
        strategy.entry("Long_Support", strategy.long)

// -- Resistance: Price breaks above candidate resistance and then retests it --
if not na(candidateResistance)
    if not resistanceBroken and high > candidateResistance
        resistanceBroken := true

    if resistanceBroken and not resistanceRetested and close <= candidateResistance and math.abs(high - candidateResistance) <= candidateResistance * tolerance
        resistanceRetested := true
        label.new(bar_index, candidateResistance, "Resistance Retest", 
                  style=label.style_label_down, color=color.red, textcolor=color.white, size=size.tiny)
        // Example trading logic: Enter a short position on resistance retest
        strategy.entry("Short_Resistance", strategy.short)

// ===== PLOTTING =====
plot(pLow, title="Pivot Low (Support)", style=plot.style_circles, color=color.green, linewidth=2)
plot(pHigh, title="Pivot High (Resistance)", style=plot.style_circles, color=color.red, linewidth=2)