[异世名将的武器袖珍罐 ]m分红网

时间:2019-08-05 18:01:55 作者:admin 热度:99℃
英雄大作战秘籍

        米筐科技专注于用户提供快速便捷、功能强大的量化交易和分析工具。

        用户可以使用基于浏览器(网上回测平台)或本地化(RQAlpha等项目)的米筐科技产品,随时、随地开发自己的交易策略,验证自己的投资思路。

        我们对数据质量、回测系统、模型算法、交互设计、用户界面和用户安全等进行了持之以恒的完善,务求使用户获得最佳的产品使用体验。

        目前,我们嵫经提供了策略回测和实时模拟交易功能;在将来,我们会进一步提供实盘交易支持,使用户在我们的产品平台上,能够一站式地完成交易策略的开发、测试和实盘执行。

        我们渴望和广大宽客一起进步和成长,见证量化投资在中国市场上的普及和发展。

        如果您有任何产品或服务上的建议,或商业上的合作意向,欢迎随时和我们联系。

        我们认真对待任何来自用户和合作伙伴的反馈意见,并始终视之我们进步的动力。

        如何使用本文档在本文档中,我们详细介绍了平台的各项功能和使用方法。

        由于内容较多,在浏览本文档的时候,我们建议您多使用"ctrl+f"的快捷键组合,快速定位到感兴趣的内容上。

        千里之行,始于足下。

        在学习编程的时候,我们都是从打印一句"HelloWorld"开始,踏入到奇妙的程序世界;同样,在本文档的第一部分,我们准备了一个类似"HelloWorld"的简单策略实例,帮助新用户了解量化策略,以及如何使用我们的平台。

        在您亲自动手测试上述"HelloWorld"策略,体会到编写和测试交易策略的奇妙和喜悦以后,就可以开始浏览本文档的余下内容:"数据"部分,介绍了平台上可供使用的、丰富多样的数据"回测设置"部分,介绍了回测系统的各须认设置(例如撮合方式、滑点和期货交易费用等)"进行回测"部分,介绍用户如何使用我们的在线IDE进行策略开发和回测,以及回测过程中可供使用的各个函数和对象;"回测结果分析"部分,我们介绍了策略评估的各类核心量化指标(收益、风险和风险调整后收益),以及进阶分析功能(月度收益、持仓情况等)"策略实例"部分,介绍了更多、更具体的策略实例,帮助你了解见的量化策略开发思路,和如何灵活使用我们提供的数据和功能"实时模拟交易"部分,介绍如何设定实时模拟交易,以更好地评估策略的实盘表现"外部数据和Python模块"部分,介绍了平台支持的外部数据源和Python模块,以及如何引入自定义的Python模块希望通过我们的文档和平台,您能够逐步成长一个优秀的量化策略开发者。

        如果您对我们文档或平台有任何建议,欢迎随时联系我们;如果希望分享编写策略过程中的疑问或心得体会,欢迎来我们的用户社区一起交流讨论;如果你通过实践,获得了表现出色的量化策略,我们有策略英雄榜和实盘竞赛,让你展示自己的成就,和获得实盘资金运行策略的机会。

        实践,思考,交流,成长,米筐科技与你一路同行。

        Python策略HelloWorld以下的策略是最简单的一个买入并持有平安银行(buyandhold)的展示,回测基本流程如下:在创建策略之后,您需要指定回测的起止日期、初始资金以及回测频率。

        在init方法中实现策略初始化逻辑,例如设置合约池、佣金率、保证金率等操作。

        可以选择在before_trading进行一些每日开盘之前的操作,比如获取历史行情做一些数据预处理,获取当前账户资金等。

        在handle_bar方法中实现策略具体逻辑,包括交易信号的产生、订单的创建等。

        handle_bar内的逻辑会在每次bar数据更新的时候被触发。

        回测完成后,在'回测结果'页面会展示回测的仓位、盈亏、交易、风险等信息。

        用户可以导出报告方便分析。

        您可以点击右上角的clone按钮复制到自己的策略列表中进行修改和测试,非简单。

        Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        #在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):context.s1="000001.XSHE"#order是否被发送出去context.fired=False#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#bar_dict[order_book_id]可以拿到某个证券的bar信息#context.portfolio可以拿到现在的投资组合信息#使用order_shares方法进行下单#TODO:开始编写你的算法吧!ifnotcontext.fired:#order_percent并且传入1代表买入该股票并且使其占有投资组合的100%order_percent(context.s1,1)context.fired=True创建新策略创建代码策略您可以通过在'我的策略'下点击'创建新策略'来创建一个新的回测,如下图:需要注意,您在首次创建策略的时候需要指定策略交易的品种(股票,期货,或者两者混合)。

        需要注意,一旦策略创建完毕,交易品种将不能变更。

        运行回测策略算法编辑页面是运行回测的入口,如下图所示:您可以在策略编辑页面中进行以下参数的设置:基础参数:开始日期:回测期间的开始日期结束日期:回测期间的结束日期-如果回测结束日期在今天之后,将会自动使用最后一天的历史数据起始资金:回测的起始资金-您将使用多少钱去投资策略回测频率:可以选择日回测、分钟回测以及tick级别回测高阶设置:基准合约:设置策略表现的对照基准佣金倍率:设置策略佣金在默认佣金基础上的倍数保证金倍率:设置策略保证金在默认保证金率基础上的倍数撮合方式:在勾选日回测或者分钟回测时,可以选择'当前bar收盘'或'下一bar开盘';在勾选tick级别回测时,目前仅支持‘对手方最优’滑点:交易中理想成交价和实际成交价的差异。

        在进行策略回测时,用户可以设置一个滑点参数,来提高买入价或降低卖出价,模拟实际交易中出现的滑点。

        该参数取值在[0,1)之间。

        例如,当股票市价10元,参数设0.1,则回测时买入价10+10*0.1=11元性能分析:勾选该选项之后,策略回测性能分析功能将被开启允许买空:勾选该选项之后,回测中可以允许股票买空分红再投资:勾选该选项之后,基金分红将按照当日净值折算成基金份额;股票分红将按照限制成交量:勾选该选项之后,策略发单成交量将不能超过bar成交量的一定比例成交百分比:与限制成交量联动,用户可以设置成交的比例在设置完回测参数之后,您可以点击'编译策略'来对策略进行编译,发现其中是否有错误;或点击'运行回测'直接运行回测。

        两者的区别如下:编译策略-点击"编译策略"将会使我们的后台实时编译您的算法策略来查询您的策略是否有编译错误并且可以获得一个策略收益的预览。

        编译策略会比完整的回测要快,因此您可以试用这个功能在完整回测前先验证下是否有简单的编译或者运行错误。

        运行回测-点击"运行回测"将会带您进入完整的回测结果页面。

        如果您的策略有编译/运行错误,您将会被停留在改编辑页面以让您先解决问题。

        复权机制复权是用来消除由于除权除息造成的价格、指标的走势畸变。

        举例来说,平安银行最近两年的分红派息时间:除权除息日复权因子2015-04-131.2106832016-06-161.217847平安银行的价格在2015-04-1019.80,在除权除息以后的2015-04-13价格变16.54,如果什么也不做,就会导致K线上的价格在2015-04-13突然降低,复权的作用就是了让股价连续,消除价格和指标的走势畸变。

        见的复权机制有前复权和后复权。

        前复权就是保持现有的价格不变,将以前的价格缩减,在K线上的表现就是将除权除息日之前的K线向下移动;后复权就是保持先前的价格不变,将以后的价格提高,在K线上的表现就是将除权除息日之后的K线向上移动。

        值得注意的是:无论是前复权还是后复权,它们都是以当前时间点复权因子进行数据的转变。

        这就会导致一个问题,假设我们需要回测2016年-2017年的策略的表现,若使用前复权,数据会使用当前(2018年)的复权因子,这样的数据会混杂未来数据(即2018年的复权因子),未来数据对于回测来说是致命的。

        了解决这一问题,RQPro回测使用的数据采用了“动态复权”方式,以策略回测当前日期基准进行前复权。

        用同一个例子来说明:回测2016年-2017年,数据会使用策略回测当前日期(即2017年)的复权因子进行前复权,这样就可以排除未来数据的干扰。

        更加直观的图像如下图所示:目前米筐的API提供两种不同的获得历史数据的方式:history_bars();get_price()。

        其中history_bars()返回的是动态复权的数据;get_price()返回的是前复权的数据,您可以根据自己的需求选择不同的方法。

        基准合约通过引入基准合约,您可以将策略的表现与基准进行对比,以衡量一定时间内策略的超额表现以及相关风险调整收益指标。

        您可以在策略编辑页面"更多"选项下进行基准合约的设置,基准合约可以设置空。

        在初次创建策略的时候,包含股票的策略默认基准合约都是沪深300指数000300.XSHG;单独期货策略默认没有基准合约。

        保证金倍率在进行期货交易时,您可以通过设置保证金倍率来进行保证金的调整,这一倍率不能小于1。

        调整依据基准是交易所规定的最低保证金比例,可以通过instruments这一方法查询到。

        您可以在策略编辑页面"更多"选项下进行保证金倍率设置。

        该设置在单一股票类型策略中不会出现。

        交易费用中国A股市场交易贻分主要包含券商手续费和印花税两部分,公募基金交易主要由申购、赎回两部分构成(暂不考虑认购情况),期货交易主要佣金费用。

        在新版策略框架中,原有通过context.commission设置佣金费率的方式嵫经被废弃,不再生效。

        您需要在策略参数高级设置界面中进行佣金倍率的设置,1即代表默认佣金费率的一倍。

        该倍率不会影响最低佣金以及印花税的收取标准。

        中国A股交易费用A股市场交易费用主要由佣金和印花税两部分组成,佣金目前双边收费,每笔委托最小收取标准5元。

        默认佣金费率是成交额的万分之8,即0.0008。

        如果设置倍率10,则实际影响策略的佣金费率就变成了0.008。

        该倍率并不会影响5元的最小佣金水平。

        印花税只对卖出方单边征收,对买入方不征税,目前按照成交金额的0.1%收取。

        由于是强制征收,印花税嵫经默认加入到我们的收益计算中。

        中国公募基金交易费用米筐目前提供了公募基金数据。

        基于公募基金的每日净值数据,策略引擎框架提供了对公募基金回测的支持。

        场外基金交易费用由申购、赎回两部分构成(暂不考虑认购情况)。

        按照基金种类不同,系统给出了不同的默认费率。

        申购、赎回的扣费方式采用外扣法,收取费用净申购金额=\frac{申购金额}{1+申购费率}净申购金额申购金额申购费率申购费用=申购金额-净申购金额申购费用申购金额净申购金额不同种类的基金其默认费率如下:费用股票型债券型混合型、QDII指数型(股/债)其他申购费率1.5%0.6%1.5%1.5%0赎回费率0.5%0.5%0.5%0.5%0中国期货交易费用期货交易费用只包括佣金这一个组成部分。

        佣金收取方式比较复杂,收取方式有按照名义价值的一定比例收取和按照成交合约张数收取两种方式,同时个别合约区分平今仓费率。

        初始默认费率表如下请参考:品种交易所佣金类型回测佣金费率回测平今费率铝AL上期所按成交量30锡SN上期所按成交量30橡胶RU上期所按成交额0.000450.00045线材WR上期所按成交额0.000040.00004螺RB上期所按成交额0.0000450燃油FU上期所按成交额0.000020.00002金AU上期所按成交量100铜CU上期所按成交额0.0000250银AG上期所按成交额0.000050铅PB上期所按成交额0.000040镍NI上期所按成交量60热轧卷板HC上期所按成交额0.000040锌ZN上期所按成交量30沥青BU上期所按成交额0.000050原油SC上海国际能源交易中心按成交量200棕榈油P大商所按成交量2.50细木工板BB大商所按成交额0.00010.00005鸡蛋JD大商所按成交额0.000150.00015焦炭J大商所按成交额0.000060.00003聚乙烯L大商所按成交量20聚丙烯PP大商所按成交额0.000050.00025铁矿石I大商所按成交额0.000060.00003豆粕M大商所按成交量1.50玉米C大商所按成交量1.20焦煤JM大商所按成交额0.000060.00003中密度纤维板FB大商所按成交额0.00010.00005玉米淀粉CS大商所按成交量1.50豆一A大商所按成交量20豆二B大商所按成交量22聚氯乙烯V大商所按成交量20豆油Y大商所按成交量2.50乙二醇EG大商所按成交量40=锰硅SM郑商所按成交量30白糖SR郑商所按成交量30菜籽粕RM郑商所按成交量1.50油菜籽RS郑商所按成交量20早籼稻RI(ER)郑商所按成交量2.52.5TA郑商所按成交量33动力煤ZC(TC)郑商所按成交量40晚籼稻LR郑商所按成交量30甲醇MA(ME)郑商所按成交量1.40粳稻谷JR郑商所按成交量33硅铁SF郑商所按成交量30菜籽油OI(RO)郑商所按成交量2.50棉花CF郑商所按成交量4.30玻璃FG郑商所按成交量30普麦PM郑商所按成交量55强麦WH(WS)郑商所按成交量2.50棉纱CY郑商所按成交量40苹果AP郑商所按成交量1.50沪深300IF中金所按成交额0.0000230.0023中证500IC中金所按成交额0.0000230.0023上证50IH中金所按成交额0.0000230.00235年期国债TF中金所按成交量3010年期国债T中金所按成交量302年期国债TS中金所按成交量80撮合机制在最新的版本中,我们加入了允许用户自定义撮合机制的功能。

        您可以在策略编辑页面"更多"选项下选择不同的撮合机制。

        目前提供的撮合方式有以下三种:1.当前收盘价。

        即当前bar发单,以当前bar收盘价作参考价撮合。

        2.下一开盘价。

        即当前bar发单,以下一bar开盘价作参考价撮合。

        3.对手方最优。

        tick回测专用[仅限期货],以发单时下一个tick对手方最优报盘价格作参考价撮合成交(无对手盘时以最新价作参考价)。

        一个完整的撮合机制需要包括两个:参考价与投资者在下单时的委托方式。

        投资者可以选择的委托方式包括有限价单和市价单。

        限价单(LimitOrder)如果买单价格>=参考价,或卖单价格<=参考价,以参考价加入滑点影响成交。

        市价单(MarketOrder)直接以参考价加入滑点影响成交。

        对于分钟回测与日回测来说,成交数量都不超过当前bar成交量的25%。

        一旦超过,市价单会在部分成交之后被自动撤单;限价单会一直在订单队列中等待下一个bar数据撮合成交,直到当日收盘。

        当日收盘后,所有未成交限价单都将被系统自动撤单。

        您可以在策略编辑页面"更多"选项下进行是否开启限制成交量,以及开启之后成交百分比的设置。

        对于tick回测来说则没有成交量的限制。

        当前收盘价:在一个handelbar内下单,下单时立刻撮合成交(成交价取决于撮合机制以及滑点设置)。

        下一开盘价:在一个handle_bar内下单,在该handle_bar结束时统一撮合成交(成交价取决于撮合机制以及滑点设置)。

        对手方最优:在一个handle_tick内下单,在该handle_tick结束时统一撮合成交(成交价取决于撮合机制以及滑点设置)。

        所以在“下一开盘的撮合方式下,handle_bar内发单之后立刻通过cancel_order对该订单进行撤单操作,是一定会撤单成功的。

        但在“当前收盘的撮合方式下则很可能撤单失败,因“当前收盘中下单之后立刻撮合成交。

        需要注意,在当前的分钟回测撮合模式下,用户在回测中无法通过在scheduler调用的函数中一次性实现卖出->资金释放->买入这种先卖后买的逻辑的。

        因在分钟回测中,卖出并不能立刻成交。

        举例来说,策略A设置每周一开盘进行调仓操作,先卖后买。

        那么,以下这种方式在分钟回测中无法实现卖出资金立刻释放的(在开启验资的风控情况下,可能导致后面的买入操作因资金不足而拒单):#scheduler调用的函数需要包括context,bar_dict两个参数defrebalance(context,bar_dict):order_shares('000001.XSHE',-100)order_shares('601998.XSHG',100)definit(context):scheduler.run_weekly(rebalance,weekday=1)有如下几种情况无法完成下单:portfolio内可用资金不足下单数量不足一手(股票100股)下单价格超过当日涨跌停板限制当前可卖(可平)仓位不足股票当日停牌合约嵫经退市(到期)或尚未上市另外需要注意的是,如果当时市场处于涨停或跌停这种单边市情况,买单(对应涨停),卖单(对应跌停)是无法成交的。

        尽管bar数据中可能成交量不0.判断单边市的标准我们采用的是:当前bar数据的收盘价等于涨停价,则当前市场处于涨停状态。

        跌停也是类似处理。

        滑点了更好模拟实际交易中订单对市场的冲击,我们引入滑点的设置。

        您可以在策略编辑页面"更多"选项下进行滑点设置,允许设置的范围是[0,1)。

        该设置将在一定程度上使最后的成交价"恶化",也就是买得更贵,卖得更便宜。

        我们的滑点方式是按照最后成交价的一定比例进行恶化。

        例如,设置滑点0.1,那么如果原本买入交易的成交价10元,则设置之后成交价将变成11元,即买得更注意,滑炻认0,原有的默认0.246%的滑点值以及通过context.slippage设置的方式被废弃。

        性能分析开启该功能之后,策略回测完毕将会在回测详情页面的"性能分析"选项卡下查看策略运行性能报告。

        需要注意的是,开启该功能将会导致策略运行效率的下降。

        在回测中您无须担心拆分对股票价格带来的影响因我们嵫经在数据的预处理中准确地帮你做了这个工作。

        股息在股息事中有四个关键的日期:1.方案实施公告日:公司公布股息分配方案的日期。

        2.股权登记日:在股权登记日这一天收盘时仍持有或买进该公司的股票的投资者可以享有此次股息分红。

        3.除权除息日:股权登记日的下一个交易日即是除权除息日,该日证券交易所会计算出股票的除权除息价,以作投资者在除权除息日开盘的参考。

        4.股息到帐日:现金股息划拨到投资者资金账户的日期。

        当您的投资策略在股权登记日时仍持有分股息的股票,那么您的投资策略将有资格参与此次股息分红。

        在除权除息日结束的时候您投资组合中的DividendRecivable会增加对应持有股票的股息分红数目。

        然后在股息到帐日那天DividendRecivable将会被搬入投资组合中的AvailableCash-您最终拿到了应收股息分红的金额,并且可以用这笔钱进行再投资了。

        分红再投资红利再投资俗称利滚利,是指基金进行现金分红时,基金持有人将分红所得的现金以当天基金价格直接用于购买该基金,增加原持有基金的份额。

        开启该功能以后,基金分红将按照当日净值折算成基金份额。

        仓位管理在交易中国A股市场证券时引入了T+1机制,当日买入的股票需要在下一日才能够卖出。

        另外,如果持有仓位的股票嵫经退市,那么系统会自动将仓位清零。

        此时,投资组合价值将会出现"跳水";如果持有期货直到到期,那么会按照到期日的结算价进行现金交割。

        另外,所有仓位均会在当天收盘之后进行统一清理,被平掉的仓位不会出现在下一交易日初始的持仓中。

        但在日内,存在持仓0的仓位记录(它还记录了该仓位的建仓价格、累计盈亏等信息,具体请参考仓位信息)。

        日志功能通可以通过日志来了解程序的行,或者用日志类解决程序中暗藏的问题。

        同样的,您也可以在您的策略中通过日志来协助开发与调试策略。

        譬如,您希望在第一个交易日打印一条日志,把这一天发单的情况打印出来。

        了实现这一功能,您只需如下图所示在代码中调用日志类即可:需要注意,回测中系统只会保存开始的10000条记录,多出的信息将无法被保存。

        在实盘模拟中,每天的日志上限是1000条。

        股票自动搜索及补全Windows用户:输入ctrl+iMac用户:输入command+iLinux用户:输入ctrl+i当您输入了这个组合键之后,Ricequant在线IDE就会进入股票代码搜索和自动完成模式,接着您可以输入任何一种进行搜索和自动补全:股票数字代码-自动补全股票数字代码,比如"000024.XSHE":股票中文全称-自动补全股票中文全称,比如"招商地产"股票缩写-这里比较特殊,自动补全股票中文全称,因股票缩写并不是独一无二的,比如ZSDC补全"招商地产"我们强烈推荐您使用这个功能来避免手动输入股票代码带来的不便,并且容易犯错误,下面还有一个动态图来解释股票自动搜索及补全功能:鉴于不同合约交易时间的不同(例如股票没有夜间交易,期货一些品种有夜盘交易),您在编写策略的时候需要注意策略的有效运行时间。

        比如在2015年12月之前,中金所股指期货的交易时间段是09:1511:30,13:0015:15,比A股市场多出了30分钟。

        在这个时候进行混合回测的时候就需要通过订阅的方式让策略引擎'知道'handle_bar是要在每天09:16产生第一个bar数据,而不是股票的09:31。

        如果您创建的是单一的期货策略,则必须在策略初始化的时候订阅(subscribe)有效期货合约。

        由于期货有到期日,所以您需要保证在回测期间,始终都有正在交易的合约被订阅。

        混合策略的股票、期货子账户信息可以分别通过context.stock_account以及context.future_account获取到。

        向导式策略生成器创建向导式策略您可以通过在'我的策略'下点击'向导式策略生成器'来通过向导式生成策略,如下图:您可以通过选股设置实现投资域的筛选,并利用各类指标设置选股条,最后寻出的股票进行排序。

        界面如下图:股票池设置该部分不仅支持不同股票池的偏好设置,还支持板块、行业、ST股这三个细分投资域的偏好设置。

        股票池选择默认项性质选项范围选择股票池全市场单选全市场(全部A股市场)、沪深300、上证50、中证500板块全部多选全部(所有板块)、主板、中小板、创业板行业全部多选申万一级行业分类的28个行业,包括农林牧渔、采掘、化工、钢铁等ST股票包含ST单选包含ST、过滤ST、仅包含ST选股指标界面左边是米筐提供的所有指标的展示区域,右边是您所选择指标的设置区域。

        基于购物车理念,您可以更加方便地对您选择的指标进行参数调整,界面如下图:您可以通过点击选择指标,所选出的指标会右边“我的指标”中展示,并进行相应的设置。

        选股指标包含五个分类,具体详情如下:分类类别详情行情开盘价、收盘价、最高价、最低价、成交量、成交额、换手率、上市天数技术指标MA、MACD、KDJ、CCI、WILLR、ATR、ROC、TRIX、RSI、MFI、阿隆指标、布林线等财务指标估值类、盈利能力类、偿债能力类、营运能力

类、成长能力类等财务数据营业收入类、营业支出类、收益利润类、资产类、负债类、权益类、经营现金流、投资现金流、筹资现金流等形态指标两只乌鸦、三只乌鸦、三胞胎乌鸦、红三锤头、倒锤头、乌云盖顶、晨星、黄昏之星等其中,财务指标与财务数据的差异,财务数据是原始数据,财务指标是基于财务数据得到的指标。

        排序指标可用于排序的指标有四类,分别行情指标、技术指标、财务指标、财务数据,比选股因子少了形态指标。

        选股条您可以利用选股指标对股票池粗筛选出的股票进一步进行筛选。

        您可在选股条部分寻股指标的数值范围进行设置,如下图:您可以在该部分进行如下功能的设置:分类支持选项行情大于、小于、区间、排名%区间(默认升序)、大于N日均值、小于N日均值、介于N1,N2均技术指标大于、小于、区间、金叉、死叉、多头、空头、价格多头、价格多头财务指标大于、小于、区间、排名%区间(默认升序)财务数据大于、小于、区间、排名%区间(默认升序)形态指标无选项其中,对于技术指标,您可基于自己的偏好调整其对应的参数。

        自定义规则了支持更多个性化规则,您也可以点击“添加自定义规则”,通过比对两个指标的数值大小,筛选出符合您条的股票。

        排序条对于您筛选出的股票,您可以从排序指标中选出用于排序的指标,在排序条部分对所选指标进行升序或降序的处理,并赋予不同的权重,从而实现对股票的排序。

        对于技术指标,您可以对其参数进行偏好设置。

        如下图:您可以在模型选择中设置您策略所需要的模型,米筐提供两种模型,分别定期轮动、条触发。

        定期轮动定期轮动定期调仓交易模型,您可以基于选出的股票,设置调仓周期、最大持仓股票数量。

        该模型会定期在调仓日卖出不符合选股条的股票,等权买入符合条的股票。

        界面如下图:条触发对于条触发模型,您可以设置买入条、卖出条。

        界面如下:区别于定期轮动模型,条触发模型将调仓周期分了三个周期,分别选股周期、买入周期、卖出周期。

        选股周期:该周期决定多少个交易日执行一次选股操作,即筛选出满足选股设置里选股条的股票并按排序条对其排序。

        一般用财务指标实现股票池的筛选,由于企业财务指标大多属于季度更新,故该周期可以设置长一些。

        买入周期:该周期决定多少个交易日执行一次买入操作,即买入满足买入条的股票。

        买入条中一般用于技术指标、形态指标等比较难以捕捉的信号的捕捉,故买入周期可以设置短一些。

        卖出周期:该周期决定多少个交易日执行一次卖出操作,即卖出满足卖出条的股票。

        买入条:您可以在买入条设置选股周期、买入周期、最大持仓股票数、个股最大持仓比重,同时可以通过对行情、技术指标、财务指标、财务数据、形态指标设置买入条。

        这部分提供的指标及指标设置情况可参考选股指标、选股条。

        卖出条:您可以在卖出条设置卖出周期,同时也可设置行情、技术指标、财务指标、财务数据、形态指标。

        这部分提供的指标及指标设置情况可参考选股指标、选股条。

        风险控制您可以在“风险控制”部分对策略的风险进行设置。

        风险控制支持对止盈止损、大盘择时(开仓)、大盘择时(平仓)的设置。

        如下图:风险控制可以实现对用户策略的整个过程风险的全面控制。

        在开仓前,可以通过大盘择时来判断是否买入;在买入后,可以通过止盈止损和大盘择时(平仓)实现事后风控。

        回测设置您可以在“策略回测”部分对回测的参数进行相应的设置,如下图所示:可以设置的参数如下:参数名解释开始日期回测期间的开始日期结束日期回测期间的结束日期-如果回测结束日期在今天之后,将会自动使用最后一天的历史数据调仓周期回测期间的调仓周期,可根据偏好进行设置-默认收盘后进行相应的调仓起始资金回测的起始资金-您将使用多少钱去投资策略基准合约设置策略表现的对照基准在设置完回测参数之后,可通过‘保存’按钮来保存您的所有设置;也可以点击'快速回测'来对策略进行快速回测,以预览策略收益;或点击'运行回测'直接运行回测。

        两者的区别如下:快速回测-点击"快速回测"将会使我们的后台实时编译您筛选结果生成的策略来获得一个策略收益的预览。

        快速回测会比完整的回测要快,它能高效地展示策略和基准的收益曲线,因此您可以试用这个功能在完整回测前先验证下策略的收益情运行回测-点击"运行回测"将会带您进入完整的回测结果页面,您可以查看更加详细的策略回测分析结果,帮助您对策略的表现实现更细致的评估。

        回测结果分析回测结果当回测运行没有出错,回测结果页面将会载入您的投资组合的各种交易、盈亏和风险信息。

        下图是回测结果的介绍:回测设置和状态:在这里您能够看到策略名称、交易的品种(股票还是期货)、回测起止日期、初始资金、回测频率等信息,并能够将回测分享到社区收益概览:展示策略的风险调整收益(Sharpe,InformationRatio等)、回测收益图、每日盈亏图以及成交记录图。

        您自己通过plot画图结果也会在该页面展示交易详情:展示回测期的历史交易记录,包括成交时间、成交价、费用等信息每日持仓:展示回测期的仓位信息,包括建仓成本、累计盈亏等信息账户信息:展示回测期的账户信息,包括账户总权益、可用资金、当日盈亏、累计盈亏等信息输出日志:您在策略中通过print或者打印日志的方式输出的信息都在这里展示。

        需要注意,回测最多保存最新10000条日志记录收益表格:您在这里看到回测期间每个月截止往前的1个月、3个月、6个月、12个月的投资策略和基准策略的收益详细情风险表格:您在这里看到投资策略回测期间的每个月截止往前的1个月、3个月、6个月、12个月的各种风险指标数值。

        其中波动值表格中您还可以看到投资策略和基准策略的比较。

        回测结果进阶分析在回测结果页面新加入的"进阶分析"选项卡允许用户在每次回测运行完毕之后进行诸如月度收益分布、胜率分布等分析。

        净值曲线反映策略与基准合约在回测期间的累计净值表现,以100%起点。

        其中,对数轴累计净值曲线将原有轴累计净值在轴的刻度以10底数进行了取对数计算。

        这种显示方式并未改变累计净值水平,但在收益变动剧烈的情况下(比如暴涨10倍)能够较好地显示出策略净值不同时期水平。

        波动率调整累计净值意思是将策略的累计净值根据基准的波动率进行调整。

        举例来说,在回测期间基准合约的波动率2,而策略的波动率是4.那么尽管策略在回测期间取得了较高的收益,但在波动率调整后,策略整体收益率要变原有水平的一半。

        这种方式能够简单直观地对比剔除波动率这一影响因素之后策略与基准的收益水平。

        收益详情月度收益率以等温图的方式显示每月累计收益情况;年度收益率计算每个自然年的策略累计收益情持仓分析持仓占比每日股票持仓市值占投资组合总权益的比重;每日换手率计算每日买、卖成交额绝对值加总除以2再除以投资组合总权益。

        胜率分布回转交易(roundtriptrade)按照一定规则的买入、卖出医的交易。

        举例来说:1.回测期间发生了以下几笔交易:11-1509:45买平安银行100股@10元11-1511:00买平安银行100股@12元11-1609:45卖平安银行100股@13元11-1611:00买平安银行100股@14元11-1614:00卖平安银行100股@15元2.每日对每只股票的买单、卖单进行汇总,得到一个总和的买单与一个总和的卖单。

        进行汇总之后:11-15买平安银行200股@11元11-16买平安银行200股@14.5元卖200股@14元3.按照先进先出的规则将买单、卖单进行医,得到回转交易:回转交易1:11-15日买入建仓,11-16日卖出平仓回转交易2:11-16日买入建仓,策略回测到期日的收盘价成交价自动卖出平仓情景分析回测期间如果覆盖以下时间段,分析模块会将基准与策略净值在每段时期的期初全部调整100%,重点展示特定时期策略表现。

        2014-12-01至2015-03-01牛市调整期2015-03-03至2015-06-03创业板大牛市2015-06-01至2015-09-01股灾暴跌2015-12-15至2016-03-15熔断暴跌收益指标回测收益率:策略在期限内的收益率。

        回测收益=\frac{期末投资组合总权益-期初投资组合总权益}{期初投资组合总权益}回测收益期末投资组合总权益期初投资组合总权益期初投资组合总权益年化收益率:采用了复利累积的年化方式计算得到的年化收益。

        年化收益率=(1+R)^\frac{1}{t}-1年化收益率t=\frac{策略运行的交易日}{252}策略运行的交易日R=累计收益率累计收益率基准收益率:相同条下,一个简单的买入并持有基准合约策略的收益率(默认基准合约沪深300指数,这里假设指数可交易,最小交易单位1)。

        基准收益率=\frac{买入并持有至期末投资组合总权益-期初投资组合总权益}{期初投资组合总权益}基准收益率买入并持有至期末投资组合总权益期初投资组合总权益期初投资组合总权益每日收益率:通过投资组合权益计算出的日收益率。

        每日收益率=\frac{当前交易日总权益-前一交易日总权益}{前一交易日总权益}每日收益率当前交易日总权益前一交易日总权益前一交易日总权益阿尔法(alpha,\alpha):CAPM模型表达式中的残余项。

        表示策略所持有投资组合的收益中和市场整体收益无关的部分,是策略选股能力的度量。

        当策略所选股票的总体表现优于市场基准组合成分股时,阿尔法取正值;反之取负值。

        \alpha=E[r_p-[r_f+\beta\cdot(r_b-r_f)]]其中r_p策略所持有投资组合收益;r_f无风险组合收益;\betaCAPM模型中的贝塔系数;E[\cdot]表示随机变量的期望。

        风险指标年化波动率(volatility,\sigma_t):策略收益率的标准差,最用的风险度量。

        波动率越大,策略承担的风险越高。

        这里假设一年有244个交易日。

        \sigma=\sqrt{\frac{244}{n-1}\sum_{i=1}^{n}[r_p(i)-\bar{r_p}]^2}其中,n回测期内交易日数目;r_t(i)表示第i个交易日策略所持有投资组合的日收益率;\bar{r_p}回测期内策略日收益率的均值。

        年化跟踪误差(trackingerror,\sigma_t):纯多头主动交易策略(阿尔法策略和基准择时策略)收益和市场基准组合收益之间差异的度量。

        跟踪误差越大,意味着策略所持有投资组合偏离基准组合的程度越大。

        需要注意,跟踪误差不适用于多-空结合的对冲策略的风险评估。

        \sigma_t=\sqrt{\frac{244}{n-1}\sum_{i=1}^{n}[r_{pa}(i)-\bar{r_{pa}}]^2}r_{pa}(i)=r_p(i)-r_b(i)其中,n回测期内交易日数量;r\_{pa}(i),r_p(i),r_b(i)分别表示第i个交易日策略所持有投资组合的日主动收益、日收益率和基准组合的日收益率。

        年化下行波动率(downsiderisk,\sigma_d):相比波动率,下行波动率对收益向下波动和向上波动两种情况做出了区分,并认只有收益向下波动才意味着风险。

        在实际计算中,我们统一使用基准组合收益目标收益,作向上波动和向下波动的判断标准。

        \sigma_d=\sqrt{\frac{244}{n-1}\sum_{i=1}^{n}[r_p(i)-r_b(i)]^2\cdotI(i)}I(i)=\begin{cases}1,\spacer_p(i)\ltr_b(i)\{内容},\spacer_p(i)\geqslantr_b(i)\end{cases}其中,n回测期内交易日数量;r\_p(i),r\_b(i)分别表示第个交易日策略所持有投资组合的日收益率、基准组合的日收益率;I(i)指示函数(indicatorfunction),如果第i个交易日策略所持有投资组合收益低于基准组合收益,则标记1(向下波动),否则标记0(向上波动)。

        *贝塔(beta,\beta):*CAPM模型中市场基准组合项的系数,表示资产收益对市场整体收益波动的敏感程度。

        \beta=\frac{Cov(r_{p,e},r_{b,e})}{Var(r_{b,e})}其中r_{p,e}策略收益率;r_{b,e}市场基准组合收益率;Cov(\cdot)表示协方差;Var(\cdot)表示方差Beta值解释举例\beta<0投资组合和指数基准的走向通反方向反向指数ETF或空头头寸\beta=0投资组合和指数基准的走向没有相关性固定收益产品,他们的走向通和股市不相关0<\beta<1投资组合和指数基准的走向相同,但是比指数基准的移动幅度更小稳定的股票,比如制作肥皂的公司的股票,通和市场的走势相同,但是受到每日的波动影响更小\beta=1投资组合和指数基准的走向相同,并且和指数基准的移动幅度贴近蓝筹股,指数中占比重大的股票\beta>1投资组合和指数基准的走向相同,但是比指数基准的移动幅度更大受每日市场消息或是受经济情况影响很大的股票*最大回撤(maxdrawdown):*在回测期内,在任一交易日往后推,策略总权益走到最低点时收益率回撤幅度的最大值。

        最大回撤是评估策略极端风险管理能力的重要指标。

        其计算方式如下:Drawdown_t=\begin{cases}0&\mbox{if}NET_t=min_{j\geqt}NET_j\\\frac{NET_t-\min_{j\geqt}NET_j}{NET_t}&\mbox{else}\end{cases}NET\text{某期净值}某期净值MaxDrawdown={max(Drawdown_t)}风险调整后收益指标夏普率(sharperatio):衡量策略相对于无风险组合的表现,是策略所获得风险溢价的度量即如果策略额外承担一单位的风险,可以获得多少单位的收益作补偿。

        Daily\spaceSharpe\spaceRatio=\frac{\bar{r_e}}{\sigma_e}\bar{r_e}=\frac{1}{n}\sum_{i=1}^{n}[r_p(i)-r_f(i)]\sigma_e=\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}[r_p(i)-r_f(i)-\bar{r_e}]^2}Sharpe\spaceRatio=\sqrt{244}\cdotDaily\spaceSharpe\spaceRatio其中\bar{r\_e}回测期内策略日超额收益率均值;n回测期内交易日数目;r\_p(i),r\_{f}(i)分别第i个交易日策略所持有投资组合的日收益率以及无风险组合日收益率;\sigma\_e策略超额收益率的波动率。

        索提诺比率(sortinoratio):衡量策略相对于目标收益的表现。

        其使用下行波动率作风险度量,因此区别于夏普率。

        在目前的计算中,我们使用基准组合收益作目标收益,以此作区分向上波动和向下波动的标准。

        Daily\spaceSortino\spaceRatio=\frac{\sqrt{244}\cdot\bar{r_e}}{\sigma_d}\bar{r_e}=\frac{1}{n}\sum_{i=1}^{n}[r_p(i)-r_f(i)]Sortino\spaceRatio=\sqrt{244}\cdotDaily\spaceSortino\paceRatio其中\bar{r\_e}回测期内策略日超额收益率均值;n回测期内交易日数目;r\_p(i),r\_{f}(i)分别第i个交易日策略所持有投资组合的日收益率以及无风险组合日收益率;\sigma\_d策略年化下行波动率。

        信息比率(informationratio):衡量策略相对于市场基准组合的表现。

        一般用于评估纯多头的主动交易策略(包括阿尔法策略和基准择时策略)。

        需要注意的是,信息率不适用于多-空结合的对冲策略的表现评估。

        Daily\spaceInformation\spaceRatio=\frac{\sqrt{244}\cdot\bar{r_{pa}}}{\sigma_t}\bar{r_{pa}}=\frac{1}{n}\sum_{i=1}^{n}[r_p(i)-r_b(i)]Information\spaceRatio=\sqrt{244}\cdotDaily\spaceInformation\spaceRatio其中\bar{r_{pa}}回测期主动日收益率均值;n回测期内交易日数目;r_p(i),r_b(i)分别第i个交易日策略所持有投资组合的日收益率以及基准组合日收益率;\sigma_t策略跟踪误差。

        在我们提供的三个风险调整后收益指标中,信息率用于评估投资组合相对于市场基准组合的表现,一般适用于纯多头的主动交易策略(包括阿尔法策略和基准择时策略);夏普率用于评估投资组合相对于无风险组合的表现,一般适用于多-空结合的交易策略(例如市场中性策略或配对交易策略),或没有公认市场基准组合的投资品种的交易策略(例如期货CTA策略)。

        索提诺比率使用下行波动率作风险度量,因而有别于信息率和夏普率。

        下行波动率区分了收益向上波动和向下波动两种情况,并认收益向下波动才代表风险。

        因此,索提诺比率的优点,在于其使用的风险度量更切合我们实际投资中面对的风险;而其缺点则是不如信息率和夏普率用,认知度较低,且其目标收益(区分收益波动是向上还是向下的标准)的设定是任意的,并不依赖于任何基准组合(不同于信息率和夏普率)。

        因此,在横向对比不同策略或基金业绩时,我们需要使用统一的目标收益来区分向上波动和向下波动。

        在实际计算中,我们以无风险组合收益作索提诺比率的目标收益。

        绩效分析在运行完回测之后,在回测结果页面点击右上方的“绩效分析”按键就开启了对于策略表现的分析。

        目前该分析主要包括Brinson分析,风格分析,净值回归以及风险分析几部分。

        需要注意的是,目前绩效分析暂时只支持股票类型投资组合。

        Brinson分析在“Brinson分析”部分,我们使用BrinsonModel对主动投资组合进行业绩归因。

        BrinsonModel假设用户的投资流程可分两个步骤:板块配置和板块内选股。

        和市场基准组合相比,如果投资者能做到以下任意一项:高配表现好的板块;低配表现差的版块;在某些板块中具备较强的选股能力,都有可能获得比市场基准组合更好的业绩。

        了定量地评估“板块配置”和“板块内选股”这两步对投资组合收益的贡献,用户可以使用BrinsonModel对投资组合的主动收益(投资组合和基准组合的收益差值)进行业绩归因,以完善其投资流程(例如选股收益高的板块配置更多的资金等)。

        1.投资组合和基准组合的板块权重配置用户选择基准组合(目前支持沪深300和中证500),选择板块分类(目前支持MSCI和申万一级行业分类),设置分析区间的起始和结束时间,点击计算,该分析图表展示了投资组合和基准组合在每个板块的平均配置权重(timeweightedaverage),投资组合减去基准组合的板块配置差值即投资组合在该板块的主动权重。

        2.投资组合和基准组合的收益解析归因Brinson模型是一个基于板块的业绩归因模型,投资组合相对基准组合的主动收益的来源是板块配置的差异,以及在板块中收益的差异(选股的差异),所以下面的表格详细分解了两个组合在各个板块的权重和收益,并且进行归因计算。

        该表格可以分三个部分:第一部分板块权重,详细展示了投资组合和基准组合在不同板块的权重配置情况,并计算了二者的配置差异。

        第二部分板块收益,展示了投资组合和基准组合在不同板块的绝对收益情况,两者的差值板块收益差值。

        第三部分归因计算部分,计算了投资组合与基准组合在不同板块上的收益差别的来源,包括板块配置差异,板块内选股差异以及交互作用差异。

        投资组合超过基准组合的收益部分主动收益,Brinson归因分析模型把收益部分分解三个部分:配置收益,选股收益和交互收益。

        板块配置收益:体现了投资组合对板块配置的能力,在图表中的计算公式基准组合相对收益*板块权重差值板块选股收益:体现了投资组合在特定板块内的选股能力,在图表中的计算公式板块收益差值*基准组合权重交互收益:是板块权重差值和板块收益差值的交互项,在图表中的计算公式板块收益差值*板块权重差值板块主动收益三项收益计算的总和,等于投资组合相对基准组合在该板块的主动收益。

        上图表明厄姆数字价值投资法的收益主要来源于精确的选股能力,并且选股带来的收益甚至弥补了部分资产配置不利造成的损失。

        风格分析风格分析是指对策略或基金的投资风格或偏好进行分析。

        在RQBeta中,我们通过投资组合中个股的基本面信息(例如规模、价值和盈利能力)和量价信息(例如动量、波动率和流动性)来对投资组合多期的投资风格变化,以及投资组合和基准组合投资风格的差异进行评估。

        通过分析基金产品的多期投资风格变化程度(即风格漂移),我们可以判断基金产品的实际投资偏好和稳定性,是否和产品发行时所宣称的是否一致;而通过投资组合和基准组合投资风格差异的对比,我们可以对投资组合相对于基准组合的额外收益和风险来源有更深入的了解。

        在实际分析中,我们选择了十个见的投资风格(即RQ风格因子)来对投资组合进行多维度的风格评估。

        风格名称解释贝塔(Beta)股票收益对基准组合(沪深300)收益的敏感度动量(Momentum)股票价格变化的总体趋势特征规模(Size)上市企业的规模盈利率(EarningYield)上市企业的营收能力波动率(Volatility)股票价格变化幅度(风险)的度量成长性(Growth)上市企业的营收、资产和总体规模的同比增长率价值(Value)股票的投资价值(总股本数和市值的比)杠杆(Leverage)上市企业的债务相对于其总资产的比例流动性(Liquidity)股票的换手率,即其交易的活跃程度反转(Reversal)股票价格的均值回归特征在下图的实例中,我们可以看到在整个投资周期中,投资组合的风格漂移现象并不明显,表现比较稳定。

        在15年3月份,投资组合更加偏好价值股,在价值因子上风险暴露较多。

        在16年3月份,整个投资组合在各个因子上的风险暴露度皆0,说明在该段时期,投资组合持仓零。

        在17年3月份,投资组合更加偏好价值因子和市值因子,表明股票池中的股票持仓逐渐倾向于大市值低市盈率的股票。

        下图显示了最近一次投资组合的风格因子暴露度与基准组合因子暴露度的对比。

        我们可以看到虽然相比于投资组合初期,市值因子暴露度在不断加大,但是相比于市场基准组合依然偏小,说明持仓中中小市值股票占比占据主导。

        投资组合中价值因子暴露度高于市场组合,表明投资组合更加注重低估值股票。

        最后,投资组合的杠杠率因子暴露度很低,说明所选公司的偿债能力很强。

        在这份分析报告中,我们计算了投资组合和基准组合(包括沪深300和中证500)在同一时间横截面上的暴露度数据,并且在同一张图上做了对比。

        这有助于帮助用户了解自己投资组合在风格因子上相对基准组合而言的相对暴露度。

        比如以上范例的投资组合,相对基准组合,它在市值因子和杠杆率因子上的暴露度偏低,在价值因子的暴露度上偏高,说明这个投资组合更偏重小盘股,同时偏重财务状况较好,偿债能力更强,同时在市场上相对估值便宜的价值股。

        投资组合的相寻格暴露度本身只是一种风险的体现,如果用户认在价值因子和市值因子上的暴露度能获得超额的收益回报,就会接受这样的暴露度风险敞口,但是如果某些暴露度敞口是用户并不希望在自己的投资组合中出现的,就需要及时调整仓位来避规这些额外的风险。

        这张分析图可以帮助用户更好的及时了解自己投资组合面对各个风格因子的相寻险暴露的情况,以做出应对。

        在这一部分,我们使用投资组合的净值数据进行回归分析,计算投资组合收益对各个RQ风格因子(解释见风格分析部分)收益的敏感度,来对投资组合的收益/风险来源行评估。

        通过多期净值归因,我们可以评估投资组合是否有特定的、显著的收益/风险来源。

        例如,对于某一策略或基金产品,通过多期的净值归因,发现其一直对规模因子有较大的负敏感度(即当市场上大市值股票总体表现好于小市值股票时,该策略或基金产品的业绩较差)。

        这意味着该策略或基金产品可能长期偏好持仓小市值股票,导致风险过于集中。

        此时,一旦小市值股票总体表现欠佳,该策略或基金产品的业绩可能会出现较大的回撤。

        根据上图,在整个持仓期间,投资组合的风格漂移变化并不是十分明显,维持了较强的稳定性,其中变化比较明显的是贝塔因子和成长性因子的回归系数。

        以贝塔因子的回归系数例,图像显示,贝塔值的回归系数随着投资持续期增加而不断降低。

        一般而言,高贝塔回归系数对应于持仓中包含较多低市值个股,说明在初期投资组合中持仓个股的市偏低。

        但随着指数上升,投资组合中低市值个股相对减少。

        风险分析在风险分析部分,我们给出了投资组合在测试期内的一系列的收益、风险、风险调整后收益指标。

        我们选取了最近一月、最近三月和最近半年期的净值收益率收据,分别计算了投资组合与基准组合的见风险收益衡量指标,并给出了95%的置信区间下在未来五天投资组合收益的最大可能损失幅度。

        以最近三个月例,投资组合收益超越基准组合17.58%,-4.26%,在95%的置信区间下,未来五天的最大损失占收益累积净值的比例1.68%实时模拟交易模拟交易的数据与实盘数据是同步的,并且我们会提供实时的模拟撮合服务,因此您可以进一步检验策略的有效性。

        另外您打开微信通知以后,也可以根据收到的实时通知来进行手动落单达到实盘交易的目的。

        模拟交易的数据源模拟交易使用的是实时更新的Level-1数据,大概会有3-5秒的屯迟。

        进行模拟交易1.首先您需要编写一个策略,然后您会发现提示您需要进行一次完整的分钟回测才可以启动模拟交易:2.运行完一次完整的分钟回测以后,您可以在回测的结果页面直接启动模拟交易:3.或者可以从策略列表页面进行启动:4.启动之后可以在策略列表看到启动了的模拟交易策略的状态:5.启动之后的模拟交易策略需要至少等待第一个交易日启动才会有更新:在模拟交易的"设置"选项下可以进行代码更换,您可以选择当前策略的某一次回测代码替换目前正在运行的策略。

        更换之后,原本的仓位、成交、资金使用情况等信息均会被保存下来。

        当前嵫经暂停的策略在替换代码之后策略仍将处于暂停状态;正在运行的策略在替换代码之后保持运行状态不变;异结束的策略替换代码之后将自动将策略回复运行。

        需要注意,您在替换代码的时候,如果勾选"立即运行init及before_trading,初始化所有参数",那么原来context中的内将会被清除。

        1.点击开启微信通知2.之后会弹出微信订阅号的二维码。

        手机扫码成功后,您的微信将和米筐信号进行捆绑:3.调仓记录生成后就会被实时推送到您的微信端:4.点击之后跳转到米筐组合调仓界面,首次跳转需要进行登录。

        有两种方法可以让您本地通过https来拿到您在ricequant上运行的实盘模拟交易策略的当天的交易列表和当前实时的仓位信息,您本地拿到信号以后可以自己来做一些展示报告亦或是对接自己的实盘交易通道来做到实盘交易的打通。

        通过安装我们发布在github上的RQOpen-Client,详细的说明可见github上的文档说明通过restful的http请求:登录:POSTurl:https://rqopen.ricequant.com/login请求示例:post("https://rqopen.ricequant.com/login",{"username":username,"password":password})python范例:importrequestsr=requests.Session()#loginresp=r.post("https://rqopen.ricequant.com/login",{"username":username,"password":password})返回示例:{'code':200,'resp':{'msg':'Congratulations,loginsuccessful!HappyCodingand''Trading!'}}其中,username米筐账号用户名,password米筐账号密码查询当日交易记录:GETurl:https://rqopen.ricequant.com/pt/load_day_trades/请求示例:get("https://rqopen.ricequant.com/pt/load_day_trades/{}".format(run_id))python范例:importrequestsr=requests.Session()#loginresp=r.post("https://rqopen.ricequant.com/login",{"username":username,"password":password})#拿到当天的tradesresp=r.get("https://rqopen.ricequant.com/pt/load_day_trades/{}".format(run_id))返回示例1(当日无交易):{'code':200,'resp':{'name':'测试信号','run_id':1205691,'trades':[]}}返回示例2(当日有交易):{'code':200,'resp':{'name':'SVM大法好','trades':[{'order_book_id':'600216.XSHG','price':12.77,'quantity':-100.0,'time':'2016-12-2309:32:00','trade_id':'2','transaction_cost':6.28}]}}run_id上述模拟交易对应id,可以在这里查看到:查询最新持仓Geturl:https://rqopen.ricequant.com/pt/load_current_positions/请求示例:get("https://rqopen.ricequant.com/pt/load_current_positions/{}".format(run_id))python范例:importrequestsr=requests.Session()#loginresp=r.post("https://rqopen.ricequant.com/login",{"username":username,"password":password})#嵫登录,拿到当天的成交信息resp=r.get("https://rqopen.ricequant.com/pt/load_current_positions/{}".format(run_id))返回示例:{'code':200,'resp':{'name':'SVM大法好','positions':[{'order_book_id':'000153.XSHE','price':12.92,'quantity':600.0},{'order_book_id':'600222.XSHG','price':8.37,'quantity':900.0},...run_id上述模拟交易对应id简单的三个API,您就可以方便搭建自己的智投系统了!模拟交易注意事项模拟交易在每个bar运行后保存状态,当天交易时间结束后结束进程,第二天再恢复。

        如果您的模拟交易因非正原因关闭的话,我们都可以您恢复到关闭前一个bar的状态。

        当天结束进程时会保存这些状态:用户账户,持仓信息使用pickle保存的context对象。

        注意:context中不能序列化的变量不会被保存,重启后会不存在,如果你写了如下代码:definit(context):context.something=query(valuation)context是不能被保存的,因query()返回的对象无法被序列化。

        因此日志中会出现WARN:context.somethingcannotbepickle正确的做法是将query()写在before_trading()中。

        技术分析米筐平台引入的信号计算方式能够让您更方便地进行技术分析。

        在技术分析过程中,您既可以使用我们预先提供的用技术指标,也可以使用自定义指标来产生信号供策略内使用。

        ClonedefMA_SIGNAL():#5周期移动平均上穿10周期移动平均returnCROSS(MA(CLOSE,5),MA(CLOSE,10))defBOLL_SIGNAL():#收盘价上传布林通道上轨MID,TOP,BOTTOM=BOLL(20,2)returnCROSS(CLOSE,TOP)definit(context):context.s1='000001.XSHE'#在初始化阶段注册指标函数#计算5分钟线金叉信号reg_indicator('ma',MA_SIGNAL,'5m',win_size=20)#计算日线布林通道reg_indicator('boll',BOLL_SIGNAL,'1d',win_size=20)defhandle_bar(context,bar_dict):#获取指标结果ma_cross=get_indicator(context.s1,'ma')boll_cross=get_indicator(context.s1,'boll')#设置入场条ifma_crossandboll_cross:order_percent(context.s1,0.1)自定义技术指标满足用户对指标要求的多样性,米筐支持用户使用类达信公式的方式计算自定义指标,具体方法可以参考如下步骤:首先,定义指标函数体本身。

        例如,defKDJ_SIGNAL()):#连续两个周期J值一直在超买区K,D,J=KDJ()returnEVERY(J>80,2)其次,在init阶段调用reg_indicator对所需取用的指标进行注册。

        注册时,需要指定指标名称、参数、适用的周期(比如,5分钟线还是日线)以及初始回溯获取数据的窗口长度。

        例如,reg_indicator('kdj',KDJ_SIGNAL,'1d',win_size=20)最后,调用get_indicator获取指标计算结果。

        此时需要指定获取的指标名称以及所需计算的合约代码。

        例如,get_indicator('000001.XSHE','kdj')需要注意的是,目前技术指标计算并未包括当前“不完整”分钟线。

        举例来说,在09:48计算以5分钟线周期的移动平均时,并不包括09:45~09:48这一“不完整”的5分钟线。

        系统预定义指标MACD指数平滑移动平均defMACD(SHORT=12,LONG=26,M=9):"""MACD指数平滑移动平均线"""DIFF=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG)DEA=EMA(DIFF,M)MACD=(DIFF-DEA)*2returnMACDKDJ随机指标defKDJ(=9,M1=3,M2=3):"""KDJ随机指标"""RSV=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100K=EMA(RSV,(M1*2-1))D=EMA(K,(M2*2-1))J=K*3-D*2returnK,D,JRSI相对指标defRSI(N1=6,N2=12,N3=24):"""RSI相对强建指标"""LC=REF(CLOSE,1)RSI1=SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100RSI2=SMA(MAX(CLOSE-LC,0),N2,1)/SMA(ABS(CLOSE-LC),N2,1)*100RSI3=SMA(MAX(CLOSE-LC,0),N3,1)/SMA(ABS(CLOSE-LC),N3,1)*100returnRSI1,RSI2,RSI3BOLL布林带defBOLL(N=20,P=2):"""BOLL布林带"""MID=MA(CLOSE,N)UPPER=MID+STD(CLOSE,N)*PLOWER=MID-STD(CLOSE,N)*PreturnUPPER,MID,LOWERWR威廉指标defWR(N=10,N1=6):"""W&R威廉指标"""WR1=(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N))*100WR2=(HHV(HIGH,N1)-CLOSE)/(HHV(HIGH,N1)-LLV(LOW,N1))*100returnWR1,WR2DMI趋向指标defDMI(M1=14,M2=6):"""DMI趋向指标"""TR=SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),M1)HD=HIGH-REF(HIGH,1)LD=REF(LOW,1)-LOWDMP=SUM(IF((HD>0)&(HD>LD),HD,0),M1)DMM=SUM(IF((LD>0)&(LD>HD),LD,0),M1)DI1=DMP*100/TRDI2=DMM*100/TRADX=MA(ABS(DI2-DI1)/(DI1+DI2)*100,M2)ADXR=(ADX+REF(ADX,M2))/2returnDI1,DI2,ADX,ADXRBIAS乖离率defBIAS(L1=5,L4=3,L5=10):"""BIAS乖离率"""BIAS=(CLOSE-MA(CLOSE,L1))/MA(CLOSE,L1)*100BIAS2=(CLOSE-MA(CLOSE,L4))/MA(CLOSE,L4)*100BIAS3=(CLOSE-MA(CLOSE,L5))/MA(CLOSE,L5)*100returnBIAS,BIAS2,BIAS3ASI震动升降指标defASI(M1=26,M2=10):"""ASI震动升降指标"""LC=REF(CLOSE,1)AA=ABS(HIGH-LC)BB=ABS(LOW-LC)CC=ABS(HIGH-REF(LOW,1))DD=ABS(LC-REF(OPEN,1))R=IF((AA>BB)&(AA>CC),AA+BB/2+DD/4,IF((BB>CC)&(BB>AA),BB+AA/2+DD/4,CC+DD/4))X=(CLOSE-LC+(CLOSE-OPEN)/2+LC-REF(OPEN,1))SI=X*16/R*MAX(AA,BB)ASI=SUM(SI,M1)ASIT=MA(ASI,M2)returnASI,ASITVR比率defVR(M1=26):"""VR比率"""LC=REF(CLOSE,1)VR=SUM(IF(CLOSE>LC,VOL,0),M1)/SUM(IF(CLOSE<=LC,VOL,0),M1)*100returnVRARBR人气意愿指标defARBR(M1=26):"""ARBR人气意愿指标"""AR=SUM(HIGH-OPEN,M1)/SUM(OPEN-LOW,M1)*100BR=SUM(MAX(0,HIGH-REF(CLOSE,1)),M1)/SUM(MAX(0,REF(CLOSE,1)-LOW),M1)*100returnAR,BRDPOdefDPO(M1=20,M2=10,M3=6):DPO=CLOSE-REF(MA(CLOSE,M1),M2)MADPO=MA(DPO,M3)returnDPO,MADPOTRIX三重指数平滑均线defTRIX(M1=12,M2=20):TR=EMA(EMA(EMA(CLOSE,M1),M1),M1)TRIX=(TR-REF(TR,1))/REF(TR,1)*100TRMA=MA(TRIX,M2)returnTRIX,TRMA工具函数及行情变量请注意,由于python实现方式的问题,逻辑与使用'&'进行判断,逻辑或使用'|'进行判断。

        并且逻辑判断的条语句需要添加括号,以明确逻辑判断的先后顺序。

        例如,(CLOSE>10.2)&(VOLUME>100).名称收盘价C,CLOSE开盘价O,OPEN最高价H,HIGH最低价L,LOW成交量V,VOLUME10周期前收盘价REF(CLOSE,10)10周期均线MA(CLOSE,10)金叉CROSS(MA(CLOSE,5),MA(CLOSE,10))最大值MAX(CLOSE,OPEN)最小值MIN(CLOSE,OPEN)10周期满足条EVERY(CLOSE>MA(CLOSE,5),10)10周期收阳线数量COUNT(CLOSE>OPEN,10)10周期收盘价最大值HHV(CLOSE,10)10周期收盘价最小值LLV(CLOSE,10)10周期成交量加总SUM(VOLUME,10)绝对值ABS标准差STDIF逻辑判断IF(X,A,B)表示X不0则返回A,否则返回B数据目前我们平台使用的是中国A股市场从2005年到最新交易日的每分钟以及每日行情数据。

        我们后台系统在收到数据提供商提供的原始数据时会自动对其进行预处理。

        了使用户摆脱处理数据时的繁琐耗时,我们对数据处理部分进行了大量研究和测试以确保数据的准确性和实时性。

        另外我们系统采用了面向服务的体系架构以使处理后的数据能安全可靠、极速地传送回用户的策略。

        了使用户能对更多的市场进行算法回测研究,我们自定义了一套统一的金融数据格式。

        目前我们做了中国A股市场,在不久的将来我们将会支持更多的股市甚至期货期权,如港股,美股或其它您非感兴趣的市场。

        美股嵫经在我们的策略研究平台上支持了。

        更多数据内容,请参考数据介绍。

        股票数据我们的原始数据来源于一流的数据提供商,以保障给用户提供最准确的数据源,只有准确的数据才能让策略有保障。

        目前我们支持多于2700只中国A股市场的股票日线、分钟线行情,其中包括一些嵫退市的股票,这样可避免所谓的幸存者偏差。

        另外我们系统也处理了股票的拆分和分红。

        每日交易数据纪录了股票在一天内的交易信息,如开盘价或交易量等。

        目前使用的基准-沪深300(csi300)很好地反映了中国A股市场的整体走势并且有足够长的时间用于回测,所以我们把它作平台回测算法的基准参照。

        公募基金数据公募基金(PublicOfferingofFund),是指以公开方式向社会公众投资者募集资金并以证券投资对象的证券投资基金。

        公募基金是以大众传播手段招募,发起人集合公众资金设立投资基金,进行证券投资。

        这些基金在法律的严格监管下,有着信息披露,利润分配,运行限制等行业规范。

        Ricequant提供了多个API以供用户查询调用公募基金数据,例如基金的基础信息,净值信息,拆分分红等信息。

        具体数据信息,您可以参考公募基金数据获取更多信息。

        以fund开头的API均公募基金相关的数据API。

        我们也您提供了公募基金的样例代码,以供参考。

        指数数据我们目前开放了790多个每日和每分钟历史指数数据,在代码中的使用方法和股票相同(也可以通过ctrl+i-windows用户,或command+i-mac用户进行代码搜索)。

        所支持的指数的详细情况可以查看指数数据字期货数据Ricequant引入了中国四大期货交易所(大商、郑商、中金、上期)2005年以来的期货每日行情数据以及2010年以来的分钟行情数据。

        并对合约做了主力连续合约和指数连续合约的合成处理。

        您可以通过在get_price函数进行获取,并进行相应计算。

        需要注意,由于期货合约存续的特殊性,针对每一品种的期货合约,系统中都增加了主力连续合约以及指数连续合约两个人工合成的合约来满足使用需求。

        其中,主力连续合约是由该品种期货不同时期主力合约接续而成,代码以88结尾,例如IF88;指数连续合约是由当前品种全部可交易合约以累计持仓量权重加权平均得到,代码以99结尾,例如IF99。

        主力合约的判断标准:合约首次上市时,以当日收盘同品种持仓量最大者作从第二个交易日开始的主力合约。

        当同品种其他合约持仓量在收盘后超过当前主力合约1.1倍时,从第二个交易日开始进行主力合约的切换。

        日内不会进行主力合约的切换。

        财务数据Ricequant从一流数据提供商处购买并且整理了财务三大表,市场衍生数据和财务指标衍生数据共计400余项,涵盖了A股两市几乎所有股票自上市以来的所有基本面数据。

        财务数据/基本面数据可以用来选股,所以主要的应用是在init或before_trading函数里的update_universe来加入筛选出来的结果进入股票池或者是使用查询出来的财务指标数据。

        在Ricequant使用get_fundamentals函数来查询财务数据库中的所有股票的财务数据。

        您可以试用类似SQL的语法去查询列、过滤、排序并且限制结果数目等,你可以通过这样来在Ricequant的算法中生成一篮子的证券,基于你选择的公司的财务基本指标。

        并且你也可以将这些财务指标数据用于你的交易算法或策略研究中。

        所有的财务数据指标可以在财务数据字典找到。

        财务数据在Ricequant的算法交易中可以有两种使用方法:基于财务数据筛选出股票并加入股票池对你的算法提供数据(在handle_bar中),来便于做投资决策有三个函数和财务数据有关:before_trading,get_fundamentals,和update_universe。

        before_trading只会在每天开盘前被触发一次。

        它可以用来传入一个query对象并且利用get_fundamentals来创建一个股票池。

        query对象是建立在SQLAlchemy的语法的基础上的一个PythonORM。

        您可以具体参考SQLAlchemy的文档来查看更多的细节如何生成一个query。

        在下面的例子中,算法策略拿到了每只股票的pe_ratio的信息。

        get_fundamentals函数会自动把每个股票的股票代码(order_book_id)包含进来。

        返回的数据接着会被filter按照pe_ratio的区间进行过滤。

        最终,数据会被order_by排序并且被limit限制最后的查询数据的个数。

        以下是一段简单的查询财务数据的代码范例,在init里面查询了财务数据,只会在策略运行的时候触发一次,只是用来查询所有股票的收益:#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):context.fundamental_df=get_fundamentals(query(fundamentals.income_statement.revenue))logger.info(context.fundamental_df)我们接着看一段进阶的查询范例,查询pe值在25和30之间并且收益排前10的股票:#会在策略开始前触发一次,我们可以从get_fundamentals函数中更新我们的股票池并且保存查询获得的数据以作之后使用。

        definit(context):#实时打印日志context.fundamental_df=get_fundamentals(query(fundamentals.income_statement.revenue,fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio>25).filter(fundamentals.eod_derivative_indicator.pe_ratio<30).order_by(fundamentals.income_statement.revenue.desc()).limit(10))logger.info(context.fundamental_df)update_universe(context.fundamental_df.columns.values)所有的可以查询到的财务数据指标可以在财务数据字具面找到。

        我们也提供了一个范例算法来展示如何拿取财务数据结合交易策略。

        注意:我们建议您不要使用get_fundamentals查询太多的股票,那么会很容易导致程序的运行很慢,因查询的股票数量过大而10年+的财务数据数据库是十分庞大的。

        您可以在query语句最后加入limit(limit_number)来限制查询返回的记录的个数。

        调用get_fundamentals函数将会返回一个pandas的dataframe,每一行对应数据库返回的每一行(可能是几个表的联合查询结果的一行),列索引是你查询的所有字段,可以有几个用法:添加进去context里面保存,并且之后可以在handle_bar里使用。

        你的算法策略之后可以使用这些保存在dataframe中的数据:context.fundamental_df=fundamental_df把查询出来的股票池传入update_universe函数,那么就可以自己手动将这些感兴趣的股票加入整个股票池以获得在handle_bar中的这些股票的数据更新。

        下面的代码中的context.fundamental_df.columns.values即可以拿到查询财务数据返回的dataframe的列即所有的股票代码的数组:update_universe(context.fundamental_df.columns.values)如果您想打印出来查询完的结果logger.info(context.fundamental_df),你将会发现数字的排版非整洁:600028.XSHG600704.XSHG600019.XSHG600362.XSHG\revenue1.53684e+121.27481e+111.22449e+111.14881e+11pe_ratio26.175828.789628.364228.27600755.XSHG600418.XSHG601992.XSHG600600.XSHG\revenue4.31976e+103.39457e+102.59027e+102.4315e+10pe_ratio25.300626.08926.117526.9428601985.XSHG000921.XSHErevenue1.99621e+101.92274e+10pe_ratio29.692127.8182如何只查询某些股票的财务数据?财务数据时间轴在ricequant上查询基本面数据时,我们是以所有年报的发布日期(announcementdate)准,因只有财报发布后才成市场上公开可以获取的数据。

        比如某公司第三季度的财报于11月10号发布,那么如果从查询日期10月5号,也就是早于发布日期,那么返回的只是第二季度的财报数据。

        这样做最大程度地模拟了真实交易环境,避免了在回测中使用到未来数据。

        国债收益率曲线在风险计算中我们使用中国的银行间固定利率国债收益率曲线作中国市场的零风险利率,来源于中央国债登记结算有限责任公收益率曲线如下图所示:收益率曲线数据如下所示:该曲线每日都会变化,我们嵫经处理和存储了2002年至当日的每日曲线数据从而可以更加准确的计算策略风险值。

        见错误在日回测的功能里,Ricequant您提供了在线编辑器的功能,当您运行策略的过程中遇到问题的时候,您可以在运行时错误tab中您获得错误详情。

        譬如,如下图所示,您的代码在运行时抛出异,那么在运行时错误tab中,您将看到异发生在策略代码的那一行,以及具体的异详情。

        请注意,如果您没有捕获异的话,策略将会中止。

        如果你嵫经遇到了出错,那么在这里您将了解到见的错误场景,以及应对的办法。

        如果您遇到无法解决的问题,请联系我们协助您解决。

        见错误如下:所选股票不存在。

        描述:表示您所选的股票不在我们的日回测历史数据中,因此无法启动该回测。

        如下图所示:解决办法您当前可以使用一些其他的股票资讯网站来查询股票代号,我们非抱歉还没有推出自动补齐的功能让您方便的查询可交易股票。

        如果您发现我们有遗漏的股票,我们将非规感谢您联系我们,帮助我们解决您的问题。

        *策略代码抛出异。

        *描述:您的策略代码抛出异且没有被捕获,因此导致策略运行中止。

        在运行时错误tab中,您可以看到抛出的异的详情。

        如下图所示。

        解决办法通过查看抛出异的详情,您需要可以定位到抛出异的策略代码中的位置,修复问题,必要时候您可以通过log来打印可能出问题的变量或相关信息。

        所选股票在所选时间段内无法交易。

        描述:这是因所选择的股票在所选的时间范围内没有历史交易数据,因此无法运行您的策略进行回测。

        解决办法:遇到这个错误的原因有多种,后续我们会快速寻误提示进行更细致的调整,改善这个错误的引导提示。

        如果您遇到这个问题而不知道怎么定位,我们欢迎您联系我们协助。

        *系统繁忙,请稍后重试,如果仍然不行请联系我们。

        *描述:ricequant运行您的策略的时候需要使用到硬资源有限,了保证服务质量,我们对同时可以运行的策略数量有限制,同时运行的每个用户的回测数上限目前是6个。

        当系统负荷达到阀值的时候,我们将拒绝新的回测请求。

        解决办法:如果您有运行回测的需求,但是却遇到该问题,那么请联系我们协助。

        *编译错误。

        *描述:您的代码中共包含语法错误,在运行时错误的tab中,您可以查询到发生编译错误的策略代码的行号以及错误详情。

        如下图所示:解决办法:根据编译错误的提示,您可能需要检查是否按照规范使用Ricequant提供的API,或者您需要检查是否存在python语法错误。

        如果仍然难以定位问题所在,我们欢迎您联系我们协助。

        运行超时。

        描述:了防止恶意的策略驻在我们的平台上耗费计算资源,我们限制了一个回测最长的生命周期时间。

        目前限制8个小时,如果您的策略在8小时内没有能够完成,则会被平台强制停止。

        而每个事循环handle_bar在回测中的限时是3分钟,实盘模拟中是5分钟。

        解决办法:请您不要担心,通复杂度的策略在平台负载不重的情况下,可以在10-20s内完成。

        如果您的回测策略确实需要运行比较久的时间,我们欢迎您联系我们协助。

        *其他错误。

        *描述:这通是因系统内部错误导致。

        解决办法:欢迎联系我们,我们将第一时间协助您解决这类问题。

        隐私及安全您的策略代码是您宝贵的私有财产。

        我们非重视您的安全和隐私,会非严肃地解决安全隐患,Ricequant使用各种措施来保证用户的策略代码及其它私有内容的安全。

        除非您自己选择分享您的策略代码,否则它们在通过https加密入Ricequant平台的一瞬间就会保持加密,其他人不能查看到您的策略,包括Ricequant也不会查阅、分享或以其它方式使用它们。

        通情况下,您会以下列的两种方式授权他人去查看您选择被看到的信息:在Ricequant平台公共处分享您的策略或策略的表现结果我们不久将推出策略分享的功能,允许您分享自己的策略或策略表现结果,与他人进行研究探讨。

        您要求Ricequant协助您解决代码中出现的问题当您的策略出现问题并无法独立解决时,您可以选择让Ricequant协助您去定位问题。

        如果在提供技术支持或本服务其他维护的过程中,有必要让Ricequant查看您的私有内容,这样的检阅将被限制在非具体的技术目的,并且我们会向您披露我们的做法。

        在Ricequant,我们通过一系列的措施来保护您的策略安全:https通信加密:您的浏览器与Ricequant平台之间的通信都经过https加密,这代表着您的策略代码以及代码运行期间产生的所有信息都会被加密,第三者无法窥探。

        我们全站都使用了https,当您登录我们的网站后,在浏览器的地址栏会提示您正在使用https访问Ricequant。

        加密保存:您的策略通过加密网络传输到Ricequant的服务器,我们会对其进行加密,并存放在内网的数据库中。

        隔离策略运行:您的策略在运行的过程中会被放置在一个安全的隔离环境,平台上运行的其他策略无法进入该独立的环境,所以也不能候窥探您的任何信息。

        在技术上我们通过Javasecuritypolicy,separeteclassloader,linuxnamespace,linuxcgroup,linuxseccomp,selinux等手段来构建这个隔离环境。

        如果您对我们使用技术感兴趣的话,可以通过阅读这个安全blog文档获得更多相关内容。

        云端储存我们的所有后台运算和储存都在非出色的云服务商青云上进行,他们有很专业的安全保护。

        如您有对我们的安全保护有任何的疑问,请不要犹豫联系我们。

        PythonSDK简介基本方法你的算法策略目前必须实现至少两个方法:init和handle_bar,而before_trading和after_trading是可选择实现的方法。

        init(必须实现)init(context)初始化方法-在回测和实时模拟交易只会在启动的时候触发一次。

        你的算法会使用这个方法来设置你需要的各种初始化配置。

        context对象将会在你的算法的所有其他的方法之间进行传递以方便你可以拿取到。

        参数参数类型注释contextpython简单对象将会在整个算法中当做一个全局变量来使用。

        属性通过点标记(".")来取到。

        返回无范例definit(context):#cash_limit的属性是根据用户需求自己定义的,你可以定义无限多种自己随后需要的属性,ricequant的系统默认只是会占用context.portfolio的关键字来调用策略的投资组合信息context.cash_limit=5000handle_bar(必须实现)handle_bar(context,bar_dict)bar数据的更新会自动触发该方法的调用。

        策略具体逻辑可在该方法内实现,包括交易信号的产生、订单的创建等。

        在实时模拟交易中,该函数在交易时间内会每分钟被触发一次。

        注意:由于该方法会每分钟被触发,请尽量不要在该函数中放入查询类(如带有query()参数的API)代码以免运行时间过长,该类逻辑可放在init()中执行。

        参数参数类型注释contextpython简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到bar_dictdictkeyorder_book_id,valuebar数据。

        当前合约池内所有合约的bar数据信息都会更新在bar_dict里面返回无范例defhandle_bar(context,bar_dict):#putallyouralgorithmmainlogichere.#...order_shares('000001.XSHE',500)#...handle_tickhandle_tick(context,tick)嵫订阅(subscribe)合约tick数据的更新会自动触发该方法的调用。

        策略具体逻辑可在该方法内实现,包括交易信号的产生、订单的创建等。

        参数参数类型注释contextpython简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到ticktick嵫订阅合约的tick行情返回无范例defhandle_tick(context,tick):#putallyouralgorithmmainlogichere.#...logger.info(tick.last)#...before_trading(选择实现)before_trading(context)可选择实现的函数。

        每天在策略开始交易前会被调用。

        不能在这个函数中发送订单。

        需要注意,该函数的触发时间取决于用户当前所订阅合约的交易时间。

        举例来说,如果用户订阅的合约中存在有夜盘交易的期货合约,则该函数可能会在前一日的20:30触发,而不是早晨08:00.参数参数类型注释contextpython简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到。

        返回无范例defbefore_trading(context):#拿取财务数据的逻辑,自己构建SQLAlchemyqueryfundamental_df=get_fundamentals(your_own_query)#把查询到的财务数据保存到conext对象中context.fundamental_df=fundamental_df#手动更新股票池update_universe(context.fundamental_df.columns.values)after_trading(选择实现)after_trading(context)可选择实现的函数。

        每天在收盘后被调用。

        不能在这个函数中发送订单。

        您可以在该函数中进行当日收盘后的一些计算。

        在实时模拟交易中,该函数会在每天15:30触发。

        参数参数类型注释contextpython简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(".")来取到。

        返回无交易相关函数order_shares-指定股数交易(股票专用)order_shares(id_or_ins,amount,style=MarketOrder())落指定股数的买/卖单,最见的落单方式之一。

        如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认是市价单(marketorder)。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象,用户必须指定amountfloat-required需要落单的股数。

        正数代表买入,负数代表卖出。

        将会根据一手xx股来向下调整到一手的倍数,比如中国A股就是调整成100股的倍数。

        styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回Order对象范例购买Buy2000股的平安银行股票,并以市价单发送:order_shares('000001.XSHE',2000)卖出2000股的平安银行股票,并以市价单发送:order_shares('000001.XSHE',-2000)购买1000股的平安银行股票,并以限价单发送,价格¥10:order_shares('000001.XSHE',1000,style=LimitOrder(10))order_lots-指定手数交易(股票专用)order_lots(id_or_ins,amount,style=OrderType)指定手数发送买/卖单。

        如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认是市价单(marketorder)。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象,用户必须指定amountfloat多少手的数目。

        正数表示买入,负数表示卖出,用户必须指定styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrderstyle=LimitOrder(limit_price)返回Order对象范例买入20手的平安银行股票,并且发送市价单:order_lots('000001.XSHE',20)买入10手平安银行股票,并且发送限价单,价格¥10:order_lots('000001.XSHE',10,style=LimitOrder(10))order_value-指定价值交易(股票专用)order_value(id_or_ins,cash_amount,style=OrderType)使用想要花费的金钱买入/卖出股票,而不是买入/卖出想要的股数,正数代表买入,负数代表卖出(暂不支持卖空)。

        股票的股数总是会被调整成对应的100的倍数(在A中国A股市场1手是100股)。

        当您提交一个卖单时,该方法代表的意义是您希望通过卖出该股票套现的金额。

        如果金额超出了您所持有股票的价值,那么您将卖出所有股票。

        需要注意,如果资金不足,该API将不会创建发送订单。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象,用户必须指定cash_amountfloat需要花费现金购买/卖出证券的数目。

        正数代表买入,负数代表卖出,用户必须指定styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回Order对象范例买入价值¥10000的平安银行股票,并以市价单发送。

        如果现在平安银行股票的价格是¥7.5,那么下面的代码会买入1300股的平安银行,因少于100股的数目将会被自动删除掉:order_value('000001.XSHE',10000)卖出价值¥10000的现在持有的平安银行:order_value('000001.XSHE',-10000)order_percent-一定比例下单(股票专用)order_percent(id_or_ins,percent,style=OrderType)发送一个等于目前投资组合价值(市场价值和目前现金的总和)一定百分比的买/卖单,正数代表买,负数代表卖(暂不支持卖空)。

        股票的股数总是会被调整成对应的一手的股票数的倍数(1手是100股)。

        百分比是一个小数,并且小于1(<100%),0.5表示的是50%.需要注意,百分比不能1,因下单时手续费将会计入下单金额中。

        当买入股票所需金额加上手续费大于资金时,该API将不会创建发送订单。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrumentobject,用户必须指定percentfloat占有现有的投资组合价值的百分比。

        正数表示买入,负数表示卖出。

        用户必须指定styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回Order对象范例买入等于现有投资组合50%价值的平安银行股票。

        如果现在平安银行的股价是¥10/股并且现在的投资组合总价值是¥4000,用来买入的资金¥2000,那么将会买入200股的平安银行股票。

        (不包含交易成本和滑点的损失):order_percent('000001.XSHE',0.5)order_target_value-目标价值下单(股票专用)order_target_value(id_or_ins,cash_amount,style=OrderType)买入/卖出并且自动调整该证券的仓位到一个目标价值(暂不支持卖空)。

        如果还没有任何该证券的仓位,那么会买入全部目标价值的证如果嵫经有了该证券的仓位,则会买入/卖出调整该证券的现在仓位和目标仓位的价值差值的数目的证需要注意,如果资金不足,该API将不会创建发送订单。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrumentobject,用户必须指定cash_amountfloat-required最终的该证券的仓位目标价值styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回Order对象范例如果现在的投资组合中持有价值¥3000的平安银行股票的仓位并且设置其目标价值¥10000,以下代码范例会发送价值¥7000的平安银行的买单到市场。

        (向下调整到最接近每手股数即100的倍数的股数):order_target_value('000001.XSHE',10000)order_target_percent-目标比例下单(股票专用)order_target_percent(id_or_ins,percent,style=OrderType)买入/卖出证券以自动调整该证券的仓位到占有一个指定的投资组合的目标百分比(暂不支持卖空)。

        如果投资组合中没有任何该证券的仓位,那么会买入等于现在投资组合总价值的目标百分比的数目的证如果投资组合中嵫经拥有该证券的仓位,那么会买入/卖出目标百分比和现有百分比的差额数目的证券,最终调整该证券的仓位占据投资组合的比例至目标百分比。

        其实我们需要计算一个position_to_adjust(即应该调整的仓位)position_to_adjust=target_position-current_position投资组合价值等于所有嵫有仓位的价值和剩余现金的总和。

        买/卖单会被下舍入一手股数(A股是100的倍数)的倍数。

        目标百分比应该是一个小数,并且最大值应该<=1,比如0.5表示50%。

        如果position_to_adjust计算之后是正的,那么会买入该证券,否则会卖出该证需要注意,如果资金不足,该API将不会创建发送订单。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrumentobject,用户必须指定percentfloat-required仓位最终所占投资组合总价值的目标百分比。

        styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回Order对象范例如果投资组合中嵫经有了平安银行股票的仓位,并且占据目前投资组合的10%的价值,那么以下代码会买入平安银行股票最终使其占据投资组合价值的15%:order_target_percent('000001.XSHE',0.15)buy_open-买开(期货专用)buy_open(id_or_ins,amount,price=None,style=None)买入开仓。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象amountfloat下单的手数pricefloat下单价格,默认None,表示市价单,填写价格则代表限价单。

        此参数主要用于简化style参数styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回Order对象范例以价格3500的限价单开仓买入2张上期所AG1607合约:buy_open('AG1607',amount=2,price=3500)sell_close-平多仓(期货专用)sell_close(id_or_ins,amount,price=None,style=None,close_today=False)平多仓。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象amountfloat下单的手数pricefloat下单价格,默认None,表示市价单,填写价格则代表限价单。

        此参数主要用于简化style参数styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)close_todaybool是否平今单。

        默认False。

        上期所对于平今仓需要显式设置平今True返回Order对象或orderlist注意,当前持仓如果包含昨仓与今仓,平仓时候默认按照先进先出的规则,函数可能存在返回orderlist的情例如,目前持仓多方向8张,其中昨仓3今仓5。

        如果平仓4张,按照先进先出原则,此时策略框架会创建两个平仓单,一个平3张昨仓,一个平1张今仓。

        sell_open-卖开(期货专用)sell_open(id_or_ins,amount,price=None,style=None)卖出开仓。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象amountfloat下单的手数pricefloat下单价格,默认None,表示市价单,填写价格则代表限价单。

        此参数主要用于简化style参数styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回Order对象buy_close-平空仓(期货专用)buy_close(id_or_ins,amount,price=None,style=None,close_today=False)平空仓。

        参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象amountfloat下单的手数pricefloat下单价格,默认None,表示市价单,填写价格则代表限价单。

        此参数主要用于简化style参数styleOrderType订单类型,默认是市价单。

        目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)close_todaybool是否平今单。

        默认False。

        上期所对于平今仓需要显式设置平今True返回Order对象或orderlist注意,当前持仓如果包含昨仓与今仓,平仓时候默认按照先进先出的规则,函数可能存在返回orderlist的情例如,目前持仓多方向8张,其中昨仓3今仓5。

        如果平仓4张,按照先进先出原则,此时策略框架会创建两个平仓单,一个平3张昨仓,一个平1张今仓。

        范例市价单将现有IF1603空仓买入平仓2张:buy_close('IF1603'2)cancel_order-撤单cancel_order(order)参数参数类型注释orderOrder需要撤销的order对象,用户必须指定返回无get_open_orders-拿到未成交订单信息get_open_orders()获取一个order对象的list,凡在此list中的order都未被完全成交或取消。

        参数无返回listofOrders,当前所有活跃的订单(未全部成交,未被撤单)。

        context属性now-当前时间context.now使用以上的方式就可以在handle_bar中拿到当前的bar的时间,比如daybar的话就是那天的时间,minutebar的话就是这一分钟的时间点。

        返回数据类型datetime.datetimeportfolio-投资组合信息context.portfolio该投资组合在单一股票或期货策略中分别股票投资组合和期货投资组合。

        在股票+期货的混合策略中代表汇总之后的总投资组合。

        请参考portfoliostock_account-股票资金账户信息context.stock_account获取股票资金账户信息。

        请参考stock_accountfuture_account-期货资金账户信息context.future_account获取期货资金账户信息。

        请参考future_accountrun_info-策略运行信息context.run_info属性类型注释run_typeRUN_TYPERUN_TYPE.BACKTEST表示当前策略在进行回测,RUN_TYPE.PAPER_TRADING表示当前策略在进行实盘模拟start_datedatetime.date策略的开始日期end_datedatetime.date策略的结束日期frequencystr策略频率,'1d'或'1m'stock_starting_cashfloat股票账户初始资金future_starting_cashfloat期货账户初始资金slippagefloat滑点水平margin_multiplierfloat保证金倍率commission_multiplierfloat佣金倍率benchmarkstr基准合约代码matching_typeMATCHING_TYPE撮合方式,MATCHING_TYPE.NEXT_BAR_OPEN代表以下一bar开盘价撮合,MATCHING_TYPE.CURRENT_BAR_CLOSE代表以当前bar收盘价撮合universe-策略合约池context.universe在运行update_universe,subscribe或者unsubscribe的时候,合约池会被更新。

        需要注意,合约池内合约的交易时间(包含股票的策略默认会在股票交易时段触发)是handle_bar被触发的依据。

        scheduler定时器scheduler.run_daily-每天运行scheduler.run_daily(function)每日运行一次指定的函数,只能在init内使用。

        注意,schedule一定在其对应时间点的handle_bar之前执行,如果定时运行函数运行时间较长,则中间的handle_bar事将会被略过。

        参数参数类型注释functionfunction使传入的function每日运行。

        注意,function函数一定要包含(并且只能包含)context,bar_dict两个输入参数返回无范例以下的范例代码片段是一个非简单的例子,在每天交易开始时查询现在portfolio中剩下的cash的情况:#scheduler调用的函数需要包括context,bar_dict两个输入参数deflog_cash(context,bar_dict):logger.info("Remaningcash:%r"%context.portfolio.cash)definit(context):#...#每天运行一次scheduler.run_daily(log_cash)scheduler.run_weekly-每周运行scheduler.run_weekly(function,weekday=x,tradingday=t)每周运行一次指定的函数,只能在init内使用。

        注意:tradingday中的负数表示倒数。

        tradingday表示交易日。

        如某周只有四个交易日,则此周的tradingday=4与tradingday=-1表示同一天。

        weekday和tradingday不能同时使用。

        参数参数类型注释functionfunction使传入的function每日交易开始前运行。

        注意,function函数一定要包含(并且只能包含)context,bar_dict两个输入参数weekdayint1~5分别代表周一至周五,用户必须指定tradingdayint范围[-5,1],[1,5]例如,1代表每周第一个交易日,-1代表每周倒数第一个交易日,用户可以不填写返回无范例以下的代码片段非简单,在每周二固定运行打印一下现在的portfolio剩余的资金:#scheduler调用的函数需要包括context,bar_dict两个参数deflog_cash(context,bar_dict):logger.info("Remaningcash:%r"%context.portfolio.cash)definit(context):#...#每周二打印一下剩余资金:scheduler.run_weekly(log_cash,weekday=2)#每周第二个交易日打印剩余资金:#scheduler.run_weekly(log_cash,tradingday=2)scheduler.run_monthly-每月运行scheduler.run_monthly(function,tradingday=t)每月运行一次指定的函数,只能在init内使用。

        注意:tradingday的负数表示倒数。

        tradingday表示交易日,如某月只有三个交易日,则此月的tradingday=3与tradingday=-1表示同一。

        参数参数类型注释functionfunction使传入的function每日交易开始前运行。

        注意,function函数一定要包含(并且只能包含)context,bar_dict两个输入参数tradingdayint范围[-23,1],[1,23],例如,1代表每月第一个交易日,-1代表每月倒数第一个交易日,用户必须指定返回无范例以下的代码片段非简单的展示了每个月第一个交易日的时候我们进行一次财务数据查询,这样子会非有用在一些根据财务数据来自动调节仓位股票组合的算法来说:#scheduler调用的函数需要包括context,bar_dict两个参数defquery_fundamental(context,bar_dict):#查询revenue前十名的公司的股票并且他们的pe_ratio在25和30之间。

        打fundamentals的时候会有auto-complete方便写查询代码。

        fundamental_df=get_fundamentals(query(fundamentals.income_statement.revenue,fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio>25).filter(fundamentals.eod_derivative_indicator.pe_ratio<30).order_by(fundamentals.income_statement.revenue.desc()).limit(10))#将查询结果dataframe的fundamental_df存放在context里面以备后面只需:context.fundamental_df=fundamental_df#实时打印日志看下查询结果,会有我们精心处理的数据表格显示:logger.info(context.fundamental_df)update_universe(context.fundamental_df.columns.values)#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):#每月的第一个交易日查询以下财务数据,以确保可以拿到最新更新的财务数据信息用来调整仓位scheduler.run_monthly(query_fundamental,tradingday=1)time_rule-定时间运行scheduler还可以用来做定时间运行,比如在每天开盘后的一小时后或一分钟后定时运行,这里有很多种组合可以让您达到各种自己想要达到的定时运行的目的。

        使用的方法是和上面的scheduler.run_daily,scheduler.run_weekly和scheduler.run_monthly进行组合加入time_rule来一起使用。

        注意:market_open与market_close都跟随中国A股交易时间进行设置,即09:31~15:00。

        使用time_rule定时运行只会在分钟级别回测和实时模拟交易中有定义的效果,在日回测中只会默认依然在该天运行,并不能在固定的时间运行。

        在分钟回测中如未指定time_rule,则默认在开盘后第一个分钟线运行,即09:31分,等同于market_open(minute=0,hour=0)。

        如果两个schedule,分别使用market_open与market_close规则,但规则触发时间在同一时刻,则market_open的handle一定在market_close的handle前执行。

        market_open(minute=119)将在11:30执行,market_open(minute=120)在13:01执行,中午休市的区间会被忽略。

        time_rule='before_trading'表示在开市交易前运行scheduler函数。

        该函数运行时间将在before_trading函数运行完毕之后handle_bar运行之前。

        参数参数类型注释time_rulemarket_open,market_close,str定时具体几点几分运行某个函数。

        time_rule='before_trading'表示开始交易前运行;market_open(hour=x,minute=y)表示A股市场开市后x小时y分钟运行,market_close(hour=x,minute=y)表示A股市场收市前x小时y分钟运行。

        如果不设置time_rule默认的值是中国A股市场开市后一分钟运行。

        market_open,market_close参数如下:参数类型注释hourint-option[1,4]具体在market_open/market_close后/前第多少小时执行,股票的交易时间[9:31-11:30],[13:01-15:00]共240分钟,所以hour的范围[1,4]minuteint-option[0,239]具体在market_open/market_close的后/前第多少分钟执行,同上,股票每天交易时间240分钟,minute的范围[0,239],中午休市的时间区间会被忽略返回无范例每天的开市后10分钟(股票即9:41)运行:scheduler.run_daily(function,time_rule=market_open(minute=10))每周的第t个交易日闭市前1小时运行:scheduler.run_weekly(function,tradingday=t,time_rule=market_close(hour=1))每月的第t个交易日开市后1小时运行:scheduler.run_monthly(function,tradingday=t,time_rule=market_open(hour=1))每天开始交易前运行:scheduler.run_daily(function,time_rule='before_trading')数据查询相关函数get_financials-查询季度财务数据get_financials(query,interval)获取季度的财务数据。

        参数参数类型说明querySQLAlchemyQueryObjectSQLAlchemy的Query对象。

        其中可在'query'内填写需要查询的指标,'filter'内填写数据过滤条intervalstr查询财务数据的间隔。

        例如,填写'5y',则代表从报告期开始回溯5年,每年相同报告期数据;'3q'则代表从报告期开始向前回溯3个季度返回pandasSeries查询逻辑get_finanacials在回测中的使用和研究平台略有不同,不需要输入报告期参数"quarter"。

        最近报告期在回测中依靠回测日期决定,比如回测一个区间,它会一个个日期去查找quarter,回测日期当前2017-04-21,那么它的最近报告期将是2017-03-31。

        范例importpandasaspddefinit(context):logger.info("RunInfo:{}".format(context.run_info))defbefore_trading(context):context.stock_pool=index_components('000300.XSHG')defGet_OPG(context):pan_OPG=get_financials(query(financials.income_statement.operating_revenue,financials.announce_date).filter(fundamentals.stockcode.in_(context.stock_pool)),interval='3q')print(pan_OPG.iloc[:,:,1])defhandle_bar(context,bar_dict):Get_OPG(context)order_shares(context.s1,100)defafter_trading(context):passget_fundamentals-查询财务数据get_fundamentals(query,entry_date=None,interval='1d',report_quarter=False)获取历史财务数据表格。

        目前支持中国市场超过400个指标,具体请参考财务数据文档。

        目前仅支持中国市场。

        需要注意,一次查询过多股票的财务数据会导致系统运行缓慢。

        参数参数类型说明querySQLAlchemyQueryObjectSQLAlchmey的Query对象。

        其中可在'query'内填写需要查询的指标,'filter'内填写数据过滤条。

        具体可参考sqlalchemy'squerydocumentation学习使用更多的方便的查询语句。

        从数据科学家的观点来看,sqlalchemy的使用比sql更加简单和强大entry_datestr,datetime.date,datetime.datetime,pandasTimestamp查询财务数据的基准日期,应早于策略当前日期。

        默认策略当前日期前一天。

        intervalstr查询财务数据的间隔,默认'1d'。

        例如,填写'5y',则代表从entry_date开始(包括entry_date)回溯5年,返回数据时间以年间隔。

        'd'-天,'m'-月,'q'-季,'y'-年report_quarterbool是否显示报告期,默认False,不显示。

        'Q1'-一季报,'Q2'-半年报,'Q3'-三季报,'Q4'-年报返回pandasDataPanel如果查询结果空,返回空pandasDataFrame如果给定间隔1d,1m,1q,1y,返回pandasDataFrame范例获取财务数据中的pe_ration和revenue指标:#并且通过filter过滤掉得到符合一定范围的pe_ration的结果#最后只拿到按照降序排序之后的前10个fundamental_df=get_fundamentals(query(fundamentals.income_statement.revenue,fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio>25).filter(fundamentals.eod_derivative_indicator.pe_ratio<30).order_by(fundamentals.income_statement.revenue.desc()).limit(10))context.stocks=fundamental_df.columns.valuesupdate_universe(context.stocks)获取某些指定股票的历史财务数据:definit(context):context.stocks=industry('A01')logger.info("industrystocks:"+str(context.stocks))#每个表都有一个stockcode在用来方便通过股票代码来过滤掉查询的数据,比如次数是只查询'A01'板块的revenue和pe_ratio#最后加入entry_date参数获取2015年12月31日的数据context.fundamental_df=get_fundamentals(query(fundamentals.income_statement.revenue,fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio>5).filter(fundamentals.eod_derivative_indicator.pe_ratio<300).filter(fundamentals.income_statement.stockcode.in_(context.stocks)),entry_date='20151231')logger.info(context.fundamental_df)update_universe(context.fundamental_df.columns.values)all_instruments-所有合约基础信息all_instruments(type=None)获取某个国家市场的所有合约信息。

        使用者可以通过这一方法很快地对合约信息有一个快速了解,目前仅支持中国市场。

        参数参数类型说明typestr需要查询合约类型,例如:type='CS'代表股票。

        默认是所有类型其中type参数传入的合约类型和对的解释如下:合约类型说明CSCommonStock,即股票ETFExchangeTradedFund,即交易所交易基金LOFListedOpen-EndedFund,即上市型开放式基金(以下分级基金嵫并入)FenjiMuFenjiMuFund,即分级母基金FenjiAFenjiAFund,即分级A类基金FenjiBFenjiBFunds,即分级B类基金INDXIndex,即指数FutureFutures,即期货,包含股指、国债和商品期货返回pandasDataFrame-所有合约的基本信息。

        范例获取中国市场所有上市型开放式基金的基础信息:[In]all_instruments('LOF')[Out]abbrev_symbolorder_book_idproductsector_codesymbol0CYGA150303.XSHEnullnull华安创业板50A1JY500A150088.XSHEnullnull金鹰500A2TD500A150053.XSHEnullnull泰达稳健3HS500A150110.XSHEnullnull华商500A4QSAJ150235.XSHEnullnull鹏华证券A...instruments-合约详细信息instruments(id_or_symbols)获取某个国家市场内一个或多个合约的详细信息。

        目前仅支持中国市场。

        参数参数类型说明id_or_symbolsstrORstrlist合约代码或合约代码列表,可传入order_book_id,order_book_idlist。

        中国市场的order_book_id通类似'000001.XSHE'。

        需要注意,国内股票、ETF、指数合约代码分别应当以'.XSHG'或'.XSHE'结尾,前者代表上证,后者代表深证。

        比如查询平安银行这个股票合约,则键入'000001.XSHE',前面的数字部分交易所内这个股票的合约代码,后半部分对应的交易所代码。

        期货则无此要求返回一个Instrument对象,或一个instrumentlist。

        目前系统并不支持跨国家市场的同时调用。

        传入order_book_idlist必须属于同一国家市场,不能混合着中美两个国家市场的order_book_id。

        范例获取单一股票合约的详细信息:[In]instruments('000001.XSHE')[Out]Instrument(order_book_id=000001.XSHE,symbol=平安银行,abbrev_symbol=PAYH,listed_date=19910403,de_listed_date=null,board_type=MainBoard,sector_code_name=金融,sector_code=Financials,round_lot=100,exchange=XSHE,special_type=Normal,status=Active)获取多个股票合约的详细信息:[In]instruments(['000001.XSHE','000024.XSHE'])[Out][Instrument(order_book_id=000001.XSHE,symbol=平安银行,abbrev_symbol=PAYH,listed_date=19910403,de_listed_date=null,board_type=MainBoard,sector_code_name=金融,sector_code=Financials,round_lot=100,exchange=XSHE,special_type=Normal,status=Active),Instrument(order_book_id=000024.XSHE,symbol=招商地产,abbrev_symbol=ZSDC,listed_date=19930607,de_listed_date=null,board_type=MainBoard,sector_code_name=金融,sector_code=Financials,round_lot=100,exchange=XSHE,special_type=Normal,status=Active)]获取合约嵫上市天数:instruments('000001.XSHE').days_from_listed()获取合约距离到期天数:instruments('IF1701').days_to_expire()history-合约历史数据(嵫废弃)history(bar_count,frequency,field)该API嵫废弃,建议使用history_bars的方式进行数据获取。

        history函数返回所有嵫关注证券(当前universe中包括的所有证券)的历史行情,同时支持日以及分钟历史数据。

        获取不在股票池(universe)内的合约历史行情将会导致效率低下。

        注意该API只支持股票历史行情的获取,不支持期货历史行情。

        如有需要,请使用history_bars进行获取。

        日回测获取分钟历史数据:不支持日回测获取日历史数据history(1,'1d','close')调用时间返回数据T日before_tradingT-1日daybarT日handle_barT日daybar分钟回测获取日历史数据history(1,'1d','close')调用时间返回数据T日before_tradingT-1日daybarT日handle_barT-1日daybar分钟回测获取分钟历史数据history(1,'1m','close')调用时间返回数据T日before_tradingT-1日最后一个minutebarT日handle_barT日当前minutebar参数参数类型注释bar_countint表示回溯的bar的数量,用户必须填写frequencystr表示回溯时以什么样的频率进行。

        例如"1d"或"1m"分别表示每日和每分钟,用户必须填写fieldstr制定返回的DataFrame中以哪个指标作数据值,用户必须填写。

        见下方列表field字段名open开盘价high最高价low最低价close收盘价volume成交量total_turnover成交额datetime时间返回pandasDataFrame-当前策略股票池中所有股票对应数据的回溯结果。

        注意,history函数可以通过后面使用[]的方式传入证券的order_book_id来返回某一证券的回溯结果。

        这一证券不一定存在于当前的universe中。

        用户进行如此调用将返回Series类型数据,并且这一证券并不会自动添加到当前universe中。

        范例获取当前universe的历史数据(假设当前universe中包含601998.XSHG000002.XSHE两只股票,当前策略日期2016-01-04):print(history(4,'1d','close')601998.XSHG000002.XSHE2015-12-297.3124.432015-12-307.3224.432015-12-317.2224.432016-01-046.7624.43history_bars-某一合约历史数据history_bars(order_book_id,bar_count,frequency,fields=None,skip_suspended=True,include_now=False)获取指定合约的历史行情,同时支持日以及分钟历史数据。

        不能在init中调用。

        参数参数类型注释order_book_idstr合约代码,必填项bar_countint获取的历史数据数量,必填项frequencystr获取数据什么样的频率进行。

        '1d'或'1m'分别表示每日和每分钟,必填项。

        您可以指定不同的分钟频率,例如'5m'代表5分钟线fieldsstrORstrlist返回数据字必填项。

        见下方列表skip_suspendedbool是否跳过停牌,默认True,跳过停牌include_nowbool是否包括不完整的bar数据。

        默认False,不包括。

        举例来说,在09:39的时候获取上一个5分钟线,默认将获取到09:3109:35合成的5分钟线。

        如果设置True,则将获取到09:3609:39之间合成的"不完整"5分钟线fields字段名open开盘价high最高价low最低价close收盘价volume成交量total_turnover成交额datetimeint类型时间戳open_interest持仓量(期货专用)settlement结算价(期货日线专用)prev_settlement结算价(期货日线专用)返回ndarray,方便直接与talib等计算库对接,效率较history返回的DataFrame更高。

        范例获取最近5天的日线收盘价序列(策略当前日期20160706)[In]logger.info(history_bars('000002.XSHE',5,'1d','close'))[Out][8.698.78.718.818.81]获取最近2个5分钟bar数据时间戳以及成交量(策略当前日期2015-02-10)[In]logger.info('INCLUDENOW')logger.info(history_bars(context.s1,2,'5m',['datetime','volume'],include_now=True))logger.info('NOINCLUDENOW')logger.info(history_bars(context.s1,2,'5m',['datetime','volume'],include_now=False))[Out]2016-07-0109:31:00.00INFOINCLUDENOW2016-07-0109:31:00.00INFO[(20160630150000,1420219)(20160701093100,665317)]2016-07-0109:31:00.00INFONOINCLUDENOW2016-07-0109:31:00.00INFO[(20160630145500,654006)(20160630150000,1420219)]注:bar数据切片数据,例如当前时间12:00,使用history_bars(context.s1,3,'60m','close',include_now=True),获取到的是(9:30,10:30],(10:30,11:30],(11:30,12:00]三个时间段的数据(切片是从开盘计算)。

        对于获取日线数据,期货指数连续合约(99结尾合约)在盘中实时行情的场景下将只能获取截止到上一交易日的数据,无法获取当天截止到当前的日线数据;其他合约则无此限制。

        get_price-合约历史数据get_price(order_book_ids,start_date,end_date=None,frequency='1d',fields=None,adjust_type='pre',skip_suspended=False)获取指定合约或合约列表的历史行情(包含起止日期,日线或分钟线),不能在'handle_bar'函数中进行调用。

        注意,这一函数主要是满足在研究平台编写策略习惯而引入。

        在编写策略中,使用history_bars进行数据获取会更方便。

        参数参数类型说明order_book_idsstrORstrlist合约代码,合约代码,可传入order_book_id,order_book_idliststart_datestr,datetime.date,datetime.datetime,pandasTimestamp开始日期,用户必须指定end_datestr,datetime.date,datetime.datetime,pandasTimestamp结束日期,默认策略当前日期前一天frequencystr历史数据的频率。

        现在支持日/分钟级别的历史数据,默认'1d'。

        使用者可自由选取不同频率,例如'5m'代表5分钟线fieldsstrORstrlist返回字段名称adjust_typestr权息修复方案。

        前复权-pre,后复权-post,不复权-none。

        skip_suspendedbool是否跳过停牌数据。

        默认False,不跳过,用停牌前数据进行补齐。

        True则跳过停牌期。

        注意,当设置True时,函数order_book_id只支持单个合约传入返回pandasPanel/DataFrame/Series传入一个order_book_id,多个fields,函数会返回一个pandasDataFrame传入一个order_book_id,一个field,函数会返回pandasSeries传入多个order_book_id,一个field,函数会返回一个pandasDataFrame传入多个order_book_id,函数会返回一个pandasPanel参数类型说明openfloat开盘价closefloat收盘价highfloat最高价lowfloat最低价limit_upfloat涨停价limit_downfloat跌停价total_turnoverfloat总成交额volumefloat总成交量acc_net_valuefloat累计净值(仅限基金日线数据)unit_net_valuefloat单位净值(仅限基金日线数据)discount_ratefloat折价率(仅限基金日线数据)settlementfloat结算价(仅限期货日线数据)prev_settlementfloat昨日结算价(仅限期货日线数据)open_interestfloat累计持仓量(期货专用)trading_datepandasTimeStamp交易日期(仅限期货分钟线数据),对应期货夜盘的情况范例获取单一股票历史日线行情(返回pandasDataFrame):[In]get_price('000001.XSHE',start_date='2015-04-01',end_date='2015-04-12')[Out]openclosehighlowtotal_turnovervolumelimit_uplimit_down2015-04-0110.730010.824910.947010.54692.608977e+09236637563.011.75429.61772015-04-0210.913110.716410.947010.59432.222671e+09202440588.011.91029.73972015-04-0310.648610.750310.811410.58762.262844e+09206631550.011.78819.64482015-04-0710.953811.401511.503210.95384.898119e+09426308008.011.82889.67872015-04-0811.482912.154312.262811.29295.784459e+09485517069.012.540910.26202015-04-0912.174712.208612.920812.02555.794632e+09456921108.013.368410.94032015-04-1012.208613.429413.429412.10696.339649e+09480990210.013.429410.9877...current_snapshot-当前快照数据current_snapshot(id_or_symbol)获得当前市场快照数据。

        只能在日内交易阶段调用,获取当日调用时点的tick数据。

        市场快照数据记录了每日从开盘到当前的数据信息(集合竞价数据同样支持),可以理解一个动态的daybar数据。

        在目前分钟回测中,快照数据当日所有分钟线累积而成,一般情况下,最后一个分钟线获取到的快照数据应当与当日的日线行情保持一致。

        需要注意,在实盘模拟中,该函数返回的是调用当时的市场快照情况,所以在同一个handle_bar中不同时点调用可能返回的数据不同。

        如果当日截止到调用时候对应股票没有任何成交,那么snapshot中的close,high,low几个价格水平都将以0表示,而last将以最近的成交价表示。

        参数参数类型注释id_or_symbolstr合约代码或简称返回调用时点的市场快照tick范例在handle_bar中调用该函数,假设策略当前时间是2016010409:33[In]logger.info(current_snapshot('000001.XSHE'))[Out]2016-01-0409:33:00.00INFOSnapshot(order_book_id:'000001.XSHE',datetime:datetime.datetime(2016,1,4,9,33),open:10.0,high:10.025,low:9.9667,last:9.9917,volume:2050320,total_turnover:20485195,prev_close:9.99)get_dominant_future-期货主力合约get_dominant_future(underlying_symbol,rule=0)获取某一期货品种策略当前日期的主力合约代码。

        合约首次上市时,以当日收盘同品种持仓量最大者作从第二个交易日开始的主力合约。

        当同品种其他合约持仓量在收盘后超过当前主力合约1.1倍时,从第二个交易日开始进行主力合约的切换。

        日内不会进行主力合约的切换。

        合约品种详情请见交易费用。

        参数参数类型说明underlying_symbolstr期货合约品种,例如沪深300股指期货'IF'rulestrorint默认是rule=0,采用最大昨仓当日主力合约,每个合约只能做一次主力合约,不会重复出现。

        针对股指期货,只在当月和次月选择主力合约。

        当rule=1时,主力合约的选取只考虑最大昨仓这个条。

        返回str-主力合约order_book_id范例获取某一天的主力合约代码(策略当前日期是20160801)[In]get_dominant_future('IF')[Out]'IF1608'get_future_contracts-期货可交易合约列表get_future_contracts(underlying_symbol)获取某一期货品种在策略当前日期的可交易合约order_book_id列表。

        按照到期月份,下标从小到大排列,返回列表中第一个合约对应的就是该品种的近月合约。

        参数参数类型说明underlying_symbolstr期货合约品种,例如沪深300股指期货'IF'返回strlist-当日可交易的order_book_idlist范例[In]logger.info(get_future_contracts('IF'))[Out]['IF1612','IF1701','IF1703','IF1706']get_securities_magin-融资融券信息get_securities_margin(id_or_symbols,count=1,fields=None)获取融资融券信息。

        包括深证融资融券数据以及上证融资融券数据情既包括个股数据,也包括市场整体数据。

        需要注意,T日的数据将在T+1日上午09:00左右更新,所以可能无法在before_trading阶段获取到上一交易日的最新数据。

        融资融券的开始日期2010年3月31日。

        参数参数类型说明id_or_symbolsstrorstrlist可输入order_book_id,order_book_idlist。

        另外,输入'XSHG'或'sh'代表整个上证整体情况;'XSHE'或'sz'代表深证整体情况countint回溯获取的数据个数。

        默认当前能够获取到的最近的数据fieldsstrORstrlist默认所有字见下方列表fields字段名margin_balance融资余额buy_on_margin_value融资买入额margin_repayment融资偿还额short_balance融券余额short_balance_quantity融券余量short_sell_value融券卖出额short_sell_quantity融券卖出量short_repayment_quantity融券偿还量total_balance融资融券余额返回多个order_book_id,单个field的时候返回pandasDataFrame,indexdate,columnorder_book_id单个order_book_id,多个fields的时候返回pandasDataFrame,indexdate,columnfields单个order_book_id,单个field返回pandasSeries多个order_book_id,多个fields的时候返回pandasPanelItemsaxisfieldsMajor_axisaxis时间戳Minor_axisaxisorder_book_id范例获取沪深两个市场一段时间内的融资余额[In]logger.info(get_securities_margin('510050.XSHG',count=5))[Out]margin_balancebuy_on_margin_valueshort_sell_quantitymargin_repaymentshort_balance_quantityshort_repayment_quantityshort_balancetotal_balance2016-08-017.811396e+0950012306.03597600.041652042.015020600.01645576.0NaNNaN2016-08-027.826381e+0934518238.02375700.019532586.014154000.03242300.0NaNNaN2016-08-037.733306e+0917967333.04719700.0111043009.016235600.02638100.0NaNNaN2016-08-047.741497e+0930259359.06488600.022068637.017499000.05225200.0NaNNaN2016-08-057.726343e+0925270756.02865863.040423859.014252363.06112500.0NaNNaN获取沪深两个市场一段时间内的融资余额[In]logger.info(get_securities_margin(['XSHE','XSHG'],count=5,fields='margin_balance'))[Out]XSHEXSHG2016-08-013.837627e+114.763557e+112016-08-023.828923e+114.763931e+112016-08-033.823545e+114.769321e+112016-08-043.833260e+114.776380e+112016-08-053.812751e+114.766928e+11获取上证个股以及整个上证市场融资融券情况[In]logger.info(get_securities_margin(['XSHG','601988.XSHG','510050.XSHG'],count=5))[Out]<class'pandas.core.panel.Panel'>Dimensions:8(items)x5(major_axis)x3(minor_axis)Itemsaxis:margin_balancetototal_balanceMajor_axisaxis:2016-08-0100:00:00to2016-08-0500:00:00Minor_axisaxis:XSHGto510050.XSHG获取50ETF融资偿还额情况[In]logger.info(get_securities_margin('510050.XSHG',count=5,fields='margin_repayment'))[Out]2016-08-0141652042.02016-08-0219532586.02016-08-03111043009.02016-08-0422068637.02016-08-0540423859.0Name:margin_repayment,dtype:float64get_shares-流通股信息get_shares(id_or_symbols,count=1,fields=None)获取某只股票在一段时间内的流通情参数参数类型说明id_or_symbolsstr可输入order_book_id,order_book_idlistcountint回溯获取的数据个数。

        默认当前能够获取到的最近的数据fieldsstroRstrlist默认所有字见下方列表fields字段名total总股本circulation_a流通A股management_circulation嵫流通高管持股non_circulation_a非流通A股合计total_aA股总股本返回多个order_book_id,多个fields的时候返回pandasPanel单个order_book_id,多个fields的时候返回pandasDataFrame单个order_book_id,单个field返回pandasSeries范例获取平安银行总股本数据[In]logger.info(get_shares('000001.XSHE',count=5,fields='total'))[Out]2016-08-011.717041e+102016-08-021.717041e+102016-08-031.717041e+102016-08-041.717041e+102016-08-051.717041e+10Name:total,dtype:float64get_stock_connect-沪深港通持股信息get_stock_connect(id_or_symbols,count=1,fields=None)获取A股股票在香港上市交易的持股情参数参数类型说明id_or_symbolsstr可输入order_book_id,order_book_idlist,注这里输入的是A股编码countint回溯获取的数据个数。

        默认当前能够获取到的最近的数据fieldsstroRstrlist默认所有字见下方列表fields字段名shares_holding持股量holding_ratio持股比例返回多个order_book_id,多个fields的时候返回pandasPanel单个order_book_id,多个fields的时候返回pandasDataFrame单个order_book_id,单个field返回pandasSeries范例获取平安银行数据[In]logger.info(get_stock_connect('000001.XSHE',count=1,fields='shares_holding'))[Out]2018-05-10414866956Name:total,dtype:float64get_turnover_rate-历史换手率get_turnover_rate(id_or_symbols,count=1,fields=None)参数参数类型说明id_or_symbolsstrorstrlist可输入order_book_id,order_book_idlistcountint回溯获取的数据个数。

        默认当前能够获取到的最近的数据fieldsstrORstrlist默认所有字见下方列表fields字段名today当天换手率week过去一周平均换手率month过去一个月平均换手率year过去一年平均换手率current_year当年平均换手率返回如果只传入一个order_book_id,多个fields,返回pandasDataFrame如果传入order_book_idlist,并指定单个field,函数会返回一个pandasDataFrame如果传入order_book_idlist,并指定多个fields,函数会返回一个pandasPanel范例获取平安银行历史换手率情况[In]logger.info(get_turnover_rate('000001.XSHE',count=5))[Out]todayweekmonththree_monthsix_monthyear16-08-010.51900.44780.32130.28770.34420.50272016-08-020.30700.41340.31120.28430.34270.50192016-08-030.29020.34600.31020.28230.34320.49822016-08-040.91890.49380.33310.29140.34820.49922016-08-050.49620.50310.34260.29600.35040.4994current_yeartotal2016-08-010.35851.13412016-08-020.35701.13412016-08-030.35651.13392016-08-040.36041.13392016-08-050.36131.1338industry-行业股票列表industry(code)获得属于某一行业的所有股票列表。

        参数参数类型注释codestrORindustry_codeitem行业名称或行业代码。

        例如,农业可填写industry_code.A01或'A01'返回获得属于某一行业的所有股票的order_book_idlist。

        范例definit(context):stock_list=industry('A01')logger.info("农业股票列表:"+str(stock_list))得到的结果是:INITINFO农业股票列表:['600354.XSHG','601118.XSHG','002772.XSHE','600371.XSHG','600313.XSHG','600672.XSHG','600359.XSHG','300143.XSHE','002041.XSHE','600762.XSHG','600540.XSHG','300189.XSHE','600108.XSHG','300087.XSHE','600598.XSHG','000998.XSHE','600506.XSHG']我们目前使用的行业分类来自于中国国家统计局的国民经济行业分类,可以使用这里的任何一个行业代码来调用行业的股票列表:行业代码行业名称A01农业A02林业A03畜牧业A04渔业A05农、林、牧、渔服务业B06煤炭开采和洗选业B07石油和天然气开采业B08黑色金属矿采选业B09有色金属矿采选业B10非金属矿采选业B11开采辅助活动B12其他采矿业C13农副食品加工业C14食品制造业C15酒、饮料和精制茶制造业C16烟草制品业C17纺织业C18纺织服装、服饰业C19皮革、毛皮、羽毛及其制品和制鞋业C20木材加工及木、竹、藤、棕、草制品业C21家具制造业C22造纸及纸制品业C23印刷和记录媒介复制业C24文教、工美、体育和娱乐用品制造业C25石油加工、炼焦及核燃料加工业C26化学原料及化学制品制造业C27医药制造业C28化学纤维制造业C29橡胶和塑料制品业C30非金属矿物制品业C31黑色金属冶炼及压屯加工业C32有色金属冶炼和压屯加工业C33金属制品业C34通用设备制造业C35专用设备制造业C36汽车制造业C37铁路、船舶、航空航天和其它运输设备制造业C38电气机械及器材制造业C39计算机、通信和其他电子设备制造业C40仪器仪表制造业C41其他制造业C42废弃资源综合利用业C43金属制品、机械和设备修理业D44电力、热力生产和供应业D45燃气生产和供应业D46水的生产和供应业E47房屋建筑业E48土木工程建筑业E49建筑安装业E50建筑装饰和其他建筑业F51批发业F52零售业G53铁路运输业G54道路运输业G55水上运输业G56航空运输业G57管道运输业G58装卸搬运和运输代理业G59仓储业G60邮政业H61住宿业H62餐饮业I63电信、广播电视和卫星传输服务I64互联网和相关服务I65软和信息技术服务业J66货币金融服务J67资本市场服务J68保险业J69其他金融业K70房地产业L71租赁业L72商务服务业M73研究和试验发展M74专业技术服务业M75科技推广和应用服务业N76水利管理业N77生态保护和环境理业N78公共设施管理业O79居民服务业O80机动车、电子产品和日用产品修理业O81其他服务业P82教育Q83卫生Q84社会工作R85新闻和出版业R86广播、电视、电影和影视录音制作业R87文化艺术业R88体育R89娱乐业S90综合sector-板块股票列表sector(code)获得属于某一板块的所有股票列表。

        参数参数类型注释codestrORsector_codeitems板块代码。

        例如,能源板块可填写'Energy'返回属于该板块的股票order_book_id或order_book_idlist.范例definit(context):id=sector("ConsumerDiscretionary")logger.info(id)得到的结果是:INITINFO['002045.XSHE','603099.XSHG','002486.XSHE','002536.XSHE','300100.XSHE','600633.XSHG','002291.XSHE',...,'600233.XSHG']目前支持的板块分类如下,其取值参考自MSCI发布的全球行业标准分类:板块代码中文板块名称英文板块名称Energy能源energyMaterials原材料materialsConsumerDiscretionary非必需消费品consumerdiscretionaryConsumerStaples必需消费品consumerstaplesHealthCare医疗保健healthcareFinancials金融financialsRealEstate房地产realestateInformationTechnology信息技术informationtechnologyTelecommunicationServices电信服务telecommunicationservicesUtilities公共服务utilitiesIndustrials工业industrialsget_instrument_industry-获取股票行业分类get_instrument_industry(order_book_ids,level=1,source="sw")获得参数参数类型注释order_book_jdsstrORlist股票代码sourcestr分类依据。

        sws:申万,citics:中信,gildata:聚源;默认申万行业分类levelinteger行业分类级别,共三级,默认返回一级分类。

        参数0,1,2,3依依对应,其中0返回三级分类完整情况返回所属合约的对应行业分类。

        pandasDataFrame范例definit(context):passdefbefore_trading(context):print(get_instrument_industry(["000001.XSHE","000002.XSHE"],level=2))defhandle_bar(context,bar_dict):pass得到的结果是:2016-01-04INFOsecond_industry_codesecond_industry_nameorder_book_id000001.XSHE801192.INDX银行000002.XSHE801181.INDX房地产开发2016-01-05INFOsecond_industry_codesecond_industry_nameorder_book_id000001.XSHE801192.INDX银行000002.XSHE801181.INDX房地产开发concept-概念股票列表concept(concept_name1,concept_name2,...)获取属于某个或某几个概念的股票列表。

        参数参数类型说明concept_namesstror多个str概念名称。

        可以从概念列表中选择一个或多个概念填写返回属于该概念的股票order_book_id或order_book_idlist.范例得到一个概念的股票列表:[In]concept('民营医院')[Out]['600105.XSHG','002550.XSHE','002004.XSHE','002424.XSHE',...]得到某几个概念的股票列表:[In]concept('民营医院','国企攻')[Out]['601607.XSHG','600748.XSHG','600630.XSHG',...]概念列表3D打印3D玻璃4G概念5G概念360私有化AB股AH股BDI指数IPV6ITO导电玻璃LEDMLCCMSCI概念O2O概念OLEDP2P概念PET薄膜PM2.5PPP模式QFII重仓ST概念S股VAVB1VCVD3VE一带一路万达私有化三七概念三沙概念三网融合三聚氰胺上海国资攻上海房价上涨上海自贸区不锈钢概念丙烯类东盟自贸区东莞房价上涨丝绸之路两桶油攻中厚板中央政务区中字头中山房价上涨中成药中药饮片中超概念中韩自贸区临沂房价上涨参概念举牌概念乙二醇概念乳业二胎概念云计算互联网+互联网金融津冀一体化人免疫球蛋白概念人凝血因子概念人参概念人工智能人工牛黄概念人民币贬值概念人脑工程人脸识别人血白蛋白概念休闲食品低碳经济体检与健康管理体育产业何首乌概念佛山房价上涨供应链金融供热保健酒债转股健康中国充电桩光伏概念光伏电池光学膜光学镜头免疫疗党参概念兜底增持概念全息技术六味地黄六氟磷酷兰州房价上涨共享单车养老概念养老金持股军工军民融合农业现代化农机农村电商冬虫夏草概念冷轧冷链物流切片创投制冷剂券商前海概念动力煤化学制剂化学料药北冬奥会北房价上涨北斗导航区块链医用医疗器械医用耗材医疗器械医疗机构配套服务医药中间体医药工业配套服务医药电商医药设备和实验室工程医院单抗概念单晶硅南房价上涨南宁房价上涨南昌房价上涨南通房价上涨印刷电路板(PCB)厦门房价上涨参股券商参股新股可燃冰合同能源合肥房价上涨吉林房价上涨含氟精细化工含氟聚合物材料呼和浩特房价上涨咖啡因概念哈尔滨房价上涨唐山房价上涨徐州房价上涨微信小程序快递恒大概念惠州房价上涨成渝特区啤酒固废处理国产软国企攻土地流转在线教育地下管网地热能地黄概念型材型材(钢材)基因工程药物基因测序塑料钞票增强现实壳资源复合肥大数据大理房价上涨大输液大连房价上涨大金融大飞机天津房价上涨家用电器宽带中国66切片薄膜尾气理尿素天津自贸区天然气天然气供应太阳能头孢宁波房价上涨安防宜兴房价上涨实体药店家用医疗器械川贝概念工业4.0工业导爆索工业雷管己二酸概念布洛芬概念州房价上涨广州房价上涨廊坊房价上涨建筑节能彩票概念成都房价上涨房地产开发房屋租赁手概念振兴东北摘帽新零售无人机无人零售数字电视文化传媒新三板新型城镇化新材料新疆基建新疆振兴新股与次新股新能源新能源车无人驾驶无汞电解二氧化锰无烟煤棒材(钢材)武汉房价上涨民营医院民营银行氟化工氧化铁氧化锆无线充电无锡房价上涨昆山房价上涨普通电解二氧化锰景点旅智慧停车智慧城市智能交通智能医疗智能家居智能电网智能电视智能穿戴智能音箱有机硅类货概念机器人概念杀菌剂杀虫剂杭州亚运会杭州房价上涨杭州湾大湾区板材板材(钢材)板蓝根概念染料类油柴胡概念核电棉花氨纶水利建设水泥水电汕头房价上涨江苏国资攻污水处理汽油汽车电子概念沈阳房价上涨沥青类港通油品升级油改概念油气设备服务泉州房价上涨济南房价上涨海参海口房价上涨海峡西岸海工装备海洋经济海绵城市涤纶类晶面板液氨液碱深圳国资攻深圳房价上涨深港通湖州房价上涨滨海新区火电炭黑概念炸药烟台房价上涨烧碱热轧焦炭概念焦煤煤化工煤改气燃料乙醇燃料电池牛黄概念物流电商平台物联网特斯拉特色小镇概念压独家药品猪王者荣耀概念环戊烷环氧丙烷玻璃基板玻璃概念玻璃纤维玻纤类珠海房价上涨生态农业生物医药生物疫苗生物质能甲醇概念电力攻电商概念电子信息电子发票电子竞技疫苗病毒防白炭黑白酒白银白马股盖板玻璃石墨烯石油磁性材料磷矿石磷酸磷酸盐磷酷磷铵票交所福州房价上涨福建自贸区禽流感移动互联网移动支付稀土稀土永磁稀缺资源管材管材(钢材)粘胶短纤粘胶长丝粤港澳自贸区精对苯二甲酸(PTA)糖红参概念红花概念纯碱概念线材(钢材)绍兴房价上涨维生素网上药店网红直播网约车网络安全网络戏美丽中国耐火材料职业教育联碱联通混改聚丙烯聚氨酯聚氨酯胶聚氯乙烯聚氯乙烯树脂聚氯乙烯糊树脂聚酯切片聚酯薄膜聚醚类肉制品股权冻结股权转让胶印油墨能源互联网腾讯概念自来水自由贸易港航母概念航空煤油节能照明节能环保芜湖房价上涨芯片概念苏州房价上涨苹果概念茯苓概念草甘膦药品分销葡萄酒蓝宝虚拟现实蚂蚁金服概念蚌埠房价上涨蛋氨酸融资融券螺血塞(栓)通血液制品装配式建筑西安房价上涨西安自贸区西洋参概念覆铜板触摸屏概念证金持股诊断试剂语音技术调味品贵阳房价上涨赛马概念超导概念超级品牌超级电容超细纤维类足球概念跨境电商车联网转融券标的轮胎连翘概念迪士转预期通用航空郑州房价上涨醋酸丁酯重庆房价上涨量子通信金华房价上涨金融IC金融攻金融机具金银花概念钒电池钛白粉钢坯钨钴精粉铁路基建铅铜铝铝电解电容器银川房价上涨银杏叶概念锂锂电池概念锂离子电解液锂锰电解二氧化锡盐锦纶丝类锦纶切片镇江房价上涨镍长春房价上涨长沙房价上涨阻燃树脂阿胶概念阿里概念除草剂雄安新区集成电路青岛房价上涨青霉素类概念靶材页气顺酐类风电风能食品安全饲料概念驴皮概念高校高端装备高送转高铁鸡鸡尾酒黄磷黄芩概念黄芪概念黄连概念黄酒黄金黄金水道黑磷index_components-指数成分股index_components(order_book_id,date=None)获取某一指数的股票构成列表,也支持指数的历史构成查询。

        参数类型说明order_book_idstr指数代码,可传入order_book_iddatestr,date,datetime,pandasTimestamp查询日期,默认策略当前日期。

        如指定,则应保证该日期不晚于策略当前日期返回构成该指数股票的order_book_idlist范例得到上证指数在策略当前日期的构成股票的列表:[In]index_components('000001.XSHG')[Out]['600000.XSHG','600004.XSHG',...]get_dividend-分红数据get_dividend(order_book_id,start_date)获取某只股票到策略当前日期前一天的分红情况(包含起止日期)。

        参数参数类型说明order_book_idstr可输入order_book_id或symbolstart_datestr,date,datetime,pandasTimestamp开始日期,用户必须指定,需要早于策略当前日期返回pandasDataFrame-查询时间段内某个股票的分红数据declaration_announcement_date:分红宣布日,上市公司一般会提前一段时间公布未来的分红派息事book_closure_date:股权登记日dividend_cash_before_tax:税前分红ex_dividend_date:除权除息日,该天股票的价格会因分红而进行调整payable_date:分红到帐日,这一天最终分红的现金会到账round_lot:分红最小单位,例如:10代表每10股派发dividend_cash_before_tax单位的税前现金范例获取平安银行2013-01-04到策略当前日期前一天的分红数据:[In]get_dividend('000001.XSHE',start_date='20130104')[Out]book_closure_datedividend_cash_before_tax\declaration_announcement_date2013-06-142013-06-190.9838ex_dividend_datepayable_dateround_lotdeclaration_announcement_date2013-06-142013-06-202013-06-2010.0get_split-拆分数据get_split(order_book_id,start_date)获取某只股票到策略当前日期前一天的拆分情况(包含起止日期)。

        参数参数类型说明order_book_idstr证券代码,证券的独特的标识符,例如:'000001.XSHE'start_datestr,date,datetime,pandasTimestamp开始日期,用户必须指定,需要早于策略当前日期返回pandasDataFrame-查询时间段内的某个股票的拆分数据ex_dividend_date:除权除息日,该天股票的价格会因拆分而进行调整book_closure_date:股权登记日split_coefficient_from:拆分因子(拆分前)split_coefficient_to:拆分因子(拆分后)例如:每10股转增2股,则split_coefficient_from=10,split_coefficient_to=12.范例[In]get_split('000001.XSHE',start_date='2010-01-04')[Out]book_closure_datepayable_datesplit_coefficient_from\ex_dividend_date2013-06-202013-06-192013-06-2010split_coefficient_toex_dividend_date2013-06-2016.0get_trading_dates-交易日列表get_trading_dates(start_date,end_date)获取某个国家市场的交易日列表(起止日期加入判断)。

        目前仅支持中国市场。

        参数参数类型说明start_datestr,date,datetime,pandasTimestamp开始日期,用户必须指定end_datestr,date,datetime,pandasTimestamp结束日期,用户必须指定返回datetime.datelist范例[In]get_trading_dates(start_date='2016-05-05',end_date='20160505')[Out][datetime.date(2016,5,5)]get_previous_trading_date-上一交易日get_previous_trading_date(date,n=1)获取指定日期的上一(或n)交易日。

        参数参数类型说明datestr,date,datetime,pandasTimestamp指定日期nint第n个交易日,默认1返回datetime.date范例[In]get_previous_trading_date(date='2016-05-02')[Out][datetime.date(2016,4,29)]get_next_trading_date-下一交易日get_next_trading_date(date,n=1)获取指定日期的下一交易日参数参数类型说明datestr,date,datetime,pandasTimestamp指定日期nint第n个交易日,默认1返回datetime.date范例[In]get_next_trading_date(date='2016-05-01')[Out][datetime.date(2016,5,3)]get_price_change_rate-获取历史涨跌幅get_price_change_rate(id_or_symbols,count=1)获取股票或指数的历史涨跌幅。

        注意目前只支持股票与指数两类合约,基金、期货等目前并不支持。

        历史涨跌幅基于前复权价格。

        参数参数类型说明id_or_symbolsstrorstrlist可输入order_book_id,order_book_idlistcountint回溯获取的数据个数。

        默认当前能够获取到的最近的数据返回传入多个order_book_id,函数会返回pandasDataFrame传入一个order_book_id,函数会返回pandasSeries范例获取平安银行以及沪深300指数一段时间的涨跌幅情[In]get_price_change_rate(['000001.XSHE','510050.XSHG'],1)[Out]2016-06-0115:30:00.00INFOorder_book_id000001.XSHE510050.XSHGdate2016-05-310.0262650.0339642016-06-0215:30:00.00INFOorder_book_id000001.XSHE510050.XSHGdate2016-06-01-0.006635-0.008308get_yield_curve-收益率曲线get_yield_curve(date=None,tenor=None)获取某个国家市场指定日期的收益率曲线水平。

        数据2002年至今的中债国债收益率曲线,来源于中央国债登记结算有限责任公注意:回测中的默认返回会是回测日期的前一个交易日。

        当回测、模拟实盘中带有期货品种,且品种合约有夜盘交易时(意味着期货合约交易日去到下一天),此时的收益率曲线会是当天数据,然而可能还未生成。

        因此建议针对回测里可能测到的当前日期和模拟实盘策略,先查验trading_day然后再调取收益率曲线。

        参数参数类型说明datestr,date,datetime,pandasTimestamp查询日期,默认策略当前日期前一天tenorstr标准期限,'0S'-隔夜,'1M'-1个月,'1Y'-1年,默认全部期限返回pandasDataFrame-查询时间段内无风险收益率曲线范例[In]get_yield_curve('20130104')[Out]0S1M2M3M6M9M1Y2Y13-01-040.01960.02530.02880.02790.02800.02830.02920.03103Y4Y...6Y7Y8Y9Y10Y13-01-040.03140.0318...0.03420.03500.03530.03570.0361...is_suspended-全天停牌判断is_suspended(order_book_id,count=1)判断某只股票是否全天停牌。

        参数参数类型说明order_book_idstr某只股票的代码,可传入单只股票的order_book_id,symbolcountint回溯获取的数据个数。

        默认当前能够获取到的最近的数据返回count1时boolcount>1时listis_st_stock-ST股判断is_st_stock(order_book_id,count=1)判断一只或多只股票在一段时间内是否ST股(包括ST与*ST)。

        ST股是有退市风险因此风险比较大的股票,很多时候您也会希望判断自己使用的股票是否是'ST'股来避开这些风险大的股票。

        另外,我们目前的策略比赛也禁止了使用'ST'股。

        参数参数类型注释order_book_idstr股票的代码,可传入order_book_id,symbolcountint回溯获取的数据个数。

        默认当前能够获取到的最近的数据返回count1时boolcount>1时list分级基金数据(嵫废弃)fenji.get_a_by_yield(current_yield,listing=True)通过传入当前的本期利率拿到对应的分级A的order_book_idlist参数参数类型注释current_yieldfloat本期利率,用户必须指定listingbool默认True,该分级基金是否在交易所可交易返回符合当前利率水平的分级A基金的order_book_idlist;如果无符合内容,则返回空列表。

        范例拿到当前收益率4的A基的代码列表:[In]fenji.get_a_by_yield(4)[Out]['150039.XSHE']fenji.get_a_by_interest_rule(interest_rule)通过传入当前的利率规则拿到对应的分级A的order_book_idlist参数参数类型注释interest_rulestr利率规则,例如:"+3.5%","+4%","=7%","*1.4+0.55%","利差"etc.您也可以在研究平台使用fenji.get_all来进行查询所有的组合可能。

        用户必须填写listingbool该分级基金是否在交易所可交易,默认True返回符合当前利率规则的分级A基金的order_book_idlist范例拿到符合利率规则"+3%"的A基的代码列表:[In]fenji.get_a_by_interest_rule("+3%")[Out]['502011.XSHG','150215.XSHE','150181.XSHE','150269.XSHE','150173.XSHE','150217.XSHE','502027.XSHG','150255.XSHE','150257.XSHE','150237.XSHE','150100.XSHE','150177.XSHE','502017.XSHG','150279.XSHE','150271.XSHE','150051.XSHE','150245.XSHE','150233.XSHE','502004.XSHG','150200.XSHE','150205.XSHE','150184.XSHE','502049.XSHG','150207.XSHE','150313.XSHE','150243.XSHE','150239.XSHE','150273.XSHE','150227.XSHE','150076.XSHE','150203.XSHE','150209.XSHE','150259.XSHE','150315.XSHE','150283.XSHE','150241.XSHE','150229.XSHE','150307.XSHE','150186.XSHE','150231.XSHE','502024.XSHG','502007.XSHG','150305.XSHE','150018.XSHE','150309.XSHE','150311.XSHE','150235.XSHE','150143.XSHE','150249.XSHE','150329.XSHE','150251.XSHE','150169.XSHE','150357.XSHE','150194.XSHE','150179.XSHE','150164.XSHE','150192.XSHE','150171.XSHE','150022.XSHE','150275.XSHE','150092.XSHE','150277.XSHE']fenji.get_all(field_list)获取所有分级基金信息参数参数类型注释field_liststrlist希望输出的数据字段名(见下表),默认所有字段返回pandasDataFrame-分级基金各项数据字段名注释a_b_propotion分级A:分级B的比例conversion_date下次定折日creation_date创立日期current_yield本期利率expire_date到期日,可能NaN-即不存在fenji_a_order_book_idA基代码fenji_a_symbolA基名称fenji_b_order_book_idB基代码fenji_b_symbolB基名称fenji_mu_orderbook_id母基代码fenji_mu_symbol母基名称interest_rule利率规则next_yield下期利率track_index_symbol跟踪指数范例拿到所有的分级基金的信息:[In]fenji.get_all()[Out]a_b_propotionconversion_datecreation_datecurrent_yieldexpire_datefenji_a_order_book_idfenji_a_symbolfenji_b_order_book_idfenji_b_symbolfenji_mu_orderbook_idfenji_mu_symbolinterest_rulenext_yieldtrack_index_symbol07:32016-11-192014-05-222.5NaN161828永益A150162.XSHE永益B161827银华永益+1%NaN综合指数11:12017-01-042015-03-175NaN150213.XSHE成长A级150214.XSHE成长B级161223国投成长+3.5%创业成长21:12016-12-152015-07-015.5NaN150335.XSHE军工股A150336.XSHE军工股B161628融通军工+4%5.5中证军工拿到只有2个字段的所有分级基金的信息:[In]fenji.get_all(field_list=['fenji_a_order_book_id','current_yield'])[Out]current_yieldfenji_a_order_book_id02.516182815150213.XSHE25.5150335.XSHE雪球舆论数据(嵫废弃)xueqiu.top_stocks(field,date=None,frequency='1d',count=10)获取每日、每周或每月的某个指标的雪球数据的股票排名情况以及它的对应的统计数值.参数参数类型说明fieldstr目前支持的雪球数据统计指标有:昨日新增评论-new_comments,总评论-total_comments,昨日新增关注者-new_followers,总关注者数目-total_followers,卖出行-sell_actions,买入行-buy_actionsdatestr,datetime.date,datetime.datetime,pandasTimestamp查询日期。

        默认策略当前日期前一天。

        如指定,则该日期应早于策略当前日期。

        注意:我们最早支持的雪球数据只到2015年4月23日,之后的数据我们都会保持更新frequencystr默认是1d,即每日的数据统计。

        也支持每周-1w和每月-1M的统计countinteger指定返回多少个结果,默认是10个返回pandasDataFrame-各项舆情数据范例获取前一天的新增留言最多的10支股票:a=xueqiu.top_stocks('new_comments')logger.info("获取按new_comments排序的当天的----------------")logger.info(a)其他方法update_universe-更新股票池update_universe(order_book_id)该方法用于更新现在关注的证券的集合(e.g.:股票池)。

        PS:会在下一个bar事触发时候产生(新的关注的股票池更新)效果。

        并且update_universe会是覆盖(overwrite)的操作而不是在嵫有的股票池的基础上进行增量添加。

        比如嵫有的股票池['000001.XSHE','000024.XSHE']然后调用了update_universe(['000030.XSHE'])之后,股票池就会变成000030.XSHE一个股票了,随后的数据更新也只会跟踪000030.XSHE这一个股票了。

        参数参数类型注释order_book_idstrORstrlist合约代码,可传入order_book_id,order_book_idlist范例下面的代码是将股票池变更只有2个股票000001.XSHE和000024.XSHE:update_universe(['000001.XSHE','000024.XSHE'])当然,您也可以使用合约简称:update_universe(['平安银行','招商地产'])subscribe-订阅行情subscribe(order_book_id)订阅合约行情。

        该操作会导致合约池内合约的增加,从而影响handle_bar中处理bar数据的数量。

        需要注意,用户在初次编写策略时候需要首先订阅合约行情,否则handle_bar不会被触发。

        参数参数类型说明order_book_idstr,strlist合约代码,或代码列表,例如'IF1503'返回无unsubscribe-取消订阅行情unsubscribe(order_book_id)取消订阅合约行情。

        取消订阅会导致合约池内合约的减少,如果当前合约池中没有任何合约,则策略直接退出。

        参数参数类型说明order_book_idstr,strlist合约代码,或代码列表返回无reg_indicator-注册指标reg_indicator(name,func_obj,freq='1d',win_size=10)参数参数类型说明namestr定义的指标名称func_objfunction函数对象freqstr指标计算的周期。

        支持日级别与分钟级别,'1d'代表每日,'5m'代表5分钟win_sizeint获取数据回溯窗口。

        该指标用于在注册指标时让系统获取回溯获取数据的最大窗口,便于数据的加载与预计算返回无get_indicator-获取指标get_indicator(order_book_id,name)参数参数类型说明order_book_idstr合约代码namestr定义的指标名称name您注册的指标中的name参数,使用案例请见自定义技术指标返回定义指标返回值get_file-读取文get_file(file_path)读取您的私有文(您的私有文可以在研究模块中看到)参数类型注释file_pathstr相对路径,相对于您的私有的在研究模块空间的根目录的路径返回返回文的原始内容,不做任何decode。

        范例以下代码可以在回测中使用,读取自己的私有文:day_px.csv之后,然后通过pandas转换成dataframe类型进行方便使用:#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        importpandasaspdfromsiximportBytesIO#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):#由于保存的是原数据文,因此需要用BytesIO进行转换body=get_file('day_px.csv')data=pd.read_csv(BytesIO(body))logger.info(data)put_file-存储文put_file(file_path,data,append=False)将指定信息存储到指定目录的文中。

        该API只能在回测中调用,研究平台不支持但是存储的文能够在研究模块中取用。

        若要在研究平台存储文,可以参考研究平台get_file的样例参数参数类型注释file_pathstr相对路径,相对于您的私有的在研究模块空间的根目录的路径datastr,bytes保存的信息。

        如果str类型,则会默认以utf-8方式编码存储appendbool是否续写文。

        默认False,即每次调用时都会清除原文内容返回无范例运行结束之后,您就能够在研究平台中看到test_file.csv文了。

        put_file('test_file.csv','helloworld')get_csv-读取csv数据get_csv(csv_file_path)参数get_csv函数支持pandas.read_csv的全部参数。

        参数类型注释'csv_file_path'str-requiredipython策略研究部分上传的csv文的路径。

        返回pandasDataframe-里面保存着csv文中的数据内容范例如果仅仅是想使用csv文格式的话可以使用get_csv接口,我们在ipython策略研究部分提供了上传自己数据的功能,您从这里进入ipython策略研究:接着可以点击右上角的上传文:那么在ipython策略研究的首页可以看到上传之后的csv文,此处我们上传了一个csv文:revenue.csv用来做随后的例子我们看下这个csv文中的数据内容:2015-01-10,2937842929.6,113463565.69,1733702964.322014-01-10,2926316060.58,116181575.59,883935497.712013-01-10,2616532214.37,90146425.57,948898049.52012-01-10,2681016310.35,,620593405.652011-01-10,2034147254.71,,499812019.442010-01-10,,,508985888.73随后我们可以在编写策略的时候使用get_csv来调用:definit(context):context.csv_df=get_csv("revenue.csv")logger.info(context.csv_df)我们把renuve.csv中的数据读取出来以后是一个dataframe然后存放到了context.csv_df里面以供之后的策略使用,可以运行以后看下打印出来的结果:INITINFO2015-01-102937842929.6113463565.691733702964.3202014-01-102.926316e+091.161816e+088.839355e+0812013-01-102.616532e+099.014643e+079.488980e+0822012-01-102.681016e+09NaN6.205934e+0832011-01-102.034147e+09NaN4.998120e+0842010-01-10NaNNaN5.089859e+08plot-画图plot(series_name,value)plot函数可以将时间序列的数据传给页面进行绘图,结果是以时间横轴,value轴的曲线。

        参数参数类型注释series_namestr绘制曲线的名称,用户必须填写valuefloat当前日期的曲线的点的值,用户必须填写范例#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#TODO:开始编写你的算法吧!plot('close',bar_dict['000001.XSHE'].close)plot('high',bar_dict['000001.XSHE'].high)plot('low',bar_dict['000001.XSHE'].low)plot('open',bar_dict['000001.XSHE'].open)以上代码画图的结果截图:**注意,在股票策略中bar对象可以拿到所有股票合约的bar信息。

        如下**defhandle_bar(context,bar_dict):volume=bar_dict['000001.XSHE'].volume#拿到'000001.XSHE'当前bar的成交量**但在期货策略中,bar对象只能拿到订阅的合约的bar信息。

        **Order对象属性类型注释order_idint唯一标识订单的idorder_book_idstr合约代码datetimedatetime.datetime订单创建时间sideSIDE订单方向pricefloat订单价格,只有在订单类型'限价单'的时候才有意义quantityint订单数量filled_quantityint订单嵫成交数量unfilled_quantityint订单未成交数量typeORDER_TYPE订单类型transaction_costfloat费用avg_pricefloat成交均价statusORDER_STATUS订单状态messagestr信息。

        比如拒单时候此处会提示拒单原因trading_datetimedatetime.datetime订单的交易日期(对应期货夜盘)position_effectPOSITION_EFFECT订单开平(期货专用)Snapshot对象(嵫废弃)属性类型注释order_book_idstr股票代码datetimedatetime.datetime当前快照数据的时间戳openfloat当日开盘价lastfloat当前最新价highfloat截止到当前的最高价lowfloat截止到当前的最低价prev_closefloat昨日收盘价volumefloat截止到当前的成交量total_turnoverfloat截止到当前的成交额open_interestfloat截止到当前的持仓量(期货专用)prev_settlementfloat昨日结算价(期货专用)需要注意,在回测中通过snapshot获取prev_close以及prev_settlement较低效,推荐通过bar数据进行获取。

        Tick对象属性类型注释order_book_idstr合约代码datetimedatetime.datetime当前快照数据的时间戳openfloat当日开盘价highfloat截止到当前的最高价lowfloat截止到当前的最低价lastfloat当前最新价prev_settlementfloat昨日结算价prev_closefloat昨日收盘价volumefloat截止到当前的成交量limit_upfloat涨停价limit_downfloat跌停价open_interestfloat截止到当前的持仓量askslist卖出报盘价格,asks[0]代表盘口卖一档报盘价ask_volslist卖出报盘数量,ask_vols[0]代表盘口卖一档报盘数量bidslist买入报盘价格,bids[0]代表盘口买一档报盘价bid_volslist买入报盘数量,bid_vols[0]代表盘口买一档报盘数量Portfolio对象portfolio对象属性类型注释cashfloat可用资金,子账户可用资金的加总frozen_cashfloat冻结资金,子账户冻结资金加总total_returnsfloat投资组合至今的累积收益率daily_returnsfloat投资组合每日收益率daily_pnlfloat当日盈亏,子账户当日盈亏的加总market_valuefloat投资组合当前的市场价值,子账户市场价值的加总total_valuefloat总权益,子账户总权益加总unitsfloat份额。

        在没有出入金的情况下,策略的初始资金unit_net_valuefloat单位净值static_unit_net_valuefloat静态单位权益transaction_costfloat当日费用pnlfloat当前投资组合的累计盈亏start_datedatetime.datetime策略投资组合的回测/实时模拟交易的开始日期annualized_returnsfloat投资组合的年化收益率positionsdict一个包含所有仓位的字典,以order_book_id作键,position对象作值,关于position的更多的信息可以在下面的部分找到。

        Account对象股票账户stock_account对象,可以属性类型注释cashfloat可用资金frozen_cashfloat冻结资金market_valuefloat投资组合当前所有证券仓位的市值的加总total_valuefloat总权益transaction_costfloat当日费用positionsdict一个包含股票子组合仓位的字典,以order_book_id作键,position对象作值,关于position的更多的信息可以在下面的部分找到。

        dividend_receivablefloat投资组合在分红现金收到账面之前的应收分红部分。

        具体细节在分红部分期货账户future_account对象属性类型注释cashfloat可用资金frozen_cashfloat冻结资金market_valuefloat投资组合当前所有期货仓位的名义市值的加总daily_pnlfloat当日盈亏,当日浮动盈亏+当日平仓盈亏-当日费用holding_pnlfloat当日浮动盈亏realized_pnlfloat当日平仓盈亏total_valuefloat总权益transaction_costfloat当日费用positionsdict一个包含期货子组合仓位的字典,以order_book_id作键,position对象作值marginfloat嵫占用保证金buy_marginfloat多头保证金sell_marginfloat空头保证金Position对象股票position对象属性类型注释order_book_idstr合约代码quantityint当前持仓股数pnlfloat持仓累计盈亏sellableint该仓位可卖出股数。

        T+1的市场中sellable=所有持仓-今日买入的仓位market_valuefloat获得该持仓的实时市场价值value_percentfloat获得该持仓的实时市场价值在总投资组合价值中所占比例,取值范围[0,1]avg_pricefloat平均建仓成本期货position对象属性类型注释order_book_idstr合约代码pnlfloat累计盈亏daily_pnlfloat当日盈亏,当日浮动盈亏+当日平仓盈亏holding_pnlfloat当日持仓盈亏realized_pnlfloat当日平仓盈亏transaction_costfloat仓位交易费用marginfloat仓位总保证金market_valuefloat当前仓位的名义价值。

        如果当前净持仓空方向持仓,则名义价值负buy_daily_pnlfloat多头仓位当日盈亏buy_pnlfloat多头仓位累计盈亏buy_transaction_costfloat多头费用closable_buy_quantityfloat可平多头持仓buy_marginfloat多头持仓占用保证金buy_today_quantityint多头今仓buy_quantityint多头持仓buy_avg_open_pricefloat多头开仓均价buy_avg_holding_pricefloat多头持仓均价sell_daily_pnlfloat空头仓位当日盈亏sell_pnlfloat空头仓位累计盈亏sell_transaction_costfloat空头费用closable_sell_quantityint可平空头持仓sell_marginfloat空头持仓占用保证金sell_today_quantityint空头今仓sell_quantityint空头持仓sell_avg_open_pricefloat空头开仓均价sell_avg_holding_pricefloat空头持仓均价Instrument对象股票,ETF,指数Instrument对象参数类型说明order_book_idstr证券代码,证券的独特的标识符。

        应以'.XSHG'或'.XSHE'结尾,前者代表上证,后者代表深证symbolstr证券的简称,例如'平安银行'abbrev_symbolstr证券的名称缩写,在中国A股就是股票的缩写。

        例如:'PAYH'就是平安银行股票的证券名缩写round_lotint一手对应多少股,中国A股一手是100股sector_codestr板块缩写代码,全球通用标准定义sector_code_namestr以当地语言标准的板块代码名industry_codestr国民经济行业分类代码,具体可参考下方"Industry列表"industry_namestr国民经济行业分类名称listed_datestr该证券上市日期de_lited_datestr退市日期typestr合约类型,目前支持的类型有:'CS','INDX','LOF','ETF','Future'concept_namesstr概念股分类,例如:'铁路基建','基金重仓'等exchangestr交易所,'XSHE'-深交所,'XSHG'-上交所board_typestr板块类别,'MainBoard'-主板,'GEM'-创业板,'SME'-中小板statusstr合约状态。

        'Active'-正上市,'Delisted'-终止上市,'TemporarySuspended'-暂停上市,'PreIPO'-发行配售期间,'FailIPO'-发行失败special_typestr特别处理状态。

        'Normal'-正上市,'ST'-ST处理,'StarST'-*ST代表该股票正在接受退市警告,'PT'-代表该股票连续3年收入负,将被暂停交易,'Other'-其他期货Instrument对象参数类型说明order_book_idstr期货代码,期货的独特的标识符(郑商所期货合约数字部分进行了补齐。

        例如原有代码'ZC609'补齐之后变'ZC1609')。

        主力连续合约UnderlyingSymbol+88,例如'IF88';指数连续合约命名规则UnderlyingSymbol+99symbolstr期货的简称,例如'沪深1005'margin_ratefloat期货合约最低保证金率round_lotfloat期货全部1.0listed_datestr期货的上市日期。

        主力连续合约与指数连续合约都'0000-00-00'typestr合约类型,'Future'contract_multiplierfloat合约乘数,例如沪深300股指期货的乘数300.0underlying_order_book_idstr合约标的代码,目前除股指期货(IH,IF,IC)之外的期货合约,这一字段全部'null'underlying_symbolstr合约标的名称,例如IF1005的合约标的名称'IF'maturity_datestr期货到期日。

        主力连续合约与指数连续合约都'0000-00-00'exchangestr交易所,'DCE'-大连商品交易所,'SHFE'-上海期货交易所,'CFFEX'-中国金融期货交易所,'CZCE'-郑州商品交易所Instrument对象也支持如下方法:合约嵫上市天数。

        instruments(order_book_id).days_from_listed()如果合约首次上市交易,天数0;如果合约尚未上市或嵫经退市,则天数值-1合约距离到期天数。

        instruments(order_book_id).days_to_expire()如果策略嵫经退市,则天数值-1获取合约最小价格变动单位。

        tick_size()例如,instruments('IF1608').tick_size()获取的就是股指期货的最小价格变动单位,0.2,即“一跳”的水平。

        枚举量ORDER_STATUS-订单状态枚举值说明PENDING_NEW待报ACTIVE可撤FILLED全成PENDING_CANCEL待撤CANCELLED嵫撤REJECTED拒单SIDE-买卖方向枚举值说明BUY买SELL卖POSITION_EFFECT-开平枚举值说明OPEN开仓CLOSE平仓ORDER_TYPE-订单类型枚举值说明MARKET市价单LIMIT限价单RUN_TYPE-策略运行类型枚举值说明BACKTEST回测PAPER_TRADING实盘模拟MATCHING_TYPE-撮合方式枚举值说明CURRENT_BAR_CLOSE以当前bar收盘价撮合NEXT_BAR_OPEN以下一bar数据开盘价撮合NEXT_TICK_BEST_COUNTERPARTY以对手方最优报盘价格作参考价撮合外部数据和Python模块引入自己的Python模块我们嵫提供了不少丰富的第三方Python库可以用,如果你还有引入自己的Python模块的需求的话可以通过IPython研究平台新建一个python文,写好自己的python库,然后在回测以及实盘模拟交易这边import来实现:步骤很简单,只需3步:在研究平台新建一个文本:点击名字,修改xxx.py,比如本次例子修改frank.py(一定要以.py结尾哦!)文中写入自己的代码,(需要注意,如果调用研究函数需要fromrqdatacimport*)然后保存:在策略中调用你的自定义库。

        首先"importxxx",这里面就不需要打.py了,只需要库的名字就好,然后就这么完成了!Tushare是一个国内很流行的爬虫数据源,支持的数据种类挺丰富的,API设计也是围绕着pandas来做的,因此也非适合Ricequant的用户上手:只需要简单的importtushareasts就可以在ricequant的研究环境中使用了:[In]importtushareaststs.get_hist_data('600848')#一次性获取全部日k线数据[Out]openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnoverdate2016-03-1515.2415.5115.4215.1224615.960.181.1815.14015.33615.46323929.0440792.3940814.650.842016-03-1415.0215.5515.2415.0225581.680.503.3915.20615.23415.47326795.9841294.8141075.530.882016-03-1114.9714.9714.7514.4925404.35-0.26-1.7315.24215.11115.46328010.7942130.0141207.640.872016-03-1015.2515.4115.0115.0123066.78-0.26-1.7015.33015.12115.49136743.8743122.3341836.920.79重要的是目前使用Tushare可以支持一些ricequant暂时没有的数据,具体的使用方法和文档可以去tushare上面寻找,比如:投资参考数据分配预案业绩预告限售股解禁基金持股新股数据融资融券(沪市)融资融券(深市)宏观经济数据存款利率贷款利率存款准备金率货币供应量货币供应量(年底余额)国内生产总值(年度)国内生产总值(季度)三大需求对GDP贡献三大产业对GDP拉动三大产业贡献率居民消费价格指数工业品出厂价格指数新闻事数据即时新闻信息地雷新浪股吧龙虎榜数据每日龙虎榜列表个股上榜统计营业部上榜统计机构席位追踪机构成交明细银行间同业拆放利率Shibor拆放利率银行报价数据Shibor均值数据贷款基础利率(LPR)LPR均值数据目前支持的Python模块我们现在支持如下表格所列的多种强大的Python模块,您需要手动自己引入,比如可以打入以下代码来支持引入pandas模块:importpandasaspddf=pd.DataFrame(xxxx)您可以引入我们目前支持的Python模块来做各种神奇的数据处理。

        如果您有自己擅长和特别喜欢的Python模块希望我们支持,请让我们知道下面的列表是现在Ricequant嵫经支持的Python模块:模块名版本号简介文档链接talib0.4.17TA-Lib是一个被交易员/程序员用的金融数据技术分析库。

        包含了超过150+的技术指标比如ADX,MACD,RSI,Stochastic,BollingerBands等TA-Lib官网pandas0.19.2最流行的Python数据分析库pandas文档numpy1.13.3numpy是一个Python的科学计算基础库。

        numpy文档scipy0.18.1SciPy是一个Python的数学、科学和工程计算的生态系统库。

        scipy文档statsmodels0.8.0Statsmodels是一个Python的模块可以让您研究数据,构架统计模型和进行统计测试。

        功能包括:线性回归模型(Linearregressionmodels)等statsmodels文档bisect0.0.1Python的排序模块bisect文档sklearn0.18.1Python的机器学习模块(machinelearning)sklearn文档hmmlearn0.2.0Python的隐马尔可夫模型(HiddenMarkovModels)模块,类似scikit-learn的APIhmmlearn文档hsmmlearn0.1.0Python的无监督学习隐马尔可夫模型(HiddenMarkovModels)模块,类似scikit-learn的APIhsmmlearn文档pykalman0.9.5超级简单的卡尔曼滤波(KalmanFilter),KalmanSmoother和EM模块pykalman文档cvxopt1.1.8cvxopt提供了凸优化(convexoptimization)的解的python库。

        cvxopt文档arch4.0arch提供了Univariatevolatility模型,Bootstrapping和Multiplecomparisonproceduresarch文档dateutil2.7.2dateutil模块提供了对标准的datetime模块的强大的拓展dateutil文档Edward-一个用于概率建模、推理和评估的Python库,融合了以下三个领域:贝叶斯统计学和机器学习、深度学习、概率编程Edward文档Funcat0.3.2将同花顺、通达信、文华财经等的公式移植到了Python中Funcat文档datetime--datetime文档functools--functools文档heapq--heapq文档pywt-PyWavelets是一个Python的小波变换的库pywt文档tensorflow1.7.0Tensorflowisanopensourcesoftwarelibraryformachineintelligence.tensorflow文档tushare1.0.2国内流行的开源数据库,燥起来吧,各种数据。

        tushare网站pybrain0.3.1pybrain是一个流行的机器学习库。

        PyBrainisamodularMachineLearningLibraryforPython.pybrain文档nltk3.2.4一个流行的人类语言分析库。

        nltk文档keras2.0.2Theano和Tensorflow的深度学习库。

        keras文档requests2.18.4易用的HTTP库requests文档bs40.0.1beautifulsoup是网页爬取数据的利器!beautifulsoupd文档lxml3.7.2处理XML和HTML的最好用的python库lxml中文文档urllib1.22python自带的url处理库urllib文档xgboost0.71速度快效果好的boosting模型xgboost文档plotly2.5.1强大优美的图表库,支持三种不同类型的图表,包括地图,箱形图和密度图,以及更见的产品如,条状和线形图plotly文档fbprophet0.2.1简单强大的数据预测工具包Prophet使用指南pytorch0.2.0.post3流行的神经网络工具包Pytorch文档sonnet1.13基于tensorflow快速构建神经网络的工具sonnet文档itertools4.1.0itertools文档math-math文档pytz2016.10pytz文档queue-queue文档random-random文档re-re文档time-time文档array-array文档copy-copy文档json-json文档operator-operator文档xml-xml文档策略实例在下面部分我们列举了一些用的算法范例,您也可以通过右上角的clone按钮很方便的把范例算法复制到自己的算法列表中进行调试、更改甚至模拟、真实交易。

        第一个策略-买入&持有万事开头难,这是一个最简单的策略:在回测开始的第一天买入资金量的100%的平安银行并且一直持有。

        可以通过右上角的clone按钮很方便的把范例算法复制到自己的算法列表中,您可以更改一下股票代码以及回测时间、金钱等就可以很快的知道某个时期您测试某个股票的表现了,各种风险数值也可以很快地计算出来。

        Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        #在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):context.s1="000001.XSHE"#是否嵫发送了ordercontext.fired=False#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#bar_dict[order_book_id]可以拿到某个证券的bar信息#context.portfolio可以拿到现在的投资组合状态信息#使用order_shares(id_or_ins,amount)方法进行落单#TODO:开始编写你的算法吧!ifnotcontext.fired:#order_percent并且传入1代表买入该股票并且使其占有投资组合的100%order_percent(context.s1,1)context.fired=TrueGoldenCross算法示例以下是一个我们使用TALib在我们的平台上编写的goldencross算法的示例,使用了simplemovingaverage方法:Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        importtalib#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):context.s1="000001.XSHE"#设置这个策略当中会用到的参数,在策略中可以随时调用,这个策略使用长短均线,我们在这里设定长线和短线的区间,在调试寻找最佳区间的时候只需要在这里进行数值改动context.SHORTPERIOD=20context.LONGPERIOD=120#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#bar_dict[order_book_id]可以拿到某个证券的bar信息#context.portfolio可以拿到现在的投资组合状态信息#使用order_shares(id_or_ins,amount)方法进行落单#TODO:开始编写你的算法吧!#因策略需要用到均线,所以需要读取历史数据prices=history_bars(context.s1,context.LONGPERIOD+1,'1d','close')#使用talib计算长短两根均线,均线以array的格式表达short_avg=talib.SMA(prices,context.SHORTPERIOD)long_avg=talib.SMA(prices,context.LONGPERIOD)plot("shortavg",short_avg[-1])plot("longavg",long_avg[-1])#计算现在portfolio中股票的仓位cur_position=context.portfolio.positions[context.s1].quantity#计算现在portfolio中的现金可以购买多少股票shares=context.portfolio.cash/bar_dict[context.s1].close#如果短均线从上往下跌破长均线,也就是在目前的bar短线平均值低于长线平均值,而上一个bar的短线平均于长线平均值ifshort_avg[-1]-long_avg[-1]<0andshort_avg[-2]-long_avg[-2]>0andcur_position>0:#进行清仓order_target_value(context.s1,0)#如果短均线从下往上突破长均线,入场信号ifshort_avg[-1]-long_avg[-1]>0andshort_avg[-2]-long_avg[-2]<0:#满仓入股order_shares(context.s1,shares)单股票MACD算法示例以下是一个我们使用TALib在我们的平台上编写的单股票MACD算法示例,使用了TALib的MACD方法:Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        importtalib#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):context.s1="000001.XSHE"#使用MACD需要设置长短均线和macd平均线的参数context.SHORTPERIOD=12context.LONGPERIOD=26context.SMOOTHPERIOD=9context.OBSERVATION=100#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#bar_dict[order_book_id]可以拿到某个证券的bar信息#context.portfolio可以拿到现在的投资组合状态信息#使用order_shares(id_or_ins,amount)方法进行落单#TODO:开始编写你的算法吧!#读取历史数据,使用sma方式计算均线准确度和数据长度无关,但是在使用ema方式计算均线时建议将历史数据窗口适当放大,结果会更加准确prices=history_bars(context.s1,context.OBSERVATION,'1d','close')#用Talib计算MACD取值,得到三个时间序列数组,分别macd,signal和histmacd,signal,hist=talib.MACD(prices,context.SHORTPERIOD,context.LONGPEROD,context.SMOOTHPERIOD)plot("macd",macd[-1])plot("macdsignal",signal[-1])#macd是长短均线的差值,signal是macd的均线,使用macd策略有几种不同的方法,我们这里采用macd线突破signal线的判断方法#如果macd从上往下跌破macd_signalifmacd[-1]-signal[-1]<0andmacd[-2]-signal[-2]>0:#计算现在portfolio中股票的仓位curPosition=context.portfolio.positions[context.s1].quantity#进行清仓ifcurPosition>0:order_target_value(context.s1,0)#如果短均线从下往上突破长均线,入场信号ifmacd[-1]-signal[-1]>0andmacd[-2]-signal[-2]<0:#满仓入股order_target_percent(context.s1,1)多股票RSI算法示例以下是一个我们使用TALib在我们的平台上编写的多股票RSI算法示例,使用了TALib的RSI方法:Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        importtalib#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):#选择我们感兴趣的股票context.s1="000001.XSHE"context.s2="601988.XSHG"context.s3="000068.XSHE"context.stocks=[context.s1,context.s2,context.s3]context.TIME_PERIOD=14context.HIGH_RSI=85context.LOW_RSI=30context.ORDER_PERCENT=0.3#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#bar_dict[order_book_id]可以拿到某个证券的bar信息#context.portfolio可以拿到现在的投资组合状态信息#使用order_shares(id_or_ins,amount)方法进行落单#TODO:开始编写你的算法吧!#对我们选中的股票集合进行loop,运算每一只股票的RSI数值forstockincontext.stocks:#读取历史数据prices=history_bars(stock,context.TIME_PERIOD+1,'1d','close')#用Talib计算RSI值rsi_data=talib.RSI(prices,timeperiod=context.TIME_PERIOD)[-1]cur_position=context.portfolio.positions[stock].quantity#用剩余现金的30%来购买新的股票target_available_cash=context.portfolio.cash*context.ORDER_PERCENT#当RSI大于设置的上限阀值,清仓该股票ifrsi_data>context.HIGH_RSIandcur_position>0:order_target_value(stock,0)#当RSI小于设置的下限阀值,用剩余cash的一定比例补仓该股ifrsi_data<context.LOW_RSI:logger.info("targetavailablecashcaled:"+str(target_available_cash))#如果剩余的现金不够一手-100shares,那么会被ricequant的ordermanagementsystemreject掉order_value(stock,target_available_cash)财务数据策略在回测开始前,通过查询回测开始当天的财务数据,获得市盈率大于55且小于60,营业总收入前10的股票,然后将所有资金平摊到这10个股票Buy&Hold的策略。

        您可以clone之后自行修改,通过查询回测开始当天的其它财务数据指标来筛选股票。

        但是注意需要调整资金量到¥300,000以上才会有比较好的落单效果(否则资金量不足以满足买入如此多股票组成的一篮子投资组合)Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        #在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):#查询revenue前十名的公司的股票并且他们的pe_ratio在55和60之间。

        打fundamentals的时候会有auto-complete方便写查询代码。

        fundamental_df=get_fundamentals(query(fundamentals.income_statement.revenue,fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio>55).filter(fundamentals.eod_derivative_indicator.pe_ratio<60).order_by(fundamentals.income_statement.revenue.desc()).limit(10))#将查询结果dataframe的fundamental_df存放在context里面以备后面只需:context.fundamental_df=fundamental_df#实时打印日志看下查询结果,会有我们精心处理的数据表格显示:logger.info(context.fundamental_df)update_universe(context.fundamental_df.columns.values)#对于每一个股票按照平均现金买入:context.stocks=context.fundamental_df.columns.valuesstocks_number=len(context.stocks)context.average_percent=0.99/stocks_numberlogger.info("Calculatedaveragepercentforeachstockis:%f"%context.average_percent)context.fired=False#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#bar_dict[order_book_id]可以拿到某个证券的bar信息#context.portfolio可以拿到现在的投资组合状态信息#使用order_shares(id_or_ins,amount)方法进行落单#TODO:开始编写你的算法吧!#对于选择出来的股票按照平均比例买入:ifnotcontext.fired:forstockincontext.stocks:order_target_percent(stock,context.average_percent)logger.info("Bought:"+str(context.average_percent)+"%forstock:"+str(stock))context.fired=True根据收益和市盈率定期调仓策略这是一个利用财务数据定期选股并且调仓的策略:选取市盈率在53到67之间,盈利前10的股票,然后按照等比例分配资金买入一个10个股票的投资组合:Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        defquery_fundamental(context,bar_dict):#查询revenue前十名的公司的股票并且他们的pe_ratio在53和67之间。

        打fundamentals的时候会有auto-complete方便写查询代码。

        fundamental_df=get_fundamentals(query(fundamentals.income_statement.revenue,fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio>53).filter(fundamentals.eod_derivative_indicator.pe_ratio<67).order_by(fundamentals.income_statement.revenue.desc()).limit(10))#将查询结果dataframe的fundamental_df存放在context里面以备后面只需:context.fundamental_df=fundamental_df#实时打印日志看下查询结果,会有我们精心处理的数据表格显示:logger.info(context.fundamental_df)#对于每一个股票按照平均现金买入:context.stocks=context.fundamental_df.columns.valuesupdate_universe(context.stocks)stocksNumber=len(context.stocks)context.average_percent=0.99/stocksNumberlogger.info("Calculatedaveragepercentforeachstockis:%f"%context.average_percent)#先查一下选出来的股票是否在嵫有的portfolio里面:#这样做并不是最好的,只是代码比较简单#先清仓然后再买入这一个月新的符合条的股票logger.info("Clearingallthecurrentpositions.")forholding_stockincontext.portfolio.positions.keys():ifcontext.portfolio.positions[holding_stock].quantity!=0:order_target_percent(holding_stock,0)logger.info("Buildingnewpositionsforportfolio.")forstockincontext.stocks:order_target_percent(stock,context.average_percent)logger.info("Buying:"+str(context.average_percent)+"%forstock:"+str(stock))#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):scheduler.run_monthly(query_fundamental,monthday=1)#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#bar_dict[order_book_id]可以拿到某个证券的bar信息#context.portfolio可以拿到现在的投资组合状态信息#使用order_shares(id_or_ins,amount)方法进行落单#TODO:开始编写你的算法吧!pass海龟交易系统海龟交易系统也是非经典的一种策略,我们也放出了范例代码如下,而关于海龟交易系统的介绍也可以参照这篇帖子。

        Clone#导入必须的模块importnumpyasnpimporttalibimportmathdefget_extreme(array_high_price_result,array_low_price_result):#抛开最新价格的价格序列np_array_high_price_result=np.array(array_high_price_result[:-1])np_array_low_price_result=np.array(array_low_price_result[:-1])#序列最大值max_result=np_array_high_price_result.max()#最小值min_result=np_array_low_price_result.min()#返回一个两个元素的listreturn[max_result,min_result]#拿到真实震幅与头寸defget_atr_and_unit(atr_array_result,atr_length_result,total_value_result):#atr真实平均振幅的最新值atr=atr_array_result[atr_length_result-1]#头寸unit=math.floor(total_value_result*.01/atr)return[atr,unit]#得到止损价格defget_stop_price(first_open_price_result,units_hold_result,atr_result):stop_price=first_open_price_result-2*atr_result\+(units_hold_result-1)*0.5*atr_resultreturnstop_pricedefinit(context):context.trade_day_num=0context.unit=0context.atr=0context.trading_signal='start'context.pre_trading_signal=''context.units_hold_max=4context.units_hold=0context.quantity=0context.max_add=0context.first_open_price=0context.s='000300.XSHG'context.open_observe_time=55context.close_observe_time=20context.atr_time=20defhandle_bar(context,bar_dict):#当前合约的价值total_value=context.portfolio.total_value#context.open_observe_time+1个bar的每日最高价high_price=history_bars(context.s,context.open_observe_time+1,'1d','high')low_price_for_atr=history_bars(context.s,context.open_observe_time+1,'1d','low')low_price_for_extreme=history_bars(context.s,context.close_observe_time+1,'1d','low')close_price=history_bars(context.s,context.open_observe_time+2,'1d','close')close_price_for_atr=close_price[:-1]#talib.ATR平均真实振幅atr_array=talib.ATR(high_price,low_price_for_atr,close_price_for_atr,timeperiod=context.atr_time)#得到max_resultmaxx=get_extreme(high_price,low_price_for_extreme)[0]#得到min_resultminn=get_extreme(high_price,low_price_for_extreme)[1]#前两日的平均真实振幅atr=atr_array[-2]ifcontext.trading_signal!='start':ifcontext.units_hold!=0:context.max_add+=0.5*get_atr_and_unit(atr_array,atr_array.size,total_value)[0]else:context.max_add=bar_dict[context.s].last#当前context.s持仓股数cur_position=context.portfolio.positions[context.s].quantity#当前仓位的现金available_cash=context.portfolio.cash#当前仓位的市场价值market_value=context.portfolio.market_value#当前仓位大于0并且当前价格小于止损价,产生信号"stop"if(cur_position>0andbar_dict[context.s].last<get_stop_price(context.first_open_price,context.units_hold,atr)):context.trading_signal='stop'else:#仓位大于0,并且当前价格小于观察时期的low的最小值ifcur_position>0andbar_dict[context.s].last<minn:context.trading_signal='exit'else:#仓位大于0但小于策略设计仓位,并且当前价格大于观察时期的high的最大值,产生追加持仓的信号if(bar_dict[context.s].last>context.max_addandcontext.units_hold!=0andcontext.units_hold<context.units_hold_maxandavailable_cash>bar_dict[context.s].last*context.unit):context.trading_signal='entry_add'else:#价格大于maxx并且持仓0,产生信号"entry"ifbar_dict[context.s].last>maxxandcontext.units_hold==0:context.max_add=bar_dict[context.s].lastcontext.trading_signal='entry'atr=get_atr_and_unit(atr_array,atr_array.size,total_value)[0ifcontext.trade_day_num%5==0:#每5个bar计算一次context.unit寸头context.unit=get_atr_and_unit(atr_array,atr_array.size,total_value)[1]context.trade_day_num+=1context.quantity=context.unit#不同信号下的操作if(context.trading_signal!=context.pre_trading_signalor(context.units_hold<context.units_hold_maxandcontext.units_hold>1)orcontext.trading_signal=='stop'):ifcontext.trading_signal=='entry':context.quantity=context.unitifavailable_cash>bar_dict[context.s].last*context.quantity:order_shares(context.s,context.quantity)context.first_open_price=bar_dict[context.s].lastcontext.units_hold=1ifcontext.trading_signal=='entry_add':context.quantity=context.unitorder_shares(context.s,context.quantity)context.units_hold+=1ifcontext.trading_signal=='stop':ifcontext.units_hold>0:order_shares(context.s,-context.quantity)context.units_hold-=1ifcontext.trading_signal=='exit':ifcur_position>0:order_shares(context.s,-cur_position)context.units_hold=0context.pre_trading_signal=context.trading_signal股指期货MACD日回测以下是一个使用TALib进行股指期货主力合约日级别回测MACD算法示例:Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等importtalib#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递definit(context):#context内引入全局变量s1,存储目标合约信息context.s1='IF1606'#使用MACD需要设置长短均线和macd平均线的参数context.SHORTPERIOD=12context.LONGPERIOD=26context.SMOOTHPERIOD=9context.OBSERVATION=50#初始化时订阅合约行情。

        订阅之后的合约行情会在handle_bar中进行更新subscribe(context.s1)#你选择的期货数据更新将会触发此段逻辑,例如日线或分钟线更新defhandle_bar(context,bar_dict):#开始编写你的主要的算法逻辑#获取历史收盘价序列,history_bars函数直接返回ndarray,方便之后的有关指标计算prices=history_bars(context.s1,context.OBSERVATION,'1d','close')#用Talib计算MACD取值,得到三个时间序列数组,分别macd,signal和histmacd,signal,hist=talib.MACD(prices,context.SHORTPERIOD,context.LONGPERIOD,context.SMOOTHPERIOD)#macd是长短均线的差值,signal是macd的均线,如果短均线从下往上突破长均线,入场信号,进行买入开仓操作ifmacd[-1]-signal[-1]>0andmacd[-2]-signal[-2]<0:sell_qty=context.portfolio.positions[context.s1].sell_quantity#先判断当前卖方仓位,如果有,则进行平仓操作ifsell_qty>0:buy_close(context.s1,1)#买入开仓buy_open(context.s1,1)ifmacd[-1]-signal[-1]<0andmacd[-2]-signal[-2]>0:buy_qty=context.portfolio.positions[context.s1].buy_quantity#先判断当前买方仓位,如果有,则进行平仓操作ifbuy_qty>0:sell_close(context.s1,1)#卖出开仓sell_open(context.s1,1)商品期货跨品种配对交易该策略分钟级别回测。

        运用了简单的移动平均以及布林带(BollingerBands)作交易信号产生源。

        有关对冲比率(HedgeRatio)的确定,您可以在我们的研究平台上面通过importstatsmodels.apiassm引入statsmodels中的OLS方法进行线性回归估计。

        具体估计窗口,您可以根据自己策略需要自行选择。

        策略中的移动窗口选择60分钟,即在每天开盘60分钟内不做任何交易,积累数据计算移动平均值。

        当然,这一移动窗口也可以根据自身需要进行灵活选择。

        下面例子中使用了黄金与白银两种商品期货进行配对交易。

        简单起见,例子中期货的价格并未做对数差处理。

        Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        importnumpyasnp#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):context.s1='AG1612'context.s2='AU1612'#设置全局计数器context.counter=0#设置滚动窗口context.window=60#设置对冲手数,通过研究历史数据进行价格序列回归得到该值context.ratio=15context.up_cross_up_limit=Falsecontext.down_cross_down_limit=False#设置入场临界值context.entry_score=2#初始化时订阅合约行情。

        订阅之后的合约行情会在handle_bar中进行更新subscribe([context.s1,context.s2])#before_trading此函数会在每天交易开始前被调用,当天只会被调用一次defbefore_trading(context):#样例商品期货在回测区间内有夜盘交易,所以在每日开盘前将计数器清零context.counter=0#你选择的期货数据更新将会触发此段逻辑,例如日线或分钟线更新defhandle_bar(context,bar_dict):#获取当前一对合约的仓位情如尚未有仓位,则对应持仓量都0position_a=context.portfolio.positions[context.s1]position_b=context.portfolio.positions[context.s2]context.counter+=1#当累积满一定数量的bar数据时候,进行交易逻辑的判断ifcontext.counter>context.window:#获取当天历史分钟线价列price_array_a=history_bars(context.s1,context.window,'1m','close')price_array_b=history_bars(context.s2,context.window,'1m','close')#计算价差序列、其标准差、均值、上限、下限spread_array=price_array_a-context.ratio*price_array_bstd=np.std(spread_array)mean=np.mean(spread_array)up_limit=mean+context.entry_score*stddown_limit=mean-context.entry_score*std#获取当前bar对应合约的收盘价格并计算价差price_a=bar_dict[context.s1].closeprice_b=bar_dict[context.s2].closespread=price_a-context.ratio*price_b#如果价差低于预先计算得到的下限,则建仓信号,'买入'价差合约ifspread<=down_limitandnotcontext.down_cross_down_limit:#可以通过logger打印日志logger.info('spread:{},mean:{},down_limit:{}'.format(spread,mean,down_limit))logger.info('创建买入价差中...')#获取当前剩余的应建仓的数量qty_a=1-position_a.buy_quantityqty_b=context.ratio-position_b.sell_quantity#由于存在成交不超过下一bar成交量25%的限制,所以可能要通过多次发单成交才能够成功建仓ifqty_a>0:buy_open(context.s1,qty_a)ifqty_b>0:sell_open(context.s2,qty_b)ifqty_a==0andqty_b==0:#嵫成功建立价差的'多仓'context.down_cross_down_limit=Truelogger.info('买入价差仓位创建成功!')#如果价差向上回归移动平均线,则平仓信号ifspread>=meanandcontext.down_cross_down_limit:logger.info('spread:{},mean:{},down_limit:{}'.format(spread,mean,down_limit))logger.info('对买入价差仓位进行平仓操作中...')#由于存在成交不超过下一bar成交量25%的限制,所以可能要通过多次发单成交才能够成功建仓qty_a=position_a.buy_quantityqty_b=position_b.sell_quantityifqty_a>0:sell_close(context.s1,qty_a)ifqty_b>0:buy_close(context.s2,qty_b)ifqty_a==0andqty_b==0:context.down_cross_down_limit=Falselogger.info('买入价差仓位平仓成功!')#如果价差高于预先计算得到的上限,则建仓信号,'卖出'价差合约ifspread>=up_limitandnotcontext.up_cross_up_limit:logger.info('spread:{},mean:{},up_limit:{}'.format(spread,mean,up_limit))logger.info('创建卖出价差中...')qty_a=1-position_a.sell_quantityqty_b=context.ratio-position_b.buy_quantityifqty_a>0:sell_open(context.s1,qty_a)ifqty_b>0:buy_open(context.s2,qty_b)ifqty_a==0andqty_b==0:context.up_cross_up_limit=Truelogger.info('卖出价差仓位创建成功')#如果价差向下回归移动平均线,则平仓信号ifspread<meanandcontext.up_cross_up_limit:logger.info('spread:{},mean:{},up_limit:{}'.format(spread,mean,up_limit))logger.info('对卖出价差仓位进行平仓操作中...')qty_a=position_a.sell_quantityqty_b=position_b.buy_quantityifqty_a>0:buy_close(context.s1,qty_a)ifqty_b>0:sell_close(context.s2,qty_b)ifqty_a==0andqty_b==0:context.up_cross_up_limit=Falselogger.info('卖出价差仓位平仓成功!')Alpha策略----多因子对冲多因子模型是应用最广泛的一种选股模型,基本原理是采用一系列的因子作选股标准,满足这些因子的股票则被买入,不满足的则卖出。

        各种多因子模型核心的区别第一是在因子的选取上,第二是在如何用多因子综合得到一个最终的判断。

        股票端我们按照多因子的模型买入,期货端则一手空单对冲风险。

        Clone#可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

        importnumpyasnpimportmath#在这个方法中编写任何的初始化逻辑。

        context对象将会在你的算法策略的任何方法之间做传递。

        definit(context):#选取板块context.stks=[]context.stks.append(sector("consumerdiscretionary"))context.stks.append(sector("consumerstaples"))context.stks.append(sector("healthcare"))context.stks.append(sector("telecommunicationservices"))context.stks.append(sector("utilities"))context.stks.append(sector("materials"))context.flag=True#确定运行频率scheduler.run_daily(rebalance)#手动添加银行板块context.stocks=['000001.XSHE','002142.XSHE','600000.XSHG','600015.XSHG','600016.XSHG','600036.XSHG','601009.XSHG','601166.XSHG','601169.XSHG','601288.XSHG','601328.XSHG','601398.XSHG','601818.XSHG','601939.XSHG','601988.XSHG','601998.XSHG']#你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新defget_stocks(context,bar_dict):stocks=set([])foriinrange(0,6):#在这个循环里,首先获取每个板块的财务数据fundamental_df=get_fundamentals(query(fundamentals.financial_indicator.adjusted_return_on_equity_weighted_average,fundamentals.eod_derivative_indicator.pb_ratio,fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.income_statement.stockcode.in_(context.stks[i])).filter(fundamentals.eod_derivative_indicator.pe_ratio<999).order_by(fundamentals.eod_derivative_indicator.pb_ratio))#使用pandas对财务数据进行排名并打分df=fundamental_df.Tdf=df.sort(columns='pb_ratio')df['pb_score']=list(range(1,len(df)+1))df=df.sort(columns='pe_ratio')df['pe_score']=list(range(1,len(df)+1))scores=[]forstockindf.T.columns.values:scores.append(df.loc[stock,'pe_score']+df.loc[stock,'pb_score'])df['scores']=list(scores)df=df.sort(columns='scores')#取得分最低的三个股票df=df.head(3)#logger.info(df)stocks=stocks|set(df.T.columns.values)#logger.info(i)#银行板块单独按照市净率取市净率最低的两个fundamental_df=get_fundamentals(query(fundamentals.financial_indicator.adjusted_return_on_equity_weighted_average,fundamentals.eod_derivative_indicator.pb_ratio,).filter(fundamentals.income_statement.stockcode.in_(context.stocks)).order_by(fundamentals.eod_derivative_indicator.pb_ratio).limit(2))#买入的股票,进行调仓操作stocks=stocks|set(fundamental_df.columns.values)returnstocksdefrebalance(context,bar_dict):stocks=get_stocks(context,bar_dict)holdings=set(get_holdings(context))to_buy=stocks-holdingsto_sell=holdings-stocksto_buy2=stocks-holdingsforstockinto_sell:ifbar_dict[stock].suspended==False:order_target_percent(stock,0)iflen(to_buy)==0:returnto_buy=get_trading_stocks(to_buy,context,bar_dict)cash=context.portfolio.cashtotal_value=context.portfoli.total_valueiflen(to_buy)>0:average_value=total_value*0.025ifaverage_value>total_value/len(to_buy):average_value=total_value/len(to_buy)forstockinto_buy:if(bar_dict[stock].suspended==False)and(context.portfolio.cash>average_value):order_target_value(stock,average_value)ifcontext.flag==True:sell_open('IF88',1)context.flag=False#得到交易的股票defget_trading_stocks(to_buy,context,bar_dict):trading_stocks=[]forstockinto_buy:ifbar_dict[stock].suspended==False:trading_stocks.append(stock)returntrading_stocks#持仓的股票defget_holdings(context):positions=context.portfolio.stock_account.positionsholdings=[]forpositioninpositions:ifpositions[position].quantity>0:holdings.append(position)returnholdingsdefhandle_bar(context,bar_dict):#TODO:开始编写你的算法吧!pass感谢您使用Ricequant!您的使用环境不允许Javascript代码执行,请您解除限制后再试。

        关于RiceQuant关于我们招贤士合作伙伴RQU课程概述竞赛声明用户条款隐私技术支持见问题PythonAPI文档财务数据文档研究平台文档中国指数数据联系我们联系邮箱:public@ricequant.com商务合作:bd@ricequant.com客服电话:0755-22676337QQ:3010840691深圳米筐科技有限公司Copyright2017关注我们Github微博知乎专栏反馈©2017Ricequant-粤ICP备15023309号古人说,工欲善其事必先利其器。

        您目前使用的浏览器有点旧了。

        了给您营造更好的使用体验,我们建议您更换如下浏览器:。

(本文"[异世名将的武器袖珍罐 ]m分红网"的责任编辑:英雄大作战秘籍 )

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送本站相关人员,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
分享到:百度新首页百度贴吧百度云收藏百度中心百度相册QQ空间新浪微博腾讯微博人人网微信