Индикатор ТСИ "Двойные передвижные окна" импульса

Автор:Чао Чжан, Дата: 2024-01-08 11:20:35
Тэги:

img

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

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

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

Эта стратегия использует двойные скользящие экспоненциальные скользящие средние для расчета изменений цен.

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

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)

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

III. Преимущества стратегии

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

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

  1. Индикатор ТСОС может давать ложные сигналы, когда рынок имеет долгосрочные колебания
  2. Неправильные параметры также могут повлиять на качество показателей и сигналов
  3. Несмотря на наличие двойных скользящих окон, индикатор по-прежнему чувствителен к краткосрочному шуму рынка
  4. Когда разница между длинными и короткими периодами окна слишком велика, индикаторы и сигналы могут отставать

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

V. Направления оптимизации

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

VI. Резюме

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


/*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)

Больше