克隆策略

    {"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 [1]:
    # 本代码由可视化策略环境自动生成 2021年7月24日 15:22
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    # 回测引擎:每日数据处理函数,每天执行一次
    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'
    )
    
    设置测试数据集,查看训练迭代过程的NDCG
    bigcharts-data-start/{"__type":"tabs","__id":"bigchart-d9928f9d72044147abb38bfdd67cc7d5"}/bigcharts-data-end
    • 收益率36.67%
    • 年化收益率38.07%
    • 基准收益率-11.28%
    • 阿尔法0.61
    • 贝塔0.98
    • 夏普比率1.04
    • 胜率0.59
    • 盈亏比1.0
    • 收益波动率33.53%
    • 信息比率0.12
    • 最大回撤17.76%
    bigcharts-data-start/{"__type":"tabs","__id":"bigchart-c55c7d178a184c9eb57539db9fd44c53"}/bigcharts-data-end

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

    In [4]:
    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.iloc[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(['ending_value', 'ending_exposure', 'capital_used', 'starting_value',
           'starting_exposure', 'starting_cash', 'ending_cash', 'portfolio_value',
           'pnl', 'returns', 'period_open', 'period_close', 'gross_leverage',
           'net_leverage', 'short_exposure', 'long_exposure', 'short_value',
           'long_value', 'longs_count', 'shorts_count', 'need_settle', 'positions',
           'transactions', 'orders', 'LOG', 'TRA_FAC', 'POS_FAC', 'trading_days',
           'benchmark_volatility', 'algo_volatility', 'treasury_period_return',
           'algorithm_period_return', 'benchmark_period_return', 'beta', 'alpha',
           'sharpe', 'sortino', 'information', 'excess_return', 'max_drawdown',
           'max_leverage', 'period_label', 'trade_times', 'win_percent',
           'pnl_ratio'],
          dtype='object')
    2016-12-01 09:30:00+00:00
    >>>>positions:     000935.SZA/514.9345044691497/93.44547271728516/103.15409851387018,    600030.SHA/588.4552025902011/91.9646224975586/91.08779144299422,    300308.SZA/845.9440535262136/76.35252380371094/81.33705917009036,    000899.SZA/1607.371617266315/32.02349090576172/32.15433121129281,    600647.SHA/67.79078492225062/717.1973876953125/682.2121582133565,    600714.SHA/1783.9678042670234/42.342323303222656/44.93952571951997,    300461.SZA/1628.106386910604/73.59624481201172/72.16131772587138,    300405.SZA/1096.405669557941/53.01580047607422/53.87866068708623,    300492.SZA/845.9811824578214/58.42605972290039/60.17192152741855,    600769.SHA/995.3777290016708/66.34589385986328/65.00669879212738,    000707.SZA/1929.2850476213434/26.639619827270508/26.548492572156213,    000691.SZA/3261.981837969259/30.82094383239746/29.786388505176266,    600385.SHA/736.267754704451/54.547882080078125/53.67666665837852,    600083.SHA/4765.131291464276/23.440000534057617/23.170021348022473,    002599.SZA/1843.0420753326562/40.18002700805664/37.792993982091595,    000605.SZA/852.3342655893081/56.805912017822266/55.67332129959254,    300313.SZA/1219.7056791970717/35.53886795043945/35.47804675378326,
    >>>>orders: 600647.SHA/-67.79078492225062/0/0,000605.SZA/-852.3342655893081/0/0,000707.SZA/-1929.2850476213434/0/0,000899.SZA/-1607.371617266315/0/0,000935.SZA/-514.9345044691497/0/0,300405.SZA/-1096.405669557941/0/0,600817.SHA/1117.844654240397/0/0,600012.SHA/2071.9180259999735/0/0,002723.SZA/873.7161573988477/0/0,600575.SHA/456.9975327059574/0/0,603519.SHA/568.9980059449659/0/0,
    >>>>transactions: 600689.SHA/-2532.8345181349046/49.68,603009.SHA/-1559.1750489583735/47.08,000779.SZA/-2361.1002191294683/44.49,600083.SHA/4765.131291464276/23.17,002599.SZA/1843.0420753326562/37.79,000691.SZA/1845.0569844595823/29.81,000605.SZA/852.3342655893081/55.67,300313.SZA/1219.7056791970717/35.48,
    
    
    2016-12-02 09:30:00+00:00
    >>>>positions:     600030.SHA/588.4552025902011/89.54043579101562/91.08779144299422,    300308.SZA/845.9440535262136/76.2204818725586/81.33705917009036,    600714.SHA/1783.9678042670234/42.57843017578125/44.93952571951997,    300461.SZA/1628.106386910604/70.43331146240234/72.16131772587138,    300492.SZA/845.9811824578214/55.93770980834961/60.17192152741855,    600769.SHA/995.3777290016708/63.38850402832031/65.00669879212738,    000691.SZA/3261.981837969259/30.63766860961914/29.786388505176266,    600385.SHA/736.267754704451/53.216854095458984/53.67666665837852,    600083.SHA/4765.131291464276/23.149999618530273/23.170021348022473,    002599.SZA/1843.0420753326562/38.889183044433594/37.792993982091595,    300313.SZA/1219.7056791970717/35.61996078491211/35.47804675378326,    600817.SHA/1117.844654240397/92.43077850341797/92.65404145677626,    600012.SHA/2071.9180259999735/32.8067626953125/32.030029395272166,    002723.SZA/873.7161573988477/55.56059646606445/59.33259975814999,    600575.SHA/456.9975327059574/97.60749816894531/99.54555512661486,    603519.SHA/568.9980059449659/67.35413360595703/71.0058673569604,
    >>>>orders: 600714.SHA/-1783.9678042670234/0/0,300308.SZA/-845.9440535262136/0/0,300313.SZA/-1219.7056791970717/0/0,600575.SHA/-456.9975327059574/0/0,600030.SHA/-588.4552025902011/0/0,600318.SHA/2081.783623890179/0/0,603377.SHA/1576.2988525583758/0/0,300487.SZA/863.8424696717341/0/0,000715.SZA/832.9187956688178/0/0,603779.SHA/1213.2309565091678/0/0,
    >>>>transactions: 600647.SHA/-67.79078492225062/704.0,000605.SZA/-852.3342655893081/54.26,000707.SZA/-1929.2850476213434/25.91,000899.SZA/-1607.371617266315/31.6,000935.SZA/-514.9345044691497/94.84,300405.SZA/-1096.405669557941/50.07,600817.SHA/1117.844654240397/92.65,600012.SHA/2071.9180259999735/32.03,002723.SZA/873.7161573988477/59.33,600575.SHA/456.9975327059574/99.55,603519.SHA/568.9980059449659/71.01,
    
    
    2016-12-05 09:30:00+00:00
    >>>>positions:     300461.SZA/1628.106386910604/72.65646362304688/72.16131772587138,    300492.SZA/845.9811824578214/57.02134704589844/60.17192152741855,    600769.SHA/995.3777290016708/63.555904388427734/65.00669879212738,    000691.SZA/3261.981837969259/30.729305267333984/29.786388505176266,    600385.SHA/736.267754704451/53.38625717163086/53.67666665837852,    600083.SHA/4765.131291464276/22.93000030517578/23.170021348022473,    002599.SZA/1843.0420753326562/38.11058044433594/37.792993982091595,    600817.SHA/1117.844654240397/91.62702941894531/92.65404145677626,    600012.SHA/2071.9180259999735/32.56147766113281/32.030029395272166,    002723.SZA/873.7161573988477/54.07218551635742/59.33259975814999,    603519.SHA/568.9980059449659/65.83258056640625/71.0058673569604,    600318.SHA/2081.783623890179/48.5723762512207/47.449778394245904,    603377.SHA/1576.2988525583758/40.19425582885742/39.044124663822885,    300487.SZA/863.8424696717341/58.352561950683594/57.68969525867193,    000715.SZA/832.9187956688178/51.92345428466797/51.344024785607196,    603779.SHA/1213.2309565091678/32.77000045776367/32.22000243425787,
    >>>>orders: 600318.SHA/-2081.783623890179/0/0,603779.SHA/-1213.2309565091678/0/0,300461.SZA/-1628.106386910604/0/0,600385.SHA/-736.267754704451/0/0,000506.SZA/4373.2108509593045/0/0,600012.SHA/1885.89747266048/0/0,601677.SHA/3181.003059160281/0/0,002515.SZA/370.36009073271345/0/0,300337.SZA/859.2065571795096/0/0,
    >>>>transactions: 600714.SHA/-1783.9678042670234/43.55,300308.SZA/-845.9440535262136/78.99,300313.SZA/-1219.7056791970717/35.17,600575.SHA/-456.9975327059574/98.84,600030.SHA/-588.4552025902011/86.91,600318.SHA/2081.783623890179/47.45,603377.SHA/1576.2988525583758/39.04,300487.SZA/863.8424696717341/57.69,000715.SZA/832.9187956688178/51.34,603779.SHA/1213.2309565091678/32.22,
    
    
    2016-12-06 09:30:00+00:00
    >>>>positions:     300492.SZA/845.9811824578214/57.79393768310547/60.17192152741855,    600769.SHA/995.3777290016708/63.38850402832031/65.00669879212738,    000691.SZA/3261.981837969259/30.882036209106445/29.786388505176266,    600083.SHA/4765.131291464276/23.049999237060547/23.170021348022473,    002599.SZA/1843.0420753326562/39.74974822998047/37.792993982091595,    600817.SHA/1117.844654240397/91.9395980834961/92.65404145677626,    600012.SHA/3957.815498660453/32.929405212402344/32.69233642715282,    002723.SZA/873.7161573988477/54.316856384277344/59.33259975814999,    603519.SHA/568.9980059449659/66.25861358642578/71.0058673569604,    603377.SHA/1576.2988525583758/40.36576843261719/39.044124663822885,    300487.SZA/863.8424696717341/58.864776611328125/57.68969525867193,    000715.SZA/832.9187956688178/52.11659622192383/51.344024785607196,    000506.SZA/4373.2108509593045/22.427976608276367/22.25567463285263,    601677.SHA/3181.003059160281/15.801055908203125/15.340322842310535,    002515.SZA/370.36009073271345/116.31026458740234/112.97544861921432,    300337.SZA/859.2065571795096/46.03940963745117/44.53137590567034,
    >>>>orders: 600012.SHA/-3957.815498660453/0/0,300492.SZA/-845.9811824578214/0/0,300487.SZA/-863.8424696717341/0/0,000715.SZA/-832.9187956688178/0/0,300337.SZA/-859.2065571795096/0/0,600753.SHA/1225.302687400822/0/0,002638.SZA/1266.4246194462776/0/0,300391.SZA/833.5497003787037/0/0,300320.SZA/523.6741317758006/0/0,002777.SZA/374.7747315526872/0/0,
    >>>>transactions: 600318.SHA/-2081.783623890179/48.56,603779.SHA/-1213.2309565091678/32.98,300461.SZA/-1628.106386910604/71.45,600385.SHA/-736.267754704451/53.34,000506.SZA/4373.2108509593045/22.26,600012.SHA/1885.89747266048/33.42,601677.SHA/3181.003059160281/15.34,002515.SZA/370.36009073271345/112.98,300337.SZA/859.2065571795096/44.53,
    
    
    2016-12-07 09:30:00+00:00
    >>>>positions:     600769.SHA/995.3777290016708/65.564697265625/65.00669879212738,    000691.SZA/3261.981837969259/31.767871856689453/29.786388505176266,    600083.SHA/4765.131291464276/23.329999923706055/23.170021348022473,    002599.SZA/1843.0420753326562/39.75999069213867/37.792993982091595,    600817.SHA/1117.844654240397/91.9395980834961/92.65404145677626,    002723.SZA/873.7161573988477/55.479042053222656/59.33259975814999,    603519.SHA/568.9980059449659/66.05574035644531/71.0058673569604,    603377.SHA/1576.2988525583758/40.406124114990234/39.044124663822885,    000506.SZA/4373.2108509593045/23.404354095458984/22.25567463285263,    601677.SHA/3181.003059160281/15.93718147277832/15.340322842310535,    002515.SZA/370.36009073271345/116.71861267089844/112.97544861921432,    600753.SHA/1225.302687400822/83.1596908569336/81.54232190315037,    002638.SZA/1266.4246194462776/50.777679443359375/49.71770869674408,    300391.SZA/833.5497003787037/60.25210189819336/60.151806875446795,    300320.SZA/523.6741317758006/82.35392761230469/81.76177991305859,    002777.SZA/374.7747315526872/103.68008422851562/103.45912630708325,
    >>>>orders: 600769.SHA/-995.3777290016708/0/0,600753.SHA/-1225.302687400822/0/0,000506.SZA/-4373.2108509593045/0/0,002515.SZA/-370.36009073271345/0/0,300545.SZA/1180.851485172861/0/0,000607.SZA/1126.14176388727/0/0,600599.SHA/740.2256356043671/0/0,300500.SZA/434.26435430769044/0/0,000906.SZA/1110.1828141782198/0/0,
    >>>>transactions: 600012.SHA/-3957.815498660453/32.99,300492.SZA/-845.9811824578214/57.25,300487.SZA/-863.8424696717341/60.02,000715.SZA/-832.9187956688178/53.85,300337.SZA/-859.2065571795096/46.7,600753.SHA/1225.302687400822/81.54,002638.SZA/1266.4246194462776/49.72,300391.SZA/833.5497003787037/60.15,300320.SZA/523.6741317758006/81.76,002777.SZA/374.7747315526872/103.46,
    
    
    2016-12-08 09:30:00+00:00
    >>>>positions:     000691.SZA/3261.981837969259/31.767871856689453/29.786388505176266,    600083.SHA/4765.131291464276/23.18000030517578/23.170021348022473,    002599.SZA/1843.0420753326562/39.831703186035156/37.792993982091595,    600817.SHA/1117.844654240397/91.9395980834961/92.65404145677626,    002723.SZA/873.7161573988477/55.88682556152344/59.33259975814999,    603519.SHA/568.9980059449659/65.28482055664062/71.0058673569604,    603377.SHA/1576.2988525583758/40.35567855834961/39.044124663822885,    601677.SHA/3181.003059160281/15.706814765930176/15.340322842310535,    002638.SZA/1266.4246194462776/50.57577896118164/49.71770869674408,    300391.SZA/833.5497003787037/58.873046875/60.151806875446795,    300320.SZA/523.6741317758006/90.59843444824219/81.76177991305859,    002777.SZA/374.7747315526872/104.16217803955078/103.45912630708325,    300545.SZA/1180.851485172861/87.69000244140625/89.99000524696095,    000607.SZA/1126.14176388727/58.075721740722656/59.83106232966085,    600599.SHA/740.2256356043671/73.47187042236328/71.0805816795857,    300500.SZA/434.26435430769044/102.43254089355469/106.14459421362305,    000906.SZA/1110.1828141782198/36.321533203125/37.1893730778918,
    >>>>orders: 300320.SZA/-523.6741317758006/0/0,002638.SZA/-1266.4246194462776/0/0,002723.SZA/-873.7161573988477/0/0,002599.SZA/-1843.0420753326562/0/0,603519.SHA/-568.9980059449659/0/0,002777.SZA/-374.7747315526872/0/0,300227.SZA/2117.0272777019222/0/0,300534.SZA/921.8421596554954/0/0,000695.SZA/1256.5034892083222/0/0,002194.SZA/1035.8288631935495/0/0,300491.SZA/487.56776540794425/0/0,
    >>>>transactions: 600769.SHA/-995.3777290016708/64.84,600753.SHA/-1225.302687400822/83.36,000506.SZA/-4373.2108509593045/23.89,002515.SZA/-370.36009073271345/115.15,300545.SZA/1180.851485172861/89.99,000607.SZA/1126.14176388727/59.83,600599.SHA/740.2256356043671/71.08,300500.SZA/434.26435430769044/106.14,000906.SZA/1110.1828141782198/37.19,
    
    
    2016-12-09 09:30:00+00:00
    >>>>positions:     000691.SZA/3261.981837969259/32.07332992553711/29.786388505176266,    600083.SHA/4765.131291464276/24.239999771118164/23.170021348022473,    600817.SHA/1117.844654240397/91.9395980834961/92.65404145677626,    603377.SHA/1576.2988525583758/40.21443557739258/39.044124663822885,    601677.SHA/3181.003059160281/15.717286109924316/15.340322842310535,    300391.SZA/833.5497003787037/60.427616119384766/60.151806875446795,    300545.SZA/1180.851485172861/85.4000015258789/89.99000524696095,    000607.SZA/1126.14176388727/57.70224380493164/59.83106232966085,    600599.SHA/740.2256356043671/73.62543487548828/71.0805816795857,    300500.SZA/434.26435430769044/100.61664581298828/106.14459421362305,    000906.SZA/1110.1828141782198/36.04076385498047/37.1893730778918,    300227.SZA/2117.0272777019222/51.25367736816406/50.32031712008106,    300534.SZA/921.8421596554954/69.69000244140625/73.4000021899387,    000695.SZA/1256.5034892083222/42.14496994018555/42.17046848557898,    002194.SZA/1035.8288631935495/44.32851028442383/44.11670305248509,    300491.SZA/487.56776540794425/90.010986328125/85.27462771190493,
    >>>>orders: 600083.SHA/-4765.131291464276/0/0,000691.SZA/-3261.981837969259/0/0,300500.SZA/-434.26435430769044/0/0,000906.SZA/-1110.1828141782198/0/0,300398.SZA/1239.8930074254247/0/0,603398.SHA/801.9627874793617/0/0,603007.SHA/1001.5603416078886/0/0,300488.SZA/540.140025087592/0/0,600599.SHA/561.5124711114081/0/0,
    >>>>transactions: 300320.SZA/-523.6741317758006/91.01,002638.SZA/-1266.4246194462776/49.36,002723.SZA/-873.7161573988477/56.76,002599.SZA/-1843.0420753326562/42.17,603519.SHA/-568.9980059449659/66.79,002777.SZA/-374.7747315526872/107.3,300227.SZA/2117.0272777019222/50.32,300534.SZA/921.8421596554954/73.4,000695.SZA/1256.5034892083222/42.17,002194.SZA/1035.8288631935495/44.12,300491.SZA/487.56776540794425/85.27,