Стратегия накопленного прорыва RSI

Автор:Чао ЧжанДата: 2023-10-27 11:20:50
Тэги:

img

Обзор

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

Логика стратегии

Стратегия основана в первую очередь на накопительном индикаторе RSI для принятия торговых решений. Кумулятивный индикатор RSI - это накопление значений RSI.

Когда индикатор Кумулятивного RSI пересекает верхнюю рельсу полосы Боллинджера, будет открыта длинная позиция. Когда Кумулятивный RSI пересекает нижнюю рельсу полосы Боллинджера, открытая позиция будет закрыта. Рельсы полосы Боллинджера динамически рассчитываются на основе исторических данных за многие годы.

Дополнительно добавлен вариант фильтра тренда. Долгие сделки будут открыты только тогда, когда цена выше 100-дневной скользящей средней, то есть она находится в канале восходящего тренда. Этот фильтр избегает ошибочных сделок во время колебаний рынка.

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

  • Эффективно отфильтровывать шум и улавливать средне- и долгосрочные тенденции с использованием кумулятивного RSI
  • Избегайте необоснованных сделок с помощью фильтра тренда
  • Использование динамических уровней отсчета вместо фиксированных для принятия решений
  • Высококонфигурируемые параметры для корректировки на основе различных рынков
  • Выдающиеся результаты обратных тестов за 10 лет, значительно превосходящие результаты покупки и хранения

Риски и улучшения

  • Решения, основанные исключительно на одном показателе, могут добавлять другие показатели или фильтры.
  • Фиксированный высокий коэффициент кредитного плеча, может корректироваться в зависимости от привлечения средств
  • Только длинные сделки, могут смотреть на возможности короткого.
  • Оптимизировать комбинации параметров, которые значительно различаются на разных рынках
  • Обогащение условий выхода со стоп-лосом, движением стоп-лоса и т.д.
  • Подумайте о сочетании с другими стратегиями для достижения синергетических эффектов

Резюме

Стратегия накопительного 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()

Больше