Package: vnpy-extra
vnpy_extra[TOC]一、 简介1. 功能简介本工具包是基于 vnpy 的回测库的一些增强函数2. 版本历史（按周汇总）2021-12-24 v0.8.20211220.0refactor: ignore_existed_backtest=True for bulk_backtest_separated_by_symbol.2021-12-17 v0.8.20211215.0feat: add backtest_from_tb_xml.feat: ignore_existed_backtest if file param_file_name existed.feat: add sub_folder_name on StrategyPositionMonitor.output_report_between.fix: json.dump(settings, fp, indent=4).fix: add FileNotFoundError handler for cta/portfolio engine.fix: INSERT IGNORE INTO for AccountStrategyMapping.clone_mapping.fix: except (OptimizationError, cvxpy.error.SolverError) as exp.refactor: show plot_by_account before generate_strategy_setting_file.refactor: upgrade IBATS-Utils>=1.20211214.0refactor: param_file_name will be output no depend on available stats.refactor: add log on StrategyBacktestStats.set_base_position.refactor: output_setting_json=True.2021-12-10 v0.8.20211210.0feat: set_target_pos only if win_bar_count changed.feat: add patch_missing_settings_by_dir.feat: f"[{''.join([make_param_2_str() for _ in param])}]" if isinstance(param, list) of make_param_2_str.fix: _id_name error if len(param_value_dic) >= 2.fix: KeyError on group_name = key_group_dic[key].refactor: value = json.loads(value) if isinstance(value, str) for signal param on MultiSignalsTemplate.2021-12-03 v0.8.20211203.2feat: add bulk_backtest_multi_process_by_symbols for both cta and portfolio.feat: add ret_mid=False param for am.boll.feat: add grace_bar_count param for BOLLSignal.feat: add pre_call_before_backtest on refresh_vt_symbol_2_curr_contract_by_account, backtest_all_strategies.refactor: add am.logger.refactor: 为防止出现类公共属性数据混淆，在init里面重新进行初始化相关变量2021-11-26 v0.8.20211126.0feat: 允许子类在 super.init之前 覆盖父类的对应属性 on PublicSignal.feat: add rr, volatility, stochf, stoch, keltner for am.feat: add pre_call_before_backtest for dynamic loading modules.fix: sum result on psy if array==True.fix: er(self, period, has_plus_or_minus=False, array: bool = False).fix: MultiSignalsTemplate.get_id_name.2021-11-20 v0.8.20211119.0feat: add NATRSignal.feat: filter by pct_change_s.quantile([0.02, 0.98]) for net_pnl_gross_s.feat: add Signal2PositionMethodEnum.viscosity for MultiSignalsTemplate.feat: replace atr, remove atr_no_hl, natr_no_hl for ArrayManager.feat: output _all stats only.fix: BASE_POSITION, STOP_OPENING_POS_PARAM missing on account mapping table.refactor: self.logger = logging.getLogger(f"{strategy_obj.strategy_name}.{self.class.name}").refactor: performance tuning for multiprocess of backtest and tracking backtest.fix: no data check on report.2021-11-12 v0.8.20211112.3feat: add ** kwargs for bulk_backtest_with_backtest_params_iter, backtest_all_strategies, run_backtest_all_strategies_after_refresh.feat: add min_high_after_entry_by_signal, max_low_after_entry_by_signal, highest_after_entry_by_signal, lowest_after_entry_by_signal, min_high_after_entry_by_signal_last, max_low_after_entry_by_signal_last, highest_after_entry_by_signal_last, lowest_after_entry_by_signal_last, bars_since_entry_by_signal, bars_since_exit_by_signal, entry_price_by_signal, exit_price_by_signal on CtaSignal.feat: vt_symbol_weight_multiplier_dic, strategy_weight_multiplier_dic on fit_and_merge_key_stats_dic.feat: add ArrayManager.natr_no_hl ArrayManager.atr_no_hl.feat: trade_end_time on BarGenerator, PublicSignal.feat: add window_bar_last for bg.fix: error message too much when trade direction conflicting.fix: MultiSignalsTemplate.get_name_by_pattern.fix: backtest_status convert to int.fix: except (MissMatchParametersError, ValueError) for stats_obj.apply_2_symbol.fix: log of cta -> portfolio wrong on generate_strategy_setting_file.fix: volatility = np.sum(np.abs(close_rolling[:, 1:] - close_rolling[:, :-1]), axis=1) on calc_er.fix: np.zeros_like(**, dtype=float).fix: fix_db_bar_datetime on Template.fix: add duplicate data checking on bg.fix: duplicate data load when fix_db_bar_datetime.fix: current_bar_daily if self.bg.window_bar is None.fix: stats_main is None check.refactor: pnl_std2 = net_pnl_gross_s[net_pnl_gross_s != 0].std() * 3.refactor: np.seterr(divide='ignore') and pass calculate if no trade.refactor: remove duplicate msg.refactor: add warning log when ignore stg on backtest_all_strategies.refactor: pool_size = cpu_count() if pool_size <= -1 on generate_adj_md.refactor: add OpenDailyTest demo.2021-10-29 v0.8.20211028.1feat: change to new version engine.
feat: add bias, kd index on am.
feat: add is_same_trade_date.
feat: add vt_symbol_multipliers, vt_symbol_rates, vt_symbol_price_ticks for StrategyTemplate.
feat: add is_cross_threshold.
feat: add set_other_stg_pos on AccountStrategyMapping.bulk_update_position.
fix: StrategyBacktestStats.charts_data.
fix: self.window > 1 的情况下不允许单根bar形成 window_bar.
fix: instrument_id_secondary is None check on FutureAdjFactor.is_main.
fix: _target_price = (tick.bid_price_1 if activate else tick.ask_price_1) is zero check.
fix: ArrayManager.kd.
fix: key_weight_dic is None check.2021-10-22 v0.7.20211022.0feat: add max_strategy_weight on PortfolioOptimization.
feat: add StopOpeningPos.stop_opening_long_and_log, StopOpeningPos.stop_opening_short_and_log etc.
feat: 禁止跌停做多、禁止涨停做空.
feat: write_log(self, msg: str, logger_method='info', *, enable=True, callback=None).
fix: backtest_all_strategies pool_size = multiprocessing.cpu_count() if pool_size < 0.
fix: vt_symbol_market_value_dic[vt_symbol] += on PortfolioOptimization.get_vt_symbol_market_value_dic.2021-10-15 v0.7.20211015.1feat: add clear_mapping_first on clone_mapping.
feat: add import_save_failed_by_dir.
feat: add win_bar_log on PublicSignal.
feat: add 边际贡献(%), drawback plot.
feat: add matplotlib_use='Qt5Agg' on plot_with_weights.
feat: add min max data comments on plot_with_weights.
fix: self.interval: str, bg(..., interval=Interval(self.interval)).
fix: output trades if.volume != 0.
fix: InstrumentClassificationEnum.All = set([get_instrument_type() for _ in VT_SYMBOL_LIST_ALL]).
fix: rr_df shape 0 check on fit_and_merge_key_stats_dic.
fix: highest_after_entry, lowest_after_entry 0 check on CtaTemplate.
fix: df is not None on is_available.
fix: super().on_window(bar) on CtaSignal.
fix: self.bgs_daily None check.
fix: stg_obj is not None and hasattr(stg_obj, 'get_name_by_pattern').
fix: ret_key_weight_dic = {k: v for k, v in key_weight_dic.items() if not np.isnan(v)} on PortfolioOptimizationGroupFitting._fit_by_group_keys.
fix: check_backtest_status on plot_by_account.
fix: win_ratio = profit_days / total_days.
fix: vt_symbol_market_value_dic[vt_symbol] += mv on plot_with_base_position.
fix: available_weight_dic on plot_with_weights.
refactor: windows->period.2021-09-30 v0.7.20210928.1feat: add check_backtest_status on AccountStrategyMapping.get_stats_by_account, PortfolioOptimization.build_by_account, portfolio_optimization_by_account.
feat: add max_low_after_entry_last, min_high_after_entry_last on CtaSignal.
feat: ignore_backtest_status_0=True.
feat: add ignore_set, only_set, name param on FittingInstrumentGroup.create_by_instrument_classification_enum.
feat: add calc_vidya and am.vidya() func.
feat: add PortfolioSignal.
feat: divide trade into three daily df by direction.
feat: add a new calculate_statistics function.
feat: add calc_vidya, calc_er, calc_c_factor, calc_ama.
feat: add er, c_factor, ama for ArrayManager.
feat: add daily_array_size, bar_count_since_entry_dic, bar_count_since_exit_dic, win_bar_count_since_entry_dic, win_bar_count_since_exit_dic, bgs_daily, ams_daily on StrategyTemplate.
feat: add daily_spread_array_size, daily_am_spread, on_daily_spread_bar, get_latest_available_bar on TargetPosAndPriceSpreadTemplate.
fix: "signal_type" in self._signal_name_kwargs_dic[signal_name].
refactor: add schema_table_names_dic param on backup_db_2_zip_multiprocess.
refactor: abstract PublicSignal class.2021-09-24 v0.7.20210924.1feat: add sub_class_name_tail property for f"{''.join([_.get_short_name().capitalize() for _ in signal_cls_list])}{tail_name}".
feat: add entry_prices and entry_price for SpreadTemplate.
feat: add register_vt_symbol_9999_8888.
feat: reorg params_kwargs by make_param_2_str, get_name_by_param.
feat: fix_db_bar_datetime = True on MultiSignalsTemplate by default.
feat: strategy_class_name available check on get_backtest_status_info_by_images_in_output_stg_dir.
fix: attach_file_paths = {k: v for k, v in attach_file_paths.items() if v is not None}.
fix: from vnpy_extra.utils.symbol import get_instrument_type.
fix: last_bar.high, low, open -> close.
fix: self.price_scale = getattr(strategy_obj, "vt_symbol_price_tick", 1).
fix: high_price = max(high_price_temp, close_price, open_price, low_price_temp).
fix: attr_name = f'{signal_name}_period_enum' on create_cls_by_signals.
fix: SymbolsInfo.get_or_create_curr_symbols(vt_symbol, create_if_not_exist=True).
fix: market_position 赋值钱判断类型.
fix: id_name.endswith(symbol_str) check for get_backtest_status_info_by_images_in_output_stg_dir.
refactor: f"{param_name} = '{value}' 该参数用法已经废弃，建议使用 '{signal_param_header}period_enum' 的参数名称".2021-09-17 v0.7.20210918.1feat: get_instance_by_strategy_class_name cal with lock.
feat: @lru_cache() get_instance_by_strategy_class_name.
feat: add fire_exit_signal, reset_exit_signal on CtaExitSignal.
feat: add _close_from_position for reset exit signal status.
feat: add get_backtest_status_info_by_images_in_output_stg_dir.
feat: add GeneralPeriodEnum.parse_2_values.
feat: add ArrayManager.psy.
feat: add MultiSignalsTemplate.reset_close_signal_status.
feat: add db_bar_datetime_2_real_datetime(db_bar.to_bar()) 修正数据库bar时间为 end_time 导致整体时间错后1分钟的问题，该功能可以通过策略的 fix_db_bar_datetime 参数处罚。考虑到历史兼容性，该参数默认为 False。
feat: add exit cta signals.
feat: add output_csv on po.
feat: add daily info.
feat: add max_low_after_entry, min_high_after_entry.
feat: add on_spread_bar, on_win_spread_bar, am_spread on TargetPosAndPriceSpreadTemplate template.py.
feat: add calculation of close_price, open_price, high_price, low_price, volume, open_interest.
feat: group settings on backtest_by_json.
feat: add er_ratio on am.
fix: IBATS-Utils>=1.20210912.0.
fix: getattr(stats, 'freeze_of_account', 0).
fix: stats_obj.apply_2_symbol(ignore_no_s_pattern_record=ignore_no_s_pattern_record).
fix: None if TypeError in export_table_2_df_io.
fix: on_conflict_ignore on add_2_account.
fix: image path and beauty log on update_strategy_stats_by_images_in_output_stg_dir and update_backtest_status_bulk.
fix: get_interval_str interval = Interval.MINUTE if interval is None else interval.
fix: GBK -> utf-8 for backtest_portfolio.py.
fix: change targetPnlSignal.
fix: update target_price of MultiSignalsTemplate.
fix: self.set_target_pos(target_pos * self.base_position, target_price) on MultiSignalsTemplate.
refactor: pos -> market_position.
refactor: abstract am.py, bg.py, cta_signal.py.2021-09-10 v0.7.20210910.1feat: add get_base_position_of_account get_stop_opening_pos_of_account get_freeze_of_account of StrategyBacktestStats.
feat: ignore not _.get_freeze_of_account() on po.
feat: auto calc vt_symbol_market_value_dic if plot_by_account.
feat: use fit_and_merge_key_stats_dic on po.
feat: add curr_symbol_only on po.
feat: copy_freeze on refresh_vt_symbol_2_curr_contract_by_account.
feat: add default_backtest_status on backtest funcs.
fix: AccountStrategyMapping.freeze == 0 on set_base_position.
fix: active_order_close is None error in log.
fix: ignore AttributeError error on backtest_all_strategies.
fix: cancel_all_stop_orders and cancel_all_close_orders if pos==0 in on_trade callback.
fix: short_name = getattr(self, 'short_name_of_account', self.short_name).
fix: change lowest_after_entry and highest_after_entry to property.
refactor: self.write_log(f"目标仓位方向改变，取消停止单 {self.stop_vt_orderids}", 'debug').
refactor: sleep_seconds = 30 by default of AccountStrategyStatusMonitor.2021-09-03 v0.7.20210903.0feat: add param stg_info_duplicate_name_options 默认 DuplicateNameOptions.raise_error。策略重名应对措施。该参数仅在 save_stats == True 的情况下启用.
feat: reorg log of po.
feat: add plot_by_account.
feat: add freeze on AccountStrategyMapping.
feat: remove StrategyBacktestStatsKey and add new logic of StrategyBacktestStats.get_stats_key_str.
feat: add subplots on plot_with_weights.
feat: add StrategyBacktestStats.get_profit_s.
feat: .ffill().dropna() for profit_df and balance_df.
feat: current_month param on output_monthly_report.
feat: add user_name=None, broker_id=None, description=None param on output_report_between.
fix: count=0 error.
fix: symbol_price_dic None check.
fix: to_markdown(index=False).
fix: weights too big on equal_mdd.
fix: self.send_order_dic.pop(order.vt_orderid) if order.status in (Status.REJECTED, Status.CANCELLED).
fix: self.last_tick_time by time_diff_seconds_local_2_server.
fix: self.vt_symbol.upper() on indicator_by_trade_dic.
refactor: target_pos = self.target_pos.ALTERTABLE`vnpy`.`account_strategy_mapping`ADDCOLUMN`freeze`tinyintNOTNULLDEFAULT0AFTER`position`;2021-08-27 v0.7.20210827.1feat: add get_price_tick, get_vt_symbol_rate.
feat: add 'pl', 'gross_pl', 'rr', 'gross_rr' on TradeWinLossStatsTuple.
feat: add key_base_position_dic on log_contributes, plot_with_base_position.
feat: add lp_portfolio_param param on PortfolioOptimization.set_goal, cache get_base_positions.
feat: add latest_cancel_response_order on CtaTemplate.
feat: new logic of import_cta_strategy_data_json.
feat: add portfolio_optimization_by_account.
feat: query_latest_position_status(recent_n_days=32).
feat: add ignore_old_symbol on generate_strategy_setting_file.
feat: add AccountStrategyMapping.clone_mapping.
feat: add track_backtest=False, track_backtest_pool=3 on refresh_vt_symbol_2_curr_contract_by_account.
feat: add PortfolioOptimizationGroupFitting.
feat: back_up database by multiprocess.
fix: fix BASE_POSITION 1 on backtest_all_strategies.
fix: AccountStrategyMapping.position == 0 on AccountStrategyMapping.delete_if_no_position.
fix: target_pos != self.pos and not self.fire_stop_order and not self.stop_opening_pos on TargetPosAndPriceNoStopOrderTemplate.2021-08-20 v0.7.20210819.1feat: add include_holding_pos_stg param on generate_strategy_setting_file.
feat: support black_litterman on PortfolioOptimization.
feat: add INSTRUMENT_TYPE_MAIN_CONTRACT_DIC.
feat: add position on AccountStrategyMapping.
feat: add AccountStrategyMapping.bulk_update_position.
feat: add AccountStrategyMapping.delete_if_no_position.
feat: only optimize curr symbols.
feat: add CtaExitSignal.
feat: add exit_signal_name_list on MultiSignalsTemplate.
feat: add incrementally param on generate_adj_md.
feat: add get_by_vt_symbol_short_name.
feat: add LatestTickPriceModel.insert_price_by_dic.
feat: add import_cta_strategy_data_json.
feat: 已经支持每日复权，此前只能按照周级别复权因此需要做跨周处理，此后不再需要.
fix: shown_name wrong on refresh_vt_symbol_2_curr_contract_by_account.
fix: ignore FileNotFoundError error and log.
fix: shown_name is None check on apply_2_symbol.
fix: error handler on FileNotFoundError of run_backtest, limit file_name_header.
fix: variables.append("trailing_stop_hl_price") if self.trailing_stop_rate != 0.
fix: change symbols to curr symbols.
fix: StrategyBacktestStats.charts_data.is_null(False) check.
fix: error on np.concatenate if no trade.
refactor: account_stg.strategy_settings is None check.ALTERTABLE`vnpy`.`account_strategy_mapping`ADDCOLUMN`position`INTNOTNULLDEFAULT0AFTER`shown_name`;2021-08-13 v0.7.20210813.1feat: add acc_drawback_rate, drawback_rate on CtaTemplate.
feat: add SymbolsInfo.get_by_symbol_str.
feat: add get_merged_profit_by_json.
feat: add AccountStrategyMapping.add_2_account, StrategyBacktestStats.update_backtest_status, StrategyBacktestStats.generate_f_short_name.
feat: add add_stg_2_account_by_json.
feat: add PortfolioOptimizeGoalEnum.equal_mdd.
feat: support optimized with group_weight_dic.
feat: plot_with_weights(stats_list, weight_dic: dict, capital=None).
feat: add fit_by_group, max_vt_symbol_weight, start_date constrains on PortfolioOptimization.set_goal.
feat: add refresh_vt_symbol_2_main_contract.
fix: id_name ignore (STOP_OPENING_POS_PARAM, BASE_POSITION, ENABLE_COLLECT_DATA_PARAM).
fix: TradeDataModel.query_latest_n_trade_date_list -> TradeDateModel.query_latest_n_trade_date_list.
fix: contract_result None check.
fix: ALL_VT_SYMBOL_LIST -> VT_SYMBOL_LIST_ALL.
refactor: self.enable_collect_data = setting.get(ENABLE_COLLECT_DATA_PARAM, False).
refactor: portfolio management -> pm for short.
refactor: update_backtest_status -> update_backtest_status_bulk.2021-08-06 v0.7.20210806.1feat: add param output_available_only on backtest_by_json.
feat: add plot_with_weights.
feat: add AccountStrategyMapping.strategy_settings.alias("strategy_settings_of_account") column.
feat: add CtaSignal.pos.
feat: add CtaSignal.strategy_parameters.
feat: add do_update_base_positions ontest_po.
feat: log 最短周期策略 and None check.
feat: add check_signal_name_list param at get_signal_params on MultiSignalsTemplate.
feat: add exit_price, keep_win_loss_counter, daily_trade_stats_list.
feat: add short_name_with_file_name_if_exist param on backtest funcs.
feat: add skip_current_week for FutureAdjFactor.is_main.
feat: add until_date for TradeDateModel.get_latest_trade_date.
feat: add allow_trade_direction param on TargetPosAndPriceTemplate and TargetPosAndPriceNoStopOrderTemplate.
fix: output_available_only=False on backtest_by_json.
fix: root_folder_name missing for root_folder_path.
fix: ignore duplicate records.
fix: return None if self.charts_data is None of get_balance_df.
fix: rr_df plot wrong on plot_with_weights.
fix: lw_dd_pct, lw_drawdown error if drawdown_s.count() <= 1.
fix:[make_param_2_str() for key, _ in kwargs.items() if key not in ('module_name', )] on get_name_by_param.
refactor: move STOP_OPENING_POS_PARAM = "stop_opening_pos" ENABLE_COLLECT_DATA_PARAM = "enable_collect_data" to constants.py.
refactor: enhance get_interval_str and get_name_by_param.
refactor: params_str = '_'.join([str(v) for v in signal_name_id_name_dic.values()]).
refactor: ignore_fields='auto'.
refactor: move symbol related funcs to utils.symbol.2021-07-30 v0.7.20210730.2feat: add monthly_holding_rr_distributions.
feat: add strategy_obj param on CtaSignal.
feat: add loss win hist bars on monthly_holding_rr_distributions_dic.
feat: backtest_by_json supports bulk_backtest_with_backtest_params_iter.
feat: latest_reject_response_order reset to None when on_stop.
feat: generate_strategy_setting_file(ignore_stop_opening_pos_stg=True).
feat: add PortfolioOptimizeGoalEnum.
feat: add param ignore_stop_opening_pos_stg.
fix: exchange wrong and name_idx_dic = {v: k for k, v in structure_df['字段名'].items()}.
fix: msg missing and "【非交易时段】" check if self._is_realtime_mode.
fix: handle StrategyInfo.get_strategy_class_by_name(strategy_class_name) error.
fix: AttributeError: 'weakref' object has no attribute 'vt_symbol_price_tick'.
fix: update AccountStrategyMapping but StrategyBacktestStats.
refactor: instrument_type = get_instrument_type(symbol, pattern=PATTERN_INSTRUMENT_TYPE_OPTION, error_log=False).
refactor: engine_kwargs['end'] = end or date.today() of backtest_by_json.
refactor: CtaSignal strategy_obj 参数为必输项。2021-07-23 v0.7.20210722.3feat: add replace_vt_symbol_2_curr_contract_of_settings.
feat: add file_name_include_symbol.
feat: add user_name_broker_id_pair_list on backtest_all_strategies.
feat: add get_vt_symbol_multiplier.
feat: add AccountStrategyMapping.get_stats_by_account, StrategyBacktestStats.get_stats_key, StrategyBacktestStats.get_stats_key_str, StrategyBacktestStats.get_balance_df.
feat: add SymbolsInfo.get_symbol_latest_price_dic StrategyBacktestStats.set_base_position.
feat: add stg_list param on generate_strategy_setting_file.
feat: add PortfolioOptimize.
fix: change shown_name to file_name_header by default.
fix: setting file format error.
fix: ignore KeyError on pop all traded order.
fix: ignore IntegrityError on backup to archive.
fix: engine_kwargs[vt_symbol_key] = engine_kwargs[vt_symbol_key].split("_") if it's portfolio.
fix: .execute() missing on AccountStrategyMapping.insert.
fix: set shown_name, short_name if they are not None.
fix: z_score_days: typing.Optional[int].
fix: None check -> unavailable check on cta signal params.
fix: add MacpMacmaPrAndFutures2Options demo.
fix: add try catch on run_backtesting.
refactor: user_name: str = CharField(max_length=50, help_text="用户名") broker_id: str = CharField(max_length=20, help_text="经纪商代码") on AccountStrategyMapping.
refactor: numpy>=1.20.3.
重新配置环境:pip uninstall enum34 -y
pip install "numpy-1.21.0+mkl-cp37-cp37m-win_amd64.whl"
pip install vnpy_extra-0.7.20210722.1-py3-none-any.whl
pip install cvxpy==1.1.13
pip install cvxopt==1.2.6
opencv_python==4.5.32021-07-16 v0.7.20210716.0feat: add start, end on backtest_all_strategies of track_performance.py。feat: add column visible on strategy_info.ALTERTABLE`vnpy`.`strategy_info`ADDCOLUMN`visible`TINYINTNULLDEFAULT1AFTER`backtest_folder_path`;feat: add function backup_tables_2_zips to backup.
feat: add generate_setting_json_file on backtest funcs.
feat: add gross profits.
feat: close -> open if position conflict on report.
fix: z_score_days error on macd signal.
fix: add indent=4 on json file.
refactor: 5 years for track backtest.
refactor: add index on bac.ALTERTABLE`vnpy`.`strategy_backtest_stats`DROPINDEX`query_symbol_status`,ADDINDEX`query_symbol_status`(`backtest_status`ASC,`symbols_info_id`ASC,`stg_info_id`ASC)VISIBLE,DROPINDEX`query_symbol_available`,ADDINDEX`query_symbol_available`(`available`ASC,`symbols_info_id`ASC,`stg_info_id`ASC)VISIBLE;2021-07-09 v0.7.20210709.1feat: record_file_name = os.path.join(output_folder, f"{zip_file_name}.txt").
feat: add load_days_span on template.py.
feat: add AccountStrategyMapping.insert on import_by_settings.
feat: add TradeDateModel.transfer_from_wind().
feat: raise error if setting not in parameters on template.py.
feat: add send_order_2_target_pos_close_rejected on TargetPosAndPriceNoStopOrderTemplate.
feat: ignore target if  target_price<0 on TargetPosAndPriceTemplate.
feat: add TargetPosAndPriceFutures2OptionTemplate for futures position -> options positions.、
fix: 发现部分情况下 engine_kwargs 中 symbol 与 stats.symbols_info.symbols 不一致，以后者为准.
fix: remove AccountStrategyMapping.import_by_settings(settings) from import_from_json_file.
fix: ignore 'class_name' in setting.
fix: mismatch symbols' target_price should > 0.
fix: "target_pos" not in self.variables check on TargetPosAndPriceTemplate of cta.
fix: "targets" not in self.variables check on TargetPosAndPriceTemplate of portfolio.
refactor: upload records of uploading tick data of options.
refactor: add nbconvert==5.6.1.
refactor: add logger_name on all cta/portfolio templates.2021-07-02 v0.7.20210702.1feat: Scripts for handling 国泰君安 Option Tick data.
feat: add generate_df, generate_factors, generate_y_s, generate_x_df, load_and_plot_bars.
feat: add logic of generate_x_d.
fix: # noinspection PyUnresolvedReferences import ffn  # NOQAfix: remove cancel_all in on_trade.
fix: sum_df['汇总'] -> sum_df[('区间盈亏', '汇总')].
fix: 隔夜建仓平仓导致一些情况下平仓异常引发warning："当前持仓 * 手，当前持仓全部订单不足以处理当前平仓，这种情况发生，说明当前持仓数据与交易数据的累加数字不一致，请检查数据是否缺失"。
fix: 1 if trade_data.direction == Direction.SHORT.value else -1.
feat: add output_path_vt_symbol to shorten file_name.
fix: "CY":["9:00:00", "23:00:00"] on constant.
fix: vt_symbol not in bars check on TargetPosAndPriceTemplate.
fix: order.vt_symbol not in self.targets check.
fix: add strategy_cls=strategy_cls into bulk_backtest_kwargs.
fix: self.set_target_pos(target_pos * self.base_position) on MultiSignalsTemplate.
refactor: lower some log levels.2021-06-25 v0.7.20210625.1feat: add output_path_has_strategy_class_name, output_separate_by_backtest_status.
feat: add MultiSignalsTemplate.
feat: supporting night md available check.
feat: add return to output_report_between, output_monthly_report.
feat: 在output_report_between中增加sum_df行，列的和.
feat: add get_vt_symbol_target_pos_str for logging.
feat: ignore empty columns when generating markdown files.
feat: self.targets[vt_symbol] KeyError check and ignore duplicate recent logs.
fix: db = connect("mysql+pool://{user}:{password}@{host}:{port}/{database}".format(**settings)) if linux.
fix: AttributeError on write_log.
fix: drop(columns=['策略类名']) on report.
fix: RuntimeWarning: divide by zero encountered in double_scalars.2021-06-18 v0.7.20210618.1feat: add get_daily_bar_count on StrategyTemplate.
fix: trade_data.volume == 0 filter.
fix: active_order_waiting_since_dt_dict is None.
fix: vt_symbol key error on.
fix: do not build am if array_size is None.
fix: stg_info， symbols_info is ForeignKeyField.stg_info 与 StrategyInfo 外键关系在实际数据库中已经解除，但在逻辑关系中保留。
  get_available_status_group_by_strategy 函数强烈依赖于该外键关系
  ALTER TABLE `vnpy`.`strategy_backtest_stats`
    DROP FOREIGN KEY `strategy_backtest_stats_ibfk_2`,
    DROP FOREIGN KEY `strategy_backtest_stats_ibfk_1`;fix: BarGenerator.is_end_day.
fix: db = MySQLDatabase(**settings) in linux.
fix: with lock on db connections.
refactor: ALTER TABLEvnpy.dbbardataADD PARTITION PARTITIONS 400;
refactor: spread_type check.2021-06-11 v0.7.20210611.0feat: add symbol_is_main_dic for judge the main contract.
feat: add generate_md_by_xls_files.
feat: add signal strategy demo.
fix: engine_kwargs['interval'] = Interval(interval) if interval is not None else Interval.MINUTE.
fix: cover/sell then buy/short on TargetPosAndPriceTemplate.
fix: keep trying bulk insert and backup data if exception.
fix: INSTRUMENT_TYPE_SUBSCRIPTION_DIC 能源所：小写+4个数字.
fix: get_instrument_type_and_exchange.
fix: return_loss_ratio is nan if abs_loss_pnl == 0, return_risk_ratio is nan if return_loss_ratio is nan or 0.
fix: charts_data error when len(vt_symbols)>2.
fix: add output_separate_by_backtest_status for the bug of output folder with backtest_status always.
fix: backtest_status missing.
fix: stg_info -> stg_info_id, symbols_info -> symbols_info_id after remove Foreign Key relations.
refactor: json.dump -obj_2_json.
refactor: change columns order and fix short_name, shown_name order.
refactor: return_loss_ratio with decimals 2.ALTERTABLE`vnpy`.`strategy_backtest_stats`DROPFOREIGNKEY`strategy_backtest_stats_ibfk_2`,DROPFOREIGNKEY`strategy_backtest_stats_ibfk_1`;ALTERTABLE`vnpy`.`strategy_backtest_stats`PARTITIONBYKEY(stg_info_id)PARTITIONS50;ALTERTABLE`vnpy`.`strategy_backtest_stats_archive`DROPFOREIGNKEY`strategy_backtest_stats_archive_ibfk_2`,DROPFOREIGNKEY`strategy_backtest_stats_archive_ibfk_1`;ALTERTABLE`vnpy`.`strategy_backtest_stats_archive`PARTITIONBYKEY(stg_info_id)PARTITIONS50;ALTERTABLE`vnpy`.`dbbardata`ADDPARTITIONPARTITIONS400;2021-06-04 v0.7.20210604.1feat: 增加按策略类统计方法.
feat: StrategyBacktestStats.set_strategy_unavailable.
feat: add StrategyBacktestStats.get_by_keys.
feat: try getting old strategy_stats if strategy_stats_original is None, and reuse backtest_status, short_name, shown_name if they are not None.
feat: add StrategyInfo.get_strategy_class_by_name.
feat: add backtest_by_warning_log.
fix: save to json file if save stats failed.
fix: output_report_between on reports.
fix: z_score = get_daily_min_bar_count() * z_score_days.
fix: daily_bars_needed_at_least on MACDSignal and add short_name on MACD,KDJ,RSI,BOLL.
fix: curr_closing_trade_data is None.
fix: statistics = dict_2_jsonable(statistics).
refactor: beauty log of StrategyBacktestStats.expire_stats.
refactor: add warning '没有找到对应的记录' on update_backtest_status_bulk.
refactor: avoid loop import.2021-05-28 v0.7.20210528.0feat: show fire_stop_order in variables if self.stop_loss_rate 0 or self.trailing_stop_rate 0.
feat: add TargetPosAndPriceTemplate on portfolio.
feat: beauty log and add TargetPosAndPriceNoStopOrderTemplate.
feat: enhance ArrayManager with datetime_array.
feat: add spread_type, curr_spread, curr_win_spread, win_spreads, win_am_spread on TargetPosAndPriceSpreadTemplate.
feat: change indicator_dic structure on two engine.
feat: add indicator by trade in portfolio_strategy engine.
fix: show "最新持仓目标 ***" only if target_pos != self.pos and not self.fire_stop_order.
fix: send_and_on_order_dt_dic pop ALLTRADED order.
fix: cancel all stop orders if fire_stop_order and pos -0 done.
fix: cancel_all_stop_orders() -cancel_all().
fix: base_price_type -self.base_price_type.
fix: change way of np.int64 -int.
fix: cancel_all_stop_orders() -cancel_all().
fix: StrategyBacktestStats.update(update_dic).
fix: fire_stop_order_dt is None check.
fix: set 0 when calculate by trade if trades data is None.
fix: (order.volume - order.traded) <= vol <= order.volume on is_same_as_order func and beauty log.
fix: None check on calc_spread_bar.
fix: _update_spread.
refactor: beauty order log.2021-05-21 v0.7.20210521.0feat: add TargetPosAndPriceSpreadTemplate.
feat: add author_list on backtest_all_strategies.
feat: add TargetPosAndPrice2SymbolTemplate.
feat: add get_daily_min_bar_count on enhancement.
feat: add calc_init_load_days on StrategyTemplate.
feat: period_enum become optional.
feat: 添加calculate_by_trade，通过每笔交易计算指标.
feat: add get_id_name on MACrossPriceSignal.
fix: handle DoesNotExist on apply_2_symbol.
fix: update short_name, shown_name update to None on update_backtest_status_bulk.
fix: int64 cannot be json on indicator_dic.
fix: update backtest_status on update_stats.
fix: Duplicate entry error. remove fn.ABS(StrategyBacktestStats.backtest_status) >= StrategyBacktestStatusEnum.QuasiOnline.value condition.2021-05-14 v0.7.20210514.0feat: add z_score_days param on MACDSignal.
feat: add param vt_symbol on CtaSignal.
feat: support period_enum on StrategyTemplate of portfolio strategy.
feat: add strategy_cls name on progress bar.
feat: add param same_direction on is_cross func: 是否要求金叉时一定要方向相同.即:金叉时 price1 方向向上,死叉是 price1 方向向下.
feat: add param same_direction param on MACrossSignal.
feat: update id_name if it's changed when track backtest.
feat: add check_account_mapping on StrategyBacktestStats.update_backtest_status_bulk.
feat: add ams of ArrayManager Dict on StrategyTemplate.
fix: avg_entry_price wrong.
fix: TradeDateModel no available date check on is_end_week.
fix: self.set_signal_pos(-flag if self.reverse_bs else flag) on MACrossPriceSignal and add reverse_bs on MACrossSignal.
fix: same_direction is not available param on MACrossPriceSignal.
fix: score +/- wrong.
fix: file extension check ('.csv', '.xls', '.xlsx').
fix: old_id_name = None and add exception log.
fix: only warning if pos status < today and tick data missing.
fix: duplicate key error in some cases of update_stats.
fix: cancel stop_vt_orderids when target position direction changed.
fix: key will not be added in send_and_on_order_dt_dic if stop == True in send_order.
fix: checking bar is None.
fix: handle InterfaceError on StrategyStatus.query_status.
fix: '主连合约' '次主连合约' shown wrong.
fix: do not calc avg_entry_price if self.pos == 0.
fix: load continue data.
refactor: add hint self.window_bar: Optional[BarData] = None.
feat: add new parameter indicator_dic to return of BacktestingEngine.calculate_statistics(), which contain all indicator data.
feat: add new model field indicator_dic to StrategyBacktestStats in orm.py
feat: 数据库变更脚本ALTERTABLE`vnpy`.`strategy_backtest_stats`ADDCOLUMN`indicator_dic`JSONNULLDEFAULTNULLAFTER`charts_data`;ALTERTABLE`vnpy`.`strategy_backtest_stats_archive`ADDCOLUMN`indicator_dic`JSONNULLDEFAULTNULLAFTER`charts_data`;ALTERTABLE`vnpy`.`strategy_backtest_stats_test`ADDCOLUMN`indicator_dic`JSONNULLDEFAULTNULLAFTER`charts_data`;2021-04-30 v0.7.20210430.0feat: add short_name on sub classes of CtaSignal.
feat: add daily_bars_needed_at_least, get_short_name, get_signal_name_header on CtaSignal.
feat: add unique key of ('stg_info', 'symbols_info', 'short_name',) and ('stg_info', 'symbols_info', 'shown_name',) on StrategyBacktestStats.
feat: auto fill short_name on update_backtest_status_bulk.
feat: add update_strategy_stats_by_dir for updating all files in dir.
feat: add score on calculate_statistics.
feat: 追踪回测时，文件名 id_name_[short_name].
feat: merge daily price and profit charts together.
feat: get_available_status_group_by_strategy all filter by symbols list or strategy_class_name list.
feat: lower dependency of FutureAdjFactor table when load_bar_data.
feat: add csv_split_chunk to handle large csv files.
fix: self.current_bars[vt_symbol] is None on send_order of portfolio template.py.
fix: symbols.upper() on get_symbols_id_dict and update_backtest_status_bulk.
fix: only warning if pos status < today and tick data missing.
refactor: lru_cache(maxsize=10) lower memory use on load_data.
refactor: root_folder_name = f'{strategy_cls.name}{date_2_str(date.today())}' on bulk_backtest.
refactor: root_folder_name=f'{strategy_cls.name}{vt_symbol}' on bulk_backtest_separated_by_symbol.2021-04-23 v0.7.20210423.0feat: 默认 root_folder_name 使用程序创建时的系统日期，为了防止跨日出现多个不同日期的文件夹，该日期初始化后不再改变。
feat: add avg/max/lw/avg_square/most of drawdown on cta/portfolio backtest engine.
feat: enable strategy_only filter and root_folder_name on backtest_all_strategies.
feat: DEFAULT_STATIC_ITEM -DEFAULT_STATIC_ITEM_DIC. and include items: "return_most_drawdown_ratio", "return_loss_ratio".
feat: change default columns orders of bulk backtest output csv/excel files.
feat: add default params 'stop_opening_pos' 'base_position' on settings of settings files.
feat: support output orders/trades with output_orders/output_trades params on backtest.
feat: add capital param on bulk_backtest_separated_by_symbol.
feat: capital=1000000 by default of run_backtest.
feat: add StrategyBacktestStats.expire_stats for disabling old stats by symbols on both StrategyBacktestStats and AccountStrategyMapping.
feat: add trailing stop and stop loss.
feat: day end at 15:00 of BarGenerator.
fix: df is None check when is_available check.
fix: return_loss_ratio wrong.
fix: vt_symbols wrong of settings files.
fix: self.daily_df = None on clear_data.
refactor: lru_cache() for TradeDateModel.get_trade_date_dic.2021-04-16 v0.7.20210416.1feat: add INSTRUMENT_TYPE_SUBSCRIPTION_DIC.
feat: add validation rule "最大回撤到最后一个交易日需要出现新高".
feat: add shown "annual_return", "sortino_ratio", "return_risk_ratio" by default.
feat: class_name + param_str by default of id_name of strategy.
fix: generate right vt_symbol for subscription.
fix: enhance change_curr_contract of FutureAdjFactor.
fix: main contract switch wrong on apply_2_symbol.
fix: bar.vt_symbol wrong on mock_load_bar_data.
fix: is_main check on mock_load_bar_data.
fix: secondary contract reversion rights.
fix: return_loss_ratio error on calculate_statistics.
fix: INSTRUMENT_TYPE_SUBSCRIPTION_DIC wrong.
refactor: make 'id_name', 'backtest_status', 'short_name', 'shown_name' at the end columns of csv/xlsx files.2021-04-09 v0.7.20210409.0feat: add some instrument type on EXCHANGE_INSTRUMENTS_DIC.
feat: add vt_symbol_price_tick on CtaTemplate.
feat: get shown_name and short_name from get_name_by_pattern.
feat: add is_cross on func module
feat: add ma on ArrayManager.
feat: add MACrossPriceSignal.
fix: wrong error_count on import results.
fix: on creating instance of StrategyTemplate, CtaTemplate of apply_2_symbol function.
fix: add exception handler on add_2_account_strategy_mapping.2021-04-02 v0.7.20210402.0feat: add output_report_between on report function.
feat: stats['区间盈亏', '交易次数', '盈利次数', '亏损次数'] on reports.
feat: add rr wh fb cy trade datetime range.
feat: add get_instrument_type_and_exchange.
feat: warning '【非交易时段】' only on realtime mode.
feat: add base_price_type param for default kind of price when calculating indexes.
feat: add add_mapping_all, add_2_account_strategy_mapping, apply_2_symbol on StrategyBacktestStats.
fix: key available check on backtest.
fix: broker_id: str = IntegerField(help_text="经纪商代码") of AccountStrategyMapping.
fix: user_name, broker_id = int(user_name), int(broker_id) on AccountStrategyMapping.add_mapping.
fix: logging track test error.
fix: ignore updating['id_name', 'backtest_status', 'short_name', 'shown_name'] if insert conflict on backtest.
fix: stats wrong on report.
fix: unique index on ('user_name', 'broker_id', 'short_name',) and ('user_name', 'broker_id', 'shown_name',) of AccountStrategyMapping.2021-03-25 v0.7.20210325.0feat: update_strategy_stats_by_df with AccountStrategyMapping.
feat: new logic of import/export settings with AccountStrategyMapping.
feat: support custom is_available func for strategy template.
feat: support start and end date range for bulk_backtest_separated_by_symbol.
feat: add strict logic of window bar on CtaSignal and BarGenerator.
feat: add GeneralPeriodEnum.
feat: init_load_days = 0 by default.
feat: add enable_entry_exit_price feature.
feat: backtest end at 3 month ago for in-sample test by default.2021-03-17 v0.7.20210317.0feat: update hour bar logic of BarGenerator to vnpy same logic.
feat: add {strategy_cls.name}_ on file name header of backtest.
feat: add user_id on file names on daily reports.
feat: speed up load history bar.
fix: reset error_count on each loop.
refactor: add log on bulk backtest.2021-03-11 v0.7.20210311.1feat: 支持加载主连连续合约作为合约历史行情数据（默认为False）.
feat: move TBCtaSignal to vnpy_extra_tb.
feat: reset_index on on f'{key}_{date_2_str(date.today())}.xlsx' files.2021-03-09 v0.7.20210309.0feat: self.load_bar(self.init_load_days) on on_init() for cta/portfolio template.
feat: add remove_old_symbol_until_nth_latest on generate_md_with_adj_factor 删除旧的“带 symbol 标记”的主连行情数据，截止到第N个最新的主力合约.
feat: EXCHANGE_INSTRUMENTS_DIC, INSTRUMENT_EXCHANGE_DIC for constants.
feat: add generate md with adj_factor module.2021-03-05 v0.6.20210305.0feat: add StrategyBacktestStatsArchive.restore.
refactor: LatestTickPriceModel.replace -LatestTickPriceModel.insert.
feat: add pool_size for multi thread.
feat: add TBCtaSignal.
feat: add export_tables_2_csv.
fix: engine_kwargs["vt_symbols"] or engine_kwargs["vt_symbol"] mistake on update_backtest_status_bulk.
fix: available_df.shape[0]>0 on backtest.
fix: set_index(multi_valued_param_name_list) on backtest.
fix: statistics available check on StrategyBacktestStats.update_stats.
feat: send_email_qq support msg list.
feat: order_by(StrategyBacktestStats.short_name) on StrategyBacktestStats.get_by_status.
feat: variables = ["target_pos", "target_price", "bar_count"] on template.
feat: add block_size=1024 * 1024 * 10 param on build_emails.
feat: add ignore_error param on csv_2_tables and import_data_2_tables.
fix: is_same_as_order for template.
fix: pd.isna(short_name) check.
fix: IntegrityError handler on import_data_2_tables.
feat: replace insert -on duplicate key update.
feat: add trade count summary on monthly report.
feat: update update_backtest_status_bulk logic.
fix: reduce reject order.
fix: StrategyBacktestStats.update_backtest_status_bulk.
feat: add last_tick and fill default price if price <= 0.
feat: drop_duplicates and create f'{key}_{date_2_str(date.today())}.xlsx' file.2021-02-28 v0.6.20210228.0fix: order timeout on submit status. and clean tmp data when on_start called.
fix: output f'{key}_{date_2_str(date.today())}.csv' file event if len(df_list) == 1.
fix: ignore save_stats exceptions.
feat: remove duplicate msg.
feat: add check datetime trade available.
refactor: fit INSTRUMENT_RATE_DIC.
feat: email_attachment_2_tables, add csv_2_tables.
refactor: logger = logging.getLogger(f'strategies.*.{strategy_name}').
refactor: write_log(f"最新持仓目标 {target_pos} {self.target_price}", 'debug').
fix: annual return, calmar, sharp.
feat: export_tables_and_send_email.
feat: add password param for email login password.
feat: export_tables_and_send_email(password).
fix: Writing to Excel with MultiIndex columns and no index ('index'=False) is not yet implemented.
fix: price <= 0.0 check.
fix: output_file_dic = {}.
fix: strategy.strategy_name is None in some cases.
fix: log and ignore lock error when cleaning TradeDataModel.
refactor: create a unique on strategy_class_name.2021-02-19 v0.6.20210219.3feat: feat: add StopOpeningPos.
feat: return output_file_dic on refresh_position_and_report.
feat: use CalVer.
feat: now all signal classes are subclasses of vnpy_extra.utils.enhancement.CtaSignal.
feat: add filter_n_available=1 param for each subclass.
feat: add check_datetime_available.2021-02-12 v0.6.21fix: some dirty data has to be clean.
fix: charts_data null=True, symbols cannot be unique.
refactor: bigger=1.0
feat: add backtest_status_path on output path.
fix: enable_join_collector.
refactor: add description on progress bar.
feat: add charts_data for showing echarts of strategy.
feat: progress bar shows file_name_header.
feat: support import strategy setting from["cta_strategy_setting.json", "portfolio_strategy_setting.json"].
feat: auto add main_contract testcase for import_strategy_setting module.
fix: case-insensitive for portfolio portfolio_strategy.engine.BacktestingEngine.2021-02-03 v0.6.7feat: add algo trading on TargetPosAndPriceTemplate.
feat: remove tzinfo from last_tick_time on cta's CtaTemplate and portfolio's StrategyTemplate.
feat: add get_id_name function.
feat: add import_strategy_setting module.
fix: export/import tables and send email by io.
fix: ctaTemplate algo trading logic.2021-01-26 v0.6.2feat: add short_name, shown_name by default null and unique into db.
feat: export/import tables and send email by io.
fix: TargetPosAndPriceTemplate order missing.2021-01-22 v0.6.0feat: add track performance feature.
refactor: quant_vnpy -vnpy_extra.2021-01-19 v0.5.12fix: TargetPosAndPriceTemplate current_pos -target_pos by one step.
fix: strategy_class_name wrong.2021-01-15 v0.5.5fix: add exception handle and logger on TradeDataCollector.
fix: TargetPosAndPriceTemplate current_pos -target_pos by one step.
feat: record backtest stats.
feat: add default rate for backtest.
fix: DCE夜盘交易日期为下一交易日，将会被重写为当前系统日期.
fix: 修复跨日报表统计错误.
fix: cross_limit_method param missing for file_name_func function.
fix: 主力合约、次主力合约数据复权整理 bug.2021-01-08 v0.5.0refactor: merge portfolio run_backtest and cta run_backtest.
feat: set_strategy_status(StrategyStatusEnum.Stopped).
feat: monitor add setting.
refactor: longer interval of plotly.io._orca.cleanup.
feat: backtest: output param file if it's available.
fix: MACDSignal.
fix: check not strategy_status_monitor.is_alive().2020-12-27 v0.4.8feat: backtest: reset_index on result_df.
fix: portfolio template, last_order_dt -dict.
feat: add new TargetPosAndPriceTemplate, MACrossSignal.
feat: backtest: default rate.
feat: backtest: available filter for return_drawdown_ratio < 2 and np.round for some stats items.2020-12-25 v0.4.6feat: backtest: auto search symbol size.
fix: report gl calc wrong in some cases.
fix: report holding pos status calc wrong.
fix: stop_opening_pos on templates.2020-12-22 v0.4.2fix: order_data_collector error on portfolio_strategy.template.
fix: open_price -last_price.2020-12-18 v0.4.0feat: support user_name, broker_id.
feat: add last_order_dt on template.
fix: orm close connection.
feat: position daily stat.
feat: add CrossLimitMethod.fix_price for backtest.
feat: add quant_vnpy.backtest.cta_strategy.template.CtaTemplate.
feat: backtest cross price method.
add position monitor2020-12-11 v0.2.16feat: on_tick active on_bar by bg on template.py.
feat: add OrderDataCollector, TradeDataCollector class.
feat: add stop_if_pos_2_0 on cta template.
fix: bug fix of on_tick and report error.2020-12-04 v0.2.8feat: more readable log.2020-11-30 v0.2.7feat: orm add symbols.
fix: bug fix on log format.
fix: bug fix on on_stop of portfolio template.
feat: add strategy status monitor.
feat: add bar_count.2020-11-20 v0.1.8bug fix on portfolio's template.
feat: 对 cta 及 portfolio 增加 template 模板类.
feat: signal 增加  0 判断 当 0 时，默认为 default 值.
feat: add current_bar for cta, portfolio's template classes.
fix: template bugs.
feat: 最新依赖版本 IBATS_Common>=0.20.8，最新支持道 vnpy 2.1.7 版本.
feat: 调整 INSTRUMENT_TRADE_TIME_PAIR_DIC 道 constants.py.2020-11-10 v0.1.0feat: 基于vnpy 2.1.6进行的功能增强。此前版本不支持。二、 环境设置及组件安装（首次运行前需要）1. 系统环境包含Anaconda或 Miniconda（python 3.7 版本）2. 安装vnpy 2.1.6或以上版本3. 运行安装相关组件pip isntall -r requirement.txt
conda install -c plotly plotly-orca
conda install -c plotly python-kaleido如果执行遇到问题可分别执行如下：通用组件pip install -r requirement.txtorca 组件
orca 组件为回测功能中保存回测视图结果的组件，windows系统性需要单独安装，才可保证功能正常使用
安装步骤如下：安装组件包conda install -c plotly plotly-orca下载并安装 orca 应用组件下载地址：orca组件安装后设置话就环境变了 Path 加入相应路径，默认情况下window10操作系统 orca 组件将被安装在如下路径：
C:\Users\mmmaaaggg\AppData\Local\Programs\orca批量关闭 orca 进程方法ps-ef|greporca|grep-vgrep|awk'{print $2}'|xargskill-9MD文件转word文档工具
到pandoc官网下载对应的软件并安装后即可运行 Scripts\md_2_docx.bat 脚本pycharm MemoryError 解决方案
打开pycharm安装目录 d:\IDE\JetBrains\PyCharm Community Edition 2020.2.1\bin\ ，找到 pycharm.exe.vmoptions 文件，-Xms128m
-Xmx768m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf修改
-Xms为 256m
-Xmx为 2048m-Xms256m
-Xmx2048m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf4. 不错的 Jupyter 组建nbextensionpipinstalljupyterlabjupyter_contrib_nbextensionsyapfautopep8nbresuse-ihttps://pypi.mirrors.ustc.edu.cn/simple
jupytercontribnbextensioninstall
pipinstall--userjupyter_nbextensions_configurator-ihttps://pypi.mirrors.ustc.edu.cn/simple
jupyternbextensions_configuratorenable--userjupyter-kitepipinstalljupyter-kite
jupyterlabextensioninstall@kiteco/jupyterlab-kitejupyter-matplotlibpipinstallipympl
jupyterlabextensioninstall@jupyter-widgets/jupyterlab-managerjupyter-matplotlibjupyterlab-system-monitorpipinstallnbresuse
jupyterlabextensioninstalljupyterlab-topbar-extensionjupyterlab-system-monitorjupyterlab-variableInspectorjupyterlabextensioninstall@lckr/jupyterlab_variableinspectordebuggercondainstallxeus-python=0.8.0-cconda-forge
jupyterlabextensioninstall@jupyterlab/debugger其他pipinstalljupyterlab_widgets
jupyterlabextensioninstall@jupyter-widgets/jupyterlab-manager@jupyterlab/tocjupyterlab-execute-timeplotlywidget@4.9.0三、 常用命令1. 切换远程仓库地址方法>git remote
origin
>git remote get-url --all origin
https://github.com/IBATS/vnpy_extra.git
>git remote set-url origin git@gitee.com:ibats/vnpy_extra.git
>git push
Enumerating objects: 82, done.
Counting objects: 100% (82/82), done.
Delta compression using up to 8 threads
Compressing objects: 100% (65/65), done.
Writing objects: 100% (65/65), 14.57 KiB | 710.00 KiB/s, done.
Total 65 (delta 50), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:ibats/vnpy_extra.git
   4f85956..fe47acc  master -master2. 数据库命令1) dump 数据备份主力合约"c:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe" -u mg -p --databases vnpy dbbardata --where="symbol in ('rb9999', 'hc9999', 'i9999') and `interval`='1m'" dbbardata_dump.sql备份主力，次主力合约"c:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe" -u mg -p vnpy dbbardata --where="(symbol like'%9999' or symbol like'%8888') and `interval`='1m'" dbbardata_dump.sql2) 数据库分区ALTERTABLE`vnpy`.`dbbardata`PARTITIONBYKEY(symbol)PARTITIONS100;ALTERTABLE`vnpy`.`strategy_backtest_stats`PARTITIONBYKEY(stg_info_id)PARTITIONS50;3) 错误解决方案peewee.OperationalError:(-1,'MySQL Connection not available.',None)pip install peewee==3.13.33. 压缩命令zip-r0q/media/mg/Data/output_20201220.zipoutput4. 独立启动交易界面（可以多开）cd d:
cd d:\ide\vnstudio
python.exe -m vnstation runtrader "{'gateway': {'CTP': True}, 'app': {'CtaStrategy': True, 'PortfolioStrategy': True, 'PortfolioManager': True}, 'path': 'D:\\TradeTools\\vnpy\\jianxin_11859077'}"cd c:\ide\vnstudio
python.exe -m vnstation runtrader "{'gateway': {'CTP': True}, 'app': {'CtaStrategy': True, 'PortfolioStrategy': True, 'PortfolioManager': True}, 'path': r'C:\TradeTools\vnpy_work_root\simnow'}"四、 各个版本常见错误2.0.3版本1. 错误提示框太长，无法看到错误信息python.exe -m vnstation2. 错误提示：ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 from C header, got 192 from PyObject
解决方法：Scripts\pip.exe install numpy==1.16.1 --user3. 穿透式测试通不过，采集不到CPU、硬盘、BIOS信息修改环境变量
增加目录
C:\Windows\SysWOW64\wbem2.1.8版本1. Windows Server 2012 R2 错误提示：This Windows version (6.3.9600) does not support the required bluetooth API. Consider updating to a more recent Windows (10.0.10685 or above).解决方法：第一步：找到vnpy的QT的bin路径，例如我的是：C:\vnstudio\Lib\site-packages\PyQt5\Qt\bin第二步：找到Qt5Bluetooth.dll，并重命名为其它名，例如：Qt5Bluetooth.dll1