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


Дата создания: 2023-12-20 15:05:05 Последнее изменение: 2023-12-20 15:05:05
Копировать: 0 Количество просмотров: 666
1
Подписаться
1621
Подписчики

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

Обзор

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

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

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

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

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

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

  1. Дополнительная установка стоп-ложа, которая позволяет ограничить одноразовые убытки и блокировать прибыль
  2. Интегрированный модуль вероятности, чтобы избежать рынка с низкой вероятностью прибыли vrf
  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)