RSI Mean Reversion Quantitative Trading Strategy Based on RSI Average Crossing (Стратегия количественной торговли, основанная на пересечении среднего значения RSI)

Автор:Чао Чжан, Дата: 2023-12-01 16:59:26
Тэги:

img

Обзор

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

Принцип стратегии

  1. Расчет показателя RSI с периодом 40 бар
  2. Вычислить MA индикатора RSI с периодом в 10 бар
  3. Сгенерировать сигнал покупки, когда RSI ниже его MA, умноженного на коэффициент (1-процентный диапазон торговли)
  4. Сгенерировать сигнал продажи, когда RSI выше, чем его MA, умноженное на коэффициент (1+торговый диапазон%)
  5. Расстояние диапазона торговли по умолчанию составляет 5, то есть 5% выше или ниже MA для запуска сигналов.
  6. Определить выход, когда RSI превышает свой MA и уровень выше 50

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

Это типичная стратегия реверсии среднего значения, использующая свойства перекупленности/перепроданности индикатора RSI для определения торговых сигналов.

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

Короче говоря, это простая и практичная краткосрочная торговая стратегия.

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

Следует отметить некоторые риски:

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

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

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

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

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

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

Резюме

В общем, это очень типичная и практичная краткосрочная торговая стратегия. Она использует перекупленные/перепроданные уровни RSI для определения входов и выходов, с дополнительным фильтром MA. Логика проста и ясна, параметры гибкие, легко внедряются. Есть определенные рыночные риски, но могут быть решены с помощью уточнения механизмов входа/выхода, настройки параметров и т. Д. В сочетании с более техническими индикаторами и методами управления рисками эта стратегия может стать относительно стабильной краткосрочной стратегией.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)





Больше