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