Это простая долгосрочная стратегия, использующая индикатор RSI для определения уровней перекупленности и перепродажи. Мы улучшили ее, добавив стоп-лосс и прибыль и интегрировав модуль вероятности в подкрепление торговли только тогда, когда вероятность недавней прибыльной торговли больше или равна 51%. Это значительно улучшило эффективность стратегии, избегая потенциальных проигрышных сделок.
Стратегия использует индикатор RSI для оценки рыночных условий перекупленности и перепродажи. В частности, она длится, когда RSI пересекает нижний предел зоны перепродажи; и закрывает позицию, когда RSI пересекает верхний предел зоны перекупленности. Кроме того, мы устанавливаем коэффициенты стоп-лосса и прибыли.
Ключ в том, что мы интегрировали модуль оценки вероятности. Этот модуль рассчитывает прибыльный процент длинных сделок в последние периоды (определенный параметром обратной связи). Он позволяет входить только в случае, если вероятность недавней прибыльной торговли больше или равна 51%. Это избегает многих потенциальных проигрышных сделок.
В качестве стратегии повышения вероятности RSI она имеет следующие преимущества по сравнению с простыми стратегиями RSI:
В этой стратегии все еще есть некоторые риски:
Решения:
Стратегия может быть еще более оптимизирована в следующих аспектах:
Это простая стратегия 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)