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",
|
|
|
|
|
"from vnpy.app.cta_strategy.strategies.turtle_signal_strategy import (\n",
|
|
|
|
|
" TurtleSignalStrategy,\n",
|
|
|
|
|
")\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-02-16 02:13:22 +00:00
|
|
|
|
" start=datetime(2018, 1, 1),\n",
|
|
|
|
|
" end=datetime(2018, 4, 30),\n",
|
|
|
|
|
" 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-02-16 02:13:22 +00:00
|
|
|
|
"2019-02-15 16:04:41.398818\t开始加载历史数据\n",
|
|
|
|
|
"2019-02-15 16:04:52.954926\t历史数据加载完成,数据量:135570\n",
|
|
|
|
|
"2019-02-15 16:04:54.248921\t策略初始化完成\n",
|
|
|
|
|
"2019-02-15 16:04:54.248921\t开始回放历史数据\n",
|
|
|
|
|
"2019-02-15 16:05:07.653733\t历史数据回放结束\n",
|
|
|
|
|
"2019-02-15 16:05:07.654709\t开始计算逐日盯市盈亏\n",
|
|
|
|
|
"2019-02-15 16:05:07.765065\t逐日盯市盈亏计算完成\n",
|
|
|
|
|
"2019-02-15 16:05:07.766042\t开始计算策略统计指标\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t------------------------------\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t首个交易日:\t2018-01-21\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t最后交易日:\t2018-04-05\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t总交易日:\t75\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t盈利交易日:\t28\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t亏损交易日:\t47\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t起始资金:\t1,000,000.00\n",
|
|
|
|
|
"2019-02-15 16:05:07.781667\t结束资金:\t-4,996,529.76\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t总收益率:\t-599.65%\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t年化收益:\t-1,918.89%\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t最大回撤: \t-7,982,815.30\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t百分比最大回撤: -1,307.96%\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t总盈亏:\t-5,996,529.76\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t总手续费:\t26,268,309.76\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t总滑点:\t1,871,880.00\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t总成交金额:\t87,561,032,520.00\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t总成交笔数:\t20745\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t日均盈亏:\t-79,953.73\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t日均手续费:\t350,244.13\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t日均滑点:\t24,958.40\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t日均成交金额:\t1,167,480,433.60\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t日均成交笔数:\t276.6\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t日均收益率:\t32.92%\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\t收益标准差:\t200.71%\n",
|
|
|
|
|
"2019-02-15 16:05:07.782644\tSharpe Ratio:\t2.54\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": [
|
|
|
|
|
"C:\\Github\\vnpy\\vnpy\\app\\cta_strategy\\backtesting.py:306: RuntimeWarning: invalid value encountered in log\n",
|
|
|
|
|
" df[\"return\"] = (np.log(df[\"balance\"] - np.log(df[\"balance\"].shift(1)))).fillna(\n"
|
2019-01-30 01:54:51 +00:00
|
|
|
|
]
|
2019-01-30 04:40:49 +00:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2019-02-16 02:13:22 +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",
|
|
|
|
|
"engine.add_strategy(TurtleSignalStrategy, {})\n",
|
|
|
|
|
"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
|
|
|
|
|
}
|