Production trading systems on open-source engines, always-on servers near the exchanges, and racks beside the matching engine. One team, from your first backtest to your first fill.
Strategies and engines on open-source cores, with one codebase from backtest to live.
BuildAlways-on Windows and Linux servers in data centers close to the exchanges.
HostYour hardware racked beside the matching engine, watched around the clock.
ColocateClouds, venues and platforms we work with

Vig works inside the Graybook Script Editor. Ask it to write, explain or change a strategy and it answers next to your code, ready to compile and apply.
//@gbs 1// A trailing stop that follows price by a multiple of the ATR and flips when price crosses it.indicator("ATR Trailing Stop", overlay = true, category = "Volatility") input int length = 14, "ATR length", min = 1, max = 200input float mult = 3.0, "Multiple", min = 0.5, max = 10 series float offset = atr(length) * multvar float stop = navar int trend = 1 if na(stop) { stop = close - offset} else if trend == 1 { stop = max(stop, close - offset) if close < stop { trend = -1 stop = close + offset }} else { stop = min(stop, close + offset) if close > stop { trend = 1 stop = close - offset }} plot(stop, "Stop", color = trend == 1 ? #26a69a : #ef5350, width = 2, style = step)//@gbs 1// A trailing stop that follows price by a multiple of the ATR and flips when price crosses it.indicator("ATR Trailing Stop", overlay = true, category = "Volatility") input int length = 14, "ATR length", min = 1, max = 200input float mult = 3.0, "Multiple", min = 0.5, max = 10 series float offset = atr(length) * multvar float stop = navar int trend = 1 if na(stop) { stop = close - offset} else if trend == 1 { stop = max(stop, close - offset) if close < stop { trend = -1 stop = close + offset }} else { stop = min(stop, close + offset) if close > stop { trend = 1 stop = close - offset }} plot(stop, "Stop", color = trend == 1 ? #26a69a : #ef5350, width = 2, style = step)//@gbs 1// A trailing stop that follows price by a multiple of the ATR and flips when price crosses it.indicator("ATR Trailing Stop", overlay = true, category = "Volatility") input int length = 14, "ATR length", min = 1, max = 200input float mult = 3.0, "Multiple", min = 0.5, max = 10 series float atrNow = atr(length)series float atrAvg = sma(atrNow, 50)series float m = atrNow > atrAvg ? 2.0 : multseries float offset = atrNow * mvar float stop = navar int trend = 1 if na(stop) { stop = close - offset} else if trend == 1 { stop = max(stop, close - offset) if close < stop { trend = -1 stop = close + offset }} else { stop = min(stop, close + offset) if close > stop { trend = 1 stop = close - offset }} plot(stop, "Stop", color = trend == 1 ? #26a69a : #ef5350, width = 2, style = step)Animation: someone asks Vig to add a volatility filter to the ATR Trailing Stop, and Vig answers in the Script Editor with the new Graybook Script lines.
One team across the whole path
Notebooks and backtests that don’t match what trades.
fill realism, latency models, and one codebase for research and production
Production strategies on open-source engines, tested on every change and replayable event by event.
Explore development →Home machines, dropped connections and missed sessions.
uptime, distance to the venue, and running the platforms you already use
Always-on servers near your exchange, with remote desktop from any device and an uptime SLA.
See plans →Cloud regions and shared networks between you and the fill.
cross-connects, direct market data and proof of every timestamp
Rack space beside the matching engine, managed 24/7 with nanosecond latency monitoring.
Explore colocation →Network and systems engineering at global banks and hedge funds.
Build, host and colocate with the same engineers.
Near the venues our clients trade.
Real people watching your systems around the clock.
A 30-minute call with an engineer, not a salesperson.