{"id":324,"date":"2025-10-05T00:30:27","date_gmt":"2025-10-05T00:30:27","guid":{"rendered":"http:\/\/noting.online\/?p=324"},"modified":"2025-10-05T00:40:33","modified_gmt":"2025-10-04T16:40:33","slug":"%e4%bd%bf%e7%94%a8lstm%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e9%a2%84%e6%b5%8b%e8%82%a1%e4%bb%b7%e6%b6%a8%e8%b7%8c-2","status":"publish","type":"post","link":"https:\/\/noting.online\/?p=324","title":{"rendered":"\u4f7f\u7528LSTM\u795e\u7ecf\u7f51\u7edc\u9884\u6d4b\u80a1\u4ef7\u6da8\u8dcc"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5c06\u80a1\u4ef7\u672a\u6765\u7684\u8868\u73b0\u5206\u4e3a\u6da8\u3001\u5e73\u3001\u8dcc\u4e09\u7c7b\uff0c\u53ef\u5229\u7528\u8fc7\u53bb\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u6570\u636e\u6765\u9884\u6d4b\u672a\u6765\u4e00\u6bb5\u65f6\u95f4\uff08\u5982\u672a\u67655\u5929\uff09\u7684\u80a1\u4ef7\u6da8\u8dcc\u3002\u5229\u7528\u7684\u6570\u636e\u5305\u542b\u6280\u672f\u9762K\u7ebf\u6570\u636e\u548c\u57fa\u672c\u9762\u8d22\u52a1\u6570\u636e\u3002\u6b64\u5904\u9009\u7528LSTM\u7f51\u7edc\u7ed3\u6784\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u6570\u636e\u83b7\u53d6\">\u6570\u636e\u83b7\u53d6<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528baostock\u53ef\u4ee5\u83b7\u53d6\u4e2a\u80a1\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u3001\u5b63\u9891\u8d22\u52a1\u6570\u636e\u3001\u5b63\u9891\u516c\u53f8\u62a5\u544a\u6570\u636e\u548c\u5b8f\u89c2\u7ecf\u6d4e\u6570\u636e\u3002\u7531\u4e8e\u5b63\u9891\u516c\u53f8\u62a5\u544a\u6570\u636e\u975e\u5f3a\u5236\u62ab\u9732\uff0c\u5b8f\u89c2\u7ecf\u6d4e\u6570\u636e\u4e5f\u7f3a\u5931\u8f83\u591a\uff0c\u56e0\u6b64\u4ec5\u4f7f\u7528\u524d\u4e24\u8005\u8fdb\u884c\u9884\u6d4b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u91c7\u7528baostock\u6765\u83b7\u53d6\u80a1\u7968\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u548c\u8d22\u52a1\u6570\u636e\uff0c\u4f7f\u7528\u65b9\u6cd5\u53ef\u53c2\u8003\u5b98\u7f51\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a title=\"http:\/\/baostock.com\/baostock\/index.php\/%E9%A6%96%E9%A1%B5\" href=\"http:\/\/baostock.com\/baostock\/index.php\/%E9%A6%96%E9%A1%B5\" rel=\"nofollow\">http:\/\/baostock.com\/baostock\/index.php\/%E9%A6%96%E9%A1%B5<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u83b7\u53d6K\u7ebf\u6570\u636e<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528query_history_k_data_plus()\u65b9\u6cd5\u83b7\u53d6\u5386\u53f2K\u7ebf\u6570\u636e\uff0c\u53ef\u4ee5\u901a\u8fc7\u53c2\u6570\u8bbe\u7f6e\u83b7\u53d6\u65e5k\u7ebf\u3001\u5468k\u7ebf\u3001\u6708k\u7ebf\uff0c\u4ee5\u53ca5\u5206\u949f\u300115\u5206\u949f\u300130\u5206\u949f\u548c60\u5206\u949fk\u7ebf\u6570\u636e\u3002\u80fd\u83b7\u53d61990-12-19\u81f3\u5f53\u524d\u65f6\u95f4\u7684\u6570\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import baostock as bs\n\nbs.login() #\u767b\u5f55\nk_df=bs.query_history_k_data_plus('sz.000001',adjustflag=\"2\",fields='date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST').get_data()#.tail(50)\nk_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/621eef97c9b7450092424b6592ce323d.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u83b7\u53d6\u8d22\u52a1\u6570\u636e<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">baostock\u4e3a\u67e5\u8be2\u8d22\u52a1\u6570\u636e\u63d0\u4f9b\u4e866\u4e2a\u65b9\u6cd5\uff0c\u5206\u522b\u4ece\u76c8\u5229\u3001\u8425\u8fd0\u3001\u6210\u957f\u3001\u507f\u503a\u3001\u73b0\u91d1\u6d41\u91cf\u548c\u675c\u90a6\u6307\u6570\u516d\u4e2a\u89d2\u5ea6\u53cd\u6620\u516c\u53f8\u7684\u8d22\u52a1\u72b6\u51b5\uff0c\u67e5\u8be2\u65f6\u4ee5\u5b63\u5ea6\u4e3a\u5355\u4f4d\u67e5\u8be2\u3002\u53ef\u4ee5\u901a\u8fc7\u53c2\u6570\u8bbe\u7f6e\u83b7\u53d6\u5bf9\u5e94\u5e74\u4efd\u3001\u5b63\u5ea6\u6570\u636e\u3002baostock\u63d0\u4f9b2007\u5e74\u81f3\u4eca\u6570\u636e\u3002\u65b9\u6cd5\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u76c8\u5229\u80fd\u529b\uff1aquery_profit_data()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u8425\u8fd0\u80fd\u529b\uff1aquery_operation_data()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u6210\u957f\u80fd\u529b\uff1aquery_growth_data()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u507f\u503a\u80fd\u529b\uff1aquery_balance_data()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u73b0\u91d1\u6d41\u91cf\uff1aquery_cash_flow_data()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u675c\u90a6\u6307\u6570\uff1aquery_dupont_data()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u51e0\u4e2a\u65b9\u6cd5\u7684\u53c2\u6570\u90fd\u76f8\u540c\uff0c\u5747\u4e3a\u4ee3\u7801\u3001\u5e74\u4efd\u3001\u5b63\u5ea6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">code\uff1a\u80a1\u7968\u4ee3\u7801\uff0csh\u6216sz.+6\u4f4d\u6570\u5b57\u4ee3\u7801\uff0c\u6216\u8005\u6307\u6570\u4ee3\u7801\uff0c\u5982\uff1ash.601398\u3002sh\uff1a\u4e0a\u6d77\uff1bsz\uff1a\u6df1\u5733\u3002\u6b64\u53c2\u6570\u4e0d\u53ef\u4e3a\u7a7a\uff1b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">year\uff1a\u7edf\u8ba1\u5e74\u4efd\uff0c\u4e3a\u7a7a\u65f6\u9ed8\u8ba4\u5f53\u524d\u5e74\uff1b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">quarter\uff1a\u7edf\u8ba1\u5b63\u5ea6\uff0c\u53ef\u4e3a\u7a7a\uff0c\u9ed8\u8ba4\u5f53\u524d\u5b63\u5ea6\u3002\u4e0d\u4e3a\u7a7a\u65f6\u53ea\u67094\u4e2a\u53d6\u503c\uff1a1\uff0c2\uff0c3\uff0c4\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd4\u56de\u503c\u6709\u6240\u4e0d\u540c\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c06\u4e0a\u8ff0\u5404\u9879\u8d22\u52a1\u6570\u636e\u5408\u5e76\u8d77\u6765\uff0c\u5f97\u5230\u8f83\u5927\u7684\u6570\u636e\u6846\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">bs.login()\ndef get_FS_df(code,year,quarter):\n    profit_df=bs.query_profit_data(code,year,quarter).get_data()\n    operation_df=bs.query_operation_data(code,year,quarter).get_data()\n    growth_df=bs.query_growth_data(code,year,quarter).get_data()\n    balance_df=bs.query_balance_data(code,year,quarter).get_data()\n    cash_flow_df=bs.query_cash_flow_data(code,year,quarter).get_data()\n    dupont_df=bs.query_dupont_data(code,year,quarter).get_data()\n    FS_df=pd.concat([profit_df,operation_df,growth_df,balance_df,cash_flow_df,dupont_df],axis=1)\n    FS_df=FS_df.loc[:,~FS_df.columns.duplicated()]#\u5217\u53bb\u91cd\n    return FS_df\nFS_df=get_FS_df(code=\"sz.000001\", year=2007, quarter=1)\nFS_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/3f511f738f63452a9c3480e63293a892.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u6570\u636e\u4fdd\u5b58<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u540e\u9762\u66f4\u81ea\u7531\u5730\u4f7f\u7528\u6570\u636e\uff0c\u6211\u4eec\u5c06\u9700\u8981\u957f\u65f6\u95f4\u83b7\u53d6\u7684\u6570\u636e\u5c3d\u53ef\u80fd\u591a\u5730\u4fdd\u5b58\u5728\u672c\u5730\uff0c\u6bd4\u5982K\u7ebf\u6570\u636e\u548c\u5b63\u9891\u8d22\u52a1\u6570\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">K\u7ebf\u6570\u636e\uff1a\u5c06\u6240\u6709\u80fd\u67e5\u8be2\u5230\u7684\u516c\u53f8\u7684K\u7ebf\u6570\u636e\u5b58\u653e\u5728\u4e00\u5f20\u8868\u4e2d\uff0c\u8868\u5934\u5305\u62ec\u80a1\u7968\u4ee3\u7801\u3001\u65e5\u671f\u53ca\u5176\u4ed6\u5404\u79cd\u6307\u6807\uff0c\u4ee5\u65e5\u4e3a\u5355\u4f4d\uff1b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u8d22\u52a1\u6570\u636e\uff1a\u5c06\u6240\u6709\u80fd\u67e5\u8be2\u5230\u7684\u516c\u53f8\u7684\u5b63\u9891\u8d22\u52a1\u6570\u636e\u5b58\u653e\u5728\u4e00\u5f20\u8868\u4e2d\uff0c\u8868\u5934\u5305\u62ec\u80a1\u7968\u4ee3\u7801\u3001\u7edf\u8ba1\u65e5\u671f\uff08\u5b63\u5ea6\uff09\u53ca\u5176\u4ed6\u5404\u79cd\u6307\u6807\uff0c\u65f6\u95f4\u53ef\u4ee5\u4ece2007\u5e74\u7b2c1\u5b63\u5ea6\u8d77\uff0c\u4ee5\u5b63\u5ea6\u4e3a\u5355\u4f4d\uff1b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"\u4fdd\u5b58K\u7ebf\u6570\u636e\">\u4fdd\u5b58K\u7ebf\u6570\u636e<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9996\u5148\u4f7f\u7528query_stock_industry()\u65b9\u6cd5\u83b7\u53d6\u6240\u6709\u80a1\u7968\u4ee3\u7801\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from tqdm import tqdm\nimport pandas as pd\nimport baostock as bs\n\nbs.login()\nstock_industry_df=bs.query_stock_industry().get_data()\ncode_list=list(stock_industry_df.code)\n#code_list\nstock_industry_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u83b7\u53d6\u6bcf\u53ea\u80a1\u7968\u7684K\u7ebf\u6570\u636e\u3002\u5b63\u9891\u8d22\u52a1\u6570\u636e\u53ea\u80fd\u83b7\u53d62007\u5e74\u4ee5\u540e\u7684\uff0cK\u7ebf\u6570\u636e\u8fd9\u91cc\u4ece2010\u5e74\u5f00\u59cb\u3002\u8bd5\u4e86\u4e0b\u524d10\u4e2a\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">bs.login()\nall_k_df_list=[]\nfor code in tqdm(code_list[:10]):\n    k_df=bs.query_history_k_data_plus(code,adjustflag=\"2\",start_date='2010-01-01',fields='date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST').get_data()\n    all_k_df_list.append(k_df)\nall_k_df=pd.concat(all_k_df_list)\nall_k_df.to_feather('data\/test.feather')<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u53ea\u80a1\u7968\u8981\u82b1\u8d85\u8fc71s\u949f\u7684\u65f6\u95f4\uff0c5000\u591a\u53ea\u8981\u82b1\u4e24\u4e2a\u5c0f\u65f6\uff0c\u65e0\u6cd5\u5fcd\u53d7\u3002baostock\u4e0d\u652f\u6301\u591a\u7ebf\u7a0b\uff0c\u56e0\u6b64\u8fd9\u91cc\u91c7\u7528\u591a\u8fdb\u7a0b\u7684\u65b9\u6cd5\u3002jupyter\u4e2d\u65e0\u6cd5\u76f4\u63a5\u8fd0\u884c\u591a\u8fdb\u7a0b\u7a0b\u5e8f\uff08\u4f1a\u5361\u4f4f\uff09\uff0c\u9700\u8981\u5c06\u7a0b\u5e8f\u5199\u6210py\u6587\u4ef6\uff0c\u518d\u7528run\u65b9\u6cd5\u8fd0\u884c\u3002\u4e14\u7528run\u65b9\u6cd5\u8fd0\u884c\u591a\u8fdb\u7a0bpy\u6587\u4ef6\u65f6\u65f6\uff0c\u5b50\u8fdb\u7a0b\u51fd\u6570\u8f93\u51fa\u8bed\u53e5\u5931\u6548\uff0c\u56e0\u6b64\u8fd9\u91cc\u5c06\u7a0b\u5e8f\u5199\u5165py\u6587\u4ef6\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u6267\u884cpy\u6587\u4ef6\uff08\u4e2d\u95f4\u6709\u62a5\u9519\uff0c\u9700\u8981\u5c06numpy\u964d\u7ea7\u52301.X\uff0c\u59821.26.4\uff09\uff0c\u5e76\u5c06\u6570\u636e\u6846\u62fc\u63a5\u540e\u4fdd\u5b58\u6210\u4f53\u79ef\u8f83\u5c11\u4e14\u6613\u4e8e\u8bfb\u53d6\u7684feather\u683c\u5f0f\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">%%writefile multiprocessing_get_k_data.py \n#\u5728jupyter notebook\u4e2d\u8fd0\u884c\u65f6\uff0c\u9700\u5c06\u4ee3\u7801\u5199\u5165py\u6587\u4ef6\uff0c\u518d\u5728notebook\u4e2d\u8fd0\u884cpy\u6587\u4ef6\nfrom multiprocessing import Pool\nimport time\nimport baostock as bs\nimport pandas as pd\n\ndef print_error(value): #\u5f53\u8fdb\u7a0b\u51fd\u6570\u62a5\u9519\u65f6\uff0c\u8be5\u51fd\u6570\u80fd\u8f93\u51fa\u9519\u8bef\uff0c\u4f46\u4e0d\u80fd\u6307\u793a\u51fa\u9519\u8bef\u4f4d\u7f6e\n    print(\"error: \", value)\ndef mycallback(x): #\u8be5\u51fd\u6570\u5c06\u5b50\u8fdb\u7a0b\u7684\u5904\u7406\u7ed3\u679c\u6dfb\u52a0\u5230\u603b\u7684\u7ed3\u679c\u5217\u8868\u4e2d\n    total_result_list.append(x)\ndef operation_fun(num,num_list): #\u5b50\u8fdb\u7a0b\u64cd\u4f5c\u51fd\u6570\n    print('\\r%d\/%d:%s'%(num_list.index(num)+1,len(num_list),num)) #\u8fdb\u5ea6\n    #time.sleep(1)\n    bs.login()#\u8fd9\u91cc\u4e5f\u9700\u8981\u767b\u5f55\n    k_df=bs.query_history_k_data_plus(num,adjustflag=\"2\",start_date='2010-01-01',fields='date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST').get_data()\n    return k_df\nif __name__ == '__main__':\n    __spec__ = \"ModuleSpec(name='builtins', loader=&lt;class '_frozen_importlib.BuiltinImporter'>)\"#\u6dfb\u52a0\u6b64\u884c\u53ef\u5728jupyter notebook\u4e2d\u91cd\u590d\u8fd0\u884c\n    #num_list=list(range(100)) #\u5f85\u5904\u7406\u7684\u6570\u636e\u5217\u8868\n    bs.login()\n    stock_industry_df=bs.query_stock_industry().get_data()\n    code_list=list(stock_industry_df.code)\n    \n    total_result_list=[] \n    process_num=20 #\u8bbe\u7f6e\u8fdb\u7a0b\u6570\n    pool = Pool(process_num)\n    start_time=time.time()\n    for code in code_list[:]:\n        pool.apply_async(operation_fun, (code,code_list), callback=mycallback,error_callback=print_error)\n    pool.close()\n    pool.join()\n    end_time=time.time()\n    print('%d\u8fdb\u7a0b\u5904\u7406%d\u4e2a\u6570\uff0c\u8017\u65f6%.2fs'%(process_num,len(code_list),end_time-start_time))\n    print(len(total_result_list))\n    all_k_df=pd.concat(total_result_list)\n    all_k_df.reset_index(drop=True,inplace=True)\n    all_k_df.to_feather('data\/k_2010-2025.feather')<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528\u547d\u4ee4\u884c\u6267\u884c\u4e0a\u8ff0py\u6587\u4ef6\u5373\u53ef\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">\u4fdd\u5b58\u5b63\u9891\u8d22\u52a1\u6570\u636e<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u8425\u540c\u6837\u7684\u65b9\u6cd5\u83b7\u53d6\u5b63\u9891\u8d22\u52a1\u6570\u636e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">%%writefile multiprocessing_get_FS_data.py \n#\u5728jupyter notebook\u4e2d\u8fd0\u884c\u65f6\uff0c\u9700\u5c06\u4ee3\u7801\u5199\u5165py\u6587\u4ef6\uff0c\u518d\u5728notebook\u4e2d\u8fd0\u884cpy\u6587\u4ef6\nfrom multiprocessing import Pool\nimport time\nimport baostock as bs\nimport pandas as pd\n\ndef print_error(value): #\u5f53\u8fdb\u7a0b\u51fd\u6570\u62a5\u9519\u65f6\uff0c\u8be5\u51fd\u6570\u80fd\u8f93\u51fa\u9519\u8bef\uff0c\u4f46\u4e0d\u80fd\u6307\u793a\u51fa\u9519\u8bef\u4f4d\u7f6e\n    print(\"error: \", value)\ndef mycallback(x): #\u8be5\u51fd\u6570\u5c06\u5b50\u8fdb\u7a0b\u7684\u5904\u7406\u7ed3\u679c\u6dfb\u52a0\u5230\u603b\u7684\u7ed3\u679c\u5217\u8868\u4e2d\n    total_result_list.append(x)\ndef operation_fun(num,num_list): #\u5b50\u8fdb\u7a0b\u64cd\u4f5c\u51fd\u6570\n    print('\\r%d\/%d:%s'%(num_list.index(num)+1,len(num_list),num)) #\u8fdb\u5ea6\n    #time.sleep(1)\n    bs.login()#\u8fd9\u91cc\u4e5f\u9700\u8981\u767b\u5f55\n    FS_df_list=[]\n    for year in range(2007,2026):\n        for quarter in range(1,5):\n            FS_df=get_FS_df(num,year,quarter)\n            FS_df_list.append(FS_df)\n    merged_FS_df=pd.concat(FS_df_list)\n    return merged_FS_df\ndef get_FS_df(code,year,quarter):\n    profit_df=bs.query_profit_data(code,year,quarter).get_data()\n    operation_df=bs.query_operation_data(code,year,quarter).get_data()\n    growth_df=bs.query_growth_data(code,year,quarter).get_data()\n    balance_df=bs.query_balance_data(code,year,quarter).get_data()\n    cash_flow_df=bs.query_cash_flow_data(code,year,quarter).get_data()\n    dupont_df=bs.query_dupont_data(code,year,quarter).get_data()\n    FS_df=pd.concat([profit_df,operation_df,growth_df,balance_df,cash_flow_df,dupont_df],axis=1)\n    FS_df=FS_df.loc[:,~FS_df.columns.duplicated()]#\u5217\u53bb\u91cd\n    return FS_df\nif __name__ == '__main__':\n    __spec__ = \"ModuleSpec(name='builtins', loader=&lt;class '_frozen_importlib.BuiltinImporter'>)\"#\u6dfb\u52a0\u6b64\u884c\u53ef\u5728jupyter notebook\u4e2d\u91cd\u590d\u8fd0\u884c\n    #num_list=list(range(100)) #\u5f85\u5904\u7406\u7684\u6570\u636e\u5217\u8868\n    bs.login()\n    stock_industry_df=bs.query_stock_industry().get_data()\n    code_list=list(stock_industry_df.code)\n    \n    total_result_list=[] \n    process_num=20 #\u8bbe\u7f6e\u8fdb\u7a0b\u6570\n    pool = Pool(process_num)\n    start_time=time.time()\n    for code in code_list[:]:\n        pool.apply_async(operation_fun, (code,code_list), callback=mycallback,error_callback=print_error)\n    pool.close()\n    pool.join()\n    end_time=time.time()\n    print('%d\u8fdb\u7a0b\u5904\u7406%d\u4e2a\u6570\uff0c\u8017\u65f6%.2fs'%(process_num,len(code_list),end_time-start_time))\n    print(len(total_result_list))\n    all_FS_df=pd.concat(total_result_list)\n    all_FS_df.reset_index(drop=True,inplace=True)\n    all_FS_df.to_feather('data\/FS_2007-2025.feather')<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u6570\u636e\u6e05\u6d17\u53ca\u6837\u672c\u6784\u5efa\">\u6570\u636e\u6e05\u6d17\u53ca\u6837\u672c\u6784\u5efa<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6a21\u578b\u7684\u8f93\u5165\u5e94\u5305\u542bK\u7ebf\u6570\u636e\u3001\u5b63\u9891\u8d22\u52a1\u6570\u636e\uff0c\u8fd9\u91cc\u4f7f\u7528\u6700\u8fd1D\u5929\u7684K\u7ebf\u6570\u636e\u3001\u6700\u8fd1Q\u4e2a\u5b63\u5ea6\u7684\u8d22\u52a1\u6570\u636e\u6765\u9884\u6d4b\u80a1\u4ef7\u5728\u672a\u6765F\u5929\u7684\u6da8\u8dcc\u60c5\u51b5\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b64\u5904\u4f7f\u7528K\u7ebf\u6570\u636e\u6784\u5efa\u6837\u672c\u6807\u7b7e\u3002\u53d6\u8fde\u7eed\u7684\uff08D+F\uff09\u5929\u7684K\u7ebf\u6570\u636e\uff0c\u82e5\u6700\u540eF\u5929\u5185\u7684\u5e73\u5747\u6536\u76d8\u4ef7\u683c\uff08\u6b64\u5904\u4e5f\u53ef\u4f7f\u7528\u5176\u4ed6\u4ef7\u683c\uff0c\u6216\u5176\u5e73\u5747\u4ef7\u683c\uff09\u9ad8\u4e8e\u5f53\u524d\u6536\u76d8\u4ef7\u683c\uff08\u6216\u8005\u81ea\u5b9a\u4e49\u5176\u4ed6\u4ef7\u683c\uff09P%\uff0c\u5219\u6807\u8bb0\u4e3a\u6da8\uff1b\u82e5\u4f4e\u4e8e\u5f53\u524d\u4ef7\u683cP%\uff0c\u5219\u6807\u8bb0\u4e3a\u8dcc\uff1b\u5426\u5219\u6807\u8bb0\u4e3a\u5e73\uff1b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u76ee\u6807\u662f\u6784\u5efaN\u4e2a\u6837\u672c\uff0c\u53ef\u57281000\u591a\u4e07\u884c\u7684K\u7ebf\u6570\u636e\u6846\u4e2d\u968f\u673a\u9009\u53d6N\u884c\uff0c\u53d6\u8fd9\u4e9b\u884c\u80a1\u7968\u4e4b\u524d\u7684D\u5929K\u7ebf\u6570\u636e\u548c\u4e4b\u540e\u7684F\u5929K\u7ebf\u6570\u636e\u8ba1\u7b97\u6837\u672c\u6807\u7b7e\uff0c\u82e5\u6570\u636e\u957f\u5ea6\u4e0d\u6ee1\u8db3\u5219\u820d\u5f03\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53d6\u6837\u4f1a\u662f\u4e00\u4e2a\u6f2b\u957f\u7684\u8fc7\u7a0b\uff0c\u56e0\u6b64\u9700\u8981\u5c06\u751f\u6210\u7684\u6837\u672c\u56fa\u5b9a\u4e0b\u6765\uff0c\u4ee5\u4fbf\u540e\u9762\u76f4\u63a5\u8bfb\u53d6\u3002\u7531\u4e8eK\u7ebf\u6570\u636e\u548c\u8d22\u52a1\u6570\u636e\u5177\u6709\u4e0d\u540c\u7684\u7ef4\u5ea6\uff0c\u56e0\u6b64\u5206\u522b\u4fdd\u5b58\u4e3a\u4e00\u4e2a\u6587\u4ef6\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import pandas as pd\nimport baostock as bs\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm\nimport datetime<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"K\u7ebf\u6570\u636e\u6e05\u6d17\">K\u7ebf\u6570\u636e\u6e05\u6d17<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8bfb\u53d6k\u7ebf\u6570\u636e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_k_df=pd.read_feather('data\/k_2010-2025.feather')\nall_k_df.reset_index(drop=True,inplace=True) #\u91cd\u7f6e\u884c\u7d22\u5f15\nall_k_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u67e5\u770b\u7f3a\u5931\u503c\u4e2a\u6570\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_k_df.isna().sum()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/a0589bd790d04a95883f92b2edb179db.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6570\u636e\u65e0\u7f3a\u5931\u503c\uff0c\u4f46\u6709\u7a7a\u503c\uff0c\u5c06\u7a7a\u503c\u66ff\u6362\u4e3a\u7f3a\u5931\u503c\u518d\u7edf\u8ba1\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_k_df.replace('',np.nan,inplace=True) #\u7a7a\u503c\u66ff\u6362\u4e3a\u7f3a\u5931\u503c\u4ee5\u4fbf\u8fdb\u884c\u7b5b\u9009\nall_k_df.isna().sum()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/32590dbd736a414386f3621eae656ccc.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0d\u540c\u5b57\u6bb5\u7f3a\u5931\u503c\u7684\u6570\u91cf\u4e0d\u540c\u3002\u5e94\u6839\u636e\u5404\u5b57\u6bb5\u7684\u542b\u4e49\u91c7\u7528\u4e0d\u540c\u7684\u7b56\u7565\u8fdb\u884c\u586b\u5145\u3002\u8fd9\u91cc\u67e5\u770b\u5404\u5b57\u6bb5\u7684\u542b\u4e49\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/0b548bc8ce274e5da39d966739ccde31.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u67e5\u770b\u5404\u5b57\u6bb5\u6570\u636e\u7c7b\u578b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_k_df.dtypes<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5404\u5b57\u6bb5\u5747\u4e3aobject\u7c7b\u578b\uff0c\u4e3a\u4fbf\u4e8e\u5904\u7406\uff0c\u8fd9\u91cc\u5c06\u6570\u5b57\u5217\u8f6c\u6362\u4e3afloat\u7c7b\u578b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">for c in tqdm(all_k_df.columns[2:]):\n    all_k_df[c]=all_k_df[c].astype('float64')\nall_k_df.dtypes<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u4e8e\u505c\u724c\u65e5\uff08tradestatus=0\uff09\u7684\u80a1\u7968\uff0c\u8fd9\u91cc\u5c06volume\u3001amount\u3001turn\u3001pctChg\u586b\u5145\u4e3a0\uff0c\u800cpeTTM\u3001pbMRQ\u3001psTTM\u3001pcfNcfTTM \u5219\u53ef\u4ee5\u4f7f\u7528\u8be5\u80a1\u7968\u6700\u8fd1\u4e00\u6b21\u7684\u6570\u636e\u586b\u5145\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_k_df.loc[all_k_df['tradestatus']==0,['volume','amount','turn','pctChg']]=[0,0,0,0]\nall_k_df.isna().sum()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/1b1f334e93bb4f34bbe9c260c6c718a1.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u4e8e\u4f59\u4e0b\u672a\u586b\u5145\u7684\u7f3a\u5931\u503c\uff0c\u4f7f\u7528\u524d\u5411\u586b\u5145\u548c\u540e\u5411\u586b\u5145\u7684\u65b9\u6cd5\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u5c06\u542b\u6709\u7f3a\u5931\u503c\u7684\u80a1\u7968\u7684k\u7ebf\u6570\u636e\u5355\u72ec\u5206\u79bb\u51fa\u6765\u518d\u8fdb\u884c\u586b\u5145\uff0c\u586b\u5145\u540e\u518d\u62fc\u63a5\u5728\u4e00\u8d77\uff0c\u50cf\u4e0b\u9762\u8fd9\u6837\uff0c\u90a3\u4e48\u901f\u5ea6\u4f1a\u5de8\u6162\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u83b7\u53d6\u542b\u6709\u7f3a\u5931\u503c\u7684\u80a1\u7968\u5217\u8868\nlack_k_code_list=all_k_df[all_k_df.isna().sum(axis=1)>=1]['code'].unique()\nprint(len(lack_k_code_list))#\u8fd9\u91cc5000\u591a\u53ea\u80a1\u7968\u5747\u6709\u7f3a\u5931\u503c\n\"\"\"\nfilled_k_df_list=[]\nfor code in tqdm(lack_k_code_list):\n    k_df=all_k_df[all_k_df['code']==code]\n    k_df.ffill(inplace=True)\n    k_df.ffill(inplace=False)\n    filled_k_df_list.append(k_df)\nfilled_all_k_df=pd.concat([all_k_df[~all_k_df.code.isin(lack_k_code_list)],pd.concat(filled_k_df_list)])\nfilled_all_k_df.isna().sum()\n\"\"\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u6539\u53d8\u4e00\u4e0b\u7b56\u7565\uff0c\u7f3a\u5931\u503c\u9010\u4e2a\u586b\u5145\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">for c in tqdm(['volume','amount','turn','pctChg','peTTM','pbMRQ','psTTM','pcfNcfTTM']):\n    na_index_list=all_k_df[all_k_df[c].isna()].index\n    for i in na_index_list:#\u5411\u524d\u586b\u5145\uff0c\u82e5\u9996\u884c\u4e3a\u7a7a\u5219\u4f1a\u9057\u6f0f\n        if i and all_k_df.loc[i,'code']==all_k_df.loc[i-1,'code']:\n            all_k_df.loc[i,c]=all_k_df.loc[i-1,c]\n    na_index_list=all_k_df[all_k_df[c].isna()].index\n    for i in na_index_list[::-1]:#\u5411\u540e\u586b\u5145\n        if i!=len(all_k_df) and all_k_df.loc[i,'code']==all_k_df.loc[i+1,'code']:\n            all_k_df.loc[i,c]=all_k_df.loc[i+1,c]\nall_k_df.isna().sum()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/4bcac1b1550549bdbe1270df5ce67777.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u524d\u5df2\u586b\u5145\u5b8c\u6210\u3002\u6240\u6709\u770badjustflag\u5747\u76f8\u540c\uff0c\u8be5\u7279\u5f81\u5bf9\u4e8e\u5206\u7c7b\u65e0\u610f\u4e49\uff0c\u53ef\u4ee5\u53bb\u6389\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">filled_k_df=all_k_df.drop('adjustflag',axis=1)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u5b63\u9891\u8d22\u52a1\u6570\u636e\u6e05\u6d17\">\u5b63\u9891\u8d22\u52a1\u6570\u636e\u6e05\u6d17<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_FS_df=pd.read_feather('data\/FS_2007-2025.feather')<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u6837\uff0c\u5c06\u7a7a\u503c\u66ff\u6362\u4e3a\u7f3a\u5931\u503c\u518d\u7edf\u8ba1\u5e76\u6392\u5e8f\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_FS_df.replace('',np.nan,inplace=True) #\u7a7a\u503c\u66ff\u6362\u4e3a\u7f3a\u5931\u503c\u4ee5\u4fbf\u8fdb\u884c\u7b5b\u9009\nall_FS_df.isna().sum().sort_values()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u67e5\u770b\u7f3a\u5931\u503c\u6240\u5360\u767e\u5206\u6bd4\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">na_percent_series=all_FS_df.isna().sum()\/len(all_FS_df)\nna_percent_series.sort_values()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/486d978f6bff401ca0ef4704e90ddfab.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u770b\u5230ebitToInterest\uff08\u5df2\u6216\u5229\u606f\u500d\u6570\uff09\u3001MBRevenue\uff08\u4e3b\u8425\u8425\u4e1a\u6536\u5165\uff09\u7f3a\u5931\u8f83\u591a\uff0c\u586b\u5145\u610f\u4e49\u4e0d\u5927\uff0c\u540e\u9762\u4e0d\u8003\u8651\u6b64\u4e24\u9879\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u5bf9all_FS_df\u8fdb\u884c\u5904\u7406\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u4e8e\u6bcf\u53ea\u80a1\u7968\uff0c\u90fd\u9700\u8981\u5c06\u5176\u5b63\u9891\u8d22\u52a1\u6570\u636e\u6574\u7406\u4e3a\u8fde\u7eed\u7684\u3002\u5148\u6839\u636estatDate\u5217\u63d0\u53d6\u51fa\u5e74\u4efd\u548c\u6708\u4efd\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u770b\u4e0b\u7edf\u8ba1\u65e5\u671f\uff0c\u4ec5\u67094\u79cd\uff0c\u90fd\u5728\u6bcf\u5b63\u5ea6\u7684\u6700\u540e\u4e00\u5929\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">set(map(lambda s:s[5:],all_FS_df['statDate']))\n{'03-31', '06-30', '09-30', '12-31'}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u63d0\u53d6\u51fa\u5e74\u4efd\u5e76\u6839\u636e\u7edf\u8ba1\u65e5\u671f\u786e\u5b9a\u5b63\u5ea6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if 'year' not in all_FS_df.columns:\n    all_FS_df.insert(3,'year',list(map(lambda s:int(s[:4]),all_FS_df['statDate'])))\nif 'quarter' not in all_FS_df.columns:\n    all_FS_df.insert(4,'quarter',list(map(lambda s:1 if s[5:7]=='03' else 2 if s[5:7]=='06' else 3 if s[5:7]=='09' else 4,all_FS_df['statDate'])))    <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u67e5\u770b\u6bcf\u53ea\u80a1\u7968\u7684\u5b63\u9891\u8d22\u52a1\u6570\u636e\u662f\u5426\u8fde\u7eed\uff0c\u6253\u5370\u51fa\u5b63\u9891\u8d22\u52a1\u6570\u636e\u6709\u5b8c\u5168\u7f3a\u5931\u7684\u80a1\u7968\uff0c\u6839\u636e\u524d\u540e\u7684\u65f6\u95f4\u5dee\u6765\u8ba1\u7b97\u6709\u65e0\u7f3a\u5931\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">lack_FS_code_list=[]\nfor code in tqdm(all_FS_df.code.unique()):\n    code_df=all_FS_df[all_FS_df.code==code]\n    quarters=(code_df.year.iloc[-1]-code_df.year.iloc[0])*4+(code_df.quarter.iloc[-1]-code_df.quarter.iloc[0])+1\n    if len(code_df)&lt;quarters:\n        lack_FS_code_list.append(code)\nprint(len(lack_FS_code_list))\nprint(lack_FS_code_list[:5])<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u5bf9\u7f3a\u5931\u7684\u5b63\u5ea6\u6570\u636e\u8fdb\u884c\u586b\u5145\uff0c\u8fd9\u91cc\u76f4\u63a5\u91c7\u7528\u4e0a\u4e00\u5b63\u5ea6\u7684\u6570\u636e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">filled_FS_df_list=[]\nfor code in tqdm(lack_FS_code_list):\n    code_df=all_FS_df[all_FS_df.code==code]\n    i=1\n    while i&lt;len(code_df):\n        last_date=datetime.datetime.strptime(code_df.iloc[i-1]['statDate'],'%Y-%m-%d')\n        this_date=datetime.datetime.strptime(code_df.iloc[i]['statDate'],'%Y-%m-%d')\n        if (this_date-last_date).days>92:\n            last_quarter=code_df.iloc[i-1]['quarter']\n            last_year=code_df.iloc[i-1]['year']\n            added_row_df=code_df.iloc[[i-1]].copy()\n            added_row_df['year']=last_year if last_quarter&lt;4 else last_year+1\n            added_row_df['quarter']=last_quarter+1 if last_quarter&lt;4 else 1\n            date_str=str(last_year)+('-03-31' if last_quarter==4 else '-06-30' if last_quarter==1 else '-09-30' if last_quarter==2 else '-12-31')\n            added_row_df['pubDate']=date_str\n            added_row_df['statDate']=date_str\n            code_df=pd.concat([code_df.iloc[:i],added_row_df,code_df.iloc[i:]])\n            break\n        i+=1\n    filled_FS_df_list.append(code_df)\nall_FS_df=pd.concat([all_FS_df[~all_FS_df.code.isin(lack_FS_code_list)],pd.concat(filled_FS_df_list)])\nall_FS_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u79fb\u9664\u7f3a\u5931\u503c\u8f83\u591a\u7684\u5217:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">all_FS_df.drop(columns=['ebitToInterest','MBRevenue'],inplace=True)\nall_FS_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u5bf9\u7f3a\u5931\u503c\u8fdb\u884c\u586b\u5145\u3002\u8fd9\u91cc\u9700\u8981\u53d6\u51fa\u6bcf\u53ea\u80a1\u7968\uff0c\u5355\u72ec\u586b\u5145\uff0c\u586b\u5145\u540e\u518d\u62fc\u63a5\u8d77\u6765\u3002\u5bf9\u4e8e\u6bcf\u53ea\u80a1\u7968\uff0c\u6570\u636e\u6309\u7167\u65f6\u95f4\u987a\u5e8f\u6392\u5217\uff0c\u56e0\u6b64\u5bf9\u4e8e\u7f3a\u5931\u7684\u6570\u636e\uff0c\u91c7\u7528\u4e4b\u524d\u7684\u6570\u636e\u5411\u540e\u586b\u5145\uff1b\u5982\u679c\u4e4b\u524d\u6ca1\u6709\u6570\u636e\uff0c\u5219\u7528\u540e\u9762\u7684\u6570\u636e\u5411\u524d\u586b\u5145\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">filled_FS_df_list=[]\nfor code in tqdm(all_FS_df.code.unique()):\n    code_df=all_FS_df[all_FS_df.code==code]\n    if code_df.isna().sum().sum():\n        code_df.ffill(inplace=True)\n        code_df.bfill(inplace=True)\n    filled_FS_df_list.append(code_df)\nfilled_FS_df=pd.concat(filled_FS_df_list)\nfilled_FS_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd8\u6709\u4e00\u90e8\u5206\u80a1\u7968\u6240\u6709\u5b63\u5ea6\u7684\u67d0\u4e2a\u6570\u636e\u5b8c\u5168\u7f3a\u5931\uff0c\u8fd9\u91cc\u4f7f\u7528\u5e73\u5747\u503c\u8fdb\u884c\u586b\u5145\u3002\u5148\u67e5\u770b\u4e0b\u6570\u636e\u7c7b\u578b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">filled_FS_df.dtypes<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6d89\u53ca\u8d22\u52a1\u6570\u636e\u7684\u7279\u5f81\u6570\u636e\u7c7b\u578b\u4e3aobject\uff0c\u76f4\u63a5\u83b7\u53d6\u5176\u5e73\u5747\u503c\u4f1a\u5931\u8d25\uff0c\u8fd9\u91cc\u5148\u8f6c\u6362\u4e0b\u6570\u636e\u7c7b\u578b\uff0c\u586b\u5145\u540e\u518d\u66ff\u6362\u539f\u6765\u4f4d\u7f6e\u7684\u6570\u636e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">feature_df=filled_FS_df.loc[:,'roeAvg':].astype('float64')\nfeature_df.fillna(feature_df.mean(),inplace=True)\nfilled_FS_df.loc[:,'roeAvg':]=feature_df\nfilled_FS_df<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u6837\u672c\u6784\u5efa\">\u6837\u672c\u6784\u5efa<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u73b0\u5728\u901a\u8fc7\u968f\u673a\u91c7\u6837\u7684\u65b9\u5f0f\u4ece\u6e05\u6d17\u540e\u7684\u6570\u636e\u6846\u4e2d\u9009\u53d6\u65f6\u95f4\u5e8f\u5217\u7247\u6bb5\u6784\u5efa\u6837\u672c\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">K\u7ebf\u6570\u636e\u7684\u7ef4\u5ea6\uff1a\uff08\u6837\u672c\u6570N\uff0c\u65f6\u95f4\u5e8f\u5217\u957f\u5ea6(D+F)\uff0cK\u7ebf\u6570\u636e\u7279\u5f81\u6570\uff09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b63\u9891\u8d22\u52a1\u6570\u636e\u7ef4\u5ea6\uff1a\uff08\u6837\u672c\u6570N\uff0c\u5386\u53f2\u5b63\u9891\u8d22\u52a1\u6570\u636e\u957f\u5ea6Q\uff0c\u5b63\u9891\u8d22\u52a1\u6570\u636e\u7279\u5f81\u6570\uff09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u91cd\u65b0\u6e05\u6d17\u5b63\u9891\u8d22\u52a1\u6570\u636e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">filled_FS_df.reset_index(inplace=True,drop=True)\nfilled_FS_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u9762\u6784\u9020\u8bad\u7ec3\u6570\u636e\u3002\u6839\u636e\u5c06\u80a1\u7968\u5728\u672a\u6765F\u5929\u5185\u7684\u5e73\u5747\u4ef7\u683c\u4e0e\u5f53\u65e5\u4ef7\u683c\u76f8\u6bd4\uff0c\u6da8\u5e45\u9ad8\u4e8eC\u7684\u6807\u8bb0\u4e3a3\uff0c\u5728-C\u5230C\u4e4b\u95f4\u7684\u6807\u8bb0\u4e3a2\uff0c\u4f4e\u4e8e-C\u7684\u6807\u8bb0\u4e3a1\u3002\u8fd9\u91ccopen\u3001high\u3001low\u548cclose\u90fd\u8ba1\u7b97\u4e00\u4e0b\uff0c\u540e\u9762\u65b9\u4fbf\u7075\u6d3b\u6539\u53d8\u3002\u5148\u5c1d\u8bd5200\u4e2a\u91c7\u6837\uff0c\u89c2\u5bdf\u7ed3\u679c\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">N=20000\nD=100\nF=5\nQ=12\nC=0.1#\u53d8\u53160.1\uff0c\u537310%\n\nsample_idx_list=random.sample(range(D+F,len(filled_k_df)),N)\nsample_k_df_list=[]\nsample_FS_df_list=[]\nlabel_2d_list=[]#\u5206\u522b\u4ee5open\uff0chigh,low,close\u8ba1\u7b97\u6709\u56db\u4e2a\u6807\u7b7e\nfor i in tqdm(sample_idx_list[:200]):\n    sample_k_df=filled_k_df[i-(D+F)+1:i+1]\n    last_date=datetime.datetime.strptime(sample_k_df['date'].iloc[-1],'%Y-%m-%d')\n    first_date=datetime.datetime.strptime(sample_k_df['date'].iloc[0],'%Y-%m-%d')\n    if len(sample_k_df['code'].unique())==1 and (last_date-first_date).days&lt;=1.6*D:#100\u4e2a\u4ea4\u6613\u65e5\uff0c\u524d\u540e\u7684\u65f6\u95f4\u5dee\u5728150\u5929\u5de6\u53f3\uff0c\u8d85\u8fc7160\u5929\u7684\u53ef\u80fd\u4f1a\u6709\u8f83\u591a\u505c\u724c\u65e5\uff0c\u6b64\u7c7b\u8fc7\u6ee4\u6389\n        # \u67e5\u627e\u9884\u6d4b\u5f53\u5929\u6700\u8fd1\u7684FS_past\u4e2a\u5b63\u9891\u8d22\u52a1\u62a5\u544a\uff0c\u83b7\u53d6\u4e0d\u5168\u7684\u4e5f\u820d\u5f03\u6389\n        predict_date=sample_k_df['date'].iloc[-(F+1)]\n        code=sample_k_df['code'].iloc[-1]\n        past_FS_df=filled_FS_df[(filled_FS_df.code==code) &amp; (filled_FS_df.pubDate&lt;=predict_date)]\n        if len(past_FS_df)>=Q:\n            sample_k_df_list.append(sample_k_df.loc[:,'open':])#\u4ec5\u4fdd\u5b58\u6570\u5b57\u7279\u5f81\u503c\n            sample_FS_df_list.append(past_FS_df[-Q:].loc[:,'roeAvg':]) \n            future_average_price_array=sample_k_df.iloc[-5:][['open','high','low','close']].mean().to_numpy()\n            now_price_array=sample_k_df.iloc[[-6]][['open','high','low','close']].mean().to_numpy()#\u6b64\u5904\u53ef\u4ee5\u9009\u5f53\u524d\u4ef7\u683c\u6216\u8fc7\u53bb\u51e0\u5929\u7684\u5e73\u5747\u4ef7\u683c\u4f5c\u4e3a\u8ba1\u7b97\u57fa\u51c6\n            change_percent_array=future_average_price_array\/now_price_array-1\n            label_list=list(map(lambda x:3 if x>=C else 2 if x>=-C else 1,change_percent_array))\n            label_2d_list.append(label_list)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u89c2\u5bdf\u6536\u76d8\u4ef7\u6bcf\u7c7b\u6807\u7b7e\u7684\u6570\u91cf\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">np.unique(np.array(label_2d_list)[:,3],return_counts=True)\n(array([1, 2]), array([  3, 134]))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u770b\u5230\uff0c\u51c6\u5907200\u4e2a\u91c7\u6837\uff0c\u4fdd\u7559\u7684\u4ec5\u6709\u4e00\u534a\uff0c\u4e0d\u540c\u6807\u7b7e\u6570\u91cf\u5dee\u5f02\u5927\uff0c\u6837\u672c\u6781\u4e0d\u5747\u8861\uff0c\u9700\u8981\u66f4\u6539\u7b56\u7565\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u5728\u6574\u4e2aK\u7ebf\u6570\u636e\u6846\u4e2d\uff0c\u5bf9\u51e0\u4e4e\u6240\u6709\u884c\u5148\u6253\u4e0a\u6807\u7b7e\uff0c\u7136\u540e\u518d\u4ece\u6bcf\u7c7b\u6807\u7b7e\u4e2d\u53d6\u6837\u3002\u9996\u5148\u63d2\u51654\u5217\u6807\u7b7e\u5217\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if 'open_label' not in filled_k_df.columns:\n    filled_k_df.insert(2,'open_label',np.nan)\nif 'high_label' not in filled_k_df.columns:\n    filled_k_df.insert(3,'high_label',np.nan)\nif 'low_label' not in filled_k_df.columns:    \n    filled_k_df.insert(4,'low_label',np.nan)\nif 'close_label' not in filled_k_df.columns:    \n    filled_k_df.insert(5,'close_label',np.nan)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u8981\u586b\u5145\u8fd9\u56db\u5217\u30021000\u591a\u4e07\u884c\uff0c\u5982\u679c\u4f7f\u7528\u5982\u4e0b\u9010\u884c\u8ba1\u7b97\u7684\u65b9\u6cd5\uff0c\u901f\u5ea6\u6162\u5230\u96be\u4ee5\u60f3\u8c61\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"\"\"\nfor i in tqdm(range(len(filled_k_df)-F)):\n    if filled_k_df.iloc[i]['code']==filled_k_df.iloc[i+F]['code']:\n        now_price_array=np.array(filled_k_df[i:i+1][['open','high','low','close']].mean())\n        future_mean_price_array=np.array(filled_k_df[i+1:i+6][['open','high','low','close']].mean())\n        label_list=list(map(lambda x:3 if x>=C else 2 if x>=-C else 1,future_mean_price_array\/now_price_array-1))\n        filled_k_df.loc[i,['open_label','high_label','low_label','close_label']]=label_list\nfilled_k_df\n\"\"\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u56e0\u6b64\u8fd9\u91cc\u4f7f\u7528rolling\u65b9\u6cd5\uff0c\u8ba1\u7b97\u51fa\u56db\u4e2a\u4ef7\u683c\u5217\u7684\u79fb\u52a8\u5e73\u5747\u503c\uff0c\u518d\u5c06\u672a\u6765\u51e0\u5929\u7684\u79fb\u52a8\u5e73\u5747\u4ef7\u683c\u4e0e\u5f53\u524d\u4ef7\u683c\u6bd4\u8f83\uff0c\u8ba1\u7b97\u51fa\u6807\u7b7e\u3002\u8fd9\u91cc\u4e0d\u7528\u8003\u8651\u4e0d\u540c\u80a1\u7968\u7684\u4ef7\u683c\u53c2\u4e0e\u4e86\u540c\u4e00\u5e73\u5747\u503c\u7684\u8ba1\u7b97\uff0c\u8fb9\u7f18\u5904\u7684\u8ba1\u7b97\u7ed3\u679c\u540e\u9762\u53d6\u6837\u65f6\u4f1a\u88ab\u8fc7\u6ee4\u6389\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">for c in tqdm(['open_label','high_label','low_label','close_label'][:]):\n    s=pd.concat([filled_k_df[c[:-6]].rolling(F).mean()[F:],pd.Series([np.nan]*F)])#\u8865\u5168\u957f\u5ea6\n    change_array=np.array(s)\/filled_k_df[c[:-6]]\n    filled_k_df[c]=(change_array>=(1-C)).astype('int')-(change_array&lt;=(1+C)).astype('int')+2\nfilled_k_df<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/885095d85abd4f8199f262956e5ce5a2.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u597d\u4e86\uff0c\u67e5\u770b\u4e0b\u56db\u5217\u7684\u5404\u6807\u7b7e\u6570\u91cf\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">print(filled_k_df['open_label'].value_counts())\nprint(filled_k_df['high_label'].value_counts())\nprint(filled_k_df['low_label'].value_counts())\nprint(filled_k_df['close_label'].value_counts())\n\nopen_label\n1    13087572\nName: count, dtype: int64\nhigh_label\n1    13087572\nName: count, dtype: int64\nlow_label\n2    12514806\n3      325819\n1      246947\nName: count, dtype: int64\nclose_label\n2    12469206\n3      375248\n1      243118\nName: count, dtype: int64<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ececlose_label\u5217\u4e2d\u4e09\u7c7b\u6807\u7b7e\u5206\u522b\u9009\u53d610000\u4e2a\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sample_k_df_list=[]\nsample_FS_df_list=[]\nlabel_2d_list=[]\nfor i in [1,2,3]:\n    index_list=list(filled_k_df[filled_k_df['close_label']==i].index)\n    count=0\n    while count&lt;10000 and len(index_list)>0:\n        print('\\r',count,end='')\n        sample_index=random.sample(index_list,1)[0]\n        index_list.remove(sample_index)\n        if sample_index&lt;D-1:\n            continue\n        sample_k_df=filled_k_df[sample_index-D+1:sample_index+1]\n        last_date=datetime.datetime.strptime(sample_k_df['date'].iloc[-1],'%Y-%m-%d')\n        first_date=datetime.datetime.strptime(sample_k_df['date'].iloc[0],'%Y-%m-%d')\n        if len(sample_k_df['code'].unique())==1 and (last_date-first_date).days&lt;=1.6*D:#100\u4e2a\u4ea4\u6613\u65e5\uff0c\u524d\u540e\u7684\u65f6\u95f4\u5dee\u5728150\u5929\u5de6\u53f3\uff0c\u8d85\u8fc7160\u5929\u7684\u53ef\u80fd\u4f1a\u6709\u8f83\u591a\u505c\u724c\u65e5\uff0c\u6b64\u7c7b\u8fc7\u6ee4\u6389\n            predict_date=sample_k_df['date'].iloc[-1]\n            code=sample_k_df['code'].iloc[-1]\n            past_FS_df=filled_FS_df[(filled_FS_df.code==code) &amp; (filled_FS_df.pubDate&lt;=predict_date)]\n            if len(past_FS_df)>=Q:\n                sample_k_df_list.append(sample_k_df.loc[:,'open':])#\u4ec5\u4fdd\u5b58\u6570\u5b57\u7279\u5f81\u503c\n                sample_FS_df_list.append(past_FS_df[-Q:].loc[:,'roeAvg':])\n                label_2d_list.append(np.array(sample_k_df.loc[sample_index,['open_label','high_label','low_label','close_label']]))\n                count+=1\n#label_2d_list\nprint('Finished')<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0a\u91c7\u6837\u7684\u6570\u636e\u8f6c\u6362\u4e3anumpy\u6570\u7ec4\uff0c\u5e76\u67e5\u770b\u5176\u5f62\u72b6\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">k_array=np.array(sample_k_df_list)\nFS_array=np.array(sample_FS_df_list)\nlabel_array=np.array(label_2d_list).astype('int')\nk_array.shape,FS_array.shape,label_array.shape\n((30000, 100, 15), (30000, 12, 38), (30000, 4))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4fdd\u5b58\u6570\u636e\uff0c\u8fd9\u91cck\u7ebf\u6570\u636e\u4ec5\u4fdd\u5b58\u524dD\u884c\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">k_array[:,:D,:].tofile(f'data\/k_{k_array.shape[0]}x{k_array.shape[1]}x{k_array.shape[2]}.dat')\n\nFS_array=FS_array.astype(float)\nFS_array.tofile(f'data\/FS_{FS_array.shape[0]}x{FS_array.shape[1]}x{FS_array.shape[2]}.dat')\nlabel_array.tofile(f'data\/label_{label_array.shape[0]}x{label_array.shape[1]}.dat')<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u6a21\u578b\u6784\u5efa\u53ca\u8bad\u7ec3\">\u6a21\u578b\u6784\u5efa\u53ca\u8bad\u7ec3<\/h3>\n\n\n\n\n<div class=\"wb-vk-wp\" rel=\"nofollow\">\n\t<div class=\"wb-tips-txt\">\u652f\u4ed8 &yen;10 \u8d2d\u4e70\u672c\u8282\u540e\u89e3\u9501\u5269\u4f5949%\u7684\u5185\u5bb9<\/div>\n\n\t<div class=\"wpvk-pay-btns\">\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\t<div class=\"wpwk-pay-types\" id=\"wpwk-pay-wp\">\n\t\t\t\t\t\t\t<a class=\"wpvk-btn wpvk-vk-pay\" data-vk=\"1\" data-pay_url=\"https:\/\/noting.online\/?wp_vk=pay&amp;id=324&amp;pay_type=weixin\" rel=\"nofollow\">\n\t\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:16px; height:16px;\" fill=\"none\" viewBox=\"0 0 32 32\">\n\t\t\t\t\t\t<path fill=\"#41B035\" d=\"M12.2 20.1c-2 1.2-2.2-.6-2.2-.6l-2.4-6c-1-3 .8-1.4.8-1.4s1.5 1.3 2.6 2 2.4.2 2.4.2l15.7-7.8C26.1 2.5 21.4 0 16 0 7.2 0 0 6.8 0 15.2c0 4.8 2.4 9 6 11.9l-.6 4.1s-.3 1.2.8.7c.8-.4 2.7-1.8 3.9-2.6 1.9.7 3.9 1 5.9 1 8.8 0 16-6.8 16-15.1 0-2.5-.6-4.8-1.7-6.8L12.2 20.1z\" \/>\n\t\t\t\t\t<\/svg>\n\t\t\t\t\t<span>\u5fae\u4fe1\u652f\u4ed8<\/span>\n\t\t\t\t<\/a>\n\t\t\t\n\t\t<\/div>\n\n\t\t<div class=\"wpvk-login-tips\">\n\t\t\t\u5f53\u524d\u767b\u5f55\u8d26\u53f7\u4e3a\u6587\u7ae0\u4f5c\u8005\uff0c\u53ef<a class=\"link\" onclick=\"document.querySelector('.wb-vk-wp').style.display='none';document.querySelector('.wb-vk-cont').style.display='block'\">\u76f4\u63a5\u67e5\u770b<\/a>\u4ed8\u8d39\u5185\u5bb9\u3002\t\t<\/div>\n\t<\/div>\n<\/div><div class=\"wb-vk-cont\" style=\"display:none;\">\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import MinMaxScaler\nimport tensorflow as tf\nimport keras\nfrom keras.models import Model\nfrom keras.layers import LSTM,Input,concatenate,Dense,Activation\nfrom keras.utils import plot_model,to_categorical\nfrom keras import optimizers\nimport matplotlib.pyplot as plt\nimport matplotlib.gridspec as gridspec\nfrom IPython.display import clear_output\nimport warnings\n\nfrom livelossplot import PlotLossesKerasTF\nfrom livelossplot.outputs import MatplotlibPlot#'''<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u9009close\u5217\u4f5c\u4e3a\u6807\u7b7e\uff0c\u9700\u8981\u5c06\u6807\u7b7e\u7c7b\u522b\u8f6c\u6362\u4e3a\u72ec\u70ed\u7f16\u7801\uff0c\u7531\u4e8e\u72ec\u70ed\u7f16\u7801\u662f\u4ece0\u5230n-1\uff0c\u6807\u7b7e\u662f1,2,3\uff0c\u56e0\u6b64\u9700\u8981\u628a\u6807\u7b7e\u51cf1\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">y_close_array=label_array[:,3]\ny_close_onehot=to_categorical(y_close_array-1)\ny_close_onehot<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5212\u5206\u6570\u636e\u96c6:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">X_k_train, X_k_valid, X_FS_train, X_FS_valid,y_train, y_valid = train_test_split(k_array,FS_array,y_close_onehot)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u7528keras\u6784\u5efa\u4e00\u4e2a\u7b80\u5355\u7684LSTM\u6a21\u578b\uff0c\u80fd\u8f93\u51fa\u5373\u53ef\u3002\u4e0b\u672a\u8bad\u7ec3\u8fc7\u7684\u6a21\u578b\u7684\u51c6\u786e\u7387\uff0c\u8fbe\u523030%\uff0c\u5373\u968f\u673a\u72b6\u6001\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def build_model(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm')(k_input)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm')(FS_input)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'Dense(3)\\nlr='+str(learning_rate)\n    return model,model_str\n\nmodel,model_str=build_model()\nmodel.evaluate([X_k_valid,X_FS_valid],y_valid)\n#[1.2296799421310425, 0.304666668176651]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u9762\u5bf9\u6a21\u578b\u8fdb\u884c\u7a0d\u5fae\u7684\u8bad\u7ec3\uff0c\u90fd\u7528\u9ed8\u8ba4\u503c\u5373\u53ef\uff0c\u8bad\u7ec31\u4e2aepoch\uff0c\u518d\u770b\u4e0b\u9a8c\u8bc1\u7ed3\u679c\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">model.fit([X_k_train,X_FS_train],y_train)\nmodel.evaluate([X_k_valid,X_FS_valid],y_valid)\n#[1.0970499515533447, 0.3635999858379364]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u51c6\u786e\u7387\u5e76\u6ca1\u6709\u63d0\u9ad8\u3002\u591a\u8bad\u7ec3\u51e0\u904d\uff0c\u770b\u770b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">model.fit([X_k_train,X_FS_train],y_train,epochs=6,batch_size=64)\nmodel.evaluate([X_k_valid,X_FS_valid],y_valid)\n#[1.0936743021011353, 0.3619999885559082]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u51c6\u786e\u7387\u8fd8\u662f\u6ca1\u6709\u53d8\u5316\u3002\u66f4\u6539\u4e00\u4e0b\u6a21\u578b\u7684\u53c2\u6570\uff0c\u589e\u52a0\u795e\u7ecf\u5143\u7684\u4e2a\u6570\u5e76\u589e\u5927\u5b66\u4e60\u7387\uff0c\u518d\u770b\u770b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">model,model_str=build_model(32,32,0.03)\nmodel.fit([X_k_train,X_FS_train],y_train,epochs=6,batch_size=64)\nmodel.evaluate([X_k_valid,X_FS_valid],y_valid)\n#[1.1077427864074707, 0.3726666569709778]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53d8\u5316\u4ecd\u7136\u4e0d\u5927\uff0c\u968f\u540e\u591a\u6b21\u8c03\u6574\u53c2\u6570\uff0c\u4f7f\u6a21\u578b\u66f4\u590d\u6742\uff0c\u51e0\u4e4e\u90fd\u662f\u65e0\u4efb\u4f55\u6548\u679c\u3002\u6000\u7591\u662f\u4e0d\u540c\u80a1\u7968\u4ef7\u683c\u76f8\u5dee\u8f83\u5927\u7684\u539f\u56e0\uff0c\u8fd9\u91cc\u5c1d\u8bd5\u5728\u8bad\u7ec3\u524d\u628a\u6570\u636e\u505a\u4e00\u4e0b\u9884\u5904\u7406\u518d\u8fdb\u884c\u8bad\u7ec3\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">minMaxScaler=MinMaxScaler()\nnorm_k_array=np.array(list(map(minMaxScaler.fit_transform,k_array)))\nnorm_FS_array=np.array(list(map(minMaxScaler.fit_transform,FS_array)))\nX_norm_k_train, X_norm_k_valid, X_norm_FS_train, X_norm_FS_valid,y_train, y_valid = train_test_split(norm_k_array,norm_FS_array,y_close_onehot)\nmodel.evaluate([X_norm_k_valid,X_norm_FS_valid],y_valid)\n#[1.2631981372833252, 0.3234666585922241]\n\nmodel.fit([X_norm_k_train,X_norm_FS_train],y_train,epochs=6,batch_size=64)\nmodel.evaluate([X_norm_k_valid,X_norm_FS_valid],y_valid)\n#[1.0658458471298218, 0.4429333209991455]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9884\u5904\u7406\u540e\u7684\u51c6\u786e\u7387\u6709\u660e\u663e\u63d0\u9ad8\uff0c\u8bf4\u660e\u8fdb\u884c\u6570\u636e\u9884\u5904\u7406\u8fd8\u662f\u6709\u4e9b\u6548\u679c\u7684\u3002\u6240\u4ee5\u540e\u9762\u7684\u8bad\u7ec3\u4f7f\u7528\u9884\u5904\u7406\u540e\u7684\u6570\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u66f4\u76f4\u89c2\u5730\u89c2\u5bdf\u8bad\u7ec3\u8fc7\u7a0b\uff0c\u5e76\u53ca\u65f6\u505c\u6b62\uff0c\u8fd9\u91cc\u4f7f\u7528\u56de\u8c03\u51fd\u6570\u7ed8\u5236\u635f\u5931\u53ca\u51c6\u786e\u7387\u7684\u66f2\u7ebf\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">model.fit()\u65b9\u6cd5\u53ef\u4ee5\u8ba1\u7b97\u6bcf\u4e00\u4e2abatch\u7684\u8bad\u7ec3\u96c6\u7684loss\u53caaccuracy\uff0c\u4f46\u9a8c\u8bc1\u96c6\u7684loss\u53caaccuracy\u53ea\u5728\u4e00\u4e2aepoch\u7ed3\u675f\u65f6\u8ba1\u7b97\u3002\u5728\u6570\u636e\u96c6\u8f83\u5927\uff0c\u904d\u5386\u4e00\u904d\u8f83\u8d39\u65f6\u7684\u65f6\u5019\uff0c\u5982\u679c\u60f3\u6025\u4e8e\u770b\u5230\u8bad\u7ec3\u8fc7\u7a0b\u7684\u53d8\u5316\uff0c\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6esteps_per_epoch\u53c2\u6570\u4e3a1\u6765\u5c061\u4e2abatch\u5f53\u505a1\u4e2aepoch\uff08\u8bbe\u7f6e\u4e3a2\u5c31\u662f\u5c06\u4e24\u4e2abatch\u5f53\u505a\u4e00\u4e2aepoch\uff09\u3002\u9a8c\u8bc1\u96c6\u7684accuracy\u53caloss\u53ea\u80fd\u5728on_epoch_end()\u65b9\u6cd5\u4e2d\u83b7\u53d6\uff0c\u8bad\u7ec3\u96c6\u7684accuracy\u53caloss\u53ef\u5728on_epoch_end()\u6216on_batch_end()\u65b9\u6cd5\u4e2d\u83b7\u53d6\u3002\u4e3a\u7b80\u5355\u8ba1\uff0c\u5747\u5199\u5728on_epoch_end(\uff09\u65b9\u6cd5\u4e2d\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class LossHistory(keras.callbacks.Callback):\n    def __init__(self,fig,ax,ax2,model):\n        pass\n    def on_train_begin(self, logs={}):\n        self.train_loss_list = []\n        self.val_loss_list= []\n        self.train_acc_list=[]\n        self.val_acc_list=[]\n    def on_batch_end(self, batch, logs={}):\n        pass\n        \n    def on_epoch_end(self, epoch, logs={}):\n        ax.cla()\n        ax2.cla()\n        self.train_loss_list.append(logs.get('loss'))\n        self.val_loss_list.append(logs.get('val_loss'))        \n        self.train_acc_list.append(logs.get('accuracy'))\n        self.val_acc_list.append(logs.get('val_accuracy'))\n        ax.plot(self.train_loss_list,'r-',label='train_loss')\n        ax.plot(self.val_loss_list,'r--',label='val_loss')\n        ax2.plot(self.train_acc_list,'g-',label='train_acc')\n        ax2.plot(self.val_acc_list,'g--',label='val_acc')\n        fig.legend(loc='upper right',bbox_to_anchor=(0.8,0.8), bbox_transform=ax.transAxes)\n        ax2.set_ylabel('accuracy',color='green')\n        ax.set_ylabel('loss',color='red')\n        ax.tick_params(axis='y',labelcolor='red')        \n        ax2.tick_params(axis='y',labelcolor='green')\n        display(fig)\n        clear_output(wait=True)\n        plt.pause(0.1)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b64\u5904\u5728fit()\u65b9\u6cd5\u4e2d\u81ea\u884c\u5212\u5206\u8bad\u7ec3\u96c6\u548c\u9a8c\u8bc1\u96c6\uff0c\u9700\u8981\u5148\u628a\u6574\u4f53\u6570\u636e\u6253\u4e71\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">row_idx = list(range(len(norm_k_array)))\nnp.random.shuffle(row_idx)\nshuffled_norm_k_array=norm_k_array[row_idx]\nshuffled_norm_FS_array=norm_FS_array[row_idx]\nshuffled_y_onehot=y_close_onehot[row_idx]\n\ndef build_model(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm')(k_input)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm')(FS_input)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'Dense(3)\\n\\noptimizer:'+adam.name+'\\nlr='+str(learning_rate)\n    return model,model_str\nmodel,model_str=build_model()\n\nfig=plt.figure(figsize=(15,4))\ngs = gridspec.GridSpec(1,4)\ntext_ax,ax = fig.add_subplot(gs[0,0]),fig.add_subplot(gs[0,1:])\ntext_ax.text(0.1, 0.5, model_str,alpha=0.5,verticalalignment='center',transform=fig.transFigure)\ntext_ax.axis('off')\nax2=ax.twinx()\n\nhistory = LossHistory(fig,ax,ax2,model)\nearlyStopping=keras.callbacks.EarlyStopping(patience=50)\nmodel.fit([shuffled_norm_k_array,shuffled_norm_FS_array],shuffled_y_onehot,batch_size=1024,epochs=10, validation_split=0.25, verbose=0,steps_per_epoch=1,callbacks=[history,earlyStopping])\n#model.fit([X_norm_k_train,X_norm_FS_train],y_train,batch_size=1024,epochs=1000, validation_split=0.25, verbose=0,steps_per_epoch=1,callbacks=[history,earlyStopping])\n#model.fit([k_array,FS_array],y_close_onehot,shuffle=True,batch_size=1024,epochs=100, validation_split=0.25, verbose=0,steps_per_epoch=1,callbacks=[history,earlyStopping])\nfig<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/e087094c97ee40ebb13f4a6ca0cd99f7.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b64\u5904\u5efa\u7acb\u51e0\u4e2a\u4e0d\u540c\u7684\u6a21\u578b\uff0c\u67e5\u770b\u7ed3\u679c\u6709\u65e0\u5dee\u5f02\u3002\u4f7f\u7528\u65e9\u505c\u6cd5\uff0c\u5f53\u9a8c\u8bc1\u96c6\u635f\u5931\u8fbe\u523050\u4e2aepoch\u4e0d\u518d\u4e0b\u964d\u65f6\uff0c\u8bad\u7ec3\u505c\u6b62\uff0c\u4fdd\u5b58\u6a21\u578b\u53ca\u8bad\u7ec3\u66f2\u7ebf\u53d8\u5316\u56fe\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def build_model1(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm')(k_input)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm')(FS_input)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'Dense(3)\\n\\noptimizer:'+adam.name+'\\nlr='+str(learning_rate)\n    return model,model_str\ndef build_model2(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm')(k_input)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm')(FS_input)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    x=Activation('tanh')(x)\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'tanh()\\nDense(3)\\n\\noptimizer:'+adam.name+'\\nlr='+str(learning_rate)\n    return model,model_str\ndef build_model3(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm')(k_input)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm')(FS_input)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    x=Activation('relu')(x)\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'relu()\\nDense(3)\\n\\noptimizer:'+adam.name+'\\nlr='+str(learning_rate)\n    return model,model_str\ndef build_model4(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm')(k_input)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm')(FS_input)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    x=Activation('sigmoid')(x)\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'sigmoid()\\nDense(3)\\n\\noptimizer:'+adam.name+'\\nlr='+str(learning_rate)\n    return model,model_str\ndef build_model5(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=True,name='k_lstm')(k_input)\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm2')(k_lstm)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=True,name='FS_lstm')(FS_input)\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm2')(FS_lstm)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+'\\nk_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'Dense(3)\\n\\noptimizer:'+adam.name+'\\nlr='+str(learning_rate)\n    return model,model_str\ndef build_model6(k_lstm_cells=16,FS_lstm_cells=16,learning_rate=0.01):\n    k_input=Input(shape=(100,15),name='k_input')\n    k_lstm=LSTM(k_lstm_cells,return_sequences=True,name='k_lstm')(k_input)\n    k_lstm=LSTM(k_lstm_cells,return_sequences=False,name='k_lstm2')(k_lstm)\n    FS_input=Input(shape=(12,38),name='FS_input')\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=True,name='FS_lstm')(FS_input)\n    FS_lstm=LSTM(FS_lstm_cells,return_sequences=False,name='FS_lstm2')(FS_lstm)\n    x = concatenate([k_lstm, FS_lstm],name='Concatenate')\n    x=Activation('relu')(x)\n    main_output = Dense(3, activation='softmax',name='Dense')(x)\n    model = Model(inputs=[k_input,FS_input],outputs=main_output)\n    adam=optimizers.Adam(learning_rate=learning_rate)\n    model.compile(loss='categorical_crossentropy',optimizer=adam,metrics=['accuracy'])\n    model_str='k_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+'\\nk_lstm('+str(k_lstm_cells)+')  FS_lstm('+str(FS_lstm_cells)+')\\nConcatenate()\\n'+'relu()\\nDense(3)\\n\\noptimizer:'+adam.name+'\\nlr='+str(learning_rate)\n    return model,model_str\nmodel_dict={'model1':build_model1(16,16,0.01),\n            'model2':build_model1(32,32,0.01),\n            'model3':build_model1(64,64,0.01),\n            'model3':build_model1(64,64,0.01),\n            'model3':build_model1(128,128,0.01),\n            'model4':build_model2(64,64,0.01),\n            'model5':build_model3(64,64,0.01),\n            'model6':build_model4(64,64,0.01),\n            'model7':build_model5(64,64,0.01),\n            'model8':build_model6(64,64,0.01),\n           }\nfor name in model_dict:\n    model,model_str=model_dict[name]\n    \n    fig=plt.figure(figsize=(15,4))\n    gs = gridspec.GridSpec(1,4)\n    text_ax,ax = fig.add_subplot(gs[0,0]),fig.add_subplot(gs[0,1:])\n    text_ax.text(0.1, 0.5, model_str,alpha=0.5,verticalalignment='center',transform=fig.transFigure)\n    text_ax.axis('off')\n    ax2=ax.twinx()\n\n    history = LossHistory(fig,ax,ax2,model)\n    earlyStopping=keras.callbacks.EarlyStopping(patience=50)\n    #model.fit([k_array,FS_array],y_close_onehot,batch_size=1024,epochs=1000, validation_split=0.25, verbose=0,steps_per_epoch=1,callbacks=[history,earlyStopping])\n    model.fit([shuffled_norm_k_array,shuffled_norm_FS_array],shuffled_y_onehot,batch_size=1024,epochs=1000, validation_split=0.25, verbose=0,steps_per_epoch=1,callbacks=[history,earlyStopping])\n    replaced_model_str=model_str.replace('\\n','_').replace(' ','_').replace(':','_')\n    model.save('model\/'+replaced_model_str+'.keras')\n    fig.savefig('model\/'+replaced_model_str+'.jpg')<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/762eabcc9d764516b5ff100d62903b35.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0a\u6a21\u578b\u7684\u6548\u679c\u76f8\u5f53\uff0c\u51c6\u786e\u7387\u4e5f\u53ea\u80fd\u8fbe\u523060%\u5de6\u53f3\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u9884\u6d4b\">\u9884\u6d4b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import baostock as bs\nimport datetime\nimport pandas as pd\nfrom sqlalchemy import create_engine\nimport pymysql\nimport mysql.connector\nfrom tqdm import tqdm\nimport numpy as np\nfrom sklearn.preprocessing import MinMaxScaler\nimport keras\nimport math,requests,json\nimport matplotlib.pyplot as plt\nimport mplfinance as mpf\nimport mpl_finance as mp_f<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u4f7f\u7528\u4e0a\u8ff0\u8bad\u7ec3\u7684\u6a21\u578b\u53bb\u6311\u9009\u4e00\u4e9b\u53ef\u80fd\u4f1a\u6da8\u7684\u80a1\u7968\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A\u80a1\u5e02\u573a\u5168\u90e8\u6709\u6570\u5343\u652f\u80a1\u7968\uff0c\u4f7f\u7528baostock\u5bf9\u6240\u6709\u80a1\u7968\u4e34\u65f6\u83b7\u53d6\u5386\u53f2\u6570\u636e\u518d\u505a\u51fa\u9884\u6d4b\u7b5b\u9009\u5c06\u662f\u4e00\u4e2a\u6f2b\u957f\u7684\u8fc7\u7a0b\u3002\u56e0\u6b64\u6700\u597d\u5c06\u9700\u8981\u7684\u5386\u53f2\u6570\u636e\u4fdd\u5b58\u4e0b\u6765\uff0c\u6bd4\u5982\u4fdd\u5b58\u5230\u6570\u636e\u5e93\u4e2d\u5e76\u6bcf\u65e5\u66f4\u65b0\uff0c\u8fd9\u6837\u5728\u5b9e\u65f6\u505a\u51fa\u51b3\u7b56\u65f6\u624d\u4e0d\u4f1a\u6d6a\u8d39\u592a\u591a\u65f6\u95f4\u53bb\u83b7\u53d6\u5386\u53f2\u6570\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u4fdd\u5b58\u81f3\u6570\u636e\u5e93\u4e2d\">\u4fdd\u5b58\u81f3\u6570\u636e\u5e93\u4e2d<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5efa\u4e00\u4e2a\u540d\u4e3astock\u7684MySQL\u6570\u636e\u5e93\uff0c\u5305\u542bK\u7ebf\u6570\u636e\u8868KDaily\u548c\u5b63\u9891\u8d22\u52a1\u6570\u636eQuarter\u4e24\u4e2a\u8868\uff0c\u83b7\u53d6\u6700\u8fd1\u534a\u5e74\u7684K\u7ebf\u5386\u53f2\u6570\u636e\u53ca\u6700\u8fd112\u4e2a\u5b63\u5ea6\u7684\u5b63\u9891\u8d22\u52a1\u6570\u636e\u5e76\u4fdd\u5b58\u5230\u6570\u636e\u5e93\u4e2d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u521b\u5efa\u6570\u636e\u5e93\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">create database stock;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">KDaily\u6570\u636e\u8868\u7684\u5b57\u6bb5\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/d6c98f886ca3483a876f2a073c8c4ee3.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5efa\u8868SQL\u8bed\u53e5\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">create table KDaily(id int(10) auto_increment,date date,code char(9),open float,high float,low float,close float,preclose float,volume float,amount float,adjustflag tinyint,turn float,tradestatus tinyint,pctChg float,peTTM float,pbMRQ float,psTTM float,pcfNcfTTM float,isST tinyint,primary key (id)) engine=innodb default charset=utf8;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quarter\u6570\u636e\u8868\u7684\u5b57\u6bb5\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/90a347f4de5645fc95a66d04d8929765.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5efa\u8868SQL\u8bed\u53e5\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">create table Quarter(id int(10) auto_increment,code char(9),pubDate date,statDate date,roeAvg float,npMargin float,gpMargin float,netProfit float,epsTTM float,MBRevenue float,totalShare float,liqaShare float,NRTurnRatio float,NRTurnDays float,INVTurnRatio float,INVTurnDays float,CATurnRatio float,AssetTurnRatio float,YOYEquity float,YOYAsset float,YOYNI float,YOYEPSBasic float,YOYPNI float,currentRatio float,quickRatio float,cashRatio float,YOYLiability float,liabilityToAsset float,assetToEquity float,CAToAsset float,NCAToAsset float,tangibleAssetToAsset float,ebitToInterest float,CFOToOR float,CFOToNP float,CFOToGr float,dupontROE float,dupontAssetStoEquity float,dupontAssetTurn float,dupontPnitoni float,dupontNitogr float,dupontTaxBurden float,dupontIntburden float,dupontEbittogr float,primary key(id))engine=innodb default charset=utf8;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u5c06\u5df2\u83b7\u53d6\u7684\u6570\u636e\u5199\u5165\u6570\u636e\u5e93\u4e2d\u3002\u8fd9\u91cc\u4f7f\u7528sqlalchemy\uff0c\u53ef\u4ee5\u76f4\u63a5\u5c06\u8fd9\u4e2a\u6570\u636e\u6846\u76f4\u63a5\u5199\u5165\u6570\u636e\u5e93\u3002\u5199\u5165\u8fd1\u534a\u5e74\u7684K\u7ebf\u6570\u636e\uff0c50\u591a\u4e07\u884c\u82b1\u8d39\u5927\u7ea62min\uff1b\u518d\u5199\u5165\u6700\u8fd14\u5e74\u7684\u8d22\u52a1\u6570\u636e\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">host='localhost'#\u4e5f\u53ef\u6362\u6210\u670d\u52a1\u5668IP\nuser='root'\npassword='password'\n\ncon = pymysql.connect(host=host,user=user,port=3306,database='stock',password=password)\ncur= con.cursor()\ncur.execute(\"select MAX(date) from KDaily\")\nlast_date=cur.fetchone()\nif not last_date:#\u82e5\u67e5\u8be2\u7ed3\u679c\u4e3a\u7a7a\uff0c\u5219\u672a\u5199\u5165\u8fc7\u6570\u636e\uff0c\u53ef\u4ee5\u5199\u5165\n    \n    start_date_str= datetime.date.strftime(datetime.date.today()-datetime.timedelta(180),\"%Y-%m-%d\")\n    recent_halfYear_k_df=all_k_df[all_k_df['date']>=start_date_str]\n    print(len(recent_halfYear_k_df))\n    connect=create_engine('mysql+pymysql:\/\/'+user+':'+password+'@'+host+':3306\/stock')\n    pd.io.sql.to_sql(recent_halfYear_k_df[:],'KDaily',connect,if_exists='append',index=False) #\u8fd9\u884c\u8dd1\u4e0d\u901a\u65f6\u91cd\u65b0\u8fd0\u884c\u4e00\u6b21\u5373\u53ef\n    \n    # \u7528\u540c\u6837\u7684\u65b9\u6cd5\u5199\u5165\u5b63\u9891\u8d22\u52a1\u6570\u636e\uff1a\n    start_year=datetime.date.today().year-4\n    all_FS_df.replace('',np.nan,inplace=True)\n    for c in tqdm(all_FS_df.columns[5:]):\n        all_FS_df[c]=all_FS_df[c].astype('float64')\n    sql_all_FS_df=all_FS_df[all_FS_df['year']>=start_year].drop(['year','quarter'],axis=1)\n    pd.io.sql.to_sql(sql_all_FS_df,'Quarter',connect,if_exists='append',index=False)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\u83b7\u53d6\u5df2\u4fdd\u5b58\u7684\u6570\u636e\u4e2d\u672a\u5305\u542b\u7684\u6700\u8fd1\u7684\u6570\u636e\uff0c\u6bcf\u53ea\u80a1\u7968\u7684K\u7ebf\u6570\u636e\u53ca\u8d22\u52a1\u6570\u636e\u90fd\u9700\u8981\u91cd\u65b0\u83b7\u53d6\uff0c\u518d\u62fc\u63a5\u5728\u4e00\u8d77\uff0c\u5199\u5165\u6570\u636e\u5e93\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u5199\u6210\u4e00\u4e2a\u7a0b\u5e8f\u653e\u5728\u670d\u52a1\u5668\u4e0a\u6bcf\u5929\u6267\u884c\uff0c\u83b7\u53d6\u65b0\u7684K\u7ebf\u6570\u636e\u548c\u8d22\u52a1\u6570\u636e\u5e76\u5199\u5165\u5230\u6570\u636e\u5e93\u4e2d\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def get_FS_df(code,year,quarter):\n    profit_df=bs.query_profit_data(code,year,quarter).get_data()\n    operation_df=bs.query_operation_data(code,year,quarter).get_data()\n    growth_df=bs.query_growth_data(code,year,quarter).get_data()\n    balance_df=bs.query_balance_data(code,year,quarter).get_data()\n    cash_flow_df=bs.query_cash_flow_data(code,year,quarter).get_data()\n    dupont_df=bs.query_dupont_data(code,year,quarter).get_data()\n    FS_df=pd.concat([profit_df,operation_df,growth_df,balance_df,cash_flow_df,dupont_df],axis=1)\n    FS_df=FS_df.loc[:,~FS_df.columns.duplicated()]#\u5217\u53bb\u91cd\n    return FS_df\ndef get_merged_FS_df(code,start_year,start_quarter):\n    FS_df_list=[]\n    end_year=datetime.date.today().year\n    end_quarter=datetime.date.today().month\/\/4\n    for year in range(start_year,end_year+1):\n        for quarter in range(1,5):\n            if (year>start_year or quarter>=start_quarter):\n                FS_df=get_FS_df(code,year,quarter)\n                FS_df_list.append(FS_df)\n            if year==end_year and quarter==end_quarter:\n                break\n    merged_FS_df=pd.concat(FS_df_list)\n    return merged_FS_df\ndef update_database():\n    # \u66f4\u65b0K\u7ebf\u6570\u636e\n    con = pymysql.connect(host=host,user=user,port=3306,database='stock',password=password)\n    cur= con.cursor()\n    cur.execute(\"select MAX(date) from KDaily\")\n    last_date=cur.fetchone()[0]\n    print(last_date)\n    start_date_str=datetime.date.strftime(last_date+datetime.timedelta(1),\"%Y-%m-%d\")\n    bs.login()\n    stock_industry_df=bs.query_stock_industry().get_data()\n    code_list=list(stock_industry_df.code)\n    k_df_list=[]\n    for code in tqdm(code_list):\n        k_df=bs.query_history_k_data_plus(code,adjustflag=\"2\",start_date=start_date_str,fields='date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST').get_data()\n        k_df_list.append(k_df)\n    concated_k_df=pd.concat(k_df_list)\n    concated_k_df.replace('',np.nan,inplace=True)\n    for c in tqdm(concated_k_df.columns[2:]):\n        concated_k_df[c]=concated_k_df[c].astype('float64')\n    connect=create_engine('mysql+pymysql:\/\/'+user+':'+password+'@'+host+':3306\/stock')#\n    pd.io.sql.to_sql(concated_k_df,'KDaily',connect,if_exists='append',index=False)\n\n    # \u66f4\u65b0\u8d22\u52a1\u6570\u636e\n    con = pymysql.connect(host=host,user=user,port=3306,database='stock',password=password)\n    cur= con.cursor()\n    cur.execute(\"select code,MAX(statDate) from Quarter group by code\")\n    result_tuple=cur.fetchall()\n    last_statDate_dict=dict(result_tuple)\n    now_quarter=datetime.date.today().month\/\/4+1\n    now_year=datetime.date.today().year\n    FS_df_list=[]\n    bs.login()\n    for code in tqdm(code_list):\n        if code in last_statDate_dict:\n            last_year=last_statDate_dict[code].year\n            last_quarter=last_statDate_dict[code].month\/\/4+1\n            next_quarter=last_quarter+1 if last_quarter&lt;4 else 1\n            next_year=last_year+1 if next_quarter==1 else last_year        \n            if next_quarter&lt;now_quarter or next_year&lt;now_year:\n                FS_df=get_merged_FS_df(code,next_year,next_quarter)\n                FS_df_list.append(FS_df)\n        else:\n            start_year=now_year=datetime.date.today().year-4\n            FS_df=get_merged_FS_df(code,start_year,1)\n            FS_df_list.append(FS_df)\n    concated_FS_df=pd.concat(FS_df_list)\n    for c in tqdm(concated_FS_df.columns[3:]):\n        concated_FS_df[c]=concated_FS_df[c].astype('float64')\n    connect=create_engine('mysql+pymysql:\/\/'+user+':'+password+'@'+host+':3306\/stock')\n    pd.io.sql.to_sql(concated_FS_df,'Quarter',connect,if_exists='append',index=False)\n\nhost='localhost'\nuser='root'\npassword='password'\nupdate_database()\nprint('Fininshed.')<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u4ece\u6570\u636e\u5e93\u4e2d\u8bfb\u53d6\u5e76\u9884\u6d4b\">\u4ece\u6570\u636e\u5e93\u4e2d\u8bfb\u53d6\u5e76\u9884\u6d4b<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u83b7\u53d6\u6570\u636e\u5e76\u9884\u5904\u7406\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def fill_k_df(all_k_df):\n    print('Filling k_df...')\n    containNan_series=all_k_df.isna().sum()>0\n    containNan_index=containNan_series[containNan_series==True].index\n    for c in tqdm(containNan_index):\n        na_index_list=all_k_df[all_k_df[c].isna()].index\n        for i in na_index_list:#\u5411\u524d\u586b\u5145\uff0c\u82e5\u9996\u884c\u4e3a\u7a7a\u5219\u4f1a\u9057\u6f0f\n            if i and all_k_df.loc[i,'code']==all_k_df.loc[i-1,'code']:\n                all_k_df.loc[i,c]=all_k_df.loc[i-1,c]\n        na_index_list=all_k_df[all_k_df[c].isna()].index\n        for i in na_index_list[::-1]:#\u5411\u540e\u586b\u5145\n            if i!=len(all_k_df) and all_k_df.loc[i,'code']==all_k_df.loc[i+1,'code']:\n                all_k_df.loc[i,c]=all_k_df.loc[i+1,c]\n    k_feature_df=all_k_df.loc[:,'open':]\n    k_feature_df.fillna(k_feature_df.mean(),inplace=True)#\u5747\u503c\u586b\u5145\n    all_k_df.loc[:,'open':]=k_feature_df\n    return all_k_df\ndef fill_FS_df(all_FS_df):\n    print('Filling FS_df...')\n    if 'year' not in all_FS_df.columns:\n        all_FS_df.insert(3,'year',list(map(lambda s:int(str(s)[:4]),all_FS_df['statDate'])))\n    if 'quarter' not in all_FS_df.columns:\n        all_FS_df.insert(4,'quarter',list(map(lambda s:1 if str(s)[5:7]=='03' else 2 if str(s)[5:7]=='06' else 3 if str(s)[5:7]=='09' else 4,all_FS_df['statDate'])))    \n\n    lack_FS_code_list=[]\n    for code in tqdm(all_FS_df.code.unique()):\n        code_df=all_FS_df[all_FS_df.code==code]\n        quarters=(code_df.year.iloc[-1]-code_df.year.iloc[0])*4+(code_df.quarter.iloc[-1]-code_df.quarter.iloc[0])+1\n        if len(code_df)&lt;quarters:\n            lack_FS_code_list.append(code)\n    filled_code_df_list=[]\n    for code in tqdm(lack_FS_code_list):\n        code_df=all_FS_df[all_FS_df.code==code]\n        i=1\n        while i&lt;len(code_df):\n            last_date=datetime.datetime.strptime(str(code_df.iloc[i-1]['statDate']),'%Y-%m-%d')\n            this_date=datetime.datetime.strptime(str(code_df.iloc[i]['statDate']),'%Y-%m-%d')\n            if (this_date-last_date).days>92:\n                last_quarter=code_df.iloc[i-1]['quarter']\n                last_year=code_df.iloc[i-1]['year']\n                added_row_df=code_df.iloc[[i-1]].copy()\n                added_row_df['year']=last_year if last_quarter&lt;4 else last_year+1\n                added_row_df['quarter']=last_quarter+1 if last_quarter&lt;4 else 1\n                date_str=str(last_year)+('-03-31' if last_quarter==4 else '-06-30' if last_quarter==1 else '-09-30' if last_quarter==2 else '-12-31')\n                added_row_df['pubDate']=date_str\n                added_row_df['statDate']=date_str\n                code_df=pd.concat([code_df.iloc[:i],added_row_df,code_df.iloc[i:]])\n                break\n            i+=1\n        filled_code_df_list.append(code_df)\n    if filled_code_df_list:\n        all_FS_df=pd.concat([all_FS_df[~all_FS_df.code.isin(lack_FS_code_list)],pd.concat(filled_code_df_list)])\n\n    filled_FS_df_list=[]\n    for code in tqdm(all_FS_df.code.unique()):\n        code_df=all_FS_df[all_FS_df.code==code]\n        if code_df.isna().sum().sum():\n            code_df.ffill(inplace=True)\n            code_df.bfill(inplace=True)\n        filled_FS_df_list.append(code_df)\n    filled_FS_df=pd.concat(filled_FS_df_list)\n    FS_feature_df=filled_FS_df.loc[:,'roeAvg':]\n    FS_feature_df.fillna(FS_feature_df.mean(),inplace=True)\n    filled_FS_df.loc[:,'roeAvg':]=FS_feature_df\n    return filled_FS_df\n    \nhost='localhost'#\nuser='root'\npassword='password'\n\nbs.login()\nhalfYearAgo_date=datetime.date.strftime(datetime.date.today()-datetime.timedelta(180),'%Y-%m-%d')\ntrade_state_df=bs.query_trade_dates(start_date=halfYearAgo_date).get_data()\nquery_k_start_date=trade_state_df[trade_state_df['is_trading_day']=='1'].iloc[-100]['calendar_date']# \u9996\u5148\u83b7\u53d6\u6700\u8fd1100\u4e2a\u4ea4\u6613\u65e5\u7684\u8d77\u59cb\u65e5\u671f\ncnx = mysql.connector.connect(user=user, password=password,host=host,database='stock')\nrecent_k_df = pd.read_sql_query(\"select * from KDaily where date>='%s'\"%query_k_start_date, cnx)\nrecent_k_df.drop(['id','adjustflag'],axis=1,inplace=True)\n\ntoday=datetime.date.today()\nnow_quarter=today.month\/\/4+1\nnow_year=today.year\nstart_statDate1=today-datetime.timedelta(365*3+180)#\u83b7\u53d6\u4e09\u5e74\u534a\u4e4b\u524d\u7684\u65e5\u671f\u4f5c\u4e3a\u8d77\u59cb\u65e5\u671f\nrecent_FS_df=pd.read_sql_query(\"select * from Quarter where statDate>='%s'\"%start_statDate1, cnx)\nrecent_FS_df.drop(['id','ebitToInterest','MBRevenue'],axis=1,inplace=True)\n\nfilled_k_df=fill_k_df(recent_k_df)\nfilled_FS_df=fill_FS_df(recent_FS_df)\nfs_tuple=np.unique(filled_FS_df['code'],return_counts=True)\nFS_enough_code_set=set(fs_tuple[0][fs_tuple[1]>=12])\nk_tuple=np.unique(filled_k_df['code'],return_counts=True)\nk_enough_code_set=set(k_tuple[0][k_tuple[1]>=100])\nenough_code_list=list(FS_enough_code_set.intersection(k_enough_code_set))\n\nk_df_list=[]\nFS_df_list=[]\nfor code in tqdm(enough_code_list):\n    latest_k_df=filled_k_df[filled_k_df['code']==code][-100:]\n    latest_FS_df=filled_FS_df[filled_FS_df['code']==code][-12:]\n    k_df_list.append(latest_k_df.loc[:,'open':])\n    FS_df_list.append(latest_FS_df.loc[:,'roeAvg':])\nk_array=np.array(k_df_list)\nFS_array=np.array(FS_df_list)\nminMaxScaler=MinMaxScaler()\nnorm_k_array=np.array(list(map(minMaxScaler.fit_transform,k_array)))\nnorm_FS_array=np.array(list(map(minMaxScaler.fit_transform,FS_array)))\nnorm_k_array.shape,norm_FS_array.shape<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9884\u6d4b\u5e76\u7b5b\u9009\u51fa\u4e0a\u6da8\u6982\u7387\u8f83\u5927\u7684\u524d\u51e0\u53ea\u80a1\u7968\uff0c\u753b\u51fa\u5176K\u7ebf\u56fe\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">model=keras.models.load_model('model\/k_lstm(64)__FS_lstm(64)_Concatenate()_relu()_Dense(3)__optimizer_adam_lr=0.01.keras')\npredict_array=model.predict([norm_k_array,norm_FS_array])\nsorted_code_tuple=sorted(zip(predict_array[:,2],enough_code_list),reverse=True)#\u6309\u7167\u6da8\u7684\u53ef\u80fd\u6027\u4ece\u5927\u5230\u5c0f\u6392\u5e8f\nsorted_code_list=[i[1] for i in sorted_code_tuple[:10]]#\u9009\u524d10\u4e2a\n\nplt.rcParams['font.sans-serif'] = ['SimHei']  # \u6307\u5b9a\u9ed8\u8ba4\u5b57\u4f53\nplt.rcParams['axes.unicode_minus'] = False  # \u89e3\u51b3\u8d1f\u53f7 '-' \u663e\u793a\u4e3a\u65b9\u5757\u7684\u95ee\u9898\n\ndef plot_k(code,ax,lmt=90):\n    #url='https:\/\/push2his.eastmoney.com\/api\/qt\/stock\/kline\/get?cb=jQuery3510994187652125889_1718687134220&amp;secid=0.000638&amp;ut=fa5fd1943c7b386f172d6893dbfba10b&amp;fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&amp;fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&amp;klt=101&amp;fqt=1&amp;end=20500101&amp;lmt=120&amp;_=1718687134234'\n    url='https:\/\/push2his.eastmoney.com\/api\/qt\/stock\/kline\/get?cb=jQuery3510994187652125889_1718687134220&amp;secid='+('0' if code[0]!='6' else '1')+'.'+code+'&amp;ut=fa5fd1943c7b386f172d6893dbfba10b&amp;fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&amp;fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&amp;klt=101&amp;fqt=1&amp;end=20500101&amp;lmt='+str(lmt)+'&amp;_=1718687134234'\n    text=requests.get(url).text\n    data_dict=json.loads(text[text.index('{'):-2])['data']\n    k2D_list=[[j if j.count('-')==2 else float(j) for j in i.split(',')] for i in data_dict['klines']]\n    open_list=[i[1] for i in k2D_list]\n    close_list=[i[2] for i in k2D_list]\n    high_list=[i[3] for i in k2D_list]\n    low_list=[i[4] for i in k2D_list]\n    mp_f.candlestick2_ochl(ax,open_list,close_list,high_list,low_list,width=0.5,colorup='r',colordown='g')\n    ax.plot(pd.Series(close_list).rolling(window=5).mean())\n    #ax.plot(pd.Series(close_list).rolling(window=10).mean())\n    #ax.plot(pd.Series(close_list).rolling(window=20).mean())\n    #\u6dfb\u52a0\u884c\u4e1a\u8bf4\u660e\n    url2='https:\/\/datacenter.eastmoney.com\/securities\/api\/data\/v1\/get?reportName=RPT_F10_BASIC_ORGINFO&amp;columns=SECUCODE%2CSECURITY_CODE%2CSECURITY_NAME_ABBR%2CORG_CODE%2CORG_NAME%2CORG_NAME_EN%2CFORMERNAME%2CSTR_CODEA%2CSTR_NAMEA%2CSTR_CODEB%2CSTR_NAMEB%2CSTR_CODEH%2CSTR_NAMEH%2CSECURITY_TYPE%2CEM2016%2CTRADE_MARKET%2CINDUSTRYCSRC1%2CPRESIDENT%2CLEGAL_PERSON%2CSECRETARY%2CCHAIRMAN%2CSECPRESENT%2CINDEDIRECTORS%2CORG_TEL%2CORG_EMAIL%2CORG_FAX%2CORG_WEB%2CADDRESS%2CREG_ADDRESS%2CPROVINCE%2CADDRESS_POSTCODE%2CREG_CAPITAL%2CREG_NUM%2CEMP_NUM%2CTATOLNUMBER%2CLAW_FIRM%2CACCOUNTFIRM_NAME%2CORG_PROFILE%2CBUSINESS_SCOPE%2CTRADE_MARKETT%2CTRADE_MARKET_CODE%2CSECURITY_TYPEE%2CSECURITY_TYPE_CODE%2CEXPAND_NAME_ABBR%2CEXPAND_NAME_PINYIN&amp;quoteColumns=&amp;filter=(SECUCODE%3D%22'+code+'.'+('SH' if code[0]=='6' else 'SZ')+'%22)&amp;pageNumber=1&amp;pageSize=1&amp;sortTypes=&amp;sortColumns=&amp;source=HSF10&amp;client=PC&amp;v=07123931473791763'\n    text2=requests.get(url2).text\n    basicInfo_dict=json.loads(text2)['result']['data'][0]\n    industry1_str=basicInfo_dict['INDUSTRYCSRC1']\n    industry2_str=basicInfo_dict['EM2016']\n    ax.set_xlabel(code+' '+data_dict['name']+'\\n'+industry1_str+'\\n'+industry2_str,fontdict={'size':14})\ncode_list2=[i[3:] for i in sorted_code_list]\nprint('code_list2:',code_list2)\ncols=3 #\u6bcf\u884c\u663e\u793a\u6570\u91cf\nlmt=90 #\u5c55\u793a\u6700\u8fd1K\u7ebf\u6570\u91cf\nclose_list=[]\nrows=math.ceil(len(code_list2)\/cols)\nfig,ax=plt.subplots(rows,cols,figsize=(16,rows*4),sharex=True)\nfor i,code in enumerate(code_list2):\n    if rows>=2:\n        plot_k(code,ax[i\/\/3][i%3],lmt=lmt)\n    else:\n        plot_k(code,ax[i%3],lmt=lmt)\nfig.tight_layout()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/\/images.weserv.nl\/?url=https:\/\/i-blog.csdnimg.cn\/direct\/1777ddc6531f4136b422989aac49d3cd.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u5c06\u80a1\u4ef7\u672a\u6765\u7684\u8868\u73b0\u5206\u4e3a\u6da8\u3001\u5e73\u3001\u8dcc\u4e09\u7c7b\uff0c\u53ef\u5229\u7528\u8fc7\u53bb\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u6570\u636e\u6765\u9884\u6d4b\u672a\u6765\u4e00\u6bb5\u65f6\u95f4\uff08\u5982\u672a\u67655\u5929\uff09\u7684\u80a1\u4ef7\u6da8\u8dcc\u3002\u5229\u7528\u7684\u6570\u636e\u5305\u542b\u6280\u672f\u9762K\u7ebf\u6570\u636e\u548c\u57fa\u672c\u9762\u8d22\u52a1\u6570\u636e\u3002\u6b64\u5904\u9009\u7528LSTM\u7f51\u7edc\u7ed3\u6784\u3002 \u6570\u636e\u83b7\u53d6 \u4f7f\u7528baostock\u53ef\u4ee5\u83b7\u53d6\u4e2a\u80a1\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u3001\u5b63\u9891\u8d22\u52a1\u6570\u636e\u3001\u5b63\u9891\u516c\u53f8\u62a5\u544a\u6570\u636e\u548c\u5b8f\u89c2\u7ecf\u6d4e\u6570\u636e\u3002\u7531\u4e8e\u5b63\u9891\u516c\u53f8\u62a5\u544a [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","vk_price":"10"},"categories":[1],"tags":[],"class_list":["post-324","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"views":445,"_links":{"self":[{"href":"https:\/\/noting.online\/index.php?rest_route=\/wp\/v2\/posts\/324","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/noting.online\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/noting.online\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/noting.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=324"}],"version-history":[{"count":2,"href":"https:\/\/noting.online\/index.php?rest_route=\/wp\/v2\/posts\/324\/revisions"}],"predecessor-version":[{"id":326,"href":"https:\/\/noting.online\/index.php?rest_route=\/wp\/v2\/posts\/324\/revisions\/326"}],"wp:attachment":[{"href":"https:\/\/noting.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/noting.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/noting.online\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}