- Crypto
- Futures
- Forex
- Stocks
Every market on one chart that keeps up.
tt Charts streams crypto, futures, forex and stocks from multiple data providers and draws them on your GPU. Read order flow, mark up levels, and write your own indicators and chart types in TypeScript.
BTCUSDT perpetual15mLive
Everything you read the market with, in one fast chart.
Price, volume and order flow side by side, on markets from several data providers.
Order flow
Footprint, TPO, volume profiles, session VWAP, delta and a liquidity heatmap show where volume traded, not only where price closed.Every market
Crypto, futures, forex and stocks from multiple data providers, with the same tools on each.Drawings
Trend lines, channels, Fibonacci tools, ranges and long or short positions, anchored to price and time.Drawn on the GPU
WebGL2 renders candles, order flow and drawings. Panning and zooming stay smooth on long histories.Your own indicators
Write indicators and whole chart types in TypeScript. They run next to the built-in ones.Your indicator is a TypeScript file.
Build them with tradingthings Create. Scripts run next to the chart and draw with the same renderer. A script adds an indicator on top of the candles, or replaces them as a new chart type.
- Inputs become a settings dialog, with no UI code.
- Subscribe to bars, trades or your own API.
- Draw lines, shapes and labels, or replace the candles with your own chart type.
moving-average.tsTypeScript
import { defineScript, input } from "@tradingthings/tt-create"
// Simple moving average of the chart's closes, as one line.
export default defineScript({
name: "Moving average",
surface: { kind: "ChartOverlay" },
inputs: {
length: input.int({ default: 20, min: 1, label: "Length" }),
color: input.color({ default: "#f59e0b", label: "Color" }),
},
subscribe: (ctx) => ({ bars: ctx.market.bars({ warmup: 20 }) }),
state: () => ({}),
draw: (_s, frame, g, ctx) => {
const { time, close, length: count } = ctx.streams.bars
const { length, color } = ctx.inputs
const xy: number[] = []
let sum = 0
for (let i = 0; i < count; i += 1) {
sum += close[i]!
if (i >= length) sum -= close[i - length]!
if (i < length - 1) continue
const x = frame.timeToX(time[i]!)
if (x !== null) xy.push(x, frame.priceToY(sum / length))
}
g.polyline(xy, { color, width: 2 })
},
})Open a chart. No account, no install.
It runs in your browser. Pick a market and start reading it.