Страница 1 из 1

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

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

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

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


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

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

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

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

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

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

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

Как-то так.