(data: T[])
| 109 | } |
| 110 | |
| 111 | function dedupByTime<T extends { time: number }>(data: T[]): T[] { |
| 112 | const map = new Map<number, T>(); |
| 113 | for (const d of data) map.set(d.time, d); |
| 114 | return Array.from(map.values()).sort((a, b) => a.time - b.time); |
| 115 | } |
| 116 | |
| 117 | interface CrosshairData { |
| 118 | open: number; |