157 lines
7.0 KiB
JavaScript
157 lines
7.0 KiB
JavaScript
// src/mocks/data/market.js
|
||
// 市场行情相关的 Mock 数据
|
||
|
||
// 生成市场数据
|
||
export const generateMarketData = (stockCode) => {
|
||
const basePrice = 13.50; // 基准价格(平安银行约13.5元)
|
||
|
||
return {
|
||
stockCode,
|
||
|
||
// 成交数据 - 必须包含K线所需的字段
|
||
tradeData: {
|
||
success: true,
|
||
data: Array(30).fill(null).map((_, i) => {
|
||
const open = basePrice + (Math.random() - 0.5) * 0.5;
|
||
const close = basePrice + (Math.random() - 0.5) * 0.5;
|
||
const high = Math.max(open, close) + Math.random() * 0.3;
|
||
const low = Math.min(open, close) - Math.random() * 0.3;
|
||
return {
|
||
date: new Date(Date.now() - (29 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
|
||
open: parseFloat(open.toFixed(2)),
|
||
close: parseFloat(close.toFixed(2)),
|
||
high: parseFloat(high.toFixed(2)),
|
||
low: parseFloat(low.toFixed(2)),
|
||
volume: Math.floor(Math.random() * 500000000) + 100000000, // 1-6亿股
|
||
amount: Math.floor(Math.random() * 7000000000) + 1300000000, // 13-80亿元
|
||
turnover_rate: (Math.random() * 2 + 0.5).toFixed(2), // 0.5-2.5%
|
||
change_pct: (Math.random() * 6 - 3).toFixed(2) // -3% to +3%
|
||
};
|
||
})
|
||
},
|
||
|
||
// 资金流向 - 融资融券数据数组
|
||
fundingData: {
|
||
success: true,
|
||
data: Array(30).fill(null).map((_, i) => ({
|
||
date: new Date(Date.now() - (29 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
|
||
financing: {
|
||
balance: Math.floor(Math.random() * 5000000000) + 10000000000, // 融资余额
|
||
buy: Math.floor(Math.random() * 500000000) + 100000000, // 融资买入
|
||
repay: Math.floor(Math.random() * 500000000) + 80000000 // 融资偿还
|
||
},
|
||
securities: {
|
||
balance: Math.floor(Math.random() * 100000000) + 50000000, // 融券余额
|
||
sell: Math.floor(Math.random() * 10000000) + 5000000, // 融券卖出
|
||
repay: Math.floor(Math.random() * 10000000) + 3000000 // 融券偿还
|
||
}
|
||
}))
|
||
},
|
||
|
||
// 大单统计 - 包含 daily_stats 数组
|
||
bigDealData: {
|
||
success: true,
|
||
data: [],
|
||
daily_stats: Array(10).fill(null).map((_, i) => ({
|
||
date: new Date(Date.now() - (9 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
|
||
big_buy: Math.floor(Math.random() * 300000000) + 100000000,
|
||
big_sell: Math.floor(Math.random() * 300000000) + 80000000,
|
||
medium_buy: Math.floor(Math.random() * 200000000) + 60000000,
|
||
medium_sell: Math.floor(Math.random() * 200000000) + 50000000,
|
||
small_buy: Math.floor(Math.random() * 100000000) + 30000000,
|
||
small_sell: Math.floor(Math.random() * 100000000) + 25000000
|
||
}))
|
||
},
|
||
|
||
// 异动分析 - 包含 grouped_data 数组
|
||
unusualData: {
|
||
success: true,
|
||
data: [],
|
||
grouped_data: Array(5).fill(null).map((_, i) => ({
|
||
date: new Date(Date.now() - (4 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
|
||
events: [
|
||
{ time: '14:35:22', type: '快速拉升', change: '+2.3%', description: '5分钟内上涨2.3%' },
|
||
{ time: '11:28:45', type: '大单买入', amount: '5680万', description: '单笔大单买入' },
|
||
{ time: '10:15:30', type: '量比异动', ratio: '3.2', description: '量比达到3.2倍' }
|
||
],
|
||
count: 3
|
||
}))
|
||
},
|
||
|
||
// 股权质押
|
||
pledgeData: {
|
||
success: true,
|
||
data: {
|
||
total_pledged: 25.6, // 质押比例%
|
||
major_shareholders: [
|
||
{ name: '中国平安保险集团', pledged_shares: 0, total_shares: 10168542300, pledge_ratio: 0 },
|
||
{ name: '深圳市投资控股', pledged_shares: 50000000, total_shares: 382456100, pledge_ratio: 13.08 }
|
||
],
|
||
update_date: '2024-09-30'
|
||
}
|
||
},
|
||
|
||
// 市场摘要
|
||
summaryData: {
|
||
success: true,
|
||
data: {
|
||
current_price: basePrice,
|
||
change: 0.25,
|
||
change_pct: 1.89,
|
||
open: 13.35,
|
||
high: 13.68,
|
||
low: 13.28,
|
||
volume: 345678900,
|
||
amount: 4678900000,
|
||
turnover_rate: 1.78,
|
||
pe_ratio: 4.96,
|
||
pb_ratio: 0.72,
|
||
total_market_cap: 262300000000,
|
||
circulating_market_cap: 262300000000
|
||
}
|
||
},
|
||
|
||
// 涨停分析 - 返回数组格式,每个元素对应一个交易日
|
||
riseAnalysisData: {
|
||
success: true,
|
||
data: Array(30).fill(null).map((_, i) => {
|
||
const tradeDate = new Date(Date.now() - (29 - i) * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
|
||
const isLimitUp = Math.random() < 0.05; // 5%概率涨停
|
||
return {
|
||
trade_date: tradeDate,
|
||
is_limit_up: isLimitUp,
|
||
limit_up_price: (basePrice * 1.10).toFixed(2),
|
||
current_price: (basePrice + (Math.random() - 0.5) * 0.5).toFixed(2),
|
||
distance_to_limit: (Math.random() * 10).toFixed(2), // %
|
||
consecutive_days: isLimitUp ? Math.floor(Math.random() * 3) + 1 : 0,
|
||
reason: isLimitUp ? '业绩超预期' : '',
|
||
concept_tags: ['银行', '深圳国资', 'MSCI', '沪深300'],
|
||
analysis: isLimitUp ? '股价触及涨停板,资金流入明显' : '股价正常波动,交投活跃'
|
||
};
|
||
})
|
||
},
|
||
|
||
// 最新分时数据
|
||
latestMinuteData: {
|
||
success: true,
|
||
data: Array(240).fill(null).map((_, i) => {
|
||
const minute = 9 * 60 + 30 + i; // 从9:30开始
|
||
const hour = Math.floor(minute / 60);
|
||
const min = minute % 60;
|
||
const time = `${hour.toString().padStart(2, '0')}:${min.toString().padStart(2, '0')}`;
|
||
const randomChange = (Math.random() - 0.5) * 0.1;
|
||
return {
|
||
time,
|
||
price: (basePrice + randomChange).toFixed(2),
|
||
volume: Math.floor(Math.random() * 2000000) + 500000,
|
||
avg_price: (basePrice + randomChange * 0.8).toFixed(2)
|
||
};
|
||
}),
|
||
code: stockCode,
|
||
name: stockCode === '000001' ? '平安银行' : '示例股票',
|
||
trade_date: new Date().toISOString().split('T')[0],
|
||
type: 'minute'
|
||
}
|
||
};
|
||
};
|