NumPy和Pandas


NumPy和Pandas都是用Python做数据处理时非常好用的库。在一个新同学要使用Python做数据分析处理时,通常都会被推荐使用NumPy和Pandas这2个库。

Numpy提供了很多方便统计计算的功能,比如计算均值(mean函数)和标准差(std函数)。NumPy支持向量计算,例如向量加法、与标量相乘等。而Pandas则更进一步,它是基于NumPy开发的数学分析工具,是为了解决数据分析任务而开发的,用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效、方便很多。

一维数组

既然要做数据分析,那就不能只是分析单个数据了,所以从一维数组的数据分析开始。在NumPy中,一维数...

Read more

Alpha策略


Alpha策略是比较常见的量化策略。

Alpha的含义

Rs = α + Rf + βs(Rm + Rf) + ε

其中 Rs为现货组合的预期收益率, Rf为无风险利率,Rm为市场指数的预期收益,ε为误差项,α衡量了非系统性风险,βs衡量了系统性风险。

Alpha和Beta的关系

市场上常见的指数基金表现为: 如果整个市场涨了,业绩也跟着涨,但如果整个市场跌了,业绩也跟着跌。这是因为它的Beta系数一般在1左右,所以它的收益主要来源于Beta。

但是,如果只是依靠β来获利,那在市场走下坡时,就没有办法做到盈利了。因此我们需要更多考虑alpha参数,使得即使在市场下行时,也能获得正的超额收...

Read more

什么是量化交易


严格来讲,量化交易是运营复杂的统计学方法和数学模型,从庞大的历史数据中海选出能够带来收益的多种"大概率"事件以找出规律、制定策略,并且能用数据模型验证、固化这些规律和策略,然后用计算机来严格、高效地执行。

这一定义涉及统计学、金融学和计算机科学等多门学科,通俗点来说,量化交易是指利用统计学、数学、计算机技术和现代的金融理论来辅助投资者更好地盈利。这些量化的方法可用于分析海量历史数据,也可以用来控制持仓大小、进行风险评估、控制等。

因此,量化交易与传统的主观交易并不是二元对立,量化交易也包含主观交易,比如常见的期货跨市套利策略、期权波动率套利等就属于半自动交易。它们需要交易员综合历史均值回...

Read more

restful API的一些设计思路


什么是restful API

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

REST本身并没有创造新的技术、组件或服务,...

Read more

使用filebeat收集k8s集群中的应用日志


最近有一个新的k8s集群上线,在日志收集组件上有2个选择:

1. Logstash
2. Filebeat

logstash是之前用过的日志收集工具,同时logstash的生态也很丰富,大量的插件可以保证它在大部分的场景下都能游刃有余。但是logstash也有它的问题,典型的问题就是性能比较差以及对资源的使用较多;

filebeat则是组内同事推荐,相比于logstash,filebeat很年轻,所以功能比较单一。但是也因为功能单一,所以它相对很健壮,同时对于资源的使用也比较小。

最后考虑到新的集群硬件资源有限,所以决定选择filebeat作为该集群的日志收集组件。

方案选择

在kube...

Read more

做一个既"慢"又"懒"的研发


我们组有一条principle是: slow is fast(慢就是快)

最近在给组里的一些新同学review代码的时候发现他们在工作时有一些很明显的优缺点:

  • 优点是他们学习、编码的能力都很不错,对于每一个新的需求都能快速快成;
  • 缺点是经常会在他的代码中发现一些非常低级又很小的错误,比如单词拼写错误、又或者忘记了核心逻辑中的异常处理等等;

每次看到这样的问题,我都会跟他们说,你要学着让自己"慢"下来。众所周知,在软件工程中,有一个名词叫做:PONC(Price of Nonconformance)是指由于没有第一次做对而造成财物的额外浪费。简称:质量成本。对应到一个功能,在不同的阶段...

Read more

记录由于redis启动失败导致Harbor服务崩溃的问题


背景

最近服务运行在k8s集群,为了省事儿,也把Harbor以及Harbor需要用到的组件也放到了k8s中。在最近的一次上线中发现节点不能更新镜像了。查看pod的状态时,发现Harbor需要用到的Redis服务的master节点状态异常(Error or Crash)。查看日志,发现有相应的报错信息:

Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>

原来是因为Redis在将aof文件...

Read more

记录非root用户使用docker时提示没有权限的问题


背景

之前部署的K8S环境在root用户下,这样的部署方式虽然用起来没有什么问题,但是直接使用root权限操作线上机器也依然存在着安全隐患。因此决定使用非root用户(比如work用户)来进行日常升级操作。 对于K8S和Helm来说,从root用户迁移到work用户下比较简单,只需要将 /root/.kube/config 拷贝到/home/work/.kube/config即可。 但是当使用work用户操作docker时会报错,报错信息为:

permission denied

错误原因

Docker报错的原因是这样: 在Linux中,Docker使用了一个Unix Domain Soc...

Read more

k8s同步pod的时区


背景

最近在开发时发现由于RD在打镜像时没有注意时区问题,有一些镜像的时区不是东八区,导致业务逻辑出现异常(登录token失效、数据库创建时间不正常)。因此需要同步k8s pod的时区。

解决办法

有2个办法可以解决这个问题:

  1. 修改打镜像的Dockerfile,正确处理时区问题
  2. 部署应用时,单独读取主机的“/etc/localtime”文件,即创建pod时同步时区。

方案1的好处是,不需要修改集群的配置,一劳永逸的解决问题。但是缺点是需要修改Dockerfile,需要重新打镜像。

方案2的好处是,不需要重新打镜像,pod直接读取宿主机的时区。但是缺点是每个pod都要设置。(老的pod...

Read more

使用Python Coverage获取测试覆盖率


Coverage

当我们完成测试用例的编写之后,需要知道测试用例对整个代码的测试覆盖情况。此时可以使用Coverage工具运行测试用例并统计扫描结果。 在Python中,使用Coverage.py作为Coverage工具。Coverage可以执行测试用例,并生成HTML或者XML格式的报告。

安装

在控制台执行python -m coverage,如果有类似输出:

Code coverage for Python. Use 'coverage help' for help.

说明已经安装过。如果没有安装的话,可以执行: pip install coverage

就可以完成coverag...

Read more