88 lines
1.8 KiB
TypeScript
88 lines
1.8 KiB
TypeScript
import {
|
|
type,
|
|
enumOf,
|
|
f64,
|
|
flags,
|
|
list,
|
|
str,
|
|
u53,
|
|
type TypeCodec,
|
|
} from '../../plugin/index.ts';
|
|
|
|
export const Ticker = type('BenchTicker', {
|
|
symbol: str,
|
|
last: f64,
|
|
bid: f64,
|
|
ask: f64,
|
|
volume: f64,
|
|
});
|
|
|
|
export const Order = type('BenchOrder', {
|
|
id: u53,
|
|
account: u53,
|
|
symbol: str,
|
|
side: enumOf(['buy', 'sell'] as const),
|
|
type: enumOf(['limit', 'market', 'stop', 'stop_limit'] as const),
|
|
price: f64,
|
|
qty: f64,
|
|
filledQty: f64,
|
|
ts: u53,
|
|
flags: flags(['ioc', 'post_only', 'reduce_only'] as const),
|
|
});
|
|
|
|
export const Level = type('BenchLevel', { p: f64, q: f64 });
|
|
|
|
export const Book = type('BenchBook', {
|
|
symbol: str,
|
|
ts: u53,
|
|
bids: list(Level),
|
|
asks: list(Level),
|
|
});
|
|
|
|
export type TickerT = typeof Ticker.$infer;
|
|
export type OrderT = typeof Order.$infer;
|
|
export type LevelT = typeof Level.$infer;
|
|
export type BookT = typeof Book.$infer;
|
|
|
|
export function buildTicker(): TickerT {
|
|
return {
|
|
symbol: 'BTC-USD',
|
|
last: 67891.23,
|
|
bid: 67890.5,
|
|
ask: 67892.0,
|
|
volume: 1234567.89,
|
|
};
|
|
}
|
|
|
|
export function buildOrder(): OrderT {
|
|
return {
|
|
id: 9876543210,
|
|
account: 12345678,
|
|
symbol: 'BTC-USD',
|
|
side: 'buy',
|
|
type: 'limit',
|
|
price: 67500.5,
|
|
qty: 0.125,
|
|
filledQty: 0,
|
|
ts: 1716100000123,
|
|
flags: { ioc: false, post_only: true, reduce_only: false },
|
|
};
|
|
}
|
|
|
|
export function buildBook(depth: number): BookT {
|
|
const bids: LevelT[] = new Array(depth);
|
|
const asks: LevelT[] = new Array(depth);
|
|
for (let i = 0; i < depth; i++) {
|
|
bids[i] = { p: 67890 - i * 0.5, q: 0.1 + (i % 100) * 0.01 };
|
|
asks[i] = { p: 67891 + i * 0.5, q: 0.1 + (i % 100) * 0.01 };
|
|
}
|
|
return { symbol: 'BTC-USD', ts: 1716100000123, bids, asks };
|
|
}
|
|
|
|
export type AllCodecs = {
|
|
ticker: TypeCodec<TickerT>;
|
|
order: TypeCodec<OrderT>;
|
|
level: TypeCodec<LevelT>;
|
|
book: TypeCodec<BookT>;
|
|
};
|