Страница 3 из 6

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

Добавлено: 20 окт 2017, 13:08
Den
да не, вы уже передёргиваете, я ж неоднократно написал, что суммироваться должны значения разницы между вершинами.
Естественно они не каждый новый бар - такого не бывает.

Евгений , вы верно написали, что
на каждом баре дня имеется значение вашего индикатора, оно попадает в общую сумму


тут нужно ему поставить условие , что если число баров > 1, то сумма = сумме первого бара от экстремума и так до следующего экстремума.

Как это задать ему?

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

Добавлено: 20 окт 2017, 13:09
evge
:( ну как так можно?

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

if (( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == (MY.индикатор(Input).GetLastValues ("H", 1)[0].Y) ) || ( (lastHVal.X > lastLVal.X ? lastHVal.Y : lastLVal.Y) == (MY.индикатор(Input).GetLastValues ("L", 1)[0].Y) ))

{

D = (MY.индикатор(Input).GetLastValues ("H", 1)[0].Y) - (MY.индикатор(Input).GetLastValues ("L", 1)[0].Y);

Summa += D[0];
}


Это ваш код!

я даже не проверяя в АД4 уже сомневаюсь в его правильности!

я не понимаю логики этого условия. Оно равноценно следующему коду

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

if ( lastHVal.X > lastLVal.X )
{
D = (MY.индикатор(Input).GetLastValues ("H", 1)[0].Y) - (MY.индикатор(Input).GetLastValues ("L", 1)[0].Y);
Summa += D[0];
}

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

Добавлено: 20 окт 2017, 13:11
evge
попробуйте заменить на мой вариант кусок этого кода, что-то поменяется в вашем индикаторе???

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

Добавлено: 20 окт 2017, 13:15
evge
тут получается, что прежде чем вам помочь посчитать сумму, нужно полностью изучить от и до код и исправить ваши ошибки в индикаторе, причём ошибки очень грубые.

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

Добавлено: 20 окт 2017, 13:17
evge
более того? тот код можно ещё упросить намного

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

if ( lastHVal.X > lastLVal.X )
{
D = lastHVal.Y - lastLVal.Y);
Summa += D[0];
}

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

Добавлено: 20 окт 2017, 13:29
evge
Вот вам код! проверьте как он работает в сравнении с тем что вы мне в первых сообщении давали.
Пока никакой суммы тут нет. Пока лишь подтверждения жду, что этот код дает 100% такой же результат, что и ваш "мегакод" :)

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

function Initialize()
{
IndicatorName = "A-DOWN_VIII";
AddInput("Input", Inputs.Candle);
AddShadowSeries("D", DrawAs.Custom, Color.Violet);
AddShadowSeries("U", DrawAs.Custom, Color.Lime);

PriceStudy = true;
AddParameter("P", 2, 1);
}

function Evaluate()
{

var lastLVal = MY.индикатор(Input).GetLastValues ("L", 1)[0];
var lastHVal = MY.индикатор(Input).GetLastValues ("H", 1)[0];

if ( lastHVal.X > lastLVal.X )
D = lastHVal.Y - lastLVal.Y;
else
U = lastHVal.Y - lastLVal.Y;

D.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);
U.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);

}

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

Добавлено: 20 окт 2017, 13:42
Den
Проверил
Да, ваш упрощенный код идентичен моему сельскому "мегакоду" :)

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

Добавлено: 20 окт 2017, 14:26
evge
т.к. код "индикатора" вызываемого из этого индикатора гистограмм никто не предоставил. (см. термин телепатия)

дописываю код, который может и не заработать, т.к. мне не на чем проверять.

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

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

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

PriceStudy = true;
AddParameter("P", 2, 1);
}

function Evaluate()
{

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

var lastLVal = MY.индикатор(Input).GetLastValues ("L", 1)[0];
var lastHVal = MY.индикатор(Input).GetLastValues ("H", 1)[0];

if ( lastHVal.X > lastLVal.X )
D = lastHVal.Y - lastLVal.Y;
else
U = lastHVal.Y - lastLVal.Y;

if (HX != lastHVal.X || LX != lastLVal.X)
{
   HX = lastHVal.X;
   LX = lastLVal.X;
   Sum += lastHVal.Y - lastLVal.Y;
}

S = Sum;

D.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);
U.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);
S.DrawHistogram();

}

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

Добавлено: 20 окт 2017, 14:34
Den
почему не давал? Я же дал индикатор название "1"

ругается при компилировании

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

Добавлено: 20 окт 2017, 14:37
evge
Индикатор, который 1 я попробовал переименовать в индикатор, но там ведь есть параметр а в индикаторе его вызываемом вы не передаете параметра. Почему? Так оно не компилирует (без передачи параметра), поэтому я и пришёл к выводу что индикаторе есть другой.

про ошибку, у меня всё компилируется.

Может у нас разные версии АД4?