Run backtest
(
data: pd.DataFrame,
code: Union[str, List[str]],
strategy: BaseStrategy,
signal: BaseSignal,
strategy_kwargs: Dict = STRATEGY_PARAMS,
commission_kwargs: Dict = COMMISSION,
workdir: Path = None,
)
| 90 | |
| 91 | |
| 92 | def test_backtest( |
| 93 | data: pd.DataFrame, |
| 94 | code: Union[str, List[str]], |
| 95 | strategy: BaseStrategy, |
| 96 | signal: BaseSignal, |
| 97 | strategy_kwargs: Dict = STRATEGY_PARAMS, |
| 98 | commission_kwargs: Dict = COMMISSION, |
| 99 | workdir: Path = None, |
| 100 | ) -> Any: |
| 101 | """Run backtest""" |
| 102 | combo_data: pd.DataFrame = signal(data).fit(data) |
| 103 | combo_data.set_index("trade_time", inplace=True) |
| 104 | |
| 105 | result = backtest_strategy( |
| 106 | data=combo_data, |
| 107 | code=code, |
| 108 | strategy=strategy, |
| 109 | strategy_kwargs=strategy_kwargs, |
| 110 | commission_kwargs=commission_kwargs, |
| 111 | ) |
| 112 | ax = plot_cumulative_return(result, title="Buy and Hold Strategy") |
| 113 | plt.savefig(workdir / "cumulative_return.png") if workdir else None |
| 114 | plt.close(ax.figure) |
| 115 | return { |
| 116 | "sharpe_ratio": get_strategy_sharpe_ratio(result), |
| 117 | "cumulative_return (%)": get_strategy_cumulative_return(result).iloc[-1], |
| 118 | "max_drawdown (%)": get_strategy_maxdrawdown(result), |
| 119 | "picture_path": str(workdir / "cumulative_return.png") if workdir else None |
| 120 | } |
nothing calls this directly
no test coverage detected