Страница 1 из 1

TSI (True Strength Index) - индекс истинной силы

Добавлено: 26 окт 2017, 15:44
evge
Индикатор TSI (True Strength Index) - это дважды сглаженный Моментум. График в этом случае получается более плавным, поскольку резкие и незначительные изменения не учитываются.

Для построения необходим Momentum с периодом 1 и Momentum по модулю с периодом 1. т.е. разность между Close текущего и Close предыдущего бара и она же по модулю.

Формула

TSI = 100 * EMA(EMA(Momentum, First_R), Second_S) / EMA(EMA(|Momentum|, First_R), Second_S)

Параметры

First_R – период первого сглаживания EMA;
Second_S – интервал второго усреднения EMA.

Код индикатора можно собрать в 1 строку если бы был индикатор Momentum по модулю.
Поэтому для упрощения создано 2 индикатора. Недостающий Momentum по модулю и собственно сам индикатор TSI, основной код которого уместился в 1 строку.

Пример

TSI-01.png
TSI-01.png (40.71 КБ) 10874 просмотра


Код: Выделить всё

function Initialize()
{
IndicatorName = "MomentumR";
AddInput("Input", Inputs.Price);
AddParameter("Period", 20, 1);
PriceStudy = false;
AddSeries("Momentum", DrawAs.Line, Color.Coral);
AddLevel(0, Color.Gray, "Momentum");
}

function Evaluate()
{

// evge 26.10.2017 http://alfadirect4.ru

if (CurrentIndex <= Period)
   Momentum = 0.0;
else
   Momentum = Math.Abs(Input[0] - Input[Period]);
}


Код: Выделить всё

function Initialize()
{
IndicatorName = "TSI";
PriceStudy = false;
AddInput("I", Inputs.Candle);
AddSeries("TSI", DrawAs.Line, Color.Red);
AddParameter("First_R", 20);
AddParameter("Second_S", 30);
}

function Evaluate()
{

// evge 26.10.2017 http://alfadirect4.ru

TSI[0] = 100 * EMA(EMA(MOMENTUM(I.Close, 1), First_R), Second_S)[0] / EMA(EMA(MY.MomentumR(I.Close, 1), First_R), Second_S);
}


Скачать исходный текст

TSI.zip
(39.46 КБ) 969 скачиваний

Re: TSI (True Strength Index) - индекс истинной силы

Добавлено: 27 окт 2017, 21:18
evge
TSI с простой средней скользящей.

TSI-02.png
TSI-02.png (42.38 КБ) 10839 просмотров


Код: Выделить всё

function Initialize()
{
IndicatorName = "TSI";
PriceStudy = false;
AddInput("I", Inputs.Candle);
AddSeries("TSI", DrawAs.Line, Color.Red);
AddSeries("MA", DrawAs.Line, Color.Black);
AddParameter("First_R", 20, 1);
AddParameter("Second_S", 30, 1);
AddParameter("Period_MA", 10, 1);
AddGlobalVariable("SUM", Types.Double, 0.0);
}

function Evaluate()
{

// evge 27.10.2017 http://alfadirect4.ru

if (CurrentIndex >= Math.Max(Math.Max(First_R, Second_S), Period_MA))
{
   TSI[0] = 100 * EMA(EMA(MOMENTUM(I.Close, 1), First_R), Second_S)[0] / EMA(EMA(MY.MomentumR(I.Close, 1), First_R), Second_S);
   
   SUM += TSI[0] - TSI[Period_MA];

   MA[0] = SUM / Period_MA;   
} else
{
   TSI[0] = 0;
   MA[0] = 0;
}
   
}