データモデルと所有権

型付き配列の形状、検証ルール、ギャップ、およびWorkerへの転送所有権

Sixtyfoldは各数値フィールドを数百万の行オブジェクトとしてではなく、それぞれ独自のFloat64Arrayで受け取ります。こうしたカラム配置により、Workerへの転送とレンダリングが予測可能になります。

以下の形状は、lineメソッドおよびstockメソッドが受け入れる入力です。

ラインデータ

単一系列データセットは、順序付けられた1つのX列と1つのY列を持ちます:

interface TimeSeriesData {
  x: Float64Array;
  y: Float64Array;
  length: number;
}

マルチシリーズデータは、すべての系列でXを共有します:

interface MultiSeriesData {
  x: Float64Array;
  series: Array<Float64Array | {
    low: Float64Array;
    high: Float64Array;
    y?: Float64Array;
  }>;
  length: number;
  seriesCount: number;
}

rangeオブジェクトはrangeまたはband系列にのみ使用してください。lowとhighはエンベロープを定義し、任意のyはその明示的な中心のストロークを提供します。合成した中間点が誤解を招く場合は、yを省略するか系列の幅をゼロに設定してください。

X 値は有限で昇順でなければなりません。タイムスタンプは通常の数値であり、エポックミリ秒が慣習的ですが必須ではありません。minViewportRange、ビューポート値、マーカーのタイムスタンプ、およびその他すべての X ドメインオプションは X と同じ単位を使用します。

実際に観測値が欠損している場合は、Y、range-low、または range-high 配列に NaN を使用してください。接続されたレンダラーはギャップを通過して描画するのではなくパスを中断します。

OHLCV データ

interface OHLCVData {
  timestamp: Float64Array;
  open: Float64Array;
  high: Float64Array;
  low: Float64Array;
  close: Float64Array;
  volume: Float64Array;
  length: number;
}

6 列すべてが同じ長さでなければなりません。StockChart.setData はタイムスタンプ列から有効長を決定し、有限で単調に昇順または降順のタイムスタンプを検証するために normalizeOHLCVData を使用します。等しいタイムスタンプは静的履歴に対して受け入れられます。昇順の入力はその配列を保持し、降順の入力は呼び出し元を変更せずにコピーして反転します。

タイムスタンプを規則的にするためだけに取引所の閉鎖やフィードの欠落区間を合成してはいけません。timeScale: "market"は欠落区間を視覚的に圧縮しますが、ラベル、イベント、マーカーは実際のタイムスタンプを保持します。

バッファの所有権

Workerモードでは、バルクのsetData、setMultiSeriesData、addVectors、StockChart.setDataおよび株式バッチAPIは、最速経路のために型付き配列バッファをレンダラーに転送します。転送されたバッファはデタッチされ、呼び出し元が読み取ったり再利用したりしてはいけません。

アプリケーションが自身のコピーを保持する必要がある場合は明示的にクローンしてください:

chart.setData({
  x: sourceX.slice(),
  y: sourceY.slice(),
  length: sourceX.length,
});

メインスレッドでのフォールバック動作に依存して所有権を維持してはいけません。大量入力は解決されたレンダラーに関わらず転送済みとして扱い、ブラウザやCSPポリシーの切替がアプリケーションの正しさを変えられないようにしてください。

ストリーミング

ラインストリーミングはinitStreaming(seriesCount, maxPoints)で初期化された固定長リングバッファを使用します。株価ストリーミングはinitStreaming(maxCandles)を使用します。容量とライン系列数は正の整数でなければなりません。容量に達すると最も古い観測値が置き換えられますが、時系列描画は維持されます。

データが既に列単位で到着する場合はベクトルまたはキャンドルのバッチメソッドを使用してください。単一観測メソッドはrequestAnimationFrameを通じてバッチ化され、バルク追加に対する順序を保持します。ラインのaddVectorはキューに入れる前に値をコピーするため、スカラーの値配列は直ちに再利用できます。

ライン追加は有限のタイムスタンプと整列した系列列を必要とします。Xは昇順に保ち、ギャップは Y 列にのみ表現してください。ストック追加ではさらに、呼び出し間、キュー済みキャンドル、および各チャンク全体でタイムスタンプが厳密に増加していることが必要であり、タイムスタンプの重複は更新操作ではありません。

バルク検証はキュー済みサンプルをフラッシュするか入力を転送する前に行われます。長さやタイムスタンプが拒否された場合、保留中のサンプルは変更されずコーラーのバッファは添付されたまま残ります;addCandleBatchesは任意のチャンクを転送する前にすべてのチャンクを検証します。これらのチェックはユニット、価格、出来高、またはその他のフィード意味論のアプリケーション側検証の代替ではありません。メソッド固有の契約についてはLine streamingおよびStock streamingを参照してください。