Общие вопросы по разработке > Вопрос по индикатору, разработанному Евгением.

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

Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение Den » 16 апр 2020, 18:47

Добрый день, друзья !
Вопрос , наверное , прежде всего к Евгению, но может кто подскажет.
Как-то давно Евгений помог разработать индикатор, подсчитывающий разницу между сигналами за весь день.

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

На минутах бары за день входят в видимую область с начала дня, на секундах уже нет

ПОЧЕМУ?


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

if (BarTime() >= AsTime(10,00,0) && BarTime() <= AsTime(23,50,0))

не помогает

код показывает одинаково на любых MY.indicator

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

function Initialize()
{
IndicatorName = "1";
AddInput("Input", Inputs.Candle);
AddSeries("D", DrawAs.Custom, Color.Green, false);
AddSeries("U", DrawAs.Custom, Color.Red, false);
AddShadowSeries("Sum", DrawAs.Custom, Color.DarkSlateGray);
AddSeries("SUp", DrawAs.Custom, Color.Lime, false);
AddSeries("SDown", DrawAs.Custom, Color.HotPink, false);

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

PriceStudy = false;

}

function Evaluate()
{

var I =  MY.индикатор(Input, 0,0,0,1);
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 = CurrentIndex - x; Ly = I["L"][x]; }
   if (I["H"][x] > 0) { Hx = CurrentIndex - x; Hy = I["H"][x]; }
   if (Lx != 0 && Hx != 0) break;
}

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

if (BarDate(0) != BarDate(1))
{
   SumUp = 0; SumDown = 0;
}

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

if (HX != Hx || LX != Lx)
{
   HX = Hx;
   LX = Lx;
   if (Hx > Lx) SumUp += Hy - Ly;
   if (Hx < Lx) SumDown += Hy - Ly;
}

SUp[0] = SumUp;
SDown[0] = SumDown;
Sum[0] = (SumDown + SumUp)*100;

}


Вложения
НЕВЕРНО.jpg
ВЕРНО.jpg

BugsDigger
Сообщения: 341
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 42 раза

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение BugsDigger » 17 апр 2020, 10:13

Вызыват сомнеия цикл

for (var x = 0; x < 999; x++)

Почему фиксированное значение?
Что хорошего будет при CurrentIndex<999?

На секундах будет не от начала дня, а за предыдущие 1000 секунд, т.е. менее 20 минут.
Для миннут период заденет начало дня, если сессия длится не более 16 часов с копейками (16*60=960, т.е. всяко, т.к. сессии у нас заведомо не такие длинные).

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

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение Den » 17 апр 2020, 10:17

Думаете стоит увеличить значение?

В общем , при значении 999 он показывает не за 20 минут, а почти за весь день, обрывается где-то в 22-23 часа ,если ТФ S30

От М1 уже всё проходит.

UPD увеличение значения не помогло - обрыв расчёта на S30 в 22:45

BugsDigger
Сообщения: 341
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 42 раза

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение BugsDigger » 17 апр 2020, 11:02

Посчитайте, сколько это выходит баров (секунд) назад.
Еще в терминале предыстория (если не ошибаюсь) считается не более, чем 5000 баров назад (1,5 часа на секундах).
Можете попробовать при вызове сохранить в лог число MaxIndex (0<=CurrenеIndex<=MaxIndex), чтобы узнать текущую длину предыстории, доступную для расчета.

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

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение Den » 17 апр 2020, 11:17

Он как минимум 47.000 секунд показывает верно (до 22:30 - 23:00), значит история сохраняется

BugsDigger
Сообщения: 341
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 42 раза

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение BugsDigger » 17 апр 2020, 12:05

Но вы переваливаете через начало суток, соответственно попадаете в предыдущие, и опятть надо дойти до их начала, а этого, похоже, не получается.

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

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение Den » 17 апр 2020, 12:35

Тут что-то простое, видимо, но не пойму что.

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

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение Den » 20 апр 2020, 17:22

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

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

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение evge » 21 апр 2020, 06:22

попробуйте внутри этого цикла поставить проверку на время бара по индексу

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

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


заменить на

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

for (var x = 0; x < 999; x++)
{
   if (BarDate(0) != BarDate(x)) break; //если это бар другого дня завершаем цикл
   if (I["L"][x] > 0) { Lx = CurrentIndex - x; Ly = I["L"][x]; }
   if (I["H"][x] > 0) { Hx = CurrentIndex - x; Hy = I["H"][x]; }
   if (Lx != 0 && Hx != 0) break;
}
никогда такого не было и вот опять

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

Re: Вопрос по индикатору, разработанному Евгением.

Непрочитанное сообщение Den » 21 апр 2020, 11:13

evge, спасибо за ответ, но это условие

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

if (BarDate(0) != BarDate(x)) break;

не помогло, с ним он рассчитывает неверно с самого начала дня.
Вариант без этого условия (предыдущий) рассчитывал верно примерно до 22-30, после происходил обрыв (на S-ТФ).


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

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

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