Эта стратегия сочетает в себе три индикатора - скользящие средние, полосы Боллинджера и индекс относительной силы (RSI) для многопериодной торговли акциями. Она рассматривает кроссоверы быстрых и медленных скользящих средних, RSI ниже 50 и ценовую цену ниже средней полосы BB при покупке. Она рассматривает RSI выше 70 и ценовую цену выше верхней полосы BB при продаже.
Стратегия в основном использует три индикатора для принятия решений. Во-первых, индикатор MACD состоит из быстрых и медленно движущихся средних. Пересечения быстрой линии над медленной линией генерируют сигналы покупки. Во-вторых, полосы Боллинджера со средними, верхними и нижними полосами. Цены вблизи нижней полосы представляют собой возможности для покупки в колеблющихся минимумах, в то время как цены вблизи верхней полосы представляют возможности для продажи в колеблющихся максимумах.
В частности, стратегия сначала требует быстрого пересечения скользящей средней выше медленной скользящей средней, что указывает на укрепление восходящего тренда, который предполагает покупку. Она также требует RSI ниже 50, показывая, что цена может находиться на уровне перепроданности и представляет возможности для покупки. Кроме того, она требует закрытия цены ниже средней полосы BB, указывая на низкий уровень колебания цен и хорошую точку входа.
Для получения прибыли и остановки убытков, когда RSI поднимается выше 70, это указывает на то, что цена может находиться на уровне перекупленности, а импульс восходящего тренда уменьшается, что подходит для получения прибыли.
Стратегия объединяет сильные стороны скользящих средних, полос Боллинджера и RSI для более точного определения точек входа и выхода.
Движущиеся средние определяют импульс восходящего тренда цены. BB средняя полоса определяет подвижные минимумы для входа. RSI избегает покупки на пиках цен. Все три вместе обеспечивают относительно идеальные возможности покупки во время восходящих трендов цен.
Комбинация RSI и BB верхней полосы хорошо отражает колебания цен для получения прибыли, чтобы избежать перекупленных условий.
Оценки за несколько периодов позволяют отслеживать торговые возможности в разные временные рамки, чтобы максимизировать прибыль.
Логические правила торговли делают стратегию легко понятной для средне- и долгосрочных инвестиций.
Несмотря на объединение показателей для повышения точности принятия решений, существуют основные риски:
Параметры, определяющие риски. Параметры для индикаторов нуждаются в эмпирической корректировке. Недостаточная настройка влияет на эффективность стратегии.
На медвежьих рынках скорость падения цен может сделать стоп-лосс неэффективными.
Риски, связанные с одной акцией, сохраняются, несмотря на портфель.
Потенциально чрезмерная частота торговли: оптимальное установление параметров может привести к частым сделкам, причем затраты на транзакции и налоги могут быть выше.
Решения:
Регулировать параметры на основе обратных испытаний для достижения подходящей частоты сигнала.
Настроить скользящие средние периоды на умеренную частоту входа и минимизировать потери.
Диверсификация инвестиций по большему количеству активов для минимизации рисков отдельных акций.
Умеренно смягчить критерии покупки и получения прибыли, чтобы уменьшить частоту торговли.
Остается еще много возможностей для оптимизации:
Добавьте больше фильтров, таких как объем, чтобы обеспечить увеличение объемов покупок, улучшая точность решений.
Включение модулей размещения позиций в динамическое размещение позиций на основе рыночных условий.
Использование алгоритмов глубокого обучения для автоматической настройки параметров посредством обучения большим наборам данных.
Ввести больше сроков для вынесения решений для расширения применимости.
В целом стратегия имеет четкую, понятную логику, синхронизирующую индикаторы для уменьшения ложных сигналов. Дальнейшее настройка параметров и добавление индикаторов могут продолжать повышать надежность и точность принятия решений. Она подходит для средне- и долгосрочных инвестиций и количественной торговли. Тем не менее, ни одна стратегия не полностью устраняет рыночные риски.
/*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)