Структура прорыва и подтверждение объема, многоусловная интеллектуальная торговая стратегия

BOS SMA ATR TP SL
Дата создания: 2024-12-20 16:15:43 Последнее изменение: 2024-12-20 16:15:43
Копировать: 0 Количество просмотров: 442
1
Подписаться
1617
Подписчики

Структура прорыва и подтверждение объема, многоусловная интеллектуальная торговая стратегия

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("BOS and Volume Strategy with Confirmation", overlay=true)

// Parameters
swingLength = input.int(20, title="Swing Length", minval=1)
volumeMultiplier = input.float(1.1, title="Volume Multiplier", step=0.1)
volumeSMA_length = input.int(10, title="Volume SMA Length", minval=1)
takeProfitPercentage = input.float(0.02, title="Take Profit Percentage", step=0.01)
stopLossPercentage = input.float(0.15, title="Stop Loss Percentage", step=0.01)  // New parameter for stop loss
atrLength = input.int(14, title="ATR Length")
confirmationBars = input.int(2, title="Confirmation Bars", minval=1)

// Calculate Swing Highs and Lows
swingHigh = ta.highest(high, swingLength)[1]
swingLow = ta.lowest(low, swingLength)[1]

// Calculate Volume Moving Average
volumeSMA = ta.sma(volume, volumeSMA_length)
highVolume = volume > (volumeSMA * volumeMultiplier)

// Break of Structure Detection with Confirmation
var int bullishCount = 0
var int bearishCount = 0

if (close > swingHigh and highVolume)
    bullishCount := bullishCount + 1
    bearishCount := 0
else if (close < swingLow and highVolume)
    bearishCount := bearishCount + 1
    bullishCount := 0
else
    bullishCount := 0
    bearishCount := 0

bullishBOSConfirmed = (bullishCount >= confirmationBars)
bearishBOSConfirmed = (bearishCount >= confirmationBars)

// Entry and Exit Conditions
var float entryPrice = na  // Declare entryPrice as a variable

if (bullishBOSConfirmed and strategy.position_size <= 0)
    entryPrice := close  // Use ':=' for assignment
    strategy.entry("Long", strategy.long)

if (strategy.position_size > 0)
    // Calculate stop loss price
    stopLossPrice = entryPrice * (1 - stopLossPercentage)
    strategy.exit("Take Profit Long", from_entry="Long", limit=entryPrice * (1 + takeProfitPercentage), stop=stopLossPrice)

if (bearishBOSConfirmed and strategy.position_size >= 0)
    entryPrice := close  // Use ':=' for assignment
    strategy.entry("Short", strategy.short)

if (strategy.position_size < 0)
    // Calculate stop loss price
    stopLossPrice = entryPrice * (1 + stopLossPercentage)
    strategy.exit("Take Profit Short", from_entry="Short", limit=entryPrice * (1 - takeProfitPercentage), stop=stopLossPrice)

// Plot Swing Highs and Lows for Visualization
plot(swingHigh, title="Swing High", color=color.green, linewidth=1)
plot(swingLow, title="Swing Low", color=color.red, linewidth=1)