stock-up 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. stock_up-0.1.0/.github/workflows/ci.yml +31 -0
  2. stock_up-0.1.0/.gitignore +11 -0
  3. stock_up-0.1.0/IMPLEMENTATION_PLAN.md +54 -0
  4. stock_up-0.1.0/PKG-INFO +264 -0
  5. stock_up-0.1.0/README.md +232 -0
  6. stock_up-0.1.0/docs/stockapi.md +320 -0
  7. stock_up-0.1.0/docs/tencent-api.md +189 -0
  8. stock_up-0.1.0/pyproject.toml +52 -0
  9. stock_up-0.1.0/stock_up/__init__.py +1 -0
  10. stock_up-0.1.0/stock_up/cli.py +346 -0
  11. stock_up-0.1.0/stock_up/codes.py +24 -0
  12. stock_up-0.1.0/stock_up/config.py +118 -0
  13. stock_up-0.1.0/stock_up/db.py +113 -0
  14. stock_up-0.1.0/stock_up/market/__init__.py +0 -0
  15. stock_up-0.1.0/stock_up/market/akshare_provider.py +85 -0
  16. stock_up-0.1.0/stock_up/market/base.py +28 -0
  17. stock_up-0.1.0/stock_up/market/factory.py +25 -0
  18. stock_up-0.1.0/stock_up/market/mock.py +37 -0
  19. stock_up-0.1.0/stock_up/market/qq.py +138 -0
  20. stock_up-0.1.0/stock_up/market/stockapi.py +349 -0
  21. stock_up-0.1.0/stock_up/models.py +130 -0
  22. stock_up-0.1.0/stock_up/repositories.py +223 -0
  23. stock_up-0.1.0/stock_up/services/__init__.py +0 -0
  24. stock_up-0.1.0/stock_up/services/daily.py +95 -0
  25. stock_up-0.1.0/stock_up/services/dragon_tiger_scanner.py +39 -0
  26. stock_up-0.1.0/stock_up/services/hot_leader_scanner.py +49 -0
  27. stock_up-0.1.0/stock_up/services/initial_low.py +14 -0
  28. stock_up-0.1.0/stock_up/services/reporter.py +39 -0
  29. stock_up-0.1.0/stock_up/services/rsi.py +123 -0
  30. stock_up-0.1.0/stock_up/services/rsi_budget.py +17 -0
  31. stock_up-0.1.0/stock_up/services/scanner.py +69 -0
  32. stock_up-0.1.0/stock_up/services/tick.py +66 -0
  33. stock_up-0.1.0/stock_up/strategy/fib.py +10 -0
  34. stock_up-0.1.0/stock_up/strategy/holding.py +83 -0
  35. stock_up-0.1.0/stock_up/strategy/rsi.py +45 -0
  36. stock_up-0.1.0/stock_up/strategy/technical.py +18 -0
  37. stock_up-0.1.0/stock_up/strategy/trading_day.py +32 -0
  38. stock_up-0.1.0/stock_up/strategy/watch.py +42 -0
  39. stock_up-0.1.0/tests/test_akshare_provider.py +11 -0
  40. stock_up-0.1.0/tests/test_akshare_provider_errors.py +12 -0
  41. stock_up-0.1.0/tests/test_alerts.py +13 -0
  42. stock_up-0.1.0/tests/test_cli.py +41 -0
  43. stock_up-0.1.0/tests/test_cli_checks.py +26 -0
  44. stock_up-0.1.0/tests/test_cli_daily.py +15 -0
  45. stock_up-0.1.0/tests/test_cli_dragon_tiger.py +14 -0
  46. stock_up-0.1.0/tests/test_cli_quote.py +12 -0
  47. stock_up-0.1.0/tests/test_cli_scan.py +14 -0
  48. stock_up-0.1.0/tests/test_cli_tick.py +14 -0
  49. stock_up-0.1.0/tests/test_codes.py +18 -0
  50. stock_up-0.1.0/tests/test_config.py +18 -0
  51. stock_up-0.1.0/tests/test_daily_hot_toggle.py +32 -0
  52. stock_up-0.1.0/tests/test_daily_service.py +19 -0
  53. stock_up-0.1.0/tests/test_db.py +20 -0
  54. stock_up-0.1.0/tests/test_dragon_tiger.py +29 -0
  55. stock_up-0.1.0/tests/test_dragon_tiger_scan.py +22 -0
  56. stock_up-0.1.0/tests/test_fib.py +8 -0
  57. stock_up-0.1.0/tests/test_hold_check_trading_days.py +18 -0
  58. stock_up-0.1.0/tests/test_holding_rules.py +29 -0
  59. stock_up-0.1.0/tests/test_hot_leader_scan.py +25 -0
  60. stock_up-0.1.0/tests/test_hot_sector.py +30 -0
  61. stock_up-0.1.0/tests/test_initial_low.py +18 -0
  62. stock_up-0.1.0/tests/test_market_provider.py +9 -0
  63. stock_up-0.1.0/tests/test_provider_factory.py +25 -0
  64. stock_up-0.1.0/tests/test_qq_daily.py +13 -0
  65. stock_up-0.1.0/tests/test_qq_provider.py +18 -0
  66. stock_up-0.1.0/tests/test_readme_smoke.py +10 -0
  67. stock_up-0.1.0/tests/test_reporter.py +16 -0
  68. stock_up-0.1.0/tests/test_repositories.py +39 -0
  69. stock_up-0.1.0/tests/test_rsi.py +20 -0
  70. stock_up-0.1.0/tests/test_rsi_budget.py +19 -0
  71. stock_up-0.1.0/tests/test_rsi_cache.py +31 -0
  72. stock_up-0.1.0/tests/test_rsi_direct.py +20 -0
  73. stock_up-0.1.0/tests/test_rsi_service.py +19 -0
  74. stock_up-0.1.0/tests/test_rsi_signals.py +15 -0
  75. stock_up-0.1.0/tests/test_scan_service.py +25 -0
  76. stock_up-0.1.0/tests/test_stockapi_provider.py +55 -0
  77. stock_up-0.1.0/tests/test_stockapi_rsi.py +32 -0
  78. stock_up-0.1.0/tests/test_stockapi_windows.py +12 -0
  79. stock_up-0.1.0/tests/test_tick_service.py +29 -0
  80. stock_up-0.1.0/tests/test_trading_day.py +14 -0
  81. stock_up-0.1.0/tests/test_watch_strategy.py +22 -0
@@ -0,0 +1,31 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12"]
15
+
16
+ steps:
17
+ - name: Checkout
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+
25
+ - name: Install dependencies
26
+ run: |
27
+ python -m pip install --upgrade pip
28
+ python -m pip install -e '.[dev]'
29
+
30
+ - name: Run tests
31
+ run: pytest -q
@@ -0,0 +1,11 @@
1
+ __pycache__/
2
+ .pytest_cache/
3
+ .coverage
4
+ htmlcov/
5
+ *.pyc
6
+ .venv/
7
+ .env
8
+ .DS_Store
9
+ *.db
10
+ reports/
11
+ .stock-up/
@@ -0,0 +1,54 @@
1
+ # stock-up 实施计划
2
+
3
+ ## 原则
4
+
5
+ - 测试先行。
6
+ - 先做离线可测核心,再接真实数据源。
7
+ - 策略层不依赖 AkShare / 腾讯接口。
8
+ - CLI 只编排服务,不写业务细节。
9
+
10
+ ## 阶段 1:项目骨架与核心模型
11
+
12
+ - 初始化 Python 包。
13
+ - 配置 pytest。
14
+ - 定义 Quote / DailyBar / WatchItem / Holding 等模型。
15
+ - 实现配置加载和默认配置。
16
+ - 实现 SQLite 初始化。
17
+
18
+ ## 阶段 2:策略纯函数
19
+
20
+ - Fibonacci 计算。
21
+ - RSI 计算与金叉/死叉判断。
22
+ - 观察池信号。
23
+ - wolf_swing / hai_long / both 持仓规则。
24
+ - 提醒去重。
25
+
26
+ ## 阶段 3:数据库仓储
27
+
28
+ - watchlist CRUD。
29
+ - holdings CRUD。
30
+ - trades 交易记录。
31
+ - alerts 提醒记录。
32
+ - quotes_daily 缓存。
33
+
34
+ ## 阶段 4:CLI 命令
35
+
36
+ - init
37
+ - watch add/list/abandoned/check/set
38
+ - hold add/list/check/set/add-buy/close
39
+ - scan limit-up
40
+ - daily
41
+ - tick
42
+
43
+ ## 阶段 5:数据源适配
44
+
45
+ - MarketDataProvider 接口。
46
+ - MockProvider 用于测试。
47
+ - TencentProvider 实时行情。
48
+ - AkShareProvider 涨停池、日 K、交易日历。
49
+
50
+ ## 阶段 6:集成测试与真实数据 smoke test
51
+
52
+ - CLI runner 测试。
53
+ - 用 mock 数据测试 daily / tick。
54
+ - 可选真实数据 smoke test,不作为 CI 必跑。
@@ -0,0 +1,264 @@
1
+ Metadata-Version: 2.4
2
+ Name: stock-up
3
+ Version: 0.1.0
4
+ Summary: CLI stock strategy assistant
5
+ Project-URL: Homepage, https://github.com/Guitenbay/stock-up
6
+ Project-URL: Repository, https://github.com/Guitenbay/stock-up
7
+ Project-URL: Issues, https://github.com/Guitenbay/stock-up/issues
8
+ Author: Guitenbay
9
+ License: MIT
10
+ Keywords: a-share,cli,rsi,stock,trading
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Office/Business :: Financial :: Investment
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: pydantic>=2
22
+ Requires-Dist: pyyaml>=6
23
+ Requires-Dist: requests>=2
24
+ Requires-Dist: rich>=13
25
+ Requires-Dist: typer>=0.12
26
+ Provides-Extra: akshare
27
+ Requires-Dist: akshare; extra == 'akshare'
28
+ Provides-Extra: dev
29
+ Requires-Dist: pytest-cov>=5; extra == 'dev'
30
+ Requires-Dist: pytest>=8; extra == 'dev'
31
+ Description-Content-Type: text/markdown
32
+
33
+ # stock-up
34
+
35
+ [![CI](https://github.com/Guitenbay/stock-up/actions/workflows/ci.yml/badge.svg)](https://github.com/Guitenbay/stock-up/actions/workflows/ci.yml)
36
+ [![PyPI version](https://img.shields.io/pypi/v/stock-up.svg)](https://pypi.org/project/stock-up/)
37
+ [![Python versions](https://img.shields.io/pypi/pyversions/stock-up.svg)](https://pypi.org/project/stock-up/)
38
+
39
+ 命令行版个人股票策略执行助手。
40
+
41
+ ## 安装
42
+
43
+ 从 PyPI 安装:
44
+
45
+ ```bash
46
+ python3 -m pip install stock-up
47
+ ```
48
+
49
+ 如果要使用 AkShare 备用数据源:
50
+
51
+ ```bash
52
+ python3 -m pip install 'stock-up[akshare]'
53
+ ```
54
+
55
+ 验证安装:
56
+
57
+ ```bash
58
+ stock-up --help
59
+ ```
60
+
61
+ ## 开发环境
62
+
63
+ ```bash
64
+ git clone https://github.com/Guitenbay/stock-up.git
65
+ cd stock-up
66
+ python3 -m pip install -e '.[dev]'
67
+ pytest -q
68
+ ```
69
+
70
+ 如果开发时要使用 AkShare:
71
+
72
+ ```bash
73
+ python3 -m pip install -e '.[dev,akshare]'
74
+ ```
75
+
76
+ ## 初始化
77
+
78
+ ```bash
79
+ stock-up init
80
+ ```
81
+
82
+ 默认创建:
83
+
84
+ ```text
85
+ ~/.stock-up/config.yaml
86
+ ~/.stock-up/data.db
87
+ ~/.stock-up/reports/
88
+ ```
89
+
90
+ 测试时可以指定目录:
91
+
92
+ ```bash
93
+ stock-up init --home /tmp/stock-up-demo
94
+ ```
95
+
96
+ ## 观察池
97
+
98
+ 手动加入观察:
99
+
100
+ ```bash
101
+ stock-up watch add 300308 --name 中际旭创 --high 130 --low 110 --now 120
102
+ ```
103
+
104
+ 查看观察池:
105
+
106
+ ```bash
107
+ stock-up watch list
108
+ ```
109
+
110
+ 检查观察信号:
111
+
112
+ ```bash
113
+ stock-up watch check
114
+ ```
115
+
116
+ 查看废弃观察:
117
+
118
+ ```bash
119
+ stock-up watch abandoned
120
+ ```
121
+
122
+ 修正高低点:
123
+
124
+ ```bash
125
+ stock-up watch set 300308 --high 135 --low 112
126
+ ```
127
+
128
+ ## 持仓
129
+
130
+ 添加持仓:
131
+
132
+ ```bash
133
+ stock-up hold add 300308 --name 中际旭创 --cost 120 --qty 100 --rule wolf_swing
134
+ ```
135
+
136
+ 规则支持:
137
+
138
+ ```text
139
+ wolf_swing = 狼大波段规则
140
+ hai_long = 海指导规则
141
+ both = 两套规则同时开启
142
+ ```
143
+
144
+ 加仓:
145
+
146
+ ```bash
147
+ stock-up hold add-buy 300308 --price 125 --qty 100
148
+ ```
149
+
150
+ 检查持仓:
151
+
152
+ ```bash
153
+ stock-up hold check
154
+ ```
155
+
156
+ 关闭持仓:
157
+
158
+ ```bash
159
+ stock-up hold close 300308 --price 135 --reason 止盈
160
+ ```
161
+
162
+ 关闭后重新加入观察:
163
+
164
+ ```bash
165
+ stock-up hold close 300308 --price 135 --reason 止盈 --watch
166
+ ```
167
+
168
+ ## 盘中 tick
169
+
170
+ `stock-up` 不常驻。盘中由外部定时任务反复调用:
171
+
172
+ ```bash
173
+ stock-up tick
174
+ ```
175
+
176
+ 默认使用腾讯实时行情。测试可用:
177
+
178
+ ```bash
179
+ stock-up tick --provider mock
180
+ ```
181
+
182
+ 建议外部定时任务每 20 秒调用一次。
183
+
184
+ ## 数据源
185
+
186
+ 当前默认:
187
+
188
+ ```text
189
+ 实时行情:腾讯 qt.gtimg.cn
190
+ 自动加入观察:默认关闭
191
+ 日 K / RSI:StockAPI,失败再尝试其他源
192
+ ```
193
+
194
+ 热点板块龙头自动加入观察目前默认关闭,因为 StockAPI 龙头接口需要 token:
195
+
196
+ ```yaml
197
+ auto_watch:
198
+ hot_leader_scan_enabled: false
199
+ ```
200
+
201
+ StockAPI 无 token 时会按 5 天窗口分段请求,以满足免费接口限制。
202
+
203
+ RSI 日 K 数据很宝贵,`daily` 更新 RSI 时遵循:
204
+
205
+ ```text
206
+ 先更新持仓池
207
+ 再更新观察池
208
+ 达到 max_updates_per_daily 后停止
209
+ ```
210
+
211
+ 配置项:
212
+
213
+ ```yaml
214
+ technical:
215
+ rsi:
216
+ max_updates_per_daily: 50
217
+ ```
218
+
219
+ ## 涨停扫描
220
+
221
+ ```bash
222
+ stock-up scan limit-up
223
+ ```
224
+
225
+ 默认使用 AkShare。测试可用:
226
+
227
+ ```bash
228
+ stock-up scan limit-up --provider mock --date 2026-05-31
229
+ ```
230
+
231
+ 初始低点模式:
232
+
233
+ ```bash
234
+ stock-up scan limit-up --low-mode same_day
235
+ stock-up scan limit-up --low-mode recent_1d
236
+ ```
237
+
238
+ ## 每日报告
239
+
240
+ ```bash
241
+ stock-up daily
242
+ ```
243
+
244
+ 测试:
245
+
246
+ ```bash
247
+ stock-up daily --provider mock --date 2026-05-31
248
+ ```
249
+
250
+ 报告输出到:
251
+
252
+ ```text
253
+ ~/.stock-up/reports/YYYY-MM-DD.md
254
+ ```
255
+
256
+ ## 测试
257
+
258
+ ```bash
259
+ pytest -q
260
+ ```
261
+
262
+ ## 免责声明
263
+
264
+ 本工具仅用于个人复盘和策略辅助,不构成投资建议。
@@ -0,0 +1,232 @@
1
+ # stock-up
2
+
3
+ [![CI](https://github.com/Guitenbay/stock-up/actions/workflows/ci.yml/badge.svg)](https://github.com/Guitenbay/stock-up/actions/workflows/ci.yml)
4
+ [![PyPI version](https://img.shields.io/pypi/v/stock-up.svg)](https://pypi.org/project/stock-up/)
5
+ [![Python versions](https://img.shields.io/pypi/pyversions/stock-up.svg)](https://pypi.org/project/stock-up/)
6
+
7
+ 命令行版个人股票策略执行助手。
8
+
9
+ ## 安装
10
+
11
+ 从 PyPI 安装:
12
+
13
+ ```bash
14
+ python3 -m pip install stock-up
15
+ ```
16
+
17
+ 如果要使用 AkShare 备用数据源:
18
+
19
+ ```bash
20
+ python3 -m pip install 'stock-up[akshare]'
21
+ ```
22
+
23
+ 验证安装:
24
+
25
+ ```bash
26
+ stock-up --help
27
+ ```
28
+
29
+ ## 开发环境
30
+
31
+ ```bash
32
+ git clone https://github.com/Guitenbay/stock-up.git
33
+ cd stock-up
34
+ python3 -m pip install -e '.[dev]'
35
+ pytest -q
36
+ ```
37
+
38
+ 如果开发时要使用 AkShare:
39
+
40
+ ```bash
41
+ python3 -m pip install -e '.[dev,akshare]'
42
+ ```
43
+
44
+ ## 初始化
45
+
46
+ ```bash
47
+ stock-up init
48
+ ```
49
+
50
+ 默认创建:
51
+
52
+ ```text
53
+ ~/.stock-up/config.yaml
54
+ ~/.stock-up/data.db
55
+ ~/.stock-up/reports/
56
+ ```
57
+
58
+ 测试时可以指定目录:
59
+
60
+ ```bash
61
+ stock-up init --home /tmp/stock-up-demo
62
+ ```
63
+
64
+ ## 观察池
65
+
66
+ 手动加入观察:
67
+
68
+ ```bash
69
+ stock-up watch add 300308 --name 中际旭创 --high 130 --low 110 --now 120
70
+ ```
71
+
72
+ 查看观察池:
73
+
74
+ ```bash
75
+ stock-up watch list
76
+ ```
77
+
78
+ 检查观察信号:
79
+
80
+ ```bash
81
+ stock-up watch check
82
+ ```
83
+
84
+ 查看废弃观察:
85
+
86
+ ```bash
87
+ stock-up watch abandoned
88
+ ```
89
+
90
+ 修正高低点:
91
+
92
+ ```bash
93
+ stock-up watch set 300308 --high 135 --low 112
94
+ ```
95
+
96
+ ## 持仓
97
+
98
+ 添加持仓:
99
+
100
+ ```bash
101
+ stock-up hold add 300308 --name 中际旭创 --cost 120 --qty 100 --rule wolf_swing
102
+ ```
103
+
104
+ 规则支持:
105
+
106
+ ```text
107
+ wolf_swing = 狼大波段规则
108
+ hai_long = 海指导规则
109
+ both = 两套规则同时开启
110
+ ```
111
+
112
+ 加仓:
113
+
114
+ ```bash
115
+ stock-up hold add-buy 300308 --price 125 --qty 100
116
+ ```
117
+
118
+ 检查持仓:
119
+
120
+ ```bash
121
+ stock-up hold check
122
+ ```
123
+
124
+ 关闭持仓:
125
+
126
+ ```bash
127
+ stock-up hold close 300308 --price 135 --reason 止盈
128
+ ```
129
+
130
+ 关闭后重新加入观察:
131
+
132
+ ```bash
133
+ stock-up hold close 300308 --price 135 --reason 止盈 --watch
134
+ ```
135
+
136
+ ## 盘中 tick
137
+
138
+ `stock-up` 不常驻。盘中由外部定时任务反复调用:
139
+
140
+ ```bash
141
+ stock-up tick
142
+ ```
143
+
144
+ 默认使用腾讯实时行情。测试可用:
145
+
146
+ ```bash
147
+ stock-up tick --provider mock
148
+ ```
149
+
150
+ 建议外部定时任务每 20 秒调用一次。
151
+
152
+ ## 数据源
153
+
154
+ 当前默认:
155
+
156
+ ```text
157
+ 实时行情:腾讯 qt.gtimg.cn
158
+ 自动加入观察:默认关闭
159
+ 日 K / RSI:StockAPI,失败再尝试其他源
160
+ ```
161
+
162
+ 热点板块龙头自动加入观察目前默认关闭,因为 StockAPI 龙头接口需要 token:
163
+
164
+ ```yaml
165
+ auto_watch:
166
+ hot_leader_scan_enabled: false
167
+ ```
168
+
169
+ StockAPI 无 token 时会按 5 天窗口分段请求,以满足免费接口限制。
170
+
171
+ RSI 日 K 数据很宝贵,`daily` 更新 RSI 时遵循:
172
+
173
+ ```text
174
+ 先更新持仓池
175
+ 再更新观察池
176
+ 达到 max_updates_per_daily 后停止
177
+ ```
178
+
179
+ 配置项:
180
+
181
+ ```yaml
182
+ technical:
183
+ rsi:
184
+ max_updates_per_daily: 50
185
+ ```
186
+
187
+ ## 涨停扫描
188
+
189
+ ```bash
190
+ stock-up scan limit-up
191
+ ```
192
+
193
+ 默认使用 AkShare。测试可用:
194
+
195
+ ```bash
196
+ stock-up scan limit-up --provider mock --date 2026-05-31
197
+ ```
198
+
199
+ 初始低点模式:
200
+
201
+ ```bash
202
+ stock-up scan limit-up --low-mode same_day
203
+ stock-up scan limit-up --low-mode recent_1d
204
+ ```
205
+
206
+ ## 每日报告
207
+
208
+ ```bash
209
+ stock-up daily
210
+ ```
211
+
212
+ 测试:
213
+
214
+ ```bash
215
+ stock-up daily --provider mock --date 2026-05-31
216
+ ```
217
+
218
+ 报告输出到:
219
+
220
+ ```text
221
+ ~/.stock-up/reports/YYYY-MM-DD.md
222
+ ```
223
+
224
+ ## 测试
225
+
226
+ ```bash
227
+ pytest -q
228
+ ```
229
+
230
+ ## 免责声明
231
+
232
+ 本工具仅用于个人复盘和策略辅助,不构成投资建议。