Стратегия улавливания торговых трендов на основе исторических максимумов и минимумов Delta SMA

SMA DELTA MA
Дата создания: 2025-02-19 10:47:50 Последнее изменение: 2025-02-19 10:47:50
Копировать: 3 Количество просмотров: 350
1
Подписаться
1617
Подписчики

Стратегия улавливания торговых трендов на основе исторических максимумов и минимумов Delta SMA

Обзор

Это торговая стратегия, основанная на анализе высоких и низких точек в течение года, основанная на дельта-значении объема покупок и продаж. Эта стратегия используется для выявления потенциальных торговых сигналов, путем вычисления разрыва в количестве покупок и продаж и сравнения его с историческими высокими и низкими точками.

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

Основная логика стратегии основана на следующих ключевых шагах:

  1. Расчет дельты: расчет разницы между объемами покупки и продажи путем анализа движения цен. Когда цена закрытия выше цены открытия, она записывается как сумма покупки, а не как сумма продажи.
  2. Сглаженная обработка SMA: для уменьшения шума обработка дельта-значений с использованием 14-циклической подвижной средней.
  3. Определение высоких и низких значений за год: рассчитывается максимальное и минимальное значение дельта-СМА за последний год.
  4. Условия запуска сигнала:
    • Сигнал покупки: сбой, когда дельта-СМА пробивается через 0 после 70-процентного минимума за год
    • Сигнал продажи: сбой, когда дельта-сма пробивает годовой максимум в 90% и падает до 60%

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

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

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

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

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

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

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

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

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

//@version=5
strategy("Delta SMA 1-Year High/Low Strategy", overlay = false, margin_long = 100, margin_short = 100)

// Inputs
delta_sma_length = input.int(14, title="Delta SMA Length", minval=1)  // SMA length for Delta
lookback_days = 365  // Lookback period fixed to 1 year

// Function to calculate buy and sell volume
buy_volume = close > open ? volume : na
sell_volume = close < open ? volume : na

// Calculate the Delta
delta = nz(buy_volume, 0) - nz(sell_volume, 0)

// Calculate Delta SMA
delta_sma = ta.sma(delta, delta_sma_length)

// Lookback period in bars (1 bar = 1 day)
desired_lookback_bars = lookback_days

// Ensure lookback doesn't exceed available historical data
max_lookback_bars = math.min(desired_lookback_bars, 365)  // Cap at 365 bars (1 year)

// Calculate Delta SMA low and high within the valid lookback period
delta_sma_low_1yr = ta.lowest(delta_sma, max_lookback_bars)
delta_sma_high_1yr = ta.highest(delta_sma, max_lookback_bars)

// Define thresholds for buy and sell conditions
very_low_threshold = delta_sma_low_1yr * 0.7
above_70_threshold = delta_sma_high_1yr * 0.9
below_60_threshold = delta_sma_high_1yr * 0.5

// Track if `delta_sma` was very low and persist the state
var bool was_very_low = false
if delta_sma < very_low_threshold
    was_very_low := true
if ta.crossover(delta_sma, 10000)
    was_very_low := false  // Reset after crossing 0

// Track if `delta_sma` crossed above 70% of the high
var bool crossed_above_70 = false
if ta.crossover(delta_sma, above_70_threshold)
    crossed_above_70 := true
if delta_sma < below_60_threshold*0.5 and crossed_above_70
    crossed_above_70 := false  // Reset after triggering sell

// Buy condition: `delta_sma` was very low and now crosses 0
buy_condition = was_very_low and ta.crossover(delta_sma, 0)

// Sell condition: `delta_sma` crossed above 70% of the high and now drops below 60%
sell_condition = crossed_above_70 and delta_sma < below_60_threshold

// Place a long order when buy condition is met
if buy_condition
    strategy.entry("Buy", strategy.long)

// Place a short order when sell condition is met
if sell_condition
    strategy.close("Buy")

// Plot Delta SMA and thresholds for visualization
plot(delta_sma, color=color.blue, title="Delta SMA")
plot(very_low_threshold, color=color.green, title="70% of 1-Year Delta SMA Low", linewidth=2)
plot(above_70_threshold, color=color.purple, title="70% of 1-Year Delta SMA High", linewidth=2)
plot(below_60_threshold, color=color.red, title="60% of 1-Year Delta SMA High", linewidth=2)

// Optional: Plot Buy and Sell signals on the chart
//plotshape(series=buy_condition, title="Buy Signal", location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text="BUY")
//plotshape(series=sell_condition, title="Sell Signal", location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text="SELL")