You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.1 KiB
59 lines
2.1 KiB
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),
|
|
// 可按需继续添加更多代码
|
|
};
|