QUANTAXIS
QUANTAXIS copied to clipboard
[教程贴] 跨周期!
QUANTAXIS的跨周期函数教程贴
跨周期总是一个让人很难受的话题, 在纵观了一些平台 Tb/rq/jq的解决方案后, 我决定给出一个比较简单的解决方案
qa基于快速的resample试图给出一些方案 (首先 quantaxis先升级到最新版本 : git pull)
跨周期的函数 LLV_MT (举个例子)
def LLV_MT(Series,new_freq='15min',N=20):
res =QA.QA_data_futuremin_resample_series(Series.reset_index(1),Series.name,new_freq)
return res.rolling(N).min()
让我们感受一下 如何把一个5min回测周期的数据, 获取在15min上的LLV指标结果
data = QA.QA_fetch_future_min_adv('RBL8','2019-07-01','2019-07-30','5min')
print(LLV_MT(data.open).tail())
open
datetime
2019-07-30 14:00:00 3885.000244
2019-07-30 14:15:00 3885.000244
2019-07-30 14:30:00 3885.000244
2019-07-30 14:45:00 3885.000244
2019-07-30 15:00:00 3885.000244
你可以看到 结果已经是15min的, 但是我知道你肯定在想 我怎么拿到5min级别下的15min对应的指标值呢?
答案非常简单, 既然我们有升采样, 也可以降采样嘛, 对吧
x.resample('5min').last().tail()
open
datetime
2019-07-30 14:40:00 NaN
2019-07-30 14:45:00 3885.000244
2019-07-30 14:50:00 NaN
2019-07-30 14:55:00 NaN
2019-07-30 15:00:00 3885.000244
--
当然你也就非常清楚下一步肯定是fill掉nan的部分:
此处要用ffill, 及向后填充, 这个很重要, 因为在还没出现新的15min时候, 你不可能知道后面的15min的指标值
x.resample('5min').last().tail().ffill()
open
datetime
2019-07-30 14:40:00 3885.000244
2019-07-30 14:45:00 3885.000244
2019-07-30 14:50:00 3885.000244
2019-07-30 14:55:00 3885.000244
2019-07-30 15:00:00 3885.000244
emm 似乎这个例子的最后几个值都一样,不过大概意思就是这样咯
那么必然的 你肯定想比较下 两种freqence下的指标结果
pd.concat([QA.LLV(data.open,20).reset_index(1).open, x.resample('5min').last().ffill().open],axis=1).dropna().tail()
open open
datetime
2019-07-30 14:40:00 3890.000244 3885.000244
2019-07-30 14:45:00 3890.000244 3885.000244
2019-07-30 14:50:00 3890.000244 3885.000244
2019-07-30 14:55:00 3890.000244 3885.000244
2019-07-30 15:00:00 3890.000244 3885.000244
当然了 第一个open是5min的 第二个是15min的
def LLV_MT(Series,new_freq='15min',N=20):
res =QA.QA_data_futuremin_resample_series(Series.reset_index(1),Series.name,new_freq)
return res.rolling(N).min()
问下天神这个N=20是时间窗口的大小么