量化研究员!你应该如何写一手好代码

news2024/11/26 7:19:56

即使是Quant Researcher, 写一手高质量的代码也是非常重要的。再好的思路,如果不能正确地实现,都是没有意义的。

写一手高质量的代码的意义,对Quant developer来讲就更是自不待言了。这篇笔记就介绍一些python best practice。


始终为策略研究创建独立的虚拟环境

在量化研究中,很多功能会借助第三方包。第三方包也必然会依赖其它第三方包。如果有两个以上的包都依赖于某一个包,但是要求的版本不同,这就发生了依赖地狱。

有一些量化研究员常常会把自己的研究环境搞坏,就是因为不断尝试新的技术、新的python库,而这些新的库,依赖的第三方版本和原来的发生冲突,强行覆盖之后,导致之前的python库无法使用造成的。

解决依赖地狱问题,需要在不同的层面上进行解决。首先,我们可以通过 conda来为每一次新的策略研究项目,构建一个独立的虚拟环境,即使我们是使用jupyter notebook进行策略研究的,也是如此。

有点软件工程意识的研究员会使用requirements.txt来管理依赖库。但这样仍然是错误的。我们应该使用poetry来管理依赖库。poetry的作用是,当我们通过poetry往项目中增加依赖时,它能告诉我们,新增加的库是否与已有的库相冲突。它还有可能自动帮我们找到彼此兼容的版本。


因此,新策略研究的正确打开方式是:

conda create -n new_project python=3.11
poetry init
poetry add pandas^2.0
poetry add scipy^1.8


pandas和scipy都会依赖numpy。当我们先加入pandas2.0时,它会确定一个numpy版本,随后加入scipy1.8时,此时poetry就会看scipy声明依赖的numpy版本,是否与pandas声明的版本中存在共同兼容的版本。如果找到,则添加成功,否则,poetry将提示我们,重新选择恰当的版本


如此一来,就不会无声无息地失败了。Poetry就像乐队指挥一样,能够帮我们精确地管理各种依赖关系,避免冲突。

书写漂亮的代码

在写代码时,我们会有自己的风格。比如变量名如何使用大小写,单词之间如何分隔,如何使用空格和缩进等等。为了统一风格,Python社区有一个统一规范,称为PEP8。

强制我们的代码遵循PEP8的最佳方式,是使用black作为代码格式化工具。

推荐black的原因是,它基本上不接受定制。实际上,代码风格的定制几乎没有意义。一个人即使长得丑点,你强迫自己多看他几眼,就会发现其实也是能看的。

black的成功就在这地方,它的motto是不妥协的格式化工具。很多事情就是这样,坚持自己的风格,宁可站着死,不愿跪着生,向死而生,反倒是机会。

使用语法检查工具

有很多错误可以在测试之前就找到,这样除错成本最低。如果你是使用Pycharm或者vscode这样的IDE来进行开发,就能随时用上IDE提供的语法检查功能。


很多策略研究员会使用notebook进行探索式开发。现在,我们在vscode中也能写notebook了。在vscode中使用notebook,会比浏览器中使用具有更多的优点,比如:

  1. 它能记住多个编辑插入点,因此我们可以方便地前后跳转。在浏览器中打开的notebook中,要做到这一点,只有一个办法,就是插入标题,通过outline来进行导航跳转。
  2. 语法检查和自动完成。这正是这一节我们提到的功能。
  3. 单元格调试。这点更是比浏览器中的notebook要强不少。Farewell to print!

单元测试:Fake it till you make it!

就连很多正牌的程序员也做不好单元测试。但是这一点非常重要。作为策略研究员,我们并不需要对所有的代码都执行单元测试,但是,如果你创造了一个可复用的轮子,你就应该提供单元测试报告。

测试的意义是, testing leads to failure, failure leads to understand。我喜欢这句话。在我们的量化课程中,我们也掺杂了一些故意让你失败的例子。只有这样,你才会对系统是如何运作的有深刻的理解。在回测中表现得很好的策略,也能在实战中有好的表现。

我们可以使用pytest框架来编写单元测试,它非常轻量易用,大约半天的时间就足够入门了。


单元测试并不复杂,主要难点在于如何将待测试的代码与系统中的其它部分隔离开来。再花上两三个小时,学一下mock的使用,熟练之后,你甚至会爱上单元测试。

如果你在策略研发中,也遇到过环境构建、代码质量不高等问题,可以抽空看看这本书,它的电子版是免费的:


图8~图10是样张。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1393454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm install 无反应 npm run serve 无反应

说明情况:其实最开始我就是发现我跟着黑马的苍穹外卖的前端day2的环境搭建做的时候,到这一步出现了问题,无论我怎么 npm install 和 npm run serve 都没有像黑马一样有很多东西进行加载,因此我换了一种方法 1.在这个文件夹下cmd …

CSS 设置背景图片

文章目录 设置背景颜色设置背景图片背景图片偏移量计算原点背景图片尺寸设置背景图片位置设置背景图片重复方式设置背景范围设置背景图片是否跟随元素移动测试背景图片 本文概念部分参考:CSS背景background设置 设置背景颜色 background-color 设置背景颜色 设置…

【面试合集】说说你对 linux 用户管理的理解?相关的命令有哪些?

面试官:说说你对 linux 用户管理的理解?相关的命令有哪些? 一、是什么 Linux是一个多用户的系统,允许使用者在系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境 而与 Windows 系统最大的不同…

表的增删改查 进阶(一)

🎥 个人主页:Dikz12🔥个人专栏:MySql📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 1.数据库约束 约束类型 NOT NUll 约束 UNIQUE 约束 …

【Qt-license】误操作qt下载导致只能安装商业版试用十天,无法安装社区版

背景: 原本是为了学习qml,需要下载一个design studio,而这个需要比较新版的安装程序,但新版的安装程序官方都是online安装。于是从官网找下载链接。毕竟是英文的,又心急,误打误撞中我选择了商业版试用。 其…

2024华数杯B题四小问完整思路+四问数据代码+数据可视化图表

ICM B 题:光伏发电 完整资料在文末获取 该题目出题的难度与方向都与美赛 ICM 的题型高度相似,将本次竞赛当做美赛的 练手赛,个人认为是非常合适的一种选择。同时 28 号就可以出成绩,也可以在美赛前 实现查漏补缺,提…

dolphinscheduler分布式集群部署指南(小白版)

1.Apache DolphinScheduler概述 官方文档地址:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 1.1.DolphinScheduler简介 摘自官网:Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xf…

5-数组-矩阵置零

这是数组的第5篇算法,力扣链接。 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0…

国标GB28181安防视频监控EasyCVR级联后上级平台视频加载慢的原因排查

国标GB28181协议安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,同时还…

推荐五款超好用的AI写作自动生成器给你

随着人工智能技术的不断发展,AI写作自动生成器成为了现代写作的新宠。这些智能工具能够帮助我们快速生成高质量的文章,节省时间和精力。在本文中,我将向大家推荐五款超好用的AI写作自动生成器,希望能够为你的写作工作带来便利和效…

坚持刷题 | 二叉树的层序遍历

坚持刷题,老年痴呆追不上我,今天刷:二叉树的层序遍历 题目 102二叉树的层序遍历 考察点 数据结构基础: 能够正确地使用二叉树数据结构,并了解二叉树的基本性质。编程基础: 能够熟练使用Java编程语言&a…

大语言模型系列-Transformer

文章目录 前言一、Attention二、Transformer结构三、Transformer计算过程1. 编码器(Encoder)1)Self-Attention层2)Multi-Head-Attention层3)Add & Norm层 2. 解码器(Decoder)1)M…

【欢迎您的到来】这里是开源库get_local_info作者的付费专栏

您好, 我是带剑书生,开源库get_local_info的作者,欢迎您的到来,这里是我的付费专栏,会用更简洁的语言,更通俗的话语,来帮助您更好的学习rust,这里不仅仅讲解Rust在某些应用功能实现上…

就想搞一个简单的html模板学学css到底行不行?

做一个个人博客第一步该怎么做? 好多零基础的同学们不知道怎么迈出第一步。 那么,就找一个现成的模板学一学呗,毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题,那就是,那些模板都,太!…

【性能调优】local模式下flink处理离线任务能力分析

文章目录 一. flink的内存管理1.Jobmanager的内存模型2.TaskManager的内存模型2.1. 模型说明2.2. 通讯、数据传输方面2.3. 框架、任务堆外内存2.4. 托管内存 3.任务分析 二. 单个节点的带宽瓶颈1. 带宽相关理论2. 使用speedtest-cli 测试带宽3. 任务分析3. 其他工具使用介绍 本…

SERVLET的概念

SERVLET的概念 假设一种您需要登录到网站上访问电子邮件账户的场景。您需要提交登录详细信息进行验证,如用户名和密码。网站使用服务器端程序接受并验证登录信息。这些服务器端程序是用不同的服务器端技术编写的,如公共网关接口(CGI)、Active Server Pages(ASP)及servle…

爬虫逆向开发教程1-介绍,入门案例

爬虫前景 在互联网的世界里,数据就是新时代的“黄金”。而爬虫,就是帮助我们淘金的“工具”。随着互联网的不断发展,数据量呈现指数级的增长,在数据为王的时代,有效的挖掘数据和利用,你会得到更多东西。 学…

Spring MVC的原理

Spring MVC中的MVC即模型-视图-控制器,该框架围绕一个DispatcherServlet设计而成,DispatcherServlet会把请求分发给各个处理器,并支持可配置的处理器映射和视图渲染等功能。Spring MVC的具体工作流程如下: (1&#xff…

商业应用算力全球新标杆!浪潮信息八路服务器创SAP SD评测最高性能

1月15日,据全球领先的企业应用软件提供商SAP发布的最新SAP SD评测结果,浪潮信息TS860G7服务器创下1,659,970 SAPS的最高性能成绩,成为商业应用算力的全球新标杆。TS860G7是浪潮信息最新一代的企业级八路服务器,其取得的最新成绩也…

电商平台spu和sku的完整设计

一、关于数据库表的设计 1、商品属性表 比如一个衣服有颜色、尺码、款式这个叫属性表 -- ------------------------ -- 商品属性表 -- ------------------------ DROP TABLE IF EXISTS attribute; CREATE TABLE attribute (id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT CO…