VNPY tutorial 0x06 第一个回测

根据vnpy_tutorial_0x02_futu数据连接好以后,

打开回测系统:功能 -> CTABacktester

  • Strategy策略:HackStrategy
  • VTSymbol本地代码:输入00700.SEHK
  • start Date开始时间:01/01/24
  • 手续费率:0.000025
  • Sip page交易清点:0.2
  • Size 合约乘数300
  • Price tick价格跳动0.2
  • Capital回测资金: 1000000.0

手续费率编辑框中输入0.000025(万0.25),交易滑点输入0.2(即单边成交1跳的滑点成本),合约乘数为300(300元每点),价格跳动也是0.2(股指期货最小价格变动),回测资金我们使用100万。

点击“开始回测”按钮,弹出参数配置对话框:

  • 然后点start Backtesting(开始回测)

这里显示的fast_window和slow_window就是之前我们添加到parameters列表中的参数名称,这里我们直接使用默认数值,点击“ok”按钮后, 我们的回测引擎就会自动开始执行策略回测的整个流程:

加载数据、数据回放、模拟撮合、计算每日盈亏、统计指标、

最后画出图表:

13:03:21	Initializing BacktesterEngine
13:03:21	Strategies imported
13:03:27	----------------------------------------
13:03:27	Start loading historical data
13:03:27	Loading progress: # [0%]
13:03:28	Loading progress: # [10%]
13:03:28	Loading progress: ## [20%]
13:03:29	Loading progress: ### [30%]
13:03:30	Loading progress: #### [40%]
13:03:31	Loading progress: ##### [50%]
13:03:32	Loading progress: ###### [59%]
13:03:33	Loading progress: ####### [69%]
13:03:34	Loading progress: ######## [79%]
13:03:35	Loading progress: ######### [89%]
13:03:36	Loading progress: ########## [99%]
13:03:36	Historical data loading completed, data count: 89852
13:03:36	Strategy initialization complete
13:03:36	Start replaying historical data
13:03:36	Backtesting progress: = [0%]
13:03:36	Backtesting progress: == [10%]
13:03:37	Backtesting progress: === [20%]
13:03:37	Backtesting progress: ==== [30%]
13:03:37	Backtesting progress: ===== [40%]
13:03:38	Backtesting progress: ====== [50%]
13:03:38	Backtesting progress: ======= [60%]
13:03:38	Backtesting progress: ======== [70%]
13:03:39	Backtesting progress: ========= [80%]
13:03:39	Backtesting progress: ========== [90%]
13:03:39	Backtesting progress: =========== [100%]
13:03:39	Historical backtest complete
13:03:39	Start calculating daily mark-to-market profit and loss
13:03:39	The daily mark-to-market profit and loss calculation is complete
13:03:39	Start calculating strategy statistical indicators
13:03:39	Strategy statistical indicators calculation completedcompleted```


![](https://xcy-1251434521.cos.ap-chengdu.myqcloud.com/picture/202409111309963.png?imageSlim)


- 子图1:资金变化曲线,笔直向下说明稳定亏损
- 子图2:最大回撤曲线,越来越大说明策略亏损越来越多
- 子图3:每日盈亏统计,红绿分布平均,但绿色密度更大(亏损)
- 子图4:盈亏的概率分布图,尖峰在0轴左侧(中位数日期发生亏损)


中间的数据说明

| 功能                           | 数据                |
| ---------------------------- | ----------------- |
| 首个交易日                        | 2016-08-15        |
| 最后交易日                        | 2019-07-31        |
| 总交易日                         | 721               |
| 盈利交易日                        | 265               |
| 亏损交易日                        | 456               |
| 起始资金                         | 1,000,000.00      |
| 结束资金                         | -1,204,558.24     |
| 总收益率                         | -220.46%          |
| 年化收益                         | -73.38%           |
| Max Drawdown最大回撤             | -2,219,999.08     |
| Max Drawdown Duration百分比最大回撤 | -220.15%          |
| Toal Net P&L总盈亏              | -2,204,558.24     |
| Total Commission总手续费         | 519,338.24        |
| Total Slippage总滑点            | 1,154,700.00      |
| Total Turnover总成交额           | 20,773,529,520.00 |
| Total Trade Count 总成交笔数      | 19245             |
| 日均盈亏                         | -3,057.64         |
| 日均手续费                        | 720.30            |
| 日均滑点                         | 1,601.53          |

# 功能说明


* Backtesting Trades 回测交易
* Backtesting Orders 回测订单
* Daily Results 每日资金数据结果
* Candle Chart 蜡烛图
* Start Optimization 开始优化
* Optimization Results 优化结果
* Edit Strategy Code 编辑策略代码
* Reload Strategy Class 重新载入策略代码


# 策略自定义参数


在HackStrategies.py中,改数据

```python

# 定义参数

fast_window = 10
slow_window = 20
+test_window = 30


# 定义变量
fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0
+test_ma0 = 0.0
+test_ma1 = 0.0

# 添加参数和变量名到对应的列表
#parameters = ["fast_window", "slow_window"]
parameters = ["fast_window", "slow_window", "test_window"]
#variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]
variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1", "test_ma0", "test_ma1"]

下面的Start Optimization 开始优化章节会提到。

Start Optimization 开始优化

点start Backtesting(开始回测)

我们想要看看

  • fast_window,从2到20(步进2),

  • slow_window,从20到100(步进10)

  • test_window,先不管。

  • step:增加步数。例:开始1,结束100,步数为2,那么1,3,5,7

  • Brutal force optimization暴力穷举优化:把所有可能都显示一次

  • Genetic algorithm optimization遗传算法优化

我们选择Brutal force optimization暴力穷举优化开始跑数据,等待结果出来

 

查看优化结果,点击Optimization Results 优化结果可以看见哪个参数的效果最好。

fast_window数据:30 slow_window数据:90

效果最好,亏得最少。只有-17%,本来亏损是64%,进步很大 2 本来

回测教程