Индикатор TSI с двойным скользящим окном Momentum


Дата создания: 2024-01-08 11:20:35 Последнее изменение: 2024-01-08 11:20:35
Копировать: 1 Количество просмотров: 654
1
Подписаться
1617
Подписчики

Индикатор TSI с двойным скользящим окном Momentum

Обзор стратегии

Эта стратегия называетсяДвигательная двойная скользящая витринаОсновная идея этой стратегии заключается в том, чтобы использовать двойные скользящие окна EMA для сглаживания ценовых изменений, а затем, в сочетании с изменениями в направлении тенденции, создать динамический показатель, отражающий рыночную покупательскую силу, то есть показатель TSI, и использовать его в качестве торгового сигнала для принятия решений о покупке и продаже.

2. Принципы стратегии

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

Сначала рассмотрим изменение цены в единицах:

pc = change(price)

Затем используйте двойные слайдеры для двойного сглаживания ценовых изменений:

double_smoothed_pc = double_smooth(pc, long, short)

Пересчитайте абсолютные значения изменения цены, используя двойные скользящие окна для двойного сглаживания:

double_smoothed_abs_pc = double_smooth(abs(pc), long, short)

Наконец, используя изменение цены после сглаживания, разделенное на абсолютные значения изменения цены после сглаживания, получается показатель ТСИ, отражающий силу купли-продажи:

tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)

Установка длинных и коротких оконных периодов различной длины позволяет отфильтровывать до некоторой степени краткосрочный рыночный шум, чтобы показатель TSI лучше отражал силу покупок и продаж в среднесрочных и долгосрочных тенденциях. При пересечении его движущейся средней по TSI появляются сигналы покупки; при пересечении его движущейся средней по TSI появляются сигналы продажи.

Третье: стратегические преимущества.

  1. Использование двойного скользящего окна эффективно фильтрует шум краткосрочного рынка, что делает реакцию индикатора более точной
  2. Расчет ценовых изменений также выполнен с двойным сглаживанием, что делает индикатор TSI более стабильным и надежным.
  3. Применение пропорций изменения цен к абсолютным значениям изменения цен, автоматическая стандартизация, более сопоставимая
  4. Анализ направления и интенсивности ценовых изменений в качестве качественных показателей для принятия торговых решений
  5. Настройка различных параметров позволяет регулировать чувствительность индикатора по мере необходимости

Стратегические риски

  1. При длительном колебании рынка TSI может подавать ошибочные сигналы
  2. Неправильная настройка параметров также влияет на качество индикатора и сигнала
  3. Несмотря на наличие двойного скользящего окна, индикатор чувствителен к шуму краткосрочного рынка
  4. При слишком большом разрыве в длинном или коротком окне индикаторы и сигналы могут задерживаться

Оптимизация может быть достигнута путем корректировки параметров окна и соответствующего сокращения средней длины сигнала; при рыночных колебаниях торговля может быть временно приостановлена для контроля риска.

Пятое: оптимизация

  1. Тестирование различных комбинаций параметров длинных и коротких оконных периодов для поиска оптимальных параметров
  2. Попробуйте другие типы скользящих средних, например, линейные средние.
  3. Увеличение гладкости показателей, создание тройных или многократных скользящих окон
  4. В сочетании с другими вспомогательными показателями, оптимизировать выбор точек продажи
  5. Установка стратегии стоп-лосса, строгий контроль за единичными потерями

6. Заключение

Эта стратегия основана на двойном сглаживании, рассчитывающем динамический индикатор ТСИ, отражающий силы покупки и продажи, двойной фильтр шума, изменения изменения цены также делают двойной сглаживание, индикатор более стабилен и надежный; использование стандартизированного соотношения, имеет сопоставимость; индикатор объединяет направление и силу изменения цены в качестве высококачественного сигнала; чувствительность индикатора может быть свободно контролирована с помощью параметров. В случае оптимизации параметров и контроля риска, это очень практичный выбор количественной стратегии торговли.

Исходный код стратегии
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("True Strength Indicator BTCUSD 2H", shorttitle="TSI BTCUSD 2H",initial_capital=1000, commission_value=0.2, 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="120" )
long = input(title="Long Length",  defval=25)
short = input(title="Short Length",  defval=13)
signal = input(title="Signal Length",  defval=13)

length = input(title="Период",  defval=300)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"

price = request.security(syminfo.tickerid,resCustom,close)


double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
tsi2=ema(tsi_value, signal)
plot(tsi_value, color=lime,linewidth=2)
plot(tsi2, color=red,linewidth=2)

hline(30, title="Zero")
hline(50, title="Zero",linewidth=2)
hline(70, title="Zero")

buy = crossover(tsi_value, tsi2)
sell = crossunder(tsi_value, tsi2)

if(buy)
    strategy.entry("BUY", strategy.long, when = window())
if(sell)
    strategy.entry("SELL", strategy.short, when = window()) 

//greentsi =tsi_value
//redtsi = tsi2

//bgcolor( greentsi>redtsi and rsiserie > 50 ? lime : na, transp=90)
//bgcolor( greentsi<redtsi and rsiserie < 50 ? 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 ? lime : na, transp=60)
//bgcolor( rsiserie < 30  ? red : na, transp=60)