Инструмент для бэктестинга многоиндикаторной торговой стратегии MA MACD BB

MA MACD BB
Дата создания: 2024-06-03 09:49:08 Последнее изменение: 2024-06-03 09:49:08
Копировать: 0 Количество просмотров: 684
1
Подписаться
1617
Подписчики

Инструмент для бэктестинга многоиндикаторной торговой стратегии MA MACD BB

Обзор

MA MACD BB является мощной платформой для разработки и отслеживания количественных торговых стратегий. Инструмент поддерживает использование трех часто используемых технических индикаторов: скользящего среднего ((MA), скользящего среднего совпадающего рассеяния ((MACD) и бриндового пояса ((BB), пользователь может гибко выбирать один из них в качестве основного индикатора торгового сигнала.

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

Основным принципом этой стратегии является использование трех часто используемых технических индикаторов (MA, MACD и BB) для выявления рыночных тенденций и торговых сигналов. В частности:

  1. Когда пользователь выбирает MA в качестве основного индикатора, стратегия рассчитывает движущуюся среднюю за заданный период, и генерирует сигналы покупки и продажи, когда цена пересекает или пересекает движущуюся среднюю.
  2. Когда пользователь выбирает MACD в качестве основного индикатора, стратегия рассчитывает значение MACD и сигнальную линию, производя соответственно сигналы покупки и продажи, когда MACD проходит через или через сигнальную линию. Кроме того, стратегия также рисует столбиковую карту MACD, чтобы более интуитивно показать силу тренда.
  3. Когда пользователь выбирает BB в качестве основного индикатора, стратегия рассчитывает верхнюю и нижнюю траектории по Брин-полосе, создает сигнал покупки, когда цена пробивает нижнюю траекторию, создает сигнал продажи, когда она пробивает верхнюю траекторию, и закрывает позиции, когда возвращается в районе средней траектории.

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

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

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

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

  1. Рыночные риски: любая торговая стратегия подвержена риску рыночных колебаний и неопределенности, и эта стратегия не является исключением. Если рынок сильно колеблется или ведет себя нерационально, это может привести к ошибочным сигналам и убыткам.
  2. Параметрический риск: эффективность стратегии зависит от выбранных пользователем параметров индикатора, таких как периодичность MA, периодичность MACD, периодичность и ширина BB и т. д. Неправильная настройка параметров может привести к плохой эффективности стратегии.
  3. Риск перенастройки: если пользователь переоптимизирует параметры стратегии в обратном тестировании, это может привести к тому, что стратегия будет слишком ориентирована на определенные исторические данные и не будет хорошо работать на реальных рынках, то есть возникнет проблема с перенастройкой.
  4. Риск чёрного белка: Стратегия основно полагается на технические показатели для получения торговых сигналов, и если на рынке произойдут значительные фундаментальные изменения или экстремальные события, стратегия может не успеть вовремя отреагировать, что приведет к значительным потерям.

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

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

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

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

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

MA MACD BB - это функциональный, гибкий и практичный инструмент для количественной торговли, который улавливает торговые сигналы с помощью трех часто используемых технических показателей, поддерживает многопрофильную двустороннюю торговлю и гибкое управление рисками, адаптируется к различным рынкам и стилям торговли. Пользователи могут использовать этот инструмент для отслеживания и оптимизации исторических данных, а также применять их для реального рынка. Несмотря на то, что любая стратегия подвержена рыночным рискам и рискам моделирования, с помощью разумной настройки параметров, строгого контроля риска и постоянного оптимизации улучшения, эта стратегия может стать помощником для трейдеров, чтобы создать стабильную прибыль в долгосрочной перспективе.

Исходный код стратегии
/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
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/
// © Future_Billi0naire_

//@version=5
strategy("MA MACD BB Backtester", overlay=true)

//@variable Input for Strategy
which_ta = input.string("MA", title="Select Indicator", options=["MACD", "BB", "MA"])
which_camp = input.string("Long", title="Select Long / Short", options=["Short", "Long"])

//@variable Input parameters for Risk Management
positionSize = input.float(100.0, title="Each position's capital allocation %", minval=0.0, maxval = 100.0) / 100

//@variable Input parameters for MACD
fast_length = input.int(12, title="MACD Fast Length")
slow_length = input.int(26, title="MACD Slow Length")
signal_smoothing = input.int(9, title="MACD Signal Smoothing")
macd_source = input.source(close, title="MACD Source")

//@variable Input parameters for Moving Average
ma_length = input.int(50, title="Moving Average Length")

//@variable Input parameters for Bollinger Bands
bb_length = input.int(20, title="Bollinger Bands Length")
bb_mult = input.float(2.0, title="Bollinger Bands Multiplier")

// Choosing the Strategy
int x = na
if which_ta == "MA"
    x := 1
else if which_ta == "MACD"
    x := 2
else if which_ta == "BB"
    x := 3

// Calculate MACD and Signal line
[macdLine, signalLine, _] = ta.macd(macd_source, fast_length, slow_length, signal_smoothing)

// Calculate Moving Average
ma = ta.sma(close, ma_length)

// Calculate Bollinger Bands
basis = ta.sma(close, bb_length)
dev = bb_mult * ta.stdev(close, bb_length)
upper = basis + dev
lower = basis - dev

// Plotting MACD and Signal lines
plot(x == 2 ? macdLine : na, color=color.blue, title="MACD Line")
plot(x == 2 ? signalLine : na, color=color.red, title="Signal Line")

// Plotting histogram
histogram = macdLine - signalLine
plot(x == 2 ? histogram : na, color=color.gray, style=plot.style_histogram, title="MACD Histogram")

// Plotting Moving Average
plot(x == 1 ? ma : na, color=color.orange, title="Moving Average")

// Plotting Bollinger Bands
plot(x == 3 ? upper : na, color=color.green, title="Upper Bollinger Band")
plot(x == 3 ? lower : na, color=color.red, title="Lower Bollinger Band")
plot(x == 3 ? basis : na, color=color.blue, title="Basis Bollinger Band")

// Generate buy signals
buySignalMACD = ta.crossover(macdLine, signalLine)
buySignalMA = ta.crossover(close, ma)
buySignalBB = close < lower
sellSignalBBExit = close > basis

// Generate sell signals
sellSignalMACD = ta.crossunder(macdLine, signalLine)
sellSignalMA = ta.crossunder(close, ma)
sellSignalBB = close > upper
buySignalBBExit = close < basis

// Plot buy signals on the chart
plotshape(series=buySignalMACD and x == 2 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMACD : na, title="Buy Signal MACD", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MACD")
plotshape(series=buySignalMA and x == 1 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMA : na, title="Buy Signal MA", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MA")
plotshape(series=buySignalBB and x == 3 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalBB : na, title="Buy Signal BB", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY BB")

// Plot sell signals on the chart
plotshape(series=sellSignalMACD and x == 2 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMACD : na, title="Sell Signal MACD", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MACD")
plotshape(series=sellSignalMA and x == 1 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMA : na, title="Sell Signal MA", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MA")
plotshape(series=sellSignalBB and x == 3 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalBB : na, title="Sell Signal BB", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL BB")

// Calculate stop loss and take profit levels
accountSize = strategy.equity
positionSizeAmount = accountSize * positionSize

// Calculate order size based on stop loss amount
orderSize = math.floor(positionSizeAmount / close)

// Enter long positions based on buy signals
if strategy.opentrades == 0
    if (buySignalMACD) and x == 2 and which_camp == "Long"
        strategy.entry("Buy MACD", strategy.long, qty=orderSize)
    if (buySignalMA) and x == 1 and which_camp == "Long"
        strategy.entry("Buy MA", strategy.long, qty=orderSize)
    if (buySignalBB) and x == 3 and which_camp == "Long"
        strategy.entry("Buy BB", strategy.long, qty=orderSize)

// Enter short positions based on sell signals
if strategy.opentrades == 0
    if (sellSignalMACD) and x == 2 and which_camp == "Short"
        strategy.entry("Sell MACD", strategy.short, qty=orderSize)
    if (sellSignalMA) and x == 1 and which_camp == "Short"
        strategy.entry("Sell MA", strategy.short, qty=orderSize)
    if (sellSignalBB) and x == 3 and which_camp == "Short"
        strategy.entry("Sell BB", strategy.short, qty=orderSize)

// Close positions based on exit signals
if (sellSignalMACD) and which_camp == "Long"
    strategy.close("Buy MACD")
if (sellSignalMA) and which_camp == "Long"
    strategy.close("Buy MA")
if (sellSignalBBExit) and which_camp == "Long"
    strategy.close("Buy BB")
if (buySignalMACD) and which_camp == "Short"
    strategy.close("Sell MACD")
if (buySignalMA) and which_camp == "Short"
    strategy.close("Sell MA")
if (buySignalBBExit) and which_camp == "Short"
    strategy.close("Sell BB")