// 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' } }; };