|
|
function generateDailyPacket(stock_code, startDate, days, basePrice) { const data = []; let prevClose = Number(basePrice); const toStrDate = (dateVal) => (typeof dateVal === 'number' ? String(dateVal) : dateVal); const addDays = (yyyymmdd, delta) => { const y = parseInt(yyyymmdd.slice(0, 4), 10); const m = parseInt(yyyymmdd.slice(4, 6), 10) - 1; const d = parseInt(yyyymmdd.slice(6, 8), 10); const dt = new Date(y, m, d); dt.setDate(dt.getDate() + delta); const yyyy = dt.getFullYear(); const mm = String(dt.getMonth() + 1).padStart(2, '0'); const dd = String(dt.getDate()).padStart(2, '0'); return `${yyyy}${mm}${dd}`; }; const randDrift = () => (Math.random() - 0.5) * 0.02; // 每日 ±1% 漂移
const spread = 0.00050; // 买卖点差(可按需要调整)
let date = toStrDate(startDate); for (let i = 0; i < days; i++) { const open = +(prevClose * (1 + randDrift())).toFixed(5); const close = +(open * (1 + randDrift())).toFixed(5); const highRaw = Math.max(open, close) * (1 + Math.random() * 0.01); const lowRaw = Math.min(open, close) * (1 - Math.random() * 0.01); const high = +highRaw.toFixed(5); const low = +lowRaw.toFixed(5);
const tick_qty = Math.floor(1000 + Math.random() * 5000); // 成交量
const amount = +(close * tick_qty).toFixed(2); // 成交额
const item = { ts_code: stock_code, trade_date: date, bid_open: open, bid_high: high, bid_low: low, bid_close: close, ask_open: +(open + spread).toFixed(5), ask_high: +(high + spread).toFixed(5), ask_low: +(low + spread).toFixed(5), ask_close: +(close + spread).toFixed(5), tick_qty, amount, };
data.push(item); prevClose = close; date = addDays(date, 1); }
return { stock_code, data };}// ... existing code ...
export const dailyDataPackets = { // 如已存在同名键,可合并或覆盖
'GBPAUD.FXCM': generateDailyPacket('GBPAUD.FXCM', '20240101', 3000, 2.03893), 'EURUSD.FXCM': generateDailyPacket('EURUSD.FXCM', '20240101', 3000, 1.08350), // 可按需继续添加更多代码
};
|