Стратегия двойного входа на основе пересечения EMA и полос Боллинджера: количественная торговая система, объединяющая отслеживание тренда и прорыв волатильности

EMA BB ATR
Дата создания: 2024-07-29 17:14:32 Последнее изменение: 2024-07-29 17:14:32
Копировать: 0 Количество просмотров: 604
1
Подписаться
1617
Подписчики

Стратегия двойного входа на основе пересечения EMA и полос Боллинджера: количественная торговая система, объединяющая отслеживание тренда и прорыв волатильности

Обзор

EMA-cross vs. Bollinger Bands Dual Entry - это количественная торговая система, которая сочетает в себе отслеживание трендов и волатильные прорывы. Эта стратегия использует в основном пересечения скользящих средних индексов (EMA) для определения тенденций рынка, а также использует Bollinger Bands (Bollinger Bands) для выявления потенциальных возможностей для прорыва. Этот метод предназначен для захвата сильных тенденций рынка и предоставления дополнительных точек входа через прорыв в Bollinger Bands, что увеличивает возможности для торговли и оптимизирует управление капиталом.

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

  1. EMA-пересечение: стратегия использует EMA 12 и 26 циклов для определения направления тренда. Когда быстрая EMA (12 циклов) пересекает медленную EMA (26 циклов), образуется многосигнал; наоборот, образуется пустой сигнал.

  2. Брин-пояса: стратегия использует 55 циклов, установка Брин-пояса с 0.9 стандартной погрешности. Когда цена прорывается вверх, она предоставляет дополнительные возможности для входа, если она уже находится в многоглавном тренде.

  3. Входная логика:

    • Основные входы: пересечение EMA или прорыв цены на трассе с Брин.
    • Дополнительный вход: если у вас уже есть несколько позиций, вы можете увеличить свои позиции при прорыве Брин-бенда.
  4. Логика выхода:

    • Выход из EMA при прохождении медленной EMA под быстрой.
    • Вы можете выбрать выход, когда цена закрывается ниже средней полосы Брин.
  5. Параметры остановки:

    • Динамическая настройка остановки с использованием 14-циклического ATR.
    • Можно использовать минимальные значения за последние 5 дней в качестве стоп-лора.
  6. Управление рисками:

    • По умолчанию, на каждую сделку риски составляют 3%.
    • Используйте ATR для динамической корректировки стоп-лосса в соответствии с рыночными колебаниями.
    • Возможность приостановить торговлю, когда цена будет ниже средней полосы Брин-Бенда.

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

  1. Многомерный анализ: в сочетании с стратегией отслеживания трендов (EMA) и прорыва колебаний (Brin Belt) повышает надежность торговых сигналов.

  2. Гибкий механизм входа: в дополнение к основным EMA перекрестным сигналам, использование прорыва по Брин-полосе предоставляет дополнительные возможности входа, увеличивая адаптивность стратегии.

  3. Динамическое управление рисками: использование ATR для установки стоп-ложа и корректировки размеров позиций, чтобы стратегия могла лучше адаптироваться к волатильности в разных рыночных условиях.

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

  5. Оптимизация управления капиталом: более точное управление капиталом с помощью управления процентной долей риска и динамического регулирования размеров позиций ATR.

  6. Высокая настраиваемость: множество параметров могут быть изменены, например, цикл EMA, настройка бринговых полос, ATR-множители и т. д., что позволяет стратегии адаптироваться к различным видам торгов и рыночным условиям.

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

  1. Риск обратного тренда: хорошая работа на рынках с сильной тенденцией, но может часто появляться ложные сигналы прорыва на рынках с потрясением.

  2. Риск чрезмерной торговли: прорыв Брин-Бенда может привести к чрезмерному количеству торговых сигналов и увеличению стоимости торгов.

  3. Риск скольжения: в условиях высокой волатильности цены на вход и выход могут значительно отклоняться от ожиданий.

  4. Чувствительность к параметрам: эффективность стратегии может быть чувствительна к изменениям параметров, таких как циклы EMA, настройки ленты буринга и т. д., что требует тщательной оптимизации и обратной проверки.

  5. Зависимость от рыночных условий: стратегии могут работать неравномерно в различных рыночных циклах и волатильных условиях.

  6. Управление рисками: несмотря на использование процентного управления рисками, в случае непрерывных убытков может возникнуть большая вероятность отмены счета.

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

  1. Анализ многократных временных рамок: введение более длительных циклов подтверждения трендов, таких как круговой или лунной EMA, для уменьшения ложных сигналов.

  2. Фильтрация волатильности: регулирование параметров буринских полос или приостановка торговли в условиях низкой волатильности, чтобы избежать чрезмерной торговли на горизонтальном рынке.

  3. Добавление динамических индикаторов, таких как RSI или MACD, для подтверждения силы тренда и потенциального обратного сигнала.

  4. Оптимизация механизмов выхода из игры: рассмотреть возможность использования динамических целевых показателей прибыли, основанных на ATR, для лучшего закрепления прибыли.

  5. Классификация состояния рынка: разработка системы классификации рыночной среды с использованием различных параметров в различных состояниях рынка.

  6. Оптимизация машинного обучения: динамическая коррекция параметров стратегии с использованием алгоритмов машинного обучения в соответствии с различными рыночными условиями.

  7. Анализ взаимосвязи: при многоразовой торговле учитывается взаимосвязь между разновидностями, оптимизируя рисково-прибыльные характеристики всего портфеля.

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

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

EMA-cross-Bulling Dual Entry - это количественная торговая система, которая объединяет в себе концепцию трендового слежения и волатильного прорыва. Она использует EMA-cross, чтобы поймать основные тренды и использовать прорыв в булинской полосе, чтобы предоставить дополнительные возможности для входа, а также использовать динамические методы управления рисками для оптимизации использования средств. Преимущество этой стратегии заключается в ее многомерном методе анализа и гибком управлении рисками, но она также подвержена рискам торговли, таким как обратный тренд и перераспределение.

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

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

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

//@version=5
strategy("EMA Crossover with BB Double Entry", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=100)

// Input parameters
fastLength = input.int(12, "Fast EMA Length")
slowLength = input.int(26, "Slow EMA Length")
atrPeriod = input.int(14, "ATR Period")
atrMultiplier = input.float(1.0, "ATR Multiplier")
useATRStopLoss = input.bool(true, "Use ATR Stop Loss")
stopLossDays = input.int(5, "Number of days for stop loss", minval=1, maxval=50)
riskPerTrade = input.float(3.0, "Risk per trade (%)", minval=0.1, maxval=5, step=0.1)
bbRiskPerTrade = input.float(1.5, "Risk for BB breakout trade (%)", minval=0.1, maxval=5, step=0.1)

// Bollinger Bands parameters
bbLength = input.int(55, "BB Length")
bbMult = input.float(0.9, "BB Standard Deviation")
useBBPauseResume = input.bool(false, "Use BB for Pause/Resume trading")

// Backtesting dates
startDate = input(timestamp("2020-01-01"), "Start Date")
endDate = input(timestamp("9999-12-31"), "End Date")

// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)

// Calculate ATR
atr = ta.atr(atrPeriod)

// Calculate Bollinger Bands
bbBasis = ta.sma(close, bbLength)
bbDev = bbMult * ta.stdev(close, bbLength)
bbUpper = bbBasis + bbDev
bbLower = bbBasis - bbDev

// Define trading conditions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
bullish = fastEMA > slowEMA
bearish = fastEMA < slowEMA

// Bollinger Bands breakout
bbBreakout = close > bbUpper and close[1] <= bbUpper[1]

// Calculate lowest low for stop loss
lowestLow = ta.lowest(low, stopLossDays)

// Variables to store entry price and stop loss
var float entryPrice = na
var float stopLoss = na
var bool inPosition = false
var bool pauseTrading = false

// Entry logic
entryConditions = (longCondition or (bbBreakout and bullish)) and
                  (not useBBPauseResume or close > bbBasis) and
                  not pauseTrading

if entryConditions and not inPosition
    entryPrice := close
    atrStopLoss = close - (atr * atrMultiplier)
    lowStopLoss = lowestLow
    stopLoss := useATRStopLoss ? atrStopLoss : lowStopLoss
    
    riskAmount = strategy.equity * (riskPerTrade / 100)
    positionSize = riskAmount / (close - stopLoss)
    
    strategy.entry("Long", strategy.long, qty=positionSize)
    inPosition := true
    pauseTrading := false
    
    alert("BUY," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(positionSize), alert.freq_once_per_bar_close)

// Additional entry on BB breakout
if inPosition and bbBreakout and bullish and (not useBBPauseResume or close > bbBasis)
    bbRiskAmount = strategy.equity * (bbRiskPerTrade / 100)
    bbPositionSize = bbRiskAmount / (close - stopLoss)
    
    strategy.entry("Long_BB", strategy.long, qty=bbPositionSize)
    
    alert("ADD," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(bbPositionSize), alert.freq_once_per_bar_close)

// Exit logic
if shortCondition or (useBBPauseResume and inPosition and close < bbBasis)
    if shortCondition
        strategy.close_all(comment="EMA Crossdown")
        inPosition := false
        pauseTrading := false
        alert("SELL," + syminfo.ticker + ",Reason=EMA_Crossdown", alert.freq_once_per_bar_close)
    else if useBBPauseResume
        strategy.close_all(comment="Close under BB basic")
        pauseTrading := true
        alert("SELL," + syminfo.ticker + ",Reason=Below_BB_Basic", alert.freq_once_per_bar_close)
    
    entryPrice := na
    stopLoss := na

// Resume trading if price closes above BB basic
if useBBPauseResume and pauseTrading and close > bbBasis
    pauseTrading := false
    alert("RESUME," + syminfo.ticker, alert.freq_once_per_bar_close)

// Stop loss
if strategy.position_size > 0
    strategy.exit("Stop Loss", "Long", stop=stopLoss)
    strategy.exit("Stop Loss", "Long_BB", stop=stopLoss)
    if close <= stopLoss
        alert("SELL," + syminfo.ticker + ",Reason=Stop_Loss", alert.freq_once_per_bar_close)

// Plotting
plot(fastEMA, color=color.new(color.blue, 0), title="Fast EMA")
plot(slowEMA, color=color.new(color.red, 0), title="Slow EMA")
plot(bbUpper, color=color.new(color.green, 50), title="BB Upper")
plot(bbLower, color=color.new(color.green, 50), title="BB Lower")
plot(bbBasis, color=color.new(color.yellow, 50), title="BB Basic")
plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, style=plot.style_cross, linewidth=2, title="Stop Loss")

// Alert conditions
alertcondition(entryConditions, title="Buy Alert", message="Buy {{ticker}}")
alertcondition(bbBreakout and inPosition and bullish and (not useBBPauseResume or close > bbBasis), title="Add Position Alert", message="Add Position {{ticker}}")
alertcondition(shortCondition, title="Sell Alert (EMA)", message="Sell {{ticker}} (EMA crossdown)")
alertcondition(useBBPauseResume and inPosition and close < bbBasis, title="Pause Alert", message="Pause trading {{ticker}} (Close under BB basic)")
alertcondition(useBBPauseResume and pauseTrading and close > bbBasis, title="Resume Alert", message="Resume trading {{ticker}} (Close above BB basic)")