Стратегия отклонения от RSI

Автор:Чао Чжан, Дата: 2023-10-08 14:16:57
Тэги:

Обзор

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

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

Стратегия основывается на следующей логике:

  1. Используйте RSI ((2) для определения, являются ли цены перекупленными или перепроданными.

  2. Для определения общего направления тренда используйте 200-дневную EMA. Цены, превышающие EMA, считаются сигналом восходящего тренда, а превышение ниже EMA - сигналом нисходящего тренда.

  3. Когда RSI показывает сигнал перепродажи и цена превышает EMA, вы должны пойти на длинный курс для восходящего тренда.

  4. Когда RSI показывает сигнал перекупленности и цена прорывается ниже EMA, перейдите на понижающий тренд.

  5. Торгуя реверсиями, мы надеемся поймать начало новой тенденции, прежде чем она начнется.

В частности, правило входа заключается в том, чтобы пойти длинным, когда RSI < 25 и цена выходит за верхнюю полосу; идти коротким, когда RSI > 80 и цена выходит за нижнюю полосу. Выходит, когда самая высокая цена дня проходит ниже самой высокой цены предыдущего дня.

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

Стратегия реверсионного прорыва RSI имеет следующие преимущества:

  1. Поиск шансов на реверсию: выявление перекупленных/перепроданных с помощью RSI позволяет выявить реверсию цен, что является ключевым фактором для получения альфы.

  2. Торговля с тенденциями: интеграция EMA гарантирует, что сделки соответствуют основным тенденциям.

  3. Контроль рисков: реверсионные сделки ограничивают срок хранения позиции, контролируя риски.

  4. Гибкие параметры: период RSI и период EMA могут быть скорректированы с учетом изменений режима рынка, что повышает адаптивность.

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

  6. Простота: правила просты и легко применяются в режиме реального времени.

Риски и управление

Стратегия также имеет следующие риски:

  1. Риск неудачного переворота: цены могут возобновить первоначальную тенденцию после сигнала переворота, что приводит к потерям.

  2. Риск неясного тренда: EMA не работает хорошо, когда нет ясного тренда.

  3. Риск оптимизации: параметры RSI и EMA оказывают большое влияние на производительность.

  4. Риск переоборудования: преследование производительности во время оптимизации может привести к переоборудованию.

  5. Риск переоценки: Слишком частые сигналы реверсии приводят к чрезмерной торговле.

Усовершенствования

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

  1. Оцените качество акций: применяйте стратегию только к акциям высокого качества на основе фундаментальных данных.

  2. Включить другие индикаторы: добавить MACD, KD и т. д. для подтверждения сигналов обворота и повышения надежности.

  3. Динамическая корректировка параметров: динамическая адаптация параметров RSI и EMA на основе меняющихся рыночных условий.

  4. Оптимизируйте время входа: отрегулируйте правила входа, чтобы дождаться подтверждения отмены.

  5. Стратегия получения прибыли: Установите соответствующие уровни получения прибыли, чтобы избежать возвращения прибыли.

  6. Учитывайте затраты на транзакции: Оцените влияние скольжения и комиссионных.

  7. Подумайте о волатильности: сосредоточьтесь только на высоковолатильных акциях, чтобы сделать стратегию более надежной.

Заключение

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


/*backtest
start: 2022-10-01 00:00:00
end: 2023-10-07 00:00:00
period: 2d
basePeriod: 1d
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/
// © jocker.soad

//@version=4
// strategy("My Script", overlay=true, initial_capital=10000, default_qty_value=100)
min = input(title="Valor minimo de entrada", defval=25)
qtdAtivos = input(title="Quantidade de ações", defval=1)

// overBuyLine = hline(80)
// overSellLine = hline(min)

var comprado = false
var valorComprado = 0.0
var qtdDiasComprado = 0
var valorLucro = 0.0

valueRsi = rsi(close, 2)
valueSma = sma(close, 200)
valueEma = ema(close, 200)
lastHighPrice = high[2]

buyValidation = valueRsi <= min
sellValidation = close >= lastHighPrice



// plot(lastHighPrice, trackprice=true, offset=-99999, color=color.olive, linewidth=3, style=plot.style_area)
// plot(valueRsi)
// plot(valueSma)
// plot(valueEma)
// plotshape(sellValidation, style=shape.triangledown, color=color.blue)
// plotshape(comprado, style=shape.triangledown, color=color.blue)

startDate = input(title="Inicio Dia", type=input.integer, defval=1, minval=1, maxval=31)
startMonth = input(title="Inicio Mes", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Inicio Ano", type=input.integer, defval=2018, minval=1800, maxval=2100)

endDate = input(title="Final Dia", type=input.integer, defval=1, minval=1, maxval=31)
endMonth = input(title="Final Mes", type=input.integer, defval=12, minval=1, maxval=12)
endYear = input(title="Final Ano", type=input.integer,  defval=2020, minval=1800, maxval=2100)

inDateRange = true

if inDateRange

    if close >= valueEma
    
        if comprado == false and buyValidation
            qtdDiasComprado := 0
            comprado := true
            valorComprado := close
            strategy.order("buy", true, qtdAtivos, when=buyValidation)
        
        if sellValidation and comprado == true
            comprado := false
            valorLucro := valorLucro + (close - valorComprado)
            valorComprado := 0
            strategy.order("sell", false, qtdAtivos, when=sellValidation)
        
        if comprado == true and sellValidation == false
            qtdDiasComprado := qtdDiasComprado + 1

// plot(valorLucro, color=color.lime)




Больше