存储 宽高限制不超过2000px 10000px 怎么处理

RiceQuant米筐量化交易平台RiceQuant米筐量化交易平台。深圳米筐科技有限公司致力于打造亚太区最出色的量化交易平台,在我们的平台上,您可以使用我们提供高效的工具和准确的数据去构造您的策略,并进行回测以及优化,而无需担忧基础架构及数据质量问题。<div class="inline-block" data-intro="研究:单步运行代码,实时修改.我的策略:运用历史数据验证您的策略思想.我的交易:实时模拟交易,信号推送,一键下单.点击任意位置下一步" data-step="1"> --><div class="inline-block" data-intro="社区:量化爱好者的聚集地.学院:拥有海量学习资料与策略模板.点击任意位置下一步" data-step="2">竞赛&#xe62b;数据及帮助&#xe62b;向导式策略生成器创建向导式策略选股设置模型选择风险控制回测设置分红派息回测结果分析回测结果回测结果进阶分析收益指标风险指标风险调整后收益指标绩效分析Brinson分析风格分析净值回归风险分析实时模拟交易模拟交易的数据源进行模拟交易模拟交易替换代码开启模拟交易的微信通知本地拿到实盘模拟交易的信号和持仓模拟交易注意事项技术分析自定义技术指标系统预定义指标工具函数及行情变量数据股票数据ETF、LOF基金数据指数数据期货数据财务数据国债收益率曲线常见错误隐私及安全Python SDK 简介基本方法init (必须实现)handle_bar (必须实现)before_trading (选择实现)after_trading (选择实现)交易相关函数order_shares - 指定股数交易(股票专用)order_lots - 指定手数交易(股票专用)order_value - 指定价值交易(股票专用)order_percent - 一定比例下单(股票专用)order_target_value - 目标价值下单(股票专用)order_target_percent - 目标比例下单(股票专用)buy_open - 买开(期货专用)sell_close - 平多仓(期货专用)sell_open - 卖开(期货专用)buy_close - 平空仓(期货专用)cancel_order - 撤单get_open_orders - 拿到未成交订单信息context属性now - 当前时间portfolio - 投资组合信息stock_account - 股票资金账户信息future_account - 期货资金账户信息run_info - 策略运行信息universe - 策略合约池scheduler定时器scheduler.run_daily - 每天运行scheduler.run_weekly - 每周运行scheduler.run_monthly - 每月运行time_rule - 定时间运行数据查询相关函数get_fundamentals - 查询财务数据all_instruments - 所有合约基础信息instruments - 合约详细信息history - 合约历史数据(已废弃)history_bars - 某一合约历史数据get_price - 合约历史数据current_snapshot - 当前快照数据get_dominant_future - 期货主力合约get_future_contracts - 期货可交易合约列表get_securities_margin - 融资融券信息get_shares - 流通股信息get_turnover_rate - 历史换手率industry - 行业股票列表sector - 板块股票列表concept - 概念股票列表index_components - 指数成分股get_dividend - 分红数据get_split - 拆分数据get_trading_dates - 交易日列表get_previous_trading_date - 上一交易日get_next_trading_date - 下一交易日get_price_change_rate - 获取历史涨跌幅get_yield_curve - 收益率曲线is_suspended - 全天停牌判断is_st_stock - ST股判断(已废弃)雪球舆论数据其他方法update_universe - 更新股票池subscribe - 订阅行情unsubscribe - 取消订阅行情reg_indicator - 注册指标get_indicator - 获取指标get_file - 读取文件put_file - 存储文件get_csv - 读取csv数据plot - 画图重要对象Bar对象Snapshot对象Order对象Portfolio对象Account对象Position对象Instrument对象枚举常量ORDER_STATUS - 订单状态SIDE - 买卖方向POSITION_EFFECT - 开平ORDER_TYPE - 订单类型RUN_TYPE - 策略运行类型MATCHING_TYPE - 撮合方式外部数据和Python模块引入自己的Python模块支持的其他外部数据源Tushare目前支持的Python模块策略实例第一个策略-买入&持有Golden Cross算法示例单股票MACD算法示例多股票RSI算法示例财务数据策略根据收益和市盈率定期调仓策略海龟交易系统股指期货MACD日回测商品期货跨品种配对交易Alpha策略----多因子对冲关于米筐科技(RiceQuant)米筐科技专注于为用户提供快速便捷、功能强大的量化交易和分析工具。用户可以使用基于浏览器(网上回测平台)或本地化(RQAlpha等项目)的米筐科技产品,随时、随地开发自己的交易策略,验证自己的投资思路。我们对数据质量、回测系统、模型算法、交互设计、用户界面和用户安全等方面进行了持之以恒的完善,务求使用户获得最佳的产品使用体验。目前,我们已经提供了策略回测和实时模拟交易功能;在将来,我们会进一步提供实盘交易支持,使用户在我们的产品平台上,能够一站式地完成交易策略的开发、测试和实盘执行。我们是一个创业公司,由一群朝气蓬勃,又有丰富业界经验的年轻人构成。我们渴望和用户一起进步和成长,见证量化投资在中国市场上的普及和发展。如果您有任何产品或服务上的建议,或商业上的合作意向,欢迎随时和我们联系。我们认真对待任何来自用户和合作伙伴的反馈意见,并始终视之为我们进步的动力。如何使用本文档在本文档中,我们详细介绍了平台的各项功能和使用方法。由于内容较多,在浏览本文档的时候,我们建议您多使用 &ctrl + f& 的快捷键组合,快速定位到感兴趣的内容上。千里之行,始于足下。在学习编程的时候,我们都是从打印一句 &Hello World& 开始,踏入到奇妙的程序世界;同样,在本文档的第一部分,我们准备了一个类似 &Hello World& 的简单策略实例,帮助新用户了解量化策略,以及如何使用我们的平台。在您亲自动手测试上述 &Hello World& 策略,体会到编写和测试交易策略的奇妙和喜悦以后,就可以开始浏览本文档的余下内容:&数据&部分,介绍了平台上可供使用的、丰富多样的数据&回测设置&部分,介绍了回测系统的各项默认设置(例如撮合方式、滑点和期货交易费用等)&进行回测&部分,介绍用户如何使用我们的在线IDE进行策略开发和回测,以及回测过程中可供使用的各个函数和对象;&回测结果分析&部分,我们介绍了策略评估的各类核心量化指标(收益、风险和风险调整后收益),以及进阶分析功能(月度收益、持仓情况等)&策略实例&部分,介绍了更多、更具体的策略实例,帮助你了解常见的量化策略开发思路,和如何灵活使用我们提供的数据和功能&实时模拟交易&部分,介绍如何设定实时模拟交易,以更好地评估策略的实盘表现&外部数据和 Python 模块&部分,介绍了平台支持的外部数据源和 Python模块,以及如何引入自定义的Python模块希望通过我们的文档和平台,您能够逐步成长为一个优秀的量化策略开发者。如果您对我们文档或平台有任何建议,欢迎随时;如果希望分享编写策略过程中的疑问或心得体会,欢迎来我们的一起交流讨论;如果你通过实践,获得了表现出色的量化策略,我们有和实盘,让你展示自己的成就,和获得实盘资金运行策略的机会。 实践,思考,交流,成长,米筐科技与你一路同行。Python策略Hello World以下的策略是最简单的一个买入并持有平安银行(buy and hold)的展示,回测基本流程如下:在创建策略之后,您需要指定回测的起止日期、初始资金以及回测频率。在方法中实现策略初始化逻辑,例如设置合约池、佣金率、保证金率等操作。可以选择在进行一些每日开盘之前的操作,比如获取历史行情做一些数据预处理,获取当前账户资金等。在方法中实现策略具体逻辑,包括交易信号的产生、订单的创建等。handle_bar内的逻辑会在每次bar数据更新的时候被触发。回测完成后,在&#39;回测结果&#39;页面会展示回测的仓位、盈亏、交易、风险等信息。用户可以导出报告方便分析。您可以点击右上角的clone按钮复制到自己的策略列表中进行修改和测试,非常简单。
def init(context):
context.s1 = "000001.XSHE"
context.fired = False
def handle_bar(context, bar_dict):
开始编写你的算法吧!
if not context.fired:
order_percent(context.s1, 1)
context.fired = True
创建新策略创建代码策略您可以通过在&#39;我的策略&#39;下点击&#39;创建新策略&#39;来创建一个新的回测,如下图:需要注意,您在首次创建策略的时候需要指定策略交易的品种(股票,期货,或者两者混合)。需要注意,一旦策略创建完毕,交易品种将不能变更。运行回测策略算法编辑页面是运行回测的入口,如下图所示:您可以在策略编辑页面中进行以下参数的设置: 基础参数:开始日期:回测期间的开始日期结束日期:回测期间的结束日期 - 如果回测结束日期在今天之后,将会自动使用最后一天的历史数据起始资金:回测的起始资金 - 您将使用多少钱去投资策略回测频率:可以选择日回测以及分钟回测高阶设置::设置策略表现的对照基准:设置策略佣金在默认佣金基础上的倍数:设置策略保证金在默认保证金率基础上的倍数:可以选择&#39;当前bar收盘&#39;或&#39;下一bar开盘&#39;:交易中理想成交价和实际成交价的差异。在进行策略回测时,用户可以设置一个滑点参数,来提高买入价或降低卖出价,模拟实际交易中出现的滑点。该参数取值在 [0, 1) 之间。例如,当股票市价为10元,参数设为0.1,则回测时买入价为10 + 10 * 0.1 = 11元:勾选该选项之后,策略回测性能分析功能将被开启在设置完回测参数之后,您可以点击&#39;编译策略&#39;来对策略进行编译,发现其中是否有错误;或点击&#39;运行回测&#39;直接运行回测。两者的区别如下:编译策略 - 点击&编译策略&将会使我们的后台实时编译您的算法策略来查询您的策略是否有编译错误并且可以获得一个策略收益的预览。编译策略会比完整的回测要快,因此您可以试用这个功能在完整回测前先验证下是否有简单的编译或者。运行回测 - 点击&运行回测&将会带您进入完整的回测结果页面。如果您的策略有编译/运行错误,您将会被停留在改编辑页面以让您先解决问题。复权机制RQPro 回测使用的数据采用了 “动态复权” 方式, 以策略回测当前日期为基准进行前复权。举例来说, 平安银行最近两年的分红派息时间为:除权除息日复权因子1.2106831.217847假设当前的回测日期为, 那么在此时通过 history_bars() 获取4天的历史日线收盘价序列, 返回数据如下表中间列展示。 由于回测当前日期为15年, 2016年的分红拆分当时并未发生, 所以16年的分红拆分事件并未影响回测中获取的价格序列水平。而通过get_price()获取的前数据则考虑了目标8股票历史上所有的分红派息情况。回测中这种数据处理方式保证了成交价格全部为市场当时的实际成交价格, 尽量贴近当时市场的实际情况。日期原始价格分段前复权价格(回测中使用)前复权价格18.0014.868212.208619.8016.355013.429416.5416.5413.5813(策略当前回测日期)16.3016.3013.3843基准合约通过引入基准合约,您可以将策略的表现与基准进行对比,以衡量一定时间内策略的超额表现以及相关风险调整收益指标。您可以在策略编辑页面&更多&选项下进行基准合约的设置,基准合约可以设置为空。在初次创建策略的时候,包含股票的策略默认基准合约都是沪深300指数000300.XSHG;单独期货策略默认没有基准合约。保证金倍率在进行期货交易时,您可以通过设置保证金倍率来进行保证金的调整,这一倍率不能小于1。调整依据基准是交易所规定的最低保证金比例,可以通过instruments这一方法查询到。您可以在策略编辑页面&更多&选项下进行保证金倍率设置。该设置在单一股票类型策略中不会出现。交易费用中国A股市场交易费部分主要包含券商手续费和印花税两部分,期货交易主要为佣金费用。在新版策略框架中,原有通过context.commission设置佣金费率的方式已经被废弃,不再生效。您需要在策略参数高级设置界面中进行佣金倍率的设置,1即代表为默认佣金费率的一倍。该倍率不会影响最低佣金以及印花税的收取标准。中国A股交易费用 A股市场交易费用主要由佣金和印花税两部分组成,佣金目前为双边收费,每笔委托最小收取标准为5元。默认佣金费率是成交额的万分之8,即0.0008。如果设置倍率为10,则实际影响策略的佣金费率就变成了0.008。该倍率并不会影响5元的最小佣金水平。印花税只对卖出方单边征收,对买入方不征税,目前按照成交金额的0.1%收取。由于是强制征收,印花税已经默认加入到我们的收益计算中。中国期货交易费用 期货交易费用只包括佣金这一个组成部分。佣金收取方式比较复杂,收取方式有按照名义价值的一定比例收取和按照成交合约张数收取两种方式,同时个别合约区分平今仓费率。初始默认费率表如下请参考:品种交易所佣金类型回测佣金费率回测平今费率铝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锰硅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中金所按成交量3310年期国债T中金所按成交量30撮合机制在最新的版本中,我们加入了允许用户自定义撮合机制的功能。您可以在策略编辑页面&更多&选项下选择不同的撮合机制。目前提供的撮合方式有以下两种: 1.当前收盘价。即当前bar发单,以当前bar收盘价作为参考价撮合。 2.下一开盘价。即当前bar发单,以下一bar开盘价作为参考价撮合。 如果买单价格&=参考价,或卖单价格&=参考价,以参考价加入滑点影响成交(买得更高,卖得更低)。市价单(MarketOrder)直接以以参考价加入滑点影响成交。成交数量都不超过当前bar成交量的25%。一旦超过,市价单会在部分成交之后被自动撤单;限价单会一直在订单队列中等待下一个bar数据撮合成交,直到当日收盘。当日收盘后,所有未成交限价单都将被系统自动撤单。分钟回测及实盘模拟:在一个handle_bar内下单,在该handle_bar结束时统一撮合成交(成交价取决于撮合机制以及滑点设置)。日回测:在一个handelbar内下单,下单时立刻撮合成交(成交价取决于撮合机制以及滑点设置)。所以在分钟回测以及实盘模拟中handle_bar内发单之后立刻通过cancel_order对该订单进行撤单操作,是一定会撤单成功的。但在日回测中则很可能撤单失败,因为日回测中下单之后立刻撮合成交。需要注意,在当前的分钟回测撮合模式下,用户在回测中无法通过在调用的函数中一次性实现 卖出 -& 资金释放 -& 买入 这种先卖后买的逻辑的。因为在分钟回测中,卖出并不能立刻成交。举例来说,策略A设置每周一开盘进行调仓操作,先卖后买。那么,以下这种方式在分钟回测中无法实现卖出资金立刻释放的(在开启验资的风控情况下,可能导致后面的买入操作因资金不足而拒单):
def rebalance(context, bar_dict):
order_shares('000001.XSHE', -100)
order_shares('601998.XSHG', 100)
def init(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:15~11:30, 13:00~15:15,比A股市场多出了30分钟。在这个时候进行混合回测的时候就需要通过的方式让策略引擎&#39;知道&#39;handle_bar是要在每天09:16产生第一个bar数据,而不是股票的09:31。如果您创建的是单一的期货策略,则必须在策略初始化的时候订阅(subscribe)有效期货合约。由于期货有到期日,所以您需要保证在回测期间,始终都有正在交易的合约被订阅。混合策略的股票、期货子账户信息可以分别通过以及获取到。向导式策略生成器创建向导式策略您可以通过在&#39;我的策略&#39;下点击&#39;向导式策略生成器&#39;来通过向导式生成策略,如下图:选股设置您可以通过选股设置实现投资域的筛选,并利用各类指标设置选股条件,最后对选出的股票进行排序。界面如下图:股票池设置该部分不仅支持不同股票池的偏好设置,还支持板块、行业、ST股这三个细分投资域的偏好设置。股票池选择默认值选项性质选项范围选择股票池全市场单选全市场(全部A股市场)、沪深300、上证50、中证500板块全部多选全部(所有板块)、主板、中小板、创业板行业全部多选,包括农林牧渔、采掘、化工、钢铁等ST股票包含ST单选包含ST、过滤ST、仅包含ST选股指标界面左边是米筐提供的所有指标的展示区域,右边是您所选择指标的设置区域。基于购物车理念,您可以更加方便地对您选择的指标进行参数调整,界面如下图:您可以通过点击选择指标,所选出的指标会右边“我的指标”中展示,并进行相应的设置。选股指标包含五个分类,具体详情如下:分类类别详情行情开盘价、收盘价、最高价、最低价、成交量、成交额、换手率、上市天数技术指标MA、MACD、KDJ、CCI、WILLR、ATR、ROC、TRIX、RSI、MFI、阿隆指标、布林线等财务指标估值类、盈利能力类、偿债能力类、营运能力类、成长能力类等财务数据营业收入类、营业支出类、收益利润类、资产类、负债类、权益类、经营现金流、投资现金流、筹资现金流等形态指标两只乌鸦、三只乌鸦、三胞胎乌鸦、红三兵、锤头、倒锤头、乌云盖顶、晨星、黄昏之星等其中,财务指标与财务数据的差异为,财务数据是原始数据,财务指标是基于财务数据得到的指标。排序指标可用于排序的指标有四类,分别为行情指标、技术指标、财务指标、财务数据,比选股因子少了形态指标。选股条件您可以利用选股指标对股票池粗筛选出的股票进一步进行筛选。您可在选股条件部分对选股指标的数值范围进行设置,如下图:您可以在该部分进行如下功能的设置:分类支持选项行情大于、小于、区间、排名%区间(默认升序)、大于N日均值、小于N日均值、介于N1,N2均值间技术指标大于、小于、区间、金叉、死叉、多头、空头、价格多头、价格多头财务指标大于、小于、区间、排名%区间(默认升序)财务数据大于、小于、区间、排名%区间(默认升序)形态指标无选项其中,对于技术指标,您可基于自己的偏好调整其对应的参数。自定义规则为了支持更多个性化规则,您也可以点击“添加自定义规则”,通过比对两个指标的数值大小,筛选出符合您条件的股票。排序条件 对于您筛选出的股票,您可以从排序指标中选出用于排序的指标,在排序条件部分对所选指标进行升序或降序的处理,并赋予不同的权重,从而实现对股票的排序。对于技术指标,您可以对其参数进行偏好设置。如下图:模型选择您可以在模型选择中设置您策略所需要的模型,米筐提供两种模型,分别为定期轮动、条件触发。定期轮动 定期轮动为定期调仓交易模型,您可以基于选出的股票,设置调仓周期、最大持仓股票数量。该模型会定期在调仓日卖出不符合选股条件的股票,等权买入符合条件的股票。界面如下图:条件触发 对于条件触发模型,您可以设置买入条件、卖出条件。界面如下: 区别于定期轮动模型,条件触发模型将调仓周期分为了三个周期,分别为选股周期、买入周期、卖出周期。选股周期:该周期决定多少个交易日执行一次选股操作,即筛选出满足选股设置里选股条件的股票并按排序条件对其排序。一般用财务指标实现股票池的筛选,由于企业财务指标大多属于季度更新,故该周期可以设置长一些。买入周期:该周期决定多少个交易日执行一次买入操作,即买入满足买入条件的股票。买入条件中一般用于技术指标、形态指标等比较难以捕捉的信号的捕捉,故买入周期可以设置短一些。卖出周期:该周期决定多少个交易日执行一次卖出操作,即卖出满足卖出条件的股票。买入条件:您可以在买入条件设置选股周期、买入周期、最大持仓股票数、个股最大持仓比重,同时可以通过对行情、技术指标、财务指标、财务数据、形态指标设置买入条件。这部分提供的指标及指标设置情况可参考选股指标、选股条件。卖出条件:您可以在卖出条件设置卖出周期,同时也可设置行情、技术指标、财务指标、财务数据、形态指标。这部分提供的指标及指标设置情况可参考选股指标、选股条件。风险控制您可以在“风险控制”部分对策略的风险进行设置。风险控制支持对止盈止损、大盘择时(开仓)、大盘择时(平仓)的设置。如下图:风控名称作用阶段可选指标止盈止损股票的卖出个股止损、个股止盈、持仓价值止损、持仓价值止盈、策略最大亏损、策略最大盈利大盘择时(开仓)股票的买入大盘指数的各类指标,包括行情、涨跌幅、技术指标大盘择时(平仓)股票的卖出大盘指数的各类指标,包括行情、涨跌幅、技术指标风险控制可以实现对用户策略的整个过程风险的全面控制。在开仓前,可以通过大盘择时来判断是否买入;在买入后,可以通过止盈止损和大盘择时(平仓)实现事后风控。回测设置您可以在“策略回测”部分对回测的参数进行相应的设置,如下图所示:可以设置的参数如下:参数名解释开始日期回测期间的开始日期结束日期回测期间的结束日期 - 如果回测结束日期在今天之后,将会自动使用最后一天的历史数据调仓周期回测期间的调仓周期,可根据偏好进行设置 - 默认收盘后进行相应的调仓起始资金回测的起始资金 - 您将使用多少钱去投资策略基准合约设置策略表现的对照基准在设置完回测参数之后,可通过‘保存’按钮来保存您的所有设置;也可以点击&#39;快速回测&#39;来对策略进行快速回测,以预览策略收益;或点击&#39;运行回测&#39;直接运行回测。两者的区别如下:快速回测 - 点击&快速回测&将会使我们的后台实时编译您筛选结果生成的策略来获得一个策略收益的预览。快速回测会比完整的回测要快,它能高效地展示策略和基准的收益曲线,因此您可以试用这个功能在完整回测前先验证下策略的收益情况。运行回测 - 点击&运行回测&将会带您进入完整的回测结果页面,您可以查看更加详细的策略回测分析结果,帮助您对策略的表现实现更细致的评估。分红派息拆分(送股、增股)在回测中,我们默认对股票拆分的情况进行,提高计算结果的准确性。股息在股息事件中有四个关键的日期:1.方案实施公告日 :公司公布股息分配方案的日期。2.股权登记日 :在股权登记日这一天收盘时仍持有或买进该公司的股票的投资者可以享有此次股息分红。3.除权除息日 :股权登记日的下一个交易日即是除权除息日,该日证券交易所会计算出股票的除权除息价,以作为投资者在除权除息日开盘的参考。4.股息到帐日 :现金股息划拨到投资者资金账户的日期。当您的投资策略在股权登记日时仍持有分股息的股票,那么您的投资策略将有资格参与此次股息分红。在除权除息日结束的时候您投资组合中的DividendRecivable会增加对应持有股票的股息分红数目。然后在股息到帐日那天DividendRecivable将会被搬入投资组合中的AvailableCash - 您最终拿到了应收股息分红的金额,并且可以用这笔钱进行再投资了。回测结果分析回测结果当回测运行没有出错,回测结果页面将会载入您的投资组合的各种交易、盈亏和风险信息。下图是回测结果的介绍:回测设置和状态:在这里您能够看到策略名称、交易的品种(股票还是期货)、回测起止日期、初始资金、回测频率等信息,并能够将回测分享到社区收益概览:展示策略的(Sharpe, InformationRatio等)、回测收益图、每日盈亏图以及成交记录图。您自己通过画图结果也会在该页面展示交易详情:展示回测期的历史交易记录,包括成交时间、成交价、费用等信息每日持仓:展示回测期的仓位信息,包括建仓成本、累计盈亏等信息账户信息:展示回测期的账户信息,包括账户总权益、可用资金、当日盈亏、累计盈亏等信息输出日志:您在策略中通过print或者的方式输出的信息都在这里展示。需要注意,回测最多保存最新10000条日志记录收益表格:您在这里看到回测期间每个月截止往前的1个月、3个月、6个月、12个月的投资策略和基准策略的收益详细情况。风险表格:您在这里看到投资策略回测期间的每个月截止往前的1个月、3个月、6个月、12个月的各种风险指标数值。其中波动值表格中您还可以看到投资策略和基准策略的比较。回测结果进阶分析在回测结果页面新加入的&进阶分析&选项卡允许用户在每次回测运行完毕之后进行诸如月度收益分布、胜率分布等分析。净值曲线反映策略与基准合约在回测期间的累计净值表现,以100%为起点。其中,对数轴累计净值曲线将原有纵轴累计净值在纵轴的刻度以10为底数进行了取对数计算。这种显示方式并未改变累计净值水平,但在收益变动剧烈的情况下(比如暴涨10倍)能够较好地显示出策略净值不同时期水平。波动率调整累计净值意思是将策略的累计净值根据基准的波动率进行调整。举例来说,在回测期间基准合约的波动率为2,而策略的波动率是4.那么尽管策略在回测期间取得了较高的收益,但在波动率调整后,策略整体收益率要变为原有水平的一半。这种方式能够简单直观地对比剔除波动率这一影响因素之后策略与基准的收益水平。收益详情月度收益率以等温图的方式显示每月累计收益情况;年度收益率计算每个自然年的策略累计收益情况。持仓分析持仓占比为每日股票持仓市值占投资组合总权益的比重;每日换手率计算为每日买、卖成交额绝对值加总除以2再除以投资组合总权益。胜率分布回转交易(round trip trade)按照一定规则的买入、卖出匹配的交易。举例来说:1.回测期间发生了以下几笔交易:11-15 09:45 买 平安银行 100股@10元11-15 11:00 买 平安银行 100股@12元11-16 09:45 卖 平安银行 100股@13元11-16 11:00 买 平安银行 100股@14元11-16 14: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%,重点展示特定时期策略表现。 至
牛市调整期 至
创业板大牛市 至
股灾暴跌 至
熔断暴跌收益指标回测收益率: 策略在期限内的收益率。回测收益 = \frac{期末投资组合总权益 - 期初投资组合总权益}{期初投资组合总权益}回测收益期末投资组合总权益期初投资组合总权益期初投资组合总权益年化收益率: 采用了复利累积以及的 计算得到的年化收益。年化收益率 = (1 + R)^\frac{1}{t} - 1年化收益率t = \frac{策略运行累计自然日数量}{365}策略运行累计自然日数量R = 累计收益率累计收益率基准收益率: 相同条件下,一个简单的买入并持有基准合约策略的收益率(默认基准合约为沪深300指数,这里假设指数可交易,最小交易单位为1)。基准收益率 = \frac{买入并持有至期末投资组合总权益 - 期初投资组合总权益}{期初投资组合总权益}基准收益率买入并持有至期末投资组合总权益期初投资组合总权益期初投资组合总权益每日收益率: 通过投资组合权益计算出的日收益率。每日收益率 = \frac{当前交易日总权益 - 前一交易日总权益}{前一交易日总权益}每日收益率当前交易日总权益前一交易日总权益前一交易日总权益阿尔法(alpha, \alpha): 模型表达式中的残余项。表示策略所持有投资组合的收益中和市场整体收益无关的部分,是策略选股能力的度量。当策略所选股票的总体表现优于市场基准组合成分股时,阿尔法取正值;反之取负值。\alpha = E[r_p - [r_f + \beta \cdot (r_b - r_f)]]其中r_p为策略所持有投资组合收益;r_f为无风险组合收益;\beta为CAPM模型中的贝塔系数;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}为回测期内策略日收益率的均值。年化跟踪误差(tracking error, \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个交易日策略所持有投资组合的日主动收益、日收益率和基准组合的日收益率。年化下行波动率(downside risk, \sigma_d): 相比波动率,下行波动率对收益向下波动和向上波动两种情况做出了区分,并认为只有收益向下波动才意味着风险。在实际计算中,我们统一使用基准组合收益为目标收益,作为向上波动和向下波动的判断标准。\sigma\_d = \sqrt{\frac{244}{n-1} \sum\_{i=1}^{n}[r\_p(i) - r\_b(i)]^2 \cdot I(i)}I(i) = \begin{cases} 1, \space r\_p(i) \lt r\_b(i) \\\ 0, \space r\_p(i) \geqslant r\_b(i) \end{cases}其中,n为回测期内交易日数量;r\_p(i), r\_b(i)分别表示第个交易日策略所持有投资组合的日收益率、基准组合的日收益率;I(i)为指示函数(indicator function),如果第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投资组合和指数基准的走向相同,但是比指数基准的移动幅度更大受每日市场消息或是受经济情况影响很大的股票最大回撤(max drawdown): 在回测期内,在任一交易日往后推,策略总权益走到最低点时收益率回撤幅度的最大值。最大回撤是评估策略极端风险管理能力的重要指标。其计算方式如下: :Drawdown_t= \begin{cases} 0 & \mbox{if } NET\_t=min \_{j\geq t} NET\_j \\\ \\frac{NET\_t-\min \_{j\geq t} NET_j}{NET_t} &\mbox{else } \end{cases}NET\text{为某期净值}为某期净值MaxDrawdown={max(Drawdown_t)}风险调整后收益指标夏普率(sharpe ratio): 衡量策略相对于无风险组合的表现,是策略所获得风险溢价的度量——即如果策略额外承担一单位的风险,可以获得多少单位的收益作为补偿。Daily\space Sharpe\space Ratio = \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 \space Ratio = \sqrt{244} \cdot Daily \space Sharpe \space Ratio其中\bar{r\_e}为回测期内策略日超额收益率均值;n为回测期内交易日数目;r\_p(i), r\_{f}(i)分别为第i个交易日策略所持有投资组合的日收益率以及无风险组合日收益率;\sigma\_e为策略超额收益率的波动率。索提诺比率(sortino ratio): 衡量策略相对于目标收益的表现。其使用下行波动率作为风险度量,因此区别于夏普率。在目前的计算中,我们使用基准组合收益作为目标收益,以此作为区分向上波动和向下波动的标准。Daily\space Sortino\space Ratio = \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 \space Ratio = \sqrt{244} \cdot Daily \space Sortino \space Ratio其中\bar{r\_e}为回测期内策略日超额收益率均值;n为回测期内交易日数目;r\_p(i), r\_{f}(i)分别为第i个交易日策略所持有投资组合的日收益率以及无风险组合日收益率;\sigma\_d为策略年化下行波动率。信息比率(information ratio): 衡量策略相对于市场基准组合的表现。一般用于评估纯多头的主动交易策略(包括阿尔法策略和基准择时策略)。需要注意的是,信息率不适用于多-空结合的对冲策略的表现评估。Daily\space Information\space Ratio = \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 \space Ratio = \sqrt{244} \cdot Daily \space Information \space Ratio其中\bar{r\_{pa}}为回测期主动日收益率均值;n为回测期内交易日数目;r\_p(i), r\_b(i)分别为第i个交易日策略所持有投资组合的日收益率以及基准组合日收益率;\sigma\_t为策略跟踪误差。在我们提供的三个风险调整后收益指标中,信息率用于评估投资组合相对于市场基准组合的表现,一般适用于纯多头的主动交易策略(包括阿尔法策略和基准择时策略);夏普率用于评估投资组合相对于无风险组合的表现,一般适用于多-空结合的交易策略(例如市场中性策略或配对交易策略),或没有公认市场基准组合的投资品种的交易策略(例如期货CTA策略)。索提诺比率使用下行波动率作为风险度量,因而有别于信息率和夏普率。下行波动率区分了收益向上波动和向下波动两种情况,并认为收益向下波动才代表风险。因此,索提诺比率的优点,在于其使用的风险度量更为切合我们实际投资中面对的风险;而其缺点则是不如信息率和夏普率常用,认知度较低,且其目标收益(区分收益波动是向上还是向下的标准)的设定是任意的,并不依赖于任何基准组合(不同于信息率和夏普率)。因此,在横向对比不同策略或基金业绩时,我们需要使用统一的目标收益来区分向上波动和向下波动。在实际计算中,我们以无风险组合收益作为索提诺比率的目标收益。绩效分析在运行完回测之后, 在回测结果页面点击右上方的 “绩效分析” 按键就开启了对于策略表现的分析。目前该分析主要包括Brinson分析,风格分析,净值回归以及风险分析几部分。需要注意的是, 目前绩效分析暂时只支持股票类型投资组合。Brinson分析在“Brinson分析”部分,我们使用Brinson Model 对主动投资组合进行业绩归因。 Brinson Model假设用户的投资流程可分为两个步骤:板块配置和板块内选股。 和市场基准组合相比,如果投资者能做到以下任意一项:高配表现好的板块;低配表现差的版块;在某些板块中具备较强的选股能力,都有可能获得比市场基准组合更好的业绩。 为了定量地评估“板块配置”和“板块内选股”这两步对投资组合收益的贡献,用户可以使用 Brinson Model对投资组合的主动收益(投资组合和基准组合的收益差值)进行业绩归因, 以完善其投资流程(例如为选股收益高的板块配置更多的资金等)。1.投资组合和基准组合的板块权重配置用户选择基准组合(目前支持沪深300和中证500),选择板块分类(目前支持MSCI和申万一级行业分类), 设置分析区间的起始和结束时间,点击计算, 该分析图表展示了投资组合和基准组合在每个板块的平均配置权重(time weighted average),投资组合减去基准组合的板块配置差值即为投资组合在该板块的主动权重。2.投资组合和基准组合的收益解析归因Brinson 模型是一个基于板块的业绩归因模型,投资组合相对基准组合的主动收益的来源是板块配置的差异, 以及在板块中收益的差异(选股的差异),所以下面的表格详细分解了两个组合在各个板块的权重和收益,并且进行归因计算。该表格可以分为三个部分:第一部分为板块权重,详细展示了投资组合和基准组合在不同板块的权重配置情况,并计算了二者的配置差异。第二部分为板块收益,展示了投资组合和基准组合在不同板块的绝对收益情况,两者的差值为板块收益差值。第三部分为归因计算部分,计算了投资组合与基准组合在不同板块上的收益差别的来源,包括板块配置差异,板块内选股差异以及交互作用差异。投资组合超过基准组合的收益部分为主动收益,Brinson归因分析模型把收益部分分解为三个部分:配置收益,选股收益和交互收益。板块配置收益: 体现了投资组合对板块配置的能力,在图表中的计算公式为 基准组合相对收益 * 板块权重差值板块选股收益: 体现了投资组合在特定板块内的选股能力,在图表中的计算公式为 板块收益差值 * 基准组合权重交互收益: 是板块权重差值和板块收益差值的交互项,在图表中的计算公式为 板块收益差值 * 板块权重差值板块主动收益为三项收益计算的总和,等于投资组合相对基准组合在该板块的主动收益。上图表明格雷厄姆数字价值投资法的收益主要来源于精确的选股能力,并且选股带来的收益甚至弥补了部分资产配置不利造成的损失。风格分析风格分析是指对策略或基金的投资风格或偏好进行分析。在RQBeta中,我们通过投资组合中个股的基本面信息(例如规模、价值和盈利能力) 和量价信息(例如动量、波动率和流动性)来对投资组合多期的投资风格变化,以及投资组合和基准组合投资风格的差异进行评估。 通过分析基金产品的多期投资风格变化程度(即风格漂移),我们可以判断基金产品的实际投资偏好和稳定性,是否和产品发行时所宣称的是否一致; 而通过投资组合和基准组合投资风格差异的对比,我们可以对投资组合相对于基准组合的额外收益和风险来源有更深入的了解。 在实际分析中,我们选择了十个常见的投资风格(即RQ风格因子)来对投资组合进行多维度的风格评估。风格名称解释贝塔(Beta)股票收益对基准组合(沪深300)收益的敏感度动量(Momentum)股票价格变化的总体趋势特征规模(Size)上市企业的规模盈利率(Earning Yield)上市企业的营收能力波动率(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上的,详细的说明可见github上的文档说明通过restful的http请求:登录: POST url: 请求示例:post("https://rqopen.ricequant.com/login", {"username": username, "password": password})
python范例:import requests
r = requests.Session()
resp = r.post("https://rqopen.ricequant.com/login", {"username": username, "password": password})
返回示例:{'code': 200,
'resp': {'msg': 'Congratulations, login successful! Happy Coding and '
'Trading!'}}
其中,username为米筐账号用户名,password为米筐账号密码查询当日交易记录: GET url: 请求示例:get("https://rqopen.ricequant.com/pt/load_day_trades/{}".format(run_id))
python范例:import requests
r = requests.Session()
resp = r.post("https://rqopen.ricequant.com/login", {"username": username, "password": password})
resp = 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': ' 09:32:00',
'trade_id': '2',
'transaction_cost': 6.28}]}}
run_id为上述模拟交易对应id,可以在这里查看到:查询最新持仓 Get url: 请求示例:get("https://rqopen.ricequant.com/pt/load_current_positions/{}".format(run_id))
python范例:import requests
r = requests.Session()
resp = 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的状态。当天结束进程时会保存这些状态:用户账户,持仓信息使用保存的context对象。注意:context中不能序列化的变量不会被保存,重启后会不存在,如果你写了如下代码:def init(context):
context.something = query(valuation)
context是不能被保存的,因为query()返回的对象无法被序列化。因此日志中会出现WARN:context.something can not be pickle
正确的做法是将query()写在before_trading()中。 技术分析米筐平台引入的信号计算方式能够让您更方便地进行技术分析。在技术分析过程中,您既可以使用我们预先提供的常用技术指标,也可以使用自定义指标来产生信号供策略内使用。def MA_SIGNAL():
return CROSS(MA(CLOSE, 5), MA(CLOSE, 10))
def BOLL_SIGNAL():
MID, TOP, BOTTOM = BOLL(20, 2)
return CROSS(CLOSE, TOP)
def init(context):
context.s1 = '000001.XSHE'
reg_indicator('ma', MA_SIGNAL, '5m', win_size=20)
reg_indicator('boll', BOLL_SIGNAL, '1d', win_size=20)
def handle_bar(context, bar_dict):
ma_cross = get_indicator(context.s1, 'ma')
boll_cross = get_indicator(context.s1, 'boll')
if ma_cross and boll_cross:
order_percent(context.s1, 0.1)
自定义技术指标为满足用户对指标要求的多样性,米筐支持用户使用类似通达信公式的方式计算自定义指标,具体方法可以参考如下步骤:首先,定义指标函数体本身。例如,def KDJ_SIGNAL()):
K, D, J = KDJ()
return EVERY(J & 80, 2)
其次,在init阶段调用对所需取用的指标进行注册。注册时,需要指定指标名称、参数、适用的周期(比如,5分钟线还是日线)以及初始回溯获取数据的窗口长度。例如,reg_indicator('kdj', KDJ_SIGNAL, '1d', win_size=20)
最后,调用获取指标计算结果。此时需要指定获取的指标名称以及所需计算的合约代码。例如,get_indicator('000001.XSHE', 'kdj')
需要注意的是,目前技术指标计算并未包括当前“不完整”分钟线。举例来说,在09:48计算以5分钟线为周期的移动平均时,并不包括09:45~09:48这一“不完整”的5分钟线。 系统预定义指标MACD 指数平滑移动平均def MACD(SHORT=12, LONG=26, M=9):
MACD 指数平滑移动平均线
DIFF = EMA(CLOSE, SHORT) - EMA(CLOSE, LONG)
DEA = EMA(DIFF, M)
MACD = (DIFF - DEA) * 2
return MACD
KDJ随机指标def KDJ(N=9, M1=3, M2=3):
KDJ 随机指标
RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
K = EMA(RSV, (M1 * 2 - 1))
D = EMA(K, (M2 * 2 - 1))
J = K * 3 - D * 2
return K, D, J
RSI相对指标def RSI(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) * 100
RSI2 = SMA(MAX(CLOSE - LC, 0), N2, 1) / SMA(ABS(CLOSE - LC), N2, 1) * 100
RSI3 = SMA(MAX(CLOSE - LC, 0), N3, 1) / SMA(ABS(CLOSE - LC), N3, 1) * 100
return RSI1, RSI2, RSI3
BOLL布林带def BOLL(N=20, P=2):
BOLL 布林带
MID = MA(CLOSE, N)
UPPER = MID + STD(CLOSE, N) * P
LOWER = MID - STD(CLOSE, N) * P
return UPPER, MID, LOWER
WR威廉指标def WR(N=10, N1=6):
W&R 威廉指标
WR1 = (HHV(HIGH, N) - CLOSE) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
WR2 = (HHV(HIGH, N1) - CLOSE) / (HHV(HIGH, N1) - LLV(LOW, N1)) * 100
return WR1, WR2
DMI趋向指标def DMI(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) - LOW
DMP = SUM(IF((HD & 0) & (HD & LD), HD, 0), M1)
DMM = SUM(IF((LD & 0) & (LD & HD), LD, 0), M1)
DI1 = DMP * 100 / TR
DI2 = DMM * 100 / TR
ADX = MA(ABS(DI2 - DI1) / (DI1 + DI2) * 100, M2)
ADXR = (ADX + REF(ADX, M2)) / 2
return DI1, DI2, ADX, ADXR
BIAS乖离率def BIAS(L1=5, L4=3, L5=10):
BIAS 乖离率
BIAS = (CLOSE - MA(CLOSE, L1)) / MA(CLOSE, L1) * 100
BIAS2 = (CLOSE - MA(CLOSE, L4)) / MA(CLOSE, L4) * 100
BIAS3 = (CLOSE - MA(CLOSE, L5)) / MA(CLOSE, L5) * 100
return BIAS, BIAS2, BIAS3
ASI震动升降指标def ASI(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)
return ASI, ASIT
VR容量比率def VR(M1=26):
VR容量比率
LC = REF(CLOSE, 1)
VR = SUM(IF(CLOSE & LC, VOL, 0), M1) / SUM(IF(CLOSE &= LC, VOL, 0), M1) * 100
ARBR人气意愿指标def ARBR(M1=26):
ARBR人气意愿指标
AR = SUM(HIGH - OPEN, M1) / SUM(OPEN - LOW, M1) * 100
BR = SUM(MAX(0, HIGH - REF(CLOSE, 1)), M1) / SUM(MAX(0, REF(CLOSE, 1) - LOW), M1) * 100
return AR, BR
DPOdef DPO(M1=20, M2=10, M3=6):
DPO = CLOSE - REF(MA(CLOSE, M1), M2)
MADPO = MA(DPO, M3)
return DPO, MADPO
TRIX三重指数平滑均线def TRIX(M1=12, M2=20):
TR = EMA(EMA(EMA(CLOSE, M1), M1), M1)
TRIX = (TR - REF(TR, 1)) / REF(TR, 1) * 100
TRMA = MA(TRIX, M2)
return TRIX, TRMA
工具函数及行情变量名称收盘价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)数据目前我们平台使用的是中国A股市场从2005年到最新交易日的每分钟以及每日行情数据。我们后台系统在收到数据提供商提供的原始数据时会自动对其进行。为了使用户摆脱处理数据时的繁琐耗时,我们对数据处理部分进行了大量研究和测试以确保数据的准确性和实时性。另外我们系统采用了面向服务的体系架构以使处理后的数据能安全可靠、极速地传送回用户的策略。为了使用户能对更多的市场进行算法回测研究,我们自定义了一套统一的金融数据格式。目前我们做了中国A股市场,在不久的将来我们将会支持更多的股市甚至期货期权,如港股,美股或其它。美股已经在我们的策略研究平台上支持了。更多数据内容,请参考。股票数据我们的原始数据来源于一流的数据提供商,以保障给用户提供最准确的数据源,只有准确的数据才能让策略有保障。目前我们支持多于2700只中国A股市场的,其中包括一些已退市的股票,这样可避免所谓的。另外我们系统也处理了股票的拆分和分红。每日交易数据纪录了股票在一天内的交易信息,如开盘价或交易量等。目前使用的基准-沪深300( )很好地反映了中国A股市场的整体走势并且有足够长的时间用于回测,所以我们把它作为平台回测算法的基准参照。ETF、LOF基金数据ETF,又称&交易型开放式指数证券投资基金&(Exchange Traded Fund的缩写),简称&交易型开放式指数基金&,又称&交易所交易基金&。ETF是一种跟踪&标的指数&变化、且在证券交易所上市交易的基金。ETF最大的作用在于投资者可以借助这个金融产品具备的指数期货、商品期货的特性套利操作,有助于提高股市的成交量。Ricequant上面目前有将近115只ETF的历史数据信息方便您做回测,其价格也如股票历史数据做了拆分的调整,并且也在收益中计算了分红。并且我们也加入了LOF基金的日、分钟和他们的合约信息来方便您做类似分级轮动等有趣的策略。具体数据信息,您可以参考获取更多信息。可以通过ctrl+i - windows用户,或command+i - mac用户进行代码搜索。指数数据我们目前开放了790多个每日和每分钟历史指数数据,在代码中的使用方法和股票相同(也可以通过ctrl+i - windows用户,或command+i - mac用户进行代码搜索)。所支持的指数的详细情况可以查看。期货数据Ricequant引入了中国四大期货交易所(大商、郑商、中金、上期)2005年以来的期货每日行情数据以及2010年以来的分钟行情数据。并对合约做了主力连续合约和指数连续合约的合成处理。您可以通过在get_price函数进行获取,并进行相应计算。需要注意,由于期货合约存续的特殊性,针对每一品种的期货合约,系统中都增加了 主力连续合约以及指数连续合约两个人工合成的合约来满足使用需求。其中,主力连续合约是由该品种期货不同时期主力合约接续而成,代码以88结尾,例如IF88;指数连续合约是由当前品种全部可交易合约以累计持仓量为权重加权平均得到,代码以99结尾,例如IF99。主力合约的判断标准:合约首次上市时,以当日收盘同品种持仓量最大者作为从第二个交易日开始的主力合约。当同品种其他合约持仓量在收盘后超过当前主力合约1.1倍时,从第二个交易日开始进行主力合约的切换。日内不会进行主力合约的切换。财务数据Ricequant从一流数据提供商处购买并且整理了财务三大表,市场衍生数据和财务指标衍生数据共计400余项,涵盖了A股两市几乎所有股票自上市以来的所有基本面数据。财务数据/基本面数据可以用来选股,所以主要的应用是在init或before_trading函数里的来加入筛选出来的结果进入股票池或者是使用查询出来的财务指标数据。在 Ricequant 使用get_fundamentals函数来查询财务数据库中的所有股票的财务数据。您可以试用类似SQL的语法去查询列、过滤、排序并且限制结果数目等,你可以通过这样来在Ricequant的算法中生成一篮子的证券,基于你选择的公司的财务基本指标。并且你也可以将这些财务指标数据用于你的交易算法或策略研究中。所有的财务数据指标可以在找到。财务数据在Ricequant的算法交易中可以有两种使用方法:基于财务数据筛选出股票并加入股票池对你的算法提供数据(在handle_bar中),来便于做投资决策有三个函数和财务数据有关:before_trading, get_fundamentals, 和update_universe。before_trading只会在每天开盘前被触发一次。它可以用来传入一个query对象并且利用get_fundamentals来创建一个股票池。query对象是建立在SQLAlchemy的语法的基础上的一个Python ORM。您可以具体参考来查看更多的细节如何生成一个query。在下面的例子中,算法策略拿到了每只股票的pe_ratio的信息。get_fundamentals函数会自动把每个股票的股票代码(order_book_id)包含进来。返回的数据接着会被filter按照pe_ratio的区间进行过滤。最终,数据会被order_by排序并且被limit限制最后的查询数据的个数。以下是一段简单的查询财务数据的代码范例,在init里面查询了财务数据,只会在策略运行的时候触发一次,只是用来查询所有股票的收益:
def init(context):
context.fundamental_df = get_fundamentals(
fundamentals.income_statement.revenue
logger.info(context.fundamental_df)
我们接着看一段进阶的查询范例,查询pe值在25和30之间并且收益排前10的股票:#会在策略开始前触发一次,我们可以从get_fundamentals函数中更新我们的股票池并且保存查询获得的数据以作之后使用。
def init(context):
# 实时打印日志
context.fundamental_df = get_fundamentals(
fundamentals.income_statement.revenue,
fundamentals.eod_derivative_indicator.pe_ratio
fundamentals.eod_derivative_indicator.pe_ratio & 25
fundamentals.eod_derivative_indicator.pe_ratio & 30
).order_by(
fundamentals.income_statement.revenue.desc()
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的列即所有的股票代码的数组:(.fundamental_df.columns.values)
如果您想打印出来查询完的结果logger.info(context.fundamental_df),你将会发现数字的排版非常整洁:
600028.XSHG
600704.XSHG
600019.XSHG
600362.XSHG
1.53684e+12
1.27481e+11
1.22449e+11
1.14881e+11
600755.XSHG
600418.XSHG
601992.XSHG 600600.XSHG
4.31976e+10
3.39457e+10
2.59027e+10
2.4315e+10
601985.XSHG
000921.XSHE
1.99621e+10
1.92274e+10
如何只查询某些股票的财务数据?在ricequant上查询基本面数据时,我们是以所有年报的发布日期(announcement date)为准,因为只有财报发布后才成为市场上公开可以获取的数据。比如某公司第三季度的财报于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的服务器,我们会对其进行加密,并存放在内网的数据库中。隔离策略运行: 您的策略在运行的过程中会被放置在一个安全的隔离环境,平台上运行的其他策略无法进入该独立的环境,所以也不能候窥探您的任何信息。在技术上我们通过Java security policy, separete class loader, linux namespace, linux cgroup, linux seccomp, selinux等手段来构建这个隔离环境。如果您对我们使用技术感兴趣的话,可以通过阅读这个获得更多相关内容。云端储存 我们的所有后台运算和储存都在非常出色的云服务商上进行,他们有很专业的安全保护。如您有对我们的安全保护有任何的疑问,请不要犹豫。Python SDK 简介基本方法你的算法策略目前必须实现至少两个方法:init 和 handle_bar,而before_trading和after_trading是可选择实现的方法。init (必须实现)init(context)
初始化方法 - 在回测和实时模拟交易只会在启动的时候触发一次。你的算法会使用这个方法来设置你需要的各种初始化配置。 context 对象将会在你的算法的所有其他的方法之间进行传递以方便你可以拿取到。参数参数类型注释contextpython简单对象将会在整个算法中当做一个全局变量来使用。属性通过点标记(&.&)来取到。返回无范例def init(context):
context.cash_limit = 5000
handle_bar (必须实现)handle_bar(context, bar_dict)
的更新会自动触发该方法的调用。策略具体逻辑可在该方法内实现,包括交易信号的产生、订单的创建等。在实时模拟交易中,该函数在交易时间内会每分钟被触发一次。 注意:由于该方法会每分钟被触发,请尽量不要在该函数中放入查询类(如带有query()参数的API)代码以免运行时间过长,该类逻辑可放在 init() 中执行。参数参数类型注释contextpython简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(&.&)来取到bar_dictdictkey为order_book_id,value为bar数据。当前合约池内所有合约的bar数据信息都会更新在bar_dict里面返回无范例def handle_bar(context, bar_dict):
order_shares('000001.XSHE', 500)
before_trading (选择实现)before_trading(context)
可选择实现的函数。每天在策略开始交易前会被调用。不能在这个函数中发送订单。需要注意,该函数的触发时间取决于用户当前所订阅合约的交易时间。举例来说,如果用户订阅的合约中存在有夜盘交易的期货合约,则该函数可能会在前一日的20:00触发,而不是早晨08:00.参数参数类型注释contextpython简单对象储存策略自定义参数、设置、仓位、投资组合信息的全局变量,属性通过点标记(&.&)来取到。返回无范例def before_trading(context):
fundamental_df = get_fundamentals(your_own_query)
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())
落指定股数的买/卖单,最常见的落单方式之一。如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认是市价单(market order)。参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象,用户必须指定amountfloat-required需要落单的股数。正数代表买入,负数代表卖出。将会根据一手xx股来向下调整到一手的倍数,比如中国A股就是调整成100股的倍数。styleOrderType订单类型,默认是市价单。目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回范例购买Buy 2000 股的平安银行股票,并以市价单发送: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)
指定手数发送买/卖单。如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认是市价单(market order)。参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument对象,用户必须指定amountfloat多少手的数目。正数表示买入,负数表示卖出,用户必须指定styleOrderType订单类型,默认是市价单。目前支持的订单类型有:style=MarketOrderstyle=LimitOrder(limit_price)返回范例买入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)返回范例买入价值¥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%.需要注意,如果资金不足,该API将不会创建发送订单。参数参数类型注释id_or_insstr或instrument对象order_book_id或symbol或instrument object,用户必须指定percentfloat占有现有的投资组合价值的百分比。正数表示买入,负数表示卖出。用户必须指定styleOrderType订单类型,默认是市价单。目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回范例买入等于现有投资组合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或instrument object,用户必须指定cash_amountfloat-required最终的该证券的仓位目标价值styleOrderType订单类型,默认是市价单。目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回范例如果现在的投资组合中持有价值¥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或instrument object,用户必须指定percentfloat-required仓位最终所占投资组合总价值的目标百分比。styleOrderType订单类型,默认是市价单。目前支持的订单类型有:style=MarketOrder()style=LimitOrder(limit_price)返回范例如果投资组合中已经有了平安银行股票的仓位,并且占据目前投资组合的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)返回范例以价格为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返回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订单类型,默认是市价单。目前支持的订

我要回帖

更多关于 三边和不超过3950px 的文章

 

随机推荐