Untitled
unknown
typescript
9 months ago
2.5 kB
10
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