Общие вопросы по разработке > Как суммировать показания за день?

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

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

Непрочитанное сообщение Den » 20 окт 2017, 13:08

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

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


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

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 20 окт 2017, 13:09

:( ну как так можно?

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

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];
}
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 20 окт 2017, 13:11

попробуйте заменить на мой вариант кусок этого кода, что-то поменяется в вашем индикаторе???
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 20 окт 2017, 13:15

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 20 окт 2017, 13:17

более того? тот код можно ещё упросить намного

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

if ( lastHVal.X > lastLVal.X )
{
D = lastHVal.Y - lastLVal.Y);
Summa += D[0];
}
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 20 окт 2017, 13:29

Вот вам код! проверьте как он работает в сравнении с тем что вы мне в первых сообщении давали.
Пока никакой суммы тут нет. Пока лишь подтверждения жду, что этот код дает 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);

}
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

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

Непрочитанное сообщение Den » 20 окт 2017, 13:42

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

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 20 окт 2017, 14:26

т.к. код "индикатора" вызываемого из этого индикатора гистограмм никто не предоставил. (см. термин телепатия)

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

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

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();

}
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 352
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

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

Непрочитанное сообщение Den » 20 окт 2017, 14:34

почему не давал? Я же дал индикатор название "1"

ругается при компилировании
Вложения
23.png
23.png (13.29 КБ) 15213 просмотров

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

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

Непрочитанное сообщение evge » 20 окт 2017, 14:37

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

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

Может у нас разные версии АД4?
никогда такого не было и вот опять


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 18 гостей