b4c7636731
- 配置层:env.yaml 新增 binance_futures API Key 段,validators + config 同步 - 清理 TradingPair 实体:删除 kline_interval、kline_intervals、kline_synthesis_enabled - 删除 fetchKlines 系列函数的 interval 参数,硬编码为 1m - 更新 SQL seed 数据、example、base_rest 接口、types 接口 - 新增 AGENTS/08-boundaries.md 执行纪律 - 新增 PLAN-add-futures-data.md 方案文档
52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
import { logger } from "../utils/logger";
|
|
import { getAllPairs, updatePairLastBackfillTime } from '../service/pair';
|
|
import { upsertOrUpdateKlines } from "../service/kline";
|
|
import { Client } from '../exchanges/rest';
|
|
|
|
function getNowMinuteMS() {
|
|
const minuteMS = 1000 * 60;
|
|
return Math.floor(Date.now() / minuteMS) * minuteMS
|
|
}
|
|
|
|
const allPairs = await getAllPairs();
|
|
|
|
for (const pair of allPairs) {
|
|
const client = new Client("binance");
|
|
let lastBackfillTime = pair.last_backfill_time.getTime();
|
|
try {
|
|
while (lastBackfillTime < getNowMinuteMS()) {
|
|
console.log('lastBackfillTime', lastBackfillTime);
|
|
const klines = await client.fetchKlines(
|
|
pair.symbol,
|
|
lastBackfillTime,
|
|
500
|
|
);
|
|
console.log(`拉取到 ${klines.length} 条 K 线`);
|
|
if (klines.length > 0) {
|
|
await upsertOrUpdateKlines(klines);
|
|
const lastK = klines[klines.length - 1];
|
|
if (lastK) {
|
|
await updatePairLastBackfillTime(lastK?.symbol, new Date(lastK.openTime));
|
|
if (lastBackfillTime === lastK.openTime) {
|
|
break;
|
|
}
|
|
lastBackfillTime = lastK.openTime;
|
|
}
|
|
}
|
|
await new Promise((resolve) => {
|
|
setTimeout(resolve, Math.random() * 1000);
|
|
});
|
|
}
|
|
} catch (err) {
|
|
console.error("拉取失败:", err);
|
|
}
|
|
}
|
|
|
|
// 所有币种回补完成以后等待1秒关闭pgsql连接退出此进程
|
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
const { AppDataSource } = await import("../db/data-source");
|
|
if (AppDataSource.isInitialized) {
|
|
await AppDataSource.destroy();
|
|
console.log("pgsql 连接已关闭");
|
|
}
|
|
process.exit(0); |