定期投资 — 系统设计方案
N2N-AFE 为券商和银行提供一体化交易解决方案已超过 43 年。随着零售投资者对「被动定投」和「自动化理财」需求的快速增长,券商客户迫切需要一套内嵌于现有交易系统的PRP(Periodic Recurring Program,定期投资)功能。
该模块允许投资者设定自动化定额定期投资,系统按设定频率通过券商自有交易通道执行下单,并由结算系统自动更新持仓,全程可追踪、可修改、可审计。
| 角色 | 描述 | 权限范围 |
|---|---|---|
| Investor | 券商终端投资者 | 创建/修改/查看/暂停/恢复/取消 自己的 PRP 计划 |
| Staff | 券商运营/客服人员 | 监控全部计划、系统配置、报表导出、手动干预 |
| Admin | 系统管理员 | 市场规则配置、费率模板、通知模板、数据维护 |
| 步骤 | 字段 | 类型 | 说明 |
|---|---|---|---|
| 1 | 标的代码 | 搜索框 | 支持代码/名称搜索,自动补全,显示交易所+币种 |
| 2 | 每次投入金额 | 数值 | 按币种单位 |
| 3 | 投资频率 | 下拉 | 每日 / 每周 / 每月 |
| 4 | 频率日 | 选择器 | 每周=选周一到周五;每月=选 1-28 号 如果所选日期为非交易日,订单将于下一个交易日执行 |
| 5 | 开始日期 | 日期选择 | 必须大于当前日期(最小为 T+1) |
| 6 | 结束方式 | 切换 |
选项 A: 设定结束日期(日期选择) 选项 B: 设定投资次数(输入轮数,如 12 次 = 一年) 如选择"无截止日期"(Good Till Cancel),请将结束日期留空 |
| 7 | 碎股/零股处理 | 单选 | 向上取整 / 向下取整 / 四舍五入 / 允许碎股 |
| 可修改字段 | 不可修改字段 |
|---|---|
| 每次投入金额、频率、频率日、结束方式(日期/次数)、碎股处理方式 | 标的代码、开始日期(若需改=取消重建) |
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
plan_id | VARCHAR(32) | PK | 如 PRP-20260801-0001 |
client_id | VARCHAR(32) | NOT NULL | 关联投资者(沿用现有系统 client_id) |
account_id | VARCHAR(32) | NOT NULL | 关联交易账户 |
instrument_code | VARCHAR(20) | NOT NULL | 标的代码(G3SF 标准格式) |
exchange_id | VARCHAR(10) | NOT NULL | 交易所代码(沿用现有系统) |
amount_per_time | DECIMAL(18,4) | NOT NULL | 每次投入金额 |
frequency | ENUM | NOT NULL | DAILY / WEEKLY / MONTHLY |
frequency_day | TINYINT | WEEKLY=1-5(周一到周五), MONTHLY=1-28 | |
start_date | DATE | NOT NULL | 计划开始日期 |
end_date | DATE | NULL | NULL=无限期;非空=指定结束日期 |
total_rounds | INT | NULL | 计划执行总次数(与 end_date 互斥,二选一) |
fractional_handling | ENUM | NOT NULL | ROUND_UP / ROUND_DOWN / NEAREST / ALLOW_FRACTIONAL |
status | ENUM | NOT NULL | ACTIVE / PAUSED / COMPLETED / CANCELLED |
total_invested | DECIMAL(18,4) | DEFAULT 0 | 累计已投入金额 |
total_units | DECIMAL(18,6) | DEFAULT 0 | 累计已购份额 |
avg_cost | DECIMAL(18,6) | DEFAULT 0 | 平均成本价 |
execution_count | INT | DEFAULT 0 | 已执行次数 |
created_at | DATETIME | NOT NULL | |
updated_at | DATETIME | NOT NULL | |
created_by | VARCHAR(32) | NOT NULL | client_id 或 staff_id |
instrument_code,不自动切换至新代码。因公司行动产生的持仓或权益变化由 G3SB 结算系统按常规公司行动流程处理,不影响 PRP 的定投执行。
| 字段 | 类型 | 说明 |
|---|---|---|
execution_id | VARCHAR(32) PK | 如 EXEC-20260801-0001 |
plan_id | VARCHAR(32) FK | 关联计划 |
scheduled_date | DATE | 计划执行日期 |
actual_time | DATETIME | 实际执行时间 |
amount | DECIMAL(18,4) | 本次投入金额 |
execution_price | DECIMAL(18,6) | 实际成交均价 |
quantity_full | INT | 整股数量 |
quantity_fractional | DECIMAL(18,6) | 碎股数量(如有) |
total_quantity | DECIMAL(18,6) | 总份额 |
commission | DECIMAL(18,4) | 佣金 |
other_fees | DECIMAL(18,4) | 其他费用 |
status | ENUM | PENDING / EXECUTED / PARTIAL / FAILED / SKIPPED |
g3sf_order_id | VARCHAR(32) | G3SF 订单编号(可通过订单 ID 追溯全部关联信息) |
trade_remark | VARCHAR(100) | 成交备注标记为 PRP 投资计划 |
error_code | VARCHAR(20) | 失败错误码:SHORTFUND / SUSPENDED / PRICE_REJECTED / SYSTEM_ERROR |
error_msg | TEXT | 失败详情 |
notification_sent | BOOLEAN | 邮件通知是否已发送 |
SUSPENDED),发送邮件通知投资者"标的已停牌",该笔执行不会补单。系统在下一个计划执行周期继续按正常流程处理。
| 字段 | 类型 | 说明 |
|---|---|---|
mod_id | VARCHAR(32) PK | 修改编号 |
plan_id | VARCHAR(32) FK | 关联计划 |
field_changed | VARCHAR(50) | 修改字段名 |
old_value | TEXT | 旧值(JSON) |
new_value | TEXT | 新值(JSON) |
modified_by | VARCHAR(32) | 修改人 |
modified_by_role | ENUM | INVESTOR / STAFF / SYSTEM |
modified_at | DATETIME | 修改时间 |
reason | VARCHAR(200) | 修改原因 |
| 字段 | 类型 | 说明 |
|---|---|---|
config_key | VARCHAR(100) PK | 配置键 |
config_value | TEXT | 配置值(JSON) |
updated_by | VARCHAR(32) | 更新人 |
updated_at | DATETIME | 更新时间 |
| 宿主产品 | 用户 | 设备 | 分辨率参考 | 布局策略 |
|---|---|---|---|---|
| eServices | Investor | Desktop Browser | 1280-1920px | 侧栏 / 全宽卡片式 |
| ProX | Staff | Desktop | 1440-2560px | 全宽表格 + 侧栏筛选 |
| OMC | Staff | Desktop | 1280-1920px | 全宽控制面板 |
| UI 字段中英对照 (Bilingual Reference) — 创建 PRP 计划 | |
|---|---|
| 选择标的 | Select Instrument |
| 搜索股票代码... | Search stock code... |
| 标的资料 (Instrument Master) | Instrument Master |
| 每次金额 | Amount per Time |
| 频率 | Frequency |
| 每日 / 每周 / 每月 | Daily / Weekly / Monthly |
| 执行日 | Execution Day |
| 如遇非交易日,自动顺延至下一个交易日 | If non-trading day, deferred to next trading day |
| 开始日期 * | Start Date * |
| 必须 > 今日 | Must be > today |
| 结束日期 | End Date |
| Good Till Cancel (勾选后结束日期自动禁用) | Good Till Cancel (Checking disables end date) |
| 碎股处理 | Fractional Share Handling |
| 允许碎股 | Allow Fractional Shares |
| 确认创建 | Confirm Creation |
| 预估 | Estimate |
| UI 字段中英对照 (Bilingual Reference) — 计划列表 | |
|---|---|
| 我的 PRP 投资计划 | My PRP Investment Plans |
| 标的 | Instrument |
| 频率 | Frequency |
| 累计投入 | Total Invested |
| 持仓市值 / 盈亏 | Position Value / P&L |
| PRP 总回报 | PRP Total Return |
| 每周三 / 每周一 / 每月 1 号 | Every Wednesday / Every Monday / 1st of month |
| 已卖出部分 | Partially Sold |
| 进行中 | Active |
| 已暂停 | Paused |
| UI 字段中英对照 (Bilingual Reference) — 修改 PRP 计划 | |
|---|---|
| 修改 PRP 计划 | Modify PRP Plan |
| 计划编号 | Plan ID |
| 创建于 | Created |
| 已执行 | Executed |
| 标的代码(不可修改) | Instrument Code (Non-modifiable) |
| 标的资料 (Instrument Master) | Instrument Master |
| 每次金额 | Amount per Time |
| 修改后下次执行生效 | Takes effect on next execution |
| 频率 | Frequency |
| 每日 / 每周 / 每月 | Daily / Weekly / Monthly |
| 碎股处理 | Fractional Share Handling |
| 向下取整 / 允许碎股 | Round Down / Allow Fractional |
| 修改原因 | Reason for Modification |
| 全部修改将记录至审计日志 | All modifications recorded in audit log |
| 修改后预估 | Revised Estimate |
| 取消 | Cancel |
| 确认修改 | Confirm Modification |
| UI 字段中英对照 (Bilingual Reference) — 投资预测 | |
|---|---|
| 投资预测 — PRP 定期投资模拟 | Investment Forecast — PRP Recurring Investment Simulation |
| 计划参数 | Plan Parameters |
| 预估年化回报率 | Estimated Annualized Return |
| 更新 / 计算 | Update / Calculate |
| 总投资额 | Total Investment |
| 预估组合市值 | Estimated Portfolio Value |
| 累计复利收益 | Cumulative Compound Returns |
| 投资组合市值 (12% CAGR) | Portfolio Value (12% CAGR) |
| 累计投入 (Cost Basis) | Total Invested (Cost Basis) |
| 关键洞察 | Key Insight |
| UI 字段中英对照 (Bilingual Reference) — 员工计划监控 | |
|---|---|
| 计划监控面板 | Plan Monitoring Dashboard |
| 全部交易所 | All Exchanges |
| 全部状态 | All Statuses |
| 搜索客户/代码... | Search client/code... |
| 刷新 | Refresh |
| 导出 CSV | Export CSV |
| 活跃计划 | Active Plans |
| 今日待执行 | Today Pending |
| 异常 | Anomalies |
| 计划编号 | Plan ID |
| 客户ID | Client ID |
| 标的 | Instrument |
| 金额 | Amount |
| 频率 | Frequency |
| 状态 | Status |
| 操作 | Actions |
| 详情 | Details |
| 代客修改 | Modify on Behalf |
| 支持双击表格行快速进入修改模式... | Double-click row to enter modification mode... |
| UI 字段中英对照 (Bilingual Reference) — 月度报表 | |
|---|---|
| 月度报表 | Monthly Report |
| 导出 PDF | Export PDF |
| 导出 Excel | Export Excel |
| 活跃计划数 | Active Plans |
| 月执行次数 | Monthly Executions |
| 月总投入金额 | Monthly Total Investment |
| 交易所 | Exchange |
| 成功 | Success |
| 失败 | Failed |
| 总金额 | Total Amount |
| 平均每笔 | Avg per Trade |
| 失败清单 (TOP 3) | Failure List (TOP 3) |
投资者端 (eServices) + 员工端 (ProX / OMC) — 同一组件,通过 G3SF API 通信。
存储: 计划数据 (plans)、执行记录 (executions)、审计日志 (modifications)
调度: 08:00 HKT(亚洲市场)/ 20:00 HKT(美股市场)定时扫描待执行计划
订单生成: 根据计划参数 + 市场规则计算股数、生成订单发送至券商 OMS
API: RESTful API 供 Widget 调用
PRP 成交数据基于现有 G3SB 与券商 OMS 之间的数据交换机制处理,无需新增接口。成交回报中标记 trade_remark 为 PRP 投资计划,G3SB 据此更新投资者持仓并将执行结果回写 execution 记录。
PRP 数据表 (plans / plan_executions / plan_modifications) 存放于现有 G3SF 数据库实例中,无需新建独立数据库。通过 g3sf_order_id 与订单系统关联追踪。
SHORTFUND)SUSPENDED)PRICE_REJECTED)| error_code | 邮件主题 | 触发条件 | 后续动作 |
|---|---|---|---|
| SHORTFUND | PRP 执行失败 — 账户资金不足 | 预扣资金时账户余额不足 | 客户手动补购;下周期自动重试 |
| SUSPENDED | PRP 执行失败 — 标的已停牌 | 执行日标的处于停牌状态 | 下周期自动重试 |
| PRICE_REJECTED | PRP 执行失败 — 订单价格无效 | 交易所拒单,重试 X 次后仍失败 | 标记 FAILED,不再重试 |
| SYSTEM_ERROR | PRP 执行失败 — 系统异常 | G3SF/G3SB 内部错误或超时 | 员工人工介入 |
| 方法 | 路径 | 说明 | 调用方 |
|---|---|---|---|
| POST | /api/v1/prp/plans | 创建 PRP 计划 | Investor Widget |
| GET | /api/v1/prp/plans?client_id=... | 查询客户计划列表 | Investor Widget |
| GET | /api/v1/prp/plans/{plan_id} | 计划详情 | Investor & Staff Widget |
| PUT | /api/v1/prp/plans/{plan_id} | 修改计划 | Investor Widget |
| PATCH | /api/v1/prp/plans/{plan_id}/status | 暂停/恢复/取消 | Investor & Staff Widget |
| GET | /api/v1/prp/plans/{plan_id}/executions | 执行历史 | Investor Widget |
| GET | /api/v1/prp/staff/executions/today | 今日执行清单 | Staff Widget |
| GET | /api/v1/prp/staff/plans?status=...&exchange=... | 员工计划总览 | Staff Widget |
| GET | /api/v1/prp/staff/reports/monthly | 月度报表 | Staff Widget |