Как отличить срок отчёта 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 именно этого фида: свежей отметки времени недостаточно.

docs.chain.link Futures report schema v14