1
0

尝试构建回测模块

This commit is contained in:
2025-02-13 18:21:54 +08:00
parent e1eba0559e
commit 46a539cf72
2 changed files with 52 additions and 627 deletions

6
poetry.lock generated
View File

@@ -15,14 +15,14 @@ files = [
[[package]] [[package]]
name = "akshare" name = "akshare"
version = "1.15.85" version = "1.15.87"
description = "AKShare is an elegant and simple financial data interface library for Python, built for human beings!" description = "AKShare is an elegant and simple financial data interface library for Python, built for human beings!"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["main"]
files = [ files = [
{file = "akshare-1.15.85-py3-none-any.whl", hash = "sha256:46c2c96027a9588d838c41b7613cef4cee049d9961f9d592fc8165ab4b460343"}, {file = "akshare-1.15.87-py3-none-any.whl", hash = "sha256:ed1d2da86e3df65aea6838c90dc88f148ce93bbf6ae157f23d114f33d2610bec"},
{file = "akshare-1.15.85.tar.gz", hash = "sha256:fad37fe3684a8d026d8dab802580f393d69969d35fd23106c72757a6dab22f7a"}, {file = "akshare-1.15.87.tar.gz", hash = "sha256:c92cf6401097f268a1ddfea7d906fb435171fb50d4b0d1a8ff46ce092a6a7d51"},
] ]
[package.dependencies] [package.dependencies]

View File

@@ -3,21 +3,19 @@
{ {
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2025-02-11T14:54:41.551895Z", "end_time": "2025-02-13T09:38:30.408310Z",
"start_time": "2025-02-11T14:54:41.503584Z" "start_time": "2025-02-13T09:38:30.328797Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
"source": [ "source": [
"import backtrader as bt\n", "import backtrader as bt\n",
"import backtrader.indicators as btind\n",
"import backtrader.feeds as btfeeds\n",
"import pandas as pd\n", "import pandas as pd\n",
"\n", "\n",
"# source_df = pd.read_csv(\"/Users/lanyuanxiaoyao/SynologyDrive/data/Tushare/日线行情 1990-2024/分组行情/600519.SH.csv\") \\\n", "# source_df = \\\n",
"source_df = \\\n", "# pd.read_csv(\"C:\\\\Users\\\\lanyuanxiaoyao\\\\SynologyDrive\\\\data\\\\Tushare\\\\日线行情 1990-2024\\\\分组行情\\\\000001.SZ.csv\")[\n",
" pd.read_csv(\"C:\\\\Users\\\\lanyuanxiaoyao\\\\SynologyDrive\\\\data\\\\Tushare\\\\日线行情 1990-2024\\\\分组行情\\\\000001.SZ.csv\")[\n", "source_df = pd.read_csv(\"/Users/lanyuanxiaoyao/SynologyDrive/data/Tushare/日线行情 1990-2024/分组行情/600519.SH.csv\") \\\n",
" [\"trade_date\", \"vol\", \"open_qfq\", \"close_qfq\", \"high_qfq\", \"low_qfq\", \"macd\", \"macd_dif\", \"macd_dea\"]]\n", " [[\"trade_date\", \"vol\", \"open_qfq\", \"close_qfq\", \"high_qfq\", \"low_qfq\", \"macd\", \"macd_dif\", \"macd_dea\"]]\n",
"df = pd.DataFrame()\n", "df = pd.DataFrame()\n",
"df[[\"date\", \"volume\", \"open\", \"close\", \"high\", \"low\", \"macd\", \"macd_dif\", \"macd_dea\"]] = \\\n", "df[[\"date\", \"volume\", \"open\", \"close\", \"high\", \"low\", \"macd\", \"macd_dif\", \"macd_dea\"]] = \\\n",
" source_df[[\"trade_date\", \"vol\", \"open_qfq\", \"close_qfq\", \"high_qfq\", \"low_qfq\", \"macd\", \"macd_dif\", \"macd_dea\"]]\n", " source_df[[\"trade_date\", \"vol\", \"open_qfq\", \"close_qfq\", \"high_qfq\", \"low_qfq\", \"macd\", \"macd_dif\", \"macd_dea\"]]\n",
@@ -26,282 +24,35 @@
"df = df[df[\"datetime\"].dt.year > 2010]\n", "df = df[df[\"datetime\"].dt.year > 2010]\n",
"df.sort_values(by='datetime', inplace=True)\n", "df.sort_values(by='datetime', inplace=True)\n",
"df.set_index('datetime', inplace=True)\n", "df.set_index('datetime', inplace=True)\n",
"df" "# df"
], ],
"id": "157a87ab33037c6e", "id": "157a87ab33037c6e",
"outputs": [ "outputs": [],
{ "execution_count": 46
"data": {
"text/plain": [
" date volume open close high low \\\n",
"datetime \n",
"2011-01-04 20110104 358840.61 4.44526 4.50145 4.54641 4.39749 \n",
"2011-01-05 20110105 237462.63 4.49302 4.47616 4.53236 4.47054 \n",
"2011-01-06 20110106 206531.27 4.47616 4.44245 4.51831 4.41154 \n",
"2011-01-07 20110107 770482.21 4.43964 4.61104 4.71501 4.41154 \n",
"2011-01-10 20110110 361872.13 4.56046 4.49021 4.60823 4.46773 \n",
"... ... ... ... ... ... ... \n",
"2024-12-25 20241225 1475282.94 11.86000 11.92000 12.02000 11.84000 \n",
"2024-12-26 20241226 1000074.70 11.92000 11.86000 11.93000 11.78000 \n",
"2024-12-27 20241227 1290012.28 11.87000 11.83000 11.90000 11.66000 \n",
"2024-12-30 20241230 1351846.36 11.78000 11.95000 11.97000 11.78000 \n",
"2024-12-31 20241231 1475367.33 11.93000 11.70000 11.99000 11.70000 \n",
"\n",
" macd macd_dif macd_dea datetime_text \n",
"datetime \n",
"2011-01-04 -0.003 -0.088 -0.087 20110104 \n",
"2011-01-05 0.003 -0.085 -0.087 20110105 \n",
"2011-01-06 0.003 -0.085 -0.086 20110106 \n",
"2011-01-07 0.027 -0.070 -0.083 20110107 \n",
"2011-01-10 0.026 -0.067 -0.080 20110110 \n",
"... ... ... ... ... \n",
"2024-12-25 0.050 0.080 0.055 20241225 \n",
"2024-12-26 0.051 0.087 0.062 20241226 \n",
"2024-12-27 0.044 0.089 0.067 20241227 \n",
"2024-12-30 0.052 0.100 0.074 20241230 \n",
"2024-12-31 0.020 0.086 0.076 20241231 \n",
"\n",
"[3381 rows x 10 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date</th>\n",
" <th>volume</th>\n",
" <th>open</th>\n",
" <th>close</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>macd</th>\n",
" <th>macd_dif</th>\n",
" <th>macd_dea</th>\n",
" <th>datetime_text</th>\n",
" </tr>\n",
" <tr>\n",
" <th>datetime</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2011-01-04</th>\n",
" <td>20110104</td>\n",
" <td>358840.61</td>\n",
" <td>4.44526</td>\n",
" <td>4.50145</td>\n",
" <td>4.54641</td>\n",
" <td>4.39749</td>\n",
" <td>-0.003</td>\n",
" <td>-0.088</td>\n",
" <td>-0.087</td>\n",
" <td>20110104</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011-01-05</th>\n",
" <td>20110105</td>\n",
" <td>237462.63</td>\n",
" <td>4.49302</td>\n",
" <td>4.47616</td>\n",
" <td>4.53236</td>\n",
" <td>4.47054</td>\n",
" <td>0.003</td>\n",
" <td>-0.085</td>\n",
" <td>-0.087</td>\n",
" <td>20110105</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011-01-06</th>\n",
" <td>20110106</td>\n",
" <td>206531.27</td>\n",
" <td>4.47616</td>\n",
" <td>4.44245</td>\n",
" <td>4.51831</td>\n",
" <td>4.41154</td>\n",
" <td>0.003</td>\n",
" <td>-0.085</td>\n",
" <td>-0.086</td>\n",
" <td>20110106</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011-01-07</th>\n",
" <td>20110107</td>\n",
" <td>770482.21</td>\n",
" <td>4.43964</td>\n",
" <td>4.61104</td>\n",
" <td>4.71501</td>\n",
" <td>4.41154</td>\n",
" <td>0.027</td>\n",
" <td>-0.070</td>\n",
" <td>-0.083</td>\n",
" <td>20110107</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011-01-10</th>\n",
" <td>20110110</td>\n",
" <td>361872.13</td>\n",
" <td>4.56046</td>\n",
" <td>4.49021</td>\n",
" <td>4.60823</td>\n",
" <td>4.46773</td>\n",
" <td>0.026</td>\n",
" <td>-0.067</td>\n",
" <td>-0.080</td>\n",
" <td>20110110</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-12-25</th>\n",
" <td>20241225</td>\n",
" <td>1475282.94</td>\n",
" <td>11.86000</td>\n",
" <td>11.92000</td>\n",
" <td>12.02000</td>\n",
" <td>11.84000</td>\n",
" <td>0.050</td>\n",
" <td>0.080</td>\n",
" <td>0.055</td>\n",
" <td>20241225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-12-26</th>\n",
" <td>20241226</td>\n",
" <td>1000074.70</td>\n",
" <td>11.92000</td>\n",
" <td>11.86000</td>\n",
" <td>11.93000</td>\n",
" <td>11.78000</td>\n",
" <td>0.051</td>\n",
" <td>0.087</td>\n",
" <td>0.062</td>\n",
" <td>20241226</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-12-27</th>\n",
" <td>20241227</td>\n",
" <td>1290012.28</td>\n",
" <td>11.87000</td>\n",
" <td>11.83000</td>\n",
" <td>11.90000</td>\n",
" <td>11.66000</td>\n",
" <td>0.044</td>\n",
" <td>0.089</td>\n",
" <td>0.067</td>\n",
" <td>20241227</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-12-30</th>\n",
" <td>20241230</td>\n",
" <td>1351846.36</td>\n",
" <td>11.78000</td>\n",
" <td>11.95000</td>\n",
" <td>11.97000</td>\n",
" <td>11.78000</td>\n",
" <td>0.052</td>\n",
" <td>0.100</td>\n",
" <td>0.074</td>\n",
" <td>20241230</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-12-31</th>\n",
" <td>20241231</td>\n",
" <td>1475367.33</td>\n",
" <td>11.93000</td>\n",
" <td>11.70000</td>\n",
" <td>11.99000</td>\n",
" <td>11.70000</td>\n",
" <td>0.020</td>\n",
" <td>0.086</td>\n",
" <td>0.076</td>\n",
" <td>20241231</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>3381 rows × 10 columns</p>\n",
"</div>"
]
}, },
"execution_count": 38, {
"metadata": {}, "metadata": {},
"output_type": "execute_result" "cell_type": "code",
} "outputs": [],
], "execution_count": null,
"execution_count": 38 "source": "",
"id": "12fde7bfaddbdf4"
}, },
{ {
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2025-02-11T14:54:41.578827Z", "end_time": "2025-02-13T09:36:52.737860Z",
"start_time": "2025-02-11T14:54:41.573382Z" "start_time": "2025-02-13T09:36:51.459915Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
"source": [ "source": [
"import calendar\n",
"\n",
"cerebro = bt.Cerebro()\n", "cerebro = bt.Cerebro()\n",
"\n", "\n",
"data_feed = bt.feeds.PandasData(dataname=df)\n", "data_feed = bt.feeds.PandasData(dataname=df)\n",
"cerebro.adddata(data_feed)" "cerebro.adddata(data_feed)\n",
],
"id": "e8d5d0798ade1de8",
"outputs": [
{
"data": {
"text/plain": [
"<backtrader.feeds.pandafeed.PandasData at 0x1d1584ef4a0>"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 39
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T14:54:41.630454Z",
"start_time": "2025-02-11T14:54:41.626259Z"
}
},
"cell_type": "code",
"source": [
"# 初始资金 100,000,000\n", "# 初始资金 100,000,000\n",
"cerebro.broker.setcash(100000000.0)\n", "cerebro.broker.setcash(100000000.0)\n",
"# 佣金,双边各 0.0003\n", "# 佣金,双边各 0.0003\n",
@@ -311,73 +62,18 @@
"cerebro.addanalyzer(bt.analyzers.TimeReturn, _name='pnl') # 返回收益率时序数据\n", "cerebro.addanalyzer(bt.analyzers.TimeReturn, _name='pnl') # 返回收益率时序数据\n",
"cerebro.addanalyzer(bt.analyzers.AnnualReturn, _name='_AnnualReturn') # 年化收益率\n", "cerebro.addanalyzer(bt.analyzers.AnnualReturn, _name='_AnnualReturn') # 年化收益率\n",
"cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='_SharpeRatio') # 夏普比率\n", "cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='_SharpeRatio') # 夏普比率\n",
"cerebro.addanalyzer(bt.analyzers.DrawDown, _name='_DrawDown') # 回撤" "cerebro.addanalyzer(bt.analyzers.DrawDown, _name='_DrawDown') # 回撤\n",
], "\n",
"id": "3b96d94a8ef3b7d4", "\n",
"outputs": [],
"execution_count": 40
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-11T14:54:42.085236Z",
"start_time": "2025-02-11T14:54:41.716867Z"
}
},
"cell_type": "code",
"source": [
"# 创建策略类\n", "# 创建策略类\n",
"class DoubleMAStrategy(bt.Strategy):\n", "class TestStrategy(bt.Strategy):\n",
" \"\"\"\n",
" 这是一个基于简单移动平均线交叉的策略。\n",
" 参数:\n",
" - params = (short_window, long_window)\n",
" short_window: 短期均线窗口(默认 10 天)\n",
" long_window: 长期均线窗口(默认 30 天)\n",
" \"\"\"\n",
" params = (\n",
" ('short_window', 10), # 短期均线窗口\n",
" ('long_window', 30) # 长期均线窗口\n",
" )\n",
"\n",
" def __init__(self):\n",
" # 初始化短期和长期移动平均线\n",
" self.sma_short = bt.indicators.SimpleMovingAverage(\n",
" self.data.close, period=self.params.short_window, plotname='Short SMA'\n",
" )\n",
" self.sma_long = bt.indicators.SimpleMovingAverage(\n",
" self.data.close, period=self.params.long_window, plotname='Long SMA'\n",
" )\n",
"\n",
" # 记录交易状态(是否持仓)和订单信息\n",
" self.order = None\n",
" self.is_in_position = False\n",
"\n",
" def next(self):\n", " def next(self):\n",
" \"\"\"\n", " curr_date = self.datetime.date()\n",
" 在每个交易日执行的逻辑。\n", " _, last_day_month = calendar.monthrange(curr_date.year, curr_date.month)\n",
" \"\"\"\n", " if curr_date.day == 1:\n",
" # 检查是否有待处理的订单,如果有则跳过\n", " self.buy()\n",
" if self.order:\n", " elif curr_date.day == last_day_month:\n",
" return\n", " self.sell()\n",
"\n",
" # 获取当前的短期和长期均线值\n",
" sma_short_value = self.sma_short[0]\n",
" sma_long_value = self.sma_long[0]\n",
"\n",
" # 如果短期均线向上穿过长期均线,且没有持仓\n",
" if sma_short_value > sma_long_value and not self.is_in_position:\n",
" # 发出买入信号\n",
" self.log(f'BUY CREATE, {self.data.close[0]:.2f}')\n",
" self.order = self.buy() # 下买单\n",
" self.is_in_position = True\n",
"\n",
" # 如果短期均线向下穿过长期均线,且有持仓\n",
" elif sma_short_value < sma_long_value and self.is_in_position:\n",
" # 发出卖出信号\n",
" self.log(f'SELL CREATE, {self.data.close[0]:.2f}')\n",
" self.order = self.sell() # 下卖单\n",
" self.is_in_position = False\n",
"\n", "\n",
" def log(self, txt, dt=None):\n", " def log(self, txt, dt=None):\n",
" \"\"\"\n", " \"\"\"\n",
@@ -386,57 +82,30 @@
" dt = dt or self.datas[0].datetime.date(0)\n", " dt = dt or self.datas[0].datetime.date(0)\n",
" print(f'{dt.isoformat()}, {txt}')\n", " print(f'{dt.isoformat()}, {txt}')\n",
"\n", "\n",
" def notify_order(self, order):\n",
" \"\"\"\n",
" 订单状态改变时调用。\n",
" \"\"\"\n",
" if order.status in [order.Submitted, order.Accepted]:\n",
" # 订单提交和接受时,无需处理\n",
" return\n",
"\n",
" # 检查订单是否已完成\n",
" if order.status in [order.Completed]:\n",
" if order.isbuy():\n",
" self.log(\n",
" f'BUY EXECUTED, Price: {order.executed.price:.2f}, Cost: {order.executed.value:.2f}, Comm: {order.executed.comm:.2f}'\n",
" )\n",
" elif order.issell():\n",
" self.log(\n",
" f'SELL EXECUTED, Price: {order.executed.price:.2f}, Cost: {order.executed.value:.2f}, Comm: {order.executed.comm:.2f}'\n",
" )\n",
"\n",
" # 或者订单因某些原因被拒绝\n",
" elif order.status in [order.Canceled, order.Margin, order.Rejected]:\n",
" self.log('Order Canceled/Margin/Rejected')\n",
"\n",
" # 重置订单\n",
" self.order = None\n",
"\n",
"\n", "\n",
"# 将编写的策略添加给大脑,别忘了 \n", "# 将编写的策略添加给大脑,别忘了 \n",
"cerebro.addstrategy(DoubleMAStrategy)\n", "cerebro.addstrategy(TestStrategy)\n",
"\n", "\n",
"print('初始资金: %.2f' % cerebro.broker.getvalue())\n", "print('初始资金: %.2f' % cerebro.broker.getvalue())\n",
"results = cerebro.run()\n", "results = cerebro.run()\n",
"print('最终资金: %.2f' % cerebro.broker.getvalue())\n", "print('最终资金: %.2f' % cerebro.broker.getvalue())\n",
"\n",
"# 获取分析结果\n", "# 获取分析结果\n",
"strat = results[0]\n", "strat = results[0]\n",
"print('夏普比率:', strat.analyzers._SharpeRatio.get_analysis()['sharperatio'])\n", "print('夏普比率:', strat.analyzers._SharpeRatio.get_analysis()['sharperatio'])\n",
"print('最大回撤:', strat.analyzers._DrawDown.get_analysis()['max']['drawdown'])\n", "print('最大回撤:', strat.analyzers._DrawDown.get_analysis()['max']['drawdown'])\n",
"\n", "\n",
"# 返回日度收益率序列\n", "# # 返回日度收益率序列\n",
"daily_return = pd.Series(strat.analyzers.pnl.get_analysis())\n", "# daily_return = pd.Series(strat.analyzers.pnl.get_analysis())\n",
"# 打印评价指标\n", "# # 打印评价指标\n",
"print(\"--------------- AnnualReturn -----------------\")\n", "# print(\"--------------- AnnualReturn -----------------\")\n",
"print(strat.analyzers._AnnualReturn.get_analysis())\n", "# print(strat.analyzers._AnnualReturn.get_analysis())\n",
"print(\"--------------- SharpeRatio -----------------\")\n", "# print(\"--------------- SharpeRatio -----------------\")\n",
"print(strat.analyzers._SharpeRatio.get_analysis())\n", "# print(strat.analyzers._SharpeRatio.get_analysis())\n",
"print(\"--------------- DrawDown -----------------\")\n", "# print(\"--------------- DrawDown -----------------\")\n",
"print(strat.analyzers._DrawDown.get_analysis())\n", "# print(strat.analyzers._DrawDown.get_analysis())\n",
"\n", "\n",
"# 绘制结果图表\n", "# 绘制结果图表\n",
"cerebro.plot(style='candlestick')" "cerebro.plot(style='candlestick', width=20, height=10)"
], ],
"id": "45f8133af2348b95", "id": "45f8133af2348b95",
"outputs": [ "outputs": [
@@ -445,253 +114,9 @@
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"初始资金: 100000000.00\n", "初始资金: 100000000.00\n",
"2011-02-21, BUY CREATE, 4.49\n", "最终资金: 99982677.31\n",
"2011-02-22, BUY EXECUTED, Price: 4.49, Cost: 4.49, Comm: 0.00\n", "夏普比率: -249.45833106775427\n",
"2011-03-23, SELL CREATE, 4.52\n", "最大回撤: 0.03266399519865984\n"
"2011-03-24, SELL EXECUTED, Price: 4.52, Cost: 4.49, Comm: 0.00\n",
"2011-03-31, BUY CREATE, 4.52\n",
"2011-04-01, BUY EXECUTED, Price: 4.52, Cost: 4.52, Comm: 0.00\n",
"2011-05-23, SELL CREATE, 5.03\n",
"2011-05-24, SELL EXECUTED, Price: 5.00, Cost: 4.52, Comm: 0.00\n",
"2011-07-05, BUY CREATE, 4.89\n",
"2011-07-06, BUY EXECUTED, Price: 4.86, Cost: 4.86, Comm: 0.00\n",
"2011-08-02, SELL CREATE, 4.78\n",
"2011-08-03, SELL EXECUTED, Price: 4.71, Cost: 4.86, Comm: 0.00\n",
"2011-09-06, BUY CREATE, 4.60\n",
"2011-09-07, BUY EXECUTED, Price: 4.63, Cost: 4.63, Comm: 0.00\n",
"2011-09-13, SELL CREATE, 4.64\n",
"2011-09-14, SELL EXECUTED, Price: 4.65, Cost: 4.63, Comm: 0.00\n",
"2011-09-21, BUY CREATE, 4.79\n",
"2011-09-22, BUY EXECUTED, Price: 4.74, Cost: 4.74, Comm: 0.00\n",
"2011-09-22, SELL CREATE, 4.69\n",
"2011-09-23, SELL EXECUTED, Price: 4.61, Cost: 4.74, Comm: 0.00\n",
"2011-10-28, BUY CREATE, 4.79\n",
"2011-10-31, BUY EXECUTED, Price: 4.79, Cost: 4.79, Comm: 0.00\n",
"2011-11-21, SELL CREATE, 4.48\n",
"2011-11-22, SELL EXECUTED, Price: 4.47, Cost: 4.79, Comm: 0.00\n",
"2012-01-30, BUY CREATE, 4.70\n",
"2012-01-31, BUY EXECUTED, Price: 4.70, Cost: 4.70, Comm: 0.00\n",
"2012-03-16, SELL CREATE, 4.61\n",
"2012-03-19, SELL EXECUTED, Price: 4.59, Cost: 4.70, Comm: 0.00\n",
"2012-04-23, BUY CREATE, 4.61\n",
"2012-04-24, BUY EXECUTED, Price: 4.61, Cost: 4.61, Comm: 0.00\n",
"2012-05-17, SELL CREATE, 4.48\n",
"2012-05-18, SELL EXECUTED, Price: 4.44, Cost: 4.61, Comm: 0.00\n",
"2012-08-08, BUY CREATE, 4.23\n",
"2012-08-09, BUY EXECUTED, Price: 4.22, Cost: 4.22, Comm: 0.00\n",
"2012-08-23, SELL CREATE, 4.11\n",
"2012-08-24, SELL EXECUTED, Price: 4.10, Cost: 4.22, Comm: 0.00\n",
"2012-10-29, BUY CREATE, 3.66\n",
"2012-10-30, BUY EXECUTED, Price: 3.66, Cost: 3.66, Comm: 0.00\n",
"2012-11-22, SELL CREATE, 3.72\n",
"2012-11-23, SELL EXECUTED, Price: 3.73, Cost: 3.66, Comm: 0.00\n",
"2012-12-11, BUY CREATE, 3.99\n",
"2012-12-12, BUY EXECUTED, Price: 4.00, Cost: 4.00, Comm: 0.00\n",
"2013-04-02, SELL CREATE, 5.79\n",
"2013-04-03, SELL EXECUTED, Price: 5.82, Cost: 4.00, Comm: 0.00\n",
"2013-05-14, BUY CREATE, 5.46\n",
"2013-05-15, BUY EXECUTED, Price: 5.46, Cost: 5.46, Comm: 0.00\n",
"2013-06-17, SELL CREATE, 5.45\n",
"2013-06-18, SELL EXECUTED, Price: 5.51, Cost: 5.46, Comm: 0.00\n",
"2013-08-05, BUY CREATE, 4.54\n",
"2013-08-06, BUY EXECUTED, Price: 4.51, Cost: 4.51, Comm: 0.00\n",
"2013-12-05, SELL CREATE, 6.14\n",
"2013-12-06, SELL EXECUTED, Price: 6.15, Cost: 4.51, Comm: 0.00\n",
"2014-02-17, BUY CREATE, 5.47\n",
"2014-02-18, BUY EXECUTED, Price: 5.44, Cost: 5.44, Comm: 0.00\n",
"2014-02-27, SELL CREATE, 5.14\n",
"2014-02-28, SELL EXECUTED, Price: 5.10, Cost: 5.44, Comm: 0.00\n",
"2014-04-03, BUY CREATE, 4.92\n",
"2014-04-04, BUY EXECUTED, Price: 4.89, Cost: 4.89, Comm: 0.00\n",
"2014-07-17, SELL CREATE, 5.33\n",
"2014-07-18, SELL EXECUTED, Price: 5.31, Cost: 4.89, Comm: 0.00\n",
"2014-07-28, BUY CREATE, 5.99\n",
"2014-07-29, BUY EXECUTED, Price: 6.02, Cost: 6.02, Comm: 0.00\n",
"2014-08-28, SELL CREATE, 5.64\n",
"2014-08-29, SELL EXECUTED, Price: 5.64, Cost: 6.02, Comm: 0.00\n",
"2014-10-31, BUY CREATE, 6.13\n",
"2014-11-03, BUY EXECUTED, Price: 6.21, Cost: 6.21, Comm: 0.00\n",
"2015-01-21, SELL CREATE, 8.02\n",
"2015-01-22, SELL EXECUTED, Price: 7.97, Cost: 6.21, Comm: 0.00\n",
"2015-03-13, BUY CREATE, 8.34\n",
"2015-03-16, BUY EXECUTED, Price: 8.40, Cost: 8.40, Comm: 0.00\n",
"2015-05-15, SELL CREATE, 10.40\n",
"2015-05-18, SELL EXECUTED, Price: 10.23, Cost: 8.40, Comm: 0.00\n",
"2015-06-04, BUY CREATE, 11.02\n",
"2015-06-05, BUY EXECUTED, Price: 11.24, Cost: 11.24, Comm: 0.00\n",
"2015-06-23, SELL CREATE, 10.06\n",
"2015-06-24, SELL EXECUTED, Price: 10.09, Cost: 11.24, Comm: 0.00\n",
"2015-10-19, BUY CREATE, 7.58\n",
"2015-10-20, BUY EXECUTED, Price: 7.54, Cost: 7.54, Comm: 0.00\n",
"2015-12-08, SELL CREATE, 8.05\n",
"2015-12-09, SELL EXECUTED, Price: 8.02, Cost: 7.54, Comm: 0.00\n",
"2015-12-25, BUY CREATE, 8.35\n",
"2015-12-28, BUY EXECUTED, Price: 8.37, Cost: 8.37, Comm: 0.00\n",
"2016-01-05, SELL CREATE, 7.67\n",
"2016-01-06, SELL EXECUTED, Price: 7.68, Cost: 8.37, Comm: 0.00\n",
"2016-03-10, BUY CREATE, 6.83\n",
"2016-03-11, BUY EXECUTED, Price: 6.80, Cost: 6.80, Comm: 0.00\n",
"2016-04-28, SELL CREATE, 7.17\n",
"2016-04-29, SELL EXECUTED, Price: 7.16, Cost: 6.80, Comm: 0.00\n",
"2016-06-08, BUY CREATE, 7.07\n",
"2016-06-13, BUY EXECUTED, Price: 7.04, Cost: 7.04, Comm: 0.00\n",
"2016-09-14, SELL CREATE, 7.43\n",
"2016-09-19, SELL EXECUTED, Price: 7.42, Cost: 7.04, Comm: 0.00\n",
"2016-10-28, BUY CREATE, 7.52\n",
"2016-10-31, BUY EXECUTED, Price: 7.50, Cost: 7.50, Comm: 0.00\n",
"2016-12-21, SELL CREATE, 7.51\n",
"2016-12-22, SELL EXECUTED, Price: 7.50, Cost: 7.50, Comm: 0.00\n",
"2017-01-24, BUY CREATE, 7.60\n",
"2017-01-25, BUY EXECUTED, Price: 7.60, Cost: 7.60, Comm: 0.00\n",
"2017-03-17, SELL CREATE, 7.63\n",
"2017-03-20, SELL EXECUTED, Price: 7.62, Cost: 7.60, Comm: 0.00\n",
"2017-05-31, BUY CREATE, 7.54\n",
"2017-06-01, BUY EXECUTED, Price: 7.54, Cost: 7.54, Comm: 0.00\n",
"2017-08-17, SELL CREATE, 8.67\n",
"2017-08-18, SELL EXECUTED, Price: 8.62, Cost: 7.54, Comm: 0.00\n",
"2017-08-29, BUY CREATE, 9.71\n",
"2017-08-30, BUY EXECUTED, Price: 9.72, Cost: 9.72, Comm: 0.00\n",
"2017-09-28, SELL CREATE, 9.05\n",
"2017-09-29, SELL EXECUTED, Price: 9.08, Cost: 9.72, Comm: 0.00\n",
"2017-10-18, BUY CREATE, 9.73\n",
"2017-10-19, BUY EXECUTED, Price: 9.68, Cost: 9.68, Comm: 0.00\n",
"2017-12-14, SELL CREATE, 10.82\n",
"2017-12-15, SELL EXECUTED, Price: 10.73, Cost: 9.68, Comm: 0.00\n",
"2018-01-04, BUY CREATE, 11.02\n",
"2018-01-05, BUY EXECUTED, Price: 10.99, Cost: 10.99, Comm: 0.00\n",
"2018-02-08, SELL CREATE, 10.43\n",
"2018-02-09, SELL EXECUTED, Price: 10.05, Cost: 10.99, Comm: 0.00\n",
"2018-04-23, BUY CREATE, 9.63\n",
"2018-04-24, BUY EXECUTED, Price: 9.68, Cost: 9.68, Comm: 0.00\n",
"2018-05-07, SELL CREATE, 8.99\n",
"2018-05-08, SELL EXECUTED, Price: 9.01, Cost: 9.68, Comm: 0.00\n",
"2018-07-27, BUY CREATE, 7.82\n",
"2018-07-30, BUY EXECUTED, Price: 7.88, Cost: 7.88, Comm: 0.00\n",
"2018-08-17, SELL CREATE, 7.45\n",
"2018-08-20, SELL EXECUTED, Price: 7.52, Cost: 7.88, Comm: 0.00\n",
"2018-08-24, BUY CREATE, 8.48\n",
"2018-08-27, BUY EXECUTED, Price: 8.47, Cost: 8.47, Comm: 0.00\n",
"2018-11-19, SELL CREATE, 9.17\n",
"2018-11-20, SELL EXECUTED, Price: 9.09, Cost: 8.47, Comm: 0.00\n",
"2019-01-16, BUY CREATE, 8.86\n",
"2019-01-17, BUY EXECUTED, Price: 8.91, Cost: 8.91, Comm: 0.00\n",
"2019-05-10, SELL CREATE, 10.72\n",
"2019-05-13, SELL EXECUTED, Price: 10.42, Cost: 8.91, Comm: 0.00\n",
"2019-06-19, BUY CREATE, 11.05\n",
"2019-06-20, BUY EXECUTED, Price: 11.14, Cost: 11.14, Comm: 0.00\n",
"2019-09-03, SELL CREATE, 12.22\n",
"2019-09-04, SELL EXECUTED, Price: 12.23, Cost: 11.14, Comm: 0.00\n",
"2019-09-09, BUY CREATE, 12.55\n",
"2019-09-10, BUY EXECUTED, Price: 12.47, Cost: 12.47, Comm: 0.00\n",
"2019-11-18, SELL CREATE, 14.05\n",
"2019-11-19, SELL EXECUTED, Price: 14.05, Cost: 12.47, Comm: 0.00\n",
"2019-12-19, BUY CREATE, 14.14\n",
"2019-12-20, BUY EXECUTED, Price: 14.14, Cost: 14.14, Comm: 0.00\n",
"2020-01-23, SELL CREATE, 13.28\n",
"2020-02-03, SELL EXECUTED, Price: 11.95, Cost: 14.14, Comm: 0.00\n",
"2020-04-24, BUY CREATE, 11.31\n",
"2020-04-27, BUY EXECUTED, Price: 11.36, Cost: 11.36, Comm: 0.00\n",
"2020-05-26, SELL CREATE, 11.14\n",
"2020-05-27, SELL EXECUTED, Price: 11.15, Cost: 11.36, Comm: 0.00\n",
"2020-06-08, BUY CREATE, 11.84\n",
"2020-06-09, BUY EXECUTED, Price: 11.85, Cost: 11.85, Comm: 0.00\n",
"2020-06-18, SELL CREATE, 11.09\n",
"2020-06-19, SELL EXECUTED, Price: 11.06, Cost: 11.85, Comm: 0.00\n",
"2020-07-06, BUY CREATE, 13.63\n",
"2020-07-07, BUY EXECUTED, Price: 14.17, Cost: 14.17, Comm: 0.00\n",
"2020-07-30, SELL CREATE, 11.62\n",
"2020-07-31, SELL EXECUTED, Price: 11.54, Cost: 14.17, Comm: 0.00\n",
"2020-08-18, BUY CREATE, 13.17\n",
"2020-08-19, BUY EXECUTED, Price: 13.13, Cost: 13.13, Comm: 0.00\n",
"2020-12-18, SELL CREATE, 15.96\n",
"2020-12-21, SELL EXECUTED, Price: 15.90, Cost: 13.13, Comm: 0.00\n",
"2021-01-08, BUY CREATE, 17.25\n",
"2021-01-11, BUY EXECUTED, Price: 17.38, Cost: 17.38, Comm: 0.01\n",
"2021-03-02, SELL CREATE, 18.81\n",
"2021-03-03, SELL EXECUTED, Price: 18.75, Cost: 17.38, Comm: 0.01\n",
"2021-04-08, BUY CREATE, 18.74\n",
"2021-04-09, BUY EXECUTED, Price: 18.87, Cost: 18.87, Comm: 0.01\n",
"2021-04-14, SELL CREATE, 17.96\n",
"2021-04-15, SELL EXECUTED, Price: 18.04, Cost: 18.87, Comm: 0.01\n",
"2021-04-23, BUY CREATE, 20.24\n",
"2021-04-26, BUY EXECUTED, Price: 20.75, Cost: 20.75, Comm: 0.01\n",
"2021-06-18, SELL CREATE, 19.84\n",
"2021-06-21, SELL EXECUTED, Price: 19.79, Cost: 20.75, Comm: 0.01\n",
"2021-08-19, BUY CREATE, 17.82\n",
"2021-08-20, BUY EXECUTED, Price: 17.49, Cost: 17.49, Comm: 0.01\n",
"2021-09-01, SELL CREATE, 15.66\n",
"2021-09-02, SELL EXECUTED, Price: 15.76, Cost: 17.49, Comm: 0.00\n",
"2021-09-15, BUY CREATE, 17.10\n",
"2021-09-16, BUY EXECUTED, Price: 16.91, Cost: 16.91, Comm: 0.01\n",
"2021-09-24, SELL CREATE, 15.20\n",
"2021-09-27, SELL EXECUTED, Price: 15.07, Cost: 16.91, Comm: 0.00\n",
"2021-10-15, BUY CREATE, 17.22\n",
"2021-10-18, BUY EXECUTED, Price: 17.04, Cost: 17.04, Comm: 0.01\n",
"2021-11-08, SELL CREATE, 15.26\n",
"2021-11-09, SELL EXECUTED, Price: 15.31, Cost: 17.04, Comm: 0.00\n",
"2021-12-13, BUY CREATE, 16.00\n",
"2021-12-14, BUY EXECUTED, Price: 15.91, Cost: 15.91, Comm: 0.00\n",
"2021-12-22, SELL CREATE, 15.23\n",
"2021-12-23, SELL EXECUTED, Price: 15.24, Cost: 15.91, Comm: 0.00\n",
"2022-04-06, BUY CREATE, 14.36\n",
"2022-04-07, BUY EXECUTED, Price: 14.35, Cost: 14.35, Comm: 0.00\n",
"2022-05-05, SELL CREATE, 13.42\n",
"2022-05-06, SELL EXECUTED, Price: 13.15, Cost: 14.35, Comm: 0.00\n",
"2022-06-27, BUY CREATE, 12.69\n",
"2022-06-28, BUY EXECUTED, Price: 12.68, Cost: 12.68, Comm: 0.00\n",
"2022-07-15, SELL CREATE, 11.60\n",
"2022-07-18, SELL EXECUTED, Price: 11.60, Cost: 12.68, Comm: 0.00\n",
"2022-08-31, BUY CREATE, 11.37\n",
"2022-09-01, BUY EXECUTED, Price: 11.28, Cost: 11.28, Comm: 0.00\n",
"2022-09-27, SELL CREATE, 10.83\n",
"2022-09-28, SELL EXECUTED, Price: 10.78, Cost: 11.28, Comm: 0.00\n",
"2022-11-16, BUY CREATE, 10.54\n",
"2022-11-17, BUY EXECUTED, Price: 10.53, Cost: 10.53, Comm: 0.00\n",
"2023-02-13, SELL CREATE, 12.32\n",
"2023-02-14, SELL EXECUTED, Price: 12.35, Cost: 10.53, Comm: 0.00\n",
"2023-05-11, BUY CREATE, 11.46\n",
"2023-05-12, BUY EXECUTED, Price: 11.43, Cost: 11.43, Comm: 0.00\n",
"2023-05-23, SELL CREATE, 10.89\n",
"2023-05-24, SELL EXECUTED, Price: 10.88, Cost: 11.43, Comm: 0.00\n",
"2023-07-25, BUY CREATE, 10.70\n",
"2023-07-26, BUY EXECUTED, Price: 10.64, Cost: 10.64, Comm: 0.00\n",
"2023-08-22, SELL CREATE, 10.38\n",
"2023-08-23, SELL EXECUTED, Price: 10.37, Cost: 10.64, Comm: 0.00\n",
"2024-01-24, BUY CREATE, 8.52\n",
"2024-01-25, BUY EXECUTED, Price: 8.52, Cost: 8.52, Comm: 0.00\n",
"2024-04-02, SELL CREATE, 9.64\n",
"2024-04-03, SELL EXECUTED, Price: 9.62, Cost: 8.52, Comm: 0.00\n",
"2024-04-03, BUY CREATE, 9.55\n",
"2024-04-08, BUY EXECUTED, Price: 9.52, Cost: 9.52, Comm: 0.00\n",
"2024-04-12, SELL CREATE, 9.19\n",
"2024-04-15, SELL EXECUTED, Price: 9.20, Cost: 9.52, Comm: 0.00\n",
"2024-04-25, BUY CREATE, 9.69\n",
"2024-04-26, BUY EXECUTED, Price: 9.67, Cost: 9.67, Comm: 0.00\n",
"2024-06-12, SELL CREATE, 9.94\n",
"2024-06-13, SELL EXECUTED, Price: 9.95, Cost: 9.67, Comm: 0.00\n",
"2024-07-11, BUY CREATE, 9.91\n",
"2024-07-12, BUY EXECUTED, Price: 9.90, Cost: 9.90, Comm: 0.00\n",
"2024-08-01, SELL CREATE, 10.05\n",
"2024-08-02, SELL EXECUTED, Price: 10.00, Cost: 9.90, Comm: 0.00\n",
"2024-08-23, BUY CREATE, 10.25\n",
"2024-08-26, BUY EXECUTED, Price: 10.28, Cost: 10.28, Comm: 0.00\n",
"2024-09-09, SELL CREATE, 9.64\n",
"2024-09-10, SELL EXECUTED, Price: 9.65, Cost: 10.28, Comm: 0.00\n",
"2024-09-27, BUY CREATE, 11.18\n",
"2024-09-30, BUY EXECUTED, Price: 11.37, Cost: 11.37, Comm: 0.00\n",
"2024-11-11, SELL CREATE, 11.60\n",
"2024-11-12, SELL EXECUTED, Price: 11.58, Cost: 11.37, Comm: 0.00\n",
"2024-12-11, BUY CREATE, 11.73\n",
"2024-12-12, BUY EXECUTED, Price: 11.73, Cost: 11.73, Comm: 0.00\n",
"最终资金: 99999999.28\n",
"夏普比率: -397881.8123929003\n",
"最大回撤: 1.3845487341405394e-05\n",
"--------------- AnnualReturn -----------------\n",
"OrderedDict({2011: -9.213936280616508e-10, 2012: 1.915670733154684e-09, 2013: 2.964960210682932e-08, 2014: 2.2974054214586204e-08, 2015: 1.4307666162949317e-10, 2016: 3.4014060457110418e-09, 2017: 1.4808521964226884e-08, 2018: -1.3726451753015567e-08, 2019: 4.0747820229114495e-08, 2020: -3.001912651789951e-08, 2021: -6.445832656520878e-08, 2022: -1.589108589161725e-08, 2023: -2.338556348568943e-09, 2024: 6.482463899004642e-09})\n",
"--------------- SharpeRatio -----------------\n",
"OrderedDict({'sharperatio': -397881.8123929003})\n",
"--------------- DrawDown -----------------\n",
"AutoOrderedDict({'len': 946, 'drawdown': 1.1915326811452441e-05, 'moneydown': 11.91532814502716, 'max': AutoOrderedDict({'len': 946, 'drawdown': 1.3845487341405394e-05, 'moneydown': 13.845488891005516})})\n"
] ]
}, },
{ {
@@ -710,7 +135,7 @@
"<IPython.core.display.HTML object>" "<IPython.core.display.HTML object>"
], ],
"text/html": [ "text/html": [
"<div id='1d033553-7ad6-482f-b5ca-faf1fff202dd'></div>" "<div id='8a8873d7-5615-4456-bb60-d011d91f07a9'></div>"
] ]
}, },
"metadata": {}, "metadata": {},
@@ -722,12 +147,12 @@
"[[<Figure size 640x480 with 4 Axes>]]" "[[<Figure size 640x480 with 4 Axes>]]"
] ]
}, },
"execution_count": 41, "execution_count": 45,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"execution_count": 41 "execution_count": 45
} }
], ],
"metadata": { "metadata": {