Loading ...

quant.la上线公式编辑器功能

Author: 小草, Created: 2018-02-26 10:57:17, Updated: 2019-07-31 17:56:27

表达式说明

本表达式用于快速对时间序列进行运算,让不会编程语言的新手也能通过写出公式,验证想法。地址为 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,可选择时间范围。

数据调用方式

  1. 商品期货:CTP.MA805.close,其中CTP代表商品期货,MA805代表甲醇805合约,close代表收盘价。
  2. 如果直接使用CTP.MA805,其中包含5组数据open、high、low、close、volume,在计算中注意保持数据 维度的一致。
  3. 数字货币支持交易对: HUOBI支持 : BCH_BTC,ETC_BTC,ETH_BTC,LTC_BTC OKEX支持 : BTC_FUTURES_NEXT_WEEK,BTC_FUTURES_QUARTER,BTC_FUTURES_THIS_WEEK,ETH_BTC,ETC_BTC,BCH_BTC,LTC_BTC BITFINEX支持: BTC_USD OKCOIN支持 : BTC_USD
    调用方式:HUOBI.BCH_BTC,OKEX.LTC_BTC等。注意数据有缺失。
  4. 默认选择商品期货,可以直接输入MA888.close代替CTP.MA888.close
  5. 其它交易所和交易对待支持。
  6. 勿一次调用大量数据(如长时间内的分钟线),有可能超过限制,无法获取。

TA-Lib库支持

可以直接使用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为收益率序列.返回一个数字。

支持的运算符与常数

注意运算支持时间序列,代表相应位置的运算,返回的仍然是时间序列

  1. 支持+, -, *, /,四则运算。
  2. **指数运算。
  3. ==, >=, >, <, <=, !=,比较运算符
  4. &(与),||(或),~(非),逻辑运算符
  5. //,整除;%,取余
  6. p?x:y 三目运算,如: (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
  7. 自然对数的底数:e;圆周率:pi;黄金分割比:phi

语法与绘图

  1. 使用逗号和换行分隔不同的句子,支持赋值操作,把最后一句的结果画出,如: p = CTP.MA809.close>CTP.MA805.close,a = CTP.MA809.close,b = CTP.MA805.close,p?a:b
  2. 可使用PLOT函数画不同的图和类型,如: PLOT(MA888.close,line,0),PLOT(MA888.volume,column,1) 会画两张共享x轴(时间轴)的图,第一个参数是类型,可选line:线,columns:柱。第二个参数是所属的分组, 同一分组的图将叠加绘制。默认画线,分组为0.注意分组顺序从0开始,依次加1. 注意当语句中出现PLOT()函数时,规则1不再使用。
  3. 注意标点符号应为英文标点;大小写敏感。

应用示例

  1. 简易计算器功能: 3**0.5+2.0/3*(3+4)+pi

  2. 画K线: PLOT(MA888,candlestick,0),PLOT(MA888.volume,column,1)

  3. 计算收益率序列: 100*delta(MA888.close,1)/delay(MA888.close,1)

  4. 3中的收益率由于主力合约切换,收益率序列产生异常值,可以使用三目运算去异常值: (100*abs(delta(MA888.close,1)/delay(MA888.close,1))>5)?0:100*delta(MA888.close,1)/delay(MA888.close,1)

  5. 在K线上叠加均线: PLOT(MA888,candlestick,0),PLOT(mean(MA888.close,10),0)

  6. 使用TA-Lib库的函数: PLOT(MA888.close,0),PLOT(MACD(MA888,10),1)

  7. 合约跨期套利,画出合约差价: MA809.close-MA805.close

  8. 合约跨期套利,求出平均差价: mean(MA809.close-MA805.close)

  9. 合约跨期套利,最大差价: max(MA809.close-MA805.close)

  10. 合约跨期套利,求出差价标准差: std(MA809.close-MA805.close)

  11. 合约跨期套利,差价大于20的次数: count(MA805.close-MA809.close>20)

  12. 跨品种套利,画出两品种相关系数变化: corr(j888.close,jm888.close,15)

  13. 跨品种套利,画出两品种线性回归系数的变化: regbeta(j888.close,jm888.close,15)

  14. 简单改一下可以套用一些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))
    
  15. 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因子与收益率相关系数越强,预测性越好。


More

空即是多 老板,能加入OKEX的USDT系列吗?

张威 请问都支持哪些交易所下面的哪些交易对。有没有不断更新的文档?从哪里查

张威 请问都支持哪些交易所下面的哪些交易对。有没有不断更新的文档?从哪里查

sliwin 数据好像不是事实更新的

feiyuemiwuh 谢谢!

feiyuemiwuh 出现这样的错误,不知道问题在哪里

feiyuemiwuh https://dn-filebox.qbox.me/fdc15763de975214d3ed5adaac2f9fa327f8684e.jpg

收麦君 伦家想要BITMEX.XBTUSD

小草 文档从这里更新

小草 这个文档里就有啊

小草 可以了,手动把数据改为后一天就行,比如今天是7号,最后一天选8号,就包含了实时的数据。

小草 和平台的行情网站保持一致,实时跟新的,应该是请求时间戳的问题,要改一下

收麦君 OKEX啊,全大写