
为什么你写的Python量化策略一上实盘就亏钱
很多人学Python量化投资,第一件事就是找个双均线策略,跑一遍历史数据,看到年化收益30%的曲线,觉得自己找到了圣杯。实盘一跑,三个月亏掉20%。问题出在哪?不是Python不行,是练习的方向从一开始就跑偏了。
量化投资的练习,练的是对市场逻辑的理解,不是练代码写得有多花哨。下面几个练习方向,能把一个普通散户的认知拉到专业交易员的水平线上。

练习一 把股票数据洗干净再谈策略
打开任何一本量化教材,第一个策略都是均线交叉。拿贵州茅台的数据跑一下,2020年到2021年确实赚了不少。但这里有个致命问题——你用到了未来数据。
什么叫未来数据?举个最隐蔽的例子。你写了一个策略:收盘价突破20日均线就买入。回测的时候,你用了当天的收盘价来判断是否突破,又用当天的收盘价作为买入价。这在现实中做不到。收盘价是下午3点才确定的,你不可能在3点之前知道这个价格,更不可能用这个价格成交。
正确的练习方式是这样的:用前一天的收盘价判断信号,用第二天的开盘价或者均价成交。代码里多写两行shift,回测收益立刻从30%掉到8%。这才是真实水平。
期货数据更麻烦。主力合约存在换月问题。螺纹钢主力合约从2110换到2201,价格跳空几百点。你不做复权处理,回测出来的信号全是噪音。练习的第一步,是写一个函数把期货主力连续合约的价格拼接好,处理换月价差。这个函数写不出来,后面的策略全是空中楼阁。
练习二 算清楚交易成本再谈收益
很多量化练习作业里,回测收益曲线漂亮得像艺术品。一问手续费设了多少,答曰万分之一。股票印花税千分之一,过户费万分之零点二,佣金万三起步。期货手续费更复杂,有的品种按手数收,有的按成交额收,平今仓还加收。
做一个练习:拿螺纹钢期货主力合约,设定每次交易1手,手续费按交易所标准加两倍,滑点设1个跳。跑一个日均交易2次的策略,看看一年的手续费能吃掉多少收益。结果会很扎心——一个胜率55%的短线策略,扣完成本后胜率不到45%。
这个练习的目的不是让你算出精确的成本,是让你养成习惯:任何策略先算成本,再谈收益。股票T+1,当天买不能当天卖,回测的时候就得把信号延迟一天。期货有夜盘,螺纹钢夜盘到23点,你的数据如果只覆盖日盘,回测结果和实盘就是两回事。
练习三 用期货品种练仓位管理
股票的仓位管理相对简单,无非是买多少比例。期货不一样,有杠杆、有保证金、有强平线。拿沪深300股指期货练手,假设账户资金50万,IF合约一手保证金大约15万,你开一手仓位就占了30%。如果做反了方向,亏损达到保证金的一定比例,期货公司会打电话让你追加保证金或者强行平仓。
练习写一个仓位管理模块:根据账户总资金、品种保证金率、ATR波动率来计算每次开仓的手数。核心逻辑是——波动越大,开仓越少;账户回撤越大,仓位越轻。这个模块写好了,股票策略也能用,只是把杠杆参数设成1就行。
这里有个期货特有的细节:主力合约换月的时候,你的持仓需要移仓。移仓会产生价差成本,尤其是近月贴水远月升水的品种,移仓一次就吃掉几个点的收益。练习写一个移仓函数,把移仓成本算进回测里。股票没有这个问题,期货有。
练习四 用股票池做截面策略
单只股票的择时策略容量有限,机构玩的是截面策略。什么叫截面?同一天,在所有股票里比较,选出得分最高的20只买入,得分最低的20只卖出。
练习步骤:拿沪深300成分股,每个月末计算每只股票的动量因子——过去60个交易日的涨幅。买入涨幅前20%的股票,等权持有,下个月末调仓。这个策略叫动量策略,学术上早就被验证有效。但你在A股跑一遍会发现,2015年股灾期间动量策略回撤超过40%。
原因在于A股的动量效应不稳定,散户情绪主导的市场里,涨得多的股票容易突然崩盘。练习的时候要加入一个风控条件:当市场整体波动率超过阈值时,降低仓位或者空仓。这个条件写进代码里,回撤能压缩一半。期货的截面策略更丰富,可以做多螺纹钢做空铁矿石,赚的是品种间价差回归的钱。
练习五 写一个策略评价卡片
不要只看年化收益。练习写一个函数,输入策略的每日收益率序列,输出下面这些指标:年化收益、最大回撤、夏普比率、卡玛比率、胜率、盈亏比、换手率。
夏普比率衡量的是每承担一单位波动风险获得多少超额收益。卡玛比率衡量的是每承担一单位最大回撤获得多少收益。股票策略夏普比率超过1.5算优秀,期货CTA策略夏普比率超过2才拿得出手。胜率和盈亏比要一起看,胜率60%盈亏比1比1的策略,不如胜率40%盈亏比3比1的策略。
这个练习的终极目的是建立标准。以后看到任何策略,先看评价卡片,再看净值曲线。曲线可以画得很平滑,评价卡片不会骗人。
练习的终点是建立自己的交易逻辑
Python量化投资的练习题做再多,核心就一句话:把主观交易的逻辑翻译成代码,再用历史数据检验这个逻辑是否站得住脚。代码只是工具,逻辑才是灵魂。
一个简单的均线策略,背后隐含的逻辑是趋势会延续。这个逻辑在螺纹钢期货上成立,在苹果期货上可能就不成立,因为苹果的供需周期太短,趋势还没形成就反转了。练习的时候多问自己一个问题:这个信号背后的经济含义是什么?想清楚了再写代码,比写一万行代码都值钱。
最后提醒一句:回测赚钱不等于实盘赚钱。练习的目的是让你在亏真金白银之前,先把该犯的错误在电脑上犯完。