更新日期:2017-01-23 增加系统指标的说明   QQ讨论群: 点击加群

果仁选股策略--FAQ

1.果仁提供什么服务?

果仁网是国内最活跃的非编程量化平台, 为用户提供策略开发,策略分享,策略组合交易管理一站式服务。有选股软件(比如通达信、大智慧、同花顺)使用经验的用户学习使用果仁功能0门槛。门槛低、效率高是果仁网的最大特点。

果仁网的主要功能有:
1. 快速策略开发。非编程、菜单界面、海量因子、自动参数调优、分钟线回测、大盘择时、股指对冲、准确历史回测、自动策略评估。
2. 策略商城。策略达人制作的高质量策略以供使用。
3. 策略组合。多策略间实现最优配置,降低风险提高收益。
4. 实盘管家。 产生实时调仓指令,一键交易,非全职投资的用户也能做自己的量化基金。
5. 交易社区。 共享实盘心得、策略、量化知识。

果仁网目前的投资品种有国内上市的A股和ETF。其后会陆续开放期货、港股策略平台。在果仁网,量化投资不再神秘,寻常百姓触手可及。

2.量化投资在中国管用吗?量化投资和技术选股有啥区别?

基于量化指标的回测统计方法在中国远没有得到广泛使用,大多数投资者采用跟风投资或K线图形的策略。也正因为很少有人用这种方法买卖股票,这种方法在中国更加高效。在欧美市场,量化统计已经被很多聪明人研究透彻,这造成一般量化策略有效性降低,击败大盘指数是件不容易的事情。而在中国,一个相对简单的量化选股模型就有可能轻松跑赢大盘。

  技术选股+K线分析 量化投资
使用人群 散户(多) 机构用户为主(少)
选股指标 以量价指标为主。 除了量价指标,还需要使用财务指标、公司事件等。
交易模型 没有完整的交易模型。重视股票买入条件,不重视个股仓位和卖出条件。 有完整的交易模型。模型对股票的买入条件、卖出条件、个股仓位、调仓时点和风险控制都有明确的规定。
策略验证 使用基于经验和书本总结出来的规则。没有在历史数据里测试过有效性。 选股策略基于个人研究, 在历史数据里测试其有效性。可以根据回测结果对策略进行调优。 重视风险收益量化指标。
分析方法 有很多主观成分,不同人对同一图表有不同结论。 “大师”辈出。 依赖客观数据统计。
收益来源 着重于单个股的波段操作。 多股票之间的轮动。重视多种投资标的之间的配置和轮动。讲究风险对冲。
分析工具 通达信、同花顺金融终端 数据库、编程平台。 或者果仁网云平台。
类比 中医 西医

3.量化投资就是高频交易吗?

不是。量化投资是基于量化统计模型的一种投资方法。其核心步骤是将量化模型放回真实的历史数据模拟跑盘,以验证量化模型的有效性。 量化投资可以做日内高频交易也可以做日间低频交易,只要是基于量化模型统计的投资方法都是量化投资。果仁支持日间股票买卖量化模型,门槛低,即便是一般的投资者也可以使用。有兴趣的朋友可以读读丁鹏的《量化投资—策略与技术》了解一些量化投资的基本概念。在量化交易理念方面,科蒂斯.费思的《海龟交易法则》提供非常有意义的指导

4.果仁的量化策略买卖模型是什么?

果仁策略默认的交易模型(模型I)是一种定期调仓的量化轮动模型。在每一个调仓日, 果仁策略卖出仓内的所有股票, 并依据调仓日前一交易日的数据,选出股票等权重买入。如果选出的股票已经在仓内, 这支股票的仓位也会被重新调整成和其它股票一样的仓位, 但如果这只股票因为停牌或涨停跌停无法调整仓位,则仓位保持不变。 这种买卖模型比较简单,适合轮动交易策略。

果仁交易模型II是一种按卖出条件调仓的的量化轮动模型。在每一个调仓日,卖出满足卖出条件的股票,把余下的资金等权重买入符合买入条件的新股票。不满足卖出条件的股票可以保持自己的仓位, 在规定的仓位范围内不作调整。模型II分离买入和卖出条件, 是一种更加灵活的交易模型。

5.选股指标的数据从哪里来?何时更新?

选股指标(除了分析师预测指标外)是果仁根据原始市场数据和公司发布的财报自己计算出来的。具体的计算方法在选股指标里有解释。

数据日期范围:大多数指标从2007年1月4日开始, 用户可以使用历史查询功能来判定任一股票的指标日期范围。股票数据每晚10点完成更新, 基金数据到第二日早9点完成更新。

6.果仁股票行业分类标准是什么?

果仁依据申万2014版一类行业标准对股票进行分类。

7.果仁历史回测真实吗?

为了做到回测的真实性,果仁回测引擎作了如下处理:使用精准的(point-in-time)历史数据, 彻底回避了使用未来信息的隐患;对停牌和涨跌停股票的买卖限制做出真实处理;对交易成本进行合理估算。历史回测结果可以全部导出到Excel文件里,方便验算。 经过许多细心用户的验证, 果仁历史回测结果是真实可靠的。

8.筛选条件和排名条件各有什么用处?

果仁使用“先筛选后排名”的选股流程。 当选股策略既有筛选条件又有排名条件时,筛选条件将首先被使用,从几千只股票里选出一批股票做为候选股票,然后排名条件将被用来对这些候选股票做出排名,排名最靠前的N只股票将被买入(N是最大持仓股票数)。

有些用户喜欢使用复杂的筛选条件精选出少量股票,再使用一个简单的排名条件对这些股票排名;另一些用户喜欢使用简单的筛选条件粗选出大量股票, 再使用较复杂的排名条件对这些股票进行精准的排名。 从实际的效果来看,使用排名条件可以实现更加精细的选股策略,所以我们建议用户首先使用筛选条件对股票进行粗选,再使用排名条件对选出的股票进行细致排名,最后选出最靠前的N只股票进行投资。

11.策略收益的具体计算规则是什么?

策略收益根据回测日期区间和调仓周期来计算。每个周期的收益单独计算,最后策略的总收益是各个周期的收益累积而成, 即(1+周期1收益)×(1+周期2收益)×。。。 = 1 + 总收益。调仓日是在每个周期的第一天, 股票买卖价格按照调仓日的价格计算, 默认是收盘价。 每一个周期的选股日调仓日的前一天。比如一个调仓周期的第一天是T日,这个周期的调仓日就是T日,而选股日是T-1日。果仁收益计算包含股息,拆股和配股的收益。

在默认情况下, 策略会等权重全仓买入股票, 对每只股票的仓位不做限制。 比如策略只选出一只股票,则会用100%的资金持有这支股票, 如果选出2只股票, 则每只股票占用50%的现金,依次类推。 在每个调仓日, 回测程序都会自动调整仓位,把股票仓位重新设回到等权重的状态。

当有市场择时条件时, 用户可以限制熊市整体股票仓位,比如在50%。 这时,在每个熊市调仓日,回测程序都会把整体股票仓位设置为50%。

(如果用户认为用100%资金买入一只股票过于危险,可以在策略回测的高级设置里限制个股最大买入仓位。)

股票交易成本默认按双边千分之二计算,即买的时候要扣除千分之二的交易成本, 卖的时候再一次扣除千分之二的交易成本。 在调仓日,继续持有的股票仓位被调整时不扣除交易成本, 比如一只股票的仓位从50%调整为20%, 不会扣除交易成本。

股票如果停牌或者一字板涨停跌停,则不能买卖,即便是按照选股策略应该被买入或被卖出,买卖也不能进行。不能卖出的股票会被继续持有到下一个调仓日,并根据下一个调仓日的市场情况来决定是否可以买卖。

12.排名分析里收益率为什么和策略回测收益率不一样?

在排名分析里收益率挺好的策略,到策略回测里收益经常会低很多, 这是因为排名分析回测计算做了简化,没有考虑交易成本和股票停牌等问题。 比如排名分析算出的收益率可能是20%, 可到了策略回测里, 收益率变成了5% 甚至是-5% , 这往往是由交易成本造成的。 一个策略假设每天都买入卖出不同的股票, 双边的交易成本合计千分之四, 交易费一年就会吃掉100% 的收益增长。 第二点, 策略回测考虑到停牌股票不能买卖, 这一点也会造成和排名分析回测的收益不一样。

排名分析主要用于验证选股策略的相对有效性, 通过从高分段到低分段股票的收益分布趋势来判断选股策略有效性。 而使用策略回测可以得到更接近实际情况的收益曲线。

13.回测起始日变化,策略收益变化很大是什么问题?

有些策略起始日期往前或往后调整一天,策略的回测收益会变化很多。 大约有两个原因,

一是统计样本数量过少, 造成收益计算的随机性较大。 比如一个策略最大持仓股票数量是2只, 调仓周期是20天, 回测时长是5年, 按一年有240个交易日算, 回测统计数据点有 2 X 12 X 5 = 120 个。 这种策略的回测数据点少,随机性大, 收益计算的波动自然较大。 比如起始日变化一天, 回测收益就可能从80%变成30%。 建议用户增加策略回测统计的数据点至少到1000个。 增加回测数据点数量的方法有增加最大持仓股票数量,减少调仓周期的天数, 手工做起始日期的滚动回测再取平均值。

二是策略本身过度拟合, 造成结果不稳定。 这往往是策略过于复杂或者参数对于某个起始日过于调优造成的。

14.用户如何跟随自己感兴趣的策略?

在调仓日,策略结果页面会显示调仓指令。 如果策略是别人的策略,用户可以首先关注这个策略, 被关注的策略会在个人主页里出现。使用微信服务号是一种更方便的策略跟随方式,用户可以绑定果仁微信服务号, 在微信服务号里查看每个策略最新的更新情况和调仓指令。

我们建议用户根据自己的风险承受能力慎重跟随,果仁网不承担任何由于策略跟随做成的损失。

15.如果策略的选择条件产生很多只股票,策略如何选择股票买入?

使用“每日选股”,用户可以看到每一天具体有哪些股票通过筛选条件被选中。如果有排名条件,在“每日选股”的结果中还可以看到每只股票的排名得分。 一个选股策略往往能选出上百只或上千只股票,而实际上,一般用户最多能买入10到20只股票。比如用户限定一次最多买入10只股票,筛选条件产生100只股票,程序将挑出排名得分最高的10只股票买入, 如果没有指定排名条件,程序会选择成交额最大的股票买入

16.什么是市场择时?

用个股指标选个股, 用大盘指标择时,是行之有效的股票策略。 虽然我们无法准确预测未来总体市场的走势,但是根据一些常用的大盘指标, 我们可以规避一些由市场巨幅波动带来的风险。 具体使用方法,请查看市场择时

17.自定义指标是什么?

用户可以用已有的指标作为计算公式的输入定义出新的指标。 一旦创建成功, 自定义指标的使用方式和其它公共指标的使用方式一样。 具体用法,请查看自定义指标

18.策略评分规则是什么?

策略评分。 帮助用户快速的判定策略的质量。 70分以上的策略是相对较好的策略, 60分以下是相对较差的策略。 但是评分不能简单对待, 还应该仔细研究策略的成分分数。 策略评分由5个成分组成:

收益分。 根据策略的年化收益打分。 100分表明过去5年的策略年化收益大约是50%, 60分表明策略年化收益在10%-15%之间。

抗风险分。根据策略的最大回撤率和赢率计算得出。 80分以上的策略表明抗风险的能力强, 60分以下表明抗风险能力一般。

流动性分。 代表策略的容量。果仁根据保守的假设估算出策略的容量。 90分以上策略表示策略是大容量策略, 60分以下是小容量策略。

稳定性分。代表策略收益波动率的大小。 70分以上代表策略月收益波动率在5%以下。 40分以下代表策略月收益波动率在15%以上。

实盘分。策略实盘的时间越长,相对沪深300的收益越高,实盘得分就越高。用户如果修改自己的策略公式,实盘分将会清零。

为了公平起见, 评分程序不使用策略作者规定的起始日期进行回测, 还是选用几个时段对策略进行进行多次回测,各项得分从多次回测中取平均值成为为最后得分, 唯一的例外是抗风险分,使用表现最差的那次得分为最后得分。

19.果仁支持什么浏览器?

果仁建议用户使用Chrome, 其它支持的浏览器有Opera、360极速模式、Safari。还有高版本IE, 不支持IE9以下的版本。

20.为什么选股指标只有后复权价格没有前复权价格?

前复权价格包含未来信息, 为了防止用户错误使用未来信息做策略, 果仁只提供后复权收盘价作为选股指标。 但在策略结果页面,展现历史股票买入卖出价格时,果仁使用前复权价格, 这样便于用户做价格比较。

使用未来函数是量化分析最容易犯的错误之一, 为了防止这个错误的发生, 果仁网在数据准备和回测算法上做了大量工作,以确保未来函数不会被使用。

21.如何搞清楚筛选、排名、自定义指标、策略买卖的具体含义?

果仁已经提供了较为清晰的文档阐述以上功能。使用每日选股查看选股结果,是搞清这些功能的最好方法。 例如,在筛选条件里, 加入“换手率 最大 全部 10” 是得到当日全市场换手率最大的10只股票, 这个使用每日选股, 其中的含义便一目了然,如果有疑惑, 还可以更换条件为 “换手率 最小 全部 10” 或者 “换手率 最大 全部 20”, 再看结果。

另外查看策略回测结果里的调仓详情也是理解策略功能的一个重要工具。 这样做可以知晓策略具体的运作情况。 点击策略详情右上方的导出图标,可以将策略在每个周期的持仓详情导出到一个Excel文件里。


果仁选股回测快速入门

1.每日选股。可查看历史上的任何一天符合条件的股票。

图片描述


2.策略回测。 将选股策略放回真实的历史数据中,模拟交易,计算出详细收益。

图片描述


3.回测结果。对比策略收益和收益基准。查看持仓详情.

图片描述


4.可保存策略到“我的策略”里。 或者清空当前的策略。

图片描述


5.入门视频1.创建策略。

点击观看


6.入门视频2.看策略。

点击观看

7.完整视频课程。

点击查看视频课程列表


股票策略指标解释

选股指标

行情指标

技术指标

季报项目

注:果仁原始财报指标数据都以单个季度为单元, 如需要获取年内累计数据可或者年报数据,可以分别使用函数AccuQ和Annual。 函数使用详情见自定义函数列表
利润表
项目名称 备注
A 营业收入  
营业总收入 等于 营业收入+利息收入+已赚保费+手续费及佣金收入
营业收入  
利息净收入  
利息收入  
利息支出  
手续费及佣金净收入  
手续费及佣金收入  
手续费及佣金支出  
代理买卖证券业务净收入  
证券承销业务净收入  
受托客户资产管理业务净收入  
已赚保费  
保险业务收入  
分保费收入  
分出保费  
提取未到期责任准备金  
其他营业收入  
   
B 营业支出  
营业总成本 对非金融类公司: 营业总成本= 营业成本+营业税金及附加+销售费用+管理费用(+财务费用+资产减值损失+金融类特殊成本项目(包括利息支出)。 对金融类公司: 营业总成本 = 营业成本(B2)
营业成本  
营业支出  
销售费用  
管理费用  
财务费用  
资产减值损失  
退保金  
赔付支出  
减:摊回赔付支出  
提取保险责任准备金  
摊回保险责任准备金  
保单红利支出  
分保费用  
业务及管理费  
减:摊回分保费用  
保险手续费及佣金支出  
其他营业成本  
营业税金及附加  
   
C 收益利润  
营业利润 营业利润 = 营业总收入- 营业总成本 + 非经营性净收益 
利润总额 利润总额 = 营业利润 +营业外收入 - 营业外支出+其它调整项目(多数情况为0)
净利润 净利润 = 利润总额- 所得税费用 +未确认的投资损失+其它调整项目(多数情况为0)
归属于母公司所有者的净利润 归属于母公司所有者的净利润 = 净利润  - 少数股东损益 - 影响母公司净利润的调整项目
非经营性净收益 仅针对非金融类公司。
非经营性净收益 = 公允价值变动净收益+投资净收益+汇兑收益+非经营性净收益特殊项目+调整项目
公允价值变动净收益  
投资净收益 包含 对联营合营企业的投资收益 
对联营合营企业的投资收益  
汇兑收益  
营业外收入  
营业外支出 包含非流动资产处置净损失
非流动资产处置净损失  
所得税费用  
未确认的投资损失  
少数股东损益   
其他综合收益  
归属于母公司所有者的其他综合收益总额  
归属于少数股东的其他综合收益总额  
综合收益总额  
归属于母公司所有者的综合收益总额  
归属于少数股东的综合收益总额  
基本每股收益 季报公布的基本每股收益
稀释每股收益 季报公布的稀释每股收益

负债资产表
项目名称 备注
D 资产  
资产总计 对非金融类公司: 资产总计 = 流动资产合计(E1) + 非流动资产合计(E2)。 
流动资产合计 金融类公司此项为空值。
非流动资产合计 金融类公司此项为空值。
货币资金 货币资金属于流动资产。
客户资金存款 客户资金存款包含在货币资金中。
交易性金融资产 交易性金融资产属于流动资产。
应收票据 应收票据属于流动资产。
应收股利 应收股利属于流动资产。
应收利息 应收利息属于流动资产。
应收账款 应收账款属于流动资产。
其他应收款 其他应收款属于流动资产。
预付款项 预付款项属于流动资产。金融类公司此项为空值。
存货 存货属于流动资产。金融类公司此项为空值。
消耗性生物资产 消耗性生物资产属于存货。
待摊费用 待摊费用属于流动资产。金融类公司此项为空值。
划分为持有待售的资产 划分为持有待售的资产属于流动资产。
一年内到期的非流动资产 一年内到期的非流动资产属于流动资产。金融类公司此项为空值。
其他流动资产 其他流动资产属于流动资产。
   
可供出售金融资产 可供出售金融资产属于非流动资产
持有至到期投资 持有至到期投资属于非流动资产
投资性房地产 投资性房地产属于非流动资产
长期股权投资 长期股权投资属于非流动资产
长期应收款 长期应收款属于非流动资产
固定资产 固定资产属于非流动资产
工程物资 工程物资属于非流动资产
在建工程 在建工程属于非流动资产
固定资产清理 固定资产清理属于非流动资产
生产性生物资产 生产性生物资产属于非流动资产
油气资产 油气资产属于非流动资产
无形资产 无形资产属于非流动资产
交易席位费 交易席位费包含在无形资产中。
开发支出 开发支出属于非流动资产
商誉 商誉属于非流动资产
长期待摊费用 长期待摊费用属于非流动资产
递延所得税资产 递延所得税资产属于非流动资产
其他非流动资产 其他非流动资产属于非流动资产
   
E 金融类资产  
投资-贷款及应收款项(应收款项类投资)  
结算备付金  
客户备付金 客户备付金包含在结算备付金中
存放同业款项  
贵金属  
拆出资金  
衍生金融资产  
买入返售金融资产  
发放贷款和垫款  
应收保费  
应收代位追偿款  
应收分保账款  
应收分保未到期责任准备金  
应收分保未决赔款准备金  
应收分保寿险责任准备金  
应收分保长期健康险责任准备金  
保户质押贷款  
定期存款  
存出保证金  
存出资本保证金  
独立账户资产  
其他资产  
   
F 负债  
负债合计  
流动负债合计  
非流动负债合计  
短期借款 短期借款属于流动负债。
质押借款 质押借款包含在短期借款中。
交易性金融负债 交易性金融负债属于流动负债
应付票据 应付票据属于流动负债。金融类公司此项为空值。
应付账款 应付账款属于流动负债。
应付短期债券 应付短期债券属于流动负债
预收款项 预收款项属于流动负债
应付职工薪酬 应付职工薪酬属于流动负债
应付股利 应付股利属于流动负债
应交税费 应交税费属于流动负债
应付利息 应付利息属于流动负债
其他应付款 其他应付款属于流动负债
预提费用 预提费用属于流动负债
递延收益 递延收益属于流动负债
划分为持有待售的负债 划分为持有待售的负债属于流动负债
一年内到期的非流动负债 一年内到期的非流动负债属于非流动负债。金融类公司此项为空值。
其他流动负债 其他流动负债属于流动负债
   
长期借款 长期借款属于非流动负债
应付债券 应付债券属于非流动负债
长期应付款 长期应付款属于非流动负债
长期应付职工薪酬 长期应付职工薪酬属于非流动负债
专项应付款 专项应付款属于非流动负债
预计负债 预计负债属于非流动负债
递延所得税负债 递延所得税负债属于非流动负债
长期递延收益 长期递延收益属于非流动负债
其他非流动负债 其他非流动负债属于非流动负债
   
G 金融类负债  
向中央银行借款  
同业及其他金融机构存放款项  
拆入资金  
衍生金融负债  
卖出回购金融资产款  
吸收存款  
代理买卖证券款  
代理承销证券款  
存入保证金  
预收保费  
应付手续费及佣金  
应付分保账款  
应付赔付款  
应付保单红利  
保户储金及投资款  
未到期责任准备金  
未决赔款准备金  
寿险责任准备金  
长期健康险责任准备金  
独立账户负债  
其他负债  
   
H 权益  
归属母公司股东权益合计  
所有者权益合计 所有者权益合计 = 归属母公司股东权益合计 + 少数股东权益 + 所有者权益调整项目(多数为0) 
负债和所有者权益总计  
资本公积  
盈余公积  
未分配利润  
库存股  
其他综合收益  
一般风险准备  
外币报表折算差额  
未确认投资损失  
其他储备(公允价值变动储备)  
专项储备  
少数股东权益  

现金流表
项目名称 备注
I 经营现金流  
经营现金流量净额  
销售商品、提供劳务收到的现金  
收到的税费返还  
客户存款和同业存放款项净增加额  
向中央银行借款净增加额  
向其他金融机构拆入资金净增加额  
收回已核销贷款  
收取利息、手续费及佣金的现金  
处置交易性金融资产净增加额  
回购业务资金净增加额  
收到原保险合同保费取得的现金  
收到再保业务现金净额  
保户储金及投资款净增加额  
收到其他与经营活动有关的现金  
经营活动现金流入小计  
购买商品、接受劳务支付的现金  
支付给职工以及为职工支付的现金  
支付的各项税费  
客户贷款及垫款净增加额  
存放中央银行和同业款项净增加额  
拆出资金净增加额  
支付手续费及佣金的现金  
支付原保险合同赔付款项的现金  
支付再保业务现金净额  
支付保单红利的现金  
支付其他与经营活动有关的现金  
   
J 投资现金流  
投资现金流量净额  
收回投资收到的现金  
取得投资收益收到的现金  
处置固定资产、无形资产和其他长期资产收回的现金净额  
处置子公司及其他营业单位收到的现金净额  
收到其他与投资活动有关的现金  
投资活动现金流入小计  
购建固定资产、无形资产和其他长期资产支付的现金  
投资支付的现金  
取得子公司及其他营业单位支付的现金净额  
质押贷款净增加额  
支付其他与投资活动有关的现金  
   
K 筹资现金流量  
筹资现金流量净额   
吸收投资收到的现金  
其中:子公司吸收少数股东投资收到的现金  
发行债券收到的现金  
取得借款收到的现金  
收到其他与筹资活动有关的现金  
筹资活动现金流入小计  
偿还债务支付的现金  
分配股利、利润或偿付利息支付的现金  
其中:子公司支付给少数股东的股利、利润或偿付的利息  
支付其他与筹资活动有关的现金  
   
L 现金流总结  
现金及现金等价物净增加额  
期末现金及现金等价物余额  
期初现金及现金等价物余额  
汇率变动对现金及现金等价物的影响  
资产减值准备  
固定资产折旧  
无形资产摊销  
长期待摊费用摊销  
待摊费用减少  
预提费用增加  
处置固定资产、无形资产和其他长期资产的损失  
固定资产报废损失  
公允价值变动损失  
投资损失  
递延所得税资产减少  
递延所得税负债增加  
存货的减少  
经营性应收项目的减少  
经营性应付项目的增加  
其他  
债务转为资本  
一年内到期的可转换公司债券  
融资租入固定资产  
现金的期末余额  
现金的期初余额  
现金等价物的期末余额  
现金等价物的期初余额  

财务指标

注: TTM, REFQ, AvgQ, Annual等为果仁自定函数, 具体用法请点击自定义函数列表查询
分类 名称 果仁计算公式 备注
估值 市盈率 总市值/TTM(归属于母公司所有者的净利润,0) 即PE_TTM,等于总市值除以过去12个月的归属于母公司所有者的净利润
市净率 总市值/归属母公司股东权益合计 即PB,等于总市值除以归属母公司股东权益合计。
市销率 总市值/TTM(营业总收入,0) 即PS_TTM,等于总市值除以过去12个月的营业总收入。
市现率 总市值/ TTM(经营现金流量净额,0) 即PCF_TTM,等于总市值除以过去12个月的经营现金流量净额。
EV_EBITDA (总市值+负债合计-货币资金) /(TTM(利润总额,0)+TTM(财务费用,0)+TTM(固定资产折旧,0)+TTM(无形资产摊销,0)) 等于(总市值+负债合计-货币资金)除以过去12个月的(利润总额+财务费用+固定资产折旧+无形资产摊销)
股息率 上一年总现金分红/总市值 等于最近一年每股现金分红除以股票价格。
扣非市盈率 总市值/TTM(扣非净利润,0) 等于等于总市值除以过去12个月的扣非净利润
PEG 市盈率/归属于母公司所有者的净利润增长 市盈率/归属于母公司所有者的净利润增长
静态市盈率 总市值/annual(归属于母公司所有者的净利润, 0) 等于总市值/最近年报的归属于母公司所有者的净利润
动态市盈率 总市值/ if (Mod(当前季度ID,4)= 0, annual(归属于母公司所有者的净利润, 0),accruQ(归属于母公司所有者的净利润,0)/Mod(当前季度ID,4) *  4) 等于总市值/归属于母公司所有者的净利润,净利润根据每期财报动态扩展到年报数据。
EP TTM(归属于母公司所有者的净利润,0)/总市值 市盈率TTM的倒数, 等于过去12个月的归属于母公司所有者的净利润/总市值
BP  归属母公司股东权益合计/总市值 市净率的倒数,等于归属母公司股东权益合计/总市值
偿债能力 流动比率 流动资产合计 / 流动负债合计 等于最近一季的流动资产合计除以流动负债合计。金融类公司此项为空值。
负债资产率 负债合计/ 资产总计 等于最近一季的负债合计除以资产总计。
产权比率 负债合计 / 归属母公司股东权益合计 等于最近一季的负债合计除以归属母公司股东权益合计。
账面杠杆 非流动负债合计/归属母公司股东权益合计 账面杠杆(Book leverage)。等于最近一季度的非流动负债合计/归属母公司股东权益合计。金融类公司此项为空值
市场杠杆 非流动负债合计/(非流动负债合计+总市值) 市场杠杆(Market leverage)。等于最近一季度的非流动负债合计/(最近一季度的非流动负债合计+当日总市值)。 金融类公司此项为空值
速动比率 (流动资产合计-存货)/ 流动负债合计 速动比率(Quick ratio)。等于最近一季的(流动资产合计-存货)/流动负债合计。金融类公司此项为空值。
超速动比率 (货币资金+交易性金融资产+应收票据+应收帐款+其他应收款)/流动负债合计 超速动比率,等于最近一季度的(货币资金+交易性金融资产+应收票据+应收帐款+其他应收款)/流动负债合计。 金融类公司此项为空值。
利息保障倍数 (利润总额+财务费用)/财务费用 最近一季度的(利润总额+财务费用)/财务费用
现金比率 TTM(期末现金及现金等价物余额,0)/流动负债合计 等于最近12个月的期末现金及现金等价物余额/流动负债合计
现金流动负债比 TTM(经营现金流量净额,0)/流动负债合计 等于最近12个月的经营现金流量净额/流动负债合计
     
资本结构 股东权益比率 归属母公司股东权益合计/资产总计 等于最近一季度的归属母公司股东权益合计/资产总计
固定资产比率 (固定资产+工程物资+在建工程)/资产总计 等于最近一季度的(固定资产+工程物资+在建工程)/资产总计
无形资产比率 (无形资产+开发支出+商誉)/资产总计 等于最近一季度的(无形资产+开发支出+商誉)/资产总计
非流动资产比率 非流动资产合计/总资产 等于最近一季度的非流动资产合计/总资产
股东权益与固定资产比率 归属母公司股东权益合计/(固定资产+工程物资+在建工程) 等于最近一季度的归属母公司股东权益合计/(固定资产+工程物资+在建工程)
     
盈利能力 营业利润率 TTM(营业利润,0) / TTM(营业收入,0) 过去12个月的营业利润除以过去12个月的营业收入
销售净利率 TTM(净利润,0) / TTM(营业收入,0) 过去12个月的净利润 除以过去12个月的营业收入
销售毛利率 (TTM(营业收入,0) - TTM(营业成本,0)) / TTM(营业收入,0) 过去12个月的(营业收入-营业成本)/营业收入
资产回报率 TTM(净利润,0)/AvgQ(资产总计,4,1) 过去12个月的净利润除以一季度前过去12个月的平均资产总计
5年资产回报率 (Annual(净利润,0)+Annual(净利润,1)+Annual(净利润,2)+Annual(净利润,3)+Annual(净利润,4))/(Annual(资产总计,1)+Annual(资产总计,2)+Annual(资产总计,3)+Annual(资产总计,4)+Annual(资产总计,5))  过去5年的净利润之和除以一年前的过去5年的资产总计之和
净资产收益率 TTM(净利润,0)/AvgQ(所有者权益合计,4,1) 过去12个月的净利润除以一季度前过去12个月的平均所有者权益合计
5年净资产收益率 (Annual(净利润,0)+Annual(净利润,1)+Annual(净利润,2)+Annual(净利润,3)+Annual(净利润,4))/(Annual(所有者权益合计,1)+Annual(所有者权益合计,2)+Annual(所有者权益合计,3)+Annual(所有者权益合计,4)+Annual(所有者权益合计,5))  过去5年的净利润之和除以一年前的过去5年的所有者权益合计之和
扣非净资产收益率 TTM(扣非净利润,0)/AvgQ(所有者权益合计,4,1) 过去12个月的扣非净利润除以一季度前过去12个月的平均所有者权益合计
投入资本回报率 TTM(净利润,0)+ TTM(财务费用,0)/((AvgQ(资产总计,4,1)-AvgQ(流动负债,4,1)+AvgQ(应付票据,4,1) + AvgQ(短期借款,4,1) + AvgQ(一年内到期的长期负债,4,1)) 过于12个月的(净利润+财务费用)/一季度前过去12个月的平均(资产总计-流动负债+应付票据+短期借款+一年内到期的长期负债)。万得公式。 
     
营运效率 总资产周转率 TTM(营业收入,0)/AvgQ(资产总计,4,0) 过去12个月的营业收入除以过去12个月的平均资产总计
存货周转率 TTM(营业成本,0)/AvgQ(存货,4,0) 过去12个月的营业成本除以过去12个月的平均存货。金融类公司此项为空值。
流动资产周转率 TTM(营业收入,0)/AvgQ(流动资产合计,4,0) 过去12个月的营业收入/过去12个月的平均流动资产合计。金融类公司此项为空值。
固定资产周转率 TTM(营业收入,0)/(AvgQ(流动资产合计,4,0) + AvgQ(工程物资,4,0) + AvgQ(在建工程,4,0) ) 等于过去12个月的营业收入/过去12个月的平均(固定资产+工程物资+在建工程)。
应付账款周转率 TTM(营业成本,0)/(AvgQ(应付账款,4,0) + AvgQ(应付票据,4,0) + AvgQ(预付款项,4,0) ) 等于过去12个月的营业成本/过去12个月的平均(应付账款+应付票据+预付款项)。
应收账款周转率 TTM(营业收入,0)/(AvgQ(应收账款,4,0) + AvgQ(应收票据,4,0) + AvgQ(预收账款,4,0) ) 等于过去12个月的营业收入/过去12个月的平均(应收账款+应收票据+预收账款)。
股东权益周转率 TTM(营业收入,0)/归属母公司股东权益合计 等于过去12个月的营业收入/最近一季度的归属母公司股东权益合计
存货周转天数 360/存货周转率 等于360/存货周转率。
应收账款周转天数 360/应收账款周转率 等于360/应收账款周转率。
应付账款周转天数 360/应付账款周转率 等于360/应付账款周转率。
营业周期 应收账款周转天数+存货周转天数 等于应收账款周转天数+存货周转天数。
应付账款付款期 AvgQ(应付账款,4,0)/TTM(营业成本,0)/360 等于过于12个月平均应付账款/营业成本/360
现金转换周期 营业周期-应付账款付款期 营业周期-应付账款付款期
     
成长能力 营业利润增长 (TTM(营业利润,0)-TTM(营业利润,4))/abs(TTM(营业利润,4))  过去12个月的营业利润相对4季度前的12个月的营业利润的增长率。
净利润增长 (TTM(净利润,0)-TTM(净利润,4)) / abs (TTM(净利润,4))  过去12个月的净利润相对4季度前的12个月的净利润的增长率。
利润总额增长 (TTM(利润总额,0)-TTM(利润总额,4)) / abs (TTM(利润总额,4))  过去12个月的利润总额相对4季度前的12个月的利润总额的增长率。
毛利润增长 ((TTM(营业收入,0) - TTM(营业成本,0))-(TTM(营业收入,4) - TTM(营业成本,4))) / abs(TTM(营业收入,4) - TTM(营业成本,4))  过去12个月的毛利润相对4季度前的12个月的毛利润的增长率。
营业收入增长 (TTM(营业收入,0)-TTM(营业收入,4))/abs(TTM(营业收入,4))  过去12个月的营业收入相对4季度前的12个月的营业收入的增长率。
净资产增长 (REFQ(所有者权益合计,0) - REFQ(所有者权益合计,4))/abs( REFQ(所有者权益合计,4)) 最近一季的所有者权益合计相对于4季度前的所有者权益合计的增长率。 
总资产增长 (REFQ(资产总计,0) - REFQ(资产总计,4))/abs( REFQ(资产总计,4))
最近一季的资产总计相对于4季度前的资产总计的增长率。 
归属于母公司所有者的净利润增长 (TTM(归属于母公司所有者的净利润,0)-TTM(归属于母公司所有者的净利润,4))/abs(TTM(归属于母公司所有者的净利润,4) ) 过去12个月的归属于母公司所有者的净利润相对4季度前的12个月的归属于母公司所有者的净利润的增长率。
净现金流量增长率 (TTM(现金及现金等价物净增加额,0) - TTM(现金及现金等价物净增加额,4))/abs(TTM(现金及现金等价物净增加额,4)) 过去12个月的现金及现金等价物净增加额相对4季度前的12个月的现金及现金等价物净增加额的增长率。
净利润3年复合增长 power((TTM(净利润,0)-TTM(净利润,12)) / abs (TTM(净利润,12)) + 1, 1/3) -1 过去12个月的净利润相对12季度前的12个月的净利润的年化增长率。
净利润5年复合增长 power((TTM(净利润,0)-TTM(净利润,20)) / abs (TTM(净利润,20)) + 1, 1/3) -1 过去12个月的净利润相对20季度前的12个月的净利润的年化增长率。
营业收入3年复合增长 power((TTM(营业收入,0)-TTM(营业收入,12)) / abs (TTM(营业收入,12)) + 1, 1/3) -1 过去12个月的营业收入相对12季度前的12个月的营业收入的年化增长率。
营业收入5年复合增长 power((TTM(营业收入,0)-TTM(营业收入,20)) / abs (TTM(营业收入,20)) + 1, 1/3) -1 过去12个月的营业收入相对20季度前的12个月的营业收入的年化增长率。
八季度净利润变化趋势 if( 净利润-refq(净利润, 4) > 0, 1, -1) + if( refq(净利润,1) -refq(净利润, 5) > 0, 1, -1) +if( refq(净利润,2) -refq(净利润, 6) > 0, 1, -1) +if( refq(净利润,3) -refq(净利润, 7) > 0, 1, -1) +if( refq(净利润,4) -refq(净利润, 8) > 0, 1, -1) +if( refq(净利润,5) -refq(净利润, 9) > 0, 1, -1) +if( refq(净利润, 6) -refq(净利润, 10) > 0, 1, -1) +if( refq(净利润,7) -refq(净利润, 11) > 0, 1, -1)  前8个季度的净利润,如果同比(去年同期)增长记为+1,同比下滑记为-1,再将8 个值相加。
经营现金流量净额增长 (TTM(经营现金流量净额,0) - TTM(经营现金流量净额,4))/abs(TTM(经营现金流量净额,4)) 过去12个月的经营现金流量净额相对4季度前的12个月的经营现金流量净额的增长率。
投资现金流量净额增长 (TTM(投资现金流量净额,0) - TTM(投资现金流量净额,4))/abs(TTM(投资现金流量净额,4)) 过去12个月的投资现金流量净额相对4季度前的12个月的投资现金流量净额的增长率。
筹资现金流量净额增长 (TTM(筹资现金流量净额,0) - TTM(筹资现金流量净额,4))/abs(TTM(筹资现金流量净额,4)) 过去12个月的筹资现金流量净额相对4季度前的12个月的筹资现金流量净额的增长率。
每股指标 每股收益 TTM(归属于母公司所有者的净利润,0)/总股本 过去12个月归属母公司所有者的净利润除以总股本
每股扣非收益 TTM(扣非净利润,0)/总股本 过去12个月扣非净利润除以总股本
每股净资产 归属母公司股东权益合计/总股本 最近一季的归属母公司股东权益合计除以总股本
每股营业利润 TTM(营业利润,0)/总股本 过去12个月营业利润除以总股本
每股营业收入 TTM(营业收入,0)/总股本 过去12个月营业收入除以总股本
每股经营性现金流 TTM(经营现金流量净额)/总股本 过去12个月经营现金流量净额/总股本
每股现金流量净额 TTM(现金及现金等价物净增加额)/总股本 过去12个月现金及现金等价物净增加额除以总股本
每股资本公积金 资本公积/总股本 最近一季的资本公积除以总股本
每股未分配利润 未分配利润/总股本 最近一季的未分配利润除以总股本
每股股息 上一年总现金分红/总股本 上一年总现金分红除以总股本
每股营业总收入 TTM(营业总收入, 0)/总股本 过去12个月总营业收入除以总股本
每股现金及现金等价物余额 期末现金及现金等价物余额/总股本 最近一季度期末现金及现金等价物余额/总股本
每股企业自由现金流量 (TTM(现金及现金等价物净增加额, 0) - TTM(筹资活动产生的现金流量净额, 0))/总股本 过去12个月的企业自由现金流量/总股本
每股股东自由现金流量 (TTM(现金及现金等价物净增加额, 0)- TTM(吸收权益性投资收到的现金, 0) - TTM(分配股利、利润或偿付利息支付的现金, 0))/总股本 过于12个月的股东自由现金流量/总股本
每股有形资产 (资产总计-无形资产-商誉)/总股本 最近一季度的 (资产总计-无形资产-商誉)/总股本
每股负债 负债合计/总股本 最近一季度的 负债合计/总股本
每股盈余公积 盈余公积/总股本 最近一季度的盈余公积/总股本
每股留存收益 (盈余公积+未分配利润)/总股本 最近一季度的(盈余公积+未分配利润)/总股本
每股投资现金流量净额 TTM(投资现金流量净额, 0)/总股本 过去12个月的投资现金流量净额/总股本
每股筹资现金流量净额 TTM(筹资现金流量净额, 0)/总股本 过去12个月的筹资现金流量净额/总股本
每股折旧和摊销 (TTM(固定资产折旧,0)+ TTM(无形资产摊销,0)+ TTM(长期待摊费用摊销,0))/总股本 过去12个月的(固定资产折旧+无形资产摊销+长期待摊费用摊销)/总股本
最近一年合计TTM 营业总收入TTM TTM(营业总收入, 0) 过于12个月的营业总收入
营业总成本TTM TTM(营业总成本, 0) 过于12个月的营业总成本
营业收入TTM TTM(营业收入, 0) 过于12个月的营业收入
营业成本TTM TTM(营业成本, 0) 过于12个月的营业成本
毛利TTM TTM(营业收入,0) - TTM(营业成本,0) 过于12个月的毛利TTM
销售费用TTM TTM(销售费用, 0) 过于12个月的销售费用
管理费用TTM TTM(管理费用, 0) 过于12个月的管理费用
财务费用TTM TTM(财务费用, 0) 过于12个月的财务费用
资产减值损失TTM TTM(资产减值损失, 0) 过于12个月的资产减值损失
营业利润TTM TTM(营业利润, 0) 过于12个月的营业利润
营业外收支净额TTM TTM(营业外收入, 0)- TTM(营业外支出,0) 过于12个月的营业外收支净额
利润总额TTM TTM(利润总额, 0) 过于12个月的利润总额
净利润TTM TTM(净利润, 0) 过于12个月的净利润
归属于母公司股东的净利润TTM TTM(归属于母公司股东的净利润, 0) 过于12个月的归属于母公司股东的净利润
销售商品提供劳务收到的现金TTM TTM(销售商品、提供劳务收到的现金, 0) 过于12个月的销售商品、提供劳务收到的现金
经营现金流量净额TTM TTM(经营现金流量净额, 0) 过于12个月的经营现金流量净额
投资现金流量净额TTM TTM(投资现金流量净额, 0) 过于12个月的投资现金流量净额
筹资现金流量净额TTM TTM(筹资现金流量净额, 0) 过于12个月的筹资现金流量净额
现金及现金等价物净增加额TTM TTM(现金及现金等价物净增加额, 0) 过于12个月的现金及现金等价物净增加额

公司事件

情绪指标

策略评估指标


如何使用排名和筛选

排名和筛选的区别

股票筛选在各个股票网站和软件上都有提供,大家都很熟悉。使用筛选,用户可以迅速挑出满足筛选条件的股票剔除不满足筛选条件股票。 股票排名是一种更有效的更被专业投资者青睐的选股方法,也是果仁网推荐的选股方法。 大家在过去一直没有机会接触排名选股的方法,会感到比较陌生,其实它的原理非常简单。在学校里, 一个班的学生按各科成绩的综合起来进行排名,排在前面的学生会得奖学金。 类似的方法,用户可以对市场上的股票按几项指标进行综合排名,并买入排名靠前的股票。和筛选相比,排名可以实现更精细更稳定的选股策略,原因如下:

当用户同时定义筛选条件和排名条件时,果仁会首先按照筛选条件筛选股票,再按照排名条件对股票排名。 在实际选股中,大家可首先使用筛选来粗选出一大批股票,再用排名精选出少量的股票作为投资对象。

排名分计算规则

排名虽然一直是专业人士的投资方法,但原理非常简单,只要有初级算术的知识就能理解排名分的计算规则。

下面我们用一些实例来介绍果仁排名分的具体计算规则。 比如一共有5只股票A,B,C,D,E参加排名。它们的收盘价分别是10,12,20,30,40。 按收盘价从小到大排名, A,B,C,D,E的排名就是1, 2, 3, 4, 5。果仁根据排名先后算出排名分,排名分的公式是 (股票数– 股票排名 + 1)/股票数 * 100。按照这个公式, 排名第1得100, 排名第二得80,依次类推,排名第5得20。 详细情况如下表列出:

股票 收盘价 从小到大排名 从小到大排名分 从大到小排名 从大到小排名分
A 10 1 100 5 20
B 12 2 80 4 40
C 20 3 60 3 60
D 30 4 40 2 80
E 40 5 20 1 100

当某只股票的指标为空时,这只股票将一直排在最后,排名分最低。比如A,B,C,D,E的市盈率分别为10, 20, 30, 空,空(当一个公司亏钱时,市盈率无法算出,则市盈率为空。), 排名分的计算详细在下表列出:

股票 市盈率 从小到大排名 从小到大排名分 从大到小排名 从大到小排名分
A 10 1 100 3 60
B 20 2 80 2 80
C 30 3 60 1 100
D 4 40 4 40
E 4 40 4 40

当有两个以上的指标作为排名条件时, 用户可以给每个指标设定权重(默认值为1),综合排名分 = 排名分1 × 权重1 + 排名分2 × 权重2 + ...

为了方便展示, 我们对综合排名分再做一次排名,算出排名总分。

比如,我们用如下排名条件对股票A,B,C,D,E进行排名

收盘价,从小到大,权重 1

市盈率,从大到小,权重 1

股票 收盘价 收盘价排名分 市盈率 市盈率排名分 综合排名分 总排名分
A 10 100 10 60 160 100
B 12 80 20 80 160 100
C 20 60 30 100 160 100
D 30 40 40 80 40
E 40 20 40 60 20

空值处理

一个指标经常有空值,比如5年净资产收益率很多股票没有数值。无论是从大到小排,还是从小到大排,空值一直排在最后, 也就是指标为空的股票排名分最低, 值为空的股票都排在最后。


如何做排名分析

用户可使用排名分析判断排名策略是否有效。回测程序将所有股票按照排名总分分成5段,10段或更多段,计算每段里的股票总收益,输出一个年化收益柱状图和一个累计收益曲线,以便让用户检查是否排名越高的分段收益越好。

比如我们可将所有股票按排名条件分成5段,从低到高依次为0-20,20-40,40-60,60-80,80-100。 如果年化收益图(如下图所示)高低排列整齐,则表示此排名策略可能含有较强的投资意义,排名高的股票更有可能产生超额收益。专业对冲投资者也非常喜欢此类形状的图形,他们可以买入最高分段股票,卖空最低分段股票,以获得相对收益。 图中 0-20分段代表综合排名分在0-20之间的股票,0-20这个分段里的股票是排名分最低的股票,也就是排在最后的股票。80-100分段代表综合排名分在80-100之间的股票,80-100这个分段里的股票是排名分最高的股票,也就是排在最前面的股票。用户可以在每日选股里查看到每个股票的综合排名分。

整齐的高低排列代表较好的排名策略

图 1 整齐的高低排列代表较好的排名策略

与年化收益相应的累计收益曲线图展示各分段的股票收益在时间轴上的变化,用户可以获取更加详细收益变化的信息。

整齐的高低排列代表较好的排名策略

图 2 累计收益曲线展示更加详细的收益变化

反过来,如果在年化收益图中(如下图)各分段收益高低错落,则代表此排名策略的投资意义不强,即便排名策略在策略回测中收到较好的收益,也需要谨慎的使用这个排名策略。

整齐的高低排列代表较好的排名策略

图 3 高低不齐图形往往代表排名策略投资意义不强

如果排名指标里含有空值(NULL),那么无论从小到大排还是从大到小排空值一直排在最后。所以从大到小排名的80-100分段和从小到大排名的0-20分段收益不一定一样。 如果将指标中的空值筛掉, 从大到小的80-100分段和从小到大的0-20分段的收益将会一样或者非常近似。 数据空值代表数据库里就没有这样的数据, 比如有很多股票的预期盈利增长是空值,表明很多股票没有5年净资产收益率的数据。用户可以通过将指标放入到筛选条件来排除指标里的空值,只要指标在筛选条件使用, 指标的空值就会被筛掉。比如筛掉市盈率中的空值, 可用筛选条件市盈率 >0。


自定义指标

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

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)” 就是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日平滑移动平均收盘价。该函数的天数参数必须是常数,不可以是变量。

  

 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() 的计算不会跳过停牌日。

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

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轴截距。   该函数的天数参数必须是常数,不可以是变量。


五、股票统计函数(横向统计函数) 在当天内对所有股票的某个指标进行统计。
 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分数。 
 注意 :
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, 依次类推。


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日复权均价)))

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 食品饮料 


十五、大盘指标变量 
 #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)就是20161-9月的累计营业收入,而AccuQ(营业收入,1)就是20151-9月的累计营业收入。


注意: 以上季报函数只能用于一个原始季报指标, 不能用于其他类型的指标, 也不能和其它函数嵌套使用。 不合法用例:
RefQ(市盈率, 1):收盘价不是原始季报指标, 不能用RefQ()函数
RefQ(营业收入 – 营业支出, 1): RefQ只支持一个指标,不支持表达式。
RefQ(TTM(营业收入, 0), 1): 季报函数不支持函数嵌套, 可使用TTM(营业收入, 1)计算一个季度前的营业收入TTM。


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

注意:
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 用户可以在自定义指标管理器中添加、修改、删除指标


市场择时

选股策略使用市场择时可以有效减小由整体市场波动带来的风险, 减小策略收益的最大回撤率。市场择时可分为两类,一类是趋势择时,即根据大盘指数的均线金叉死叉来判断趋势的转换。趋势择时有一定的滞后性,即大盘趋势转换一定时间后,才会发出信号。 另一类是反转择时,即抄底逃顶择时,就是在大盘跌破某个下限时转为买入,在大盘涨破上限时卖出。反转择时有一定的提前性,即大盘趋势还没有发生转换就会发出信号。在实际使用中,趋势择时更为常用,而趋势择时和反转择时可以结合使用。

趋势择时

趋势择时有4个技术面指标,分别是MA(移动平均),MACD,DMA(平均线差指标),和TRIX(三重指数平滑移动平均指标)。当指标出现金叉时, 转为牛市,即买入; 当指标出现死叉时,转为熊市,即卖出。大盘指数默认为上证指数,用户可以在指标编辑界面选择其它主要大盘指数和行业指数。

MA金叉和死叉的判定条件

DMA = MA短线 – MA长线 (MA短线默认为上证5日均线, MA长线默认为上证60日均线。)

金叉条件: MA短线(t) > MA短线(t-1) and DMA (t) > 0 and DMA (t-1) < 0

死叉条件 MA短线(t)< MA短线(t-1) and DMA (t) < 0 and DMA (t-1) > 0

其中‘XX(t)’表示当日的指标, ‘XX(t-1)’表示前一日的指标。 以下公式皆同。

MACD金叉和死叉的判定条件

DIF(快线) = EMA短线 - EMA长线 (EMA短线默认为上证12日指数移动平均线,EMA长线默认为上证26日指数移动平均线。)

DEA(慢线)= EMA(DIF, M ) (DEA 默认为DIF的9日指数移动平均线。)

金叉条件:DIF(t) > 0 and DIF(t) >DIF(t-1) and DIF (t) > DEA(t) and DIF (t -1) < DEA(t-1)

死叉条件:DIF(t)<0 and DIF(t) < DIF(t-1) and DIF (t) < DEA(t) and DIF (t -1) > DEA(t-1)

DMA金叉和死叉的判定条件

DMA = MA短线 – MA长线 (MA短线默认为上证5日均线, MA长线默认为上证60日均线。)

AMA = MA(DMA, M) (AMA默认为20日DMA移动平均)

金叉条件: DMA(t) > DMA(t-1) and DMA (t) > AMA (t) and DMA (t -1) < AMA (t-1)

死叉条件:DMA(t) < DMA(t-1) and DMA (t) < AMA (t) and DMA (t -1) > AMA (t-1)

TRIX金叉和死叉的判定条件

TR = EMA(EMA(EMA(上证指数,N),N),N) (N默认值为120天)

TRIX = (TR(t) – TR(t-1))/TR(t-1)

MATRIX = MA(TRIX, M) (M默认为5天)

金叉条件: TRIX(t) > TRIX (t-1) and TRIX (t) > MATRIX (t) and TRIX (t -1) < MATRIX (t-1)

死叉条件: TRIX(t) < TRIX (t-1) and TRIX (t) < MATRIX (t) and TRIX (t -1) > MATRIX (t-1)

用户可以点击择时条件的编辑图标来修改条件参数。

成交量均线择时

成交量均线择时(MAVol金叉死叉)也是趋势择时的一种。 MAVol是指数成交量的多日均线。量在价先, 根据大盘成交量趋势来判定牛熊有可能比只用价格来判定取得更好的效果。

MAVol金叉死叉的判定条件

DMAVol = MAVol短线 – MAVol长线 (MAVol短线默认为上证5日成交量均线, MA长线默认为上证60日成交量均线。)

金叉条件: MAVol短线(t) > MAVol短线(t-1) and DMAVol (t) > 0 and DMAVol (t-1) < 0

死叉条件 MAVol短线(t)< MAVol短线(t-1) and DMAVol (t) < 0 and DMAVol (t-1) > 0

反转择时

反转择时根据主要板块两个基本面指标PE(市盈率)和PB(市净率)来实现。当PE小于某个值时,市场过于悲观,可以抄底买入,发出牛市信号,即买入信号;当PE大于某个值时,市场过于疯狂,需要逃顶卖出,发出熊市信号,即卖出信号。PB择时的工作机制和PE相同。板块默认为全市场,用户可以自己选择主板,中小板和创业板作基本面择时。

趋势加反转择时

MA_Bias 均线择时附加根据乖离率的逃顶和抄底。 设计源于网络大V持有封基的乖离率择时。

这个择时需要设置4个参数, MA短线和MA长线是MA择时参数, 金叉就是牛市, 死叉就是熊市。

当MA短线高于MA长线超过上限(默认10%)时,转为熊市逃顶。 当MA短线低于MA长线超过下限时(默认-10%)时, 转为牛市抄底。

同时使用多个择时条件

一个策略可以同时使用多个技术面条件来判断大市的牛熊转换。 比如一个策略同时使用了3个择时条件, 在策略回测的高级设置中,用户可以分别指定牛市转换需要满足几个条件, 熊市转换需要满足几个条件,比如这三个条件同时满足牛市条件才能转牛,但只要其中2个满足熊市条件,就能转熊。

限制

市场择时条件只对策略回测有效,不影响每日选股或者排名分析的结果。

策略回测计算只在调仓日根据牛熊条件判定买或者不买股票,不会在调仓周期中间某一天买入或卖出股票。

市场择时条件


交易模型

果仁策略研究界面将策略定义分成三个主要部分:选股、择时、交易。 选股设置包括筛选条件和排名条件,择时设置就是市场择时,交易设置包含交易模型I--定期轮转重平衡仓位的交易模型 和交易模型II--根据是否满足卖出条件来作轮转。(目前基金策略只支持交易模型I。)

交易模型I是果仁原有的定期轮动模型, 在每个调仓日,卖出不满足选股条件的股票,买进满足选股条件的股票, 所有仓内股票在调仓日重新平衡为等权重(除了那些因停牌或涨跌停而无法操作的股票)。 这种模型尤其适合快速轮动短周期策略。

交易模型II是果仁新加入的交易模型, 其特点是必须有单独的卖出条件。现在用户可以定义4个卖出条件,排名名次大于某个阈值,持有天数大于某个阈值, 止盈和止损。仓内股票只要满足一个卖出条件,就会被卖出,也就是说卖出条件之间是或的关系。 在调仓日, 策略首先会卖出可以卖出的股票,然后使用仓内资金买入符合买入条件的股票。 当仓内资金过少时(少于理想仓位的10%),就无法买入新股票。 当股票不满足卖出条件时, 就会被继续持有。 所以如果卖出条件发生不频繁,即便是调仓周期只有1天, 交易模型II的买卖次数也会比较少。 相对于模型I,模型II的交易次数会比较少, 而且个股的仓位一般不做重新平衡。

在交易模型I里, 用户直接指定持仓股票个数, 而在交易模型II里, 用户使用个股理想仓位来间接指定持股股票个数。 比如理想仓位是10%, 则策略尽量用10% 的仓内资金买入新股票,策略大约持仓10只股票。 用户可以设定仓位偏离比例,只要在理想仓位的偏离比例内, 个股仓位不作调整。 比如理想仓位是10%, 仓位偏离比例是30%,则股票仓位的合理范围是 7% 到13%, 在这个范围内,仓位不作调整。 当股票仓位低于这个范围而且在买入清单前面,则补仓至(尽量)理想仓位; 当股票仓位高于这个范围, 则卖出部分仓位,仓位调回到理想仓位。

在交易模型II里, 用户还可设置新股票买入限制。进一步过滤来自于选股策略的买入清单。在买入清单的股票只要不满足一个限制, 就会被过滤掉。注意:用户必须设置至少一个卖出条件, 但不必设置买入限制。 不设置买入限制,从选股策略来的所有股票都会被尝试买入。

选择模型I或模型II?

模型I更简单且容易理解,我们建议新用户首先使用交易模型I来研究策略。 模型II不会在每个调仓日自动平衡仓位,交易频率较低,相对来说更容易操作。而且单独的卖出条件使模型II更加灵活。一些实盘的用户可以尝试使用模型II。

模型I策略如何变成摸型II策略?

比如下图1中模型I策略, 选股条件为成交量 > 0,按价格从小到大排序, 调仓周期为5天, 持仓股票为10只。这个策略买入价格最低的10只非停牌股票, 每5天调一次仓。 转换到模型II策略时, 选股条件不变,调仓周期可依然设为5天, 而理想仓位为10%, 即表示策略大约可以持有10只股票。 卖出条件为排名名次大于等于11, 即如果排名不在10名以内就卖出。这样设置的模型II可以和模型I有类似的结果.

模型I变成模型II

图1 模型I变成模型II。

模型I和模型II有些不兼容的设置。 股票备选买入数量在模型I里可以被修改为0到20之间的任何数字,在模型II里,股票备选只数固定为5只, 用户不可调。 在模型I里, 个股最大买入仓位默认为100%,意思是如果选股策略选出来的股票只能买入1只,那么100%的资金会投入到同一只股票里。 在模型II里,个股最大买入仓位就是理想仓位,无论选出1只股票还是10只股票, 都使用10%的仓位买入。模型I里不允许仓位偏离,在每个调仓日都要重新平衡所有股票的仓位, 在模型II,股票仓位在一定范围内不用调整。以上区别使同一个选股策略在模型I和模型II之间收益不同。

模型II可以实现更严格的买入限制:比如只买入排名在前5名的股票(不设这个限制,则和模型I类似,前10名股票+5只备选股票都可以被买入)。仓内同行业的股票不超过3只,以分散行业风险。 距离上次卖出间隔大于等于20天, 这样刚卖出的股票不会在下一个调仓或下几个调仓日被买入。 (模型II默认在调仓日卖出的股票不会再同一调仓日买入。) 这个限制可以防止止损股票被立即买回的情况。加入这些买入限制后, 一次能被买入的股票就会变少,这时缩短调仓周期,比如设置调仓周期为1天,可以实现逐步建仓的策略,这样不必在一天只内一定要买入10只股票。

在卖出条件里,可以适当放宽按排名卖出的条件,比如到排名20名以后才卖出, 这样可以减少交易频度。用户还可以按照持有天数卖出, 一只股票在仓内最长可以持有100个交易日,过了这个时期,无论排名再高,也要卖出。 止赢止损也分别可以设置条件。

模型I变成模型II

图2 模型II的参数设置。

图2显示了比图1 更复杂的模型II交易策略。所有的买入限制和卖出条件都被设置,调仓周期缩短为一天。 通过这些交易条件的设置, 我们可以看到模型II可以实现较为复杂的交易策略。

回测效果对比

将同样选股策略做过去4年回测, 图1模型I和图2模型II得到的结果在图3和图4中展示。

模型I变成模型II

图3 模型I的回测结果

模型I变成模型II

图4 模型2的回测结果。

我们可以看到模型II交易策略可以减小最大回测率,增加夏普比率。注意在这里作者只是为了讲解目的,并没有对模型II交易策略作任何调优。模型II有可能得到比模型I更好的结果。

牛熊转换的仓位控制

牛转熊时, 比如熊市仓位是30%, 在模型I里, 尽量将总仓位压到30%, 如果有的股票停牌无法减仓,其它股票的仓位会减小更多; 在模型II里, 30%一方面代表总仓位的30%, 另一方面是指个股理想仓位的30%, 比如牛市里个股理想仓位是20%, 则在熊市里个股理想仓位为6%, 每只股票的仓位都会尽量向理想仓位靠, 从而达到减仓至30%的目的。 特殊情况是碰到停牌或涨跌停导致股票无法减仓, 此时会继续以理想仓位(6%)持有不符合卖出条件的个股; 而对于达到卖出条件的个股, 将其卖出后如果仓位大于熊市仓位即30%, 则不会买入新的股票。 如果卖出后小于熊市仓位, 则会根据排名条件依次以理想仓位(6%)买入新的股票, 直到达到熊市仓位。

熊转牛时, 模型I会将总仓位升到100%, 满仓平权买入股票; 模型II会将个股理想仓位复原, 仓内的股票和新买入的股票仓位都会尽量向理想仓位靠拢。

排名分析是否受到交易模型的影响?

交易设置只影响策略回测的结果, 对每日选股和排名分析都没有影响。 排名分析使用类似于模型I的交易模型, 但不会考虑停牌涨跌停的影响。它只受到选股设置的影响, 完全忽略市场择时设置和交易设置。

股指对冲

使用股指对冲设置, 可以回测策略对冲股指期货以后的收益情况。

股指对冲设置

在策略回测设置中, 点击股指对冲标签页, 可以看到如下设置:

  1. 选择对冲股指。目前市面上有上证50,沪深300,中证500三种股指期货。

  2. “保证金比例”(deposit-ratio)指的是做空股指期货需要提供的保证金占股指期货金额的比例。现在(2017年2月以后), 上证50和沪深300的保证金比例是20%, 中证500的保证金比例是30%。

  3. “月贴水率”(discount-ratio)指的是以月(20个交易日)为单位,股指期货的贴水率。月贴水率为1%时,表示一个月后到期的股指期货的价格比股指现价低1%,如果今天卖出1个月后到期的股指期货,到时假设股指一直没变化,会遭受1%的损失。

  4. “对冲比例”(hedge-ratio)指的是卖出的期货金额相对策略金额比例。例如,对冲比例=100%,股票策略购买了200万元股票,则对冲会卖出金额为200万的股指期货。对冲比例可以参考策略的Beta值来设置,比如策略Beta为1 ,对冲比例可以设置为100%; Beta为0.5时, 对冲比例设置为50%。

  5. “对冲比例校正周期” 指的是每隔多少个交易日,将策略仓位与股指期货保证金仓位重平衡,以回到设定的对冲比例。由于策略净值每天变化,实际的对冲比例可能偏离设置值,需要定期对资金分配做出调整,以回到策略设定的对冲比例。

由于受到政策影响,历史上保证金比例和贴水率变化很大,且不可重复,使用历史期货数据作回测对未来的指导意义较小。果仁对冲计算让用户自己根据未来的预期设置保证金比例和月贴水率,这样算出来的对冲收益对未来指导意义更大。

注意:对冲比例以及对冲收益计算不考虑手数约束。


仓位分配算法

每个资金调整周期开始时,果仁将总仓位按对冲比例分配成两个部分,一部分是策略仓位,另一部分是股指期货保证金仓位。以下为关系式:


总仓位 = 策略仓位 + 股指期货保证金仓位

= 策略仓位 + 股指期货仓位 * 保证金比例

= 策略仓位 + 策略仓位 * 对冲比例 * 保证金比例

= 策略仓位 (1 + 对冲比例 * 保证金比例)


将上式中的(1 + 对冲比例 * 保证金比例)移到等号左边, 得到下式:

策略仓位 = 总仓位 / (1 + 对冲比例 * 保证金比例)


总仓位是100%, 表达式可以简化成 策略仓位 = 1 / (1 + 对冲比例 * 保证金比例)

如果对冲比例为100%, 则表达式可进一步简化成: 策略仓位 = 1 /(1+保证金比例)


例子“ 对冲比例100%, 保证金比例30%, 则策略仓位 = 1/1.3 =76.9%, 期货保证金仓位 =1 - 策略仓位 = 23.1% 。

注意: 策略仓位是股票策略的整体仓位, 策略内部如果有空仓的闲置资金, 都算入策略仓位。


收益计算

果仁每天根据前一天的策略资金以及股指期货资金计算当天的收益。 对冲后日收益的组成部分有:策略本身的日收益,做空股指期货的日收益(包含股指期货的日贴水损失), 如下式:


T日对冲后收益 = T-1日策略资金 * 策略T日涨幅 - T-1日股指期货资金 * (股指T日涨幅 + 日贴水率)

其中:日贴水率 = 月贴水率/20 。


再分别算出:

T日总资金 = T-1日总资金 + T日对冲后收益

T日策略资金 = T-1日策略资金 * (1 + 策略T日涨幅)

T日股指期货资金 = T-1日股指期货资金 * (1 + 股指T日涨幅 - 日贴水率)


其中T日策略资金和T日股指期货资金为T+1日对冲后收益计算输入。


这样重复计算可以得到每日总资金额, 然后将其换算成对冲后收益净值曲线。


例子,对冲比例= 100%, 策略T日涨幅 = 2%, 股指T日涨幅 = 1%, 日贴水率 = 2%/20 = 0.1%,保证金比例 = 30%

假设T-1日的总资金为100万,并刚好进行了资金重平衡,那么按照上一节的算式,T-1日策略资金为76.9万,T-1日保证金为23.1万,T-1日股指期货资金为76.9万。(这里的计算不考虑手的约束。)

T日对冲后日收益 = 76.9 * 2% - 76.9 * (1% + 0.1%) = 0.692万

T日总资金 = 100 + 0.692 = 100.692万

T日策略资金 = 76.9 * (1 + 2%)= 78.438万

T日股指期货资金 = 76.9 * (1 + 1% - 0.1%)=77.592万


这样依此类推,可以计算出每个非资金调整日的总资金变化,当碰到资金调整日时则按上一节公式重新分配策略资金及股指期货资金。

调仓指令

果仁有两个交易模型, 模型I和模型II, 它们的调仓指令有不同的含义。

模型I调仓

模型I是一个定期调仓并且重新平衡仓位的交易模型。模型I对持仓股票的最大数量做出了规定, 比如最多持有5只股票, 意思就是在每个调仓日策略都试图买入或持有5只股票, 每只股票的仓位是20%, 当可以买入的股票数小于5只时,比如只有3只,策略会按照33%的个股仓位买入3只股票。 (用户可以改变个股最大买入仓位100%的设置,设为比如20%, 在这种情况下,即便只能买入3只股票,策略依然会按照20%的个股仓位买入3只股票,空出40%的仓位为现金。)

调仓指令有5个信号, 卖出, 持有,买入,持有(备选),买入(备选)。 仓内的股票如果不符合选股条件, 就要被卖出, 如果依然符合选股条件,则继续持有。 卖出股票空出来的资金就可以买入新的符合条件的股票。两个备选信号的目的是为了应对由于停牌或涨跌停而引起的股票不能买卖的情况。信号是买入的股票有可能停牌或一字涨停而无法买入, 这时策略将会试图买入排在前列的备选股票,标记为买入(备选)。 如果被持仓的股票也在备选名单里,这只股票的信号就是持有(备选), 意思是如果排在它前面的股票可以被买入, 则卖出这只股票, 如果排在前面的股票不能被买入,则可以继续持有这只股票。

备选股票的数量默认是5只, 用户可以在0只(也就是不要备选)和20只之间做调整。

模型I调仓指令首先列出需要卖出的股票, 然后按排名顺序列出需要买入或持有的股票, 排在最大持有只数以外的股票会标记为备选。 举个例子, 一个模型I策略最多持有2只股票, 备选股票数为5只。当前持仓的股票为 股票A(60%)和股票B(40%)。调仓日的调仓指令是:

1. 股票A 卖出 
2. 股票C 买入 
3. 股票D 买入 
4. 股票B 持有(备选) 
5. 股票E 买入(备选) 
6. 股票F 买入(备选) 
7. 股票H 买入(备选) 
8. 股票G 买入(备选) 

以上调仓指令,如果没有停盘和涨跌停这些复杂的因素,调仓结果就是卖出A和B, 买入C和D, C和D的仓位各是50%。

以下例子列出一些停牌情况的调仓结果:

停牌情况      调仓后持有股票 
C停牌        B(50%)和D(50%) --卖出A, 无法买入C,顺位买入D和继续持有B。B和D的仓位重平衡。 
B和C停牌     B(40%)和D(60%) --卖出A, 无法买入C,顺位买入D和继续持有B。B的仓位不变。 
C和D停牌     B(50%)和E(50%) --卖出A,无法买入C 和D, 顺位继续持有B和买入E。 B和E的仓位重平衡。 
A停牌        A(60%)和C(40%) --无法卖出A,只有一个空位,卖出B, 买入C。 A的仓位不变。 
B停牌        B(40%)和C (60%) --无法卖出B, 只有一个空位,卖出A买入C。 B的仓位不变。 

以上策略,在调仓后,仓内两只股票的仓位将尽量调整为50%,即便是A和B一直持有下去它们的仓位也会每次重平衡为50%。 当A和B有停牌的情况时, 停牌股票的仓位不变。 模型I仓位总的原则是:当仓内股票停牌时,这只股票的仓位保持不变, 余下的资金平均买入或持有股票。

一字涨跌停会使一只股票不能买或不能卖,处理方式和停牌一样。 比如,当A一字跌停时,无法卖出,按照A停牌处理。 当C和D一字涨停时,无法买入, 按照C和D停牌处理。当B一字跌停时, 无法卖出, 按照B停牌处理, B一字涨停时,无法买入补平仓位。

模型II调仓

模型II定期卖出符合卖出条件的股票,再用空下的资金按顺序买入在清单里的股票。和模型I不同, 模型II不规定最多持仓股票数,而是规定个股理想仓位。 比如想持有两只股票的策略可以设定理想仓位为50%。当策略买入新股票时,将尽量按照50%的总仓位买入新股票,如果仓内资金不足50%, 则能买多少是多少。 当仓内资金小于理想仓位的十分之一时,则不再买入新股票,以避免造成碎片化持股。比如理想仓位是50%时, 仓内资金小于5%, 则不再买入新股票。 和模型I的一个重要区别是模型II有仓位偏离比例概念, 也就是说只要股票仓位在理想仓位的偏离范围之内,在调仓日就可以保持现有仓位,不作重新平衡。 如果股票仓位在偏离范围之外, 在调仓日就需要减仓或补仓。 比如理想仓位是50%,仓位偏离范围是30%, 则这只股票的最低合理仓位是 50% * (1 - 30%) = 35%, 最高合理仓位 50% * (1 + 30%) = 65%。 当股票仓位高于65%时, 策略会减仓这只股票到理想仓位;当股票仓位低于35%时, 而且被策略选中时,会尽量加仓至理想仓位。

模型II的调仓信号有5个, 卖出,减仓至目标仓位, 持有, 买入,加仓至目标仓位。 (目标仓位也就是理想仓位。)当仓内股票符合一个卖出条件时, 就被卖出; 当仓内股票不符合卖出条件时, 有三种情况, 第一种情况是仓位在偏离范围之内, 维持原有仓位不变, 标记为持有;第二种情况是仓位高于最高合理仓位, 减仓至理想仓位,标记为减仓至目标仓位; 第三种情况是仓位低于最低合理仓位而且被策略选中,加仓至理想仓位, 标记为加仓至目标仓位。一只新股票被策略选中时,将按理想仓位买入, 标记为买入

模型II也有备选股票的概念, 备选只数固定5只。 比如调仓日需要买入1只股票,模型II会推荐 1+5 = 6只买入(或加仓)的股票。 意思是如果排在前面的股票能买入, 就买入, 如果不能买入, 就试图买入排在后一名的股票,直到可以买入股票为止或者扫描完买入清单为止。 当策略有较严格的买入条件时, 比如在新股买入限制里设定排名名次小于等于3, 备选股票可能小于5只股票。

使用一个和模型I类似的例子,一个模型II策略的理想仓位是50%,仓位偏离范围是30%。 备选股票数为5只。当前持仓的股票为 股票A(60%)和股票B(40%)。调仓日的调仓指令是:

1. 股票A 卖出 
2. 股票B 持有 
3. 股票C 买入 
4. 股票D 买入 
5. 股票E 买入 
6. 股票F 买入 
7. 股票H 买入 
8. 股票G 买入 
 

模型II调仓指令首先列出需要卖出和减仓的股票, 然后列出继续持有的股票, 最后列出需要买入和加仓的股票。

上例中股票A满足卖出条件, 需要卖出。 股票B的仓位是40%, 在合理的仓位范围(35%到65%)之内,所以仓位不变,继续持有。 接下会有6股票按先后顺序在买入清单里。 如果所有的股票都可以买卖,调仓的结果是 B(40%),C(50%), D(10%)。也就是卖掉股票A后,将得到60%资金, 用50%买入C,用剩下的10%买入D。 (这里需要注意的是个股的仓位权重是按照调仓日前一天的收盘价算出, 在调仓日, 由于股票价格波动,股票的仓位会变化, 所以股票A被卖出后,得到的资金有可能比60%多,也有可能比60%少, 所以C和D 的仓位,尤其的是D的仓位,会根据调仓日的实际情况作出决定。 这里只是为了说明方便, 忽略价格波动引起的仓位变化。)

以下列出一些停牌情况和调仓结果的例子:

停牌情况      调仓后持有股票 
C停牌        B(40%),D(50%), E(10%)  --卖出A, 无法买入C,顺位买入D和E。 
A 停牌       A(60%), B(40%) 			--无法卖出A, 无法调仓。 
C和D停牌     B(40%),E(50%),F(10%)   --卖出A,无法买入C 和D, 顺位买入E和F。

以上例子表明, 模型II会尽量按理想仓位买入新的股票, 当资金不足时, 也会买入部分仓位的股票,而不是让资金闲置。比如用50%的仓位买入C, 用10%的仓位买入D,这时D的仓位小于最小合理仓位35%,所以到下一个调仓日, 如果有足够资金而且D排在股票清单前列,将被加仓。

模型II另一特点是不会频繁自动平衡仓位,只要个股仓位在合理范围之内,仓位就保持不变,这和模型I在每个调仓日重平衡仓位很不一样。

以上所介绍的都是果仁量化引擎如何去执行调仓指令,果仁的调仓历史和实盘收益是按照这一套规则计算出来的。 用户在实际执行调仓指令时,在仓位和买卖价格方面必然会有一些差别, 最后的结果可能比果仁的结果好也有可能比果仁的结果差。

股票池示例

用户有很多时候需要在指定的几只股票或几只基金里制作轮动策略, 比如在4只银行股票里轮动或者在两个基金里做二八轮动。 这时候, 就需要使用股票池(或者基金池)。

一个股票池可被看作一个自定义投资域,股票池功能可以让用户为策略设定一个更灵活的投资域。 用户可以到我的主页里创建股票池. 股票池分为三种:静态股票池,动态股票池和合成股票池静态股票池是一个手工键入的股票代码集合(或者拷贝粘贴一个股票代码表)。静态股票池是最常用的一个股票池,使用静态股票池用户可以实现几只股票之间的轮转策略,比如几个银行股票之间的轮转策略。 动态股票池是根据选股条件和排名条件产生的动态股票集合,股票清单可以每日动态变化。 使用动态股票池,用户可以实现分层量化策略,也就是将筛选排名条件分在两步里完成,这样策略的表达能力更强。比如用户可以首先创建一个动态股票池: 总市值和股价综合排名最小的100只股票,然后再在这个股票池里面选择市盈率最小的10只股票。动态股票池创建界面和策略创建界面及其相似,只是更简单些,没有策略回测那些设置。合成股票池可以实现两个股票池之间的集合操作, 目前合成股票池的功能还很简单,只实现了黑名单的功能。 也就是股票全集减去黑名单股票池。

创建股票池在个人主页的股票池页进行。一经创建,就可以在创建股票策略->选股设置页面里的选择范围使用股票池。 选择范围默认是全部股票, 用户可以通过下拉菜单看到可以使用的股票池。

基金池和股票池基本一样,区别是基金池里的代码都是基金代码,而股票池里的代码是股票代码。基金池目前不支持动态基金池, 只有静态基金池和合成基金池。 除了基金以外,静态基金池还可以放入指数代码, 支持指数回测。 比如对上证指数进行回测,可以创建一个静态基金池,键入上证指数代码“000001I”, 在果仁网里,所有的A股指数代码都有一个”I”(大写的i)后缀,以区别于股票/基金代码。

股票池使用示例

示例1 四大银行轮动策略

1 在个人主页—>股票池, 点击’+’图标,首先选择股票池类型, 如下图:

选择股票池类型

2创建一个4大银行的静态股票池, 我们可以将四大银行(即工商银行 601398,建设银行 601939,农业银行 601288,中国银行601988)的股票代码直接输入到股票列表里,然后点击保存。如下图:

四大银行

3 创建股票池完毕后,去创建股票策略->选股设置页面,“四大银行”股票池出现在选择范围的下拉菜单里,如下图。

创建股票策略

4选择四大银行股票池, 就可以制作在四大银行之间轮动的量化策略。使用每日选股可以确认股票池里的股票确实是四大银行。 如下图。

量化策略

5然后可以创建一个量化策略, 持有市盈率最低的一只四大银行股票, 每20个交易日轮动一次。 最近4年的总收益是58.9%,在同一时间段沪深300的总收益只有-1.21%。 这么一个简单的量化轮动策略可以轻易战胜沪深300。如下图

策略结果


示例2 排除四大银行的银行股轮动策略

有用户认为四大银行没有增长潜力, 需要制作非四大行的银行量化轮动策略。 这时候,可以将四大银行股票池作为黑名单,从股票中排除。

1 在个人主页->股票池页面, 创建一个合成股票池“排除四大行“, 定义是”全部股票 排除 四大银行“。

排除四大行

2 在创建股票策略->选股设置页面,选择范围设定为“排除四大行“,行业为 “银行”, 通过每日选股, 可以看到银行股票列表里已经排除四大行。 如下图。

排除四大行

3 现在可以制作出一个非四大行的银行个量化策略。 比如按照示例1的公式做出一个最小市盈率非四大行银行股策略, 最近四年的总收益是181%。如下图。

排除四大行


示例3 指数轮动回测

ETF轮动策略可以使用静态基金池来完成,流程类似于上面两个例子。ETF策略的一个缺点就是历史不够长, 用户可以使用指数来做出更长时间的轮动策略。

1 比如创建一个沪深300 和中小板指数的轮动策略。首先可以创建一个指数池,叫做“沪深中小指数轮动”如下图:

指数的轮动

这里需要注意指数代码后面需要加一个后缀”I”(大写的i), 以便和股票基金代码区别。

2 比如创建一个沪深300 和中小板指数的轮动策略。首先可以创建一个指数池,叫做“沪深中小指数轮动”如下图:

指数池

3设置选股排名条件进行回测, 步骤类似上例, 省略。


示例4 动态股票池示例

使用动态股票池可以做出更加复杂或更加灵活的选股策略。比如从市盈率最小的100只股票里选出市值最小的5只股票持有策略。

1 创建一个叫做“小PE100”的动态股票池,定义是市盈率最小的100只股票。下图显示这个动态股票池的定义。

小PE100

2 基于这个股票池创建一个市值最小的5只股票策略。如下图设置

5只股票

5只股票

3 最近4年的回测结果如下:

回测结果



果仁网要解决的问题

股民选股有不少办法,听朋友推荐,看新闻热点,跟随大神,使用几个常用的技术指标。但是这些选股方法都缺乏科学的评估方法。比如一个股票在过去一个月涨势喜人,在未来一定的时间段上涨的机率到底是多大?回答这种问题,光凭直觉和信心是不够的,因为直觉和信心可以随着市场波动瞬间消失;光凭书本上的死规则也是不够的,因为在股市上没有一成不变的赚钱规则。

专业投资者和一般股民最大的差别是专业投资者有能力将选股策略放回到真实的历史数据中回测,做出客观的评估。

专业投资者的投资流程大致分为3步:

在果仁网上,股民可以使用鼠标点击在几秒之内创建选股策略,并在真实的历史数据中评估策略的有效性。有了这个能力,业余人士和专业人士的差距就大大缩小了。

果仁网的选股策略和回测流程是基于以下投资理念而设计的:

用户首先选择几类指标制定选股策略, 然后查看每日选股结果, 如果符合预期,可在历史的日期区间进行回测。下图展示使用流程,非常简单。

图片描述

图片描述

历史回测的复杂性

历史回测一直是专业投资人的利器,但要做到真实还原历史(point-in-time), 专业分析员需要花费几个星期的编程时间。那么真实还原历史有哪些复杂点?以下举几个例子:

以上只是真实还原历史的一部分复杂点。即便是专业投资者也需要花费很多资源来解决真实还原历史的问题,对于严肃的业余投资者来说,想在真实的历史数据作回测,到目前为止,基本是不可能的。果仁网为一般用户提供了真实的历史回测平台,为理性评估选股策略是否会赚钱提供了可能。

联系我们

关注公众号

加入QQ群

更新日期:2017-01-23