Стратегия торговли с использованием различных индикаторов Bollinger Bands, RSI, MACD и Stochastic

Автор:Чао Чжан, Дата: 2023-09-28 12:06:39
Тэги:

Обзор

Эта стратегия объединяет полосы Боллинджера, RSI, MACD и Стохастик, четыре различных технических индикатора, для принятия длинных и коротких решений. Во-первых, она определяет, находится ли цена за пределами канала полос Боллинджера и принимает долгие или короткие позиции соответственно. Затем она проверяет, находится ли RSI в зонах перекупки или перепродажи и входит в соответствии с направлением. Далее она ищет сигналы MACD золотого креста и смертного креста и занимает соответствующие позиции. Наконец, она определяет золотой крест Стохастика и смертельный крест в зонах перекупки / перепродажи. С помощью сигналов со всех четырех индикаторов стратегия принимает более агрессивные пирамидальные позиции для максимизации прибыли.

Принципы

Стратегия в основном использует четыре индикатора - полосы Боллинджера, RSI, MACD и Stochastic.

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

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

MACD - это разница между краткосрочными и долгосрочными скользящими средними.

Стохастические пересечения линий K и D также служат торговыми сигналами. K ниже 20 указывает на перепродажу, а выше 80 - на перекуп.

Сочетание сигналов из этих четырех индикаторов улучшает точность вхождений в торговлю. В частности, длинный ход, когда цена превышает верхнюю полосу полос Боллинджера, RSI ниже 30, MACD золотой крест и пересечение стохастического K выше D ниже 20. Пирамида длинных позиций, когда все четыре условия выполнены. Короткие сигналы похожи.

Преимущества

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

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

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

Кроме того, комбинирование дополнительных индикаторов использует сильные стороны каждого из них.

Наконец, пирамидальные позиции с подтвержденными сигналами максимизируют прибыль по сравнению с сделками с фиксированным количеством.

Риски

Некоторые риски следует учитывать:

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

Во-вторых, одновременные индикаторные сигналы редки, что приводит к низкой частоте торговли.

В-третьих, пирамида может увеличить убытки, если индикаторы дают неверные сигналы.

Наконец, несовместимые индикаторные сигналы нуждаются в правилах принятия решений.

Усовершенствования

Некоторые способы улучшения стратегии:

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

  2. Добавить правила остановки потери для контроля потерь, когда цена движется неблагоприятно за пределы порогов.

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

  4. Оптимизировать выходы с помощью данных о прибыли/убытках за периоды хранения для создания идеальных правил выхода.

  5. Оптимизировать продукты и сроки, наиболее подходящие для стратегии.

  6. Учитывайте торговые издержки, такие как скольжение и комиссии при оптимизации параметров.

  7. Используйте машинное обучение для адаптивной оптимизации.

Заключение

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


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MD strategy", overlay=true)
lengthrsi = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
source = close
lengthbb = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
direction = input(0, title = "Strategy Direction",  minval=-1, maxval=1)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
lengthch = input( minval=1, maxval=1000, defval=5)
upBound = highest(high, lengthch)
downBound = lowest(low, lengthch)
lengthst = input(14, minval=1)
OverBoughtst = input(80)
OverSoldst = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, lengthst), smoothK)
d = sma(k, smoothD)



ups = price > price[1] ? nz(ups[1]) + 1 : 0
dns = price < price[1] ? nz(dns[1]) + 1 : 0
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

basis = sma(source, lengthbb)
dev = mult * stdev(source, lengthbb)

upper = basis + dev
lower = basis - dev

vrsi = rsi(price, lengthrsi)

if (not na(vrsi))
    if (crossover(vrsi, overSold))
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    if (crossunder(vrsi, overBought))
        strategy.entry("RsiSE", strategy.short, comment="RsiSE")

if (crossover(source, lower))
    strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="BBandLE")

if (crossunder(source, upper))
    strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
    strategy.cancel(id="BBandSE")
    
    
if (not na(k) and not na(d))
    if (crossover(k,d) and k < OverSoldst)
        strategy.entry("StochLE", strategy.long, comment="StochLE")
    if (crossunder(k,d) and k > OverBoughtst)
        strategy.entry("StochSE", strategy.short, comment="StochSE")   
        
if (crossover(delta, 0))
    strategy.entry("MacdLE", strategy.long, comment="MacdLE")

if (crossunder(delta, 0))
    strategy.entry("MacdSE", strategy.short, comment="MacdSE")


Больше