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

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
HO57G
Сообщения: 6
Зарегистрирован: 03 сен 2021, 17:24
Благодарил (а): 3 раза

Как узнать точное время, в моменте

Непрочитанное сообщение HO57G » 03 сен 2021, 18:14

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

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

...
var fileName = "C:\\Position\\Position.txt";
WriteData(fileName, CurrentTime);
...


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

UPD: Как вариант, можно выйти за пределы АД4 и написать фоновый процесс, который будет висеть и ждать требуемого события, затем добавлять в полученные данные дату и время их получения, и записывать в файл. Но это ещё более сложная задача, и хотелось бы обойтись силами АД4.
Последний раз редактировалось HO57G 04 сен 2021, 10:00, всего редактировалось 1 раз.

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

Re: Как узнать точное время, в моменте

Непрочитанное сообщение BugsDigger » 04 сен 2021, 09:43

1. При просмотре исторических данных (листании графика, в тестировании по истории) доступны только следующие данные: время начала свечи, цены открытия/закрытия/верх/низ, объем в свече и количество опрераций по Ask/Bid. Понятно, что все цены внутри свечи недоступны. Т.о., если вы работаете с историей с часовым ТФ, вы видите только часовые отметки времени. Если переключитесь на минуты, то получите данные внутри минуты, привязанные к началу этой минуты.

(Между прочим, при срабатывании вашего индикатора будет запись в файл, но т.к. при листании графика вперед-назад индикатор пересчитывается, вы получите, насколько я понимаю, множество записей, расположенных в беспорядке по времени, если только при старте индикатора (CurrentIndex=0) не будете каждый раз стирать из файла старые данные.)

2. При реальной работе последняя ("живая") свеча и индикаторы на графике пересчитываются несколько раз в секунду (примерно 3 раза в секунду на глаз), соответственно вы видите какую-то случайно выхваченную (поскольку между обновлениями индикатора могут пройти несколько сделок) текущую цену закрытия и накопленные к этому моменту в свече цены High/Low.

Каждый раз при срабатывании индикатора (внутри свечи) должна происходить запись в файл, но какое время выдаст вам CurrentTime? Думаю, что время начала свечи. Можно, конечно, попробовать вместо CurrentTime использовать системную ф-цию Now(), но тогда при просмотре истории в файл вместо времени свечи будет попадать текущее системное время. Чтобы этого избежать, можно попробовать сравнить Now с CurrentTime, и если CurrentTime<=Now<=CurrentTime+таймфрейм, использовать время из Now, иначе - CurrentTime. Но при листании графика вы, фактически, обязаны стереть старые "детальные" в начале рассчета, так что эта детализация пропадет. (Можно, конечно, не стирать, но тогда при разборе накопленных данных вам нужно будет их как-то рассортировать; мало того, при листании графика в файл добавятся "фейковые" события, привязанные уже к началу свечки, которых не было в исходных данных; см. п.1).

Как-то так.


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

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

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