superxuu commited on
Commit
1706dd5
·
1 Parent(s): 57864b1

feat: user auth and payment gateway

Browse files
.codebuddy/plans/Paper_Trading_项目初始化与开发_57815873.md ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ name: Paper_Trading 项目初始化与开发
3
+ overview: 根据 DEVELOPMENT_PLAN.md 文档,初始化并开发一个基于 Web 的A股历史行情回放与模拟交易应用,包含后端(FastAPI + DuckDB)和前端(Next.js + Lightweight Charts)的完整功能。
4
+ design:
5
+ architecture:
6
+ framework: react
7
+ component: tdesign
8
+ styleKeywords:
9
+ - Dark Theme
10
+ - Financial Tech
11
+ - Data Visualization
12
+ - Professional Trading
13
+ fontSystem:
14
+ fontFamily: Roboto
15
+ heading:
16
+ size: 24px
17
+ weight: 600
18
+ subheading:
19
+ size: 16px
20
+ weight: 500
21
+ body:
22
+ size: 14px
23
+ weight: 400
24
+ colorSystem:
25
+ primary:
26
+ - "#1E88E5"
27
+ - "#42A5F5"
28
+ background:
29
+ - "#0D1421"
30
+ - "#1A2332"
31
+ - "#242F3D"
32
+ text:
33
+ - "#FFFFFF"
34
+ - "#B0BEC5"
35
+ - "#78909C"
36
+ functional:
37
+ - "#4CAF50"
38
+ - "#EF5350"
39
+ - "#FFC107"
40
+ todos:
41
+ - id: init-project
42
+ content: 创建项目目录结构,编写 requirements.txt 和 frontend/package.json
43
+ status: completed
44
+ - id: database-module
45
+ content: 实现 backend/app/database.py,包含 init_db、upload_db 和单例连接
46
+ status: completed
47
+ dependencies:
48
+ - init-project
49
+ - id: sync-script
50
+ content: 编写 backend/scripts/sync_data.py,实现 AkShare 数据获取和入库逻辑
51
+ status: completed
52
+ dependencies:
53
+ - database-module
54
+ - id: backend-api
55
+ content: 开发 backend/app/main.py、api.py、core.py,实现盲盒选股和 K 线查询 API
56
+ status: completed
57
+ dependencies:
58
+ - sync-script
59
+ - id: frontend-setup
60
+ content: 初始化 Next.js 项目,配置 TypeScript、Tailwind CSS 和 next.config.mjs
61
+ status: completed
62
+ dependencies:
63
+ - init-project
64
+ - id: frontend-components
65
+ content: 开发 Chart 组件、TradePanel 组件和 Zustand Store
66
+ status: completed
67
+ dependencies:
68
+ - frontend-setup
69
+ - id: integration-deploy
70
+ content: 编写 Dockerfile,本地 Docker 构建测试
71
+ status: completed
72
+ dependencies:
73
+ - backend-api
74
+ - frontend-components
75
+ ---
76
+
77
+ ## 产品概述
78
+
79
+ StockReplay-A 是一款基于 Web 的 A 股历史行情回放与模拟交易应用,提供"盲盒式"选股训练,帮助用户在随机历史行情中验证交易策略,部署到 Hugging Face Spaces 实现零成本运行。
80
+
81
+ ## 核心功能
82
+
83
+ - **盲盒式选股**:随机选择上市满3年的股票,随机起点,保证至少250个交易日数据,脱敏隐藏股票代码直到游戏结束
84
+ - **K线回放**:使用 Lightweight Charts 展示K线图,前端逐根推进,模拟实盘体验
85
+ - **模拟交易**:纯前端计算买卖逻辑,支持买入/卖出/下一根K线操作,记录交易历史和收益率
86
+ - **数据持久化**:DuckDB 嵌入式存储 + Hugging Face Datasets 同步,解决 HF Space 重启数据丢失问题
87
+
88
+ ## 技术栈选型
89
+
90
+ ### 后端技术
91
+
92
+ - **Python 3.11**:高性能异步支持
93
+ - **FastAPI**:异步 API 框架
94
+ - **DuckDB**:嵌入式 OLAP 数据库,单文件存储
95
+ - **AkShare**:A股开源数据接口
96
+ - **huggingface_hub**:Dataset 同步 SDK
97
+
98
+ ### 前端技术
99
+
100
+ - **Next.js 14**:App Router 模式
101
+ - **TypeScript**:严格类型检查
102
+ - **Tailwind CSS**:Utility-first CSS
103
+ - **Lightweight Charts**:TradingView 出品的 Canvas 渲染图表库
104
+ - **Zustand**:轻量级状态管理
105
+
106
+ ### 部署架构
107
+
108
+ - **Docker**:多阶段构建,前端构建静态资源后由 FastAPI 托管
109
+ - **Hugging Face Spaces**:免费容器运行环境
110
+
111
+ ## 实现方案
112
+
113
+ ### 系统架构
114
+
115
+ 采用前后端分离的单体应用架构,通过 Docker 多阶段构建打包:
116
+
117
+ 1. Stage 1:构建 Next.js 静态资源(output: 'export')
118
+ 2. Stage 2:FastAPI 后端 + 托管前端静态文件
119
+
120
+ ### 数据流设计
121
+
122
+ ```
123
+ 启动时 → hf_hub_download 下载 DuckDB 文件
124
+ 运行时 → FastAPI 读取 DuckDB 返回 K 线数据
125
+ 定时任务 → AkShare 增量更新 → upload_file 推送到 Dataset
126
+ ```
127
+
128
+ ### 盲盒选股算法
129
+
130
+ 1. 从 stock_list 筛选 list_date 早于3年前的股票
131
+ 2. 随机选取一只股票
132
+ 3. 随机选择起始点(确保剩余 >= 250 天)
133
+ 4. 返回后续 500 条 K 线数据(脱敏处理)
134
+
135
+ ### 模拟交易引擎
136
+
137
+ 纯前端 Zustand Store 管理:
138
+
139
+ - 买入:计算成本均价、扣减现金、增加持仓
140
+ - 卖出:按当前价结算、增加现金、清空持仓
141
+ - 收益率:(现金 + 持仓市值 - 初始资金) / 初始资金
142
+
143
+ ## 目录结构
144
+
145
+ ```
146
+ c:/python_project/Paper_Trading/
147
+ ├── backend/ # Python 后端
148
+ │ ├── app/
149
+ │ │ ├── main.py # [NEW] FastAPI 入口,配置静态文件托管、CORS、生命周期事件
150
+ │ │ ├── api.py # [NEW] 路由定义,实现 /api/health、/api/game/start、/api/kline、/api/admin/sync
151
+ │ │ ├── core.py # [NEW] 核心业务逻辑,实现盲盒选股算法、K线数据查询
152
+ │ │ └── database.py # [NEW] DuckDB 管理模块,实现 init_db、upload_db、单例连接池
153
+ │ ├── scripts/
154
+ │ │ └── sync_data.py # [NEW] 数据同步脚本,AkShare 获取 A 股列表和日线数据
155
+ │ └── requirements.txt # [NEW] Python 依赖:fastapi, uvicorn, duckdb, pandas, akshare, huggingface_hub
156
+ ├── frontend/ # Next.js 前端
157
+ │ ├── src/
158
+ │ │ ├── app/
159
+ │ │ │ ├── layout.tsx # [NEW] 根布局,配置 Tailwind 和全局样式
160
+ │ │ │ ├── page.tsx # [NEW] 主页面,整合 Chart 和 TradePanel
161
+ │ │ │ └── globals.css # [NEW] 全局 CSS 样式
162
+ │ │ ├── components/
163
+ │ │ │ ├── Chart.tsx # [NEW] Lightweight Charts 封装,支持 ResizeObserver
164
+ │ │ │ └── TradePanel.tsx # [NEW] 交易面板组件,买入/卖出/下一根K线交互
165
+ │ │ ├── hooks/
166
+ │ │ │ └── useGame.ts # [NEW] 游戏逻辑 Hook,封装 startGame、nextCandle 等方法
167
+ │ │ ├── store/
168
+ │ │ │ └── gameStore.ts # [NEW] Zustand Store,管理 cash、holdings、avgPrice、history 状态
169
+ │ │ └── lib/
170
+ │ │ └── api.ts # [NEW] API 客户端,封装 fetch 请求
171
+ │ ├── package.json # [NEW] 前端依赖配置
172
+ │ ├── tsconfig.json # [NEW] TypeScript 配置
173
+ │ ├── tailwind.config.ts # [NEW] Tailwind CSS 配置
174
+ │ ├── next.config.mjs # [NEW] Next.js 配置,output: 'export'
175
+ │ └── postcss.config.mjs # [NEW] PostCSS 配置
176
+ ├── Dockerfile # [NEW] 多阶段构建配置
177
+ └── README.md # [MODIFY] 项目说明文档
178
+ ```
179
+
180
+ ## 实现要点
181
+
182
+ ### 数据库持久化
183
+
184
+ - 启动时检查 `/tmp/stock_data.duckdb` 是否存在,不存在则从 HF Dataset 下载
185
+ - 数据更新后立即调用 `upload_file` 推送到 Dataset Repo
186
+ - 使用环境变量 `HF_TOKEN`、`DATASET_REPO_ID` 配置认证
187
+
188
+ ### 性能优化
189
+
190
+ - DuckDB 使用列式存储,索引优化查询速度
191
+ - 前端使用 Canvas 渲染(Lightweight Charts),避免 DOM 重绘开销
192
+ - K 线数据分批加载,避免一次性传输大量数据
193
+
194
+ ### 错误处理
195
+
196
+ - API 返回标准错误格式 `{ "error": "message" }`
197
+ - 前端全局错误边界捕获渲染错误
198
+ - 数据同步失败时记录日志但不中断服务
199
+
200
+ ## 设计风格
201
+
202
+ 采用现代金融科技风格,深色主题为主,强调数据可视化和专业交易体验。使用 React + TypeScript + Tailwind CSS + TDesign 组件库构建。
203
+
204
+ ## 页面规划
205
+
206
+ ### 主页面(游戏页面)
207
+
208
+ 分为四个核心区块:
209
+
210
+ 1. **顶部导航栏**:Logo、游戏状态、收益率显示
211
+ 2. **K线图表区**:Lightweight Charts 全屏展示,支持缩放和十字光标
212
+ 3. **交易面板区**:资金余额、持仓信息、买入/卖出按钮、数量输入框
213
+ 4. **底部控制栏**:下一根K线、重新开始、揭示答案按钮
214
+
215
+ ## 交互设计
216
+
217
+ - K线推进时有平滑动画效果
218
+ - 交易按钮点击有即时反馈
219
+ - 持仓变化时数字有高亮闪烁效果
push_log.txt ADDED
Binary file (2.48 kB). View file