# python-quant：逐课讲义与练习册

版本 content-v2；每课有独立讲解、操作、题设和答案。全部数值/规则为合成教学假设，不代表官方服务或真实业绩。允许本地纸面完成，不要求开户、入金或真实交易。

模块：Python 金融数据处理 / Backtrader 策略开发 / 本地研究引擎与接口边界

## Python 金融数据处理

### 概念
DataFrame用列组织价格记录。先解析UTC时间戳、按时间排序、按唯一时间键处理重复，再核对OHLC约束：high不小于open/close、low不大于open/close。缺失价格不能无条件前向填充，因为这会制造并不存在的可交易K线。收益率用close_t/close_(t−1)−1。

### 带数据推演
合成收盘100、102、101对应收益缺失、0.02、−0.00980392。若把101行复制一遍，须先去重再计算。SMA2在第二行101、第三行101.5。只有当信号使用时点早于计算数据时才需要额外滞后；不是所有rolling都机械shift一次。

### 作业题设
下载课程合成OHLCV与脏数据，运行pandas_lab.py，输出清洗计数、收益和重采样CSV。说明去重依据与窗口起始缺失值；禁止把合成数据称为真实历史。

### 检查限制
df.shift(-1)可用于事后标签但不能进入特征；不要把缺失的首个收益填成可训练的有效样本。

### 本模块课时
- m1-l1：Pandas 基础
- m1-l2：OHLCV 特征工程
- m1-l3：数据清洗练习

### m1-l1 Pandas 基础

#### 本课讲解
Pandas的Series是带索引的一列，DataFrame组织多列；按标签与按位置选择不同。时间索引须排序且唯一，不能用行号冒充交易时间。

#### 操作顺序
读CSV→查看列名/类型/行数→解析UTC→排序去重→设置索引→只选择需要列；保留原始文件和清洗报告。

#### 独立作业
运行pandas_lab.py，另用三行close=100/102/101写出行数、首个收益缺失原因和最后SMA2。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m1-l2 OHLCV 特征工程

#### 本课讲解
OHLCV特征应对应决策时点。收益率、滚动均值与波动率使用截至当时的数据；未来收益可作标签，但不能与特征混用。

#### 操作顺序
先清洗→算close.pct_change→滚动窗口→标可用时间→分开特征与标签→用前缀不变性检测未来依赖。

#### 独立作业
close为100/102/101，求两项有效收益；说明shift(-1)放入观察特征为什么危险。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m1-l3 数据清洗练习

#### 本课讲解
数据清洗不是让每行都通过，而是显式隔离无法解释的输入。重复时间、坏OHLC、缺失或非有限数值应分别计数，不能静默删除后宣称无异常。

#### 操作顺序
下载脏CSV→保留原副本→跑清洗→核对有效/重复/隔离→查看异常原因→保存清洗哈希与特征表。

#### 独立作业
复现240有效、1重复、3隔离；解释若同时间两行内容不同，为什么不能随便留最后一行。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

## Backtrader 策略开发

### 概念
Backtrader的Cerebro协调数据、策略、经纪模型和分析器；Strategy.next观察已到达的数据。默认市价单通常在下一根可用bar开盘撮合，不能在已经看到当前收盘后无条件按该收盘成交。仓位、未完成订单和拒单状态必须分别管理。

### 带数据推演
若t日收盘100产生买入信号，t+1开盘103、收盘104，则普通下一开盘撮合买价103，不能记100。设置成本和滑点后再比较净结果。订单处于Submitted/Accepted时不重复提交；在Completed/Canceled/Rejected等终态清除挂起标识。

### 作业题设
运行backtrader_lab.py，记录信号时刻、实际成交时刻、成交价、费用及期末未平仓市值。对照脚本的确定性合成输入，解释与纯收盘研究模型的差异。

### 检查限制
不要开启cheat-on-close后仍声称采用默认下一开盘执行；不同撮合约定的回测结果不可直接等同。

### 本模块课时
- m2-l1：Backtrader 架构
- m2-l2：订单与仓位管理
- m2-l3：SMA 策略回测

### m2-l1 Backtrader 架构

#### 本课讲解
Backtrader把数据源、策略事件、经纪撮合和分析器分开。next中观察当前已知bar，默认市价单通常在下一bar开盘模拟成交，不能按已知当前收盘免费成交。

#### 操作顺序
安装声明依赖→加载固定CSV→添加策略与佣金→记录订单通知→运行→比较独立模拟器结果与假设。

#### 独立作业
执行backtrader_lab.py，列10次订单事件与期末权益，并解释期末还有持仓时权益与已实现利润的差别。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m2-l2 订单与仓位管理

#### 本课讲解
订单对象的Submitted、Accepted、Completed、Canceled与Rejected不同。只看持仓可能漏掉在途请求，next每根重复发单可使规模失控。

#### 操作顺序
保存pending标识→通知回调按终态清除→成交后更新实际规模→拒单记原因→未知状态先对账。

#### 独立作业
本根发送买入后下根尚未确认，策略再次看到信号，是否应重复买？设计最小状态表。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m2-l3 SMA 策略回测

#### 本课讲解
SMA回测的交付包括输入哈希、参数、成交约定、成本、现金和持仓，不以净值上涨作为代码正确性标准。

#### 操作顺序
先跑无依赖自检→跑两套引擎→核订单数量/费用/期末权益→检查前缀因果性→保留差异报告。

#### 独立作业
对固定合成输入比较research_lab和Backtrader；允许1e−6浮点差，写二者共同未覆盖的三项。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

## 本地研究引擎与接口边界

### 概念
数据接口、信号、风险、撮合与报表应分层，并通过可替换适配器连接。当前课程提供本地CSV适配器，不假设天驭线上量化API已开放，不要求API key。任何真实接口接入前需确认契约、授权、时区、速率、重试、幂等和数据许可。

### 带数据推演
本地引擎把同一份合成CSV读入，先生成过去窗口特征，再把信号滞后一根用于下一时段研究收益；加入按换手计费，输出成本前后净值与回撤。把终端改成模拟撮合适配器不应改变特征计算。

### 作业题设
运行research_lab.py，提交代码版本、输入文件哈希、参数、净值CSV、回撤和局限。断开网络后重复运行，应得到相同摘要；不存在的API调用不得当作完成条件。

### 检查限制
密钥不放浏览器端或notebook输出；离线成功也不证明真实平台连接与成交成功。

### 本模块课时
- m3-l1：本地数据适配器与API边界
- m3-l2：首个完整策略
- m3-l3：量化项目交付

### m3-l1 本地数据适配器与API边界

#### 本课讲解
本地适配器把CSV字段转换为研究引擎输入。外部API则还涉及鉴权、频率、重试与时区；本课程代码不要求密钥也不连接真实服务。

#### 操作顺序
声明输入schema→逐列校验→时间单调/唯一检查→无效输入返回明确错误→引擎只接受已校验记录。

#### 独立作业
为timestamp/open/high/low/close/volume写最小约束，说明缺close和过期时间应该如何处理。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m3-l2 首个完整策略

#### 本课讲解
完整策略由数据、特征、信号、规模、执行、成本与报告串联。每步输出要能追溯到输入，不把任何一步跳过后还称端到端。

#### 操作顺序
冻结CSV和参数→提取SMA→已收盘信号→下一开盘调整→累计费用与现金→期末估值→写报告限制。

#### 独立作业
画七步流程图，标注每步消费的时间戳；说明为何把训练标签与信号放同一表仍需防泄漏。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。

### m3-l3 量化项目交付

#### 本课讲解
量化项目交付应让另一人无需账户和口头说明即可复现。依赖、命令、输入、输出和失败边界都属于内容，不只一条收益曲线。

#### 操作顺序
整理README/requirements/CSV/脚本→记录版本→运行自检→对照预期→写未验证项→本地归档。

#### 独立作业
提交可复现材料清单与运行结果摘要，包含至少一次错误输入被拒绝的证据。

#### 自查要求
提交算式/表格/记录与假设；按答案册逐项检查关键结果、证据边界和未运行项。自评不是自动批改或能力认证。
