TenkanSen — короткая линия тренда, значения которой равны половине суммы самой высокой и низкой цены за короткий промежуток времени (Ts).
Линия TenkanSen трактуется как направление движения тренда. Причём, считается, что чем выше крутизна этой линии тем ярче выражен тренд.
KijunSen — среднее между максимум и минимум за средний промежуток времени (Tm).
KijunSen используется в качестве показателя движения рынка. Если цены выше неё, они, вероятнее будут продолжать расти и наоборот.
SenkouSpanA — среднее между Tenkan и Kijun, сдвинутое вперёд на средний временной промежуток (Tm).
SenkouSpanB — среднее между максимумом и минимум за длинный промежуток времени (Tl), сдвинутое вперёд на средний промежуток времени (Tm).
Chikou — сдвинутое назад на средний промежуток времени (Tm) значение цены:
Облако — промежуток между Senkou A и Senkou B, показывающий волатильность рынка. Считается, что если цена находится в облаке, преобладает боковой тренд.
Типовые параметры
Ts = 9, Tm = 26, Tl = 52.
Автор: Санджин Ишимоку
Первоисточник: Wikipedia
Пример:
Исходный текст:
Код: Выделить всё
function Initialize()
{
IndicatorName = "Ichimoku";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("TenkanSen", DrawAs.Line, Color.Red);
AddSeries("KijunSen", DrawAs.Line, Color.Cyan);
AddSeries("SenkouSpanA", DrawAs.Custom, Color.Gray);
AddSeries("SenkouSpanB", DrawAs.Line, Color.Black);
// Должно соблюдаться: Ts = 9 << Tm = 26 << Tl = 52;
AddParameter("Tl", 52, 2);
AddParameter("Tm", 26);
AddParameter("Ts", 9);
}
function Evaluate()
{
// AlfaDirect. 2014. OX.
// ICHIMOKU. Описание по wikipedia.
var Max = 0.0;
var Min = 1000000000000.0;
var T = 0.0;
var K = 0.0;
var i = 0;
if (CurrentIndex < Tm+Tl)
{
TenkanSen = Input.Close[0];
KijunSen = Input.Close[0];
SenkouSpanA = Input.Close[0];
SenkouSpanB = Input.Close[0];
}
else
{
for (i = 0; i <= Tm+Tl; i++)
{
if (Input.High[-i] > Max)
Max = Input.High[-i];
if (Input.Low[-i] < Min)
Min = Input.Low[-i];
if (i == Ts)
TenkanSen = (Max + Min) / 2.0;
if (i == Tm)
{
KijunSen = (Max + Min) / 2.0;
Max = 0.0;
Min = 1000000000000.0;
}
if (i == Tm + Ts)
T = (Max + Min)/2;
if (i == Tm + Tm)
K = (Max + Min)/2;
} // end for
SenkouSpanA = (T + K) / 2.0;
SenkouSpanB = (Max + Min) / 2.0;
SenkouSpanA.DrawChannel( SenkouSpanB );
} // end if
}