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

Re: Как задавать и определять временные интервалы и тайм-фреймы в индикаторе

Добавлено: 17 май 2016, 18:34
VDV
Последний вопрос по данной теме, или скорее просьба, написать простенький демонстрационный индикатор, который содержит в себе, то что не дают на курсах (вебинарах).
Суть индикатора:
1. Необходимо найти среднюю цену по инструменту за предыдущий период 1-3 дня, пересчитать ее для текущего ТФ графика и нарисовать ее в виде горизонтали в окне цены.
2. Необходимо найти средний объем за предыдущий период 1-3 дня, пересчитать его для текущего ТФ графика и нарисовать его в виде горизонтали в окне Объемов.
3. Обе горизонтали должны рассчитываться и перерисовываться для текущего ТФ графика.

По сути просто и наглядно. Идея именно в том, что бы взять предыдущий день-два-три, который будет получен в текущем ТФ графика, и на их основе рассчитать среднее. Формула расчета не принципиальна. Проблема в том, что другой ТФ выбираться при вызове индикатора и передачи ряда не может.

Только как будет отрабатываться левая граница полученного ряда?
Насколько она будет соответствовать реальности?

Может быть есть исходный код готового Индикатора похожего на описанный вариант, простой для понимания и наглядный, что бы визуально оценить его правдоподобность?

.

Re: Как задавать и определять временные интервалы и тайм-фреймы в индикаторе

Добавлено: 19 май 2016, 10:51
evge
VDV писал(а):Может быть есть исходный код готового Индикатора похожего на описанный вариант, простой для понимания и наглядный, что бы визуально оценить его правдоподобность?


Last3D (Last Price) – уровень последней цены за 3 дня

и пример

Last6D от ox

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

function Initialize()
{
IndicatorName = "Last6D";   
AddInput("Input", Inputs.Candle);
PriceStudy = true;   
AddParameter("NeedBars", 520, 1);
AddGlobalVariable("ListClose", Types.DoubleList);
AddGlobalVariable("ListHigh", Types.DoubleList);
AddGlobalVariable("ListLow", Types.DoubleList);
AddGlobalVariable("ListOpen", Types.DoubleList);

AddGlobalVariable("High", Types.Double, 0.0);
AddGlobalVariable("Low", Types.Double, 100000000000);

AddSeries("Last", DrawAs.Line, Color.Red);
AddLevel(0, Color.Blue, LineStyles.Solid, 1, "Last");
AddLevel(0, Color.Blue, LineStyles.DashBig, 1, "Last");
AddLevel(0, Color.Blue, LineStyles.DashBig, 1, "Last");

AddLevel(0, Color.Green, LineStyles.DashSmall, 1, "Last");
AddLevel(0, Color.Green, LineStyles.DashSmall, 1, "Last");
AddLevel(0, Color.Green, LineStyles.DashSmall, 1, "Last");

AddLevel(0, Color.Coral, LineStyles.DashSmall, 1, "Last");
AddLevel(0, Color.Coral, LineStyles.DashSmall, 1, "Last");
AddLevel(0, Color.Coral, LineStyles.DashSmall, 1, "Last");

AddLevel(0, Color.Gray, LineStyles.DashSmall, 1, "Last");
AddLevel(0, Color.Gray, LineStyles.DashSmall, 1, "Last");
AddLevel(0, Color.Gray, LineStyles.DashSmall, 1, "Last");
}

function Evaluate()
{
// AlfaDirect. 2016. OX

if ( BarDate() != BarDate(-1) && CurrentIndex != 0 )
{
ListClose.Add(Input.Close[1]);
ListOpen.Add(Input.Open[0]);
ListHigh.Add(High);
ListLow.Add(Low);

High = Input.High[0];
Low = Input.Low[0];
}
else
{
if (Input.High[0] > High)
High = Input.High[0];
if (Input.Low[0] < Low)
Low = Input.Low[0];
}

if (CurrentIndex == MaxIndex)
{

for (var i = 0; i < 3; i++)
{
Levels[i].Level = ListClose[ListClose.Count - i - 1];
Levels[i+3].Level = ListHigh[ListHigh.Count - i - 1];
Levels[i+6].Level = ListLow[ListLow.Count - i - 1];
Levels[i+9].Level = ListOpen[ListOpen.Count - i - 1];
if ( i >= 2 )
break;
}

}

}