使用raw_perf数据

策略分享
标签: #<Tag:0x00007f25a0660158>

(华尔街的猫) #1

我们一方面可以在交易详情的表格里查看交易细节数据,另一方面其实这个数据有接口,用户是可以直接可以查看并使用的,这里是一个简单例子,查询某几天的持仓、交易、成交详情。

克隆策略

    {"Description":"实验创建于2017/8/26","Summary":"","Graph":{"EdgesInternal":[{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-15:instruments","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-8:data"},{"DestinationInputPortId":"-215:instruments","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-8:data"},{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-53:data1","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-15:data"},{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43:features","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"DestinationInputPortId":"-215:features","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"DestinationInputPortId":"-222:features","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"DestinationInputPortId":"-231:features","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"DestinationInputPortId":"-238:features","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-24:data"},{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-60:model","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43:model"},{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-84:input_data","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-53:data"},{"DestinationInputPortId":"-250:options_data","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-60:predictions"},{"DestinationInputPortId":"-231:instruments","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-62:data"},{"DestinationInputPortId":"-250:instruments","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-62:data"},{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43:training_ds","SourceOutputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-84:data"},{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-60:data","SourceOutputPortId":"-86:data"},{"DestinationInputPortId":"-222:input_data","SourceOutputPortId":"-215:data"},{"DestinationInputPortId":"287d2cb0-f53c-4101-bdf8-104b137c8601-53:data2","SourceOutputPortId":"-222:data"},{"DestinationInputPortId":"-238:input_data","SourceOutputPortId":"-231:data"},{"DestinationInputPortId":"-86:input_data","SourceOutputPortId":"-238:data"}],"ModuleNodes":[{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-8","ModuleId":"BigQuantSpace.instruments.instruments-v2","ModuleParameters":[{"Name":"start_date","Value":"2010-01-01","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"end_date","Value":"2015-01-01","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"market","Value":"CN_STOCK_A","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"instrument_list","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"max_count","Value":"0","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"rolling_conf","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-8"}],"OutputPortsInternal":[{"Name":"data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-8","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":1,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-15","ModuleId":"BigQuantSpace.advanced_auto_labeler.advanced_auto_labeler-v2","ModuleParameters":[{"Name":"label_expr","Value":"# #号开始的表示注释\n# 0. 每行一个,顺序执行,从第二个开始,可以使用label字段\n# 1. 可用数据字段见 https://bigquant.com/docs/develop/datasource/deprecated/history_data.html\n# 添加benchmark_前缀,可使用对应的benchmark数据\n# 2. 可用操作符和函数见 `表达式引擎 <https://bigquant.com/docs/develop/bigexpr/usage.html>`_\n\n# 计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)\nshift(close, -5) / shift(open, -1)\n\n# 极值处理:用1%和99%分位的值做clip\nclip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))\n\n# 将分数映射到分类,这里使用20个分类\nall_wbins(label, 20)\n\n# 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)\nwhere(shift(high, -1) == shift(low, -1), NaN, label)\n","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"start_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"end_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"benchmark","Value":"000300.SHA","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"drop_na_label","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"cast_label_int","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"user_functions","Value":"","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"instruments","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-15"}],"OutputPortsInternal":[{"Name":"data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-15","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":2,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-24","ModuleId":"BigQuantSpace.input_features.input_features-v1","ModuleParameters":[{"Name":"features","Value":"(high_0-low_0)/low_0\namount_0\nmean(return_0,5)","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features_ds","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-24"}],"OutputPortsInternal":[{"Name":"data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-24","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":3,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-43","ModuleId":"BigQuantSpace.stock_ranker_train.stock_ranker_train-v5","ModuleParameters":[{"Name":"learning_algorithm","Value":"排序","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"number_of_leaves","Value":30,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"minimum_docs_per_leaf","Value":1000,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"number_of_trees","Value":20,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"learning_rate","Value":0.1,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"max_bins","Value":1023,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"feature_fraction","Value":1,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"m_lazy_run","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"training_ds","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"test_ds","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"base_model","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43"}],"OutputPortsInternal":[{"Name":"model","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43","OutputType":null},{"Name":"feature_gains","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43","OutputType":null},{"Name":"m_lazy_run","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-43","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":6,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-53","ModuleId":"BigQuantSpace.join.join-v3","ModuleParameters":[{"Name":"on","Value":"date,instrument","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"how","Value":"inner","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"sort","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"data1","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-53"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"data2","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-53"}],"OutputPortsInternal":[{"Name":"data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-53","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":7,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-60","ModuleId":"BigQuantSpace.stock_ranker_predict.stock_ranker_predict-v5","ModuleParameters":[{"Name":"m_lazy_run","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"model","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-60"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-60"}],"OutputPortsInternal":[{"Name":"predictions","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-60","OutputType":null},{"Name":"m_lazy_run","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-60","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":8,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-62","ModuleId":"BigQuantSpace.instruments.instruments-v2","ModuleParameters":[{"Name":"start_date","Value":"2016-01-01","ValueType":"Literal","LinkedGlobalParameter":"交易日期"},{"Name":"end_date","Value":"2017-01-01","ValueType":"Literal","LinkedGlobalParameter":"交易日期"},{"Name":"market","Value":"CN_STOCK_A","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"instrument_list","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"max_count","Value":"0","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"rolling_conf","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-62"}],"OutputPortsInternal":[{"Name":"data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-62","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":9,"IsPartOfPartialRun":null,"Comment":"预测数据,用于回测和模拟","CommentCollapsed":false},{"Id":"287d2cb0-f53c-4101-bdf8-104b137c8601-84","ModuleId":"BigQuantSpace.dropnan.dropnan-v1","ModuleParameters":[],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"input_data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-84"}],"OutputPortsInternal":[{"Name":"data","NodeId":"287d2cb0-f53c-4101-bdf8-104b137c8601-84","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":13,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"-86","ModuleId":"BigQuantSpace.dropnan.dropnan-v1","ModuleParameters":[],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"input_data","NodeId":"-86"}],"OutputPortsInternal":[{"Name":"data","NodeId":"-86","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":14,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"-215","ModuleId":"BigQuantSpace.general_feature_extractor.general_feature_extractor-v7","ModuleParameters":[{"Name":"start_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"end_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"before_start_days","Value":0,"ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"instruments","NodeId":"-215"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features","NodeId":"-215"}],"OutputPortsInternal":[{"Name":"data","NodeId":"-215","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":15,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"-222","ModuleId":"BigQuantSpace.derived_feature_extractor.derived_feature_extractor-v3","ModuleParameters":[{"Name":"date_col","Value":"date","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"instrument_col","Value":"instrument","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"drop_na","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"remove_extra_columns","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"user_functions","Value":"","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"input_data","NodeId":"-222"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features","NodeId":"-222"}],"OutputPortsInternal":[{"Name":"data","NodeId":"-222","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":16,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"-231","ModuleId":"BigQuantSpace.general_feature_extractor.general_feature_extractor-v7","ModuleParameters":[{"Name":"start_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"end_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"before_start_days","Value":0,"ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"instruments","NodeId":"-231"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features","NodeId":"-231"}],"OutputPortsInternal":[{"Name":"data","NodeId":"-231","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":17,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"-238","ModuleId":"BigQuantSpace.derived_feature_extractor.derived_feature_extractor-v3","ModuleParameters":[{"Name":"date_col","Value":"date","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"instrument_col","Value":"instrument","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"drop_na","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"remove_extra_columns","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"user_functions","Value":"","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"input_data","NodeId":"-238"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"features","NodeId":"-238"}],"OutputPortsInternal":[{"Name":"data","NodeId":"-238","OutputType":null}],"UsePreviousResults":true,"moduleIdForCode":18,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true},{"Id":"-250","ModuleId":"BigQuantSpace.trade.trade-v4","ModuleParameters":[{"Name":"start_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"end_date","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"handle_data","Value":"# 回测引擎:每日数据处理函数,每天执行一次\ndef bigquant_run(context, data):\n # 按日期过滤得到今日的预测数据\n ranker_prediction = context.ranker_prediction[\n context.ranker_prediction.date == data.current_dt.strftime('%Y-%m-%d')]\n\n # 1. 资金分配\n # 平均持仓时间是hold_days,每日都将买入股票,每日预期使用 1/hold_days 的资金\n # 实际操作中,会存在一定的买入误差,所以在前hold_days天,等量使用资金;之后,尽量使用剩余资金(这里设置最多用等量的1.5倍)\n is_staging = context.trading_day_index < context.options['hold_days'] # 是否在建仓期间(前 hold_days 天)\n cash_avg = context.portfolio.portfolio_value / context.options['hold_days']\n cash_for_buy = min(context.portfolio.cash, (1 if is_staging else 1.5) * cash_avg)\n cash_for_sell = cash_avg - (context.portfolio.cash - cash_for_buy)\n positions = {e.symbol: p.amount * p.last_sale_price\n for e, p in context.portfolio.positions.items()}\n\n # 2. 生成卖出订单:hold_days天之后才开始卖出;对持仓的股票,按机器学习算法预测的排序末位淘汰\n if not is_staging and cash_for_sell > 0:\n equities = {e.symbol: e for e, p in context.portfolio.positions.items()}\n instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(\n lambda x: x in equities)])))\n\n for instrument in instruments:\n context.order_target(context.symbol(instrument), 0)\n cash_for_sell -= positions[instrument]\n if cash_for_sell <= 0:\n break\n\n # 3. 生成买入订单:按机器学习算法预测的排序,买入前面的stock_count只股票\n buy_cash_weights = context.stock_weights\n buy_instruments = list(ranker_prediction.instrument[:len(buy_cash_weights)])\n max_cash_per_instrument = context.portfolio.portfolio_value * context.max_cash_per_instrument\n for i, instrument in enumerate(buy_instruments):\n cash = cash_for_buy * buy_cash_weights[i]\n if cash > max_cash_per_instrument - positions.get(instrument, 0):\n # 确保股票持仓量不会超过每次股票最大的占用资金量\n cash = max_cash_per_instrument - positions.get(instrument, 0)\n if cash > 0:\n context.order_value(context.symbol(instrument), cash)\n","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"prepare","Value":"# 回测引擎:准备数据,只执行一次\ndef bigquant_run(context):\n pass\n","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"initialize","Value":"# 回测引擎:初始化函数,只执行一次\ndef bigquant_run(context):\n # 加载预测数据\n context.ranker_prediction = context.options['data'].read_df()\n\n # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数\n context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))\n # 预测数据,通过options传入进来,使用 read_df 函数,加载到内存 (DataFrame)\n # 设置买入的股票数量,这里买入预测股票列表排名靠前的5只\n stock_count = 5\n # 每只的股票的权重,如下的权重分配会使得靠前的股票分配多一点的资金,[0.339160, 0.213986, 0.169580, ..]\n context.stock_weights = T.norm([1 / math.log(i + 2) for i in range(0, stock_count)])\n # 设置每只股票占用的最大资金比例\n context.max_cash_per_instrument = 0.2\n context.options['hold_days'] = 5\n","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"before_trading_start","Value":"","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"volume_limit","Value":0.025,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"order_price_field_buy","Value":"open","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"order_price_field_sell","Value":"close","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"capital_base","Value":1000000,"ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"auto_cancel_non_tradable_orders","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"data_frequency","Value":"daily","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"price_type","Value":"后复权","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"product_type","Value":"股票","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"plot_charts","Value":"True","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"backtest_only","Value":"False","ValueType":"Literal","LinkedGlobalParameter":null},{"Name":"benchmark","Value":"000300.SHA","ValueType":"Literal","LinkedGlobalParameter":null}],"InputPortsInternal":[{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"instruments","NodeId":"-250"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"options_data","NodeId":"-250"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"history_ds","NodeId":"-250"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"benchmark_ds","NodeId":"-250"},{"DataSourceId":null,"TrainedModelId":null,"TransformModuleId":null,"Name":"trading_calendar","NodeId":"-250"}],"OutputPortsInternal":[{"Name":"raw_perf","NodeId":"-250","OutputType":null}],"UsePreviousResults":false,"moduleIdForCode":19,"IsPartOfPartialRun":null,"Comment":"","CommentCollapsed":true}],"SerializedClientData":"<?xml version='1.0' encoding='utf-16'?><DataV1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><Meta /><NodePositions><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-8' Position='211,64,200,200'/><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-15' Position='70,183,200,200'/><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-24' Position='765,21,200,200'/><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-43' Position='638,561,200,200'/><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-53' Position='249,375,200,200'/><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-60' Position='906,647,200,200'/><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-62' Position='1076,127,200,200'/><NodePosition Node='287d2cb0-f53c-4101-bdf8-104b137c8601-84' Position='376,467,200,200'/><NodePosition Node='-86' Position='1078,418,200,200'/><NodePosition Node='-215' Position='381,188,200,200'/><NodePosition Node='-222' Position='385,280,200,200'/><NodePosition Node='-231' Position='1078,236,200,200'/><NodePosition Node='-238' Position='1081,327,200,200'/><NodePosition Node='-250' Position='745,751,200,200'/></NodePositions><NodeGroups /></DataV1>"},"IsDraft":true,"ParentExperimentId":null,"WebService":{"IsWebServiceExperiment":false,"Inputs":[],"Outputs":[],"Parameters":[{"Name":"交易日期","Value":"","ParameterDefinition":{"Name":"交易日期","FriendlyName":"交易日期","DefaultValue":"","ParameterType":"String","HasDefaultValue":true,"IsOptional":true,"ParameterRules":[],"HasRules":false,"MarkupType":0,"CredentialDescriptor":null}}],"WebServiceGroupId":null,"SerializedClientData":"<?xml version='1.0' encoding='utf-16'?><DataV1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><Meta /><NodePositions></NodePositions><NodeGroups /></DataV1>"},"DisableNodesUpdate":false,"Category":"user","Tags":[],"IsPartialRun":false}
    In [11]:
    # 本代码由可视化策略环境自动生成 2019年3月16日 15:54
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    # 回测引擎:每日数据处理函数,每天执行一次
    def m19_handle_data_bigquant_run(context, data):
        # 按日期过滤得到今日的预测数据
        ranker_prediction = context.ranker_prediction[
            context.ranker_prediction.date == data.current_dt.strftime('%Y-%m-%d')]
    
        # 1. 资金分配
        # 平均持仓时间是hold_days,每日都将买入股票,每日预期使用 1/hold_days 的资金
        # 实际操作中,会存在一定的买入误差,所以在前hold_days天,等量使用资金;之后,尽量使用剩余资金(这里设置最多用等量的1.5倍)
        is_staging = context.trading_day_index < context.options['hold_days'] # 是否在建仓期间(前 hold_days 天)
        cash_avg = context.portfolio.portfolio_value / context.options['hold_days']
        cash_for_buy = min(context.portfolio.cash, (1 if is_staging else 1.5) * cash_avg)
        cash_for_sell = cash_avg - (context.portfolio.cash - cash_for_buy)
        positions = {e.symbol: p.amount * p.last_sale_price
                     for e, p in context.portfolio.positions.items()}
    
        # 2. 生成卖出订单:hold_days天之后才开始卖出;对持仓的股票,按机器学习算法预测的排序末位淘汰
        if not is_staging and cash_for_sell > 0:
            equities = {e.symbol: e for e, p in context.portfolio.positions.items()}
            instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(
                    lambda x: x in equities)])))
    
            for instrument in instruments:
                context.order_target(context.symbol(instrument), 0)
                cash_for_sell -= positions[instrument]
                if cash_for_sell <= 0:
                    break
    
        # 3. 生成买入订单:按机器学习算法预测的排序,买入前面的stock_count只股票
        buy_cash_weights = context.stock_weights
        buy_instruments = list(ranker_prediction.instrument[:len(buy_cash_weights)])
        max_cash_per_instrument = context.portfolio.portfolio_value * context.max_cash_per_instrument
        for i, instrument in enumerate(buy_instruments):
            cash = cash_for_buy * buy_cash_weights[i]
            if cash > max_cash_per_instrument - positions.get(instrument, 0):
                # 确保股票持仓量不会超过每次股票最大的占用资金量
                cash = max_cash_per_instrument - positions.get(instrument, 0)
            if cash > 0:
                context.order_value(context.symbol(instrument), cash)
    
    # 回测引擎:准备数据,只执行一次
    def m19_prepare_bigquant_run(context):
        pass
    
    # 回测引擎:初始化函数,只执行一次
    def m19_initialize_bigquant_run(context):
        # 加载预测数据
        context.ranker_prediction = context.options['data'].read_df()
    
        # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
        context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
        # 预测数据,通过options传入进来,使用 read_df 函数,加载到内存 (DataFrame)
        # 设置买入的股票数量,这里买入预测股票列表排名靠前的5只
        stock_count = 5
        # 每只的股票的权重,如下的权重分配会使得靠前的股票分配多一点的资金,[0.339160, 0.213986, 0.169580, ..]
        context.stock_weights = T.norm([1 / math.log(i + 2) for i in range(0, stock_count)])
        # 设置每只股票占用的最大资金比例
        context.max_cash_per_instrument = 0.2
        context.options['hold_days'] = 5
    
    
    m1 = M.instruments.v2(
        start_date='2010-01-01',
        end_date='2015-01-01',
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m2 = M.advanced_auto_labeler.v2(
        instruments=m1.data,
        label_expr="""# #号开始的表示注释
    # 0. 每行一个,顺序执行,从第二个开始,可以使用label字段
    # 1. 可用数据字段见 https://bigquant.com/docs/develop/datasource/deprecated/history_data.html
    #   添加benchmark_前缀,可使用对应的benchmark数据
    # 2. 可用操作符和函数见 `表达式引擎 <https://bigquant.com/docs/develop/bigexpr/usage.html>`_
    
    # 计算收益:5日收盘价(作为卖出价格)除以明日开盘价(作为买入价格)
    shift(close, -5) / shift(open, -1)
    
    # 极值处理:用1%和99%分位的值做clip
    clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))
    
    # 将分数映射到分类,这里使用20个分类
    all_wbins(label, 20)
    
    # 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)
    where(shift(high, -1) == shift(low, -1), NaN, label)
    """,
        start_date='',
        end_date='',
        benchmark='000300.SHA',
        drop_na_label=True,
        cast_label_int=True
    )
    
    m3 = M.input_features.v1(
        features="""(high_0-low_0)/low_0
    amount_0
    mean(return_0,5)"""
    )
    
    m15 = M.general_feature_extractor.v7(
        instruments=m1.data,
        features=m3.data,
        start_date='',
        end_date='',
        before_start_days=0
    )
    
    m16 = M.derived_feature_extractor.v3(
        input_data=m15.data,
        features=m3.data,
        date_col='date',
        instrument_col='instrument',
        drop_na=False,
        remove_extra_columns=False
    )
    
    m7 = M.join.v3(
        data1=m2.data,
        data2=m16.data,
        on='date,instrument',
        how='inner',
        sort=False
    )
    
    m13 = M.dropnan.v1(
        input_data=m7.data
    )
    
    m6 = M.stock_ranker_train.v5(
        training_ds=m13.data,
        features=m3.data,
        learning_algorithm='排序',
        number_of_leaves=30,
        minimum_docs_per_leaf=1000,
        number_of_trees=20,
        learning_rate=0.1,
        max_bins=1023,
        feature_fraction=1,
        m_lazy_run=False
    )
    
    m9 = M.instruments.v2(
        start_date=T.live_run_param('trading_date', '2016-01-01'),
        end_date=T.live_run_param('trading_date', '2017-01-01'),
        market='CN_STOCK_A',
        instrument_list='',
        max_count=0
    )
    
    m17 = M.general_feature_extractor.v7(
        instruments=m9.data,
        features=m3.data,
        start_date='',
        end_date='',
        before_start_days=0
    )
    
    m18 = M.derived_feature_extractor.v3(
        input_data=m17.data,
        features=m3.data,
        date_col='date',
        instrument_col='instrument',
        drop_na=False,
        remove_extra_columns=False
    )
    
    m14 = M.dropnan.v1(
        input_data=m18.data
    )
    
    m8 = M.stock_ranker_predict.v5(
        model=m6.model,
        data=m14.data,
        m_lazy_run=False
    )
    
    m19 = M.trade.v4(
        instruments=m9.data,
        options_data=m8.predictions,
        start_date='',
        end_date='',
        handle_data=m19_handle_data_bigquant_run,
        prepare=m19_prepare_bigquant_run,
        initialize=m19_initialize_bigquant_run,
        volume_limit=0.025,
        order_price_field_buy='open',
        order_price_field_sell='close',
        capital_base=1000000,
        auto_cancel_non_tradable_orders=True,
        data_frequency='daily',
        price_type='后复权',
        product_type='股票',
        plot_charts=True,
        backtest_only=False,
        benchmark='000300.SHA'
    )
    
    • 收益率37.24%
    • 年化收益率38.67%
    • 基准收益率-11.28%
    • 阿尔法0.48
    • 贝塔0.97
    • 夏普比率1.06
    • 胜率0.6
    • 盈亏比0.96
    • 收益波动率33.15%
    • 信息比率0.12
    • 最大回撤17.58%

    快速查询策略内部交易、持仓细节

    In [17]:
    perf = m19.raw_perf.read_df()
    period_data = perf['2016-12-01':'2016-12-10']
    print(period_data.columns)
    days = period_data.shape[0]
    for i in range(days):
        cd = period_data.ix[i]
        dt = cd['period_open'] # 日期
        starting_cash = cd['starting_cash'] # 开始现金
        ending_cash = cd['ending_cash'] # 结束现金
        portfolio_value = cd['portfolio_value'] # 权益值
        gross_leverage = cd['gross_leverage'] # 杠杆
        print("{}".format(dt))
        # 持仓
        positions = cd['positions']
        positions_str = ''
        for p in positions:
            positions_str += '    '+"{}/{}/{}/{},".format(p['sid'].symbol, p['amount'], p['last_sale_price'],p['cost_basis'])
        print(">>>>positions: {}".format(positions_str))
        # 订单
        orders = cd['orders']
        orders_str = ''
        for o in orders:
            if o['status'] != 0:
                continue 
            orders_str += "{}/{}/{}/{},".format(o['sid'].symbol, o['amount'], o['filled'], o['commission'])
        print(">>>>orders: {}".format(orders_str))
        # 成交
        transactions = cd['transactions']
        transactions_str = ''
        for t in transactions:
            transactions_str += "{}/{}/{},".format(t['sid'].symbol, t['amount'], round(t['price'], 2))
        print(">>>>transactions: {}".format(transactions_str))
        print("\n") # 换行
    
    Index(['LOG', 'POS_FAC', 'TRA_FAC', 'algo_volatility',
           'algorithm_period_return', 'alpha', 'benchmark_period_return',
           'benchmark_volatility', 'beta', 'capital_used', 'ending_cash',
           'ending_exposure', 'ending_value', 'excess_return', 'gross_leverage',
           'information', 'long_exposure', 'long_value', 'longs_count',
           'max_drawdown', 'max_leverage', 'need_settle', 'net_leverage', 'orders',
           'period_close', 'period_label', 'period_open', 'pnl', 'pnl_ratio',
           'portfolio_value', 'positions', 'returns', 'sharpe', 'short_exposure',
           'short_value', 'shorts_count', 'sortino', 'starting_cash',
           'starting_exposure', 'starting_value', 'trade_times', 'trading_days',
           'transactions', 'treasury_period_return', 'win_percent'],
          dtype='object')
    2016-12-01 09:30:00+00:00
    >>>>positions:     000935.SZA/487.3987927979458/93.44547271728516/103.1540975135446,    600030.SHA/627.1795833010506/91.9646224975586/91.08779044301096,    300308.SZA/809.8729102122877/76.35252380371094/81.33705815764665,    000899.SZA/2056.683930630888/32.02349090576172/32.15433021385273,    600647.SHA/86.74050014119865/717.1973876953125/682.2121572198761,    600714.SHA/1759.198059797946/42.342323303222656/44.93952471634117,    600898.SHA/1319.6470622634297/47.93195343017578/47.146628663393514,    300461.SZA/1366.5422486685063/73.59624481201172/72.16131393714338,    300492.SZA/710.0697084057509/58.42605972290039/60.17192030548234,    600769.SHA/949.3667964916729/66.34589385986328/65.00669777553436,    000707.SZA/1840.1046274328332/26.639619827270508/26.548491559465894,    000691.SZA/3562.5767089307556/30.82094383239746/29.789749852411816,    600083.SHA/5710.616870010052/23.440000534057617/23.170029626846457,    002599.SZA/2208.733930665488/40.18002700805664/37.7929940045149,    000605.SZA/1021.4523248668438/56.805912017822266/55.67332053048821,    300313.SZA/1461.71666676775/35.53886795043945/35.478045900586565,
    >>>>orders: 600647.SHA/-86.74050014119865/0/0,000605.SZA/-1021.4523248668438/0/0,000707.SZA/-1840.1046274328332/0/0,000899.SZA/-2056.683930630888/0/0,600898.SHA/-1319.6470622634297/0/0,600817.SHA/1061.0948763408892/0/0,600012.SHA/1966.73267009613/0/0,002723.SZA/829.3600854782023/0/0,600575.SHA/433.7970742314217/0/0,603519.SHA/540.1116035811403/0/0,
    >>>>transactions: 300428.SZA/-461.42888910931697/85.78,000779.SZA/-2251.959317473304/44.49,603009.SHA/-1308.6851047335124/47.08,300405.SZA/-920.262140838144/53.02,600385.SHA/-702.2340758467063/54.55,600083.SHA/5710.616870010052/23.17,002599.SZA/2208.733930665488/37.79,000691.SZA/2211.1486330835246/29.81,000605.SZA/1021.4523248668438/55.67,300313.SZA/1461.71666676775/35.48,
    
    
    2016-12-02 09:30:00+00:00
    >>>>positions:     000935.SZA/487.3987927979458/94.8410873413086/103.1540975135446,    600030.SHA/627.1795833010506/89.54043579101562/91.08779044301096,    300308.SZA/809.8729102122877/76.2204818725586/81.33705815764665,    600714.SHA/1759.198059797946/42.57843017578125/44.93952471634117,    300461.SZA/1366.5422486685063/70.43331146240234/72.16131393714338,    300492.SZA/710.0697084057509/55.93770980834961/60.17192030548234,    600769.SHA/949.3667964916729/63.38850402832031/65.00669777553436,    000691.SZA/3562.5767089307556/30.63766860961914/29.789749852411816,    600083.SHA/5710.616870010052/23.149999618530273/23.170029626846457,    002599.SZA/2208.733930665488/38.889183044433594/37.7929940045149,    300313.SZA/1461.71666676775/35.61996078491211/35.478045900586565,    600817.SHA/1061.0948763408892/92.43077850341797/92.65404006280966,    600012.SHA/1966.73267009613/32.8067626953125/32.030028385535076,    002723.SZA/829.3600854782023/55.56059646606445/59.332598746447594,    600575.SHA/433.7970742314217/97.60749816894531/99.54555412544036,    603519.SHA/540.1116035811403/67.35413360595703/71.00586632207154,
    >>>>orders: 000935.SZA/-487.3987927979458/0/0,600714.SHA/-1759.198059797946/0/0,300308.SZA/-809.8729102122877/0/0,300313.SZA/-1461.71666676775/0/0,600575.SHA/-433.7970742314217/0/0,600030.SHA/-627.1795833010506/0/0,600318.SHA/2025.1207882336457/0/0,603377.SHA/1533.3945075519568/0/0,300487.SZA/840.3300530447477/0/0,000715.SZA/810.2480722119647/0/0,603779.SHA/1180.2087415617586/0/0,
    >>>>transactions: 600647.SHA/-86.74050014119865/704.0,000605.SZA/-1021.4523248668438/54.26,000707.SZA/-1840.1046274328332/25.91,000899.SZA/-2056.683930630888/31.6,600898.SHA/-1319.6470622634297/46.33,600817.SHA/1061.0948763408892/92.65,600012.SHA/1966.73267009613/32.03,002723.SZA/829.3600854782023/59.33,600575.SHA/433.7970742314217/99.55,603519.SHA/540.1116035811403/71.01,
    
    
    2016-12-05 09:30:00+00:00
    >>>>positions:     300461.SZA/1366.5422486685063/72.65646362304688/72.16131393714338,    300492.SZA/710.0697084057509/57.02134704589844/60.17192030548234,    600769.SHA/949.3667964916729/63.555904388427734/65.00669777553436,    000691.SZA/3562.5767089307556/30.729305267333984/29.789749852411816,    600083.SHA/5710.616870010052/22.93000030517578/23.170029626846457,    002599.SZA/2208.733930665488/38.11058044433594/37.7929940045149,    600817.SHA/1061.0948763408892/91.62702941894531/92.65404006280966,    600012.SHA/1966.73267009613/32.56147766113281/32.030028385535076,    002723.SZA/829.3600854782023/54.07218551635742/59.332598746447594,    603519.SHA/540.1116035811403/65.83258056640625/71.00586632207154,    600318.SHA/2025.1207882336457/48.5723762512207/47.44977704451625,    603377.SHA/1533.3945075519568/40.19425582885742/39.04412345573754,    300487.SZA/840.3300530447477/58.352561950683594/57.68969416160332,    000715.SZA/810.2480722119647/51.92345428466797/51.344023778766115,    603779.SHA/1180.2087415617586/32.77000045776367/32.22000136909483,
    >>>>orders: 600318.SHA/-2025.1207882336457/0/0,603779.SHA/-1180.2087415617586/0/0,300461.SZA/-1366.5422486685063/0/0,002723.SZA/-829.3600854782023/0/0,000506.SZA/5146.028983426055/0/0,600012.SHA/2219.166508276618/0/0,601677.SHA/3743.138507765968/0/0,002515.SZA/435.8087972814696/0/0,300337.SZA/1011.042457517358/0/0,
    >>>>transactions: 000935.SZA/-487.3987927979458/92.78,600714.SHA/-1759.198059797946/43.55,300308.SZA/-809.8729102122877/78.99,300313.SZA/-1461.71666676775/35.17,600575.SHA/-433.7970742314217/98.84,600030.SHA/-627.1795833010506/86.91,600318.SHA/2025.1207882336457/47.45,603377.SHA/1533.3945075519568/39.04,300487.SZA/840.3300530447477/57.69,000715.SZA/810.2480722119647/51.34,603779.SHA/1180.2087415617586/32.22,
    
    
    2016-12-06 09:30:00+00:00
    >>>>positions:     300492.SZA/710.0697084057509/57.79393768310547/60.17192030548234,    600769.SHA/949.3667964916729/63.38850402832031/65.00669777553436,    000691.SZA/3562.5767089307556/30.882036209106445/29.789749852411816,    600083.SHA/5710.616870010052/23.049999237060547/23.170029626846457,    002599.SZA/2208.733930665488/39.74974822998047/37.7929940045149,    600817.SHA/1061.0948763408892/91.9395980834961/92.65404006280966,    600012.SHA/4185.899178372748/32.929405212402344/32.766910494021715,    603519.SHA/540.1116035811403/66.25861358642578/71.00586632207154,    603377.SHA/1533.3945075519568/40.36576843261719/39.04412345573754,    300487.SZA/840.3300530447477/58.864776611328125/57.68969416160332,    000715.SZA/810.2480722119647/52.11659622192383/51.344023778766115,    000506.SZA/5146.028983426055/22.427976608276367/22.25567373696895,    601677.SHA/3743.138507765968/15.801055908203125/15.3403219760972,    002515.SZA/435.8087972814696/116.31026458740234/112.97544762337478,    300337.SZA/1011.042457517358/46.03940963745117/44.53137491361767,
    >>>>orders: 600012.SHA/-4185.899178372748/0/0,300492.SZA/-710.0697084057509/0/0,300487.SZA/-840.3300530447477/0/0,000715.SZA/-810.2480722119647/0/0,300337.SZA/-1011.042457517358/0/0,600753.SHA/1153.8108756392455/0/0,002638.SZA/1192.5334973303736/0/0,300391.SZA/784.9152046853968/0/0,300320.SZA/493.1197121713362/0/0,002777.SZA/352.908032951058/0/0,
    >>>>transactions: 600318.SHA/-2025.1207882336457/48.56,603779.SHA/-1180.2087415617586/32.98,300461.SZA/-1366.5422486685063/71.45,002723.SZA/-829.3600854782023/54.32,000506.SZA/5146.028983426055/22.26,600012.SHA/2219.166508276618/33.42,601677.SHA/3743.138507765968/15.34,002515.SZA/435.8087972814696/112.98,300337.SZA/1011.042457517358/44.53,
    
    
    2016-12-07 09:30:00+00:00
    >>>>positions:     600769.SHA/949.3667964916729/65.564697265625/65.00669777553436,    000691.SZA/3562.5767089307556/31.767871856689453/29.789749852411816,    600083.SHA/5710.616870010052/23.329999923706055/23.170029626846457,    002599.SZA/2208.733930665488/39.75999069213867/37.7929940045149,    600817.SHA/1061.0948763408892/91.9395980834961/92.65404006280966,    603519.SHA/540.1116035811403/66.05574035644531/71.00586632207154,    603377.SHA/1533.3945075519568/40.406124114990234/39.04412345573754,    000506.SZA/5146.028983426055/23.404354095458984/22.25567373696895,    601677.SHA/3743.138507765968/15.93718147277832/15.3403219760972,    002515.SZA/435.8087972814696/116.71861267089844/112.97544762337478,    600753.SHA/1153.8108756392455/83.1596908569336/81.54232071603386,    002638.SZA/1192.5334973303736/50.777679443359375/49.71770768438461,    300391.SZA/784.9152046853968/60.25210189819336/60.1518057624122,    300320.SZA/493.1197121713362/82.35392761230469/81.76177889856876,    002777.SZA/352.908032951058/103.68008422851562/103.45912478561968,
    >>>>orders: 600769.SHA/-949.3667964916729/0/0,600753.SHA/-1153.8108756392455/0/0,000506.SZA/-5146.028983426055/0/0,002515.SZA/-435.8087972814696/0/0,300545.SZA/1196.7670772981166/0/0,000607.SZA/1141.3199748767936/0/0,600599.SHA/750.2024442419179/0/0,300500.SZA/440.1173971538762/0/0,000906.SZA/1125.1459294190347/0/0,
    >>>>transactions: 600012.SHA/-4185.899178372748/32.99,300492.SZA/-710.0697084057509/57.25,300487.SZA/-840.3300530447477/60.02,000715.SZA/-810.2480722119647/53.85,300337.SZA/-1011.042457517358/46.7,600753.SHA/1153.8108756392455/81.54,002638.SZA/1192.5334973303736/49.72,300391.SZA/784.9152046853968/60.15,300320.SZA/493.1197121713362/81.76,002777.SZA/352.908032951058/103.46,
    
    
    2016-12-08 09:30:00+00:00
    >>>>positions:     000691.SZA/3562.5767089307556/31.767871856689453/29.789749852411816,    600083.SHA/5710.616870010052/23.18000030517578/23.170029626846457,    002599.SZA/2208.733930665488/39.831703186035156/37.7929940045149,    600817.SHA/1061.0948763408892/91.9395980834961/92.65404006280966,    603519.SHA/540.1116035811403/65.28482055664062/71.00586632207154,    603377.SHA/1533.3945075519568/40.35567855834961/39.04412345573754,    601677.SHA/3743.138507765968/15.706814765930176/15.3403219760972,    002638.SZA/1192.5334973303736/50.57577896118164/49.71770768438461,    300391.SZA/784.9152046853968/58.873046875/60.1518057624122,    300320.SZA/493.1197121713362/90.59843444824219/81.76177889856876,    002777.SZA/352.908032951058/104.16217803955078/103.45912478561968,    300545.SZA/1196.7670772981166/87.69000244140625/89.99000444732434,    000607.SZA/1141.3199748767936/58.075721740722656/59.83106133000731,    600599.SHA/750.2024442419179/73.47187042236328/71.08058067998047,    300500.SZA/440.1173971538762/102.43254089355469/106.14459326595735,    000906.SZA/1125.1459294190347/36.321533203125/37.18937207956171,
    >>>>orders: 300320.SZA/-493.1197121713362/0/0,002638.SZA/-1192.5334973303736/0/0,002599.SZA/-2208.733930665488/0/0,603519.SHA/-540.1116035811403/0/0,002777.SZA/-352.908032951058/0/0,603377.SHA/-1533.3945075519568/0/0,300227.SZA/2231.8435755497517/0/0,300534.SZA/971.8379745826351/0/0,000695.SZA/1324.6495543928884/0/0,300491.SZA/572.2394109812093/0/0,002194.SZA/980.8889143829867/0/0,
    >>>>transactions: 600769.SHA/-949.3667964916729/64.84,600753.SHA/-1153.8108756392455/83.36,000506.SZA/-5146.028983426055/23.89,002515.SZA/-435.8087972814696/115.15,300545.SZA/1196.7670772981166/89.99,000607.SZA/1141.3199748767936/59.83,600599.SHA/750.2024442419179/71.08,300500.SZA/440.1173971538762/106.14,000906.SZA/1125.1459294190347/37.19,
    
    
    2016-12-09 09:30:00+00:00
    >>>>positions:     000691.SZA/3562.5767089307556/32.07332992553711/29.789749852411816,    600083.SHA/5710.616870010052/24.239999771118164/23.170029626846457,    600817.SHA/1061.0948763408892/91.9395980834961/92.65404006280966,    601677.SHA/3743.138507765968/15.717286109924316/15.3403219760972,    300391.SZA/784.9152046853968/60.427616119384766/60.1518057624122,    300545.SZA/1196.7670772981166/85.4000015258789/89.99000444732434,    000607.SZA/1141.3199748767936/57.70224380493164/59.83106133000731,    600599.SHA/750.2024442419179/73.62543487548828/71.08058067998047,    300500.SZA/440.1173971538762/100.61664581298828/106.14459326595735,    000906.SZA/1125.1459294190347/36.04076385498047/37.18937207956171,    300227.SZA/2231.8435755497517/51.25367736816406/50.32031620980946,    300534.SZA/971.8379745826351/69.69000244140625/73.4000012639221,    000695.SZA/1324.6495543928884/42.14496994018555/42.170467609119,    300491.SZA/572.2394109812093/90.010986328125/85.27462672185459,    002194.SZA/980.8889143829867/44.32851028442383/44.11670205051914,
    >>>>orders: 600083.SHA/-5710.616870010052/0/0,000691.SZA/-3562.5767089307556/0/0,300500.SZA/-440.1173971538762/0/0,300398.SZA/1305.569040357025/0/0,603398.SHA/844.4420450644807/0/0,603007.SHA/1054.612104610416/0/0,300488.SZA/568.7507631616687/0/0,600599.SHA/591.2552886959611/0/0,
    >>>>transactions: 300320.SZA/-493.1197121713362/91.01,002638.SZA/-1192.5334973303736/49.36,002599.SZA/-2208.733930665488/42.17,603519.SHA/-540.1116035811403/66.79,002777.SZA/-352.908032951058/107.3,603377.SHA/-1533.3945075519568/40.21,300227.SZA/2231.8435755497517/50.32,300534.SZA/971.8379745826351/73.4,000695.SZA/1324.6495543928884/42.17,300491.SZA/572.2394109812093/85.27,002194.SZA/980.8889143829867/44.12,