Была мысль отображения индикатора RSI с 2 часовым таймфреймом на 1 часовом графике инструмента (т.е. вышестоящий таймфрейм на нижестоящем).
Поддержка сколько смогла помогла.
Спасибо и на этом, но есть существенный недостаток - прорисовывается индикатор только в начале первого часа 2-х часового таймфрейма...
Естественно, сам перепробовал многое, может быть и нет решения, а может и КПД не хватает.
Заранее спасибо!!!
Код: Выделить всё
function Initialize()
{
// Область определения параметров индикатора
// Обязательные параметры:
IndicatorName = "RSI_12"; // Создаем индикатор с именем Power
PriceStudy = false; // Рисовать в отдельном окне (ниже графика цены)
AddInput("Input", Inputs.Price); // Input - входной ряд цена закрытия бара
AddParameter("Period", 14, 2);
AddSeries("RSI2", DrawAs.Line, Color.Red);
AddGlobalVariable("oldPos", Types.Double, 0.0);
AddGlobalVariable("oldNeg", Types.Double, 0.0);
AddGlobalVariable("oldPrice", Types.Double, 0.0);
AddLevel(30, Color.Gray, "RSI2");
AddLevel(70, Color.Gray, "RSI2");
}
function Evaluate()
{
// AlfaDirect. 2014.
// RSI (Relative Strength Index) - индекс относительной силы
// Автор - Уэллс Уайлдер (Welles Wilder).
if (CurrentIndex < 1)
{
RSI2 = 0.0;
oldPos = 0.0;
oldNeg = 0.0;
oldPrice = Input[0];
}
else
{
var t = BarTime();
// Для Акций – начало бара 11 конец в 12 – начало бара 13 конец в 14
if (t == AsTime(11,0,0) || t == AsTime(13,0,0) || t == AsTime(15,0,0) || t == AsTime(17,0,0)
|| t == AsTime(18,0,0))
{
var rel = Input[0] - oldPrice;
oldPrice = Input[0];
var sump = 0.0;
var sumn = 0.0;
if (rel > 0)
sump = rel;
else
sumn =-rel;
var positive = (oldPos*(Period - 1.0) + sump)/Period;
var negative = (oldNeg*(Period - 1.0) + sumn)/Period;
oldPos = positive;
oldNeg = negative;
if (negative == 0.0)
RSI2 = 0.0;
else
RSI2 = 100.0 - 100.0 / (1.0 + positive/negative);
}
}
}