Многопериодная торговая стратегия на основе скользящей средней и индикатора отклонения


Дата создания: 2023-12-26 10:13:34 Последнее изменение: 2023-12-26 10:13:34
Копировать: 0 Количество просмотров: 575
1
Подписаться
1623
Подписчики

Многопериодная торговая стратегия на основе скользящей средней и индикатора отклонения

Обзор

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

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

Эта стратегия основана на трех показателях. Первый - MACD-индикатор, который состоит из движущихся средних двух различных периодов, быстрых и медленных, которые создают сигнал покупки, когда быстрая линия проходит медленную линию. Второй - Брин-пояс, который состоит из трех линий: средней, верхней и нижней.

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

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

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

Стратегия использует преимущества трёх индикаторов: движущейся средней, буринской полосы и RSI для более точного определения времени покупки и продажи. Конкретные преимущества:

  1. Движущиеся средние позволяют определить повышающую динамику цен на акции, средняя полоса Брин-Бенда позволяет найти покупательную точку в нижней части цены на акции, RSI может предотвратить покупку акций на высоких точках. В сочетании с этими тремя факторами можно определить лучший момент покупки в среднесрочном периоде.

  2. Сочетание RSI и BRI позволяет лучше держать акции на пике, избежать перекупа и своевременно остановить падение.

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

  4. Стратегия имеет простую и понятную логику торговли, которая подходит для средне- и долгосрочных инвестиций.

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

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

  1. Риски настройки параметров. Параметры для скользящих средних, бринговых полос и RSI должны быть скорректированы в соответствии с реальными обстоятельствами. Неправильная настройка параметров может повлиять на эффективность торговли.

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

  3. Одноакционный риск. Эта стратегия более подходит для портфелей, в которых риски по одной акции сохраняются и требуют дифференцированного инвестирования.

  4. Частота сделок может быть слишком высокой. Если параметры настроены правильно, стратегия может часто совершать сделки. Это увеличивает стоимость сделки и налоговые сборы.

Решение проблемы:

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

  2. Периодичность движущейся средней может быть скорректирована, чтобы снизить частоту покупок и уменьшить убытки.

  3. Увеличение инвестиционного ассортимента, снижение риска по одной акции за счет дифференцированного инвестирования.

  4. Соответствующее смягчение условий покупки и хранения, снижение частоты торгов.

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

Однако есть еще много возможностей для оптимизации этой стратегии:

  1. Можно ввести дополнительные фильтры показателей, такие как показатели объема сделок, чтобы увеличить объем сделок при покупке и повысить точность принятия решений.

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

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

  4. Можно добавить больше временных циклов, чтобы расширить область применения.

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

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

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

//
//@author Alorse
//@version=4
strategy("MACD + BB + RSI [Alorse]", shorttitle="BB + MACD + RSI [Alorse]", overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01) 

txtVer = "1.0.1"
version = input(title="Version", type=input.string, defval=txtVer, options=[txtVer], tooltip="This is informational only, nothing will change.")
src = input(title="Source", type=input.source, defval=close)

// MACD
fast_length = input(title="Fast Length", type=input.integer, defval=12, group="MACD")
slow_length = input(title="Slow Length", type=input.integer, defval=26, group="MACD")
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input(title="Oscillator MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input(title="Signal Line MA Type", type=input.string, defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)

// Bollinger Bands
bbGroup = "Bollindger Bands"
length = input(20, title="Length", group=bbGroup)
mult = input(2.0, title="StdDev", minval=0.001, maxval=5, group=bbGroup)

basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev

// RSI
rsiGroup = "RSI"
lenRSI = input(14, title="Length", minval=1, group=rsiGroup)
// lessThan = input(50, title="Less than", minval=1 , maxval=100, group=rsiGroup)
RSI = rsi(src, lenRSI)

// Strategy Conditions
buy = crossover(macd, signal) and RSI < 50 and close < basis
sell = RSI > 70 and close > upper


// Stop Loss
slGroup = "Stop Loss"
useSL = input(false, title="╔══════   Enable   ══════╗", group=slGroup, tooltip="If you are using this strategy for Scalping or Futures market, we do not recommend using Stop Loss.")
SLbased = input(title="Based on", type=input.string, defval="Percent", options=["ATR", "Percent"], group=slGroup, tooltip="ATR: Average True Range\nPercent: eg. 5%.")
multiATR = input(10.0, title="ATR   Mult", type=input.float, group=slGroup, inline="atr")
lengthATR = input(14, title="Length", type=input.integer, group=slGroup, inline="atr")
SLPercent = input(10, title="Percent", type=input.float, group=slGroup) * 0.01

longStop = 0.0
shortStop = 0.0

if SLbased == "ATR"
    longStop := valuewhen(buy, low, 0) - (valuewhen(buy, rma(tr(true), lengthATR), 0) * multiATR)
    longStopPrev = nz(longStop[1], longStop)
    longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

    shortStop := (valuewhen(sell, rma(tr(true), lengthATR), 0) * multiATR) + valuewhen(sell, high, 0)
    shortStopPrev = nz(shortStop[1], shortStop)
    shortStop := close[1] > shortStopPrev ? max(shortStop, shortStopPrev) : shortStop
if SLbased == "Percent"
    longStop  := strategy.position_avg_price * (1 - SLPercent)
    shortStop := strategy.position_avg_price * (1 + SLPercent)

strategy.entry("Long", true, when=buy)
strategy.close("Long", when=sell, comment="Exit")

if useSL
    strategy.exit("Stop Loss", "Long", stop=longStop)