Эта стратегия определяет тенденции на рынке биткоина путем расчета индекса истинной силы (TSI) и вводит длинные / короткие позиции, отфильтрованные индикатором RSI, для реализации алгоритмической торговли биткоином.
Ядром этой стратегии является индекс истинной силы (TSI). TSI измеряет абсолютную величину и направление изменений цен путем двойного сглаживания процентного изменения цен, тем самым определяя абсолютную силу движений цен вверх и вниз.
Когда TSI пересекает свою сигнальную линию tsi2, генерируется длинный сигнал. Когда TSI пересекается ниже tsi2, генерируется короткий сигнал. Кроме того, стратегия фильтрует сигналы TSI с RSI - принимая только длинные сигналы, когда RSI выше 50 и короткие сигналы, когда RSI ниже 50, чтобы избежать некоторых ложных сигналов.
Преимущества этой стратегии включают:
Риски этой стратегии включают:
Отставание эмиссии и эффект фильтрации могут быть уменьшены путем смягчения правил фильтрации RSI и сокращения периодов EMA. Для строгого контроля рисков по торговле должна использоваться надлежащая стратегия стоп-лосса.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать параметры TSI и RSI для поиска наилучшей комбинации.
Ввести больше технических показателей для построения многофакторной модели.
Оптимизируйте правила входа, чтобы избежать длинного в нисходящем тренде и короткого в восходящем.
Оптимизируйте стратегии стоп-лосса, такие как стоп-лосс отслеживания, стоп-лосс на основе времени, стоп-лосс прорыва и т. Д.
Оптимизируйте правила выхода, чтобы избежать преждевременного или позднего выхода.
Оптимизируйте торговые продукты, торговые сессии, чтобы сосредоточиться на наиболее эффективных.
Эта стратегия идентифицирует краткосрочные тенденции биткойна с помощью индекса истинной силы и фильтрует сигналы с помощью RSI для алгоритмической торговли биткойнами. Она имеет преимущество чувствительного улавливания тенденций и фильтрации шума, но также имеет некоторые отстающие проблемы и торговые риски. Многогранные оптимизации могут еще больше улучшить эффективность стратегии для разработки надежного экспертного советника по торговле биткойнами.
/*backtest start: 2022-09-30 00:00:00 end: 2023-10-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // strategy("True Strength Indicator BTCUSD 15p", shorttitle="TSI BTCUSD 15p",initial_capital=1000, commission_value=0.15, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity) //BASED ON True Strength Indicator MTF resCustom = input(title="Timeframe", defval="15" ) long = input(title="Long Length", defval=25) short = input(title="Short Length", defval=13) signal = input(title="Signal Length", defval=13) price = request.security(syminfo.tickerid,resCustom,close) double_smooth(src, long, short) => fist_smooth = ta.ema(src, long) ta.ema(fist_smooth, short) pc = ta.change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) tsi2=ta.ema(tsi_value, signal) plot(tsi_value, color=color.lime,linewidth=2) plot(tsi2, color=color.red,linewidth=2) rsiserie = ta.rsi(price,7) cciserie = ta.cci(price,14) stochserie = ta.stoch(price,14,3,3) plot(rsiserie,color=color.purple) hline(30, title="Zero") hline(50, title="Zero",linestyle=hline.style_solid, linewidth=2) hline(70, title="Zero") buy = ta.crossover(tsi_value, tsi2) //and rsiserie[1]<25 //and cciserie<-100 and stochserie<20 sell = ta.crossunder(tsi_value, tsi2) //and rsiserie[1]>85 //and cciserie>100 and stochserie>80 alertcondition(buy, title='TSI system', message='Buy signal at!' ) alertcondition(sell, title='TSI system', message='Sell signal at!' ) strategy.entry("BUY", strategy.long, 1, when = buy) strategy.entry("SELL", strategy.short, 1, when = sell ) greentsi =tsi_value redtsi = tsi2 bgcolor( greentsi>redtsi and rsiserie > 50 ? color.lime : na, transp=90) bgcolor( greentsi<redtsi and rsiserie < 50 ? color.red : na, transp=90) yellow1= redtsi > greentsi and rsiserie > 50 yellow2 = redtsi < greentsi and rsiserie < 50 bgcolor( yellow1 ? yellow : na, transp=80) bgcolor( yellow2 ? yellow : na, transp=50) bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70) bgcolor( yellow2 and yellow2[2] ? yellow : na, transp=70) bgcolor( rsiserie > 70 ? color.lime : na, transp=60) bgcolor( rsiserie < 30 ? color.red : na, transp=60)