← 返回暑期准备路线
4周 · 20个学习单元 · 每周10小时

第一个月:从能运行代码,到能独立检查研究

适合有金融学与高数、线代、概率基础,Python仍依赖AI辅助的学习者。按每周10小时必做、另留2小时补漏安排。第1周从你开始执行时计算,不绑定日历日期;一周未过关就顺延,不靠赶题进入下一周。

怎样执行,怎样才算掌握

  • 每周5个学习单元,每个120分钟,可拆成两个60分钟。先读指定小节,再写练习,最后留存结果;不用通读整本教程或刷完一个阶段。
  • 练习时允许查文档和请AI解释小段代码,但先自己尝试20分钟。记录AI改了什么、你用什么数据检查它;验收时关闭AI和答案,只保留题干及原始数据。
  • 每个评分项0–2分:0=无法完成或关键错误;1=经提示后完成但不能独立解释;2=独立完成且解释正确。总分至少8/10,所有标为“关键”的项必须2分。
  • 周末验收通过后,间隔24–48小时做换数据复测。两次都通过,再勾选“掌握”;运行成功、看懂答案或记住输出都不算独立掌握。
  • 本月数据全部为教学虚构数据。先学清洗、时间对齐、基准和报告,不接行情账户,不以收益高低评定学习成绩。

数据包包含原始表、核验表、分类表、SQL脚手架与学习记录模板。参考答案在各周底部折叠;评分是自评,不是自动阅卷。

第1周|把收益、复利和回撤写成自己的函数

独立写出3个小函数,解释每一行,能够发现输入错误。先用循环理解过程,再学库。

第一次写这些函数?从跟练教程开始

环境配置、逐步注释代码、手算表、常见报错和9项测试,按本周5个单元操作。

打开第1周新手教程 →

本周学哪些题

对应面试练习

先按本周练习理解,再尝试面试题;不以记住答案原文为目标。

用什么资料,只读哪些部分

资料入口核验:2026-10-20。英文资料先抓指定示例和输入输出,不必逐页翻译。

五个学习单元 · 每次120分钟

  1. 单元1 · 看见变量与输出

    30分钟配置或确认Python环境;30分钟读q-001和Python数字小节;40分钟手写100→110、100→90两例,并用print输出小数和百分数;20分钟口述变量和单位。

    留下什么:week1.py,至少4行输出;注明编辑器与解释器各负责什么。

  2. 单元2 · 用循环把收益连起来

    20分钟读q-011;30分钟学列表、for、函数;50分钟写simple_returns(prices)与equity_curve(returns),用[100,110,99,108.9]核对;20分钟在纸上写中间值。

    留下什么:两个函数与手算表。约定simple_returns只返回相邻价格之间的n-1个收益,equity_curve返回含初始1的n+1个净值。

  3. 单元3 · 加上回撤与边界

    25分钟读q-015;55分钟写max_drawdown(equity),返回非负损失比例;20分钟用[1,0.8,0.9]检查首段亏损;20分钟写断言。价格不足2项、非有限值或非正数要明确报ValueError。

    留下什么:三个函数、至少5个断言及各断言在防什么错误。

  4. 单元4 · 从AI生成转向自己调试

    20分钟做I07与I22;40分钟用断点跟踪循环与变量;40分钟故意把连乘改为相加、把历史峰值写成当天净值,观察测试如何失败;20分钟恢复并写错误复盘。

    留下什么:bug-notes.md:两次错误、症状、定位与修复;能说明哪些代码是自己写的。

  5. 单元5 · 独立验收与补漏

    45分钟做下方闭卷验收;15分钟按5项标准评分;40分钟只修最薄弱一项;20分钟整理产物和下一次复测安排。

    留下什么:验收代码、评分、失败记录;24–48小时后另用20分钟做迁移复测。

本周交付物

  • week1.py:收益率、含初始本金的净值、最大回撤三个函数。
  • hand-check.csv:每步价格、收益、净值、历史高点、回撤。
  • bug-notes.md:至少两个错误与测试证据。

独立验收:先做,再展开参考结果

45分钟,不看旧代码和AI:从空文件实现三个函数。输入[80,88,79.2,87.12],打印每期收益、累计收益和最大回撤;测试[80,0]、单元素价格以及净值[1,0.8,0.9];用2分钟解释回撤为什么不等于最终收益。

评分表 · 每项0–2分

  • 收益公式与复利关键 · 必须2分

    能算出8.9%,不用简单相加;小数与百分数转换正确。

  • 回撤含初始本金关键 · 必须2分

    历史高点逐步更新;[1,0.8,0.9]得到20%。

  • 边界与测试

    处理非法价格和短输入,写至少5个有明确目的的断言。

  • 代码独立性

    能解释循环、索引、返回值,现场改一个输入并预测结果。

  • 复现与表达

    从空文件完成验收,保存输出,2分钟讲清计算口径。

第1周参考结果与核对口径

三期收益为10%、-10%、10%;净值[1,1.1,0.99,1.089];累计收益8.9%,最大回撤10%。[80,0]和单元素价格应按本周输入约定报ValueError;[1,0.8,0.9]最大回撤20%。浮点数比较用容差,不用字符串或精确相等。

隔24–48小时再做:换数据复测

24–48小时后,用[50,45,49.5]重写或独立修改函数;先手算,再运行。20分钟内完成,并解释为何最终收益和最大回撤不同。

第1周迁移复测参考结果

收益-10%、10%;净值[1,0.9,0.99];累计收益-1%,最大回撤10%。能在不看旧答案的情况下得到这些结果并解释,才通过复测。

没通过怎么办

若公式错,回q-001/q-011只做两期手算;若回撤错,画[1,0.8,0.9]并标峰值;若依赖AI,下一次先用10行以内函数练习。关键项未过先重复本周,不增加新库。

完成两次验收后,记录本周掌握情况 ↓

第2周|把一张脏表变成有解释的数据

会读CSV、检查唯一键、处理缺失与冲突,并留下可审计日志。每次修复都能说出依据。

第2周跟练:从CSV读取到清洗验收

同一份12行教学数据,逐步检查重复、冲突与缺失,配注释代码、日志和独立复测。

打开第2周新手教程 →

本周学哪些题

对应面试练习

先按本周练习理解,再尝试面试题;不以记住答案原文为目标。

用什么资料,只读哪些部分

资料入口核验:2026-10-20。英文资料先抓指定示例和输入输出,不必逐页翻译。

五个学习单元 · 每次120分钟

  1. 单元1 · 认识同一套教学数据

    20分钟读数据包README;30分钟练read_csv、shape、dtypes;50分钟查看prices_raw.csv,把date转日期、close转数值但不覆盖原始表;20分钟写字段字典。

    留下什么:week2.py与data-dictionary.md,明确date、symbol、close;日期是教学标签,不推断真实交易日历。

  2. 单元2 · 先体检,不急着删除

    25分钟读q-065;55分钟统计总行数、全行重复的额外行数、唯一键重复、冲突键组、缺失和非正价格;20分钟用小表手工核对;20分钟记录可疑行。

    留下什么:audit.md。重复统计注明keep=False是全部涉及行,keep='first'是额外行;不要混为一项。

  3. 单元3 · 依据核验表修复并留痕

    20分钟读q-306指定部分;60分钟先去完全重复,再用corrections.csv核验冲突/缺失/零价格,对每个修复保存原值、新值和reason;20分钟检查唯一键和正价格;20分钟按symbol/date排序输出。

    留下什么:cleaned.csv共10行、change-log.csv。教学核验表只用于事后质量练习,不能当历史实盘当时已知数据。

  4. 单元4 · 按标的计算相邻记录收益

    25分钟读q-312;55分钟在清洗结果按symbol分组计算收益,首条保留NaN;20分钟把A的价格交给第1周函数比对;20分钟做I20,口述数据缺失时怎么排查。

    留下什么:returns.csv;两只标的的首行收益均缺失,不能跨股票相除。

  5. 单元5 · 独立验收与补漏

    45分钟只拿原始CSV和核验表重做清洗;15分钟评分;40分钟修一个薄弱环节;20分钟整理数据字典、日志与复测计划。

    留下什么:独立重建的cleaned.csv、审核记录和评分。

本周交付物

  • week2.py:可重复运行的读取、检查、核验修复和收益计算。
  • cleaned.csv与returns.csv:保持清楚的行粒度和排序。
  • audit.md与change-log.csv:记录异常统计、依据和每次修复。

独立验收:先做,再展开参考结果

45分钟关闭旧代码:读取数据包原始12行,说明重复/冲突/缺失/非法值数量;依据核验表修复成唯一(date,symbol)记录,排序后计算收益;写3个断言验证行数、唯一键和正价格。禁止无条件ffill或静默保留冲突的第一条。

评分表 · 每项0–2分

  • 异常识别有准确口径

    分清完全重复额外1行、冲突键组1个、缺失1行和零价1行。

  • 修复有证据关键 · 必须2分

    冲突按核验表处理并记日志,没依据不填值、不猜停牌。

  • 时序与分组正确关键 · 必须2分

    排序后按标的计算;每组首条缺失,不跨组、不伪造收益。

  • 可重复与有检查

    原始文件不变,脚本再跑结果一致,至少3个断言。

  • 独立解释与记录

    能指认修复前后具体行,并解释没有数据时应该怎样报告。

第2周参考结果与核对口径

原始12行。全行完全重复额外1行(A的01-06);按(date,symbol)去重前额外2行,其中A的01-07有120/121冲突,冲突键组1个;缺失close为1行,非正close为1行。去完全重复剩11行,按核验表处理后10个唯一键。A价格[100,110,121,110,121];B价格[50,52.5,55,60.5,60.5]。各组第一条收益缺失,A累计21%、B累计21%。异常类别可能交叉,不把所有统计机械相减。

隔24–48小时再做:换数据复测

隔24–48小时使用第2周跟练包的transfer_exam.csv(6条乱序记录,两标的,没有核验表)。20分钟内独立排序分组,标记缺失并计算相邻记录收益;说明哪些收益能算、哪些不能算,再解释删掉缺失行会怎样。跟练中已经演示的transfer_missing.csv不作为唯一复测证据。

第2周迁移复测参考结果

保留6行:A按日期为20、缺失、24,三条收益都缺失;B为50、55、60.5,首条缺失,其后10%、10%,累计21%。总计4个缺失收益。A首末价格涨20%只是跨缺口变化,不能据此补造每日收益;删掉中间行后会出现20%的跨缺口相邻记录收益。不能无依据填值或认定停牌。

没通过怎么办

异常数对不上,先手工圈出12行的键;收益错位,打印每组前三行;一遇NaN就想填值,先做迁移小表。最小表核对通过后再回到整表。

完成两次验收后,记录本周掌握情况 ↓

第3周|分组、合并与一小段SQL

能说清一张表的每行代表什么,发现JOIN扩行;用pandas和SQL计算同一列并逐行核对。

第3周跟练:分组、合并与SQL窗口

沿用清洗结果,逐步学习groupby、merge、LAG,配注释代码、错误实验、逐键核对和独立复测。

打开第3周新手教程 →

本周学哪些题

对应面试练习

先按本周练习理解,再尝试面试题;不以记住答案原文为目标。

用什么资料,只读哪些部分

资料入口核验:2026-10-20。英文资料先抓指定示例和输入输出,不必逐页翻译。

五个学习单元 · 每次120分钟

  1. 单元1 · 分组前先说行粒度

    25分钟读q-309;55分钟从cleaned.csv按symbol输出记录数、首末价格和累计收益,再按date输出记录数;20分钟用纸写每张输出表的键;20分钟解释为什么不能只按行业对全部日期平均。

    留下什么:summary.csv:每标的1行;notes.md说明原始表与汇总表的行粒度。

  2. 单元2 · 故意制造一次合并错误

    25分钟读q-310;45分钟用sectors.csv按symbol做left merge,设置validate='many_to_one'和indicator;30分钟把B的行业行复制后改成另一行业,确认程序拒绝;20分钟做I08。

    留下什么:join-check.md:正确合并10行、缺配0;冲突右表触发错误,记录怎么查而非直接drop_duplicates。

  3. 单元3 · 用已有脚手架开始SQL

    30分钟运行并读第3周跟练包的03_sql.py(先把第2周cleaned.csv复制到week3.py同目录);30分钟手写SELECT、ORDER BY、GROUP BY计数;40分钟修改returns.sql练LAG窗口查询;20分钟做I09。

    留下什么:自己编写并注释的returns.sql:按symbol分区、按date排序,取前一期价格并计算收益。

  4. 单元4 · 双实现核对与缺口复盘

    20分钟读q-316;60分钟将SQL收益和pandas收益按(date,symbol)合并,对非缺失数值用容差比较、对缺失单独比较;20分钟删除中间日期重新观察;20分钟写口径说明。

    留下什么:compare.csv和断言:10行、2个首条缺失;说明LAG和shift都按记录而非自动按交易日。

  5. 单元5 · 独立验收与补漏

    45分钟做合并与SQL验收;15分钟评分;40分钟修边界/排序错误;20分钟收集代码、对照表与复测安排。

    留下什么:能从cleaned.csv重现pandas/SQL对照,不要求记住全部SQL语法。

本周交付物

  • summary.csv与join-check.md:行粒度、键、合并前后行数、缺配与冲突处理。
  • SQL查询与compare.csv:两种实现逐行对照。
  • 至少一个坏连接键测试,以及缺失值口径说明。

独立验收:先做,再展开参考结果

45分钟可保留第3周week3.py中的连接与读文件脚手架,但自行重写分组、合并、returns.sql查询与核对。先正确合并行业表,再主动构造重复右键并使检查报错;用LAG计算收益并与pandas逐行比较。解释B的01-07收益与01-08收益。首月包sql_lab.py也可作为空白连接脚手架,选一种即可。

评分表 · 每项0–2分

  • 键和行粒度

    说清原始表每行一个(date,symbol),汇总每行一个symbol。

  • 合并边界关键 · 必须2分

    检查基数和缺配,重复右键被拒绝,不盲目删冲突。

  • SQL分组与顺序关键 · 必须2分

    LAG含PARTITION BY与ORDER BY;前值缺失正确传播。

  • 双实现验证

    按键比较、数值用容差、缺失单独判断,并得到一致结果。

  • 解释缺口与失败

    知道相邻记录不必是相邻交易日,能讲出一次错误及定位过程。

第3周参考结果与核对口径

正确合并10行且行业无缺配;重复右键应被validate='many_to_one'拒绝。SQL先用LAG(close) OVER (PARTITION BY symbol ORDER BY date) AS prev_close,再计算1.0*close/NULLIF(prev_close,0)-1。B的01-07收益55/52.5-1=约4.761905%;01-08为60.5/55-1=10%。10行中2行首条收益缺失。累计收益与groupby平均单期收益不是同一个量。

隔24–48小时再做:换数据复测

隔24–48小时使用第3周跟练包transfer_prices.csv与transfer_sectors.csv:A=[100,105]、B=[20,18],日期为2026-02-02/03且输入乱序,行业只有A。20分钟内独立完成左连接、pandas和SQL收益,按键、缺失位置与数值核对,解释缺配和应保留的行数。

第3周迁移复测参考结果

左连接保留4行;B两行行业缺失并被标记,不能静默删掉。A第二期收益5%,B为-10%;每组首条缺失。若漏PARTITION BY或漏按标的分组,会跨组配对,不能通过。

没通过怎么办

JOIN有问题就退回2×2小表手工列匹配;LAG有问题先输出prev_close,不急着算收益;SQL语法不熟可练一条SELECT,再加分组和窗口,保留中间结果。

完成两次验收后,记录本周掌握情况 ↓

第4周|做一次可复现的研究交付

把计算、数据与时间边界串起来,交付一份小报告;能说明失败、个人贡献和下一步。

第4周跟练:从代码到研究交付

整理目录、复现研究、成本对照、报告模板、5分钟讲解与换目录验收,配完整下载包。

打开第4周新手教程 →

本周学哪些题

对应面试练习

先按本周练习理解,再尝试面试题;不以记住答案原文为目标。

用什么资料,只读哪些部分

  • 本站研究项目 ↗

    第4周跟练包已包含原research.py与5个计算测试,另加5个交付检查;读README的时间/费用假设和backtest,不急着引入Qlib。原项目包仍可独立使用。

  • Pro Git中文:起步与基础 ↗

    会status、diff、add、commit即可。若不使用Git,先保存明确命名的版本及修改记录,不要阻塞本周交付。

  • scikit-learn:常见陷阱 ↗

    只读数据泄漏部分的解释,能说出为何不能用全样本信息选参数;本月不要求训练模型。

资料入口核验:2026-10-20。英文资料先抓指定示例和输入输出,不必逐页翻译。

五个学习单元 · 每次120分钟

  1. 单元1 · 用三行数据画时间轴

    25分钟读q-313;45分钟手写[10,11,12]的shift(1)和shift(-1);30分钟做I10并画可得/信号/成交/收益四个时点;20分钟给旧代码中的每个中间列注明时间。

    留下什么:timing.md:不能只说“shift了所以安全”,要指出计算与成交假设。

  2. 单元2 · 复现教学项目

    25分钟读第4周跟练包README;45分钟运行10项测试(原计算5项+交付5项)和02_reproduce.py;30分钟手算daily.csv前6行;20分钟把项目种子、代码/数据哈希与环境写入实验记录。

    留下什么:项目原始运行结果、manifest和手算表;区分模板自带与自己的改动。

  3. 单元3 · 一个改变,一组对照

    20分钟做I17;50分钟比较0/5/20bp费用下同一策略结果,说明换手定义;30分钟改末尾价格验证更早结果不变;20分钟记录全部结果与解释,不挑最好的一行。

    留下什么:experiments.csv和prefix-check记录;本月以流程正确为目标,不追求正收益。

  4. 单元4 · 写报告并讲给别人听

    20分钟做I21/I23;60分钟写1–2页报告:问题、数据、方法、基准、结果、局限、贡献、下一步;20分钟录制或口述5分钟讲解;20分钟根据自己讲不清的地方修改。

    留下什么:report.md或PDF、一段5分钟讲解提纲、3个局限与一个可执行的下一步。

  5. 单元5 · 月度验收与下月入口

    60分钟按下方任务重新运行与讲解;15分钟评分;25分钟修薄弱点;20分钟决定下月先补Python/SQL还是进入更完整的研究。

    留下什么:完整交付目录、验收记录与一条下月优先任务;隔24–48小时做迁移复测。

本周交付物

  • 可重跑的代码、数据说明、环境与测试记录。
  • experiments.csv:原始实验、成本对照、失败与修正。
  • 1–2页报告和5分钟讲解,明确教学数据与模板贡献。

独立验收:先做,再展开参考结果

60分钟:把项目复制到新文件夹(或重新解压),按README跑通测试与结果;从更早价格推出一笔持仓;解释为什么提高费用不应改善这套固定持仓策略的终值;修改序列末尾并核对过去结果不变;不用AI做5分钟项目汇报。验收可用自己的README和代码,不能照念答案。

评分表 · 每项0–2分

  • 时间边界关键 · 必须2分

    手算持仓正确;明确可得/决策/成交/收益,未来变动不影响过去。

  • 计算与成本关键 · 必须2分

    收益、回撤、基准与费用口径说得清,成本对照符合固定路径预期。

  • 可复现交付

    按第4周README在新目录运行,10项测试通过,关键CSV可复现,版本和数据记录齐全。

  • 研究表达

    5分钟讲清问题、证据、失败、局限和下一步,不把收益高当唯一结论。

  • 独立贡献

    能指出自己改了什么,现场解释或修改小函数,并如实说明AI辅助。

第4周参考结果与核对口径

项目区间i指close[i-1]→close[i],持仓看截至close[i-2]的价格变化,留出一整期延迟;同一持仓路径下,费用上升应降低终值或在无成交时不变。只修改未来输入不得改变此前的持仓和收益。第4周包全部10项测试应通过(原计算5项+交付5项),但这并不等于策略真实可交易;必须解释合成数据、简化成交、费用口径和期末不强制平仓。

隔24–48小时再做:换数据复测

24–48小时后,用价格[100,120,100,110,100,110]、费用0,手算项目的5段持仓、收益与累计收益;指出哪一段退出持仓,以及所用信号来自哪段历史。随后从空白提纲讲出项目假设、最薄弱证据和一个下一步实验。限20分钟。

第4周迁移复测参考结果

5段持仓[0,0,1,0,1];对应收益[0,0,10%,0,10%],累计收益21%。第3段持仓来自更早的100→120;第4段退出来自120→100的下跌,不由当期价格决定。新数据结果必须与代码一致。下一步实验须能区分一个具体原因,例如只改变费用或检查时点;不能只说继续调参。

没通过怎么办

时间题没过,先回第1周和q-313用四个价格画图;复现失败,先补README与环境记录;讲不清项目,删掉复杂指标只保留一个问题和一组对照。四周通过后再增加模型复杂度。

完成两次验收后,记录本周掌握情况 ↓

第一个月 · 验收与复测记录

0 / 8 项已自查。这8项记录独立验收和迁移复测,不记录看过多少页。每周两项都完成再记为掌握;不会自动判分。

仅存当前浏览器;导出为文本备份。不会自动投递或联系招聘方。

四周后,怎样决定下一步

若第1–2周仍依赖提示,先继续练函数与小表清洗;若能独立处理数据但SQL不熟,补分组和连接;若四周均通过,再沿暑期路线进入统计验证与更完整的小研究。本月的目标是可靠处理与解释,不是证明策略盈利。