Untitled
unknown
typescript
12 days ago
2.5 kB
7
Indexable
import Debug from "debug"; import api from "../utils/api"; const debug = Debug("app:trades-aggregator"); interface Candle { time: number; close_time: number; open: number; high: number; low: number; close: number; volume: number; trades: number; quote: number; sell_trades: number; sell_volume: number; sell_quote: number; buy_trades: number; buy_volume: number; buy_quote: number; } interface Trade { id: number; price: string; qty: string; quoteQty: string; time: number; isBuyerMaker: boolean; isBestMatch: boolean; } const symbol = "ETHUSDT"; // const fromId = 1266365373 // start of 2024 const fromId = 1388839494; const limit = 1000; const interval = 1; const msInterval = interval * 60e3; let lastId = fromId; let current: Candle; const data: Candle[] = []; export default async ({ nextCall }: { nextCall: (ii: number) => void }) => { const response = await api.getHistoricalTrades({ symbol, limit, fromId: lastId, }); const trades: Trade[] = response.data; for (const trade of trades) { const side = trade.isBuyerMaker ? "sell" : "buy"; const price = parseFloat(trade.price); const volume = parseFloat(trade.qty); const quote = parseFloat(trade.quoteQty); const time = trade.time - (trade.time % msInterval); if (!current || current.time !== time) { if (current) { debug("new candle", new Date(current.time)); data.push(current); } current = { time, close_time: time + msInterval, open: price, high: price, low: price, close: price, volume: 0, trades: 0, quote: 0, sell_trades: 0, sell_volume: 0, sell_quote: 0, buy_trades: 0, buy_volume: 0, buy_quote: 0, }; } current.close = price; current.volume += volume; current.trades += 1; current.quote += quote; current.high = Math.max(price, current.high); current.low = Math.min(price, current.low); if (current && side === "buy") { current.buy_trades += 1; current.buy_volume += volume; current.buy_quote += quote; } if (current && side === "sell") { current.sell_trades += 1; current.sell_volume += volume; current.sell_quote += quote; } } if (trades.length) { lastId = trades[trades.length - 1].id + 1; } if (trades.length !== limit) { nextCall(1e3); } else { nextCall(0); } };
Editor is loading...
Leave a Comment