Modelo de datos y propiedad
Formas de arrays tipados, reglas de validación, huecos y transferencia de propiedad a workers
Sixtyfold recibe cada campo numérico en su propio Float64Array en lugar de como millones de objetos fila. Esta disposición por columnas hace que la transferencia a un worker y el renderizado sean previsibles.
Las formas que siguen son las entradas aceptadas por los métodos de línea y los métodos de stock.
Datos de línea
Un conjunto de datos de serie única tiene una columna X ordenada y una columna Y:
interface TimeSeriesData {
x: Float64Array;
y: Float64Array;
length: number;
}Los datos multiserie comparten X entre todas las series:
interface MultiSeriesData {
x: Float64Array;
series: Array<Float64Array | {
low: Float64Array;
high: Float64Array;
y?: Float64Array;
}>;
length: number;
seriesCount: number;
}Use el objeto range solo para una serie range o band. low y high definen el sobre; la opcional y proporciona su trazo central explícito. Omita y, o establezca el ancho de la serie a cero, cuando un punto medio sintetizado fuera engañoso.
Los valores X deben ser finitos y ascendentes. Las marcas temporales son números ordinarios; los milisegundos desde la época son convencionales pero no obligatorios. minViewportRange, los valores del viewport, las marcas temporales de los marcadores y todas las demás opciones de dominio X usan la misma unidad que X.
Use NaN en matrices Y, range-low o range-high para una observación real faltante. Los renderizadores conectados rompen la traza en lugar de dibujar a través de la brecha.
Datos OHLCV
interface OHLCVData {
timestamp: Float64Array;
open: Float64Array;
high: Float64Array;
low: Float64Array;
close: Float64Array;
volume: Float64Array;
length: number;
}Las seis columnas deben tener la misma longitud. StockChart.setData utiliza normalizeOHLCVData para resolver la longitud efectiva a partir de la columna de marcas temporales y validar marcas temporales finitas y monótonamente ascendentes o descendentes. Las marcas temporales iguales se aceptan para historial estático. La entrada ascendente conserva sus matrices; la entrada descendente se copia y se invierte sin mutar al llamador.
No sintetice cierres de mercado ni intervalos de feed ausentes únicamente para regularizar marcas temporales. timeScale: "market" comprime visualmente intervalos ausentes mientras las etiquetas, eventos y marcadores conservan sus marcas temporales reales.
Propiedad del búfer
En modo worker, las APIs por lotes setData, setMultiSeriesData, addVectors, StockChart.setData y las APIs de lote de acciones transfieren buffers de typed-array al renderizador para la ruta más rápida. Los buffers transferidos quedan desvinculados y el llamante no debe leerlos ni reutilizarlos.
Clone explícitamente cuando la aplicación deba conservar su propia copia:
chart.setData({
x: sourceX.slice(),
y: sourceY.slice(),
length: sourceX.length,
});No confíe en el comportamiento de reserva en el hilo principal para conservar la propiedad. Trate las entradas masivas como transferidas independientemente del renderer resuelto, de modo que cambiar de navegador o las políticas CSP no pueda alterar la corrección de la aplicación.
Transmisión continua
La transmisión de líneas usa un búfer circular de tamaño fijo inicializado con initStreaming(seriesCount, maxPoints). La transmisión estándar usa initStreaming(maxCandles). Las capacidades y el recuento de series de línea deben ser enteros positivos. Una vez alcanzada la capacidad, las observaciones más antiguas se reemplazan mientras se preserva el renderizado cronológico.
Use métodos por lotes vectoriales o de velas cuando los datos ya lleguen en columnas. Los métodos de observación única agrupan mediante requestAnimationFrame y conservan su orden relativo frente a los append masivos. El addVector de línea copia sus valores antes de encolarlos, por lo que un array escalar de valores puede reutilizarse de inmediato.
Las inserciones de líneas requieren marcas de tiempo finitas y columnas de series alineadas. Mantenga X en orden ascendente y represente huecos únicamente en las columnas Y. Las inserciones de cotizaciones además exigen marcas de tiempo estrictamente crecientes entre llamadas, velas en cola y en cada fragmento; repetir una marca de tiempo no equivale a una operación de actualización.
La validación por lotes se ejecuta antes de vaciar muestras en cola o transferir entrada. Las longitudes o marcas de tiempo rechazadas dejan las muestras pendientes sin cambios y los búferes del llamante adjuntos; addCandleBatches valida todos los fragmentos antes de transferir cualquiera de ellos. Estas comprobaciones no sustituyen la validación a nivel de aplicación de unidades, precios, volúmenes u otra semántica de feed. Vea Line streaming y Stock streaming para los contratos específicos del método.