Стратегия повышения вероятности RSI

Автор:Чао Чжан, Дата: 2023-12-20 15:05:05
Тэги:

img

Обзор

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

Принципы

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

Ключ в том, что мы интегрировали модуль оценки вероятности. Этот модуль рассчитывает прибыльный процент длинных сделок в последние периоды (определенный параметром обратной связи). Он позволяет входить только в случае, если вероятность недавней прибыльной торговли больше или равна 51%. Это избегает многих потенциальных проигрышных сделок.

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

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

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

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

В этой стратегии все еще есть некоторые риски:

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

Решения:

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

Руководство по улучшению

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

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

Резюме

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


/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
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/
// © thequantscience

//@version=5
strategy("Reinforced RSI",
     overlay = true,
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100,
     pyramiding = 1,
     currency = currency.EUR, 
     initial_capital = 1000,
     commission_type = strategy.commission.percent, 
     commission_value = 0.07)

lenght_rsi = input.int(defval = 14, minval = 1, title = "RSI lenght: ")
rsi = ta.rsi(close, length = lenght_rsi)

rsi_value_check_entry = input.int(defval = 35, minval = 1, title = "Oversold: ")
rsi_value_check_exit = input.int(defval = 75, minval = 1, title = "Overbought: ")

trigger = ta.crossunder(rsi, rsi_value_check_entry)
exit = ta.crossover(rsi, rsi_value_check_exit)

entry_condition   = trigger 
TPcondition_exit  = exit

look = input.int(defval = 30, minval = 0, maxval = 500, title = "Lookback period: ")

Probabilities(lookback) =>

    isActiveLong = false
    isActiveLong := nz(isActiveLong[1], false)
    isSellLong = false
    isSellLong := nz(isSellLong[1], false)

    int positive_results = 0
    int negative_results = 0

    float positive_percentage_probabilities = 0 
    float negative_percentage_probabilities = 0 

    LONG = not isActiveLong and entry_condition == true 
    CLOSE_LONG_TP = not isSellLong and TPcondition_exit == true

    p = ta.valuewhen(LONG, close, 0)
    p2 = ta.valuewhen(CLOSE_LONG_TP, close, 0)

    for i = 1 to lookback

	    if (LONG[i])
            isActiveLong := true
		    isSellLong := false

        if (CLOSE_LONG_TP[i])
	        isActiveLong := false
	        isSellLong := true

        if p[i] > p2[i]
            positive_results += 1
        else 
            negative_results -= 1 

	    positive_relative_probabilities = positive_results / lookback
	    negative_relative_probabilities = negative_results / lookback
	    positive_percentage_probabilities := positive_relative_probabilities * 100
	    negative_percentage_probabilities := negative_relative_probabilities * 100

    positive_percentage_probabilities
	
probabilities = Probabilities(look) 

lots = strategy.equity/close

var float e = 0 
var float c = 0 

tp = input.float(defval = 1.00, minval = 0, title = "Take profit: ")
sl = input.float(defval = 1.00, minval = 0, title = "Stop loss: ")

if trigger==true and strategy.opentrades==0 and probabilities >= 51
    e := close
    strategy.entry(id = "e", direction = strategy.long, qty = lots, limit = e) 
takeprofit = e + ((e * tp)/100)
stoploss = e - ((e * sl)/100)
if exit==true
    c := close 
    strategy.exit(id = "c", from_entry = "e", limit = c)
if takeprofit and stoploss 
    strategy.exit(id = "c", from_entry = "e", stop = stoploss, limit = takeprofit)

Больше