# 投资信号与持仓关系说明

## 概述

AgomTradePro 是一个**决策辅助系统**，不是自动交易系统。系统负责分析宏观环境并给出投资建议，用户根据建议**手动执行交易**。

## 核心概念

### 投资信号 (InvestmentSignal)

**投资信号是系统根据宏观分析生成的交易建议。**

- **生成时机**：当 Regime 判定、宏观指标变化等条件满足时
- **信号内容**：
  - `asset_code` - 建议交易的资产代码
  - `direction` - 建议方向（Long 做多 / Short 做空）
  - `logic_desc` - 信号逻辑说明
  - `invalidation_logic` - 证伪条件（什么情况下信号失效）

- **信号状态**：
  - `pending` - 待审核
  - `approved` - 已采纳（用户认可该建议）
  - `rejected` - 已拒绝（用户不认可）

- **示例信号**：
  ```
  PMI 连续回升，经济复苏 → 建议买入沪深300 (000300.SH)
  证伪条件：PMI 跌破 50 且连续 2 月低于前值
  ```

### 持仓 (Position)

**持仓是用户实际持有并手动录入的资产记录。**

- **记录内容**：
  - `asset_code` - 资产代码
  - `shares` - 持仓数量
  - `avg_cost` - 平均成本价
  - `current_price` - 当前市价
  - `market_value` - 市值 = shares × current_price

- **来源追踪**：
  - `source = 'manual'` - 手动录入（与信号无关）
  - `source = 'signal'` - 从信号创建（关联 signal_id）
  - `source = 'backtest'` - 从回测创建

- **状态**：
  - `is_closed = False` - 持仓中
  - `is_closed = True` - 已平仓

## 信号 → 持仓 的流程

### 当前系统流程（手动交易模式）

```
┌─────────────────────────────────────────────────────────────────────┐
│                        宏观环境分析                                   │
│  Regime 判定 → PMI/CPI 数据 → 增长/通胀动量 → 当前象限               │
└─────────────────────────────────────────────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        生成投资建议                                   │
│  系统根据宏观环境生成投资信号（如：建议买入沪深300）                  │
└─────────────────────────────────────────────────────────────────────┘
                                  │
                    ┌─────────────┴─────────────┐
                    ▼                           ▼
            ┌───────────────┐           ┌───────────────┐
            │  用户采纳建议  │           │  用户拒绝建议  │
            │  approved     │           │  rejected     │
            └───────────────┘           └───────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        用户手动执行交易                               │
│  用户在券商 APP/软件中实际买入资产                                   │
└─────────────────────────────────────────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        录入持仓到系统                                 │
│  用户在系统中手动记录持仓信息（数量、成本价等）                       │
│  可选择关联到对应信号（source = signal, source_id = 信号ID）          │
└─────────────────────────────────────────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        系统持续监控                                   │
│  • 更新持仓市值（需要行情接口）                                       │
│  • 监控证伪条件（信号失效时提示平仓）                                 │
│  • 分析持仓与当前 Regime 的匹配度                                     │
└─────────────────────────────────────────────────────────────────────┘
```

## 关键区别

| 维度 | 投资信号 | 持仓 |
|------|---------|------|
| **性质** | 建议/计划 | 实际持有 |
| **生成方** | 系统自动分析 | 用户手动录入 |
| **时效性** | 执行前存在 | 执行后产生 |
| **变更** | 状态可变（pending→approved/rejected） | 数量可增减，可平仓 |
| **证伪** | 有证伪条件，失效后提示 | 监控对应信号的证伪条件 |

## 证伪逻辑

当信号的 `invalidation_logic` 被触发时：

1. **系统检测**：定时任务检查活跃信号的证伪条件
2. **状态更新**：信号状态变为 `invalidated`
3. **用户通知**：系统提示用户考虑平仓
4. **用户决策**：用户决定是否平仓（手动执行）
5. **持仓更新**：用户在系统中记录平仓操作

## 示例场景

### 场景 1：信号 → 采纳 → 建仓 → 持仓

```
1. 系统分析：PMI 从 49 回升到 51，连续 3 个月上涨
2. 生成信号：建议买入 000300.SH（沪深300）
   逻辑：经济复苏，权益资产受益
   证伪：PMI 跌破 50 且连续 2 月低于前值
3. 用户审核：采纳该建议 (approved)
4. 用户操作：在券商 APP 买入 1000 股，成本价 4.5 元
5. 录入持仓：
   - asset_code: 000300.SH
   - shares: 1000
   - avg_cost: 4.5
   - source: signal
   - source_id: 信号ID
6. 系统监控：
   - 持续跟踪 PMI 数据
   - 如果 PMI 跌破 50，系统提示"建议平仓"
```

### 场景 2：手动建仓（与信号无关）

```
1. 用户自主决定买入某资产
2. 在券商 APP 完成交易
3. 录入持仓：
   - asset_code: 512100.SH
   - shares: 500
   - avg_cost: 10.2
   - source: manual
4. 系统分析：该持仓与当前 Regime 匹配度低，给出调整建议
```

## 系统边界

### 系统负责 ✅

- 宏观环境分析（Regime 判定）
- 生成投资建议（信号）
- 监控证伪条件
- 分析持仓匹配度
- 提供调整建议

### 用户负责 ✅

- 审核信号（采纳/拒绝）
- 手动执行交易（通过券商）
- 录入持仓信息
- 更新持仓价格
- 决定平仓时机

### 系统不负责 ❌

- 自动交易
- 资金划转
- 实时行情（需配置外部接口）
- 订单执行

## 用户操作指南

### 查看信号

1. 进入 `/signal/manage/`
2. 查看所有信号的状态
3. 点击信号查看详细逻辑

### 采纳/拒绝信号

1. 在信号列表中，点击"采纳"或"拒绝"
2. 采纳后，信号变为 `approved` 状态
3. 系统记录您的决策

### 手动建仓

**方式 1：从信号创建**
1. 在信号详情页，点击"创建持仓"
2. 填写持仓信息（数量、成本价）
3. 提交后自动关联到该信号

**方式 2：手动录入**
1. 进入持仓管理页面
2. 点击"添加持仓"
3. 填写持仓信息，来源选择"手动"

### 更新持仓价格

1. 进入持仓列表
2. 点击"更新价格"（需要配置行情接口）
3. 系统自动重算市值和盈亏

### 平仓

1. 在持仓列表中，点击"平仓"
2. 输入平仓数量和价格
3. 系统记录平仓操作

## 数据模型关系

```
InvestmentSignal (投资信号)
    ├─ id
    ├─ asset_code
    ├─ direction (Long/Short)
    ├─ logic_desc
    ├─ invalidation_logic
    └─ status (pending/approved/rejected/invalidated)

Position (持仓)
    ├─ id
    ├─ asset_code
    ├─ shares
    ├─ avg_cost
    ├─ source (manual/signal/backtest)
    ├─ source_id (关联的 signal_id 或 backtest_id)
    └─ is_closed

PositionSignalLog (信号执行日志) [可选]
    ├─ signal_id
    ├─ position_id
    └─ executed_at
```

## 未来扩展

### 自动交易模式（未来可能）

如果对接券商 API，可以实现：

1. 系统生成信号 → 自动发送订单到券商
2. 信号证伪 → 自动发送平仓订单
3. 每日收盘自动更新持仓市值

但这需要：
- 券商 API 接入
- 资金账户授权
- 风控机制
- 监管合规

---

## 总结

> **AgomTradePro 是您的投资决策助手，不是自动交易机器人。**
>
> 系统帮您分析宏观环境、生成投资建议、监控风险，但最终决策和执行由您掌控。
