Don‘t fly solo! 量化之路,AI伴飞

server/2024/10/18 18:13:07/

在投资界,巴菲特与查理.芒格的神仙友谊,是他们财富神话之外的另一段传奇。巴菲特曾这样评价芒格:他用思想的力量拓展了我的视野,让我以火箭的速度,从猩猩进化到人类。

人生何幸能得到一知己。如果没有这样的机缘,在AI时代,至少我们做量化时,可以让AI来伴飞。

这篇文章,分享我用AI的几个小故事。


在讲统计推断方法时,需要介绍分位图(Quantile-Quantile Plot)这种可视化方法人类天生就有很强的通过视觉发现pattern的能力,所以介绍这种可视化方法几乎是不可缺少的。


左偏、正态和右偏分布的QQ图示例

但当时在编这部分教材时,我对QQ-plot的机制还有一点不太清晰:为什么要对相比较的两个随机变量进行排序,再进行绘图?为什么这样绘图如果得到的是一条直线,就意味着两个随机变量强相关?难道不应该是按随机变量发生的时间顺序为序吗?

启用GPT-4的多角色数据科学家扮演

这个问题无人可请教,哪怕我搜遍全网。后来,即使我通过反复实验和推理,已经明白了其中的道理,但毕竟这个知识点似乎无人提及过,心里多少有点不确定。于是,我请教了GPT-4。


最初的几次尝试没有得到我想要的结论,于是,我用了一点技巧,要求GPT-4把自己想像成为数据科学家。并且,为了避免错误,我使用了三个数据科学家进行角色扮演,让A和B分别提出观点,再让C来进行评论,这一次,我得到了非常理想的结果,即使请教人类专家可能亦不过如此。

先给GPT-4提供问题背景:
在这里插入图片描述

从背景可以看出,我已经掌握了QQ图的大致原理。如果X与Y是同分布的,那么,将X,Y排序后,分别以 [ I , X ] [I,X] [I,X] [ I , Y ] [I,Y] [I,Y] I I I为数组坐标)为点绘制的曲线,将会是相似曲线。


但QQ图将其进行了变换,直接取每一个坐标 I i I_i Ii对应的 X i X_i Xi Y i Y_i Yi作为曲线的坐标,从而将只绘制出一条曲线。如果二者同分布,则该曲线将是一条直线。当时我对这个变换的性质还不太了解。

我的问题一共有4个:

在这里插入图片描述

最后一问,实际上就是要问这个变换为什么能成立。

GPT-4的角色 – 数据科学家A发现了背景中第一段的一个错误。 [ X , X ] [X,X] [X,X]的图像为45度直线的条件并不需要 X X X是有序的。任何数据集的 [ X , X ] [X,X] [X,X]图像都会是45度直线(显然)。对于第2问,A的回答是:

!!! quote
If we don't standardize X (i.e., perform a z-score transformation), the Q-Q plot may not form a 45-degree line. The reason we standardize is to put X and Y on the same scale, which makes it easier to compare them.


对于第三问,数据科学家A认为:

在这里插入图片描述

n只影响图像的平滑度和我们判断时的精度。这一点非常准确。但我最关注的是第四位,随机变量X与Y究竟是如何对应的,为什么可以将它们按大小排序?A的回答是:

在这里插入图片描述

答案几乎已经呼之欲出了。即使两个随机变量服从同一分布,它们的值也不会相等,但是,出现在同一位置上的随机变量值,它们的差值会很小。因此,这样绘制出来的图,就是一条45度直线。

B和C主要是对A的结论进行质疑、比较,这里不赘述了。


无论A、B还是C都没有给出最终的解释:为什么如果随机变量X和Y服从同一分步的话,那么在同一位置i处的 X i X_i Xi Y i Y_i Yi应该是接近的。但它们确实证实了我们绘制QQ图之前,先对随机变量进行排序的思路是正确的。

在这里插入图片描述

如果上述概念还不好理解,我们可以再举一个更直观的例子。通过QQ图来判断两个证券标的是否存在强相关性。比如,我们以两支同行业个股为例,取它们最近250期日线,计算每日回报率,对其进行排序后绘图:

python">import matplotlib.pyplot as pltr1 = hchj["close"][1:]/hchj["close"][:-1] - 1
r2 = xrhj["close"][1:]/xrhj["close"][:-1] - 1plt.scatter(sorted(r1), sorted(r2))
x = np.linspace(np.min(r1), np.max(r1), 40)
plt.plot(x,x, '-', color='grey', markersize=1)
plt.text(np.max(r1), np.max(r1), "x=x")

我们将得到如下的分位图:

这就非常直观地显示出,两支个股的走势确实相关:在涨幅4%以下的区域,如果A下跌,那么B也下跌,并且幅度都差不多;如果A上涨,那么B也上涨;幅度也差不多。这正是相关性的含义。这里我们排除了时间,只比较了两个随机变量即日收益率。
在这里插入图片描述


跟着copilot学编程

有两个版本的copilot。一个是copilot,另一个,现在被叫作github copilot,是vscode中的一个扩展。后者2022年中就发布了,当时有6个月的免费试用期。试用期内一炮而红,迅速开启了收费模式。这也直接导致了同年11月同赛道的工具软件Kite的退出。

现在github copilot每月$10,尽管物有所值,但作为不是每天都coding的人来说,感觉如果能推出按token付费的模式是最好了。

它的两个免费版本,一个是对学生免费。有edu邮箱的可以抓紧在github上申请下。另一个是如果你的开源项目超过1000赞,则有机会申请到免费版。

一般我使用copilot作为编程补充。它在错误处理方面可以做得比我更细腻,另外,在写单元测试用例时(建议每个量化人都坚持这样做),自动补齐测试数据方面是一把好手。

但是我没有想到的是,有一天它还能教我学编程,让我了解了一个从来没有听说过的Python库。

整个事情由ETF期权交割日引起。近年来似乎形成了这样一个规律,每逢期权交割日,A股的波动就特别大,而且以向下波动为主。因此,量化程序需要把这些交割日作为因子纳入交易体系。


但是这些交割日的确定,出入意料地–。它的规则是:

股指期货的交割日为每月的第三周周五;ETF期权交割日为每月第四周的周三;A50交割日为相关月的倒数第二个交易日。

在刚刚过去的4月19日,是一个股指期货交割日。接下来的4月24日,则是ETF交割日。今年的交割日如下:


随手写了几行代码,发现这个日子还是比较难算的。于是打开copilot chat,问它:
在这里插入图片描述

Copilot并不知道股市日历,所以无法独立完成上述任务。这并不奇怪。令人惊喜地是,它使用了calendar.monthcalendar这个方法。尽管calendar是一个标准库,但我之前并不知道它还有这个用法。

python">import calendarcalendar.monthcalendar(2024, 4)

75%


在这个基础上改就容易多了。另一个有趣的例子,是让copilot帮我想函数名。

我喜欢使用这样一个因子,最近20天内,涨幅中位数与跌幅中位数的比率。显然,这个比值越大,说明做多的力量越强。

最初我使用caculate_ratio这个函数名。但几乎所有的因子计算都可以使用这个名字。因此,我让copilot给一个准确点的名字。copilot回答说,根据函数的功能,我们可以将函数名从calculate_ratio改为calculate_downward_exceeding_upward_median_ratio。这个名字更准确地描述了函数的功能:计算下跌幅度超过上涨中位数的比例。

不过,这个名字太长了,也不优雅。于是,我问copilot,名字可以再短一点吗?可以使用metaphore吗?Coplilot回答说:
在这里插入图片描述


http://www.ppmy.cn/server/5599.html

相关文章

轻量级SQLite可视化工具Sqliteviz

什么是 Sqliteviz ? Sqliteviz 是一个单页面离线优先的渐进式网络应用(PWA),用于完全客户端的 SQLite 数据库或 CSV 文件的可视化。 所谓完全客户端,就是您的数据库永远不会离开您的计算机。使用 sqliteviz&#xff0c…

使用PHP开发体育赛事直播平台,有这些缺点和优点

"东莞梦幻网络科技"作为体育直播平台开发领域的领导者,选择使用PHP开发体育赛事直播平台的现成源码,为什么会选择该语言,背后的选择理由可以从该技术的优点和缺点中找到答案。 一、优点1、易学易用与快速开发:PHP语言语…

docker 安装 jenkins

docker 安装 jenkins 1.安装镜像 docker pull jenkins/jenkins 2.创建容器 docker run --detach \-u root \--publish 8850:8080 --publish 50000:50000 \--name jenkins \--restart always \--volume /usr/local/java/jdk-17.0.11:/usr/local/java/jdk-17.0.11 \--…

Linux 用户和组

理解Linux 用户和组的概念 掌握passwd 文件的组成以及作用 掌握shadow 文件的组成以及作用 了解group 文件的内容 1.用户分类: 超级管理员(root) 普通用户 程序用户 1.用户信息文件 /etc/passwd 文件中存储了所有用户信息。 1.passwd 格…

linux命令ar使用说明

ar 建立或修改备存文件,或是从备存文件中抽取文件 补充说明 ar命令 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属…

模电期末复习(一)半导体器件

半导体器件 1.1 半导体的特性1.1.1 本征半导体1.1.2 杂质半导体 1.2 半导体二极管1.2.1 PN结及其单向导电性1.2.2 二极管的伏安特性1.2.3 二极管的主要参数1.2.4 稳压管 1.3 双极结型三极管1.3.1 三极管的结构1.3.2 三极管中载流子的运动和电流分配关系1.3.3 三极管的特性曲线1…

UE5 在骨骼动画模型上绘制贴图

参考:Unreal 5.1 - How to paint damage textures and other effects on skeletal meshes 针对模型,在运行状态下通过射线指定一定范围,添加材质效果。 核心思路 通过射线获取命中点,作为材质参数材质中,命中的世界…

从预训练损失的角度,理解语言模型的涌现能力

原文:Understanding Emergent Abilities of Language Models from the Loss Perspective 摘要 本文从预训练损失的角度重新审视语言模型的涌现能力,挑战了以往以模型大小或训练计算量为标准的观念。通过实验,作者发现预训练损失是预测下游任…