Количественная стратегия с использованием индикатора RSI и индикатора скользящей средней


Дата создания: 2024-01-24 14:31:01 Последнее изменение: 2024-01-24 14:31:01
Копировать: 0 Количество просмотров: 715
1
Подписаться
1617
Подписчики

Количественная стратегия с использованием индикатора RSI и индикатора скользящей средней

Обзор

Двойная стратегия прорыва средней линии RSI - это количественная стратегия, которая использует одновременно показатель RSI и показатель средней линии для определения времени торговли. Основная идея этой стратегии заключается в том, что, когда показатель RSI достигает зоны перекупки, направление средней линии используется для фильтрации сигналов в поисках более качественных точек прорыва для построения позиций.

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

  1. Рассчитывается RSI и SMA в зависимости от параметров, установленных пользователем.

  2. Когда RSI проходит установленную линию oversold (по умолчанию 30), то появляется многоголовый сигнал, если цена находится ниже средней линии LONG.

  3. Когда RSI проходит установленную линию сверхпокупа ((по умолчанию 70)), появляется сигнал головы, если цена превышает среднюю линию выхода SHORT.

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

  5. Выход позиции оценивается по LONG выходной средней линии и SHORT выходной средней линии.

Анализ преимуществ

  1. Двойные показатели были разработаны с учетом двух основных рыночных факторов для повышения точности принятия решений.

  2. Рационально использовать обратную характеристику RSI, чтобы найти момент обратной точки.

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

  4. Позволяет настраивать параметры, которые можно оптимизировать для разных сортов и циклов.

  5. Простая логика, легко понять и изменить.

Анализ рисков

  1. Индекс RSI легко образует вертикальную линию, а индикатор плотности может уменьшить эту проблему.

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

  3. Средняя линия имеет отсталость, можно соответствующим образом сократить среднюю длину линии или вспомогательные показатели, такие как MACD.

  4. Простые критерии, которые позволяют внедрить дополнительные показатели для обеспечения эффективности торговых сигналов.

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

  1. Оптимизация параметров RSI или введение показателя Density снижает вероятность ложного сигнала.

  2. Для определения тренда и поддержки используются индикаторы тренда и колебаний, такие как DMI, BOLL.

  3. Внедрение альтернативных или совместимых с равнолинейным суждением показателей, таких как MACD.

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

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

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

Исходный код стратегии
/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-23 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Global Market Signals: RSI Strategy.
//@version=4
strategy("GMS: RSI Strategy", overlay=true)

LongShort = input(title="Long Only or Short Only or Both?", type=input.string, defval="Both", options=["Both", "Long Only", "Short Only"])
RSILength = input(title="RSI Length", type = input.integer ,defval=14)
RSIUpper = input(title="Upper Threshold", type = input.float ,defval=70)
RSILower = input(title="Lower Threshold", type = input.float ,defval=30)
LongExit = input(title="Long Exit SMA Length", type = input.integer ,defval=5)
ShortExit = input(title="Short Exit SMA Length", type = input.integer ,defval=5)
AboveBelow = input(title="Trend SMA Filter?", type=input.string, defval="Above", options=["Above", "Below", "Don't Include"])
TrendLength = input(title="Trend SMA Length", type = input.integer ,defval=200)


//Long Side

if LongShort =="Long Only" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
    
//SHORT SIDE

if LongShort =="Short Only" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))