Стратегия перекрестного использования одиночных скользящих средних полос Боллинджера

Автор:Чао Чжан, Дата: 2023-12-22 14:10:14
Тэги:

img

Обзор

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

Логика стратегии

Стратегия в основном использует следующие показатели для оценки:

  1. Движущаяся средняя (SMA): простая скользящая средняя цены CLOSE, представляющая тенденцию цен.
  2. Верхняя полоса Боллинджера: представляет собой уровень сопротивления, прорыв указывает на сильную динамику.
  3. Нижняя полоса Боллинджера: представляет собой уровень поддержки, разбивка указывает на возможное изменение тренда.

Конкретные торговые сигналы:

  1. Сигнал покупки: когда цена закрытия прорывается через верхнюю полосу и MA растет.
  2. Сигнал продажи: когда цена закрытия прорывается через нижнюю полосу и MA падает.

Сочетая тренд и прорыв, торговый сигнал становится более надежным и предотвращает ложный прорыв.

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

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

Риски

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

Улучшения

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

Заключение

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


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="single sma cross", shorttitle="single sma cross",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,overlay=true,currency="USD")
s=input(title="s",defval=90)
p=input(title="p",type=float,defval=.9,step=.1)

sa=sma(close,s)
plot(sa,color=red,linewidth=3)
band=stdev(close,s)*p
plot(band+sa,color=lime,title="")
plot(-band+sa,color=lime,title="")

// ===Strategy Orders============================================= ========
inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na

longCondition = crossover(close,sa+band) and rising(sa,5)
shortCondition = crossunder(close,sa-band) and falling(sa,5)
crossmid = cross(close,sa)


strategy.entry(id = "Long", long=true, when = longCondition)
strategy.close(id = "Long", when = shortCondition)
strategy.entry(id = "Short", long=false, when = shortCondition)
strategy.close(id = "Short", when = longCondition)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)

Больше