QUANTAXIS icon indicating copy to clipboard operation
QUANTAXIS copied to clipboard

[教程贴] 跨周期!

Open yutiansut opened this issue 5 years ago • 1 comments

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的

yutiansut avatar Aug 05 '19 23:08 yutiansut

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是时间窗口的大小么

modentcitizen avatar Jan 21 '21 03:01 modentcitizen