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

Динамическая стратегия поддержки и сопротивления

Автор:Чао Чжан, Дата: 2025-01-10 15:08:24
Тэги:ATRПериод

 Dynamic Support and Resistance Adaptive Pivot Trading Strategy

Обзор

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

Принципы стратегии

Основная логика основана на нескольких ключевых элементах: 1. Динамический расчет поворота: использует регулируемый параметр длины поворота (по умолчанию 2) для определения местных максимумов и минимумов 2. Зоны поддержки/сопротивления: устанавливает диапазоны на основе процентов (по умолчанию 0,4%) вокруг поворотных точек для определения действительных торговых зон 3. генерация сигнала: длинные сигналы, когда цена прорывается выше поддержки, короткие сигналы, когда цена прорывается ниже уровня сопротивления Управление рисками: реализация динамических уровней стоп-лосса (10%) и уровня получения прибыли (27%) с размещением позиций на основе собственного капитала счета.

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

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

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

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

Руководство по оптимизации

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

Резюме

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


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
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/
// © felipemiransan

//@version=6
strategy("Dynamic Support and Resistance Pivot Strategy ", overlay=true)

// Strategy parameters
pivot_length = input.int(2, title="Pivot Length", tooltip="Pivot size to identify peaks and troughs")
support_resistance_distance = input.float(0.4, title="Support/Resistance Distance %", tooltip="Distance to consider a support or resistance level in %")

// Stop Loss and Take Profit parameters
stop_loss_pct = input.float(10.0, title="Stop Loss %", tooltip="Stop loss percentage", minval=0.1) / 100
take_profit_pct = input.float(26.0, title="Take Profit %", tooltip="Take profit percentage", minval=0.1) / 100

// Functions to identify high and low pivots
pivot_high = ta.pivothigh(high, pivot_length, pivot_length)
pivot_low = ta.pivotlow(low, pivot_length, pivot_length)

// Storing support and resistance levels
var float resistance_level = na
var float support_level = na
var float last_pivot_high = na
var float last_pivot_low = na

// Updating support and resistance based on pivots
if (not na(pivot_high))
    resistance_level := high[pivot_length]
    last_pivot_high := high[pivot_length]

if (not na(pivot_low))
    support_level := low[pivot_length]
    last_pivot_low := low[pivot_length]

// Function to check if the current price is near a support or resistance level
is_near_resistance = (not na(resistance_level)) and (close >= resistance_level * (1 - support_resistance_distance / 100)) and (close <= resistance_level * (1 + support_resistance_distance / 100))
is_near_support = (not na(support_level)) and (close >= support_level * (1 - support_resistance_distance / 100)) and (close <= support_level * (1 + support_resistance_distance / 100))

// Cross conditions variables
long_cross = ta.crossover(close, support_level) and not na(support_level)
short_cross = ta.crossunder(close, resistance_level) and not na(resistance_level)

// Entry conditions
long_condition = is_near_support and long_cross  // Buy when crossing support from below
short_condition = is_near_resistance and short_cross  // Sell when crossing resistance from above

// Order execution
if (long_condition)
    strategy.entry("Long", strategy.long)

if (short_condition)
    strategy.entry("Short", strategy.short)

// Stop Loss and Take Profit
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // For long position
        avg_price_long = strategy.position_avg_price
        long_stop_level = avg_price_long * (1 - stop_loss_pct)
        long_take_profit_level = avg_price_long * (1 + take_profit_pct)
        strategy.exit("Exit Long", from_entry="Long", stop=long_stop_level, limit=long_take_profit_level)

    if (strategy.position_size < 0)  // For short position
        avg_price_short = strategy.position_avg_price
        short_stop_level = avg_price_short * (1 + stop_loss_pct)
        short_take_profit_level = avg_price_short * (1 - take_profit_pct)
        strategy.exit("Exit Short", from_entry="Short", stop=short_stop_level, limit=short_take_profit_level)

// Plotting support and resistance levels on the chart
plot(support_level, title="Support", color=color.green, linewidth=2, style=plot.style_line)
plot(resistance_level, title="Resistance", color=color.red, linewidth=2, style=plot.style_line)

// Adding labels to show pivot values
if (long_condition and not na(support_level))
    label.new(bar_index, low[pivot_length], str.tostring(low[pivot_length]), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

if (short_condition and not na(resistance_level))
    label.new(bar_index, high[pivot_length], str.tostring(high[pivot_length]), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)


Связанные

Больше