diff --git a/.gitignore b/.gitignore index b587b99..2d5a141 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ model **/.* !.gitignore -!.git \ No newline at end of file +!.git +!/.vscode \ No newline at end of file diff --git a/dev.env b/dev.env deleted file mode 100644 index ba5b7e3..0000000 --- a/dev.env +++ /dev/null @@ -1,2 +0,0 @@ -WORKSPACE_FOLDER=/mnt/d/PyProject/NewStock/main -PYTHONPATH=${workspaceFolder}/main:${PYTHONPATH} diff --git a/main/train/Classify2.ipynb b/main/train/Classify2.ipynb index bc593b0..75c571b 100644 --- a/main/train/Classify2.ipynb +++ b/main/train/Classify2.ipynb @@ -18,7 +18,20 @@ "name": "stdout", "output_type": "stream", "text": [ - "/mnt/d/PyProject/NewStock\n" + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n", + "/mnt/d/PyProject/NewStock/main/train\n" + ] + }, + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'main.factor'; 'main' is not a package", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 15\u001b[39m\n\u001b[32m 13\u001b[39m \u001b[38;5;28mprint\u001b[39m(os.getcwd())\n\u001b[32m 14\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpandas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpd\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m15\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmain\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m get_rolling_factor, get_simple_factor\n\u001b[32m 16\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmain\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m read_industry_data\n\u001b[32m 17\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmain\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor_processor\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m calculate_score\n", + "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'main.factor'; 'main' is not a package" ] } ], @@ -31,6 +44,10 @@ "import os\n", "import sys\n", "sys.path.append('/mnt/d/PyProject/NewStock/')\n", + "import sys\n", + "sys.path.append('/mnt/d/PyProject/NewStock/main/')\n", + "import sys\n", + "sys.path.append('/mnt/d/PyProject/NewStock/train')\n", "print(os.getcwd())\n", "import pandas as pd\n", "from main.factor.factor import get_rolling_factor, get_simple_factor\n", @@ -45,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "4a481c60", "metadata": {}, "outputs": [], @@ -57,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "a79cafb06a7e0e43", "metadata": { "ExecuteTime": { @@ -71,56 +88,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "daily data\n", - "daily basic\n", - "inner merge on ['ts_code', 'trade_date']\n", - "stk limit\n", - "left merge on ['ts_code', 'trade_date']\n", - "money flow\n", - "left merge on ['ts_code', 'trade_date']\n", - "cyq perf\n", - "left merge on ['ts_code', 'trade_date']\n", - "\n", - "RangeIndex: 8820754 entries, 0 to 8820753\n", - "Data columns (total 33 columns):\n", - " # Column Dtype \n", - "--- ------ ----- \n", - " 0 ts_code object \n", - " 1 trade_date datetime64[ns]\n", - " 2 open float64 \n", - " 3 close float64 \n", - " 4 high float64 \n", - " 5 low float64 \n", - " 6 vol float64 \n", - " 7 amount float64 \n", - " 8 pct_chg float64 \n", - " 9 turnover_rate float64 \n", - " 10 pe_ttm float64 \n", - " 11 circ_mv float64 \n", - " 12 total_mv float64 \n", - " 13 volume_ratio float64 \n", - " 14 is_st bool \n", - " 15 up_limit float64 \n", - " 16 down_limit float64 \n", - " 17 buy_sm_vol float64 \n", - " 18 sell_sm_vol float64 \n", - " 19 buy_lg_vol float64 \n", - " 20 sell_lg_vol float64 \n", - " 21 buy_elg_vol float64 \n", - " 22 sell_elg_vol float64 \n", - " 23 net_mf_vol float64 \n", - " 24 his_low float64 \n", - " 25 his_high float64 \n", - " 26 cost_5pct float64 \n", - " 27 cost_15pct float64 \n", - " 28 cost_50pct float64 \n", - " 29 cost_85pct float64 \n", - " 30 cost_95pct float64 \n", - " 31 weight_avg float64 \n", - " 32 winner_rate float64 \n", - "dtypes: bool(1), datetime64[ns](1), float64(30), object(1)\n", - "memory usage: 2.1+ GB\n", - "None\n" + "daily data\n" + ] + }, + { + "ename": "ImportError", + "evalue": "Missing optional dependency 'pytables'. Use pip or conda to install pytables.", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/quant/lib/python3.12/site-packages/pandas/compat/_optional.py:135\u001b[39m, in \u001b[36mimport_optional_dependency\u001b[39m\u001b[34m(name, extra, errors, min_version)\u001b[39m\n\u001b[32m 134\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m135\u001b[39m module = \u001b[43mimportlib\u001b[49m\u001b[43m.\u001b[49m\u001b[43mimport_module\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 136\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m:\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/quant/lib/python3.12/importlib/__init__.py:90\u001b[39m, in \u001b[36mimport_module\u001b[39m\u001b[34m(name, package)\u001b[39m\n\u001b[32m 89\u001b[39m level += \u001b[32m1\u001b[39m\n\u001b[32m---> \u001b[39m\u001b[32m90\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_bootstrap\u001b[49m\u001b[43m.\u001b[49m\u001b[43m_gcd_import\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m[\u001b[49m\u001b[43mlevel\u001b[49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpackage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m:1387\u001b[39m, in \u001b[36m_gcd_import\u001b[39m\u001b[34m(name, package, level)\u001b[39m\n", + "\u001b[36mFile \u001b[39m\u001b[32m:1360\u001b[39m, in \u001b[36m_find_and_load\u001b[39m\u001b[34m(name, import_)\u001b[39m\n", + "\u001b[36mFile \u001b[39m\u001b[32m:1324\u001b[39m, in \u001b[36m_find_and_load_unlocked\u001b[39m\u001b[34m(name, import_)\u001b[39m\n", + "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'tables'", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[31mImportError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmain\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m read_and_merge_h5_data\n\u001b[32m 3\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m'\u001b[39m\u001b[33mdaily data\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m df = \u001b[43mread_and_merge_h5_data\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43m/mnt/d/PyProject/NewStock/data/daily_data.h5\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mdaily_data\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 5\u001b[39m \u001b[43m \u001b[49m\u001b[43mcolumns\u001b[49m\u001b[43m=\u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mts_code\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mtrade_date\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mopen\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mclose\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mhigh\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mlow\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mvol\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mamount\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mpct_chg\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 6\u001b[39m \u001b[43m \u001b[49m\u001b[43mdf\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[32m 8\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m'\u001b[39m\u001b[33mdaily basic\u001b[39m\u001b[33m'\u001b[39m)\n\u001b[32m 9\u001b[39m df = read_and_merge_h5_data(\u001b[33m'\u001b[39m\u001b[33m/mnt/d/PyProject/NewStock/data/daily_basic.h5\u001b[39m\u001b[33m'\u001b[39m, key=\u001b[33m'\u001b[39m\u001b[33mdaily_basic\u001b[39m\u001b[33m'\u001b[39m,\n\u001b[32m 10\u001b[39m columns=[\u001b[33m'\u001b[39m\u001b[33mts_code\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mtrade_date\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mturnover_rate\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mpe_ttm\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mcirc_mv\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mtotal_mv\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mvolume_ratio\u001b[39m\u001b[33m'\u001b[39m,\n\u001b[32m 11\u001b[39m \u001b[33m'\u001b[39m\u001b[33mis_st\u001b[39m\u001b[33m'\u001b[39m], df=df, join=\u001b[33m'\u001b[39m\u001b[33minner\u001b[39m\u001b[33m'\u001b[39m)\n", + "\u001b[36mFile \u001b[39m\u001b[32m/mnt/d/PyProject/NewStock/main/utils/utils.py:14\u001b[39m, in \u001b[36mread_and_merge_h5_data\u001b[39m\u001b[34m(h5_filename, key, columns, df, join, on, prefix)\u001b[39m\n\u001b[32m 11\u001b[39m processed_columns.append(col)\n\u001b[32m 13\u001b[39m \u001b[38;5;66;03m# 从 HDF5 文件读取数据,选择需要的列\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m14\u001b[39m data = \u001b[43mpd\u001b[49m\u001b[43m.\u001b[49m\u001b[43mread_hdf\u001b[49m\u001b[43m(\u001b[49m\u001b[43mh5_filename\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m=\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcolumns\u001b[49m\u001b[43m=\u001b[49m\u001b[43mprocessed_columns\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 16\u001b[39m \u001b[38;5;66;03m# 修改列名,如果列名以前有 _,加上 _\u001b[39;00m\n\u001b[32m 17\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m col \u001b[38;5;129;01min\u001b[39;00m data.columns:\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/quant/lib/python3.12/site-packages/pandas/io/pytables.py:431\u001b[39m, in \u001b[36mread_hdf\u001b[39m\u001b[34m(path_or_buf, key, mode, errors, where, start, stop, columns, iterator, chunksize, **kwargs)\u001b[39m\n\u001b[32m 428\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m exists:\n\u001b[32m 429\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mFile \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpath_or_buf\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m does not exist\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m--> \u001b[39m\u001b[32m431\u001b[39m store = \u001b[43mHDFStore\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath_or_buf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[43m=\u001b[49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 432\u001b[39m \u001b[38;5;66;03m# can't auto open/close if we are using an iterator\u001b[39;00m\n\u001b[32m 433\u001b[39m \u001b[38;5;66;03m# so delegate to the iterator\u001b[39;00m\n\u001b[32m 434\u001b[39m auto_close = \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/quant/lib/python3.12/site-packages/pandas/io/pytables.py:571\u001b[39m, in \u001b[36mHDFStore.__init__\u001b[39m\u001b[34m(self, path, mode, complevel, complib, fletcher32, **kwargs)\u001b[39m\n\u001b[32m 568\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[33m\"\u001b[39m\u001b[33mformat\u001b[39m\u001b[33m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m kwargs:\n\u001b[32m 569\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[33m\"\u001b[39m\u001b[33mformat is not a defined argument for HDFStore\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m--> \u001b[39m\u001b[32m571\u001b[39m tables = \u001b[43mimport_optional_dependency\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtables\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 573\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m complib \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m complib \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m tables.filters.all_complibs:\n\u001b[32m 574\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 575\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mcomplib only supports \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtables.filters.all_complibs\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m compression.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 576\u001b[39m )\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/quant/lib/python3.12/site-packages/pandas/compat/_optional.py:138\u001b[39m, in \u001b[36mimport_optional_dependency\u001b[39m\u001b[34m(name, extra, errors, min_version)\u001b[39m\n\u001b[32m 136\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m:\n\u001b[32m 137\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m errors == \u001b[33m\"\u001b[39m\u001b[33mraise\u001b[39m\u001b[33m\"\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m138\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(msg)\n\u001b[32m 139\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 141\u001b[39m \u001b[38;5;66;03m# Handle submodules: if we have submodule, grab parent module from sys.modules\u001b[39;00m\n", + "\u001b[31mImportError\u001b[39m: Missing optional dependency 'pytables'. Use pip or conda to install pytables." ] } ], @@ -157,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "cac01788dac10678", "metadata": { "ExecuteTime": { @@ -225,7 +216,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "c4e9e1d31da6dba6", "metadata": { "ExecuteTime": { @@ -325,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "a735bc02ceb4d872", "metadata": { "ExecuteTime": { @@ -341,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "53f86ddc0677a6d7", "metadata": { "ExecuteTime": { @@ -408,7 +399,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "dbe2fd8021b9417f", "metadata": { "ExecuteTime": { @@ -436,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "85c3e3d0235ffffa", "metadata": { "ExecuteTime": { @@ -468,7 +459,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "92d84ce15a562ec6", "metadata": { "ExecuteTime": { @@ -718,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "b87b938028afa206", "metadata": { "ExecuteTime": { @@ -756,7 +747,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "f4f16d63ad18d1bc", "metadata": { "ExecuteTime": { @@ -982,7 +973,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "40e6b68a91b30c79", "metadata": { "ExecuteTime": { @@ -1302,7 +1293,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "47c12bb34062ae7a", "metadata": { "ExecuteTime": { @@ -1336,7 +1327,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "29221dde", "metadata": {}, "outputs": [ @@ -1379,7 +1370,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "03ee5daf", "metadata": {}, "outputs": [], @@ -1392,7 +1383,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "b76ea08a", "metadata": {}, "outputs": [ @@ -1610,7 +1601,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "3ff2d1c5", "metadata": {}, "outputs": [], @@ -1751,7 +1742,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "c6eb5cd4-e714-420a-ac48-39af3e11ee81", "metadata": { "ExecuteTime": { @@ -1825,7 +1816,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "5d1522a7538db91b", "metadata": { "ExecuteTime": { @@ -1863,7 +1854,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "c1c40917", "metadata": {}, "outputs": [ @@ -1882,16 +1873,16 @@ "# 你可以根据需要调整日期格式,例如 '%Y%m%d' 会得到 '20250706'\n", "date_str = current_date.strftime('%Y-%m-%d')\n", "\n", - "# 3. 构建包含日期的模型文件名\n", - "model_filename = f'/mnt/d/PyProject/NewStock/main/train/catboost_model/catboost_model_2025-06-01.cbm'\n", + "# # 3. 构建包含日期的模型文件名\n", + "# model_filename = f'/mnt/d/PyProject/NewStock/main/train/catboost_model/catboost_model_2025-06-01.cbm'\n", "\n", - "model.save_model(model_filename)\n", - "print(f\"模型已保存到: {model_filename}\")" + "# model.save_model(model_filename)\n", + "# print(f\"模型已保存到: {model_filename}\")" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "09b1799e", "metadata": {}, "outputs": [ @@ -1913,7 +1904,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "e53b209a", "metadata": {}, "outputs": [ @@ -1946,7 +1937,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "364e821a", "metadata": {}, "outputs": [], @@ -2030,7 +2021,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "id": "1f6e6336", "metadata": {}, "outputs": [ @@ -2099,7 +2090,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "7e9023cc", "metadata": {}, "outputs": [], @@ -2299,7 +2290,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "a0000d75", "metadata": {}, "outputs": [ @@ -2545,7 +2536,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "a436dba4", "metadata": {}, "outputs": [ diff --git a/main/train/Classify2_load_model.ipynb b/main/train/Classify2_load_model.ipynb index 131edef..4d5ae5b 100644 --- a/main/train/Classify2_load_model.ipynb +++ b/main/train/Classify2_load_model.ipynb @@ -15,7 +15,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "/mnt/d/PyProject/NewStock\n" + "/mnt/d/PyProject/NewStock/main/train\n" + ] + }, + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'main.factor'; 'main' is not a package", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 11\u001b[39m\n\u001b[32m 9\u001b[39m \u001b[38;5;28mprint\u001b[39m(os.getcwd())\n\u001b[32m 10\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpandas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpd\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m11\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmain\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m get_rolling_factor, get_simple_factor\n\u001b[32m 12\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmain\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m read_industry_data\n\u001b[32m 13\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmain\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfactor_processor\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m calculate_score\n", + "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'main.factor'; 'main' is not a package" ] } ], @@ -42,10 +53,20 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "4a481c60", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "# 设置使用核心\n", "import os\n", @@ -54,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "a79cafb06a7e0e43", "metadata": { "ExecuteTime": { @@ -119,6 +140,15 @@ "memory usage: 2.2+ GB\n", "None\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -154,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "cac01788dac10678", "metadata": { "ExecuteTime": { @@ -169,6 +199,15 @@ "text": [ "industry\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -222,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "c4e9e1d31da6dba6", "metadata": { "ExecuteTime": { @@ -233,7 +272,17 @@ "source_hidden": true } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "from main.factor.factor import *\n", "\n", @@ -322,7 +371,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "a735bc02ceb4d872", "metadata": { "ExecuteTime": { @@ -330,7 +379,17 @@ "start_time": "2025-04-03T12:47:10.751831Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "import talib\n", "import numpy as np" @@ -338,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "53f86ddc0677a6d7", "metadata": { "ExecuteTime": { @@ -350,7 +409,17 @@ }, "scrolled": true }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "from main.utils.factor import get_act_factor\n", "\n", @@ -405,7 +474,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "dbe2fd8021b9417f", "metadata": { "ExecuteTime": { @@ -420,6 +489,15 @@ "text": [ "['ts_code', 'open', 'close', 'high', 'low', 'amount', 'circ_mv', 'total_mv', 'is_st', 'up_limit', 'down_limit', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol', 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct', 'cost_50pct', 'cost_85pct', 'cost_95pct', 'weight_avg', 'in_date']\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -433,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "85c3e3d0235ffffa", "metadata": { "ExecuteTime": { @@ -441,7 +519,17 @@ "start_time": "2025-04-03T12:47:15.990101Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "fina_indicator_df = read_and_merge_h5_data('/mnt/d/PyProject/NewStock/data/fina_indicator.h5', key='fina_indicator',\n", " columns=['ts_code', 'ann_date', 'undist_profit_ps', 'ocfps', 'bps', 'roa', 'roe'],\n", @@ -465,7 +553,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "92d84ce15a562ec6", "metadata": { "ExecuteTime": { @@ -607,6 +695,15 @@ "None\n", "['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol', 'amount', 'pct_chg', 'turnover_rate', 'pe_ttm', 'circ_mv', 'total_mv', 'volume_ratio', 'is_st', 'up_limit', 'down_limit', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol', 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct', 'cost_50pct', 'cost_85pct', 'cost_95pct', 'weight_avg', 'winner_rate', 'cat_l2_code', 'undist_profit_ps', 'ocfps', 'roa', 'roe', 'AR', 'BR', 'AR_BR', 'log_circ_mv', 'cashflow_to_ev_factor', 'book_to_price_ratio', 'turnover_rate_mean_5', 'variance_20', 'bbi_ratio_factor', 'daily_deviation', 'lg_elg_net_buy_vol', 'flow_lg_elg_intensity', 'sm_net_buy_vol', 'flow_divergence_diff', 'flow_divergence_ratio', 'total_buy_vol', 'lg_elg_buy_prop', 'flow_struct_buy_change', 'lg_elg_net_buy_vol_change', 'flow_lg_elg_accel', 'chip_concentration_range', 'chip_skewness', 'floating_chip_proxy', 'cost_support_15pct_change', 'cat_winner_price_zone', 'flow_chip_consistency', 'profit_taking_vs_absorb', 'cat_is_positive', 'upside_vol', 'downside_vol', 'vol_ratio', 'return_skew', 'return_kurtosis', 'volume_change_rate', 'cat_volume_breakout', 'turnover_deviation', 'cat_turnover_spike', 'avg_volume_ratio', 'cat_volume_ratio_breakout', 'vol_spike', 'vol_std_5', 'atr_14', 'atr_6', 'obv', 'maobv_6', 'rsi_3', 'return_5', 'return_20', 'std_return_5', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'cov', 'delta_cov', 'alpha_22_improved', 'alpha_003', 'alpha_007', 'alpha_013', 'vol_break', 'weight_roc5', 'price_cost_divergence', 'smallcap_concentration', 'cost_stability', 'high_cost_break_days', 'liquidity_risk', 'turnover_std', 'mv_volatility', 'volume_growth', 'mv_growth', 'momentum_factor', 'resonance_factor', 'log_close', 'cat_vol_spike', 'up', 'down', 'obv_maobv_6', 'std_return_5_over_std_return_90', 'std_return_90_minus_std_return_90_2', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5', 'act_factor6', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol', 'buy_elg_vol_minus_sell_elg_vol', 'ctrl_strength', 'low_cost_dev', 'asymmetry', 'lock_factor', 'cat_vol_break', 'cost_atr_adj', 'cat_golden_resonance', 'mv_turnover_ratio', 'mv_adjusted_volume', 'mv_weighted_turnover', 'nonlinear_mv_volume', 'mv_volume_ratio', 'mv_momentum', 'lg_flow_mom_corr_20_60', 'lg_flow_accel', 'profit_pressure', 'underwater_resistance', 'cost_conc_std_20', 'profit_decay_20', 'vol_amp_loss_20', 'vol_drop_profit_cnt_5', 'lg_flow_vol_interact_20', 'cost_break_confirm_cnt_5', 'atr_norm_channel_pos_14', 'turnover_diff_skew_20', 'lg_sm_flow_diverge_20', 'pullback_strong_20_20', 'vol_wgt_hist_pos_20', 'vol_adj_roc_20', 'cs_rank_net_lg_flow_val', 'cs_rank_flow_divergence', 'cs_rank_ind_adj_lg_flow', 'cs_rank_elg_buy_ratio', 'cs_rank_rel_profit_margin', 'cs_rank_cost_breadth', 'cs_rank_dist_to_upper_cost', 'cs_rank_winner_rate', 'cs_rank_intraday_range', 'cs_rank_close_pos_in_range', 'cs_rank_opening_gap', 'cs_rank_pos_in_hist_range', 'cs_rank_vol_x_profit_margin', 'cs_rank_lg_flow_price_concordance', 'cs_rank_turnover_per_winner', 'cs_rank_ind_cap_neutral_pe', 'cs_rank_volume_ratio', 'cs_rank_elg_buy_sell_sm_ratio', 'cs_rank_cost_dist_vol_ratio', 'cs_rank_size']\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -717,12 +814,22 @@ "execution_count": null, "id": "3f80b2f9", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "b87b938028afa206", "metadata": { "ExecuteTime": { @@ -730,7 +837,17 @@ "start_time": "2025-04-03T13:08:02.469611Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "from scipy.stats import ks_2samp, wasserstein_distance\n", "\n", @@ -760,7 +877,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "f4f16d63ad18d1bc", "metadata": { "ExecuteTime": { @@ -768,7 +885,17 @@ "start_time": "2025-04-03T13:08:03.665739Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "import numpy as np\n", "import statsmodels.api as sm # 用于中性化回归\n", @@ -986,7 +1113,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "40e6b68a91b30c79", "metadata": { "ExecuteTime": { @@ -994,7 +1121,17 @@ "start_time": "2025-04-03T13:08:03.694904Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99,\n", " log=True):\n", @@ -1306,7 +1443,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "47c12bb34062ae7a", "metadata": { "ExecuteTime": { @@ -1314,7 +1451,17 @@ "start_time": "2025-04-03T14:49:25.889057Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "days = 5\n", "validation_days = 120\n", @@ -1340,7 +1487,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "29221dde", "metadata": {}, "outputs": [ @@ -1350,6 +1497,15 @@ "text": [ "191\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -1383,10 +1539,20 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "03ee5daf", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "# df = fill_nan_with_daily_median(df, feature_columns)\n", "for feature_col in [col for col in feature_columns if col in df.columns]:\n", @@ -1396,7 +1562,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "b76ea08a", "metadata": {}, "outputs": [ @@ -1491,6 +1657,15 @@ "1 000001.SZ 2019-01-03 16.583965\n", "2 000001.SZ 2019-01-04 16.633371\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -1621,10 +1796,20 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "3ff2d1c5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "from sklearn.preprocessing import StandardScaler\n", "from sklearn.linear_model import LogisticRegression\n", @@ -1762,7 +1947,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "a5bbb8be", "metadata": {}, "outputs": [ @@ -1775,6 +1960,15 @@ "execution_count": 19, "metadata": {}, "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -1787,7 +1981,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "5d1522a7538db91b", "metadata": { "ExecuteTime": { @@ -1795,7 +1989,17 @@ "start_time": "2025-04-03T15:04:39.298483Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] + } + ], "source": [ "score_df = test_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nsmallest(300, 'total_mv'))\n", "# score_df = fill_nan_with_daily_median(score_df, ['pe_ttm'])\n", @@ -1825,7 +2029,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "09b1799e", "metadata": {}, "outputs": [ @@ -1837,6 +2041,15 @@ "['vol', 'pct_chg', 'turnover_rate', 'volume_ratio', 'winner_rate', 'undist_profit_ps', 'ocfps', 'AR', 'BR', 'AR_BR', 'cashflow_to_ev_factor', 'book_to_price_ratio', 'turnover_rate_mean_5', 'variance_20', 'bbi_ratio_factor', 'daily_deviation', 'lg_elg_net_buy_vol', 'flow_lg_elg_intensity', 'sm_net_buy_vol', 'total_buy_vol', 'lg_elg_buy_prop', 'flow_struct_buy_change', 'lg_elg_net_buy_vol_change', 'flow_lg_elg_accel', 'chip_concentration_range', 'chip_skewness', 'floating_chip_proxy', 'cost_support_15pct_change', 'cat_winner_price_zone', 'flow_chip_consistency', 'profit_taking_vs_absorb', 'cat_is_positive', 'upside_vol', 'downside_vol', 'vol_ratio', 'return_skew', 'return_kurtosis', 'volume_change_rate', 'cat_volume_breakout', 'turnover_deviation', 'cat_turnover_spike', 'avg_volume_ratio', 'cat_volume_ratio_breakout', 'vol_spike', 'vol_std_5', 'atr_14', 'atr_6', 'obv', 'maobv_6', 'rsi_3', 'return_5', 'return_20', 'std_return_5', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'cov', 'delta_cov', 'alpha_22_improved', 'alpha_003', 'alpha_007', 'alpha_013', 'vol_break', 'weight_roc5', 'smallcap_concentration', 'cost_stability', 'high_cost_break_days', 'liquidity_risk', 'turnover_std', 'mv_volatility', 'volume_growth', 'mv_growth', 'momentum_factor', 'resonance_factor', 'log_close', 'cat_vol_spike', 'up', 'down', 'obv_maobv_6', 'std_return_5_over_std_return_90', 'std_return_90_minus_std_return_90_2', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5', 'act_factor6', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol', 'buy_elg_vol_minus_sell_elg_vol', 'ctrl_strength', 'low_cost_dev', 'asymmetry', 'lock_factor', 'cat_vol_break', 'cost_atr_adj', 'cat_golden_resonance', 'mv_turnover_ratio', 'mv_adjusted_volume', 'mv_weighted_turnover', 'nonlinear_mv_volume', 'mv_volume_ratio', 'mv_momentum', 'lg_flow_mom_corr_20_60', 'lg_flow_accel', 'profit_pressure', 'underwater_resistance', 'cost_conc_std_20', 'profit_decay_20', 'vol_amp_loss_20', 'vol_drop_profit_cnt_5', 'lg_flow_vol_interact_20', 'cost_break_confirm_cnt_5', 'atr_norm_channel_pos_14', 'turnover_diff_skew_20', 'lg_sm_flow_diverge_20', 'pullback_strong_20_20', 'vol_wgt_hist_pos_20', 'vol_adj_roc_20', 'cs_rank_net_lg_flow_val', 'cs_rank_elg_buy_ratio', 'cs_rank_rel_profit_margin', 'cs_rank_cost_breadth', 'cs_rank_dist_to_upper_cost', 'cs_rank_winner_rate', 'cs_rank_intraday_range', 'cs_rank_close_pos_in_range', 'cs_rank_pos_in_hist_range', 'cs_rank_vol_x_profit_margin', 'cs_rank_lg_flow_price_concordance', 'cs_rank_turnover_per_winner', 'cs_rank_volume_ratio', 'cs_rank_elg_buy_sell_sm_ratio', 'cs_rank_cost_dist_vol_ratio', 'cs_rank_size', 'cat_up_limit', 'industry_obv', 'industry_return_5', 'industry_return_20', 'industry__ema_5', 'industry__ema_13', 'industry__ema_20', 'industry__ema_60', 'industry_act_factor1', 'industry_act_factor2', 'industry_act_factor3', 'industry_act_factor4', 'industry_act_factor5', 'industry_act_factor6', 'industry_rank_act_factor1', 'industry_rank_act_factor2', 'industry_rank_act_factor3', 'industry_return_5_percentile', 'industry_return_20_percentile', '000852.SH_MACD', '000905.SH_MACD', '399006.SZ_MACD', '000852.SH_MACD_hist', '000905.SH_MACD_hist', '399006.SZ_MACD_hist', '000852.SH_RSI', '000905.SH_RSI', '399006.SZ_RSI', '000852.SH_Signal_line', '000905.SH_Signal_line', '399006.SZ_Signal_line', '000852.SH_amount_change_rate', '000905.SH_amount_change_rate', '399006.SZ_amount_change_rate', '000852.SH_amount_mean', '000905.SH_amount_mean', '399006.SZ_amount_mean', '000852.SH_daily_return', '000905.SH_daily_return', '399006.SZ_daily_return', '000852.SH_up_ratio_20d', '000905.SH_up_ratio_20d', '399006.SZ_up_ratio_20d', '000852.SH_volatility', '000905.SH_volatility', '399006.SZ_volatility', '000852.SH_volume_change_rate', '000905.SH_volume_change_rate', '399006.SZ_volume_change_rate']\n", "[]\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [ @@ -1847,7 +2060,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "e53b209a", "metadata": {}, "outputs": [ @@ -1871,6 +2084,15 @@ "\n", "[2045675 rows x 3 columns]\n" ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mnotebook controller is DISPOSED. \n", + "\u001b[1;31m有关更多详细信息,请查看 Jupyter log。" + ] } ], "source": [