refactor(data): 重构交易所适配器,修复 Kline 实体复合主键
- 废弃旧 adapter 体系 (base/binance/types.ts),新增 base_rest/rest.ts 基于 Binance 官方 SDK 实现 REST K 线拉取 - Kline 实体改为四列复合主键 (exchange/symbol/interval/time), 修复单列 time PK 导致的跨 symbol 写入冲突 - 新增 filterConsecutive():K 线连续性过滤,首缺口截断策略 - 新增 service/kline.ts:批量 UPSERT K 线入库 - 新增 types/ 共享类型定义、example/ 示例、run/ 运行脚本
This commit is contained in:
@@ -20,21 +20,11 @@ import {
|
||||
Entity,
|
||||
PrimaryColumn,
|
||||
Column,
|
||||
Index,
|
||||
CreateDateColumn,
|
||||
UpdateDateColumn,
|
||||
} from "typeorm";
|
||||
|
||||
/** K 线周期枚举 */
|
||||
export type KlineInterval =
|
||||
| "1m"
|
||||
| "5m"
|
||||
| "15m"
|
||||
| "30m"
|
||||
| "1h"
|
||||
| "4h"
|
||||
| "1d"
|
||||
| "1w";
|
||||
import type { KlineInterval } from '../../types';
|
||||
|
||||
/**
|
||||
* 1 分钟 K 线 Hypertable
|
||||
@@ -56,26 +46,34 @@ export type KlineInterval =
|
||||
},
|
||||
},
|
||||
})
|
||||
@Index(["exchange", "symbol", "interval", "time"], { unique: true })
|
||||
@Entity("klines")
|
||||
export class Kline {
|
||||
/**
|
||||
* 复合主键:交易所 + 交易对 + 周期 + 时间
|
||||
*
|
||||
* 设计原因:
|
||||
* - 不同 symbol 在同一时刻有各自的 K 线,单列 time PK 会导致跨 symbol 冲突
|
||||
* - 四列复合主键 = 业务唯一性语义,同时满足 TimescaleDB hypertable 要求
|
||||
* (分区列 time 必须包含在主键中)
|
||||
* - 不再需要额外的 @Index unique — 复合主键已保证唯一性
|
||||
*/
|
||||
/** 交易所标识(binance / okx / bybit) */
|
||||
@PrimaryColumn("text")
|
||||
exchange!: string;
|
||||
|
||||
/** 交易对符号(如 BTCUSDT) */
|
||||
@PrimaryColumn("text")
|
||||
symbol!: string;
|
||||
|
||||
/** K 线周期(1m) */
|
||||
@PrimaryColumn("text")
|
||||
interval!: KlineInterval;
|
||||
|
||||
/** K 线开盘时间(UTC)— @timescaledb/typeorm 自动标记为时间分区列 */
|
||||
@TimeColumn()
|
||||
@PrimaryColumn("timestamptz")
|
||||
time!: Date;
|
||||
|
||||
/** 交易所标识(binance / okx / bybit) */
|
||||
@Column("text")
|
||||
exchange!: string;
|
||||
|
||||
/** 交易对符号(如 BTCUSDT) */
|
||||
@Column("text")
|
||||
symbol!: string;
|
||||
|
||||
/** K 线周期(1m) */
|
||||
@Column("text")
|
||||
interval!: KlineInterval;
|
||||
|
||||
// ============================================================
|
||||
// OHLCV 价格数据(NUMERIC(20,8) 精度,与交易所对齐)
|
||||
// ============================================================
|
||||
|
||||
Reference in New Issue
Block a user