Как отличить срок отчёта Chainlink Data Streams от срока фьючерса
В схеме фьючерсного отчёта есть два поля истечения и интервал наблюдения цены. Если их перепутать, можно приписать цену моменту времени, который отчёт не охватывал.
Сверьте момент с интервалом наблюдения
В проверенном отчёте v14 сравните интересующую секунду с validFromTimestamp и observationsTimestamp. В примере интервал длится с 1000-й до 1004-й секунды. Момент 1002 входит, а 1010 уже нет. Более поздний expiresAt не расширяет интервал наблюдения. Поле expiryTime относится к самому фьючерсному контракту.
const r = {validFromTimestamp: 1000, observationsTimestamp: 1004,
expiresAt: 1030, expiryTime: 90000};
for (const t of [1002, 1010])
console.log(r.validFromTimestamp <= t && t <= r.observationsTimestamp);
Сохраните данные о контракте для графика
Храните с ценой идентификатор фида, месяц контракта и срок его истечения. При переходе к другому контракту эти данные помогут объяснить скачок графика даже при похожем тикере. Для определения режима торгов используйте расшифровку marketStatus именно этого фида: свежей отметки времени недостаточно.