Modelo de dados e propriedade
Formas de arrays tipados, regras de validação, lacunas e transferência de propriedade para worker.
Sixtyfold recebe cada campo numérico no seu próprio Float64Array em vez de como milhões de objetos de linha. Este layout em colunas torna a transferência para um worker e a renderização previsíveis.
As formas abaixo são as entradas aceites pelos métodos line e stock.
Dados de linha
Um conjunto de dados de série única tem uma coluna X ordenada e uma coluna Y:
interface TimeSeriesData {
x: Float64Array;
y: Float64Array;
length: number;
}Dados multi-série partilham X por todas as séries:
interface MultiSeriesData {
x: Float64Array;
series: Array<Float64Array | {
low: Float64Array;
high: Float64Array;
y?: Float64Array;
}>;
length: number;
seriesCount: number;
}Use o objeto range apenas para uma série range ou band. low e high definem o envelope; a opcional y fornece o traço central explícito. Omitir y, ou definir a largura da série para zero, quando um ponto médio sintetizado seria enganador.
Os valores X devem ser finitos e ascendentes. Carimbos temporais são números ordinários; milissegundos desde a época são convencionais mas não obrigatórios. minViewportRange, valores da viewport, carimbos temporais de marcadores e todas as outras opções de domínio X usam a mesma unidade que X.
Use NaN em arrays Y, range-low ou range-high para uma observação real em falta. Renderizadores conectados interrompem o traço em vez de desenhar através da lacuna.
Dados OHLCV
interface OHLCVData {
timestamp: Float64Array;
open: Float64Array;
high: Float64Array;
low: Float64Array;
close: Float64Array;
volume: Float64Array;
length: number;
}Todas as seis colunas devem ter o mesmo comprimento. StockChart.setData usa normalizeOHLCVData para resolver o comprimento efectivo a partir da coluna de carimbos temporais e validar carimbos finitos, monótona e crescentemente ou decrescentemente ordenados. Carimbos iguais são aceites para histórico estático. Entrada ascendente preserva os seus arrays; entrada descendente é copiada e invertida sem mutar o chamador.
Não sintetize encerramentos de bolsas nem intervalos de feed ausentes apenas para regularizar carimbos temporais. timeScale: "market" comprime visualmente intervalos ausentes enquanto rótulos, eventos e marcadores mantêm os seus carimbos temporais reais.
Posse do buffer
Em modo worker, as APIs em lote setData, setMultiSeriesData, addVectors, StockChart.setData e de lotes de ações transferem buffers de typed-array para o renderer para a via mais rápida. Os buffers transferidos tornam‑se destacados (detached) e não devem ser lidos nem reutilizados pelo remetente.
Clone explicitamente quando a aplicação tiver de reter a sua própria cópia:
chart.setData({
x: sourceX.slice(),
y: sourceY.slice(),
length: sourceX.length,
});Não conte com o comportamento de fallback do thread principal para reter a propriedade. Trate entradas em grande volume como transferidas independentemente do renderer resolvido, de modo que a mudança de browser ou de políticas CSP não possa alterar a corretude da aplicação.
Streaming
O streaming de linhas utiliza um buffer circular de tamanho fixo inicializado com initStreaming(seriesCount, maxPoints). O streaming de ações utiliza initStreaming(maxCandles). Capacidades e o número de séries de linhas devem ser inteiros positivos. Uma vez atingida a capacidade, as observações mais antigas são substituídas enquanto a apresentação cronológica é preservada.
Utilize métodos de lote por vetor ou candle quando os dados já chegarem em colunas. Métodos de observação única acumulam através de requestAnimationFrame e retêm a sua ordem relativa às anexações em massa. A linha addVector copia os seus valores antes de os enfileirar, pelo que um array escalar de valores pode ser reutilizado imediatamente.
As adições a linhas exigem carimbos de data/hora finitos e colunas de séries alinhadas. Mantenha X ascendente e represente lacunas apenas nas colunas Y. As adições de stock exigem adicionalmente carimbos de data/hora estritamente crescentes entre chamadas, velas enfileiradas e em cada chunk; repetir um carimbo de data/hora não é uma operação de atualização.
A validação em lote é executada antes de esvaziar amostras enfileiradas ou transferir entradas. Comprimentos ou carimbos de data/hora rejeitados deixam as amostras pendentes inalteradas e os buffers do chamador anexados; addCandleBatches valida todos os chunks antes de transferir qualquer um deles. Estas verificações não substituem a validação do lado da aplicação de unidades, preços, volumes ou outras semânticas do feed. Veja Line streaming e Stock streaming para os contratos específicos do método.