Количественная стратегия торговли FNGU, основанная на полосах Боллинджера и RSI

Автор:Чао Чжан, Дата: 2024-01-29 14:53:47
Тэги:

img

Обзор

Эта стратегия называется FNGU Quantitative Trading Strategy Based on Bollinger Bands and RSI. Это долгосрочная стратегия, разработанная специально для акций FNGU. Стратегия в основном использует индикаторы Bollinger Bands и RSI для выявления условий перекупки и перепродажи акций для генерации сигналов купли-продажи.

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

Основная логика этой стратегии основана на сочетании диапазонов Боллинджера и индикаторов RSI.

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

В этой стратегии продолжительность периода средней линии Болинджеровских полос составляет 235 дней, а значение параметра k - 2. Он генерирует сигналы покупки, когда цена падает ниже нижней линии Болинджера или пересекает верхнюю линию, и сигналы продажи, когда цена поднимается выше верхней линии Болинджера.

Во-вторых, индикатор RSI отражает уровень перекупленности/перепроданности акций. RSI выше 70 предполагает статус перекупленности, а ниже 30 - статус перепроданности.

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

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

Эта стратегия имеет следующие преимущества:

  1. Объединение полос Боллинджера и RSI делает сигналы покупки/продажи более точными и надежными.
  2. Болинджерские полосы идентифицируют перекупленные/перепроданные ценовые зоны, в то время как RSI фильтрует ложные сигналы.
  3. Он проводит только длинную торговлю, нет необходимости рассматривать риски короткого сбора.
  4. Оптимизированные параметры делают его подходящим специально для очень волатильных запасов FNGU.
  5. Он внедряет автоматическую стоп-лосс для снижения рисков потерь.
  6. Реализация кодирования проста и понятна, легко понять и изменить.

Риски и решения

Существуют также некоторые риски, связанные с этой стратегией:

  1. Как полосы Боллинджера, так и RSI могут генерировать фальшивые сигналы, что легко приводит к перенастройке.
  2. ФНГУ имеет высокую волатильность. Неправильное установление стоп-лосса может увеличить потери.
  3. Стратегия применяется только к очень волатильным акциям, таким как FNGU, а не к другим.
  4. Хотя параметры оптимизированы, они могут стать устаревшими с изменениями на рынке, что требует постоянного мониторинга и оптимизации.

Руководство по оптимизации стратегии

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

  1. Добавьте другие технические индикаторы, такие как KDJ и MACD, чтобы получить более точные сигналы.
  2. Оптимизировать параметры полос Боллинджера и RSI для адаптации большего количества типов акций.
  3. Включить модели машинного обучения, чтобы помочь принятию решений с большей информацией.
  4. Внедрить межпериодическую торговлю с использованием более высоких временных данных.
  5. Объедините анализ настроений с использованием данных социальных сетей для генерации торговых сигналов.
  6. Разработка системы количественного обратного тестирования для быстрого тестирования различных параметров.

Заключение

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


/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger + RSI + EMA, Double Strategy Long-Only (by EMKM)", shorttitle="1Min Killer", overlay=true)

///////////// RSI
RSIlength = input(2, title="RSI Period Length") // Adjusted RSI period length
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = rsi(price, RSIlength)

///////////// Bollinger Bands
BBlength = input(235, minval=1, title="Bollinger Period Length") // Adjusted Bollinger period length
BBmult = 2
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
BBtarget38 = BBbasis + 0.38 * BBdev  // Line at 38% of Bollinger Band width
BBtarget50 = BBbasis + 0.50 * BBdev  // Line at 50% of Bollinger Band width

///////////// EMA
emaLength = input(20, title="EMA Period Length")
ema = ema(close, emaLength)

source = close
buyEntry = crossover(source, BBlower) or (close < BBlower and close > BBbasis) or (low < BBlower and close > BBbasis) // Add condition for low touching Bollinger Band
sellEntry = crossunder(source, BBupper)

///////////// Plotting
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
plot(BBtarget38, color=color.blue, linewidth=2, title="SMA at 38% of BB width")  // Line at 38%
plot(BBtarget50, color=color.green, linewidth=2, title="SMA at 50% of BB width")  // Line at 50%
plot(ema, color=color.orange, title="EMA")  // Plot EMA

///////////// RSI + Bollinger Bands Strategy
longCondition = crossover(vrsi, RSIoverSold) and buyEntry
sellCondition = crossunder(vrsi, RSIoverBought) and close > BBupper

close_long = close > BBbasis
close_short = close < BBbasis

if (not na(vrsi))
    if longCondition
        strategy.entry("Buy", strategy.long, qty=10, stop=BBlower, comment="Buy")
    else
        strategy.cancel(id="Buy")
        
    if close_long
        strategy.close("Buy")

if (sellCondition)
    strategy.entry("Sell", strategy.short, qty=10, stop=BBupper, comment="Sell")
else
    strategy.cancel(id="Sell")

if close_short
    strategy.close("Sell")


Больше