Эта стратегия использует индикатор накопленного RSI для выявления тенденций и принимает решения о покупке и продаже, когда накопленное значение RSI проходит через ключевые пороговые уровни.
Стратегия основана в первую очередь на накопительном индикаторе RSI для принятия торговых решений. Кумулятивный индикатор RSI - это накопление значений RSI.
Когда индикатор Кумулятивного RSI пересекает верхнюю рельсу полосы Боллинджера, будет открыта длинная позиция. Когда Кумулятивный RSI пересекает нижнюю рельсу полосы Боллинджера, открытая позиция будет закрыта. Рельсы полосы Боллинджера динамически рассчитываются на основе исторических данных за многие годы.
Дополнительно добавлен вариант фильтра тренда. Долгие сделки будут открыты только тогда, когда цена выше 100-дневной скользящей средней, то есть она находится в канале восходящего тренда. Этот фильтр избегает ошибочных сделок во время колебаний рынка.
Стратегия накопительного RSI имеет плавный логический поток и точно определяет средне- и долгосрочные тенденции, фильтруя с помощью накопительного RSI и добавляя суждение о тренде. Результаты бэкстеста исключительны за последнее десятилетие.
/*backtest start: 2023-09-26 00:00:00 end: 2023-10-26 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/ // @version=5 // Author = TradeAutomation strategy(title="Cumulative RSI Strategy", shorttitle="CRSI Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_contract, commission_value=.0035, slippage = 1, margin_long = 75, initial_capital = 25000, default_qty_type=strategy.percent_of_equity, default_qty_value=110) // Cumulative RSI Indicator Calculations // rlen = input.int(title="RSI Length", defval=3, minval=1) cumlen = input(3, "RSI Cumulation Length") rsi = ta.rsi(close, rlen) cumRSI = math.sum(rsi, cumlen) ob = (100*cumlen*input(94, "Oversold Level")*.01) os = (100*cumlen*input(20, "Overbought Level")*.01) // Operational Function // TrendFilterInput = input(false, "Only Trade When Price is Above EMA?") ema = ta.ema(close, input(100, "EMA Length")) TrendisLong = (close>ema) plot(ema) // Backtest Timeframe Inputs // startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31) startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12) startYear = input.int(title="Start Year", defval=2010, minval=1950, maxval=2100) endDate = input.int(title="End Date", defval=1, minval=1, maxval=31) endMonth = input.int(title="End Month", defval=1, minval=1, maxval=12) endYear = input.int(title="End Year", defval=2099, minval=1950, maxval=2100) InDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // Buy and Sell Functions // if (InDateRange and TrendFilterInput==true) strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os) and TrendisLong, comment="Buy", alert_message="buy") strategy.close("Long", when = ta.crossover(cumRSI, ob) , comment="Sell", alert_message="Sell") if (InDateRange and TrendFilterInput==false) strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os), comment="Buy", alert_message="buy") strategy.close("Long", when = ta.crossover(cumRSI, ob), comment="Sell", alert_message="sell") if (not InDateRange) strategy.close_all()