以公共指标为原材料,用户可以自己定义更多的指标。

视频课程:
          自定义指标 点击观看1
    
          自定义函数 点击观看2

使用自定义指标样例可在以下帖子得到:

         自定义指标示例列表 点击查看1

         季报指标函数的使用用例 点击查看2
 
         所有财务指标定义公式 点击这里

熟悉通达信的用户可以查看以下示例:

       果仁自定义指标筛选股票示例--如何实现通达信红宝书公式 点击查看3

       通达信果仁函数对照表 点击查看4


目前自定义指标支持的计算表达式有:
一、 算数四则运算。比如 “(收盘价 + 开盘价)/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)” 就是5K线前的收盘价。该函数支持变量天数的计算,例子:“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日平滑移动平均收盘价。该函数的天数参数必须是常数,不可以是变量。


DMA(指标1,指标2),计算指标1在过去几个交易日(不包含停牌日)以指标二为平滑因子的动态移动平均。例子: “DMA(收盘价,换手率)”,表示以换手率作平滑因子的平均价。


 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日涨幅方差。


以上的窗口函数,都会跳过停牌日期, 比如 ”Max(收盘价, 10)" 里面的10天不包含个股停牌的日期,  如果想算入停牌日期, 可以使用MA2,EMA2,Med2, Sum2, Max2, Min2, Stdev2, Var2。

 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, 天数N)计算两个指标在过去几个交易日里的协方差;  天数为0时,返回两个指标整个数据历史上的协方差。例子:“covar(1日涨幅, 收盘价, 250)” 返回1日涨幅和收盘价在过去250天的协方差;covar(1日涨幅, 收盘价, 0)” 返回1日涨幅和收盘价在过去历史上的协方差。该函数支持变量天数的计算,例子:“Covar(1日涨幅,收盘价,countbars(收盘价>0,9999)-5)”返回股票上市后第5天到目前为止股票1日涨幅与收盘价的协方差。 Covar() 的计算不会跳过停牌日。


Percentile(指标,百分点, N天数) , 计算在过去N个交易日排名百分点对应的值,指标数值从大到小排序。 

               percentile(收盘价, 0.95, 21)过去21天里的第二高收盘价 (95%分位点的价格) 。

               percentile(收盘价, 0.12, 10)过去10天里的第二低的收盘价(12%分位点的价格)。 


PercentRank(指标, N天数) , 计算当天指标数值在过去N个交易日中的排名百分位,指标数值从大到小排序。  如果返回0,表示当天指标数值最小, 返回1,表示当天指标数值最大, 返回0.5 表示当天数值刚好在时间序列中间。 计算规则类似于Excel : PercentRank(2, [1,2,5,4]) = 0.33 。 例子: “19-PercentRank(收盘价,20)*19” ,计算过去20天收盘价大于今天收盘价的天数。


四、时序回归函数(纵向回归函数)。最小二乘法线性回归函数。以下函数是对每一只股票的指标在连续的一段日期里进行聚合运算:

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时, 返回全部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股市盈率的标准化值。 对于熟悉统计学的用户, 标准化值就是ZScore(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日涨幅影响的当日成交额残差值。


hNeutralizeMI(指标)

返回市值和行业中性化的指标。 比如hNeutralizeMI(EP)返回 EP的市值和行业中性化后的值 。 



 注意 :
1 当股票指标的值为空时, 这只股票不参与统计。 比如"HAvg(市盈率, 0)" 计算全市场股票平均市盈率, 市盈率为空值的股票不参与统计。
2 股票投资域或筛选条件的设定不影响横向统计函数的结果。 
3 以上函数也适用于基金策略。 在基金策略中, 范围 = 0,代表全部的基金和指数, 范围= 1,代表在同一投资种类计数。

六、股票池统计函数 在当天内对一个股票池或基金池内的所有股票的某个指标进行统计。 
SMax(指标,股票池,范围) 范围等于0(默认值)时, 返回股票池内指标的当天最大值, 范围等于1时, 返回股票池同行业内的股票指标的当天最大值。 ”SMax( 收盘价, 低价股)“ 返回股票池“低价股”中的股票在当天的最高收盘价。

SMin(指标,股票池范围)  范围等于0(默认值)时, 返回股票池内指标的当天最小值, 范围等于1时, 返回股票池同行业内的股票指标的当天最小值。 ”SMin( 收盘价,低价股)“ 返回股票池“低价股”中的股票在当天的最低收盘价。
 
SAvg(指标,股票池范围)  范围等于0(默认值)时, 返回股票池内指标的当天平均值, 范围等于1时, 返回股票池同行业内的股票指标的当天平均值。 ”SAvg( 市净率,低价股)“ 返回股票池“低价股”中的中股票在当天的平均市净率。

SWAvg(指标,加权指标,股票池, 范围)   范围等于0(默认值)时, 返回股票池内指标的当天加权平均值, 范围等于1时, 返回股票池同行业内的股票指标的当天加权平均值。 ”SWAvg( 市净率, 总市值,低价股)“ 返回股票池“低价股”中的股票在当天的按总市值加权的平均市净率。

SMed(指标,股票池, 范围  范围等于0(默认值)时, 返回股票池内指标的当天中位数, 范围等于1时, 返回股票池同行业内的股票指标的当天中位数。“SMed(净资产增长,低价股 )”返回股票池“低价股”中的股票的净资产增长率的中值。

SSum(指标,股票池, 范围  范围等于0(默认值)时, 返回股票池内指标的当天和值, 范围等于1时, 返回股票池同行业内的股票指标的当天和值。 ”SSum( 流通市值,低价股)“ 返回股票池“低价股”中的股票在当天的流通市值之和。

SStdev(指标, 股票池, 范围) 范围等于0(默认值)时, 返回股票池内指标的当天标准方差, 范围等于1时, 返回股票池同行业内的股票指标的当天标准方差。”SStdev( 20日涨幅,低价股)“ 返回股票池“低价股”中的股票20日涨幅的标准方差。

SCorr(指标1, 指标2,股票池, 范围  范围等于0(默认值)时, 返回股票池内两个指标的当日相关度, 范围等于1时, 返回股票池同行业内的股票两个指标的当日相关度。 ”SCorr(20日涨幅, 市净率,低价股)“ 返回股票池“低价股”中的股票20日涨幅和市净率的相关度。

SCount( 条件,股票池, 范围  范围等于0(默认值)时, 返回股票池内指标的当天符合条件的股票数, 范围等于1时, 返回股票池同行业内的股票指标的当天符合条件的股票数。 "SCount(1日涨幅 > 0.05,低价股 )"  股票池“低价股”中的当日涨幅大于5% 的股票数。

SRank (指标,顺序标记,股票池, 范围 将股票池中的股票按当天的指标值排名, 并返回排名名次。顺序标记= 0时 , 是由小到大排名,顺序标记= 1时, 是由大到小排名。 范围 = 0(默认值)时, 对全部股票池排名, 范围 = 1时,对股票池同行业内的股票排
        名。例子:”SRank (收盘价, 0, 低价股)“, 将股票池“低价股”中的股票按照收盘价由小到大排名,并返回每个股票的名次。 收盘价最低的股票SRank是1, 第二低的SRank是2, 依次类推。

SRankScore(指标,顺序标记, 股票池, 范围)将股票池中的股票按当天的指标值排名, 并返回排名分。排名分在0到100之间,排在最前面的股票得分100。排名分的具体计算规则在帮助文档中。顺序标记= 0时 , 是由小到大排名,顺序标记= 1时, 是由大到小排名。 范围 = 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(成交量 = 030) 
 
过于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日复权均价)))

CountBarsCountDays区别是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可以是常数或表达式。 例子:"ifNULL(市盈率,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 食品饮料 

sector()返回股票所在交易板块的代码,仅在股票策略中有效。返回值:1表示主板,2表示创业板,3表示中小板。

十五、交易日函数, 可以帮助用户实现根据交易日顺序的择时交易模型。

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。 日期前移函数使用Ref(), 不要使用BarRef()

十八、季报指标函数。 季报函数只能用于季报指标计算。  
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)就是20161-9月的累计营业收入,而AccuQ(营业收入,1)就是20151-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)



二十、K线聚合函数

将日线级别指标调整到周线或月线级别。目前有效的高K线级别有:y-年线, m-月线, w-周线。

KFirst(指标, 高K线级别), 返回K线的第一个值。  KFirst(开盘价, m), 返回月线开盘价。 

KLast(指标, K线级别), 返回K线的最后一个值。 KLast(收盘价, m), 返回月线收盘价。

KMax(指标, K线级别), 返回K线的最高值。   KMax(最高价, m), 返回月线最高价。

KMin(指标, K线级别), 返回K线的最低值。 KMin(最低价, m), 返回月线最低价。 

KSum(指标, K线级别), 返回K线的和值。  KSum(成交量, m), 返回月线总成交量。 


更多例子:
上一个月的月线收盘价: ref( KLast(收盘价, m), 1)。
20个月的月线收盘价均价:MA( KLast(收盘价, m), 20)。
20周成交量均线: ma(KSum(当日成交量, w),20)  。





--------------------------------------------------------------------------------------------------------------------------------------
创建完成后,自定义指标的使用方法和其它公共指标一样,可以用于筛选条件或排名条件中。

注意:
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)。