本表达式用于快速对时间序列进行运算,让不会编程语言的新手也能通过写出公式,验证想法。地址为 https://quantinfo.com/Tools/View/3 刚刚上线,欢迎反馈BUG。
目前支持商品期货数据和部分数字货币数据,即 发明者量化 网站上存在的行情数据,具体参考https://www.quantinfo.com/Tools/View/4/chart.html 商品期货支持期货合约,连续合约(后缀888)和指数合约(后缀000),支持周期1分钟、5分钟、15 分钟、30分钟、1小时、4小时、1日等,可获取到open、high、low、close、volume,可选择时间范围。
CTP.MA805.close
,其中CTP代表商品期货,MA805代表甲醇805合约,close代表收盘价。CTP.MA805
,其中包含5组数据open、high、low、close、volume
,在计算中注意保持数据
维度的一致。MA888.close
代替CTP.MA888.close
可以直接使用talib库中的函数,如SMA(CTP.MA805,20)
,注意此时CTP.MA805
不要加.close
,程序会自行确定使用相应数据,不指定参数使用默认参数,如果要指定参数须按顺序填写,参数只能为数字。
如果函数返回多组数据,如MACD(CTP.MA805)
返回macd、macdsignal、macdhist三组数据,此时调用MACD(CTP.MA805).macd
具体talib库的返回值和参数设置https://mrjbq7.github.io/ta-lib/doc_index.html
以下函数中,输入x代表数据时间序列,输入p代表逻辑时间序列,输出未说明均为与输入格式相同的序列
公式 | 说明 |
---|---|
log(x) | 取x的自然对数 |
shift(x,n) | x平移n,n为正数代表向前平移,负数向后。如shift(CTP.MA805.close,1) 即计算与上一根K线收盘价的价差,注意shift(CTP.MA805,1).close 的效果相同。 |
abs(x) | x的绝对值。 |
mean(x,n) | 时间序列x的滚动平均值,窗口为n,如mean(CTP.MA805.close,10) 即为10个周期收盘价均值。如果不传入n,则返回x的总体平均值。 |
std(x,n) | 窗口为n的滚动标准差。如果不传入n,则返回x的总体标准差。 |
sum(x,n) | 窗口为n的滚动和。如果不传入n,则返回x的总体和。 |
rank(x) | x的排序值,最小为1。 |
min(x,y) | 返回x和y序列中的对应位置较小的组成的新序列,如min(CTP.MA805.close,CTP.MA809.close) 如果只传入x,则返回x的最小值。 |
max(x,y) | 如上 |
tsrank(x,n) | 窗口为n的滚动排序值。 |
tsmin(x,n) | 窗口为n的最小值。 |
tsmax(x,n) | 窗口为n的最大值。 |
prod(x,n) | 窗口为n的连乘积。 |
delta(x,n) | 距离为n的差分,如delta(CTP.MA805.close,1)/shift(CTP.MA805.close,1) 即为相应周期的收益率序列。 |
cov(x,y,n) | 序列x和y的滚动协方差。 |
corr(x,y,n) | 序列x和y的滚动相关系数。如corr(CTP.MA809.close,CTP.MA805.close,20) ,即为20个周期 |
sma(x,n,m) | 自定义的sma函数。 |
skew(x,n) | 窗口为n的偏度。 |
kurt(x,n) | 窗口为n的峰度。 |
wma(x,n) | 自定义的wma函数。 |
highday(x,n) | 窗口为n,序列里最大值据当前的距离。 |
lowday(x,n) | 窗口为n,序列里最小值据当前的距离。 |
sequence(n) | 长度为n的等差序列,即[1,2,3,…n] |
regbeta(x,y,n) | 窗口为n内,x对y回归的系数。 |
regresi(x,y,n) | 窗口为n内,x对y回归的残差。 |
sumif(x,n,p) | 窗口为n内,满足条件p的x的求和,如:sumif(CTP.MA809.volume,30,CTP.MA809.volume>100) 即MA809合约在30个周期的窗口内,满足交易量大于100的成交量求和 |
count(p,n) | 窗口为n内,满足条件p的x的个数,如:count(CTP.MA809.volume>100,30) n不传入,默认统计整个时间序列 |
sign(x) | 序列x的符号,正数为1,负数为-1. |
kdj(x,9,3,3) | KDJ指标,默认参数k=9,d=3,j=3,调用kdj(MA888.close).k |
IC(x,r) | x为所求的alpha因子,r为收益率序列.返回一个数字。 |
注意运算支持时间序列,代表相应位置的运算,返回的仍然是时间序列
(CTP.MA809.close-CTP.MA805.close)>20?1:0
表示如果MA809合约收盘价大于MA805合约20元,值取1,否则为0。也支持:
(CTP.MA809.close-CTP.MA805.close)>20?CTP.MA809.close:CTP.MA805.close
p = CTP.MA809.close>CTP.MA805.close,a = CTP.MA809.close,b = CTP.MA805.close,p?a:b
PLOT(MA888.close,line,0),PLOT(MA888.volume,column,1)
会画两张共享x轴(时间轴)的图,第一个参数是类型,可选line:线,columns:柱。第二个参数是所属的分组,
同一分组的图将叠加绘制。默认画线,分组为0.注意分组顺序从0开始,依次加1.
注意当语句中出现PLOT()
函数时,规则1不再使用。简易计算器功能:
3**0.5+2.0/3*(3+4)+pi
画K线:
PLOT(MA888,candlestick,0),PLOT(MA888.volume,column,1)
计算收益率序列:
100*delta(MA888.close,1)/delay(MA888.close,1)
3中的收益率由于主力合约切换,收益率序列产生异常值,可以使用三目运算去异常值:
(100*abs(delta(MA888.close,1)/delay(MA888.close,1))>5)?0:100*delta(MA888.close,1)/delay(MA888.close,1)
在K线上叠加均线:
PLOT(MA888,candlestick,0),PLOT(mean(MA888.close,10),0)
使用TA-Lib库的函数:
PLOT(MA888.close,0),PLOT(MACD(MA888,10),1)
合约跨期套利,画出合约差价:
MA809.close-MA805.close
合约跨期套利,求出平均差价:
mean(MA809.close-MA805.close)
合约跨期套利,最大差价:
max(MA809.close-MA805.close)
合约跨期套利,求出差价标准差:
std(MA809.close-MA805.close)
合约跨期套利,差价大于20的次数:
count(MA805.close-MA809.close>20)
跨品种套利,画出两品种相关系数变化:
corr(j888.close,jm888.close,15)
跨品种套利,画出两品种线性回归系数的变化:
regbeta(j888.close,jm888.close,15)
简单改一下可以套用一些alpha公式
参考:聚宽,注意链接里的文章错误较多,
可参考原始研报国泰君安-数量化专题之九十三:基于短周期价量特征的多因子选股体系
如alpha_001,原始公式为:
(-1 * CORR(RANK(DELTA(LOG(VOLUME),1)),RANK(((CLOSE-OPEN)/OPEN)),6))
改为:
-1 * corr(rank(delta(log(MA888.volume),1)),rank(((MA888.close-MA888.open)/MA888.open)),6)
如alpha_002, 原始公式为:
-1 * delta(((close-low)-(high-close))/((high-low)),1)
改为:
-1 * delta(((MA888.close-MA888.low)-(MA888.high-MA888.close))/((MA888.high-MA888.low)),1)
如alpha_003,原始公式为:
SUM((CLOSE=DELAY(CLOSE,1)?0:CLOSE-(CLOSE>DELAY(CLOSE,1)?MIN(LOW,DELAY(CLOSE,1)):MAX(HIGH,DELAY(CLOSE,1)))),6)
公式的嵌套比较多,为了方便清晰可以改为:
CLOSE=MA888.close,LOW=MA888.low,HIGH=MA888.high
temp1=(CLOSE-(((CLOSE>delay(CLOSE,1)))?min(LOW,delay(CLOSE,1)):max(HIGH,delay(CLOSE,1))))
temp2=(CLOSE==delay(CLOSE,1))?0:temp1
sum(temp2,6)
如alpha_005,原始公式为:
(-1*TSMAX(CORR(TSRANK(VOLUME,5),TSRANK(HIGH,5),5),3))
改为:
VOLUME = MA888.volume,HIGH=MA888.high
(-1*tsmax(corr(tsmax(VOLUME,5),tsrank(HIGH,5),5),3))
alpha一般的研究框架: 判断一个alpha是否有效的方法是求其和收益率序列的相关系数,如:
CLOSE = MA888.close,VOLUME=MA888.volume,HIGH=MA888.high,LOW=MA888.low,OPEN=MA888.open
RET=delta(CLOSE,1)/delay(CLOSE,1)
alpha=sma(CLOSE-delay(CLOSE,5),5,1)
IC(alpha,delay(RET,-1))
返回的结果绝对值越大说明alpha因子与收益率相关系数越强,预测性越好。
空即是多 老板,能加入OKEX的USDT系列吗?
张威 请问都支持哪些交易所下面的哪些交易对。有没有不断更新的文档?从哪里查
张威 请问都支持哪些交易所下面的哪些交易对。有没有不断更新的文档?从哪里查
sliwin 数据好像不是事实更新的
feiyuemiwuh 谢谢!
feiyuemiwuh 出现这样的错误,不知道问题在哪里
feiyuemiwuh https://dn-filebox.qbox.me/fdc15763de975214d3ed5adaac2f9fa327f8684e.jpg
收麦君 伦家想要BITMEX.XBTUSD
小草 文档从这里更新
小草 这个文档里就有啊
小草 可以了,手动把数据改为后一天就行,比如今天是7号,最后一天选8号,就包含了实时的数据。
小草 和平台的行情网站保持一致,实时跟新的,应该是请求时间戳的问题,要改一下
收麦君 OKEX啊,全大写