Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1230

Добавлено: evge » 20 окт 2017, 16:18

Тема: Re: Как суммировать показания за день?

Текст сообщения:

вообщем нельзя использовать метод GetLastValues, т.к. некорректно работает в АД4.

Он возвращает последние значения не от текущей точки расчета, а вообще последние значения за всю историю. Поэтому в любой точке истории он перерисовывает индикатор текущими значениями.

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

Вообщем это проблемный метод, использовать его не советую :)

Поэтому такое странное поведение получаем в индикаторе.

Вот код работающий. Можно сделать лучше было, но не было у меня времени. Чуть-чуть можно будет потом улучшить, перенеся в глоб. переменные Lx, Hx, Ly, Hy и поиск их сделать по другому в процессе обхода, а не поиск в истории. Будет и быстрее даже. Хотя и так нормально.

но пока так, вот примеры работы:

down-02.png
down-02.png (37.62 КБ) 18746 просмотров

down-01.png
down-01.png (35.83 КБ) 18752 просмотра


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

function Initialize()
{
IndicatorName = "A-DOWN_VIII";
AddInput("Input", Inputs.Candle);
AddSeries("D", DrawAs.Custom, Color.Green);
AddSeries("U", DrawAs.Custom, Color.Red);
AddShadowSeries("S", DrawAs.Custom, Color.Blue);

AddGlobalVariable("Sum", Types.Double, 0);
AddGlobalVariable("LX", Types.Long, 0);
AddGlobalVariable("HX", Types.Long, 0);

PriceStudy = false;
AddParameter("P", 2000, 1);
}

function Evaluate()
{

if (BarDate(0) != BarDate(1)) Sum = 0;

var I = MY.индикатор(Input);
var Lx = 0;
var Hx = 0;
var Ly = 0.0;
var Hy = 0.0;

for (var x = 0; x < 999; x++)
{
   if (I["L"][x] > 0) { Lx = x; Ly = I["L"][x]; }
   if (I["H"][x] > 0) { Hx = x; Hy = I["H"][x]; }
   if (Lx != 0 && Hx != 0) break;
}

if (Lx == 0 && Hx == 0 ) return;

if ( Lx > Hx )
   D[1] = Hy - Ly;
else
   U[1] = Hy - Ly;

if (HX != Hx || LX != Lx)
{
   HX = Hx;
   LX = Lx;
   Sum += Hy - Ly;
}

S[0] = Sum;

D.DrawHistogram(Color.Red, Line.Solid, 1, Color.Red, 50);
U.DrawHistogram(Color.Green, Line.Solid, 1, Color.Green, 50);
S.DrawHistogram();

}