量化遇坑记录,终于明白量化风控的重要性
我有一个稳定盈利的策略,使用的是天勤量化,运行了几个月都没有大问题。
小问题有一些,有时软件会自动关闭,后来设置了计划任何每天收盘后关闭软件,开盘前打开软件,这个问题就很少出现了。
昨天23-6-29出现了大问题,一天的亏损就超过了50%。开始以为是期货公司的系统故障,可能第2天就会回复正常,因为我的策略很稳定,每天的浮动盈亏很少。
期货公司那边排除问题后,查了下监控中心,发现是高频率的反复开平仓造成的。怀疑是服务器被黑了,查看了策略代码并没有被修改过,剩下的怀疑是天勤量化被黑了。
天勤量化群里反馈了问题,昨天其他人的程序都很正常,集合群友的猜测,总结如下:
1、潜在bug触发,我已经运行了几个月都没问题,我并不赞同这个观点,群友说有的bug可以埋伏几年,想想也不是没可能。
2、调仓工具问题(set_target_volume),群友称天勤的调仓工具有bug,上次在这个群讨论过,天勤sdk无法准确判断订单是否成功。建议自己封装insert。
3、网络波动,网络延迟问题,没有及时更新仓位。网络通信都是异步的,不要拿着同步的思维去处理问题。群友建议最好自己用本地变量做个标识,别都用回报信息。
4、多方面原因综合触发小概率事件,自己先做好风控才是最重要的。不要过度相信自己的代码能力,风控是最后一道防线,前面的程序运行逻辑,本地化计算都跟上。
群友建议:不用调仓工具,自己 insert_order,万一网络故障什么的,30秒内还不能确定 order 的状态,则发报警邮件,特殊情况人工处理。
order 状态里面有一个字段 is_online,如果下单30秒后,这个字段还是false,就转交人工处理。用天勤只能做到这样了。
官方回答:先检查代码,看看有没有出现报单后,在没有确认已报单时又继续报单的逻辑错误。
申报次数一定要限制
有个案例,30万本金,半小时亏损400多万,主要原因是超高量的申报次数,因为申报费是结算时算的,不是实时的,这就导致已经亏了400多万还不知道,结算的时候不仅30万本金清空,还倒欠债几百万。
大概情况是使用了FAK指令,如果不成交,则自动撤单。如果撤单的话,通常第二次会立即成交。但是意外的事,没有成交。然后反复重复。人工发现异常后,已经撤单了6万次。原因第三方软件(极智量化)的行情推送错误引起的。
原文见 https://zhuanlan.zhihu.com/p/623266217
超过4000次申报,就要收费,详情见 https://www.shfe.com.cn/news/notice/911341847.html
申报单费才不管你帐上有多少钱?盘后结算,交易所直接从期货公司扣,你觉得期货公司会好心给你免掉吗?
成交次数也要限制
如果策略一天的成交次数不是很多,就限制一天最多成交几单,这样即使出问题亏损也有限。
重要数据本地化
仓位一定要本地化。网络延迟问题,没有及时更新仓位,问题就大了。这次亏了一半资金大概率就是仓位没更新引起的。
报单状态要监控
比如每隔5秒检查一次,报单状态是否成功。
异常预警
比如,监控指定账号开平仓,撤单次数, 并在超过一定次数的时候就发警告邮件,也可以发送到钉钉,或让电脑发出警报声音。有网友建议可以雇个大学生帮你看着。
我个人的情况并没有时间看警告邮件,出现异常直接关闭程序更合理,然后专门新建一个文件夹用来存放异常记录,方便今后修正。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2022-06-30 Python效率 求最小值df.min和df.where