标签: dolphindb

使用 numpy 改进 worldquant 101 alpha 因子的实现

我试图实现 WorldQuant 发布的 101 个量化交易因子 ( https://arxiv.org/pdf/1601.00991.pdf )。

\n

一个典型的因素是处理股票的价格和数量信息以及时间维度和股票维度。以 alpha 因子 #4 为例:(-1 * Ts_Rank(rank(low), 9))。这是动量阿尔法信号。最低价是一组股票在一定时期内的最低价。Rank 是对每行 panel\xe2\x80\x99s 进行排名的横截面过程(时间快照)。Ts_Rank 是在指定窗口内移动_rank panel\xe2\x80\x99s 每列(一只股票)的时间序列过程。

\n

直观上,Pandas 数据框NumPy矩阵应该适合 101 个 alpha 因子的实现。下面是我迄今为止使用NumPy得到的最佳实现。然而,性能太低了。在我的 Intel core i7 Windows 机器上,以 5000(交易日期)× 200(股票)矩阵作为输入运行 alpha #4 因子大约需要 45 秒。

\n

我还遇到了 DolphinDB,一个具有内置分析功能的时间序列数据库(https://www.dolphindb.com/downloads.html)。对于相同的因子 Alpha#4,DolphinDB 的运行时间仅为 0.04 秒,比 NumPy 快 1000版本快 1000 倍。然而,DolphinDB 是商业软件。有人知道更好的 python 实现吗?或者有什么技巧可以改进我当前的 python 代码以实现与 DolphinDB 相当的性能?

\n

Numpy实现基于https://github.com/yli188/WorldQuant_alpha101_code

\n
import …
Run Code Online (Sandbox Code Playgroud)

python numpy quantitative-finance pandas dolphindb

7
推荐指数
1
解决办法
2743
查看次数

就像在dolphindb中一样,如何在Clickhouse中实现`pivot`

我想对pivot某些数据做一些操作。就像跟随。

>>> df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two',
...                            'two'],
...                    'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
...                    'baz': [1, 2, 3, 4, 5, 6],
...                    'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
>>> df
    foo   bar  baz  zoo
0   one   A    1    x
1   one   B    2    y
2   one   C    3    z
3   two   A    4    q
4   two   B    5    w
5   two   C    6    t
>>> df.pivot(index='foo', columns='bar', values='baz')
bar  A …
Run Code Online (Sandbox Code Playgroud)

database pivot clickhouse dolphindb

4
推荐指数
1
解决办法
544
查看次数

在DolphinDB数据库中重写kdb脚本

我正在尝试在DolphinDB中重写kdb脚本。

首先让我解释一下我需要做什么。如果信号高于阈值T1,我们会在证券中建立多头头寸。我们不想在信号跌落到T1以下时立即平仓,因此给它一个缓冲:只有当信号跌落到T10以下(小于T1)时,我们才平仓。

另一方面,如果信号低于阈值T2,则我们建立一个空头头寸。仅当信号移动到T20> T2以上时,我们才平仓。

T1> T10> T20> T2。

基本上我需要以下向量:

 - if signal>T1, return 1. Subsequent elements are 1 until when signal<T10; 
 - if signal<T2, return -1. Subsequent elements are -1 until when signal>T20;
 - 0 otherwise
Run Code Online (Sandbox Code Playgroud)

以上任务的kdb脚本为:

0h^fills(-).(0N 1h)[(signal>T1;signal<T2)]^'(0N 0h)[(signal<T10;signal>T20)]

Run Code Online (Sandbox Code Playgroud)

有人在DolphinDB中重写它吗?

kdb dolphindb

4
推荐指数
2
解决办法
249
查看次数

kdb的移动最大函数mmax的复杂度是O(n)吗?

我使用函数mmax来计算一千万长度整数向量的移动最大值。我运行了 10 次来计算总执行时间。窗口大小 132 的运行时间(15,025 毫秒)是窗口大小 22 的运行时间(2,425 毫秒)的 6 倍。看起来复杂度mmax是 O(nw) 而不是 O(n),其中 w 是滑动窗口的长度)。

\n

为了检查其他类似产品是否也是如此,我在 DolphinDB 上尝试了相同的实验,DolphinDB 是一个具有内置分析功能的时间序列数据库 ( https://www.dolphindb.com/downloads.html )。相比之下,DolphinDB\xe2\x80\x99smmax线性复杂度为 O(n),无论窗口大小如何:1,277 毫秒(窗口大小 132)和 1,233 毫秒(窗口大小 22)。

\n

本实验使用的硬件:

\n
Server: Dell PowerEdge R630\nArchitecure: x86_64\nCPU Model Name: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz\nTotal logical CPU cores: 48\nTotal memory: 256G\n
Run Code Online (Sandbox Code Playgroud)\n

实验设置

\n

我使用的是KDB+ 4.0 64位版本和DolphinDB_Linux_V2.00.7(DolphinDB社区版本:2核和8GB内存)。两个实验均使用 2 核 CPU 进行。

\n

韩国开发银行实施

\n
// Start the server\nrlwrap -r taskset -c 0,1 …
Run Code Online (Sandbox Code Playgroud)

sliding-window kdb rolling-computation dolphindb

3
推荐指数
1
解决办法
158
查看次数