/** * 价格历史接口(GET /pmPriceHistory/getPmPriceHistoryPublic) * 用于 TradeDetail.vue 折线图数据 */ import { buildQuery, get } from './request' import type { ApiResponse } from './types' import type { PageResult } from './types' /** 单条价格历史(与 doc.json definitions["polymarket.PmPriceHistory"] 对齐) */ export interface PmPriceHistoryItem { ID?: number createdAt?: string fidelity?: number interval?: string /** 市场标识 */ market?: string /** 价格(通常 0–1 小数,前端展示可乘 100 为百分比) */ price?: number /** 时间戳(Unix 秒) */ time?: number updatedAt?: string } /** GET /pmPriceHistory/getPmPriceHistoryPublic 请求参数 */ export interface GetPmPriceHistoryPublicParams { /** 市场标识(必填,用于筛选) */ market: string page?: number pageSize?: number /** 数据间隔 */ interval?: string /** 时间筛选 */ time?: number /** 创建时间范围 */ createdAtRange?: string[] fidelity?: number keyword?: string order?: string sort?: string price?: number } /** 响应 data 为 PageResult */ export interface PmPriceHistoryPublicResponse { code: number data?: PageResult msg: string } /** * 获取价格历史(公开接口,无需鉴权) * GET /pmPriceHistory/getPmPriceHistoryPublic */ export async function getPmPriceHistoryPublic( params: GetPmPriceHistoryPublicParams, config?: { headers?: Record }, ): Promise { const { market, page = 1, pageSize = 500, interval, time, createdAtRange, fidelity, keyword, order, sort, price } = params const query = buildQuery({ market, page, pageSize, interval, time, createdAtRange, fidelity, keyword, order, sort, price, }) return get('/pmPriceHistory/getPmPriceHistoryPublic', query, config) } /** 图表单点格式 [timestamp_ms, value_0_100] */ export type ChartDataPoint = [number, number] /** * 将接口返回的 list 转为 ECharts 折线图数据 * - time 转为毫秒时间戳 * - price 若 ≤1 视为小数概率,乘 100;否则视为 0–100 */ export function priceHistoryToChartData(list: PmPriceHistoryItem[]): ChartDataPoint[] { if (!list?.length) return [] const out: ChartDataPoint[] = [] for (const item of list) { const t = item.time const p = item.price if (t == null || p == null || !Number.isFinite(Number(t))) continue const tsMs = Number(t) < 1e12 ? Number(t) * 1000 : Number(t) const value = Number(p) <= 1 ? Number(p) * 100 : Number(p) out.push([tsMs, value]) } out.sort((a, b) => a[0] - b[0]) return out }