Общие вопросы по разработке > Вопрос к evge

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

Вопрос к evge

Непрочитанное сообщение Den » 21 июл 2017, 20:26

Конкретно вопрос к evge, поскольку наврядли кто еще сможет подсказать.

Итак, как отметить сигнал индикатора в том месте,где он появился ВНУТРИ БАРА [0].

То есть фактически это GetValue(Last)

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

Re: Вопрос к evge

Непрочитанное сообщение evge » 21 июл 2017, 21:44

Это невозможно на текущий момент.

Попробую объяснить, может у меня получится донести.

Представьте график с барами.

Как будет работать отрисовка индикатора на таком графике?

0. Инициализируются параметры индикатора, глобальные переменные.

1. Берется бар очень далеко слева с текущим индексом (допустим 0) (CurrentIndex).
2. Данные этого бара передаются в индикатор под индексом серии 0, т.е. индикатор будет думать что этот далекий в истории бар имеет индекс 0 в серии!!! (это не тоже самое что CurrentIndex)
3. Для индикатора бар с индексом [1] (или -1 кому как удобно) [2] [3] и т.д. это бары которые были до него.
4. Все эти бары имеют только OHLC, Volume, VolumeBid, VolumeAsk, OpenInterest. Никаких данных внутри бара в этом отрисованном очень давно баре НЕТ
5. Для этого бара с индексом 0 выполняется код из Evaluate(), в котором вы естественно можете обратится к предыдущим данным истории указывая смещение назад [1..N] относительно этого бара.
6. Выбирается следующий бар из далекой истории с текущим индексом (CurrentIndex) больше на 1 и всё повторяется с пункта 2.
7. И так до самого последнего (свежего) бара на графике, на котором все действие и закончится.

Что происходит, когда последний бар ещё не отрисовался и меняется?

А происходит всё тоже самое, но с пункта 0, при каждом изменении активного последнего бара. При этом индикатор заново переинициализируется и глобальные переменные очищаются. Это важно, т.к. обратиться при каждом изменении последнего бара к данным глоб. переменных не получится, каждый раз при изменении последнего (рисующегося) бара на графике они будут инициализированы заново.

Поэтому и не получится применить идею сохранения от активного (последнего) бара сигналов куда-то в DoubleList, IntList глоб. переменные и затем по ним на график в истории отрисовать сигналы.

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

Разве что можно реализовать идею через работу с файлами для хранения сигналов :)
никогда такого не было и вот опять

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

Re: Вопрос к evge

Непрочитанное сообщение Den » 21 июл 2017, 22:18

Это в общем-то было понятно. Думал может есть какие-нибудь программные методы.
Задача-то по сути несложная.
Неудобство визуальное вызывает тот факт, что он выставляет сигнал не всегда там, где он появляется.
Сейчас Last можно получить только в одном случае - Input.Close[0]


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

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

Сейчас этот форум просматривают: Google [Bot] и 4 гостя