fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
179 lines
6.5 KiB
Markdown
179 lines
6.5 KiB
Markdown
---
|
||
name: alphasift
|
||
description: "自动选股 Skill。Use when: 用户要按策略筛选 A 股、列出可用策略、运行双低/放量突破等选股,或保存运行并做 T+N 后验评估。通过 alphasift CLI 或 Python 接口输出候选股票列表。"
|
||
---
|
||
|
||
# alphasift — 自动选股 Skill
|
||
|
||
按策略筛选、评分并排序 A 股候选股票。
|
||
|
||
定位:全市场候选发现与横向排序引擎。它站在 `daily_stock_analysis` 这类单股深度分析服务上游;DSA 只是可选 L3 后置分析器,不是主筛选依赖。
|
||
|
||
## Use When
|
||
|
||
- 用户要列出当前可用策略
|
||
- 用户要按 `dual_low`、`volume_breakout` 这类策略筛选 A 股
|
||
- 用户要拿到结构化 JSON 结果,供后续 agent 继续分析
|
||
- 用户要保存选股运行,并在之后用最新快照评估结果
|
||
- 用户第一次接触本项目,想用 `alphasift quickstart` 一键看到全市场→候选→排名的最小闭环
|
||
|
||
## Preconditions
|
||
|
||
- 当前只支持 `market="cn"`
|
||
- 需要先在仓库根目录安装包:`pip install -e .`
|
||
- 如需 LLM 排序,可设置 `LITELLM_MODEL`、`LLM_CHANNELS`、`LITELLM_CONFIG` 或旧变量 `LLM_API_KEY/LLM_MODEL/LLM_BASE_URL`
|
||
- 可直接复用 `daily_stock_analysis` 的 LiteLLM 配置字段,包括 `OPENAI_*`、`GEMINI_*`、`DEEPSEEK_API_KEY`、`OLLAMA_API_BASE`
|
||
- 策略 YAML 可通过 `scoring_profile`、`risk_profile`、`portfolio_profile`、`scorecard_profile` 覆盖默认规则
|
||
- 策略 YAML 可通过 `event_profile` 配置偏好/规避事件、公告类别和候选上下文来源权重
|
||
- LLM 会输出候选行业/主题标签;如候选提供 `industry/concepts/board_heat_score/board_heat_trend_score`,会作为 LLM、主题热度因子与组合分散层锚点;history sidecar 可回填持续性、降温和状态字段。默认组合分散层会用这些标签映射风险桶,降低同一拥挤交易重复占位
|
||
- L3 默认启用本地 `scorecard` 后置评分器,也可追加 `dsa` 或 `external_http`
|
||
- 如需 DSA 后置分析,设置 `DSA_API_URL`,默认调用 `POST /api/v1/analysis/analyze`
|
||
- 依赖日 K 的策略会在 L1 后自动对 Top N 候选做日 K 增强
|
||
- 日 K 数据源 `DAILY_SOURCE` 支持 `akshare`(默认)、`baostock` 或 `auto`,`auto` 会在 akshare 失败时自动降级到 baostock 作为免费兜底
|
||
|
||
## Operations
|
||
|
||
### 1. 列出策略
|
||
|
||
```bash
|
||
alphasift strategies
|
||
```
|
||
|
||
### 1.1 一键演示(无 API key)
|
||
|
||
```bash
|
||
alphasift quickstart
|
||
alphasift quickstart --strategy balanced_alpha --max-output 8
|
||
```
|
||
|
||
### 2. 执行选股
|
||
|
||
```bash
|
||
alphasift screen dual_low --no-llm
|
||
alphasift screen volume_breakout --max-output 10
|
||
alphasift screen balanced_alpha --no-llm
|
||
alphasift screen capital_heat
|
||
alphasift screen balanced_alpha --context "今日券商板块放量,低估值金融获得资金回流"
|
||
alphasift --env-file /home/ubuntu/daily_ai_assistant/.env screen balanced_alpha
|
||
alphasift screen balanced_alpha --explain
|
||
alphasift screen balanced_alpha --candidate-context-file candidate_context.csv
|
||
alphasift screen dual_low --no-post-analysis
|
||
alphasift screen shrink_pullback --no-llm
|
||
alphasift screen dual_low --post-analyzer dsa
|
||
alphasift audit
|
||
alphasift industry-cache --output data/industry_map.csv --explain
|
||
alphasift screen dual_low --no-llm --save-run
|
||
alphasift runs
|
||
alphasift evaluate <run_id> --explain
|
||
alphasift evaluate-batch --limit 20 --explain
|
||
alphasift evaluate <run_id> --with-price-path --explain
|
||
```
|
||
|
||
### 3. Python 调用
|
||
|
||
```python
|
||
from alphasift import evaluate_saved_run, evaluate_saved_runs, list_strategies, screen
|
||
|
||
list_strategies()
|
||
screen("dual_low", market="cn", use_llm=False)
|
||
evaluate_saved_run("<run_id>")
|
||
evaluate_saved_runs(limit=20)
|
||
```
|
||
|
||
## Output
|
||
|
||
返回 `ScreenResult` JSON,核心字段有:
|
||
- `strategy`
|
||
- `market`
|
||
- `strategy_version`
|
||
- `snapshot_count`
|
||
- `after_filter_count`
|
||
- `picks`
|
||
- `llm_ranked`
|
||
- `llm_market_view`
|
||
- `llm_selection_logic`
|
||
- `llm_portfolio_risk`
|
||
- `llm_coverage`
|
||
- `post_analyzers`
|
||
- `daily_enriched`
|
||
- `risk_enabled`
|
||
- `portfolio_concentration_notes`
|
||
- `degradation`
|
||
- `snapshot_source`
|
||
- `source_errors`
|
||
|
||
每个 `Pick` 包含:
|
||
- `rank`
|
||
- `code`
|
||
- `name`
|
||
- `final_score`
|
||
- `screen_score`
|
||
- `ranking_reason`
|
||
- `risk_summary`
|
||
- `price`
|
||
- `change_pct`
|
||
- `amount`
|
||
- `total_mv`
|
||
- `turnover_rate`
|
||
- `volume_ratio`
|
||
- `pe_ratio`
|
||
- `pb_ratio`
|
||
- `industry`
|
||
- `concepts`
|
||
- `board_heat_score`
|
||
- `board_heat_latest_score`
|
||
- `board_heat_trend_score`
|
||
- `board_heat_persistence_score`
|
||
- `board_heat_cooling_score`
|
||
- `board_heat_observations`
|
||
- `board_heat_state`
|
||
- `board_heat_summary`
|
||
- `change_60d`
|
||
- `signal_score`
|
||
- `macd_status`
|
||
- `rsi_status`
|
||
- `breakout_20d_pct`
|
||
- `range_20d_pct`
|
||
- `volume_ratio_20d`
|
||
- `body_pct`
|
||
- `pullback_to_ma20_pct`
|
||
- `consolidation_days_20d`
|
||
- `factor_scores`
|
||
- `llm_confidence`
|
||
- `llm_sector`
|
||
- `llm_theme`
|
||
- `llm_tags`
|
||
- `llm_catalysts`
|
||
- `llm_risks`
|
||
- `llm_thesis`
|
||
- `llm_style_fit`
|
||
- `llm_watch_items`
|
||
- `llm_invalidators`
|
||
- `risk_score`
|
||
- `risk_level`
|
||
- `risk_penalty`
|
||
- `risk_flags`
|
||
- `portfolio_penalty`
|
||
- `portfolio_flags`
|
||
- `post_analysis_status`
|
||
- `post_analysis_score_deltas`
|
||
- `deep_analysis_status`
|
||
- `deep_analysis_summary`
|
||
- `deep_analysis_result`
|
||
- `deep_analysis_signal_score`
|
||
- `deep_analysis_sentiment_score`
|
||
- `deep_analysis_operation_advice`
|
||
- `deep_analysis_trend_prediction`
|
||
- `deep_analysis_risk_flags`
|
||
|
||
## Boundaries
|
||
|
||
- 当前没有独立的远程 `get_result` 服务;本地用 `--save-run`、`runs`、`evaluate`、`evaluate-batch` 管理运行记录
|
||
- `audit` 用于自检策略 profile 覆盖、已知能力短板和下一步优先级
|
||
- `--candidate-context-file` 支持 CSV/JSON/JSONL,通过 `code` 对齐候选级新闻、公告、资金流或研究摘要,只注入当前候选池相关行;可选抓取会附带 `source_count`、`source_confidence`、`source_weight_score`、`context_summary` 和公告类别
|
||
- 候选级上下文会识别粗粒度事件标签和负面风险标签,供 LLM 横向排序参考
|
||
- `industry-cache` 会缓存行业/概念映射和板块热度字段,并写入 history sidecar;后续加载映射时可回填板块热度滚动趋势、持续性、降温和状态字段,供 LLM 上下文与 `theme_heat` 因子使用
|
||
- 组合分散层优先使用 LLM 返回的行业/主题标签,也可回退到候选 `industry` 字段;两者都缺失时不会改变规则分数
|
||
- L3 后置分析器只在最终候选上运行,不参与全市场初筛;本地 `scorecard` 默认启用,DSA 只是其中一个可追加后端
|
||
- T+N 评估基于保存价和评估时最新快照价,不等同完整复权回测;可扣减交易成本并输出突破/回踩形态后验标签;`--with-price-path` 会额外估算最大回撤和最大浮盈
|