2019-01-29 07:35:37 +00:00
|
|
|
|
{
|
|
|
|
|
"cells": [
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 1,
|
|
|
|
|
"metadata": {},
|
2019-01-29 20:39:04 +00:00
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"#%%\n",
|
|
|
|
|
"from vnpy.app.cta_strategy.backtesting import BacktestingEngine\n",
|
2019-03-27 06:44:48 +00:00
|
|
|
|
"from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import (\n",
|
|
|
|
|
" AtrRsiStrategy,\n",
|
2019-01-29 20:39:04 +00:00
|
|
|
|
")\n",
|
|
|
|
|
"from datetime import datetime"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 2,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"#%%\n",
|
|
|
|
|
"engine = BacktestingEngine()\n",
|
|
|
|
|
"engine.set_parameters(\n",
|
2019-02-16 02:13:22 +00:00
|
|
|
|
" vt_symbol=\"XBTUSD.BITMEX\",\n",
|
2019-01-29 20:39:04 +00:00
|
|
|
|
" interval=\"1m\",\n",
|
2019-03-27 06:44:48 +00:00
|
|
|
|
" start=datetime(2013, 1, 1),\n",
|
|
|
|
|
" end=datetime(2019, 4, 30),\n",
|
2019-02-16 02:13:22 +00:00
|
|
|
|
" rate=3.0/10000,\n",
|
|
|
|
|
" slippage=0.2,\n",
|
2019-01-29 20:39:04 +00:00
|
|
|
|
" size=300,\n",
|
|
|
|
|
" pricetick=0.2,\n",
|
|
|
|
|
" capital=1_000_000,\n",
|
|
|
|
|
")"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 3,
|
|
|
|
|
"metadata": {
|
|
|
|
|
"scrolled": false
|
|
|
|
|
},
|
2019-01-29 07:35:37 +00:00
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
2019-01-29 20:39:04 +00:00
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
2019-03-27 06:44:48 +00:00
|
|
|
|
"2019-03-27 11:54:16.262535\t开始加载历史数据\n",
|
|
|
|
|
"2019-03-27 11:54:30.753671\t历史数据加载完成,数据量:147566\n",
|
|
|
|
|
"2019-03-27 11:54:31.390710\t策略初始化完成\n",
|
|
|
|
|
"2019-03-27 11:54:31.390710\t开始回放历史数据\n",
|
|
|
|
|
"2019-03-27 11:54:39.884536\t历史数据回放结束\n",
|
|
|
|
|
"2019-03-27 11:54:39.884536\t开始计算逐日盯市盈亏\n",
|
|
|
|
|
"2019-03-27 11:54:39.900121\t逐日盯市盈亏计算完成\n",
|
|
|
|
|
"2019-03-27 11:54:39.900121\t开始计算策略统计指标\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t------------------------------\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t首个交易日:\t2018-01-11\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t最后交易日:\t2019-02-15\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t总交易日:\t94\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t盈利交易日:\t27\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t亏损交易日:\t67\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t起始资金:\t1,000,000.00\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t结束资金:\t-6,174,412.20\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t总收益率:\t-717.44%\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t年化收益:\t-1,831.76%\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t最大回撤: \t-8,415,878.66\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t百分比最大回撤: -702.44%\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t总盈亏:\t-7,174,412.20\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t总手续费:\t6,900,212.20\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t总滑点:\t477,180.00\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t总成交金额:\t23,000,707,320.00\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t总成交笔数:\t7953\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t日均盈亏:\t-76,323.53\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t日均手续费:\t73,406.51\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t日均滑点:\t5,076.38\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t日均成交金额:\t244,688,375.74\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t日均成交笔数:\t84.6063829787234\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t日均收益率:\t-0.52%\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\t收益标准差:\t29.62%\n",
|
|
|
|
|
"2019-03-27 11:54:39.915706\tSharpe Ratio:\t-0.27\n"
|
2019-01-29 07:35:37 +00:00
|
|
|
|
]
|
2019-01-29 20:39:04 +00:00
|
|
|
|
},
|
|
|
|
|
{
|
2019-01-30 04:40:49 +00:00
|
|
|
|
"name": "stderr",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
2019-03-27 06:44:48 +00:00
|
|
|
|
"C:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\backtesting.py:331: RuntimeWarning: invalid value encountered in log\n",
|
|
|
|
|
" df[\"return\"] = np.log(df[\"balance\"] / df[\"balance\"].shift(1)).fillna(0)\n"
|
2019-01-30 01:54:51 +00:00
|
|
|
|
]
|
2019-01-30 04:40:49 +00:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2019-03-27 06:44:48 +00:00
|
|
|
|
"image/png": "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
|
2019-01-30 04:40:49 +00:00
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 720x1152 with 4 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {
|
|
|
|
|
"needs_background": "light"
|
|
|
|
|
},
|
|
|
|
|
"output_type": "display_data"
|
2019-01-29 07:35:37 +00:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
2019-01-29 20:39:04 +00:00
|
|
|
|
"#%%\n",
|
2019-03-27 06:44:48 +00:00
|
|
|
|
"engine.add_strategy(AtrRsiStrategy, {})\n",
|
2019-01-29 20:39:04 +00:00
|
|
|
|
"engine.load_data()\n",
|
|
|
|
|
"engine.run_backtesting()\n",
|
|
|
|
|
"df = engine.calculate_result()\n",
|
|
|
|
|
"engine.calculate_statistics()\n",
|
|
|
|
|
"engine.show_chart()"
|
2019-01-29 07:35:37 +00:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": []
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"metadata": {
|
|
|
|
|
"kernelspec": {
|
|
|
|
|
"display_name": "Python 3",
|
|
|
|
|
"language": "python",
|
|
|
|
|
"name": "python3"
|
|
|
|
|
},
|
|
|
|
|
"language_info": {
|
|
|
|
|
"codemirror_mode": {
|
|
|
|
|
"name": "ipython",
|
|
|
|
|
"version": 3
|
|
|
|
|
},
|
|
|
|
|
"file_extension": ".py",
|
|
|
|
|
"mimetype": "text/x-python",
|
|
|
|
|
"name": "python",
|
|
|
|
|
"nbconvert_exporter": "python",
|
|
|
|
|
"pygments_lexer": "ipython3",
|
|
|
|
|
"version": "3.7.1"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
"nbformat_minor": 2
|
|
|
|
|
}
|