Con respecto a TradingView específicamente, esta característica se llama gráficos de dispersión . Independientemente del periodo de agregación seleccionado en el gráfico, toman 1 minuto barras del instrumento y producir una serie de difundir bares. Las barras de spread de mayor duración (1 día en su captura de pantalla) se calculan entonces a partir de las barras de spread de 1 minuto.
La expresión se evalúa en el servidor, lo que significa que sería necesario acceder a las barras de instrumentos de 1 minuto para reproducir este cálculo en el cliente.
No está claro qué parte de la barra OHLC utilizan cuando generan barras de spreads de 1 minuto. Lo más probable es que sea Open o Close, ya que los máximos y mínimos dentro de cada período estarían desalineados en el tiempo.
Tanto si se trata de Open como de Close, el spread calculado es aproximado debido al suavizado. El gráfico siguiente muestra las operaciones en bruto de dos activos: A y B (A=SPY reescalado y B=QQQ). Se trata de operaciones reales de lotes redondos registradas el 2021-03-11 10:45:00 US/Eastern.
La línea azul muestra el diferencial bruto A/B
que se basa en el precio de la última operación. Cada vez que entra una operación, el ratio se recalcula basándose en el precio de la última operación. Las líneas verde y naranja muestran A[O]/B[O]
y A[C]/B[C]
por períodos de 1 minuto. A las 10:50 ambas barras de spreads están bastante alejadas del spread bruto, lo que ilustra cómo los spreads de barras de 1 minuto ocultan la volatilidad que se produce dentro de la barra.
Si tiene acceso a las barras VWAP, A[VWAP]/B[VWAP]
(serie violeta) proporcionaría una mejor estimación de la dispersión en bruto.
Reducir el periodo de la barra a menos de 1 minuto es otro ajuste que minimiza el suavizado. Ejemplo de uso de barras de 10 segundos:
Así que tenga en cuenta esta información cuando vea los diferenciales de OHLC en la Ventana de Datos. Los valores son aproximados.
Si es necesario calcular las barras de dispersión exactas, se puede crear una ventana deslizante en SQL:
SELECT datetime,
LAST(CASE symbol WHEN 'SPY' THEN price ELSE null END) last_A,
LAST(CASE symbol WHEN 'QQQ' THEN price ELSE null END) last_B,
ROUND(last_A/last_B, 6) AS AB
FROM atsd_trade
WHERE symbol IN ('SPY', 'QQQ')
AND datetime BETWEEN '2021-03-11 09:30:00' AND '2021-03-11 16:00:00'
WITH ROW_NUMBER(1 ORDER BY time, trade_num) >= 0
ORDER BY datetime, trade_num
| datetime | last_A | last_B | AB |
|----------------------------------|-------:|-------:|---------:|
| ... | | | |
| 2021-03-11T10:45:00.603000-05:00 | 393.46 | 316.94 | 1.241434 |
| 2021-03-11T10:45:00.603000-05:00 | 393.46 | 316.94 | 1.241434 |
| 2021-03-11T10:45:00.605000-05:00 | 393.47 | 316.94 | 1.241465 |
| 2021-03-11T10:45:00.605000-05:00 | 393.47 | 316.94 | 1.241465 |
| 2021-03-11T10:45:00.605000-05:00 | 393.46 | 316.94 | 1.241434 |
| 2021-03-11T10:45:00.605000-05:00 | 393.47 | 316.94 | 1.241465 |
| 2021-03-11T10:45:00.606000-05:00 | 393.47 | 316.94 | 1.241465 |
Con esta técnica de ventana analítica, es posible calcular las barras de dispersión exactas para cualquier periodo, 1 minuto, 1 hora, 1 día, etc.
SELECT datetime,
ROUND(MIN(ratio_AB), 6) AS AB_low,
ROUND(MAX(ratio_AB), 6) AS AB_high
FROM (
SELECT datetime,
LAST(CASE symbol WHEN 'SPY' THEN price ELSE null END) last_A,
LAST(CASE symbol WHEN 'QQQ' THEN price ELSE null END) last_B,
last_A/last_B AS ratio_AB
FROM atsd_trade
WHERE symbol IN ('SPY', 'QQQ')
AND datetime BETWEEN '2021-03-11 09:30:00' AND '2021-03-11 16:00:00'
WITH ROW_NUMBER(1 ORDER BY time, trade_num) >= 0
ORDER BY datetime, trade_num
) GROUP BY PERIOD(1 MINUTE) -- or 1-hour, or 1-day
| datetime | AB_low | AB_high |
|---------------------|---------:|---------:|
| 2021-03-11 10:45:00 | 1.241214 | 1.242576 |
| 2021-03-11 10:46:00 | 1.241756 | 1.242613 |
| 2021-03-11 10:47:00 | 1.242365 | 1.242878 |
| 2021-03-11 10:48:00 | 1.241907 | 1.242808 |
| 2021-03-11 10:49:00 | 1.241197 | 1.242087 |