量化基础--新手入门
- [新手入门] 什么是量化投资?
- [新手入门]什么是量化策略
- [新手入门]量化投资与传统投资的区别
- 量化选股之多因子选股模型
- 量化择时--择时的原则
- 量化择时--双均线(MA)、DMA、TRIX、MACD 择时
- 量化择时--PE 择时
- 量化评估--年化收益、最大回撤、阿尔法、贝塔、夏普比率解释
- 果仁量化免费视频教程汇总 最近更新日 2017-10-25
- 【果仁策略】新手跟随策略教程及注意事项
- 果仁网常见问题合集
量化进阶--自定义指标
量化高级--策略与应用
- 【量化策略研究】雪球蛋卷二八轮动
- 彼得 - 林奇 策略
- 海龟策略
- 约翰 - 邓普顿 策略
- 【量化策略研究】均值回归入门
- 高股息策略
- 【趋势分析】如何快速查找个股、A 股指数各指标的数据及相关性
- 实时选股功能介绍
- 智能调优--策略调优之神器
- 果仁【实盘管家+交易助手】升级,让你量化实盘如虎添翼
- 股票池应用示例
量化高手--牛人分享
- [量化必读 ]物理学博士带给你的一种 更有效的择时方法
- 什么是 α、β收益,量化投资的策略创建与分析
- 量化策略学习与反思
- 阿尔法对冲策略:拒坐 过山车 追求绝对收益
- 从科学和哲学角度漫谈 没有逻辑的策略 的该怎么相信
- 木白说量化一.因子月度收益解迷(上):选出下月最牛因子
- 欢喜带你挑策略、玩策略(一)
- 对于果仁策略中择时的一点心得
果仁选股策略--FAQ
自定义指标
以公共指标为原材料,用户可以自己定义更多的指标。比如:
5 日 20 日均价差值 = 5 日平均复权价 – 20 日平均复权价
1 日 5 日量比 = 当日成交量 / 5 日平均成交量
5 日前收盘价 = ref(收盘价, 5)
目前自定义指标支持的计算表达式有: 一、 算数四则运算 。比如 “(收盘价 + 开盘价)/2”或者 “1 日 5 日量比 = 当日成交量 / 5 日平均成交量”
二、日期前移函数 。这是一个非常重要的函数。
Ref(指标, 天数) , 取得指标几个交易日前的值。当天数为 0 时, 返回数据起始第一天的指标数据。 例子“Ref(收盘价,5)” 就是 5 个交易日前收盘价。“Ref(收盘价,0)”返回上市第一天收盘价, 2007 年以前上市的股票返回 2007-01-04 的收盘价。该函数支持变量天数的计算,例子:“Ref(收盘价,countbars(收盘价>0,9999)-5)”返回股票上市后第 5 天的收盘价。
BarRef(指标, 天数) , 取得指标几根日 K 线前的值. 和 Ref()功能类似, 很多情况返回同样的值。区别是 Ref()包括停牌日, BarRef()跳过停牌日,只数几根 K 线。 比如“barRef(收盘价,5)” 就是 5 根 K 线前的收盘价。该函数支持变量天数的计算,例子:“BarRef(收盘价,countbars(收盘价>0,9999)-5)”返回股票上市后第 5 根 K 线 的收盘价。
三、时序统计函数(纵向统计函数) 。 以下函数是对每一只股票的指标在连续的一段日期里进行聚合运算: MA(指标,天数) 计算指标在过去几个交易日(不包含停牌日)的平均值; 天数为 0 时,从数据起始日开始计算指标的移动平均。比如 “MA(收盘价,5)”就是过去 5 日平均收盘价; “MA(收盘价,0)”从上市第一天算起的平均收盘价,2007 年以前上市的股票从 2007-01-04 算起平均收盘价。该函数支持变量天数的计算,例子:“MA(收盘价,barslast(Crossover(5 日复权均价, 20 日复权均价)))”返回股票自上次均线金叉以来的平均收盘价。
EMA(指标,天数) 计算指标在过去几个交易日(不包含停牌日)的指数平均值; 比如 “EMA(收盘价,5)”就是过去 5 日指数平均收盘价。该函数的天数参数必须是常数,不可以是变量。
SMA (指标,天数,权重) 计算指标在过去几个交易日(不包含停牌日)的平滑移动平均值。EMA(指标,天数) 相当于 SMA(指标,天数,2); 比如 “SMA(收盘价,5, 1.5)”就是以 1.5 为权重的过去 5 日平滑移动平均收盘价。该函数的天数参数必须是常数,不可以是变量。
WMA(指标,权重指标, 天数) 计算指标在过去几个交易日(不包含停牌日)的加权平均值; 天数为 0 时,从数据起始日开始计算加权移动平均。 比如 “WMA(收盘价,成交量, 5)”就是过去 5 日成交量加权平均收盘价, 它比过去 5 日简单均线更能反映股票的成本线。“WMA(收盘价,成交量, 0)”从上市第一天算起的加权平均收盘价 (2007 年以前上市的股票从 2007-01-04 算起的加权平均收盘价)。该函数支持变量天数的计算,例子:“WMA(收盘价,成交量,barslast(Crossover(5 日复权均价, 20 日复权均价)))”返回股票自上次均线金叉以来的 成交量加权平均收盘价。
Med(指标,天数) 计算指标在过去几个交易日(不包含停牌日)的中值;比如“Med(市净率,30)”返回过去 30 个交易日的市净率中值。该函数的天数参数必须是常数,不可以是变量。
Sum(指标, 天数) 计算指标在过去几个交易日(不包含停牌日)的聚合值;天数为 0 时,从数据起始日开始计算聚合值。比如 “Sum(当日成交量,10)”就是过去 10 日总成交量。该函数支持变量天数的计算,例子:“Sum(当日成交量,barslast(Crossover(5 日复权均价, 20 日复权均价)))”返回股票自上次均线金叉以来的成交量之和 。
Max(指标,天数) 计算指标在过去几个交易日(不包含停牌日)的最大值; 天数为 0 时,从数据起始日开始计算。最大值。“Max(收盘价, 10)”就是过去 10 日最高收盘价。该函数支持变量天数的计算,例子:“Max(收盘价,barslast(Crossover(5 日复权均价, 20 日复权均价)))”返回股票自上次均线金叉以来的 最高收盘价。
Min(指标, 天数 ) 计算指标过去几个交易日(不包含停牌日)的最小值; 天数为 0 时,从数据起始日开始计算最小值。“Min(收盘价, 10)”就是过去 10 日最低收盘价;“Min(收盘价, 0)”上市以来最低收盘价(2007 年以前上市的股票从 2007-01-04 算起的最低收盘价)。该函数支持变量天数的计算,例子:“Min(收盘价,barslast(Crossover(5 日复权均价, 20 日复权均价)))”返回股票自上次均线金叉以来 的最低收盘价。
Stdev(指标,天数)* 计算过去几个交易日(不包含停牌日)的标准方差; 天数为 0 时,整个数据历史上的标准方差。 比如股价在过去 20 日涨幅波动率 = ” Stdev(1 日涨幅, 20)”; 全部历史的涨幅波动率 = ” Stdev(1 日涨幅, 0)”。该函数支持变量天数的计算,例子:“Stdev(1 日涨幅,barslast(Crossover(5 日复权均价, 20 日复权均价)))”返回股票自上次均线金叉以来 的 1 日涨幅波动率。
Var(指标, 天数)* 计算指标在过去 N 个交易日(不包含停牌日)的方差; 天数为 0 时,整个数据历史上的方差。例子:var(收盘价,250) 返回收盘价在过去 250 天的方差;var(收盘价,0) 返回收盘价在过去全部历史的方差。该函数支持变量天数的计算,例子:“Var(1 日涨幅,barslast(Crossover(5 日复权均价, 20 日复权均价)))”返回股票自上次均线金叉以来的 1 日涨幅方差。
Corr(指标 1,指标 2,天数) , 计算在过去几个交易日里两个指标的相关性; 天数为 0 时,返回两个指标整个数据历史上的相关度。例子: "corr(1 日涨幅, #bench.change.000001, 20)"返回个股 1 日涨幅和上证指数 1 日涨幅在过去 20 日的相关度; "corr(1 日涨幅, #bench.change.000001, 0)"返回个股 1 日涨幅和上证指数 1 日涨幅在历史上的相关度 。该函数支持变量天数的计算,例子:“Corr(1 日涨幅,#bench.change.000001,countbars(收盘价>0,9999)-5)”返回股票上市后第 5 天到目前为止股票与上证指数 1 日涨幅的相关度。Corr() 的计算不会跳过停牌日。 Corr() 的计算不会跳过停牌日。
Covar(指标 1, 指标 2, 天数) , 计算两个指标在过去几个交易日里的协方差; 天数为 0 时,返回两个指标整个数据历史上的协方差。例子:“covar(1 日涨幅,收盘价, 250)” 返回 1 日涨幅和收盘价在过去 250 天的协方差;covar(1 日涨幅,收盘价, 0)” 返回 1 日涨幅和收盘价在过去历史上的协方差。该函数支持变量天数的计算,例子:“Covar(1 日涨幅,收盘价,countbars(收盘价>0,9999)-5)”返回股票上市后第 5 天到目前为止股票 1 日涨幅与收盘价的协方差。 Covar() 的计算不会跳过停牌日。
Percentile(指标,百分点, 天数) , 计算在过去 N 个交易日排名百分点对应的值,指标数值从大到小排序。
- percentile(收盘价, 0.95, 21)过去 21 天里的第二高收盘价 (95%分位点的价格) 。
- percentile(收盘价, 0.12, 10)过去 10 天里的第二低的收盘价(12%分位点的价格)。
PercentRank(指标, 天数) , 计算当天指标数值在过去 N 个交易日中的排名百分位,指标数值从大到小排序。 如果返回 0,表示当天指标数值最小, 返回 1,表示当天指标数值最大, 返回 0.5 表示当天数值刚好在时间序列中间。 计算规则类似于 Excel : PercentRank(2, [1,2,5,4]) = 0.33 。 例子: “19-PercentRank(收盘价,20)*19” ,计算过去 20 天收盘价大于今天收盘价的天数。
以上的窗口函数,都会跳过停牌日期, 比如 ”Max(收盘价, 10)" 里面的 10 天不包含个股停牌的日期, 如果想算入停牌日期, 可以使用 MA2,EMA2,Med2, Sum2, Max2, Min2, Stdev2, Var2。
四、时序回归函数(纵向回归函数)。 最小二乘法线性回归函数。以下函数是对每一只股票的指标在连续的一段日期里进行聚合运算:
Forcast(指标,天数), 计算指标在过去 N 个交易日(不包含停牌日)的线性回归预测值; 天数为 0 时,计算指标在整个数据历史上的线性回归预测值。
例子: Forcast(收盘价,20) 用当天和过去 19 天一共 20 天的收盘价作线性回归,返回收盘价的预测值;Forcast(收盘价,0) 用过去全部历史收盘价作线性回归,返回收盘价的预测值。 该函数的天数参数必须是常数,不可以是变量。
Slope(指标,天数) , 计算指标在过去 N 个交易日(不包含停牌日) 的线性回归斜率; 天数为 0 时,计算指标在整个数据历史上的线性回归斜率。例子: Slope(收盘价, 20) 用当天和过去 19 天一共 20 天的收盘价作线性回归, 返回过去 20 日的收盘价线性斜率; Slope(收盘价, 0) 返回过去全部历史的收盘价线性回归斜率 。该函数的天数参数必须是常数,不可以是变量。
Neutralize(指标 Y,指标 X,天数) , 返回指标 Y 剔除指标 X 因素后的值。根据过去 N 个交易日(不包含停牌日)指标 Y 和指标 X 的线性回归模型, 将指标 X 的成分从指标 Y 中剔除, 中性化指标 Y。天数为 0 时,根据过去整个数据历史的线性回归模型,清洗指标 Y。
例子: Neutralize(当日成交额,总市值,20) 根据过去 20 日的线性回归模型,清洗当日成交额指标,返回剔出总市值成分后的当日成交额; Neutralize(当日成交额,总市值,0) 根据过去全部历史的线性回归模型,清洗当日成交额指标,返回剔出总市值成分后的当日成交额。该函数的天数参数必须是常数,不可以是变量。
SlopeXY(指标 Y,指标 X,天数) , 返回指标 Y 和指标 X 过去 N 个交易日(不包含停牌日)的线性回归斜率; 天数为 0 时,返回过去整个数据历史上的线性回归斜率。例子: Slopexy(当日成交额,总市值,20) 返回过去 20 日成交额与总市值的线性回归斜率 ; Slopexy(当日成交额,总市值,0) 返回过去全部历史成交额与总市值的线性回归斜率 ”。该函数的天数参数必须是常数,不可以是变量。
InterceptXY(指标 Y,指标 X,天数) , 返回指标 Y 和指标 X 过去 N 个交易日(不包含停牌日)的线性回归的 Y 轴截距; 天数为 0 时,返回过去整个数据历史上的线性回归 Y 轴截距。例子: InterceptXY(当日成交额,总市值,20) 过去 20 日成交额与总市值的线性回归 Y 轴截距; InterceptXY(当日成交额,总市值,0) 返回过去全部历史成交额与总市值的线性回归 Y 轴截距。 该函数的天数参数必须是常数,不可以是变量。
SSresid (指标 Y,指标 X,天数), 返回指标 Y 和指标 X 过去 N 个交易日(不包含停牌日)的线性回归的残差平方和。该函数的天数参数必须是常数,不可以是变量。
五、股票统计函数(横向统计函数) 在当天内对所有股票的某个指标进行统计。
HMax(指标,范围) 范围 = 0 时,返回全部 A 股指标的当天最大值, 范围等于 1 时, 返回股票同行业内的股票指标的当天最大值。 比如 "HMax(收盘价, 1) "返回股票同行业内的股票当天最高收盘价。
HMin(指标,范围) 范围 = 0 时,返回全部 A 股指标的当天最小值, 范围等于 1 时, 返回同行业内的股票指标的当天最小值。 比如 "HMax(收盘价, 1) "返回股票同行业内的股票当天最低收盘价。
HAvg(指标,范围 ) 范围 = 0 时,返回全部 A 股指标的当天平均值, 范围等于 1 时, 返回同行业内的股票指标的当天平均值。 比如 "HMax(市净率, 1) "返回股票同行业内的股票当天平均市净率。
HWAvg(指标,权重指标,范围 ) 范围 = 0 时,返回全部 A 股指标的当天加权平均值, 范围等于 1 时, 返回同行业内的股票指标的当天加权平均值。 比如 "HWAvg(1 日涨幅, 总市值, 1)" 返回股票所在行业的当天按市值加权平均涨幅。
HMed(指标,范围) 范围 = 0 时,返回全部 A 股指标的当日中位数, 范围等于 1 时, 返回同行业内的股票指标的当日中位数。 比如 "HMed(净资产增长, 1)" 返回股票所在行业里的净资产增长率的中值。
HSum(指标,范围) 范围 = 0 时,返回全部 A 股指标的当日和值, 范围等于 1 时, 返回同行业内的股票指标的当日和值。比如 "HSum(流通市值, 1)" 返回股票所在行业的总流通市值。
HStdev(指标,范围) 范围 = 0 时,返回全部 A 股指标的当日标准方差, 范围等于 1, 返回同行业内的股票指标的当日标准方差。 "HStdev(20 日涨幅,1)" 返回股票所在行业里的股票 20 日涨幅的标准方差, 代表了行业内股票近期涨幅的离散度。
HCorr(指标 1,指标 2,范围) 范围 = 0 时,返回全部 A 股的两个指标的当日相关度。范围等于 1, 返回同行业内的股票两个指标的当日相关度。 比如 HCorr(20 日涨幅, 市净率, 0) 就是全部 A 股的 20 涨幅和市净率的相关度。
CountStock(条件, 范围) 返回当天符合条件的股票数。范围 = 0, 在全部 A 股中计数, 范围等于 1, 在同行业内部计数。
"CountStock(1 日涨幅 > 0.05, 0)" 全股票中当日涨幅大于 5% 的股票个数
"CountStock(1 日涨幅 > 0.05, 1)" 同行业中 当日涨幅大于 5% 的股票个数
"CountStock(后复权收盘价>20 日复权均价, 0) /CountStock(收盘价>0, 0)" 站在 20 日均线之上的股票占全部股票的比例。
HRank(指标,顺序标记,范围) 将股票按当天的指标值排名, 并返回排名名次。顺序标记= 0 时 , 是由小到大排名,顺序标记= 1 时, 是由大到小排名。 范围 = 0 时, 对全部 A 股排名, 范围 = 1 时,对同行业内的股票排名。例子: HRank(收盘价, 0, 0), 将所有 A 股按照收盘价由小到大排名,并返回每个股票的名次。 收盘价最低的股票 HRank 是 1, 第二低的 HRank 是 2, 依次类推。 HRank(收盘价, 0, 1),将所有股票在各自的行业内按收盘价由小到大排名,每个行业有自己的第一名, HRank 是 1 的股票有 20 多个。
HRankScore(指标,顺序标记, 范围) 将股票按当天的指标值排名, 并返回排名分。排名分在 0 到 100 之间,排在最前面的股票得分 100。排名分的具体计算规则在帮助文档中。顺序标记= 0 时 , 是由小到大排名,顺序标记= 1 时, 是由大到小排名。 范围 = 0 时, 对全部 A 股排名, 范围 = 1 时, 对同行业内股票排名。例子: HRankScore(收盘价, 0, 0), 将所有 A 股按照收盘价由小到大排名,并返回每个股票的排名分。 收盘价最低的股票 HRankScore 是 100, 第二低的 HRank 是 99.9, 依次类推。
HPercentile(指标,分位数, 0) 返回指标的分位值。范围 = 0 时,返回全部 A 股中的分位值。范围等于 1, 返回同行业内的分位值。 例子:“hPercentile(收盘价,0.9, 0)” 是 A 股收盘价的 90%分位值,也就是收盘价最高 10%的值。
HWinsorize(指标,上限分位,下限分位,范围), 使用简单分位数去极值。范围 = 0 时,返回全部 A 股的指标的去极值化的值。范围等于 1, 返回同行业内的指标的去极值化的值。例子:“hWinsorize(收盘价, 0.01, 0.05, 0)“ 在全部 A 股中,将收盘价最高的 1%的股票的收盘价设为 99%分位的收盘价,将收盘价最低的 5%的股票的收盘价设为 5%分位的收盘价。
HStandarize(指标,范围), 范围 = 0 时,返回全部 A 股的指标的标准化值。范围等于 1, 返回同行业内的指标的标准化值。例子:“hStandarize(市盈率, 0)“ 就是全部 A 股市盈率的标准化值。 对于熟悉统计学的用户, 标准化值就是 Z 分数。
HNeutralize(指标 Y, 指标 X, 范围) , 范围等于 0 时,返回全部 A 股的指标 Y 剔除指标 X 因素后的值。范围等于 1, 返回同行业内的股票指标 Y 剔除指标 X 因素后的值。根据指标 Y 和指标 X 的线性回归模型, 将指标 X 的成分从指标 Y 中剔除,指标 Y 相对指标 X 中性化。 比如 “hNeutralize(当日成交额,总市值,1 )” , 对同一行业内的股票作线性回归, 返回市值中性的当日成交额。
hNeutralize2(指标 Y,指标 X1,指标 X2,指标 X3,指标 X4,范围)
多因子回归函数求残差函数, 最多支持 4 个 X 指标。 用法和 hNeutralize()类似, 只是可以支持最多 4 个 X 指标。 比如 “hNeutralize2(当日成交额,总市值, 20 日涨幅,0 ) ” 对全部 A 股的股票作线性回归, 返回排除总市值和 20 日涨幅影响的当日成交额残差值。
注意 :
1 当股票指标的值为空时, 这只股票不参与统计。 比如"HAvg(市盈率, 0)" 计算全市场股票平均市盈率, 市盈率为空值的股票不参与统计。 2 股票投资域或筛选条件的设定不影响横向统计函数的结果。 3 以上函数也适用于基金策略。 在基金策略中, 范围 = 0,代表全部的基金和指数, 范围= 1,代表在同一投资种类计数。
六、股票池统计函数 在当天内对一个股票池或基金池内的所有股票的某个指标进行统计。
SMax(指标,股票池) 股票池内的所有股票的某一指标在当天的最大值。 ”SMax( 收盘价, 低价股)“ 返回股票池“低价股”中的股票在当天的最高收盘价。
SMin(指标,股票池) 股票池内的所有股票的某一指标在当天的最小值。 ”SMin( 收盘价,低价股)“ 返回股票池“低价股”中的股票在当天的最低收盘价。
SAvg(指标,股票池) 股票池内的所有股票的某一指标在当天的平均值。 ”SAvg( 市净率,低价股)“ 返回股票池“低价股”中的中股票在当天的平均市净率。
SWAvg(指标,加权指标,股票池) 股票池内的所有股票的某一指标在当天的加权平均值。 ”SWAvg( 市净率, 总市值,低价股)“ 返回股票池“低价股”中的股票在当天的按总市值加权的平均市净率。
SMed(指标,股票池) 股票池内的所有股票的某一指标在当天的中位数。 “SMed(净资产增长,低价股 )”返回股票池“低价股”中的股票的净资产增长率的中值。
SSum(指标,股票池) 股票池内的所有股票的某一指标在当天的和。 ”SSum( 流通市值,低价股)“ 返回股票池“低价股”中的股票在当天的流通市值之和。
SStdev(指标, 股票池) 股票池内的所有股票的某一指标在当天的标准方差。 ”SStdev( 20 日涨幅,低价股)“ 返回股票池“低价股”中的股票 20 日涨幅的标准方差。
SCorr(指标 1, 指标 2,股票池) 股票池内的所有股票的某一指标在当天的相关度。 ”SCorr(20 日涨幅, 市净率,低价股)“ 返回股票池“低价股”中的股票 20 日涨幅和市净率的相关度。
SCount( 条件,股票池) 返回在股票池里符合条件的股票数。 "SCount(1 日涨幅 > 0.05,低价股 )" 股票池“低价股”中的当日涨幅大于 5% 的股票数。
SRank (指标,顺序标记,股票池) 将股票池中的股票按当天的指标值排名, 并返回排名名次。顺序标记= 0 时 , 是由小到大排名,顺序标记= 1 时, 是由大到小排名。 例子:” SRank(收盘价, 0, 低价股)“, 将股票池“低价股”中的股票按照收盘价由小到大排名,并返回每个股票的名次。 收盘价最低的股票 SRank 是 1, 第二低的 SRank 是 2, 依次类推。
SRankScore(指标,顺序标记, 股票池 )将股票池中的股票按当天的指标值排名, 并返回排名分。排名分在 0 到 100 之间,排在最前面的股票得分 100。排名分的具体计算规则在帮助文档中。顺序标记= 0 时 , 是由小到大排名,顺序标记= 1 时, 是由大到小排名。 例子: SRankScore(收盘价, 0, 低价股 ), 将股票池“低价股”中的股票按照收盘价由小到大排名,并返回每个股票的排名分。 假设股票池中有 100 只股票,收盘价最低的股票 SRankScore 是 100, 第二低的 SRankScore 是 99, 依次类推。
SPercentile(指标,分位数, 股票池, 范围 ) 范围等于 0(默认值)时,返回股票池内指标的当天分位值, 范围等于 1 时, 返回股票池同行业内的股票指标的当天分位值。例子:“SPercentile(收盘价,0.9, 低价股 , 0)” 返回股票池“低价股”中的股票在当天的收盘价的 90%分位值, 也就是收盘价最高 10%的值。
SWinsorize(指标,上限分位,下限分位, 股票池, 范围 ) 在股票池内使用简单分位数去极值。范围等于 0(默认值)时,返回股票池内指标的当天去极值化的值, 范围等于 1 时, 返回股票池同行业内的股票指标的当天去极值化的值。例子:“SWinsorize(收盘价, 0.01, 0.05, 低价股 , 0)“在股票池”低价股”中, 将收盘价最高的 1%的股票的收盘价设为 99%分位的收盘价,将收盘价最低的 5%的股票的收盘价设为 5%分位的收盘价。
SStandarize(指标,股票池,范围 ) 范围等于 0(默认值)时,返回股票池内指标的标准化值。范围等于 1 时, 返回股票池同行业内的指标的标准化值。例子:“SStandarize(市盈率,低价股 , 0)“ 返回股票池“低价股”中的市盈率的标准化值。 对于熟悉统计学的用户, 标准化值就是 Z 分数。
SNeutralize(指标 Y, 指标 X, 股票池,范围 ) 范围等于 0(默认值)时,返回股票池内的指标 Y 剔除指标 X 因素后的值。范围等于 1, 返回股票池同行业内的指标 Y 剔除指标 X 因素后的值。根据指标 Y 和指标 X 的线性回归模型, 将指标 X 的成分从指标 Y 中剔除,指标 Y 相对指标 X 中性化。 比如 “SNeutralize(当日成交额,总市值,低价股 ,1 )” , 对股票池“低价股”同一行业内的股票作线性回归, 返回市值中性的当日成交额。
SNeutralize2(指标 Y,指标 X1,指标 X2,指标 X3,指标 X4,股票池,范围 ) 多因子回归函数求残差函数, 最多支持 4 个 X 指标。 用法和 SNeutralize()类似, 只是可以支持最多 4 个 X 指标。 比如 “SNeutralize(当日成交额,总市值, 20 日涨幅,低价股 ,0 ) ” 对股票池“低价股”内的股票作线性回归, 返回排除总市值和 20 日涨幅影响的当日成交额残差值。
Svalue(起始日期,股票池) 返回股票池从起始日期开始计算的净值, 起始日期和起始日期之前的净值设置为 1。净值计算假设股票池中的股票等权重。
例子: Svalue(2010/01/04,低价股), 返回股票池“低价股”以 2010/01/04 为起始日的净值。
注意:
1.股票池的参数必须是用户自己定义的股票池,在基金策略中, 股票池参数是用户自己定义的基金池。 2.用股票池函数的指标不能在动态股票池的定义中使用。
3 以上函数也适用于基金策略。 在基金策略中, 股票池参数就是基金池。
七、 数学函数。
abs(指标) 返回指标的绝对值
log(指标,常数 = 10) 返回指标的对数值。“ log(收盘价)”收盘价取 10 的对数值, “log(收盘价, 2)”收盘价取 2 的对数值。 如指标是负值, 返回空。
sqrt(指标) 返回指标的平方根。 如指标是负值, 返回空。
Round(指标) 将指标四舍五入返回整数。"Round(1.6)" =2, "Round(收盘价)" 将收盘价的值四舍五入取整数。
Mod(指标 1, 指标 2 或者常数) 用指标 1 整除指标 2,返回整除的余数。 "Mod(12, 10)" = 2, "Mod(收盘价, 10)"将收盘价整除 10 再取余数。
Floor(指标) 沿指标绝对值减小的方向取整数。 比如"Floor(1.6)" = 1, "Floor(收盘价)"将收盘价往下取整。
Power(指标,乘幂指数) 计算指标的乘幂。比如"power(收盘价, 2)" 得到收盘价的平方, “power(收盘价, 0.5)”得到收盘价的平方根。
八、 逻辑函数
And(条件 1, 条件 2) 。 两个输入条件都是真(非 0),返回 1, 否则返回 0。
输入条件是关系表达式或者是数值指标, 比如 ‘指标 > 123 ‘
And(1, 1)返回 1, And(1,0) 返回 0 , And(1, 空)返回 0
例子:
有成交量低价格 = “ And(当日成交量> 0, 收盘价 < 5)” , 当日成交量大于 0 而且收盘价小于 5 时,返回 1, 否则返回 0。
Or(条件 1, 条件 2 ) 。 两个输入有一个是真值(非 0 数值),返回 1, 否则返回 0。输入条件是关系表达式或者是数值指标。
Or(0, 1)返回 1,, Or(0,0) 返回 0 , Or(1, 空)返回 1
例子:
有成交量或者低价格 = “ Or(当日成交量> 0, 收盘价 < 5)”当日成交量大于 0 或者收盘价小于 5 时,返回 1, 否则返回 0。
Not(条件) 。输入是一个是真值(非 0 数值),返回 0, 否则返回 1。输入条件是关系表达式或者是数值指标。
Not(1) = 0 , Not (0) = 1, Not (空) = 空
例子
没有成交量 = “Not(当日成交量 > 0)” 当日成交量大于 0 时返回 0,否则返回 1。
九、 合并函数
If(条件, 指标 1, 指标 2) 。 当条件为真(1)的时候, 返回指标 1, 否则返回指标 2。例子:“if(5 日复权均价 > 20 日复权均价, 1, 0)”如果 5 日均价高于 20 日均价 返回 1 ,否则返回 0。
Greater(指标 1, 指标 2) 返回指标 1 和指标 2 之间较大的那个值, 等价于“if(指标 1 >指标 2, 指标 1 ,指标 2)” 。 比如"Greater(2, 1)" = 2, "Greater(收盘价, 开盘价)“返回收盘价和开盘价较大的那个值。
Less(指标 1, 指标 2) 返回指标 1 和指标 2 之间较小的那个值, 等价于“if(指标 1 <指标 2, 指标 1 ,指标 2)” 。 比如”Less(2, 1)“ = 1, ”Less(收盘价, 开盘价)“返回收盘价和开盘价较小的那个值。
十、 金叉死叉函数。
crossover (短线指标, 长线指标) 金叉函数, 如果短线指标上穿长线指标, 返回 1, 否则返回 0. 比如" crossover (5 日复权均价, 60 日复权均价) " 当 5 日线上穿 60 线时, 返回 1 ; 否则返回 0。
crossunder(短线指标, 长线指标) 死叉函数, 如果短线指标下穿长线指标, 返回 1, 否则返回 0. 比如" crossunder (5 日复权均价, 60 日复权均价) " 当 5 日线下穿 60 线时, 返回 1 ; 否则返回 0。
十一、 日期统计函数
CountDays(条件,天数 N) , 统计在过去 N 个交易日里(包含股票停牌日), 条件值为真 的天数。 例子:
过去 10 天里涨停的天数 = “CountDays(当日涨停标记 = 1, 10)”
过于 30 天里停牌的天数 = “CountDays(成交量 = 0,30)”
过于 30 天里出现金叉的天数 = “CountDays(Crossover(5 日复权均价, 20 日复权均价), 30)
该函数支持变量天数的计算,例子:
上次发生金叉后股价上涨天数 = “CountDays(1 日涨幅>0, barslast(Crossover(5 日复权均价, 20 日复权均价
CountBars(条件,天数 N) ,统计在过去 N 个交易日里(不包含股票停牌日), 条件值为真 的天数。例子:
过去 10 天里涨停的天数 = “CountBars(当日涨停标记 = 1, 10)”。
该函数支持变量天数的计算,例子:
上次发生金叉后股价上涨天数 = “CountBars(1 日涨幅>0, barslast(Crossover(5 日复权均价, 20 日复权均价)))”
CountBars 与 CountDays 区别是 CountDays()包括停牌日, CountBars()跳过停牌日,只数几根 K 线。
DaysLast(条件) , 统计条件为真最后一天到现在的交易日数量(包含股票停牌日)。 例子 :
连续上涨天数 = “DaysLast (1 日涨幅<= 0) ” 就是现在到上次不上涨的那一天的天数。
连续交易的天数= “DaysLast (当日成交量 = 0)” 也就是上一次停牌到现在的天数。
连续涨停的天数 = “DaysLast (当日涨停标记 = 0)” 也就是距离上次没有涨停的天数。
BarsLast(条件) ,统计条件为真最后一天到现在的交易日数量(不包含股票停牌日)。 例子:
连续涨停的天数 = “BarsLast (当日涨停标记 = 0)” , 也就是距离上次没有涨停的天数。
BarsLast()与 DaysLast 区别是 DaysLast()包括停牌日, BarsLast()跳过停牌日,只数几根 K 线。
十二、 条件取值函数
LastValue(指标,条件) 。 返回最后一次满足条件那一天的指标值。 例子: LastValue (收盘价, 1 日涨幅 > 0.05) 返回最后一次涨幅大于 5%的收盘价。
十三、 指标数据函数
TickerValue(指标,股票代码) , 返回股票代码对应的指标值。 例子: "收盘价 - tickerValue(收盘价, ‘000002’)" , 返回本股票收盘价和万科 A 收盘价的差价。 如果代码不合法, 可以返回空值。
IsNULL(指标) , 如果指标为空值, 返回 1, 否则返回 0 。 例子 "isNULL(市盈率)" , 如果股票的市盈率是空值, 返回 1, 否则返回 0。
IfNULL(指标 1, 指标2) , 如果指标 1 为空值, 返回指标 2, 否则返回指标 1。 指标 2 可以是常数或表达式。 例子:"isNULL(市盈率,0)" , 如果股票的市盈率是空值, 返回 0, 否则返回市盈率。
十四、 反身函数
ticker() , 返回股票本身的股票代码。 ticker() 需要和 if() 结合使用, 可以对某只或某几只股票作特殊处理。 例子:
“if(ticker() = ‘000002', 1, 0)” 如果当前股票是万科 A 返回 1,其它股票返回 0。 调整乖离率 = “if(ticker() = ‘000002', 后复权收盘价/MA(后复权收盘价,30)- 1, 后复权收盘价/MA(后复权收盘价,40)- 1)”, 对万科使用 30 日乖离率, 对其它股票使用 40 日乖离率。 在基金策略中, ticker()返回基金自身的基金代码, 用法和在股票策略中一样。
industry() , 返回股票所在行业的代码,仅在股票策略中有效。行业代码在下表中列出。 industry() 需要和 if 表达式结合使用, 可以对某个行业的股票或某几个行业的股票做出特殊处理。 例子:
股票估值低= "if(industry() = 25, 市盈率 < 10, 市盈率 < 30)", 如果当前股票属于银行业,市盈率小于 10 就返回真(1), 如果当前股票不属于银行业,市盈率小于 30 就返回真(1)。 行业代码列表: 行业代码 行业
0 交通运输 1 休闲服务 2 传媒 3 公用事业 4 农林牧渔 5 化工 6 医药生物 7 商业贸易 8 国防军工 9 家用电器 10 建筑材料 11 建筑装饰 12 房地产 13 有色金属 14 机械设备 15 汽车 16 电子 17 电气设备 18 纺织服装 19 综合 20 计算机 21 轻工制造 22 通信 23 采掘 24 钢铁 25 银行 26 非银金融 27 食品饮料
十五、交易日函数, 可以帮助用户实现根据交易日顺序的择时交易模型。
DayW(顺序标记), 返回今天是周内第几交易日, 如果顺序标记 = 0, 返回周内正数第几个交易日, 如果顺序标记 = 1, 返回周内倒数第几个交易日 。比如今天是 2017/04/06, DayW(0)返回 2, 表示今天是周内第 2 个交易日, DayW(1)返回 2, 表示今天是周内倒数第 2 个交易日。
DayM(顺序标记), 返回今天是月内第几交易日, 如果顺序标记 = 0, 返回月内正数第几个交易日, 如果顺序标记 = 1, 返回月内倒数第几个交易日 。比如今天是 2017/04/06, DayM(0)返回 2,表示今天是月内第 2 个交易日, DayM(1)返回 17, 表示今天是月内倒数第 17 个交易日。
DayY(顺序标记), 返回今天是年内第几交易日, 如果顺序标记 = 0, 返回年内正数第几个交易日, 如果顺序标记 = 1, 返回年内倒数第几个交易日 。比如今天是 2017/04/06, DayY(0)返回 61,表示今天是年内第 61 个交易日, DayY(1)返回 184, 表示今天是年内倒数第 184 个交易日。
MonthY(), 返回今天属于年内第几个月, 年内月分 ID 1-12. 1 月返回 1 , 12 月返回 12.
BarofDay() , 返回 日内 15 分钟线 BarID 0-16。只有在 Level 函数(见下)里有效。 比如 9:30 返回 0。9:45 返回 1。15:00 返回 16。
十六、 分钟线函数 (VIP 功能) 。 用高频分钟数据统计指导低频日交易。 分钟线函数可以在分钟线上做计算, 然后把结果拿到日线这个级别来选股。
目前只支持 15 分钟线。 Level(15min, 量价指标的计算公式) , 将来会陆续支持 1 分钟, 5 分钟线。
支持的指标为量价指标: 开盘价, 收盘价, 最高价, 最低价, 当日成交量,当日成交额。
如果策略为非实时策略, 计算以当日 15:00 为基准,
例子:
Level(15min, 当日成交量)返回当天 14:45 到 15:00 的成交量。
Level(15min, ref(当日成交量,1) )返回当天 14:30 到 14:45 的成交量。
Level(15min, ref(当日成交量,16) )返回当天 9:25 到 9:30 的成交量。
Level(15min, ma(当日成交量,4) )返回从 14:00 到 15:50 四个 15 分钟线的平均成交量。
Level(15min,sum(if(barofday()>8,当日成交量,0),85)) 返回最近 5 天下午成交量总和。
如果策略为实时策略, 计算以当日交易时刻为基准。比如策略是 10:00 交易的实时策略, Level(15min, 当日成交量)返回当天 9:45 到 10:00 的成交量, Level(15min, ref(当日成交量,1) )返回当天 9:30 到 9:45 的成交量。
Level 里面能支持函数有 : 时序函数包括 Ref(), MA(), EMA(), SMA() , WMA(), Med(), Sum(), Max(), Min(), Stdev(), Var()。 横向统计函数包括 HMax(), HMin(), HAvg( ) , HWAvg( ),HMed() , HSum() , HStdev() 。
十七、 大盘指标变量
#Bench.Close.指数代码 返回某个指数的收盘价。 比如”#Bench.Close.000001“ 是上证指数的收盘价, 而”#Bench.Close.000300“ 是沪深 300 的收盘价。
#bench.open.指数代码 返回某个指数的当日开盘价。比如”#Bench.open.000001“ 是上证指数的当日开盘价, 而”#Bench. open.000300“ 是收盘指数的当日开盘价。
#bench.high.指数代码 返回某个指数的当日最高价。比如”#Bench.high.000001“ 是上证指数的当日最高价, 而”#Bench. high.000300“ 是收盘指数的当日最高价。
#bench.low.指数代码 返回某个指数的当日最低价。比如”#Bench.low.000001“ 是上证指数的当日最低价, 而”#Bench. low.000300“ 是收盘指数的当日最低价。
#Bench.Change.指数代码 返回某个指数的日涨幅。 比如”#Bench.Change.000001“ 是上证指数的日涨幅, 而”#Bench.Change.399006“ 是创业板的日涨幅。
#Bench.Vol.指数代码 返回某个指数的成交量。比如”#Bench.Vol.000001“ 是上证指数的成交量, 而”#Bench.Vol.399006“ 是创业板的成交量。
#Bench.Amt.指数代码 返回某个指数的成交额。比如”#Bench.Amt.000001“ 是上证指数的成交额, 而”#Bench.Amt.399006“ 是创业板的成交额。
#bench.PE.指数代码 , 返回某个指数的加权市盈率。 加权市盈率 = 指数成分股的总市值 / 指数成分股的总利润 TTM。比如 "#Bench.PE.000001"是上证指数成分股的加权平均市盈率, 而”#Bench.PE.000300“ 是沪深 300 成分股的加权平均市盈率。
#bench.PE2.指数代码 ,返回某个指数的调和市盈率。调和市盈率 = 指数成分股 PE 倒数的均值的倒数,即 1 / Avg(成份股 E/P). 这样算出来的 PE 近似于指数 PE 中值,且更加合理。 比如 "#Bench.PE2.000001"是上证指数成分股的调和平均市盈率, 而”#Bench.PE2.000300“ 是沪深 300 成分股的调和平均市盈率。
#bench.PB.指数代码 , 返回某个指数的加权市净率。 加权市净率= 指数成分股的总市值 / 指数成分股的总净值. 比如 "#Bench.PB.000001"是上证指数成分股的加权平均市净率, 而”#Bench.PB.000300“ 是沪深 300 成分股的加权平均市净率。
#bench.PB2.指数代码 ,返回某个指数的调和市净率。指数成分股 PB 倒数的均值的倒数,即 1 / Avg(成份股 B/P)。这样算出来的 PB 是比较合理的指数 PB 中值。 比如 "#Bench.PB2.000001"是上证指数成分股的调和平均市净率, 而”#Bench.PB2.000300“ 是沪深 300 成分股的调和平均市净率。
#bench.zt.指数代码 ,指数成分股的涨停比例,比如“#bench.zt.000001”是上证指数成分股涨停比例。
#bench.dt.指数代码 ,指数成分股的跌停比例,比如“#bench.dt.000001“是上证指数成分股跌停比例。
#bench.up.指数代码 ,指数成分股的上涨比例,比如“#bench.up.000001”是上证指数成分股上涨比例。
#bench.down.指数代码 ,指数成分股的下跌比例,比如“#bench.down.000001”是上证指数成分股下跌比例。
大盘指标变量可以用于个股指标和大盘之间的比较。 几个自定义指标使用大盘指标的例子:
个股相对沪深 300 涨幅 = ”1 日涨幅 - #Bench.Change.000300“
上证指数 20 天移动平均 = “MA2(#Bench.Close.000001,20)” 注意: 对大盘指数做移动平均,需要使用 MA2。
上证指数 20 天 Bias = “#Bench.Close.000001 / MA2(#Bench.Close.000001,20) - 1”
相对沪深 300 市盈率差值 = “市盈率 - #Bench.PE.000300"
所有的使用大盘变量的窗口函数都要加个”2“作为后缀, MA2, Max2, Min2, EMA2, Sum2, Stdev2.
十八、季报指标函数 。 季报函数只能用于季报指标计算。
RefQ(季报指标,前移季度数 N,补全选项 = 0) :返回从最新季报往前 N 个季度的财报指标。 当季度指标为空值时, 默认最多往前找 4 个季度补全空值。 补全选项 = 1 时, 保留空值不补全; 补全选项 =2 时, 空值转换成 0。 例子:RefQ(营业收入, 1):返回最新季报往前一个季度的营业收入。比如现在某只股票的最新季报是 2016Q2, RefQ(营业收入, 1)是这支股票在 2016Q1 的营业收入, 当 2016Q1 营业收入为空值时,往前季度搜索非空值返回, 最多搜索到 2015Q1。而 RefQ(营业收入, 1,2)是这支股票在 2016Q1 的营业收入, 当 2016Q1 营业收入为空值时,返回 0。
TTM(季报指标, 前移季度数) : 返回股票最新 4 个季度指标加在一起的值。例子:TTM(营业收入, 0)返回最新 4 个季报营业收入之和, TTM(营业收入, 4)返回 1 年前的 4 个季报营业收入之和。
SumQ(季报指标,季度数 N, 前移季度数) 返回股票最新 N 个季度指标之和。例子 SumQ(营业收入, 4, 0) = TTM(营业收入, 0)。
AvgQ(季报指标, 季度数 N, 前移季度数) 返回股票最新 N 个季度指标之平均值 。例子 AvgQ(资产合计, 4, 0)返回最新 4 个季度的总资产平均值;AvgQ(资产合计, 4, 4)返回 4 个季度前的 4 个季度的总资产平均值。
Annual(季报指标, 前移年数 = 0) 返回季报指标的年报数据, 前移年数 = 0 时, 返回最近年报数据。 例子:假设现在是 2016Q2, Annual(营业收入,0)就是 2015 年报的营业收入,而 Annual(营业收入,1)就是 2014 年报收入。
AccuQ(季报指标, 前移年数 = 0) 返回季报指标的年内季度累计数据, 前移年数 = 0 时, 返回最近季度年内累计数据。例子:假设现在最新的季报是 2016Q3, AccuQ(营业收入,0)就是 2016 年 1-9 月的累计营业收入,而 AccuQ(营业收入,1)就是 2015 年 1-9 月的累计营业收入。
注意: 以上季报函数只能用于一个原始季报指标, 不能用于其他类型的指标, 也不能和其它函数嵌套使用。 不合法用例:
RefQ(市盈率, 1):收盘价不是原始季报指标, 不能用 RefQ()函数
RefQ(营业收入 – 营业支出, 1): RefQ 只支持一个指标,不支持表达式。
RefQ(TTM(营业收入, 0), 1): 季报函数不支持函数嵌套, 可使用 TTM(营业收入, 1)计算一个季度前的营业收入 TTM。
十九、 持仓股票变量和持仓统计函数。
持仓股票变量和持仓统计函数可以被用来制作更加灵活的交易模型。 在交易模型 II 里, 用户可以使用持仓股票变量和持仓统计函数自定义卖出条件、不卖条件、买入限制。 注意持仓股票变量和持仓统计函数只在模型 II 自定义买卖条件中有效。
持仓 股票变量:
后复权买入价: $beginPrice
持有天数 :$Days
买入后涨幅: $change
买入后最高点跌幅: $withdraw
买入时排名: $beginRank
买入时排名分: $beginScore
最新排名:$rank
最新排名分: $score
持仓统计函数:
$max(指标) ,返回持仓股票里的指标最大值。 比如$Max(市盈率) 返回现有持仓股票的最高市盈率。
$min(指标),返回持仓股票里的指标最小值。 比如$Min(市盈率) 返回现有持仓股票的最小市盈率。
$sum(指标), 返回持仓股票里的指标之和。比如$Sum(成交额) 返回现有持仓股票在选股日的成交额之和。
$avg(指标), 返回持仓股票里的指标平均值。比如 $avg(市盈率) 返回现有持仓股票的平均市盈率。
使用例子:
卖出排名下跌 10 名以上的股票 , 可定义卖出条件$rank- $beginRank >= 10
卖出在持仓股票中排名下降最多的股票,可定义卖出条件 $rank-$beginRank = $max($rank-$beginRank)
如果买入后跌幅超过 2 个 ATR,止损卖出, 可定义卖出条件 后复权收盘价 - $beginPrice < 0 -2 * ATR(14)
创建完成后,自定义指标的使用方法和其它公共指标一样,可以用于筛选条件或排名条件中。
注意: 1. 自定义指标名里只能包含中文,英文,数字;不能包含空格,标点符号, 括号,计算符号等。 比如指标名 “5 日 MA(收盘价)”, “5 日收盘价 - 10 日收盘价”等都是不合法的指标名。当指标名不合法时,后台计算很容易出错。
2. 自定义指标表达式里使用到的公共指标名称必须和界面上的指标名字一样, 用户不能随便使用自己想到的指标名字。 比如 5 日均价在界面上是”5 日复权均价“, 用户不能随便用其它名字表示 5 日均价, 例如 ”5 日均价“ ”5 天均线“ 都不可以。
3. 表达式里不能有负数 , 比如“-1”。 用户可以用一个简单的表达式来表示负数。 比如用 "(0-1)"来表示-1。 4. 表达式中函数名或指标名大小写不重要, 都表示一个意思。比如"max(收盘价,1)" 和 “MAX(收盘价,1)" 都是使用 Max 函数, 得到一样的结果。 5. 自定义指标表达式现在即支持函数嵌套功能,也支持自定义指标之间的嵌套。 比如‘1 日前 10 天总成交额’可以用嵌套表达式“ref(sum(当日成交额,10), 1)”, 也可以定义两个指标, 并将第一个指标嵌入第二个指标:10 天总成交额 = sum(当日成交额,10) ; 1 日前 10 天总成交额 = ref(10 天总成交额 ,1)。
以下两图展示自定义指标管理器的使用方法。
图 1 点击自定义 Tab 中的管理图标,进入自定义指标管理器
图 2 用户可以在自定义指标管理器中添加、修改、删除指标
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论