Расширенная стратегия торговли по тренду, основанная на полосах Боллинджера и свечных моделях

BB ATR RR PSR MA SD WBR
Дата создания: 2024-11-27 14:18:33 Последнее изменение: 2024-11-27 14:18:33
Копировать: 1 Количество просмотров: 413
1
Подписаться
1617
Подписчики

Расширенная стратегия торговли по тренду, основанная на полосах Боллинджера и свечных моделях

Обзор

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

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

Основная логика стратегии основана на следующих ключевых элементах: во-первых, определение диапазона колебаний цены путем расчета болингов за 20 циклов; во-вторых, анализ соотношения верхнего и нижнего направлений диаграммы к объекту, когда цена касается болинговой полосы, рассматривая это как потенциальный обратный сигнал, когда соотношение превышает установленный порог; в-третьих, установление стоп-стоп путем расчета ключевых уровней поддержки и резистентности; и, наконец, динамическое управление риском путем расчета позиций по каждой сделке на основе фиксированной доли общей суммы счета (%).

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

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-26 00:00:00
period: 12h
basePeriod: 12h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trade Entry Detector, based on Wick to Body Ratio when price tests Bollinger Bands", overlay=true, default_qty_type=strategy.fixed)

// Input for primary analysis time frame
timeFrame = "D"  // Daily time frame

// Bollinger Band settings
length = input.int(20, title="Bollinger Band Length", minval=1)
mult = input.float(2.0, title="Standard Deviation Multiplier", minval=0.1)
source = input(close, title="Source")

// Entry ratio settings
wickToBodyRatio = input.float(1.0, title="Minimum Wick-to-Body Ratio", minval=0)

// Order Fill Timing Option
fillOption = input.string("Daily Close", title="Order Fill Timing", options=["Daily Close", "Daily Open", "HOD", "LOD"])

// Account and risk settings
accountBalance = 100000  // Account balance in dollars
riskPercentage = 1.0     // Risk percentage per trade
riskAmount = (riskPercentage / 100) * accountBalance // Fixed 1% risk amount

// Request daily data for calculations
dailyHigh = request.security(syminfo.tickerid, timeFrame, high)
dailyLow = request.security(syminfo.tickerid, timeFrame, low)
dailyClose = request.security(syminfo.tickerid, timeFrame, close)
dailyOpen = request.security(syminfo.tickerid, timeFrame, open)

// Calculate Bollinger Bands on the daily time frame
dailyBasis = request.security(syminfo.tickerid, timeFrame, ta.sma(source, length))
dailyDev = mult * request.security(syminfo.tickerid, timeFrame, ta.stdev(source, length))
dailyUpperBand = dailyBasis + dailyDev
dailyLowerBand = dailyBasis - dailyDev

// Calculate the body and wick sizes on the daily time frame
dailyBodySize = math.abs(dailyOpen - dailyClose)
dailyUpperWickSize = dailyHigh - math.max(dailyOpen, dailyClose)
dailyLowerWickSize = math.min(dailyOpen, dailyClose) - dailyLow

// Conditions for a candle with an upper wick or lower wick that touches the Bollinger Bands
upperWickCondition = (dailyUpperWickSize / dailyBodySize >= wickToBodyRatio) and (dailyHigh > dailyUpperBand)
lowerWickCondition = (dailyLowerWickSize / dailyBodySize >= wickToBodyRatio) and (dailyLow < dailyLowerBand)

// Define the swing high and swing low for stop loss placement
var float swingLow = na
var float swingHigh = na

if (ta.pivothigh(dailyHigh, 5, 5))
    swingHigh := dailyHigh[5]

if (ta.pivotlow(dailyLow, 5, 5))
    swingLow := dailyLow[5]

// Determine entry price based on chosen fill option
var float longEntryPrice = na
var float shortEntryPrice = na

if lowerWickCondition
    longEntryPrice := fillOption == "Daily Close" ? dailyClose :
                      fillOption == "Daily Open" ? dailyOpen :
                      fillOption == "HOD" ? dailyHigh : dailyLow

if upperWickCondition
    shortEntryPrice := fillOption == "Daily Close" ? dailyClose :
                       fillOption == "Daily Open" ? dailyOpen :
                       fillOption == "HOD" ? dailyHigh : dailyLow

// Execute the long and short entries with expiration
var int longOrderExpiry = na
var int shortOrderExpiry = na

if not na(longEntryPrice)
    longOrderExpiry := bar_index + 2  // Order expires after 2 days

if not na(shortEntryPrice)
    shortOrderExpiry := bar_index + 2  // Order expires after 2 days

// Check expiration and execute orders
if (longEntryPrice and bar_index <= longOrderExpiry and high >= longEntryPrice)
    longStopDistance = close - nz(swingLow, close)
    longPositionSize = longStopDistance > 0 ? riskAmount / longStopDistance : na
    if (not na(longPositionSize))
        strategy.entry("Long", strategy.long, qty=longPositionSize)
    longEntryPrice := na  // Reset after entry

if (shortEntryPrice and bar_index <= shortOrderExpiry and low <= shortEntryPrice)
    shortStopDistance = nz(swingHigh, close) - close
    shortPositionSize = shortStopDistance > 0 ? riskAmount / shortStopDistance : na
    if (not na(shortPositionSize))
        strategy.entry("Short", strategy.short, qty=shortPositionSize)
    shortEntryPrice := na  // Reset after entry

// Exit logic: hit the opposing Bollinger Band
if (strategy.position_size > 0) // Long position
    strategy.exit("Exit Long", "Long", limit=dailyUpperBand)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Exit Short", "Short", limit=dailyLowerBand)

if (strategy.position_size > 0) // Long position
    strategy.exit("Stop Loss Long", "Long", stop=swingLow)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Stop Loss Short", "Short", stop=swingHigh)

// Plot daily Bollinger Bands and levels on the chosen time frame
plot(dailyUpperBand, color=color.blue, linewidth=1, title="Daily Upper Bollinger Band")
plot(dailyLowerBand, color=color.blue, linewidth=1, title="Daily Lower Bollinger Band")
plot(dailyBasis, color=color.gray, linewidth=1, title="Daily Middle Bollinger Band")