本仓库包含子项目:a_fund_signal_dashboard(A股场外基金买卖识别指挥台)。
欢迎通过 GitHub Issues 提交 Bug、功能建议或使用问题。
如需交流,可以联系:
- QQ:50580349
- WeChat:GameMike1920
- Gmail:[email protected]
本项目仅作为开源技术工具和个人投研辅助仪表盘,不构成任何投资建议,不提供证券、基金、期货等金融产品的投资咨询服务,不开展荐股、荐基、带单、代客理财或收益承诺。金融市场有风险,投资决策需由使用者独立判断并自行承担风险。
- 仅允许个人学习、研究、内部自用
- 未经作者明确书面许可,禁止任何形式的商业化使用、售卖、代运营、二次封装收费、对外提供付费服务或数据服务
- 如需商业授权或合作,请先联系作者
本项目是一个本地运行的「A股场外基金买卖识别指挥台」,用于辅助你每天判断场外基金是否买入、加仓、减仓/卖出或不动。
定位与边界:
- 只做辅助决策与复盘展示,不做自动交易、不接券商接口、不自动下单
- 盘中无法获取场外基金实时净值,盘中信号使用对应 ETF / 指数日K(实时接口不稳定时降级为最近交易日)
- 盘后可用基金净值做复盘校准(不用于倒推盘中决策)
项目是“本地辅助决策仪表盘”,主要模块如下(均在项目根目录):
app.py:Streamlit 中文页面入口(总览、强弱排序、单基金详情、持仓管理、决策记录、盘后复盘)config.py:基金池、ETF信号源、基准指数、仓位与金额规则等配置data_fetcher.py:AkShare 取数与字段标准化(ETF日K、ETF实时行情、指数日K、场外基金净值)strategy.py:指标计算、买入评分、卖出评分、大盘环境判断portfolio.py:持仓/现金估算、仓位上限、现金安全垫、连续加仓限制等约束decision.py:最终动作决策(每天只输出一个主动作,且默认保守)db.py:本地 SQLite 持仓与决策记录落库/读取utils.py:交易日判断、交易时段划分、格式化工具
数据流(v1):
- 盘中:优先使用 ETF 实时行情(若开启且可获取),失败则回退 ETF 日K最近交易日数据;指数用日K
- 计算指标与评分:生成买入/卖出评分与拆解原因
- 结合持仓与风控:输出当日单一主动作(买入/加仓/减仓/卖出/不动)
- 盘后:如填写了基金代码,可拉取基金净值做对比复盘(不用于盘中决策)
建议使用虚拟环境(macOS):
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
python -m pip install -r requirements.txt在项目目录下执行:
streamlit run app.py或使用你期望的方式:
pip install -r requirements.txt
streamlit run app.py第一版支持两种方式:
- 直接修改
config.py中的FUND_POOL默认配置 - 启动后在左侧栏「基金池配置(v1:会话内生效)」用表格编辑(支持增删改),并可下载为 JSON 备份
字段说明:
- 基金名称:展示与持仓关联用
- 赛道:用于赛道仓位上限判断
- 基金代码(可空):用于盘后拉取场外基金净值复盘;不填也能跑(盘中主要用 ETF 信号)
- 信号源ETF代码:用于盘中/日内代理信号(v1 使用日K)
- 基准指数代码:默认用沪深300
sh000300,也可以改成其他指数
页面中「持仓管理区」可直接编辑并保存到本地 SQLite(data/dashboard.db,运行时自动创建)。
建议至少填写:
- 基金名称(需与基金池名称一致,才能在决策层识别为“已有持仓”)
- 赛道
- 持仓金额(元)
- 是否允许加仓(1允许 / 0不允许)
- 上次加仓日期(用于连续加仓限制)
盈亏比例(pnl)示例:盈利 5% 填 0.05,亏损 3% 填 -0.03。
基于 ETF/指数日K计算:
- 近5/10/20日涨跌幅
- 是否跑赢沪深300(近5/10/20日)
- 是否站上20日均线、20日均线是否向上、距离20日均线百分比
- 近3日连续大涨/连续下跌(简化阈值)
- 成交额相对近5日均量是否放大、是否放量下跌、是否放量滞涨(简化)
- 大盘环境是否允许进攻(基于多指数是否破位/回撤简化判断)
补充说明(v1 取数口径):
- 场外基金盘中没有实时净值,所以盘中只使用 ETF/指数做代理信号
- 盘中若开启“实时ETF行情”,会优先用实时最新价/涨跌幅/成交额更新展示与部分判断;其余回看类指标仍基于历史日K
- 数据源不稳定时会显示“口径=日K/失败”,并默认更保守
买入分 = 趋势分 + 位置分 + 资金分 + 大盘环境分 + 情绪风险分
核心阈值:
- ≥80:允许买入/加仓
- 70-79:允许小买观察
- 60-69:不动观察
- <60:禁止买入
买入评分拆解(与代码一致的 v1 规则):
- 趋势分(30):近5/10/20日跑赢基准、站上20日均线、20日均线上行
- 位置分(25):距离20日均线分段打分、避免连续大涨、回踩不破均线附近(简化)
- 资金分(20):成交额相对5日均量放大、当日价量配合、避免放量滞涨(简化)
- 大盘环境分(15):沪深300/创业板/科创50/上证的破位与回撤(简化)
- 情绪风险分(10):启动/修复倾向、连续暴涨/高位放量滞涨扣分(简化)
卖出分 = 趋势破坏分 + 资金流出分 + 高位风险分 + 大盘风险分 + 持仓风险分 + 替代机会分
核心阈值:
- ≥80:强制减仓或卖出
- 65-79:减仓30%-50%
- 50-64:暂停加仓,观察
- <50:继续持有
卖出评分拆解(与代码一致的 v1 规则):
- 趋势破坏分(30):跌破20日均线、短期相对大盘走弱(部分项为近似简化)
- 资金流出分(20):放量下跌、放量但不涨、弱于大盘(简化)
- 高位风险分(15):远离均线后回落、短期涨幅过大、高位放量滞涨(简化)
- 大盘风险分(15):大盘破位/成长大跌/系统性风险
- 持仓风险分(10):仓位过重、亏损扩大(需在持仓里填写 pnl 才能更准确)
- 替代机会分(10):v1 由最终决策层整体比较强弱(暂未单独量化)
优先级:
- 系统性风险优先防守
- 有高卖出分持仓优先处理
- 无风险持仓时,才考虑新买入/加仓
- 不确定默认“不动”
- 多只基金满足买入,选买入分最高且距离均线更舒服的一只
对应风控约束(v1):
- 单只基金最大仓位 25%,单一赛道最大仓位 30%
- 现金安全垫至少 20%
- 同一只基金不允许连续 3 个交易日加仓(按“上次加仓日期”简化)
- 距离20日均线超过 8% 时禁止大额追高(仅允许小买或观察)
- 若趋势分偏低,禁止“因为亏损而补仓”
- 本项目不构成任何投资建议,所有输出仅供参考
- 不保证数据准确性与完整性,AkShare 接口可能失败或延迟
- 场外基金申购/赎回按规则以净值确认,盘中信号仅为 ETF/指数代理
- 请严格控制仓位与风险,尤其注意单基金/单赛道上限与现金安全垫
- 基金池配置持久化(从会话内编辑升级为可写入配置文件/数据库)
- 更可靠的实时行情降级链路与本地缓存
- 更精细的“终判/仅执行/盘后复盘”流程(例如锁定当日决策,避免反复刷新导致变化)
- 复盘模块完善:净值-ETF偏离统计、信号源可信度打分、参数自适应建议
- 更完整的持仓收益曲线、回撤、资金曲线与决策命中率统计



