简介:这份2022年美赛C题F奖项目资料面向准备美国大学生数学建模竞赛、关注金融时间序列预测与交易策略优化的学习者,内容围绕比特币价格预测与买卖决策展开,覆盖从数据预处理到策略集成的完整建模链路。项目以该赛题方案为核心,重点呈现小波降噪对非平稳金融序列的噪声抑制、GRU神经网络对价格历史模式的捕捉,以及动态规划在买卖时点优化中的组合思路,便于读者理解预测结果如何转化为可执行的交易策略。资源以7z压缩包分发,包体约6.81MB,文件总数标注为0,文件类型明细暂未提供,下载前可留意包内实际目录与完整性。已有357人学习,适合希望复盘F奖论文结构、对照代码与数据理解模型整合方式,并提升金融数据分析、时间序列预测和优化建模能力的参赛者与建模爱好者。
1. 反直觉的胜负手:2022美赛C题考的不是预测,是把“更好”写成公式
最反直觉的一件事是:2022美赛C题里拿到F奖的那份,主模型只有两条均线加一个仓位上限,而不少堆了深度学习的队伍连H奖都没摸到。题面给的是一段五年日度价格序列(2016-09-11 到 2021-09-10),三个任务其实指向三件完全不同的事:把“哪种资产更值得投”翻译成可计算的指标,把指标翻译成一条能执行的买卖规则,再把规则压缩成两页敢让人照着下单的备忘录。评分表看的从来不是模型复杂度,而是“更好”有没有被定义死、回测有没有偷看未来、结论能不能被别人用同一份数据复现。说白了,这是一道伪装成预测题的决策题,谁先把口径写死,谁就先拿到入场券。
2. 赛题解剖:三条任务线各自对应哪几个评分点
2.1 任务一:把“更好”翻译成可算的指标
题目问的是“哪一种资产更适合投资”,这句话本身是含糊的,含糊就是给你发挥空间,也是给你挖坑。稳妥的拆法是三层:绝对收益够不够高、承担的风险大不大、每单位风险换回来的收益划不划算。只报五年累计收益是最常见的自杀式写法,评委一句话就能反问回来——中间最大回撤多深?把起点换成 2017 年 12 月还会是这个结论吗?所以指标不能只给一个,要给一组,而且每个都要写清口径。
一组够用的指标至少包括:累计收益、年化收益、年化波动率、夏普比率、最大回撤、Calmar 比率,再加一个月度胜率或者偏度。前四个刻画“赚多少、晃多厉害”,后三个刻画“最坏的时候有多惨”。Calmar 特别值得写,因为它把年化收益直接除以最大回撤,等于回答了“为了这点收益,我要忍受多深的套牢”。
| 指标 | 怎么算 | 说明什么 | 容易翻车的地方 |
|---|---|---|---|
| 累计收益 | 末价/初价 − 1 | 五年总账 | 起点不同结论可能反转 |
| 年化收益 | (1+累计)^(365/天数) − 1 | 可比性强 | 年化天数用 252 还是 365 要统一 |
| 年化波动 | 日收益标准差 × √365 | 晃得厉害程度 | 用错天数直接差 20% |
| 夏普比率 | (年化收益 − 无风险利率)/年化波动 | 单位风险的回报 | 无风险利率不写等于没定义 |
| 最大回撤 | (价格/历史最高价 − 1) 的最小值 | 最痛的那一段 | 忘记用 cummax 会把结果算错 |
| Calmar | 年化收益/最大回撤绝对值 | 性价比 | 回撤接近 0 时会爆表,要说明 |
光有全区间数字还不够,必须做分段。把五年切成 2016-2018、2018-2020、2020-2021 三段,分别算同一组指标,如果结论在某一段翻转,那就老老实实写“在趋势段 A 占优,在极端行情段 B 的抗跌性更明显”。这种条件句在评委眼里是加分项,因为它证明你知道模型什么时候会失效。另外,任何主动策略都必须和一个 baseline 比,这个 baseline 就是“第一天买入然后一直不动”。你的策略打赢 buy-and-hold 才叫策略,打不赢就叫手续费制造机。
2.2 任务二:从信号到仓位,四层结构缺一不可
多数队伍在这道题上的通病是把“策略”写成了“信号”:短期均线穿过长期均线就全仓买入,跌破就清仓。这只是四层里的第一层。完整的策略至少要拆成信号层、仓位层、执行层、评估层,缺任何一层,回测结果都不可信。
信号层回答“什么时候想动手”,可以是双均线、动量、波动率突破,也可以是简单的阈值规则。仓位层回答“动多大的手”,这是区分 H 奖和 F 奖的地方——全仓和空仓是仓位层最粗糙的退化形式,稍微像样一点的做法是按波动率倒数分配仓位,或者给单一资产设一个 80% 的上限。执行层回答“按什么价成交、扣多少钱”,必须显式写出手续费率和滑点假设,加密资产这类高波动品种,单边 0.1% 手续费加 0.05%~0.2% 滑点是常见假设,最后还要做一次成本敏感性,看看费率翻倍策略还活不活。评估层回答“和谁比”,答案永远是 buy-and-hold 加上一条“事后最优”的上帝视角曲线,后者用来告诉你离天花板还有多远。
这里有一条血泪经验:信号必须滞后一天生效。用今天收盘价算出来的均线,只允许明天开盘或者明天收盘成交。很多队伍的净值曲线漂亮得不像话,就是因为忘了这一步,等于拿着明天的报纸炒今天的股。代码里一个.shift(1)就能解决,但论文里必须用一句话讲明白,评委会专门找这句话。
参数怎么定也要交代。正确姿势是把 2020-09-10 之前的数据当训练段,网格搜参数,然后把选出来的参数原封不动丢到测试段跑一次,只跑一次。测试段跑完再调参数,那就不是验证,是自欺欺人。论文里可以加一句“若测试段表现显著劣于训练段,说明所选参数拟合了噪声”,这句话本身就是水平的体现。
2.3 任务三:两页备忘录,评委真正读的那一页
两页是硬性约束,超了就是违约,违约在美赛里比模型弱更致命。备忘录是整篇论文里唯一写给非技术读者看的部分,评委常常先翻这一页,再决定要不要认真读你的模型。所以它不能是摘要的复读,必须是一份独立的决策建议。
一个能过线的结构是四段:第一段直接给结论——投什么、按什么规则投、五年后 1000 美元大概变成多少(给区间,不要给单点);第二段用一句话把策略说清楚,比如“当 20 日均线上穿 60 日均线时建仓至八成,下穿时降到两成”;第三段放证据,三张图或者一张表,展示净值曲线、最大回撤区间、和买入持有的对比;第四段写风险和失效条件,明确说“在震荡行情里本策略会被反复打脸,手续费会吃掉大部分超额收益”。
备忘录里不要出现公式、变量名和代码,也不要写“如模型所示”这种话。所有数字带单位和区间,“约 3200 美元(区间 2400-4100)”比“收益可观”强一百倍。评委想看到的不是你的模型多漂亮,而是你敢不敢在只有两页纸的篇幅里,把话说死、把风险认下来。
3. 高频考点:数据对齐与收益风险指标的口径
3.1 两条序列对齐:日历、缺失、幸存偏差
题面给的两条序列日历规则不一样。一条是 7×24 每天都有报价,另一条只在交易日有定盘价,中间还夹着周末和节假日。直接merge会丢掉一半的行,直接concat会出现大量空洞,两种做法都会让后面的收益率算错。正确顺序是:先建一个自然日的完整索引,把两条序列reindex上去,再前向填充,最后只丢掉头部的空值。
前向填充的含义是“沿用上一个有效报价”,这在金融数据里是标准做法,因为它假设价格在休市期间没有变化。绝对不能做线性插值,插值会人为抹平波动,把年化波动率压低,夏普比率凭空变漂亮,这是最隐蔽的一种未来函数——你用未来才知道的价格去补了中间的洞。
import pandas as pd # 两条序列:一条 7×24 每天有价,一条只在交易日有定盘价 crypto = pd.read_csv("asset_daily.csv", parse_dates=["Date"]).set_index("Date")["Close"] gold = pd.read_csv("gold_daily.csv", parse_dates=["Date"]).set_index("Date")["Close"] # 第一步:建自然日索引,保证两条序列站在同一条时间轴上 idx = pd.date_range("2016-09-11", "2021-09-10", freq="D") df = pd.DataFrame(index=idx) # 第二步:前向填充,休市日沿用上一个有效报价 df["crypto"] = crypto.reindex(idx).ffill() df["gold"] = gold.reindex(idx).ffill() # 第三步:只丢头部空值,中间不允许出现 NaN print(df.isna().sum()) df = df.dropna() print(len(df), df.index.min(), df.index.max())reindex的作用是把稀疏索引撑成稠密索引,ffill把空洞填上,dropna只清掉开头那几天——因为黄金序列的起始日可能比加密资产晚,头几天必然为空。这三步跑完,行数应该是完整的日数减掉头部几天,如果len(df)明显偏小,说明某条序列中间出现过大段缺失,需要在论文里单独说明处理方式,而不是偷偷填一个 0。
顺手还要检查一件事:两条序列的计价单位和货币是否一致。都是美元计价的话,量纲差异不影响收益率计算,但会影响“买入多少个单位”这种表述。如果论文里要写“投入 1000 美元买入 X 个单位”,就必须把价格换算成份额,否则会出现“买了 0.02 个比特币”这种让非技术读者困惑的句子。
3.2 收益、波动、夏普、最大回撤:口径写死
指标本身不难,难的是口径统一。年化天数是最容易翻车的地方:加密资产全年无休,用 365;黄金只在交易日交易,用 252。如果两条序列已经对齐到自然日并且做了前向填充,那就统一用 365,但必须在论文里写明“已对休市日做前向填充,故年化因子取 365”。这句话看着啰嗦,却是区分“懂”和“抄”的分水岭。
夏普比率里的无风险利率也要交代。短期回测取 0 是可以接受的,但必须写出来,不写就等于没有定义。最大回撤一定要用累积最大值来算,算出来是个负数,论文里可以用绝对值表述,但要说明。Calmar 比率在回撤接近 0 时会爆炸,如果某条序列五年最大回撤只有 3%,Calmar 会飙到两位数,这时候不能直接拿它做排序,要补一句说明。
import numpy as np def perf(price, freq=365, rf=0.0): r = price.pct_change().dropna() total = price.iloc[-1] / price.iloc[0] - 1 # 年化:用实际天数折算,避免长度不同的序列不可比 ann_r = (1 + total) ** (freq / len(r)) - 1 ann_v = r.std() * np.sqrt(freq) sharpe = (ann_r - rf) / ann_v if ann_v > 0 else np.nan # 最大回撤:相对历史最高点的跌幅,结果为负数 dd = (price / price.cummax() - 1).min() return {"total": total, "ann_ret": ann_r, "ann_vol": ann_v, "sharpe": sharpe, "maxdd": dd, "calmar": ann_r / abs(dd) if dd < 0 else np.nan} for name in ["crypto", "gold"]: print(name, {k: round(v, 4) for k, v in perf(df[name]).items()})freq是年化因子,日频数据取 365;rf是无风险利率,取 0 时要在论文里注明;cummax生成历史最高价序列,相除再减一就得到每一天相对高点的回撤,取最小值就是最大回撤。跑完两条序列你会发现,收益最高的那条波动也最大,夏普反而不一定赢——这正是这道题想让考生说出来的结论。
还有一个小分歧:用简单收益还是对数收益。净值曲线连乘必须用简单收益,做组合权重加总时对数收益更好加。两种都可以,但全文只能选一种,混用会出现“1.05 × 1.05 ≠ 1.1”这种低级错误,评审一眼就能看出来。
3.3 真题演练:为什么“涨得多”不等于“更好”
把任务一压缩成一道可练的小题:给定两条对齐后的日度价格序列,判断哪一条是更好的投资标的,并说明你的判断在多大程度上可靠。
答题思路分四步走。第一步摆事实,把 2.1 那张表填满,全区间算一遍,两条序列并排放。第二步做稳健性,把五年切三段分别算,再换起点——每个月 1 日入场、持有到期末,得到一组累计收益,看两条序列的分布有没有重叠。如果分布大面积重叠,就说明“谁更好”这个结论对入场时点极度敏感,必须写进结论里。第三步做统计检验,对两条序列的日收益均值差做 t 检验,考虑自相关的话用 Newey-West 修正标准误,给出 p 值。第四步分层下结论。
第四步是最容易被忽略的,也是最能拉开差距的。合格的写法是:“在全区间口径下,A 的累计收益和夏普均高于 B;但在 2020 年 3 月的同步下跌中,两类资产同时出现两位数回撤,分散化效果在该窗口内失效;分区间看,A 的优势主要来自 2017 和 2021 两段趋势行情,在 2018 年下行段 B 的抗跌性更明显。” 这种写法给了三条信息:结论、结论的适用条件、结论的反例。
不合格的写法是:“A 的收益率远高于 B,因此 A 是更好的投资品。” 这句话的毛病不在于错,而在于它把一个多目标问题强行降成了一维,评委只要追问一句“那风险呢”就答不上来。这道题拿奖的论文,几乎都在某一处写过“取决于你的效用函数”或者“对风险厌恶型投资者而言结论相反”。
4. 建模路线:择时、组合、最优停止三套打法的答题模板
4.1 路线一 择时信号:双均线、动量与波动率过滤
双均线是这道题性价比最高的主线,原因是它可解释、参数少、回测容易做对,而且评委一看就懂。规则很简单:短期均线上穿长期均线时持有,下穿时空仓。它的经济含义是趋势跟随,在单边行情里能吃到大段,在震荡行情里会被反复打脸——后半句一定要自己写出来,这是加分点。
参数选择用网格搜索,但网格要粗不要细。短均线从 5 到 60,步长 5;长均线从 20 到 200,步长 10。步长再细就变成拟合噪声了,你会得到一个训练段惊艳、测试段崩盘的参数组合,那就是典型的翻车现场。搜索的目标函数不要只用期末净值,可以同时看夏普和最大回撤,或者直接设一个“回撤不超过 40%”的约束再最大化收益。
def backtest(px, fast=20, slow=60, fee=0.001): d = pd.DataFrame({"px": px}) d["ma_f"] = d["px"].rolling(fast).mean() d["ma_s"] = d["px"].rolling(slow).mean() # shift(1):今天收盘算出的信号,明天才允许持仓,杜绝未来函数 d["pos"] = (d["ma_f"] > d["ma_s"]).astype(int).shift(1).fillna(0) d["ret"] = d["px"].pct_change().fillna(0) d["turn"] = d["pos"].diff().abs().fillna(0) # 换手次数,0/1/2 # 策略收益 = 持仓 × 标的收益 − 换手 × 单边费率 d["strat"] = d["pos"] * d["ret"] - d["turn"] * fee d["nav"] = (1 + d["strat"]).cumprod() return dpos只有 0 和 1 两个取值,代表空仓和满仓;shift(1)是这段代码里唯一不能省的一行;turn统计每次调仓的换手,从空仓到满仓记为 1,来回一次记为 2;fee是单边费率,0.001 表示千分之一。把fee从 0.001 改成 0.002 再跑一遍,如果期末净值腰斩,说明策略靠高频调仓吃饭,这个结论必须写进论文的风险章节。
再往上加一层波动率过滤,效果往往比调均线参数更明显:计算过去 20 天收益标准差,当它高于历史 80% 分位时把仓位从 1 降到 0.5。理由是高波动期趋势更容易假突破。这层过滤会增加一个参数,但论述价值很高,因为它把“风险控制”从口号变成了可执行的规则。
样本外验证要单独成一节。切分点选在 2020-09-10,训练段搜参数,测试段只评估一次。测试段如果输给 buy-and-hold,不要藏,直接写“策略在测试段未能战胜基准,主要原因是该区间为震荡市,双均线产生 37 次无效调仓,手续费累计侵蚀 X% 收益”,然后给一个改进方向。诚实处理负面结果,在美赛里是有加分的。
4.2 路线二 均值-方差与再平衡
第二条线是把问题看成一个两资产配置问题:给定两条序列,求一个权重,让组合的夏普最大。这条线的理论分高,但坑也深,最大的坑是均值估不准——用五年历史均值去估未来预期收益,误差大到足以让最优权重在 0% 和 100% 之间反复横跳。
实操做法是用滚动窗口估参数:每 60 或 120 天算一次两条序列的均值向量和协方差矩阵,求一次最优权重,然后持有到下个再平衡日。再平衡频率日频太贵、年频太钝,月频是比较稳的折中。约束一定要加:不允许做空、单一资产权重上限 80% 或 90%,否则优化器会给你一个 100% 全押的解,等于没做组合。
import numpy as np from scipy.optimize import minimize def max_sharpe(mu, cov, cap=0.9): n = len(mu) # 目标:负的夏普比率(minimize 求最小) obj = lambda w: -(w @ mu) / np.sqrt(w @ cov @ w) cons = ({"type": "eq", "fun": lambda w: w.sum() - 1},) # 权重和为 1 bnds = [(0.0, cap)] * n # 不做空 + 单资产上限 w0 = np.ones(n) / n return minimize(obj, w0, bounds=bnds, constraints=cons).xmu是年化预期收益向量,cov是年化协方差矩阵,两者都必须用同一个窗口、同一个年化因子算出来,混用会让优化结果完全失真。cap=0.9是单资产上限,作用是防止优化器把全部资金压在一个资产上;bnds的下界 0 表示不允许做空,这一条在论文里要写明,因为真实交易里做空的成本远高于做多。目标函数里没有减无风险利率,等于默认无风险利率为 0,同样要在论文里交代一句。
求出权重之后不要只报一个数,要给区间。做法是用 bootstrap 重采样历史日收益 1000 次,每次重估mu和cov,得到 1000 组权重,画出分布。如果两个资产的权重分布大面积重叠在 40%-60% 之间,说明数据本身支撑不了“该重仓谁”的结论,这个发现比一个精确到小数点的权重有价值得多。
还有一个容易被忽略的细节:再平衡本身有成本。每次调仓按权重变化量乘以费率扣一遍,月频再平衡一年十二次,成本累积起来能吃掉一两个点的年化收益。把含成本和免成本的两条净值曲线画在一起,论文的说服力立刻上一个台阶。
4.3 路线三 动态规划与最优停止
第三条线是把“什么时候卖”写成一个最优停止问题。状态定义为“第 t 天、当前持仓状态”,动作是“继续持有”或者“清仓”,目标是最大化终端财富的期望效用。写成 Bellman 方程之后,可以证明在某些假设下最优策略是一个阈值策略:价格或收益突破某个临界值就动作。
这条线的价值不在于算出多精确的结果,而在于它能给你的启发式策略提供理论背书。前面的双均线是拍脑袋定的规则,动态规划能告诉你“在什么样的收益分布假设下,阈值型策略确实是最优的”,这一句写进论文,整个模型的层次就上去了。评委看到这里会认为你不只是会调包,还知道自己在近似什么。
现实局限也要写清楚。状态空间必须离散化,价格按分位数分箱或者按收益率区间分箱,箱数一多计算量就爆炸;状态转移概率要用历史数据估,估出来的矩阵本身带误差;五年数据只够覆盖一轮完整周期,估出来的转移概率未必能外推。所以这条线适合放在“模型验证”或者“理论分析”章节,不适合当主模型。
一个务实的写法是:主模型用双均线加波动率过滤,跑出可执行策略和期末净值;再用动态规划在同样的数据上求一个理论上界,说明主策略距离最优还有多少差距。这个对比表会让评审印象深刻,因为它同时展示了工程能力和理论素养,而且不需要你把动态规划做到多精细。
4.4 真题演练:1000 美元五年后变成多少,怎么自证
题目要求给出 2016-09-11 投入 1000 美元、到 2021-09-10 的价值。这道小题看着是算数,实际考的是“你怎么证明自己没吹牛”。
先统一口径:期末价值 = 1000 × 策略净值末值,中间不允许有新增资金,所有收益都来自价格变动减去交易成本。这一句话必须写进论文,否则评委不知道你的净值是不是加过杠杆。
然后是“三表一图”。净值曲线图把策略、两条 buy-and-hold 基准、事后最优曲线画在同一张图上,横轴日期、纵轴净值、图例清晰、单位写明。分年度收益表把五年拆开,逐年列出策略和基准的收益率,一眼能看出策略在哪些年份贡献了超额收益。交易明细表列出前十笔交易的日期、方向、价格、持仓比例、手续费,用来证明策略确实可执行。成本敏感性表把费率从 0.05% 扫到 0.5%,看期末价值怎么变。
合理性检查有三条红线:结果不能超过事后最优曲线,超过了说明有未来函数;结果要和 buy-and-hold 对比,输赢都要写;结果的量级要符合直觉,五年翻几十倍这种数字如果没有解释,评委会直接怀疑。最稳的呈现方式是给区间而不是单点:在参数网格里取表现最好的十组,报告期末价值的分布范围,再报告其中位数。区间比单点诚实,也更难被挑刺。
5. 失分点:阅卷人一眼扣分的五处硬伤
5.1 未来函数:用当天收盘价算信号又当天成交
错在哪:信号和成交落在同一天。代码里pos没有shift,回测出来的净值曲线平滑得不像真实市场,五年翻十几倍。
为什么错:这是最典型的偷看未来。收盘价要等收盘才知道,你却在收盘那一刻完成了交易,等于拥有了当天全部信息之后再做决策。评委扫一眼回测代码就能发现,一旦发现,整篇的策略章节全部作废。
怎么答对:信号统一滞后一天生效,代码里.shift(1),论文里用一句话写清楚“t 日收盘计算的信号在 t+1 日执行”。同时检查所有特征工程——滚动均值、波动率、分位数,全部只能用 t 日及以前的数据,rolling后面如果跟了center=True,那就是另一处未来函数。
5.2 手续费和滑点没算,或者只算了一次
错在哪:整段回测只在第一天扣了一次手续费,后面几百次调仓全部免费。
为什么错:这类策略通常是高频调仓的,成本对结果的影响是数量级的,不算成本等于把结论建立在免费交易的假设上。评委看到“五年年化 40%,调仓 300 次,零成本”这种组合,第一反应就是不真实。
怎么答对:按换手计费,每次仓位变化乘以单边费率,费率假设写出来并给出来源口径;加密资产再加一层滑点,做一次费率翻倍的敏感性分析,把结果表放进去。如果策略在费率翻倍后失效,就诚实写“本策略对交易成本高度敏感,适合低费率环境”。
5.3 只报收益不报风险,也不给基准
错在哪:通篇只有“年化收益 X%”,没有波动、没有回撤、没有对比对象。
为什么错:单一收益数字无法支撑“更好”这个判断,而且没有基准就无法判断策略是真有 alpha 还是只是承担了更多风险。评委没法从你的结果里读出任何决策信息。
怎么答对:每个收益数字后面跟一组风险指标,所有策略结果旁边放一条 buy-and-hold 曲线。结论写成对比句——“策略年化 28%,基准 22%;策略最大回撤 41%,基准 55%;风险调整后策略占优,但绝对回撤仍然超出多数个人投资者的承受范围”。
5.4 图表没有单位、没有图注、没有结论
错在哪:图放上去了,横轴是“日期”,纵轴是“数值”,图注只有“图 3 净值曲线”。
为什么错:评委看图的时间不超过十秒,十秒内读不出信息就等于这张图不存在。更糟的是多条曲线颜色相近、没有图例,读者根本分不清哪条是策略哪条是基准。
怎么答对:每张图配一句结论式图注,比如“图 3:策略净值在 2020 年 3 月回撤 34%,同期基准回撤 52%,策略的波动率过滤在此期间降低了仓位”。纵轴写清“净值(初始=1)”或“累计收益率(%)”,图例放在图内空白处,颜色对比拉开。
5.5 备忘录写成摘要复读,或者超页
错在哪:备忘录直接抄了一遍摘要,全是“建立了基于 XX 的模型,取得了良好效果”,没有一个可执行的建议。
为什么错:备忘录的读者是交易员,不是评委。他要的是“买什么、什么时候买、最多亏多少”,不是你的建模心路。超页则直接违反题面约束,属于格式性失分,最冤也最常见。
怎么答对:第一句就给结论,全文控制在两页内,正文字号不要为了塞内容缩到 8 号。写完数一遍页数,留半页余量。所有公式和变量名删掉,用“当短期均线高于长期均线时买入”这种自然语言表述。
6. 交稿前的48小时:排程表、自检清单与押题方向
6.1 时间盒:把最后两天切成四段
倒数 48 小时最容易失控,因为模型已经跑完,剩下的都是写作和检查,而写作最容易被无限拉长。一个可执行的切法是四段:前 8 小时锁死所有数字和图表,任何还在改的模型一律冻结;中间 16 小时写正文和备忘录,正文按“模型假设—数据—方法—结果—敏感性—优缺点”的顺序推进;接着 12 小时做交叉检查,两个人互换章节挑错;最后 12 小时只做格式、页数、参考文献和文件命名,不再动任何结论。
| 时间段 | 主要动作 | 交付物 | 禁止事项 |
|---|---|---|---|
| 倒 48-40h | 冻结模型,导出全部图表 | 图表清单 + 数字表 | 再调参数 |
| 倒 40-24h | 写正文与两页备忘录 | 初稿 | 边写边改模型 |
| 倒 24-12h | 交叉审阅,补敏感性与优缺点 | 修订稿 | 只自己看自己的章节 |
| 倒 12-0h | 页数、图注、单位、文件名 | 终稿 | 改动任何结论 |
6.2 交稿前必走的六项自检
信号是否滞后一天;手续费和滑点是否按换手计;每个收益数字旁是否有风险指标;策略结果旁是否有 buy-and-hold 基准;每张图是否有结论式图注和单位;备忘录是否在两页内且没有公式。这六项里任何一项没过,都不要点提交。
还有一项隐性自检:把摘要单独拿出来读,看能不能在不看正文的情况下说清“做了什么、怎么做的、结论是什么、为什么可信”。说不清就重写,摘要决定评委的第一印象。
6.3 押题:数据类题目接下来会往哪走
这类给两条时间序列、要求做决策的题目,未来大概率还在这三个方向上变形:一是多资产,从两条变成五条,考的是组合优化和相关性突变;二是加入交易约束,比如只能整份买卖、有最小持有期,考的是离散优化;三是要求给出不确定性区间,考的是 bootstrap 或者贝叶斯方法。准备的时候不用每题都做,把“对齐—指标—策略—成本—敏感性”这条流水线练熟,换数据也能直接套。
从那以后我每次带队伍,提交前都强制走一遍“六项自检 + 摘要单读”,因为翻车的从来不是模型不够花哨,而是那种一眼就能看出来的口径漏洞。希望帮到你。
本文还有配套的精品资源,点击获取