diff --git a/code/data/cyq_perf.ipynb b/code/data/cyq_perf.ipynb new file mode 100644 index 0000000..70d220b --- /dev/null +++ b/code/data/cyq_perf.ipynb @@ -0,0 +1,441 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "initial_id", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:31:25.004019Z", + "start_time": "2025-03-12T15:31:24.322440Z" + } + }, + "outputs": [], + "source": [ + "from operator import index\n", + "\n", + "import tushare as ts\n", + "import pandas as pd\n", + "import time\n", + "\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "pro = ts.pro_api()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "972a5ac9f79fe373", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:31:40.917015Z", + "start_time": "2025-03-12T15:31:35.958771Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date his_low his_high cost_5pct cost_15pct \\\n", + "0 000001.SZ 20180104 0.2 12.7 7.2 7.9 \n", + "1 000002.SZ 20180104 0.3 31.8 14.1 15.6 \n", + "2 000004.SZ 20180104 0.8 53.2 21.6 22.0 \n", + "3 000008.SZ 20180104 0.1 13.9 7.2 7.8 \n", + "4 000009.SZ 20180104 0.3 15.0 5.9 5.9 \n", + "... ... ... ... ... ... ... \n", + "3091 603991.SH 20180104 12.0 67.8 26.4 27.0 \n", + "3092 603993.SH 20180104 1.5 8.1 5.6 5.8 \n", + "3093 603997.SH 20180104 5.4 31.5 9.9 10.2 \n", + "3094 603998.SH 20180104 3.9 18.9 9.8 10.1 \n", + "3095 603999.SH 20180104 5.4 30.9 6.9 7.2 \n", + "\n", + " cost_50pct cost_85pct cost_95pct weight_avg winner_rate \n", + "0 10.6 11.3 11.9 9.93 71.97 \n", + "1 20.1 23.1 24.3 19.62 99.34 \n", + "2 23.6 27.6 29.6 24.71 45.41 \n", + "3 8.6 9.2 10.5 8.64 47.04 \n", + "4 6.6 7.6 7.9 6.76 38.14 \n", + "... ... ... ... ... ... \n", + "3091 27.6 30.6 34.2 28.54 57.36 \n", + "3092 6.3 7.1 7.6 6.34 73.50 \n", + "3093 10.5 11.7 11.7 10.84 11.28 \n", + "3094 11.9 13.5 15.7 12.13 17.93 \n", + "3095 7.8 9.6 9.9 8.17 21.83 \n", + "\n", + "[3096 rows x 11 columns]\n" + ] + } + ], + "source": [ + "\n", + "df = pro.cyq_perf(trade_date='20180104')\n", + "print(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "1b5a82fbf4e380de", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:30:20.421604Z", + "start_time": "2025-03-12T15:30:20.224851Z" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import time\n", + "\n", + "h5_filename = '../../../data/sw_daily.h5'\n", + "\n", + "trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250420')\n", + "trade_cal = trade_cal[trade_cal['is_open'] == 1] # 只保留交易日\n", + "trade_dates = trade_cal['cal_date'].tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f448da220816bf98", + "metadata": { + "ExecuteTime": { + "start_time": "2025-03-12T15:30:20.436796Z" + }, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "任务 20250418 完成\n", + "任务 20250417 完成\n", + "任务 20250416 完成\n", + "任务 20250415 完成\n", + "任务 20250414 完成\n", + "任务 20250411 完成\n", + "任务 20250410 完成\n", + "任务 20250409 完成\n", + "任务 20250408 完成\n", + "任务 20250407 完成\n", + "任务 20250403 完成\n", + "任务 20250402 完成\n", + "任务 20250401 完成\n", + "任务 20250331 完成\n", + "任务 20250328 完成\n", + "任务 20250327 完成\n", + "任务 20250326 完成\n", + "任务 20250325 完成\n", + "任务 20250324 完成\n", + "任务 20250321 完成\n", + "任务 20250320 完成\n", + "任务 20250319 完成\n", + "任务 20250318 完成\n", + "任务 20250317 完成\n", + "任务 20250314 完成\n", + "任务 20250313 完成\n", + "任务 20250312 完成\n", + "任务 20250311 完成\n", + "任务 20250310 完成\n", + "任务 20250307 完成\n", + "任务 20250306 完成\n", + "任务 20250305 完成\n", + "任务 20250304 完成\n", + "任务 20250303 完成\n", + "任务 20250228 完成\n", + "任务 20250227 完成\n", + "任务 20250226 完成\n", + "任务 20250225 完成\n", + "任务 20250224 完成\n", + "任务 20250221 完成\n", + "任务 20250220 完成\n", + "任务 20250219 完成\n", + "任务 20250218 完成\n", + "任务 20250217 完成\n", + "任务 20250214 完成\n", + "任务 20250213 完成\n", + "任务 20250212 完成\n", + "任务 20250211 完成\n", + "任务 20250210 完成\n", + "任务 20250207 完成\n", + "任务 20250206 完成\n", + "任务 20250205 完成\n", + "任务 20250127 完成\n", + "任务 20250124 完成\n", + "任务 20250123 完成\n", + "任务 20250122 完成\n", + "任务 20250121 完成\n", + "任务 20250120 完成\n", + "任务 20250117 完成\n", + "任务 20250116 完成\n", + "任务 20250115 完成\n", + "任务 20250114 完成\n", + "任务 20250113 完成\n", + "任务 20250110 完成\n", + "任务 20250109 完成\n", + "任务 20250108 完成\n", + "任务 20250107 完成\n", + "任务 20250106 完成\n", + "任务 20250103 完成\n", + "任务 20250102 完成\n", + "任务 20241231 完成\n", + "任务 20241230 完成\n", + "任务 20241227 完成\n", + "任务 20241226 完成\n", + "任务 20241225 完成\n", + "任务 20241224 完成\n", + "任务 20241223 完成\n", + "任务 20241220 完成\n", + "任务 20241219 完成\n", + "任务 20241218 完成\n", + "任务 20241217 完成\n", + "任务 20241216 完成\n", + "任务 20241213 完成\n", + "任务 20241212 完成\n", + "任务 20241211 完成\n", + "任务 20241210 完成\n", + "任务 20241209 完成\n", + "任务 20241206 完成\n", + "任务 20241205 完成\n", + "任务 20241204 完成\n", + "任务 20241203 完成\n", + "任务 20241202 完成\n", + "任务 20241129 完成\n", + "任务 20241128 完成\n", + "任务 20241127 完成\n", + "任务 20241126 完成\n", + "任务 20241125 完成\n", + "任务 20241122 完成\n", + "任务 20241121 完成\n", + "任务 20241120 完成\n", + "任务 20241119 完成\n", + "任务 20241118 完成\n", + "任务 20241115 完成\n", + "任务 20241114 完成\n", + "任务 20241113 完成\n", + "任务 20241112 完成\n", + "任务 20241111 完成\n", + "任务 20241108 完成\n", + "任务 20241107 完成\n", + "任务 20241106 完成\n", + "任务 20241105 完成\n", + "任务 20241104 完成\n", + "任务 20241101 完成\n", + "任务 20241031 完成\n", + "任务 20241030 完成\n", + "任务 20241029 完成\n", + "任务 20241028 完成\n", + "任务 20241025 完成\n", + "任务 20241024 完成\n", + "任务 20241022 完成\n", + "任务 20241023 完成\n", + "任务 20241021 完成\n", + "任务 20241018 完成\n", + "任务 20241017 完成\n", + "任务 20241016 完成\n", + "任务 20241015 完成\n", + "任务 20241014 完成\n", + "任务 20241010 完成\n", + "任务 20241011 完成\n", + "任务 20241009 完成\n", + "任务 20241008 完成\n", + "任务 20240930 完成\n", + "任务 20240927 完成\n", + "任务 20240926 完成\n", + "任务 20240925 完成\n", + "任务 20240924 完成\n", + "任务 20240923 完成\n", + "任务 20240919 完成\n", + "任务 20240920 完成\n", + "任务 20240913 完成\n", + "任务 20240918 完成\n", + "任务 20240911 完成\n", + "任务 20240912 完成\n", + "任务 20240910 完成\n", + "任务 20240909 完成\n", + "任务 20240905 完成\n", + "任务 20240906 完成\n", + "任务 20240904 完成\n", + "任务 20240903 完成\n", + "任务 20240902 完成\n", + "任务 20240830 完成\n", + "任务 20240829 完成\n", + "任务 20240828 完成\n", + "任务 20240827 完成\n", + "任务 20240826 完成\n", + "任务 20240823 完成\n", + "任务 20240822 完成\n", + "任务 20240821 完成\n", + "任务 20240820 完成\n", + "任务 20240819 完成\n", + "任务 20240816 完成\n", + "任务 20240815 完成\n", + "任务 20240814 完成\n", + "任务 20240813 完成\n", + "任务 20240812 完成\n", + "任务 20240809 完成\n", + "任务 20240808 完成\n", + "任务 20240807 完成\n", + "任务 20240806 完成\n", + "任务 20240805 完成\n", + "任务 20240802 完成\n", + "任务 20240801 完成\n", + "任务 20240731 完成\n", + "任务 20240730 完成\n", + "任务 20240729 完成\n", + "任务 20240726 完成\n", + "任务 20240725 完成\n", + "任务 20240724 完成\n", + "任务 20240723 完成\n", + "任务 20240722 完成\n", + "任务 20240719 完成\n", + "任务 20240718 完成\n", + "任务 20240717 完成\n", + "任务 20240716 完成\n", + "任务 20240715 完成\n", + "任务 20240712 完成\n", + "任务 20240711 完成\n", + "任务 20240710 完成\n", + "任务 20240709 完成\n", + "任务 20240708 完成\n", + "任务 20240705 完成\n", + "任务 20240704 完成\n", + "任务 20240703 完成\n", + "任务 20240702 完成\n", + "任务 20240701 完成\n", + "任务 20240628 完成\n", + "任务 20240627 完成\n", + "任务 20240626 完成\n", + "任务 20240625 完成\n", + "任务 20240624 完成\n", + "任务 20240621 完成\n", + "任务 20240620 完成\n", + "任务 20240619 完成\n", + "任务 20240618 完成\n", + "任务 20240617 完成\n", + "任务 20240614 完成\n", + "任务 20240613 完成\n", + "任务 20240612 完成\n", + "任务 20240611 完成\n", + "任务 20240607 完成\n", + "任务 20240606 完成\n", + "任务 20240605 完成\n", + "任务 20240604 完成\n" + ] + } + ], + "source": [ + "from concurrent.futures import ThreadPoolExecutor, as_completed\n", + "\n", + "all_daily_data = []\n", + "\n", + "# API 调用计数和时间控制变量\n", + "api_call_count = 0\n", + "batch_start_time = time.time()\n", + "\n", + "\n", + "def get_data(trade_date):\n", + " time.sleep(0.1)\n", + " data = pro.cyq_perf(trade_date=trade_date)\n", + " if data is not None and not data.empty:\n", + " return data\n", + "\n", + "\n", + "with ThreadPoolExecutor(max_workers=2) as executor:\n", + " future_to_date = {executor.submit(get_data, td): td for td in trade_dates}\n", + "\n", + " for future in as_completed(future_to_date):\n", + " trade_date = future_to_date[future] # 获取对应的交易日期\n", + " try:\n", + " result = future.result() # 获取任务执行的结果\n", + " all_daily_data.append(result)\n", + " print(f\"任务 {trade_date} 完成\")\n", + " except Exception as e:\n", + " print(f\"获取 {trade_date} 数据时出错: {e}\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "907f732d3c397bf", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:31:10.381348500Z", + "start_time": "2025-03-12T15:23:41.345460Z" + } + }, + "outputs": [], + "source": [ + "\n", + "# 将所有数据合并为一个 DataFrame\n", + "all_daily_data_df = pd.concat(all_daily_data, ignore_index=True)\n", + "\n", + "# 将数据保存为 HDF5 文件(table 格式)\n", + "all_daily_data_df.to_hdf('../../data/cyq_perf.h5', key='cyq_perf', mode='w', format='table', data_columns=True)\n", + "\n", + "print(\"所有每日基础数据获取并保存完毕!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "73e829ac-ff3d-408e-beb3-0b87f5b00b19", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date\n", + "0 000001.SZ 20250312\n", + "1 000002.SZ 20250312\n", + "2 000004.SZ 20250312\n", + "3 000006.SZ 20250312\n", + "4 000007.SZ 20250312\n", + "... ... ...\n", + "7465732 603991.SH 20180102\n", + "7465733 603993.SH 20180102\n", + "7465734 603997.SH 20180102\n", + "7465735 603998.SH 20180102\n", + "7465736 603999.SH 20180102\n", + "\n", + "[7465737 rows x 2 columns]\n" + ] + } + ], + "source": [ + "h5_filename = '../../data/cyq_perf.h5'\n", + "key = '/cyq_perf'\n", + "max_date = None\n", + "with pd.HDFStore(h5_filename, mode='r') as store:\n", + " df = store[key][['ts_code', 'trade_date']]\n", + " print(df)\n", + " max_date = df['trade_date'].min()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/data/index_and_industry.ipynb b/code/data/index_and_industry.ipynb new file mode 100644 index 0000000..35613dd --- /dev/null +++ b/code/data/index_and_industry.ipynb @@ -0,0 +1,148 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "initial_id", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:23.864275Z", + "start_time": "2025-03-30T16:42:22.963221Z" + } + }, + "source": [ + "from operator import index\n", + "\n", + "import tushare as ts\n", + "import pandas as pd\n", + "import time\n", + "\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "pro = ts.pro_api()" + ], + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "id": "f448da220816bf98", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:25.559047Z", + "start_time": "2025-03-30T16:42:23.868783Z" + } + }, + "source": [ + "# 定义四个指数\n", + "index_list = ['399300.SH', '000905.SH', '000852.SH', '399006.SZ']\n", + "\n", + "# 获取并存储数据\n", + "all_data = []\n", + "\n", + "for ts_code in index_list:\n", + " df = pro.index_daily(ts_code=ts_code) # 可根据需要设置日期\n", + " df['ts_code'] = ts_code # 添加ts_code列来区分数据\n", + " all_data.append(df)\n", + "\n", + "# 合并所有数据\n", + "final_df = pd.concat(all_data, ignore_index=True)\n", + "\n", + "# 存储到H5文件\n", + "final_df.to_hdf('../../data/index_data.h5', key='index_data', mode='w')\n", + "\n", + "print(\"数据已经成功存储到index_data.h5文件中\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数据已经成功存储到index_data.h5文件中\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_6192\\3209233630.py:13: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", + " final_df = pd.concat(all_data, ignore_index=True)\n" + ] + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "id": "907f732d3c397bf", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:25.802535Z", + "start_time": "2025-03-30T16:42:25.766399Z" + } + }, + "source": [ + "h5_filename = '../../data/index_data.h5'\n", + "key = '/index_data'\n", + "with pd.HDFStore(h5_filename, mode='r') as store:\n", + " df = store[key]\n", + " print(df)\n" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date close open high low \\\n", + "0 000905.SH 20250328 5916.0314 5954.7297 5973.8015 5904.9159 \n", + "1 000905.SH 20250327 5957.6017 5932.5165 6000.6615 5891.7664 \n", + "2 000905.SH 20250326 5948.4986 5935.8537 5983.4739 5935.8537 \n", + "3 000905.SH 20250325 5946.9510 5969.4164 5993.9312 5929.6734 \n", + "4 000905.SH 20250324 5969.0789 5973.0466 5987.0606 5882.8780 \n", + "... ... ... ... ... ... ... \n", + "13423 399006.SZ 20100607 1069.4680 1005.0280 1075.2250 1001.7020 \n", + "13424 399006.SZ 20100604 1027.6810 989.6810 1027.6810 986.5040 \n", + "13425 399006.SZ 20100603 998.3940 1002.3550 1026.7020 997.7750 \n", + "13426 399006.SZ 20100602 997.1190 967.6090 997.1190 952.6110 \n", + "13427 399006.SZ 20100601 973.2330 986.0150 994.7930 948.1180 \n", + "\n", + " pre_close change pct_chg vol amount \n", + "0 5957.6017 -41.5703 -0.6978 1.342619e+08 1.688995e+08 \n", + "1 5948.4986 9.1031 0.1530 1.347089e+08 1.765905e+08 \n", + "2 5946.9510 1.5476 0.0260 1.367021e+08 1.716958e+08 \n", + "3 5969.0789 -22.1279 -0.3707 1.474839e+08 1.922270e+08 \n", + "4 5971.9302 -2.8513 -0.0477 1.691924e+08 2.200943e+08 \n", + "... ... ... ... ... ... \n", + "13423 1027.6810 41.7870 4.0661 2.655275e+06 9.106095e+06 \n", + "13424 998.3940 29.2870 2.9334 1.500295e+06 5.269441e+06 \n", + "13425 997.1190 1.2750 0.1279 1.616805e+06 6.240835e+06 \n", + "13426 973.2330 23.8860 2.4543 1.074628e+06 4.001206e+06 \n", + "13427 1000.0000 -26.7670 -2.6767 1.356285e+06 4.924177e+06 \n", + "\n", + "[13428 rows x 11 columns]\n" + ] + } + ], + "execution_count": 3 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/data/industry_daily.ipynb b/code/data/industry_daily.ipynb new file mode 100644 index 0000000..94bfc94 --- /dev/null +++ b/code/data/industry_daily.ipynb @@ -0,0 +1,2167 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "d7b022b7-8ffb-46ce-9967-f9421aa3a69f", + "metadata": {}, + "outputs": [], + "source": [ + "import tushare as ts\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "\n", + "pro = ts.pro_api()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6ed0dac4-4188-44a1-974c-782b40fcaf79", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "成功获取并保存 20250221 的每日基础数据\n", + "成功获取并保存 20250220 的每日基础数据\n", + "成功获取并保存 20250219 的每日基础数据\n", + "成功获取并保存 20250218 的每日基础数据\n", + "成功获取并保存 20250217 的每日基础数据\n", + "成功获取并保存 20250214 的每日基础数据\n", + "成功获取并保存 20250213 的每日基础数据\n", + "成功获取并保存 20250212 的每日基础数据\n", + "成功获取并保存 20250211 的每日基础数据\n", + "成功获取并保存 20250210 的每日基础数据\n", + "成功获取并保存 20250207 的每日基础数据\n", + "成功获取并保存 20250206 的每日基础数据\n", + "成功获取并保存 20250205 的每日基础数据\n", + "成功获取并保存 20250127 的每日基础数据\n", + "成功获取并保存 20250124 的每日基础数据\n", + "成功获取并保存 20250123 的每日基础数据\n", + "成功获取并保存 20250122 的每日基础数据\n", + "成功获取并保存 20250121 的每日基础数据\n", + "成功获取并保存 20250120 的每日基础数据\n", + "成功获取并保存 20250117 的每日基础数据\n", + "成功获取并保存 20250116 的每日基础数据\n", + "成功获取并保存 20250115 的每日基础数据\n", + "成功获取并保存 20250114 的每日基础数据\n", + "成功获取并保存 20250113 的每日基础数据\n", + "成功获取并保存 20250110 的每日基础数据\n", + "成功获取并保存 20250109 的每日基础数据\n", + "成功获取并保存 20250108 的每日基础数据\n", + "成功获取并保存 20250107 的每日基础数据\n", + "成功获取并保存 20250106 的每日基础数据\n", + "成功获取并保存 20250103 的每日基础数据\n", + "成功获取并保存 20250102 的每日基础数据\n", + "成功获取并保存 20241231 的每日基础数据\n", + "成功获取并保存 20241230 的每日基础数据\n", + "成功获取并保存 20241227 的每日基础数据\n", + "成功获取并保存 20241226 的每日基础数据\n", + "成功获取并保存 20241225 的每日基础数据\n", + "成功获取并保存 20241224 的每日基础数据\n", + "成功获取并保存 20241223 的每日基础数据\n", + "成功获取并保存 20241220 的每日基础数据\n", + "成功获取并保存 20241219 的每日基础数据\n", + "成功获取并保存 20241218 的每日基础数据\n", + "成功获取并保存 20241217 的每日基础数据\n", + "成功获取并保存 20241216 的每日基础数据\n", + "成功获取并保存 20241213 的每日基础数据\n", + "成功获取并保存 20241212 的每日基础数据\n", + "成功获取并保存 20241211 的每日基础数据\n", + "成功获取并保存 20241210 的每日基础数据\n", + "成功获取并保存 20241209 的每日基础数据\n", + "成功获取并保存 20241206 的每日基础数据\n", + "成功获取并保存 20241205 的每日基础数据\n", + "成功获取并保存 20241204 的每日基础数据\n", + "成功获取并保存 20241203 的每日基础数据\n", + "成功获取并保存 20241202 的每日基础数据\n", + "成功获取并保存 20241129 的每日基础数据\n", + "成功获取并保存 20241128 的每日基础数据\n", + "成功获取并保存 20241127 的每日基础数据\n", + "成功获取并保存 20241126 的每日基础数据\n", + "成功获取并保存 20241125 的每日基础数据\n", + "成功获取并保存 20241122 的每日基础数据\n", + "成功获取并保存 20241121 的每日基础数据\n", + "成功获取并保存 20241120 的每日基础数据\n", + "成功获取并保存 20241119 的每日基础数据\n", + "成功获取并保存 20241118 的每日基础数据\n", + "成功获取并保存 20241115 的每日基础数据\n", + "成功获取并保存 20241114 的每日基础数据\n", + "成功获取并保存 20241113 的每日基础数据\n", + "成功获取并保存 20241112 的每日基础数据\n", + "成功获取并保存 20241111 的每日基础数据\n", + "成功获取并保存 20241108 的每日基础数据\n", + "成功获取并保存 20241107 的每日基础数据\n", + "成功获取并保存 20241106 的每日基础数据\n", + "成功获取并保存 20241105 的每日基础数据\n", + "成功获取并保存 20241104 的每日基础数据\n", + "成功获取并保存 20241101 的每日基础数据\n", + "成功获取并保存 20241031 的每日基础数据\n", + "成功获取并保存 20241030 的每日基础数据\n", + "成功获取并保存 20241029 的每日基础数据\n", + "成功获取并保存 20241028 的每日基础数据\n", + "成功获取并保存 20241025 的每日基础数据\n", + "成功获取并保存 20241024 的每日基础数据\n", + "成功获取并保存 20241023 的每日基础数据\n", + "成功获取并保存 20241022 的每日基础数据\n", + "成功获取并保存 20241021 的每日基础数据\n", + "成功获取并保存 20241018 的每日基础数据\n", + "成功获取并保存 20241017 的每日基础数据\n", + "成功获取并保存 20241016 的每日基础数据\n", + "成功获取并保存 20241015 的每日基础数据\n", + "成功获取并保存 20241014 的每日基础数据\n", + "成功获取并保存 20241011 的每日基础数据\n", + "成功获取并保存 20241010 的每日基础数据\n", + "成功获取并保存 20241009 的每日基础数据\n", + "成功获取并保存 20241008 的每日基础数据\n", + "成功获取并保存 20240930 的每日基础数据\n", + "成功获取并保存 20240927 的每日基础数据\n", + "成功获取并保存 20240926 的每日基础数据\n", + "成功获取并保存 20240925 的每日基础数据\n", + "成功获取并保存 20240924 的每日基础数据\n", + "成功获取并保存 20240923 的每日基础数据\n", + "成功获取并保存 20240920 的每日基础数据\n", + "成功获取并保存 20240919 的每日基础数据\n", + "成功获取并保存 20240918 的每日基础数据\n", + "成功获取并保存 20240913 的每日基础数据\n", + "成功获取并保存 20240912 的每日基础数据\n", + "成功获取并保存 20240911 的每日基础数据\n", + "成功获取并保存 20240910 的每日基础数据\n", + "成功获取并保存 20240909 的每日基础数据\n", + "成功获取并保存 20240906 的每日基础数据\n", + "成功获取并保存 20240905 的每日基础数据\n", + "成功获取并保存 20240904 的每日基础数据\n", + "成功获取并保存 20240903 的每日基础数据\n", + "成功获取并保存 20240902 的每日基础数据\n", + "成功获取并保存 20240830 的每日基础数据\n", + "成功获取并保存 20240829 的每日基础数据\n", + "成功获取并保存 20240828 的每日基础数据\n", + "成功获取并保存 20240827 的每日基础数据\n", + "成功获取并保存 20240826 的每日基础数据\n", + "成功获取并保存 20240823 的每日基础数据\n", + "成功获取并保存 20240822 的每日基础数据\n", + "成功获取并保存 20240821 的每日基础数据\n", + "成功获取并保存 20240820 的每日基础数据\n", + "成功获取并保存 20240819 的每日基础数据\n", + "成功获取并保存 20240816 的每日基础数据\n", + "成功获取并保存 20240815 的每日基础数据\n", + "成功获取并保存 20240814 的每日基础数据\n", + "成功获取并保存 20240813 的每日基础数据\n", + "成功获取并保存 20240812 的每日基础数据\n", + "成功获取并保存 20240809 的每日基础数据\n", + "成功获取并保存 20240808 的每日基础数据\n", + "成功获取并保存 20240807 的每日基础数据\n", + "成功获取并保存 20240806 的每日基础数据\n", + "成功获取并保存 20240805 的每日基础数据\n", + "成功获取并保存 20240802 的每日基础数据\n", + "成功获取并保存 20240801 的每日基础数据\n", + "成功获取并保存 20240731 的每日基础数据\n", + "成功获取并保存 20240730 的每日基础数据\n", + "成功获取并保存 20240729 的每日基础数据\n", + "成功获取并保存 20240726 的每日基础数据\n", + "成功获取并保存 20240725 的每日基础数据\n", + "成功获取并保存 20240724 的每日基础数据\n", + "成功获取并保存 20240723 的每日基础数据\n", + "成功获取并保存 20240722 的每日基础数据\n", + "成功获取并保存 20240719 的每日基础数据\n", + "成功获取并保存 20240718 的每日基础数据\n", + "成功获取并保存 20240717 的每日基础数据\n", + "成功获取并保存 20240716 的每日基础数据\n", + "已调用 150 次 API,等待 28.88 秒以满足速率限制...\n", + "成功获取并保存 20240715 的每日基础数据\n", + "成功获取并保存 20240712 的每日基础数据\n", + "成功获取并保存 20240711 的每日基础数据\n", + "成功获取并保存 20240710 的每日基础数据\n", + "成功获取并保存 20240709 的每日基础数据\n", + "成功获取并保存 20240708 的每日基础数据\n", + "成功获取并保存 20240705 的每日基础数据\n", + "成功获取并保存 20240704 的每日基础数据\n", + "成功获取并保存 20240703 的每日基础数据\n", + "成功获取并保存 20240702 的每日基础数据\n", + "成功获取并保存 20240701 的每日基础数据\n", + "成功获取并保存 20240628 的每日基础数据\n", + "成功获取并保存 20240627 的每日基础数据\n", + "成功获取并保存 20240626 的每日基础数据\n", + "成功获取并保存 20240625 的每日基础数据\n", + "成功获取并保存 20240624 的每日基础数据\n", + "成功获取并保存 20240621 的每日基础数据\n", + "成功获取并保存 20240620 的每日基础数据\n", + "成功获取并保存 20240619 的每日基础数据\n", + "成功获取并保存 20240618 的每日基础数据\n", + "成功获取并保存 20240617 的每日基础数据\n", + "成功获取并保存 20240614 的每日基础数据\n", + "成功获取并保存 20240613 的每日基础数据\n", + "成功获取并保存 20240612 的每日基础数据\n", + "成功获取并保存 20240611 的每日基础数据\n", + "成功获取并保存 20240607 的每日基础数据\n", + "成功获取并保存 20240606 的每日基础数据\n", + "成功获取并保存 20240605 的每日基础数据\n", + "成功获取并保存 20240604 的每日基础数据\n", + "成功获取并保存 20240603 的每日基础数据\n", + "成功获取并保存 20240531 的每日基础数据\n", + "成功获取并保存 20240530 的每日基础数据\n", + "成功获取并保存 20240529 的每日基础数据\n", + "成功获取并保存 20240528 的每日基础数据\n", + "成功获取并保存 20240527 的每日基础数据\n", + "成功获取并保存 20240524 的每日基础数据\n", + "成功获取并保存 20240523 的每日基础数据\n", + "成功获取并保存 20240522 的每日基础数据\n", + "成功获取并保存 20240521 的每日基础数据\n", + "成功获取并保存 20240520 的每日基础数据\n", + "成功获取并保存 20240517 的每日基础数据\n", + "成功获取并保存 20240516 的每日基础数据\n", + "成功获取并保存 20240515 的每日基础数据\n", + "成功获取并保存 20240514 的每日基础数据\n", + "成功获取并保存 20240513 的每日基础数据\n", + "成功获取并保存 20240510 的每日基础数据\n", + "成功获取并保存 20240509 的每日基础数据\n", + "成功获取并保存 20240508 的每日基础数据\n", + "成功获取并保存 20240507 的每日基础数据\n", + "成功获取并保存 20240506 的每日基础数据\n", + "成功获取并保存 20240430 的每日基础数据\n", + "成功获取并保存 20240429 的每日基础数据\n", + "成功获取并保存 20240426 的每日基础数据\n", + "成功获取并保存 20240425 的每日基础数据\n", + "成功获取并保存 20240424 的每日基础数据\n", + "成功获取并保存 20240423 的每日基础数据\n", + "成功获取并保存 20240422 的每日基础数据\n", + "成功获取并保存 20240419 的每日基础数据\n", + "成功获取并保存 20240418 的每日基础数据\n", + "成功获取并保存 20240417 的每日基础数据\n", + "成功获取并保存 20240416 的每日基础数据\n", + "成功获取并保存 20240415 的每日基础数据\n", + "成功获取并保存 20240412 的每日基础数据\n", + "成功获取并保存 20240411 的每日基础数据\n", + "成功获取并保存 20240410 的每日基础数据\n", + "成功获取并保存 20240409 的每日基础数据\n", + "成功获取并保存 20240408 的每日基础数据\n", + "成功获取并保存 20240403 的每日基础数据\n", + "成功获取并保存 20240402 的每日基础数据\n", + "成功获取并保存 20240401 的每日基础数据\n", + "成功获取并保存 20240329 的每日基础数据\n", + "成功获取并保存 20240328 的每日基础数据\n", + "成功获取并保存 20240327 的每日基础数据\n", + "成功获取并保存 20240326 的每日基础数据\n", + "成功获取并保存 20240325 的每日基础数据\n", + "成功获取并保存 20240322 的每日基础数据\n", + "成功获取并保存 20240321 的每日基础数据\n", + "成功获取并保存 20240320 的每日基础数据\n", + "成功获取并保存 20240319 的每日基础数据\n", + "成功获取并保存 20240318 的每日基础数据\n", + "成功获取并保存 20240315 的每日基础数据\n", + "成功获取并保存 20240314 的每日基础数据\n", + "成功获取并保存 20240313 的每日基础数据\n", + "成功获取并保存 20240312 的每日基础数据\n", + "成功获取并保存 20240311 的每日基础数据\n", + "成功获取并保存 20240308 的每日基础数据\n", + "成功获取并保存 20240307 的每日基础数据\n", + "成功获取并保存 20240306 的每日基础数据\n", + "成功获取并保存 20240305 的每日基础数据\n", + "成功获取并保存 20240304 的每日基础数据\n", + "成功获取并保存 20240301 的每日基础数据\n", + "成功获取并保存 20240229 的每日基础数据\n", + "成功获取并保存 20240228 的每日基础数据\n", + "成功获取并保存 20240227 的每日基础数据\n", + "成功获取并保存 20240226 的每日基础数据\n", + "成功获取并保存 20240223 的每日基础数据\n", + "成功获取并保存 20240222 的每日基础数据\n", + "成功获取并保存 20240221 的每日基础数据\n", + "成功获取并保存 20240220 的每日基础数据\n", + "成功获取并保存 20240219 的每日基础数据\n", + "成功获取并保存 20240208 的每日基础数据\n", + "成功获取并保存 20240207 的每日基础数据\n", + "成功获取并保存 20240206 的每日基础数据\n", + "成功获取并保存 20240205 的每日基础数据\n", + "成功获取并保存 20240202 的每日基础数据\n", + "成功获取并保存 20240201 的每日基础数据\n", + "成功获取并保存 20240131 的每日基础数据\n", + "成功获取并保存 20240130 的每日基础数据\n", + "成功获取并保存 20240129 的每日基础数据\n", + "成功获取并保存 20240126 的每日基础数据\n", + "成功获取并保存 20240125 的每日基础数据\n", + "成功获取并保存 20240124 的每日基础数据\n", + "成功获取并保存 20240123 的每日基础数据\n", + "成功获取并保存 20240122 的每日基础数据\n", + "成功获取并保存 20240119 的每日基础数据\n", + "成功获取并保存 20240118 的每日基础数据\n", + "成功获取并保存 20240117 的每日基础数据\n", + "成功获取并保存 20240116 的每日基础数据\n", + "成功获取并保存 20240115 的每日基础数据\n", + "成功获取并保存 20240112 的每日基础数据\n", + "成功获取并保存 20240111 的每日基础数据\n", + "成功获取并保存 20240110 的每日基础数据\n", + "成功获取并保存 20240109 的每日基础数据\n", + "成功获取并保存 20240108 的每日基础数据\n", + "成功获取并保存 20240105 的每日基础数据\n", + "成功获取并保存 20240104 的每日基础数据\n", + "成功获取并保存 20240103 的每日基础数据\n", + "成功获取并保存 20240102 的每日基础数据\n", + "成功获取并保存 20231229 的每日基础数据\n", + "成功获取并保存 20231228 的每日基础数据\n", + "成功获取并保存 20231227 的每日基础数据\n", + "成功获取并保存 20231226 的每日基础数据\n", + "成功获取并保存 20231225 的每日基础数据\n", + "成功获取并保存 20231222 的每日基础数据\n", + "成功获取并保存 20231221 的每日基础数据\n", + "成功获取并保存 20231220 的每日基础数据\n", + "成功获取并保存 20231219 的每日基础数据\n", + "成功获取并保存 20231218 的每日基础数据\n", + "成功获取并保存 20231215 的每日基础数据\n", + "成功获取并保存 20231214 的每日基础数据\n", + "成功获取并保存 20231213 的每日基础数据\n", + "成功获取并保存 20231212 的每日基础数据\n", + "成功获取并保存 20231211 的每日基础数据\n", + "成功获取并保存 20231208 的每日基础数据\n", + "成功获取并保存 20231207 的每日基础数据\n", + "成功获取并保存 20231206 的每日基础数据\n", + "成功获取并保存 20231205 的每日基础数据\n", + "成功获取并保存 20231204 的每日基础数据\n", + "成功获取并保存 20231201 的每日基础数据\n", + "成功获取并保存 20231130 的每日基础数据\n", + "已调用 150 次 API,等待 29.24 秒以满足速率限制...\n", + "成功获取并保存 20231129 的每日基础数据\n", + "成功获取并保存 20231128 的每日基础数据\n", + "成功获取并保存 20231127 的每日基础数据\n", + "成功获取并保存 20231124 的每日基础数据\n", + "成功获取并保存 20231123 的每日基础数据\n", + "成功获取并保存 20231122 的每日基础数据\n", + "成功获取并保存 20231121 的每日基础数据\n", + "成功获取并保存 20231120 的每日基础数据\n", + "成功获取并保存 20231117 的每日基础数据\n", + "成功获取并保存 20231116 的每日基础数据\n", + "成功获取并保存 20231115 的每日基础数据\n", + "成功获取并保存 20231114 的每日基础数据\n", + "成功获取并保存 20231113 的每日基础数据\n", + "成功获取并保存 20231110 的每日基础数据\n", + "成功获取并保存 20231109 的每日基础数据\n", + "成功获取并保存 20231108 的每日基础数据\n", + "成功获取并保存 20231107 的每日基础数据\n", + "成功获取并保存 20231106 的每日基础数据\n", + "成功获取并保存 20231103 的每日基础数据\n", + "成功获取并保存 20231102 的每日基础数据\n", + "成功获取并保存 20231101 的每日基础数据\n", + "成功获取并保存 20231031 的每日基础数据\n", + "成功获取并保存 20231030 的每日基础数据\n", + "成功获取并保存 20231027 的每日基础数据\n", + "成功获取并保存 20231026 的每日基础数据\n", + "成功获取并保存 20231025 的每日基础数据\n", + "成功获取并保存 20231024 的每日基础数据\n", + "成功获取并保存 20231023 的每日基础数据\n", + "成功获取并保存 20231020 的每日基础数据\n", + "成功获取并保存 20231019 的每日基础数据\n", + "成功获取并保存 20231018 的每日基础数据\n", + "成功获取并保存 20231017 的每日基础数据\n", + "成功获取并保存 20231016 的每日基础数据\n", + "成功获取并保存 20231013 的每日基础数据\n", + "成功获取并保存 20231012 的每日基础数据\n", + "成功获取并保存 20231011 的每日基础数据\n", + "成功获取并保存 20231010 的每日基础数据\n", + "成功获取并保存 20231009 的每日基础数据\n", + "成功获取并保存 20230928 的每日基础数据\n", + "成功获取并保存 20230927 的每日基础数据\n", + "成功获取并保存 20230926 的每日基础数据\n", + "成功获取并保存 20230925 的每日基础数据\n", + "成功获取并保存 20230922 的每日基础数据\n", + "成功获取并保存 20230921 的每日基础数据\n", + "成功获取并保存 20230920 的每日基础数据\n", + "成功获取并保存 20230919 的每日基础数据\n", + "成功获取并保存 20230918 的每日基础数据\n", + "成功获取并保存 20230915 的每日基础数据\n", + "成功获取并保存 20230914 的每日基础数据\n", + "成功获取并保存 20230913 的每日基础数据\n", + "成功获取并保存 20230912 的每日基础数据\n", + "成功获取并保存 20230911 的每日基础数据\n", + "成功获取并保存 20230908 的每日基础数据\n", + "成功获取并保存 20230907 的每日基础数据\n", + "成功获取并保存 20230906 的每日基础数据\n", + "成功获取并保存 20230905 的每日基础数据\n", + "成功获取并保存 20230904 的每日基础数据\n", + "成功获取并保存 20230901 的每日基础数据\n", + "成功获取并保存 20230831 的每日基础数据\n", + "成功获取并保存 20230830 的每日基础数据\n", + "成功获取并保存 20230829 的每日基础数据\n", + "成功获取并保存 20230828 的每日基础数据\n", + "成功获取并保存 20230825 的每日基础数据\n", + "成功获取并保存 20230824 的每日基础数据\n", + "成功获取并保存 20230823 的每日基础数据\n", + "成功获取并保存 20230822 的每日基础数据\n", + "成功获取并保存 20230821 的每日基础数据\n", + "成功获取并保存 20230818 的每日基础数据\n", + "成功获取并保存 20230817 的每日基础数据\n", + "成功获取并保存 20230816 的每日基础数据\n", + "成功获取并保存 20230815 的每日基础数据\n", + "成功获取并保存 20230814 的每日基础数据\n", + "成功获取并保存 20230811 的每日基础数据\n", + "成功获取并保存 20230810 的每日基础数据\n", + "成功获取并保存 20230809 的每日基础数据\n", + "成功获取并保存 20230808 的每日基础数据\n", + "成功获取并保存 20230807 的每日基础数据\n", + "成功获取并保存 20230804 的每日基础数据\n", + "成功获取并保存 20230803 的每日基础数据\n", + "成功获取并保存 20230802 的每日基础数据\n", + "成功获取并保存 20230801 的每日基础数据\n", + "成功获取并保存 20230731 的每日基础数据\n", + "成功获取并保存 20230728 的每日基础数据\n", + "成功获取并保存 20230727 的每日基础数据\n", + "成功获取并保存 20230726 的每日基础数据\n", + "成功获取并保存 20230725 的每日基础数据\n", + "成功获取并保存 20230724 的每日基础数据\n", + "成功获取并保存 20230721 的每日基础数据\n", + "成功获取并保存 20230720 的每日基础数据\n", + "成功获取并保存 20230719 的每日基础数据\n", + "成功获取并保存 20230718 的每日基础数据\n", + "成功获取并保存 20230717 的每日基础数据\n", + "成功获取并保存 20230714 的每日基础数据\n", + "成功获取并保存 20230713 的每日基础数据\n", + "成功获取并保存 20230712 的每日基础数据\n", + "成功获取并保存 20230711 的每日基础数据\n", + "成功获取并保存 20230710 的每日基础数据\n", + "成功获取并保存 20230707 的每日基础数据\n", + "成功获取并保存 20230706 的每日基础数据\n", + "成功获取并保存 20230705 的每日基础数据\n", + "成功获取并保存 20230704 的每日基础数据\n", + "成功获取并保存 20230703 的每日基础数据\n", + "成功获取并保存 20230630 的每日基础数据\n", + "成功获取并保存 20230629 的每日基础数据\n", + "成功获取并保存 20230628 的每日基础数据\n", + "成功获取并保存 20230627 的每日基础数据\n", + "成功获取并保存 20230626 的每日基础数据\n", + "成功获取并保存 20230621 的每日基础数据\n", + "成功获取并保存 20230620 的每日基础数据\n", + "成功获取并保存 20230619 的每日基础数据\n", + "成功获取并保存 20230616 的每日基础数据\n", + "成功获取并保存 20230615 的每日基础数据\n", + "成功获取并保存 20230614 的每日基础数据\n", + "成功获取并保存 20230613 的每日基础数据\n", + "成功获取并保存 20230612 的每日基础数据\n", + "成功获取并保存 20230609 的每日基础数据\n", + "成功获取并保存 20230608 的每日基础数据\n", + "成功获取并保存 20230607 的每日基础数据\n", + "成功获取并保存 20230606 的每日基础数据\n", + "成功获取并保存 20230605 的每日基础数据\n", + "成功获取并保存 20230602 的每日基础数据\n", + "成功获取并保存 20230601 的每日基础数据\n", + "成功获取并保存 20230531 的每日基础数据\n", + "成功获取并保存 20230530 的每日基础数据\n", + "成功获取并保存 20230529 的每日基础数据\n", + "成功获取并保存 20230526 的每日基础数据\n", + "成功获取并保存 20230525 的每日基础数据\n", + "成功获取并保存 20230524 的每日基础数据\n", + "成功获取并保存 20230523 的每日基础数据\n", + "成功获取并保存 20230522 的每日基础数据\n", + "成功获取并保存 20230519 的每日基础数据\n", + "成功获取并保存 20230518 的每日基础数据\n", + "成功获取并保存 20230517 的每日基础数据\n", + "成功获取并保存 20230516 的每日基础数据\n", + "成功获取并保存 20230515 的每日基础数据\n", + "成功获取并保存 20230512 的每日基础数据\n", + "成功获取并保存 20230511 的每日基础数据\n", + "成功获取并保存 20230510 的每日基础数据\n", + "成功获取并保存 20230509 的每日基础数据\n", + "成功获取并保存 20230508 的每日基础数据\n", + "成功获取并保存 20230505 的每日基础数据\n", + "成功获取并保存 20230504 的每日基础数据\n", + "成功获取并保存 20230428 的每日基础数据\n", + "成功获取并保存 20230427 的每日基础数据\n", + "成功获取并保存 20230426 的每日基础数据\n", + "成功获取并保存 20230425 的每日基础数据\n", + "成功获取并保存 20230424 的每日基础数据\n", + "成功获取并保存 20230421 的每日基础数据\n", + "成功获取并保存 20230420 的每日基础数据\n", + "成功获取并保存 20230419 的每日基础数据\n", + "已调用 150 次 API,等待 27.56 秒以满足速率限制...\n", + "成功获取并保存 20230418 的每日基础数据\n", + "成功获取并保存 20230417 的每日基础数据\n", + "成功获取并保存 20230414 的每日基础数据\n", + "成功获取并保存 20230413 的每日基础数据\n", + "成功获取并保存 20230412 的每日基础数据\n", + "成功获取并保存 20230411 的每日基础数据\n", + "成功获取并保存 20230410 的每日基础数据\n", + "成功获取并保存 20230407 的每日基础数据\n", + "成功获取并保存 20230406 的每日基础数据\n", + "成功获取并保存 20230404 的每日基础数据\n", + "成功获取并保存 20230403 的每日基础数据\n", + "成功获取并保存 20230331 的每日基础数据\n", + "成功获取并保存 20230330 的每日基础数据\n", + "成功获取并保存 20230329 的每日基础数据\n", + "成功获取并保存 20230328 的每日基础数据\n", + "成功获取并保存 20230327 的每日基础数据\n", + "成功获取并保存 20230324 的每日基础数据\n", + "成功获取并保存 20230323 的每日基础数据\n", + "成功获取并保存 20230322 的每日基础数据\n", + "成功获取并保存 20230321 的每日基础数据\n", + "成功获取并保存 20230320 的每日基础数据\n", + "成功获取并保存 20230317 的每日基础数据\n", + "成功获取并保存 20230316 的每日基础数据\n", + "成功获取并保存 20230315 的每日基础数据\n", + "成功获取并保存 20230314 的每日基础数据\n", + "成功获取并保存 20230313 的每日基础数据\n", + "成功获取并保存 20230310 的每日基础数据\n", + "成功获取并保存 20230309 的每日基础数据\n", + "成功获取并保存 20230308 的每日基础数据\n", + "成功获取并保存 20230307 的每日基础数据\n", + "成功获取并保存 20230306 的每日基础数据\n", + "成功获取并保存 20230303 的每日基础数据\n", + "成功获取并保存 20230302 的每日基础数据\n", + "成功获取并保存 20230301 的每日基础数据\n", + "成功获取并保存 20230228 的每日基础数据\n", + "成功获取并保存 20230227 的每日基础数据\n", + "成功获取并保存 20230224 的每日基础数据\n", + "成功获取并保存 20230223 的每日基础数据\n", + "成功获取并保存 20230222 的每日基础数据\n", + "成功获取并保存 20230221 的每日基础数据\n", + "成功获取并保存 20230220 的每日基础数据\n", + "成功获取并保存 20230217 的每日基础数据\n", + "成功获取并保存 20230216 的每日基础数据\n", + "成功获取并保存 20230215 的每日基础数据\n", + "成功获取并保存 20230214 的每日基础数据\n", + "成功获取并保存 20230213 的每日基础数据\n", + "成功获取并保存 20230210 的每日基础数据\n", + "成功获取并保存 20230209 的每日基础数据\n", + "成功获取并保存 20230208 的每日基础数据\n", + "成功获取并保存 20230207 的每日基础数据\n", + "成功获取并保存 20230206 的每日基础数据\n", + "成功获取并保存 20230203 的每日基础数据\n", + "成功获取并保存 20230202 的每日基础数据\n", + "成功获取并保存 20230201 的每日基础数据\n", + "成功获取并保存 20230131 的每日基础数据\n", + "成功获取并保存 20230130 的每日基础数据\n", + "成功获取并保存 20230120 的每日基础数据\n", + "成功获取并保存 20230119 的每日基础数据\n", + "成功获取并保存 20230118 的每日基础数据\n", + "成功获取并保存 20230117 的每日基础数据\n", + "成功获取并保存 20230116 的每日基础数据\n", + "成功获取并保存 20230113 的每日基础数据\n", + "成功获取并保存 20230112 的每日基础数据\n", + "成功获取并保存 20230111 的每日基础数据\n", + "成功获取并保存 20230110 的每日基础数据\n", + "成功获取并保存 20230109 的每日基础数据\n", + "成功获取并保存 20230106 的每日基础数据\n", + "成功获取并保存 20230105 的每日基础数据\n", + "成功获取并保存 20230104 的每日基础数据\n", + "成功获取并保存 20230103 的每日基础数据\n", + "成功获取并保存 20221230 的每日基础数据\n", + "成功获取并保存 20221229 的每日基础数据\n", + "成功获取并保存 20221228 的每日基础数据\n", + "成功获取并保存 20221227 的每日基础数据\n", + "成功获取并保存 20221226 的每日基础数据\n", + "成功获取并保存 20221223 的每日基础数据\n", + "成功获取并保存 20221222 的每日基础数据\n", + "成功获取并保存 20221221 的每日基础数据\n", + "成功获取并保存 20221220 的每日基础数据\n", + "成功获取并保存 20221219 的每日基础数据\n", + "成功获取并保存 20221216 的每日基础数据\n", + "成功获取并保存 20221215 的每日基础数据\n", + "成功获取并保存 20221214 的每日基础数据\n", + "成功获取并保存 20221213 的每日基础数据\n", + "成功获取并保存 20221212 的每日基础数据\n", + "成功获取并保存 20221209 的每日基础数据\n", + "成功获取并保存 20221208 的每日基础数据\n", + "成功获取并保存 20221207 的每日基础数据\n", + "成功获取并保存 20221206 的每日基础数据\n", + "成功获取并保存 20221205 的每日基础数据\n", + "成功获取并保存 20221202 的每日基础数据\n", + "成功获取并保存 20221201 的每日基础数据\n", + "成功获取并保存 20221130 的每日基础数据\n", + "成功获取并保存 20221129 的每日基础数据\n", + "成功获取并保存 20221128 的每日基础数据\n", + "成功获取并保存 20221125 的每日基础数据\n", + "成功获取并保存 20221124 的每日基础数据\n", + "成功获取并保存 20221123 的每日基础数据\n", + "成功获取并保存 20221122 的每日基础数据\n", + "成功获取并保存 20221121 的每日基础数据\n", + "成功获取并保存 20221118 的每日基础数据\n", + "成功获取并保存 20221117 的每日基础数据\n", + "成功获取并保存 20221116 的每日基础数据\n", + "成功获取并保存 20221115 的每日基础数据\n", + "成功获取并保存 20221114 的每日基础数据\n", + "成功获取并保存 20221111 的每日基础数据\n", + "成功获取并保存 20221110 的每日基础数据\n", + "成功获取并保存 20221109 的每日基础数据\n", + "成功获取并保存 20221108 的每日基础数据\n", + "成功获取并保存 20221107 的每日基础数据\n", + "成功获取并保存 20221104 的每日基础数据\n", + "成功获取并保存 20221103 的每日基础数据\n", + "成功获取并保存 20221102 的每日基础数据\n", + "成功获取并保存 20221101 的每日基础数据\n", + "成功获取并保存 20221031 的每日基础数据\n", + "成功获取并保存 20221028 的每日基础数据\n", + "成功获取并保存 20221027 的每日基础数据\n", + "成功获取并保存 20221026 的每日基础数据\n", + "成功获取并保存 20221025 的每日基础数据\n", + "成功获取并保存 20221024 的每日基础数据\n", + "成功获取并保存 20221021 的每日基础数据\n", + "成功获取并保存 20221020 的每日基础数据\n", + "成功获取并保存 20221019 的每日基础数据\n", + "成功获取并保存 20221018 的每日基础数据\n", + "成功获取并保存 20221017 的每日基础数据\n", + "成功获取并保存 20221014 的每日基础数据\n", + "成功获取并保存 20221013 的每日基础数据\n", + "成功获取并保存 20221012 的每日基础数据\n", + "成功获取并保存 20221011 的每日基础数据\n", + "成功获取并保存 20221010 的每日基础数据\n", + "成功获取并保存 20220930 的每日基础数据\n", + "成功获取并保存 20220929 的每日基础数据\n", + "成功获取并保存 20220928 的每日基础数据\n", + "成功获取并保存 20220927 的每日基础数据\n", + "成功获取并保存 20220926 的每日基础数据\n", + "成功获取并保存 20220923 的每日基础数据\n", + "成功获取并保存 20220922 的每日基础数据\n", + "成功获取并保存 20220921 的每日基础数据\n", + "成功获取并保存 20220920 的每日基础数据\n", + "成功获取并保存 20220919 的每日基础数据\n", + "成功获取并保存 20220916 的每日基础数据\n", + "成功获取并保存 20220915 的每日基础数据\n", + "成功获取并保存 20220914 的每日基础数据\n", + "成功获取并保存 20220913 的每日基础数据\n", + "成功获取并保存 20220909 的每日基础数据\n", + "成功获取并保存 20220908 的每日基础数据\n", + "成功获取并保存 20220907 的每日基础数据\n", + "成功获取并保存 20220906 的每日基础数据\n", + "成功获取并保存 20220905 的每日基础数据\n", + "成功获取并保存 20220902 的每日基础数据\n", + "已调用 150 次 API,等待 28.51 秒以满足速率限制...\n", + "成功获取并保存 20220901 的每日基础数据\n", + "成功获取并保存 20220831 的每日基础数据\n", + "成功获取并保存 20220830 的每日基础数据\n", + "成功获取并保存 20220829 的每日基础数据\n", + "成功获取并保存 20220826 的每日基础数据\n", + "成功获取并保存 20220825 的每日基础数据\n", + "成功获取并保存 20220824 的每日基础数据\n", + "成功获取并保存 20220823 的每日基础数据\n", + "成功获取并保存 20220822 的每日基础数据\n", + "成功获取并保存 20220819 的每日基础数据\n", + "成功获取并保存 20220818 的每日基础数据\n", + "成功获取并保存 20220817 的每日基础数据\n", + "成功获取并保存 20220816 的每日基础数据\n", + "成功获取并保存 20220815 的每日基础数据\n", + "成功获取并保存 20220812 的每日基础数据\n", + "成功获取并保存 20220811 的每日基础数据\n", + "成功获取并保存 20220810 的每日基础数据\n", + "成功获取并保存 20220809 的每日基础数据\n", + "成功获取并保存 20220808 的每日基础数据\n", + "成功获取并保存 20220805 的每日基础数据\n", + "成功获取并保存 20220804 的每日基础数据\n", + "成功获取并保存 20220803 的每日基础数据\n", + "成功获取并保存 20220802 的每日基础数据\n", + "成功获取并保存 20220801 的每日基础数据\n", + "成功获取并保存 20220729 的每日基础数据\n", + "成功获取并保存 20220728 的每日基础数据\n", + "成功获取并保存 20220727 的每日基础数据\n", + "成功获取并保存 20220726 的每日基础数据\n", + "成功获取并保存 20220725 的每日基础数据\n", + "成功获取并保存 20220722 的每日基础数据\n", + "成功获取并保存 20220721 的每日基础数据\n", + "成功获取并保存 20220720 的每日基础数据\n", + "成功获取并保存 20220719 的每日基础数据\n", + "成功获取并保存 20220718 的每日基础数据\n", + "成功获取并保存 20220715 的每日基础数据\n", + "成功获取并保存 20220714 的每日基础数据\n", + "成功获取并保存 20220713 的每日基础数据\n", + "成功获取并保存 20220712 的每日基础数据\n", + "成功获取并保存 20220711 的每日基础数据\n", + "成功获取并保存 20220708 的每日基础数据\n", + "成功获取并保存 20220707 的每日基础数据\n", + "成功获取并保存 20220706 的每日基础数据\n", + "成功获取并保存 20220705 的每日基础数据\n", + "成功获取并保存 20220704 的每日基础数据\n", + "成功获取并保存 20220701 的每日基础数据\n", + "成功获取并保存 20220630 的每日基础数据\n", + "成功获取并保存 20220629 的每日基础数据\n", + "成功获取并保存 20220628 的每日基础数据\n", + "成功获取并保存 20220627 的每日基础数据\n", + "成功获取并保存 20220624 的每日基础数据\n", + "成功获取并保存 20220623 的每日基础数据\n", + "成功获取并保存 20220622 的每日基础数据\n", + "成功获取并保存 20220621 的每日基础数据\n", + "成功获取并保存 20220620 的每日基础数据\n", + "成功获取并保存 20220617 的每日基础数据\n", + "成功获取并保存 20220616 的每日基础数据\n", + "成功获取并保存 20220615 的每日基础数据\n", + "成功获取并保存 20220614 的每日基础数据\n", + "成功获取并保存 20220613 的每日基础数据\n", + "成功获取并保存 20220610 的每日基础数据\n", + "成功获取并保存 20220609 的每日基础数据\n", + "成功获取并保存 20220608 的每日基础数据\n", + "成功获取并保存 20220607 的每日基础数据\n", + "成功获取并保存 20220606 的每日基础数据\n", + "成功获取并保存 20220602 的每日基础数据\n", + "成功获取并保存 20220601 的每日基础数据\n", + "成功获取并保存 20220531 的每日基础数据\n", + "成功获取并保存 20220530 的每日基础数据\n", + "成功获取并保存 20220527 的每日基础数据\n", + "成功获取并保存 20220526 的每日基础数据\n", + "成功获取并保存 20220525 的每日基础数据\n", + "成功获取并保存 20220524 的每日基础数据\n", + "成功获取并保存 20220523 的每日基础数据\n", + "成功获取并保存 20220520 的每日基础数据\n", + "成功获取并保存 20220519 的每日基础数据\n", + "成功获取并保存 20220518 的每日基础数据\n", + "成功获取并保存 20220517 的每日基础数据\n", + "成功获取并保存 20220516 的每日基础数据\n", + "成功获取并保存 20220513 的每日基础数据\n", + "成功获取并保存 20220512 的每日基础数据\n", + "成功获取并保存 20220511 的每日基础数据\n", + "成功获取并保存 20220510 的每日基础数据\n", + "成功获取并保存 20220509 的每日基础数据\n", + "成功获取并保存 20220506 的每日基础数据\n", + "成功获取并保存 20220505 的每日基础数据\n", + "成功获取并保存 20220429 的每日基础数据\n", + "成功获取并保存 20220428 的每日基础数据\n", + "成功获取并保存 20220427 的每日基础数据\n", + "成功获取并保存 20220426 的每日基础数据\n", + "成功获取并保存 20220425 的每日基础数据\n", + "成功获取并保存 20220422 的每日基础数据\n", + "成功获取并保存 20220421 的每日基础数据\n", + "成功获取并保存 20220420 的每日基础数据\n", + "成功获取并保存 20220419 的每日基础数据\n", + "成功获取并保存 20220418 的每日基础数据\n", + "成功获取并保存 20220415 的每日基础数据\n", + "成功获取并保存 20220414 的每日基础数据\n", + "成功获取并保存 20220413 的每日基础数据\n", + "成功获取并保存 20220412 的每日基础数据\n", + "成功获取并保存 20220411 的每日基础数据\n", + "成功获取并保存 20220408 的每日基础数据\n", + "成功获取并保存 20220407 的每日基础数据\n", + "成功获取并保存 20220406 的每日基础数据\n", + "成功获取并保存 20220401 的每日基础数据\n", + "成功获取并保存 20220331 的每日基础数据\n", + "成功获取并保存 20220330 的每日基础数据\n", + "成功获取并保存 20220329 的每日基础数据\n", + "成功获取并保存 20220328 的每日基础数据\n", + "成功获取并保存 20220325 的每日基础数据\n", + "成功获取并保存 20220324 的每日基础数据\n", + "成功获取并保存 20220323 的每日基础数据\n", + "成功获取并保存 20220322 的每日基础数据\n", + "成功获取并保存 20220321 的每日基础数据\n", + "成功获取并保存 20220318 的每日基础数据\n", + "成功获取并保存 20220317 的每日基础数据\n", + "成功获取并保存 20220316 的每日基础数据\n", + "成功获取并保存 20220315 的每日基础数据\n", + "成功获取并保存 20220314 的每日基础数据\n", + "成功获取并保存 20220311 的每日基础数据\n", + "成功获取并保存 20220310 的每日基础数据\n", + "成功获取并保存 20220309 的每日基础数据\n", + "成功获取并保存 20220308 的每日基础数据\n", + "成功获取并保存 20220307 的每日基础数据\n", + "成功获取并保存 20220304 的每日基础数据\n", + "成功获取并保存 20220303 的每日基础数据\n", + "成功获取并保存 20220302 的每日基础数据\n", + "成功获取并保存 20220301 的每日基础数据\n", + "成功获取并保存 20220228 的每日基础数据\n", + "成功获取并保存 20220225 的每日基础数据\n", + "成功获取并保存 20220224 的每日基础数据\n", + "成功获取并保存 20220223 的每日基础数据\n", + "成功获取并保存 20220222 的每日基础数据\n", + "成功获取并保存 20220221 的每日基础数据\n", + "成功获取并保存 20220218 的每日基础数据\n", + "成功获取并保存 20220217 的每日基础数据\n", + "成功获取并保存 20220216 的每日基础数据\n", + "成功获取并保存 20220215 的每日基础数据\n", + "成功获取并保存 20220214 的每日基础数据\n", + "成功获取并保存 20220211 的每日基础数据\n", + "成功获取并保存 20220210 的每日基础数据\n", + "成功获取并保存 20220209 的每日基础数据\n", + "成功获取并保存 20220208 的每日基础数据\n", + "成功获取并保存 20220207 的每日基础数据\n", + "成功获取并保存 20220128 的每日基础数据\n", + "成功获取并保存 20220127 的每日基础数据\n", + "成功获取并保存 20220126 的每日基础数据\n", + "成功获取并保存 20220125 的每日基础数据\n", + "成功获取并保存 20220124 的每日基础数据\n", + "成功获取并保存 20220121 的每日基础数据\n", + "成功获取并保存 20220120 的每日基础数据\n", + "已调用 150 次 API,等待 27.75 秒以满足速率限制...\n", + "成功获取并保存 20220119 的每日基础数据\n", + "成功获取并保存 20220118 的每日基础数据\n", + "成功获取并保存 20220117 的每日基础数据\n", + "成功获取并保存 20220114 的每日基础数据\n", + "成功获取并保存 20220113 的每日基础数据\n", + "成功获取并保存 20220112 的每日基础数据\n", + "成功获取并保存 20220111 的每日基础数据\n", + "成功获取并保存 20220110 的每日基础数据\n", + "成功获取并保存 20220107 的每日基础数据\n", + "成功获取并保存 20220106 的每日基础数据\n", + "成功获取并保存 20220105 的每日基础数据\n", + "成功获取并保存 20220104 的每日基础数据\n", + "成功获取并保存 20211231 的每日基础数据\n", + "成功获取并保存 20211230 的每日基础数据\n", + "成功获取并保存 20211229 的每日基础数据\n", + "成功获取并保存 20211228 的每日基础数据\n", + "成功获取并保存 20211227 的每日基础数据\n", + "成功获取并保存 20211224 的每日基础数据\n", + "成功获取并保存 20211223 的每日基础数据\n", + "成功获取并保存 20211222 的每日基础数据\n", + "成功获取并保存 20211221 的每日基础数据\n", + "成功获取并保存 20211220 的每日基础数据\n", + "成功获取并保存 20211217 的每日基础数据\n", + "成功获取并保存 20211216 的每日基础数据\n", + "成功获取并保存 20211215 的每日基础数据\n", + "成功获取并保存 20211214 的每日基础数据\n", + "成功获取并保存 20211213 的每日基础数据\n", + "成功获取并保存 20211210 的每日基础数据\n", + "成功获取并保存 20211209 的每日基础数据\n", + "成功获取并保存 20211208 的每日基础数据\n", + "成功获取并保存 20211207 的每日基础数据\n", + "成功获取并保存 20211206 的每日基础数据\n", + "成功获取并保存 20211203 的每日基础数据\n", + "成功获取并保存 20211202 的每日基础数据\n", + "成功获取并保存 20211201 的每日基础数据\n", + "成功获取并保存 20211130 的每日基础数据\n", + "成功获取并保存 20211129 的每日基础数据\n", + "成功获取并保存 20211126 的每日基础数据\n", + "成功获取并保存 20211125 的每日基础数据\n", + "成功获取并保存 20211124 的每日基础数据\n", + "成功获取并保存 20211123 的每日基础数据\n", + "成功获取并保存 20211122 的每日基础数据\n", + "成功获取并保存 20211119 的每日基础数据\n", + "成功获取并保存 20211118 的每日基础数据\n", + "成功获取并保存 20211117 的每日基础数据\n", + "成功获取并保存 20211116 的每日基础数据\n", + "成功获取并保存 20211115 的每日基础数据\n", + "成功获取并保存 20211112 的每日基础数据\n", + "成功获取并保存 20211111 的每日基础数据\n", + "成功获取并保存 20211110 的每日基础数据\n", + "成功获取并保存 20211109 的每日基础数据\n", + "成功获取并保存 20211108 的每日基础数据\n", + "成功获取并保存 20211105 的每日基础数据\n", + "成功获取并保存 20211104 的每日基础数据\n", + "成功获取并保存 20211103 的每日基础数据\n", + "成功获取并保存 20211102 的每日基础数据\n", + "成功获取并保存 20211101 的每日基础数据\n", + "成功获取并保存 20211029 的每日基础数据\n", + "成功获取并保存 20211028 的每日基础数据\n", + "成功获取并保存 20211027 的每日基础数据\n", + "成功获取并保存 20211026 的每日基础数据\n", + "成功获取并保存 20211025 的每日基础数据\n", + "成功获取并保存 20211022 的每日基础数据\n", + "成功获取并保存 20211021 的每日基础数据\n", + "成功获取并保存 20211020 的每日基础数据\n", + "成功获取并保存 20211019 的每日基础数据\n", + "成功获取并保存 20211018 的每日基础数据\n", + "成功获取并保存 20211015 的每日基础数据\n", + "成功获取并保存 20211014 的每日基础数据\n", + "成功获取并保存 20211013 的每日基础数据\n", + "成功获取并保存 20211012 的每日基础数据\n", + "成功获取并保存 20211011 的每日基础数据\n", + "成功获取并保存 20211008 的每日基础数据\n", + "成功获取并保存 20210930 的每日基础数据\n", + "成功获取并保存 20210929 的每日基础数据\n", + "成功获取并保存 20210928 的每日基础数据\n", + "成功获取并保存 20210927 的每日基础数据\n", + "成功获取并保存 20210924 的每日基础数据\n", + "成功获取并保存 20210923 的每日基础数据\n", + "成功获取并保存 20210922 的每日基础数据\n", + "成功获取并保存 20210917 的每日基础数据\n", + "成功获取并保存 20210916 的每日基础数据\n", + "成功获取并保存 20210915 的每日基础数据\n", + "成功获取并保存 20210914 的每日基础数据\n", + "成功获取并保存 20210913 的每日基础数据\n", + "成功获取并保存 20210910 的每日基础数据\n", + "成功获取并保存 20210909 的每日基础数据\n", + "成功获取并保存 20210908 的每日基础数据\n", + "成功获取并保存 20210907 的每日基础数据\n", + "成功获取并保存 20210906 的每日基础数据\n", + "成功获取并保存 20210903 的每日基础数据\n", + "成功获取并保存 20210902 的每日基础数据\n", + "成功获取并保存 20210901 的每日基础数据\n", + "成功获取并保存 20210831 的每日基础数据\n", + "成功获取并保存 20210830 的每日基础数据\n", + "成功获取并保存 20210827 的每日基础数据\n", + "成功获取并保存 20210826 的每日基础数据\n", + "成功获取并保存 20210825 的每日基础数据\n", + "成功获取并保存 20210824 的每日基础数据\n", + "成功获取并保存 20210823 的每日基础数据\n", + "成功获取并保存 20210820 的每日基础数据\n", + "成功获取并保存 20210819 的每日基础数据\n", + "成功获取并保存 20210818 的每日基础数据\n", + "成功获取并保存 20210817 的每日基础数据\n", + "成功获取并保存 20210816 的每日基础数据\n", + "成功获取并保存 20210813 的每日基础数据\n", + "成功获取并保存 20210812 的每日基础数据\n", + "成功获取并保存 20210811 的每日基础数据\n", + "成功获取并保存 20210810 的每日基础数据\n", + "成功获取并保存 20210809 的每日基础数据\n", + "成功获取并保存 20210806 的每日基础数据\n", + "成功获取并保存 20210805 的每日基础数据\n", + "成功获取并保存 20210804 的每日基础数据\n", + "成功获取并保存 20210803 的每日基础数据\n", + "成功获取并保存 20210802 的每日基础数据\n", + "成功获取并保存 20210730 的每日基础数据\n", + "成功获取并保存 20210729 的每日基础数据\n", + "成功获取并保存 20210728 的每日基础数据\n", + "成功获取并保存 20210727 的每日基础数据\n", + "成功获取并保存 20210726 的每日基础数据\n", + "成功获取并保存 20210723 的每日基础数据\n", + "成功获取并保存 20210722 的每日基础数据\n", + "成功获取并保存 20210721 的每日基础数据\n", + "成功获取并保存 20210720 的每日基础数据\n", + "成功获取并保存 20210719 的每日基础数据\n", + "成功获取并保存 20210716 的每日基础数据\n", + "成功获取并保存 20210715 的每日基础数据\n", + "成功获取并保存 20210714 的每日基础数据\n", + "成功获取并保存 20210713 的每日基础数据\n", + "成功获取并保存 20210712 的每日基础数据\n", + "成功获取并保存 20210709 的每日基础数据\n", + "成功获取并保存 20210708 的每日基础数据\n", + "成功获取并保存 20210707 的每日基础数据\n", + "成功获取并保存 20210706 的每日基础数据\n", + "成功获取并保存 20210705 的每日基础数据\n", + "成功获取并保存 20210702 的每日基础数据\n", + "成功获取并保存 20210701 的每日基础数据\n", + "成功获取并保存 20210630 的每日基础数据\n", + "成功获取并保存 20210629 的每日基础数据\n", + "成功获取并保存 20210628 的每日基础数据\n", + "成功获取并保存 20210625 的每日基础数据\n", + "成功获取并保存 20210624 的每日基础数据\n", + "成功获取并保存 20210623 的每日基础数据\n", + "成功获取并保存 20210622 的每日基础数据\n", + "成功获取并保存 20210621 的每日基础数据\n", + "成功获取并保存 20210618 的每日基础数据\n", + "成功获取并保存 20210617 的每日基础数据\n", + "成功获取并保存 20210616 的每日基础数据\n", + "成功获取并保存 20210615 的每日基础数据\n", + "成功获取并保存 20210611 的每日基础数据\n", + "已调用 150 次 API,等待 26.43 秒以满足速率限制...\n", + "成功获取并保存 20210610 的每日基础数据\n", + "成功获取并保存 20210609 的每日基础数据\n", + "成功获取并保存 20210608 的每日基础数据\n", + "成功获取并保存 20210607 的每日基础数据\n", + "成功获取并保存 20210604 的每日基础数据\n", + "成功获取并保存 20210603 的每日基础数据\n", + "成功获取并保存 20210602 的每日基础数据\n", + "成功获取并保存 20210601 的每日基础数据\n", + "成功获取并保存 20210531 的每日基础数据\n", + "成功获取并保存 20210528 的每日基础数据\n", + "成功获取并保存 20210527 的每日基础数据\n", + "成功获取并保存 20210526 的每日基础数据\n", + "成功获取并保存 20210525 的每日基础数据\n", + "成功获取并保存 20210524 的每日基础数据\n", + "成功获取并保存 20210521 的每日基础数据\n", + "成功获取并保存 20210520 的每日基础数据\n", + "成功获取并保存 20210519 的每日基础数据\n", + "成功获取并保存 20210518 的每日基础数据\n", + "成功获取并保存 20210517 的每日基础数据\n", + "成功获取并保存 20210514 的每日基础数据\n", + "成功获取并保存 20210513 的每日基础数据\n", + "成功获取并保存 20210512 的每日基础数据\n", + "成功获取并保存 20210511 的每日基础数据\n", + "成功获取并保存 20210510 的每日基础数据\n", + "成功获取并保存 20210507 的每日基础数据\n", + "成功获取并保存 20210506 的每日基础数据\n", + "成功获取并保存 20210430 的每日基础数据\n", + "成功获取并保存 20210429 的每日基础数据\n", + "成功获取并保存 20210428 的每日基础数据\n", + "成功获取并保存 20210427 的每日基础数据\n", + "成功获取并保存 20210426 的每日基础数据\n", + "成功获取并保存 20210423 的每日基础数据\n", + "成功获取并保存 20210422 的每日基础数据\n", + "成功获取并保存 20210421 的每日基础数据\n", + "成功获取并保存 20210420 的每日基础数据\n", + "成功获取并保存 20210419 的每日基础数据\n", + "成功获取并保存 20210416 的每日基础数据\n", + "成功获取并保存 20210415 的每日基础数据\n", + "成功获取并保存 20210414 的每日基础数据\n", + "成功获取并保存 20210413 的每日基础数据\n", + "成功获取并保存 20210412 的每日基础数据\n", + "成功获取并保存 20210409 的每日基础数据\n", + "成功获取并保存 20210408 的每日基础数据\n", + "成功获取并保存 20210407 的每日基础数据\n", + "成功获取并保存 20210406 的每日基础数据\n", + "成功获取并保存 20210402 的每日基础数据\n", + "成功获取并保存 20210401 的每日基础数据\n", + "成功获取并保存 20210331 的每日基础数据\n", + "成功获取并保存 20210330 的每日基础数据\n", + "成功获取并保存 20210329 的每日基础数据\n", + "成功获取并保存 20210326 的每日基础数据\n", + "成功获取并保存 20210325 的每日基础数据\n", + "成功获取并保存 20210324 的每日基础数据\n", + "成功获取并保存 20210323 的每日基础数据\n", + "成功获取并保存 20210322 的每日基础数据\n", + "成功获取并保存 20210319 的每日基础数据\n", + "成功获取并保存 20210318 的每日基础数据\n", + "成功获取并保存 20210317 的每日基础数据\n", + "成功获取并保存 20210316 的每日基础数据\n", + "成功获取并保存 20210315 的每日基础数据\n", + "成功获取并保存 20210312 的每日基础数据\n", + "成功获取并保存 20210311 的每日基础数据\n", + "成功获取并保存 20210310 的每日基础数据\n", + "成功获取并保存 20210309 的每日基础数据\n", + "成功获取并保存 20210308 的每日基础数据\n", + "成功获取并保存 20210305 的每日基础数据\n", + "成功获取并保存 20210304 的每日基础数据\n", + "成功获取并保存 20210303 的每日基础数据\n", + "成功获取并保存 20210302 的每日基础数据\n", + "成功获取并保存 20210301 的每日基础数据\n", + "成功获取并保存 20210226 的每日基础数据\n", + "成功获取并保存 20210225 的每日基础数据\n", + "成功获取并保存 20210224 的每日基础数据\n", + "成功获取并保存 20210223 的每日基础数据\n", + "成功获取并保存 20210222 的每日基础数据\n", + "成功获取并保存 20210219 的每日基础数据\n", + "成功获取并保存 20210218 的每日基础数据\n", + "成功获取并保存 20210210 的每日基础数据\n", + "成功获取并保存 20210209 的每日基础数据\n", + "成功获取并保存 20210208 的每日基础数据\n", + "成功获取并保存 20210205 的每日基础数据\n", + "成功获取并保存 20210204 的每日基础数据\n", + "成功获取并保存 20210203 的每日基础数据\n", + "成功获取并保存 20210202 的每日基础数据\n", + "成功获取并保存 20210201 的每日基础数据\n", + "成功获取并保存 20210129 的每日基础数据\n", + "成功获取并保存 20210128 的每日基础数据\n", + "成功获取并保存 20210127 的每日基础数据\n", + "成功获取并保存 20210126 的每日基础数据\n", + "成功获取并保存 20210125 的每日基础数据\n", + "成功获取并保存 20210122 的每日基础数据\n", + "成功获取并保存 20210121 的每日基础数据\n", + "成功获取并保存 20210120 的每日基础数据\n", + "成功获取并保存 20210119 的每日基础数据\n", + "成功获取并保存 20210118 的每日基础数据\n", + "成功获取并保存 20210115 的每日基础数据\n", + "成功获取并保存 20210114 的每日基础数据\n", + "成功获取并保存 20210113 的每日基础数据\n", + "成功获取并保存 20210112 的每日基础数据\n", + "成功获取并保存 20210111 的每日基础数据\n", + "成功获取并保存 20210108 的每日基础数据\n", + "成功获取并保存 20210107 的每日基础数据\n", + "成功获取并保存 20210106 的每日基础数据\n", + "成功获取并保存 20210105 的每日基础数据\n", + "成功获取并保存 20210104 的每日基础数据\n", + "成功获取并保存 20201231 的每日基础数据\n", + "成功获取并保存 20201230 的每日基础数据\n", + "成功获取并保存 20201229 的每日基础数据\n", + "成功获取并保存 20201228 的每日基础数据\n", + "成功获取并保存 20201225 的每日基础数据\n", + "成功获取并保存 20201224 的每日基础数据\n", + "成功获取并保存 20201223 的每日基础数据\n", + "成功获取并保存 20201222 的每日基础数据\n", + "成功获取并保存 20201221 的每日基础数据\n", + "成功获取并保存 20201218 的每日基础数据\n", + "成功获取并保存 20201217 的每日基础数据\n", + "成功获取并保存 20201216 的每日基础数据\n", + "成功获取并保存 20201215 的每日基础数据\n", + "成功获取并保存 20201214 的每日基础数据\n", + "成功获取并保存 20201211 的每日基础数据\n", + "成功获取并保存 20201210 的每日基础数据\n", + "成功获取并保存 20201209 的每日基础数据\n", + "成功获取并保存 20201208 的每日基础数据\n", + "成功获取并保存 20201207 的每日基础数据\n", + "成功获取并保存 20201204 的每日基础数据\n", + "成功获取并保存 20201203 的每日基础数据\n", + "成功获取并保存 20201202 的每日基础数据\n", + "成功获取并保存 20201201 的每日基础数据\n", + "成功获取并保存 20201130 的每日基础数据\n", + "成功获取并保存 20201127 的每日基础数据\n", + "成功获取并保存 20201126 的每日基础数据\n", + "成功获取并保存 20201125 的每日基础数据\n", + "成功获取并保存 20201124 的每日基础数据\n", + "成功获取并保存 20201123 的每日基础数据\n", + "成功获取并保存 20201120 的每日基础数据\n", + "成功获取并保存 20201119 的每日基础数据\n", + "成功获取并保存 20201118 的每日基础数据\n", + "成功获取并保存 20201117 的每日基础数据\n", + "成功获取并保存 20201116 的每日基础数据\n", + "成功获取并保存 20201113 的每日基础数据\n", + "成功获取并保存 20201112 的每日基础数据\n", + "成功获取并保存 20201111 的每日基础数据\n", + "成功获取并保存 20201110 的每日基础数据\n", + "成功获取并保存 20201109 的每日基础数据\n", + "成功获取并保存 20201106 的每日基础数据\n", + "成功获取并保存 20201105 的每日基础数据\n", + "成功获取并保存 20201104 的每日基础数据\n", + "成功获取并保存 20201103 的每日基础数据\n", + "成功获取并保存 20201102 的每日基础数据\n", + "成功获取并保存 20201030 的每日基础数据\n", + "已调用 150 次 API,等待 24.84 秒以满足速率限制...\n", + "成功获取并保存 20201029 的每日基础数据\n", + "成功获取并保存 20201028 的每日基础数据\n", + "成功获取并保存 20201027 的每日基础数据\n", + "成功获取并保存 20201026 的每日基础数据\n", + "成功获取并保存 20201023 的每日基础数据\n", + "成功获取并保存 20201022 的每日基础数据\n", + "成功获取并保存 20201021 的每日基础数据\n", + "成功获取并保存 20201020 的每日基础数据\n", + "成功获取并保存 20201019 的每日基础数据\n", + "成功获取并保存 20201016 的每日基础数据\n", + "成功获取并保存 20201015 的每日基础数据\n", + "成功获取并保存 20201014 的每日基础数据\n", + "成功获取并保存 20201013 的每日基础数据\n", + "成功获取并保存 20201012 的每日基础数据\n", + "成功获取并保存 20201009 的每日基础数据\n", + "成功获取并保存 20200930 的每日基础数据\n", + "成功获取并保存 20200929 的每日基础数据\n", + "成功获取并保存 20200928 的每日基础数据\n", + "成功获取并保存 20200925 的每日基础数据\n", + "成功获取并保存 20200924 的每日基础数据\n", + "成功获取并保存 20200923 的每日基础数据\n", + "成功获取并保存 20200922 的每日基础数据\n", + "成功获取并保存 20200921 的每日基础数据\n", + "成功获取并保存 20200918 的每日基础数据\n", + "成功获取并保存 20200917 的每日基础数据\n", + "成功获取并保存 20200916 的每日基础数据\n", + "成功获取并保存 20200915 的每日基础数据\n", + "成功获取并保存 20200914 的每日基础数据\n", + "成功获取并保存 20200911 的每日基础数据\n", + "成功获取并保存 20200910 的每日基础数据\n", + "成功获取并保存 20200909 的每日基础数据\n", + "成功获取并保存 20200908 的每日基础数据\n", + "成功获取并保存 20200907 的每日基础数据\n", + "成功获取并保存 20200904 的每日基础数据\n", + "成功获取并保存 20200903 的每日基础数据\n", + "成功获取并保存 20200902 的每日基础数据\n", + "成功获取并保存 20200901 的每日基础数据\n", + "成功获取并保存 20200831 的每日基础数据\n", + "成功获取并保存 20200828 的每日基础数据\n", + "成功获取并保存 20200827 的每日基础数据\n", + "成功获取并保存 20200826 的每日基础数据\n", + "成功获取并保存 20200825 的每日基础数据\n", + "成功获取并保存 20200824 的每日基础数据\n", + "成功获取并保存 20200821 的每日基础数据\n", + "成功获取并保存 20200820 的每日基础数据\n", + "成功获取并保存 20200819 的每日基础数据\n", + "成功获取并保存 20200818 的每日基础数据\n", + "成功获取并保存 20200817 的每日基础数据\n", + "成功获取并保存 20200814 的每日基础数据\n", + "成功获取并保存 20200813 的每日基础数据\n", + "成功获取并保存 20200812 的每日基础数据\n", + "成功获取并保存 20200811 的每日基础数据\n", + "成功获取并保存 20200810 的每日基础数据\n", + "成功获取并保存 20200807 的每日基础数据\n", + "成功获取并保存 20200806 的每日基础数据\n", + "成功获取并保存 20200805 的每日基础数据\n", + "成功获取并保存 20200804 的每日基础数据\n", + "成功获取并保存 20200803 的每日基础数据\n", + "成功获取并保存 20200731 的每日基础数据\n", + "成功获取并保存 20200730 的每日基础数据\n", + "成功获取并保存 20200729 的每日基础数据\n", + "成功获取并保存 20200728 的每日基础数据\n", + "成功获取并保存 20200727 的每日基础数据\n", + "成功获取并保存 20200724 的每日基础数据\n", + "成功获取并保存 20200723 的每日基础数据\n", + "成功获取并保存 20200722 的每日基础数据\n", + "成功获取并保存 20200721 的每日基础数据\n", + "成功获取并保存 20200720 的每日基础数据\n", + "成功获取并保存 20200717 的每日基础数据\n", + "成功获取并保存 20200716 的每日基础数据\n", + "成功获取并保存 20200715 的每日基础数据\n", + "成功获取并保存 20200714 的每日基础数据\n", + "成功获取并保存 20200713 的每日基础数据\n", + "成功获取并保存 20200710 的每日基础数据\n", + "成功获取并保存 20200709 的每日基础数据\n", + "成功获取并保存 20200708 的每日基础数据\n", + "成功获取并保存 20200707 的每日基础数据\n", + "成功获取并保存 20200706 的每日基础数据\n", + "成功获取并保存 20200703 的每日基础数据\n", + "成功获取并保存 20200702 的每日基础数据\n", + "成功获取并保存 20200701 的每日基础数据\n", + "成功获取并保存 20200630 的每日基础数据\n", + "成功获取并保存 20200629 的每日基础数据\n", + "成功获取并保存 20200624 的每日基础数据\n", + "成功获取并保存 20200623 的每日基础数据\n", + "成功获取并保存 20200622 的每日基础数据\n", + "成功获取并保存 20200619 的每日基础数据\n", + "成功获取并保存 20200618 的每日基础数据\n", + "成功获取并保存 20200617 的每日基础数据\n", + "成功获取并保存 20200616 的每日基础数据\n", + "成功获取并保存 20200615 的每日基础数据\n", + "成功获取并保存 20200612 的每日基础数据\n", + "成功获取并保存 20200611 的每日基础数据\n", + "成功获取并保存 20200610 的每日基础数据\n", + "成功获取并保存 20200609 的每日基础数据\n", + "成功获取并保存 20200608 的每日基础数据\n", + "成功获取并保存 20200605 的每日基础数据\n", + "成功获取并保存 20200604 的每日基础数据\n", + "成功获取并保存 20200603 的每日基础数据\n", + "成功获取并保存 20200602 的每日基础数据\n", + "成功获取并保存 20200601 的每日基础数据\n", + "成功获取并保存 20200529 的每日基础数据\n", + "成功获取并保存 20200528 的每日基础数据\n", + "成功获取并保存 20200527 的每日基础数据\n", + "成功获取并保存 20200526 的每日基础数据\n", + "成功获取并保存 20200525 的每日基础数据\n", + "成功获取并保存 20200522 的每日基础数据\n", + "成功获取并保存 20200521 的每日基础数据\n", + "成功获取并保存 20200520 的每日基础数据\n", + "成功获取并保存 20200519 的每日基础数据\n", + "成功获取并保存 20200518 的每日基础数据\n", + "成功获取并保存 20200515 的每日基础数据\n", + "成功获取并保存 20200514 的每日基础数据\n", + "成功获取并保存 20200513 的每日基础数据\n", + "成功获取并保存 20200512 的每日基础数据\n", + "成功获取并保存 20200511 的每日基础数据\n", + "成功获取并保存 20200508 的每日基础数据\n", + "成功获取并保存 20200507 的每日基础数据\n", + "成功获取并保存 20200506 的每日基础数据\n", + "成功获取并保存 20200430 的每日基础数据\n", + "成功获取并保存 20200429 的每日基础数据\n", + "成功获取并保存 20200428 的每日基础数据\n", + "成功获取并保存 20200427 的每日基础数据\n", + "成功获取并保存 20200424 的每日基础数据\n", + "成功获取并保存 20200423 的每日基础数据\n", + "成功获取并保存 20200422 的每日基础数据\n", + "成功获取并保存 20200421 的每日基础数据\n", + "成功获取并保存 20200420 的每日基础数据\n", + "成功获取并保存 20200417 的每日基础数据\n", + "成功获取并保存 20200416 的每日基础数据\n", + "成功获取并保存 20200415 的每日基础数据\n", + "成功获取并保存 20200414 的每日基础数据\n", + "成功获取并保存 20200413 的每日基础数据\n", + "成功获取并保存 20200410 的每日基础数据\n", + "成功获取并保存 20200409 的每日基础数据\n", + "成功获取并保存 20200408 的每日基础数据\n", + "成功获取并保存 20200407 的每日基础数据\n", + "成功获取并保存 20200403 的每日基础数据\n", + "成功获取并保存 20200402 的每日基础数据\n", + "成功获取并保存 20200401 的每日基础数据\n", + "成功获取并保存 20200331 的每日基础数据\n", + "成功获取并保存 20200330 的每日基础数据\n", + "成功获取并保存 20200327 的每日基础数据\n", + "成功获取并保存 20200326 的每日基础数据\n", + "成功获取并保存 20200325 的每日基础数据\n", + "成功获取并保存 20200324 的每日基础数据\n", + "成功获取并保存 20200323 的每日基础数据\n", + "成功获取并保存 20200320 的每日基础数据\n", + "成功获取并保存 20200319 的每日基础数据\n", + "成功获取并保存 20200318 的每日基础数据\n", + "已调用 150 次 API,等待 25.85 秒以满足速率限制...\n", + "成功获取并保存 20200317 的每日基础数据\n", + "成功获取并保存 20200316 的每日基础数据\n", + "成功获取并保存 20200313 的每日基础数据\n", + "成功获取并保存 20200312 的每日基础数据\n", + "成功获取并保存 20200311 的每日基础数据\n", + "成功获取并保存 20200310 的每日基础数据\n", + "成功获取并保存 20200309 的每日基础数据\n", + "成功获取并保存 20200306 的每日基础数据\n", + "成功获取并保存 20200305 的每日基础数据\n", + "成功获取并保存 20200304 的每日基础数据\n", + "成功获取并保存 20200303 的每日基础数据\n", + "成功获取并保存 20200302 的每日基础数据\n", + "成功获取并保存 20200228 的每日基础数据\n", + "成功获取并保存 20200227 的每日基础数据\n", + "成功获取并保存 20200226 的每日基础数据\n", + "成功获取并保存 20200225 的每日基础数据\n", + "成功获取并保存 20200224 的每日基础数据\n", + "成功获取并保存 20200221 的每日基础数据\n", + "成功获取并保存 20200220 的每日基础数据\n", + "成功获取并保存 20200219 的每日基础数据\n", + "成功获取并保存 20200218 的每日基础数据\n", + "成功获取并保存 20200217 的每日基础数据\n", + "成功获取并保存 20200214 的每日基础数据\n", + "成功获取并保存 20200213 的每日基础数据\n", + "成功获取并保存 20200212 的每日基础数据\n", + "成功获取并保存 20200211 的每日基础数据\n", + "成功获取并保存 20200210 的每日基础数据\n", + "成功获取并保存 20200207 的每日基础数据\n", + "成功获取并保存 20200206 的每日基础数据\n", + "成功获取并保存 20200205 的每日基础数据\n", + "成功获取并保存 20200204 的每日基础数据\n", + "成功获取并保存 20200203 的每日基础数据\n", + "成功获取并保存 20200123 的每日基础数据\n", + "成功获取并保存 20200122 的每日基础数据\n", + "成功获取并保存 20200121 的每日基础数据\n", + "成功获取并保存 20200120 的每日基础数据\n", + "成功获取并保存 20200117 的每日基础数据\n", + "成功获取并保存 20200116 的每日基础数据\n", + "成功获取并保存 20200115 的每日基础数据\n", + "成功获取并保存 20200114 的每日基础数据\n", + "成功获取并保存 20200113 的每日基础数据\n", + "成功获取并保存 20200110 的每日基础数据\n", + "成功获取并保存 20200109 的每日基础数据\n", + "成功获取并保存 20200108 的每日基础数据\n", + "成功获取并保存 20200107 的每日基础数据\n", + "成功获取并保存 20200106 的每日基础数据\n", + "成功获取并保存 20200103 的每日基础数据\n", + "成功获取并保存 20200102 的每日基础数据\n", + "成功获取并保存 20191231 的每日基础数据\n", + "成功获取并保存 20191230 的每日基础数据\n", + "成功获取并保存 20191227 的每日基础数据\n", + "成功获取并保存 20191226 的每日基础数据\n", + "成功获取并保存 20191225 的每日基础数据\n", + "成功获取并保存 20191224 的每日基础数据\n", + "成功获取并保存 20191223 的每日基础数据\n", + "成功获取并保存 20191220 的每日基础数据\n", + "成功获取并保存 20191219 的每日基础数据\n", + "成功获取并保存 20191218 的每日基础数据\n", + "成功获取并保存 20191217 的每日基础数据\n", + "成功获取并保存 20191216 的每日基础数据\n", + "成功获取并保存 20191213 的每日基础数据\n", + "成功获取并保存 20191212 的每日基础数据\n", + "成功获取并保存 20191211 的每日基础数据\n", + "成功获取并保存 20191210 的每日基础数据\n", + "成功获取并保存 20191209 的每日基础数据\n", + "成功获取并保存 20191206 的每日基础数据\n", + "成功获取并保存 20191205 的每日基础数据\n", + "成功获取并保存 20191204 的每日基础数据\n", + "成功获取并保存 20191203 的每日基础数据\n", + "成功获取并保存 20191202 的每日基础数据\n", + "成功获取并保存 20191129 的每日基础数据\n", + "成功获取并保存 20191128 的每日基础数据\n", + "成功获取并保存 20191127 的每日基础数据\n", + "成功获取并保存 20191126 的每日基础数据\n", + "成功获取并保存 20191125 的每日基础数据\n", + "成功获取并保存 20191122 的每日基础数据\n", + "成功获取并保存 20191121 的每日基础数据\n", + "成功获取并保存 20191120 的每日基础数据\n", + "成功获取并保存 20191119 的每日基础数据\n", + "成功获取并保存 20191118 的每日基础数据\n", + "成功获取并保存 20191115 的每日基础数据\n", + "成功获取并保存 20191114 的每日基础数据\n", + "成功获取并保存 20191113 的每日基础数据\n", + "成功获取并保存 20191112 的每日基础数据\n", + "成功获取并保存 20191111 的每日基础数据\n", + "成功获取并保存 20191108 的每日基础数据\n", + "成功获取并保存 20191107 的每日基础数据\n", + "成功获取并保存 20191106 的每日基础数据\n", + "成功获取并保存 20191105 的每日基础数据\n", + "成功获取并保存 20191104 的每日基础数据\n", + "成功获取并保存 20191101 的每日基础数据\n", + "成功获取并保存 20191031 的每日基础数据\n", + "成功获取并保存 20191030 的每日基础数据\n", + "成功获取并保存 20191029 的每日基础数据\n", + "成功获取并保存 20191028 的每日基础数据\n", + "成功获取并保存 20191025 的每日基础数据\n", + "成功获取并保存 20191024 的每日基础数据\n", + "成功获取并保存 20191023 的每日基础数据\n", + "成功获取并保存 20191022 的每日基础数据\n", + "成功获取并保存 20191021 的每日基础数据\n", + "成功获取并保存 20191018 的每日基础数据\n", + "成功获取并保存 20191017 的每日基础数据\n", + "成功获取并保存 20191016 的每日基础数据\n", + "成功获取并保存 20191015 的每日基础数据\n", + "成功获取并保存 20191014 的每日基础数据\n", + "成功获取并保存 20191011 的每日基础数据\n", + "成功获取并保存 20191010 的每日基础数据\n", + "成功获取并保存 20191009 的每日基础数据\n", + "成功获取并保存 20191008 的每日基础数据\n", + "成功获取并保存 20190930 的每日基础数据\n", + "成功获取并保存 20190927 的每日基础数据\n", + "成功获取并保存 20190926 的每日基础数据\n", + "成功获取并保存 20190925 的每日基础数据\n", + "成功获取并保存 20190924 的每日基础数据\n", + "成功获取并保存 20190923 的每日基础数据\n", + "成功获取并保存 20190920 的每日基础数据\n", + "成功获取并保存 20190919 的每日基础数据\n", + "成功获取并保存 20190918 的每日基础数据\n", + "成功获取并保存 20190917 的每日基础数据\n", + "成功获取并保存 20190916 的每日基础数据\n", + "成功获取并保存 20190912 的每日基础数据\n", + "成功获取并保存 20190911 的每日基础数据\n", + "成功获取并保存 20190910 的每日基础数据\n", + "成功获取并保存 20190909 的每日基础数据\n", + "成功获取并保存 20190906 的每日基础数据\n", + "成功获取并保存 20190905 的每日基础数据\n", + "成功获取并保存 20190904 的每日基础数据\n", + "成功获取并保存 20190903 的每日基础数据\n", + "成功获取并保存 20190902 的每日基础数据\n", + "成功获取并保存 20190830 的每日基础数据\n", + "成功获取并保存 20190829 的每日基础数据\n", + "成功获取并保存 20190828 的每日基础数据\n", + "成功获取并保存 20190827 的每日基础数据\n", + "成功获取并保存 20190826 的每日基础数据\n", + "成功获取并保存 20190823 的每日基础数据\n", + "成功获取并保存 20190822 的每日基础数据\n", + "成功获取并保存 20190821 的每日基础数据\n", + "成功获取并保存 20190820 的每日基础数据\n", + "成功获取并保存 20190819 的每日基础数据\n", + "成功获取并保存 20190816 的每日基础数据\n", + "成功获取并保存 20190815 的每日基础数据\n", + "成功获取并保存 20190814 的每日基础数据\n", + "成功获取并保存 20190813 的每日基础数据\n", + "成功获取并保存 20190812 的每日基础数据\n", + "成功获取并保存 20190809 的每日基础数据\n", + "成功获取并保存 20190808 的每日基础数据\n", + "成功获取并保存 20190807 的每日基础数据\n", + "成功获取并保存 20190806 的每日基础数据\n", + "成功获取并保存 20190805 的每日基础数据\n", + "成功获取并保存 20190802 的每日基础数据\n", + "已调用 150 次 API,等待 22.64 秒以满足速率限制...\n", + "成功获取并保存 20190801 的每日基础数据\n", + "成功获取并保存 20190731 的每日基础数据\n", + "成功获取并保存 20190730 的每日基础数据\n", + "成功获取并保存 20190729 的每日基础数据\n", + "成功获取并保存 20190726 的每日基础数据\n", + "成功获取并保存 20190725 的每日基础数据\n", + "成功获取并保存 20190724 的每日基础数据\n", + "成功获取并保存 20190723 的每日基础数据\n", + "成功获取并保存 20190722 的每日基础数据\n", + "成功获取并保存 20190719 的每日基础数据\n", + "成功获取并保存 20190718 的每日基础数据\n", + "成功获取并保存 20190717 的每日基础数据\n", + "成功获取并保存 20190716 的每日基础数据\n", + "成功获取并保存 20190715 的每日基础数据\n", + "成功获取并保存 20190712 的每日基础数据\n", + "成功获取并保存 20190711 的每日基础数据\n", + "成功获取并保存 20190710 的每日基础数据\n", + "成功获取并保存 20190709 的每日基础数据\n", + "成功获取并保存 20190708 的每日基础数据\n", + "成功获取并保存 20190705 的每日基础数据\n", + "成功获取并保存 20190704 的每日基础数据\n", + "成功获取并保存 20190703 的每日基础数据\n", + "成功获取并保存 20190702 的每日基础数据\n", + "成功获取并保存 20190701 的每日基础数据\n", + "成功获取并保存 20190628 的每日基础数据\n", + "成功获取并保存 20190627 的每日基础数据\n", + "成功获取并保存 20190626 的每日基础数据\n", + "成功获取并保存 20190625 的每日基础数据\n", + "成功获取并保存 20190624 的每日基础数据\n", + "成功获取并保存 20190621 的每日基础数据\n", + "成功获取并保存 20190620 的每日基础数据\n", + "成功获取并保存 20190619 的每日基础数据\n", + "成功获取并保存 20190618 的每日基础数据\n", + "成功获取并保存 20190617 的每日基础数据\n", + "成功获取并保存 20190614 的每日基础数据\n", + "成功获取并保存 20190613 的每日基础数据\n", + "成功获取并保存 20190612 的每日基础数据\n", + "成功获取并保存 20190611 的每日基础数据\n", + "成功获取并保存 20190610 的每日基础数据\n", + "成功获取并保存 20190606 的每日基础数据\n", + "成功获取并保存 20190605 的每日基础数据\n", + "成功获取并保存 20190604 的每日基础数据\n", + "成功获取并保存 20190603 的每日基础数据\n", + "成功获取并保存 20190531 的每日基础数据\n", + "成功获取并保存 20190530 的每日基础数据\n", + "成功获取并保存 20190529 的每日基础数据\n", + "成功获取并保存 20190528 的每日基础数据\n", + "成功获取并保存 20190527 的每日基础数据\n", + "成功获取并保存 20190524 的每日基础数据\n", + "成功获取并保存 20190523 的每日基础数据\n", + "成功获取并保存 20190522 的每日基础数据\n", + "成功获取并保存 20190521 的每日基础数据\n", + "成功获取并保存 20190520 的每日基础数据\n", + "成功获取并保存 20190517 的每日基础数据\n", + "成功获取并保存 20190516 的每日基础数据\n", + "成功获取并保存 20190515 的每日基础数据\n", + "成功获取并保存 20190514 的每日基础数据\n", + "成功获取并保存 20190513 的每日基础数据\n", + "成功获取并保存 20190510 的每日基础数据\n", + "成功获取并保存 20190509 的每日基础数据\n", + "成功获取并保存 20190508 的每日基础数据\n", + "成功获取并保存 20190507 的每日基础数据\n", + "成功获取并保存 20190506 的每日基础数据\n", + "成功获取并保存 20190430 的每日基础数据\n", + "成功获取并保存 20190429 的每日基础数据\n", + "成功获取并保存 20190426 的每日基础数据\n", + "成功获取并保存 20190425 的每日基础数据\n", + "成功获取并保存 20190424 的每日基础数据\n", + "成功获取并保存 20190423 的每日基础数据\n", + "成功获取并保存 20190422 的每日基础数据\n", + "成功获取并保存 20190419 的每日基础数据\n", + "成功获取并保存 20190418 的每日基础数据\n", + "成功获取并保存 20190417 的每日基础数据\n", + "成功获取并保存 20190416 的每日基础数据\n", + "成功获取并保存 20190415 的每日基础数据\n", + "成功获取并保存 20190412 的每日基础数据\n", + "成功获取并保存 20190411 的每日基础数据\n", + "成功获取并保存 20190410 的每日基础数据\n", + "成功获取并保存 20190409 的每日基础数据\n", + "成功获取并保存 20190408 的每日基础数据\n", + "成功获取并保存 20190404 的每日基础数据\n", + "成功获取并保存 20190403 的每日基础数据\n", + "成功获取并保存 20190402 的每日基础数据\n", + "成功获取并保存 20190401 的每日基础数据\n", + "成功获取并保存 20190329 的每日基础数据\n", + "成功获取并保存 20190328 的每日基础数据\n", + "成功获取并保存 20190327 的每日基础数据\n", + "成功获取并保存 20190326 的每日基础数据\n", + "成功获取并保存 20190325 的每日基础数据\n", + "成功获取并保存 20190322 的每日基础数据\n", + "成功获取并保存 20190321 的每日基础数据\n", + "成功获取并保存 20190320 的每日基础数据\n", + "成功获取并保存 20190319 的每日基础数据\n", + "成功获取并保存 20190318 的每日基础数据\n", + "成功获取并保存 20190315 的每日基础数据\n", + "成功获取并保存 20190314 的每日基础数据\n", + "成功获取并保存 20190313 的每日基础数据\n", + "成功获取并保存 20190312 的每日基础数据\n", + "成功获取并保存 20190311 的每日基础数据\n", + "成功获取并保存 20190308 的每日基础数据\n", + "成功获取并保存 20190307 的每日基础数据\n", + "成功获取并保存 20190306 的每日基础数据\n", + "成功获取并保存 20190305 的每日基础数据\n", + "成功获取并保存 20190304 的每日基础数据\n", + "成功获取并保存 20190301 的每日基础数据\n", + "成功获取并保存 20190228 的每日基础数据\n", + "成功获取并保存 20190227 的每日基础数据\n", + "成功获取并保存 20190226 的每日基础数据\n", + "成功获取并保存 20190225 的每日基础数据\n", + "成功获取并保存 20190222 的每日基础数据\n", + "成功获取并保存 20190221 的每日基础数据\n", + "成功获取并保存 20190220 的每日基础数据\n", + "成功获取并保存 20190219 的每日基础数据\n", + "成功获取并保存 20190218 的每日基础数据\n", + "成功获取并保存 20190215 的每日基础数据\n", + "成功获取并保存 20190214 的每日基础数据\n", + "成功获取并保存 20190213 的每日基础数据\n", + "成功获取并保存 20190212 的每日基础数据\n", + "成功获取并保存 20190211 的每日基础数据\n", + "成功获取并保存 20190201 的每日基础数据\n", + "成功获取并保存 20190131 的每日基础数据\n", + "成功获取并保存 20190130 的每日基础数据\n", + "成功获取并保存 20190129 的每日基础数据\n", + "成功获取并保存 20190128 的每日基础数据\n", + "成功获取并保存 20190125 的每日基础数据\n", + "成功获取并保存 20190124 的每日基础数据\n", + "成功获取并保存 20190123 的每日基础数据\n", + "成功获取并保存 20190122 的每日基础数据\n", + "成功获取并保存 20190121 的每日基础数据\n", + "成功获取并保存 20190118 的每日基础数据\n", + "成功获取并保存 20190117 的每日基础数据\n", + "成功获取并保存 20190116 的每日基础数据\n", + "成功获取并保存 20190115 的每日基础数据\n", + "成功获取并保存 20190114 的每日基础数据\n", + "成功获取并保存 20190111 的每日基础数据\n", + "成功获取并保存 20190110 的每日基础数据\n", + "成功获取并保存 20190109 的每日基础数据\n", + "成功获取并保存 20190108 的每日基础数据\n", + "成功获取并保存 20190107 的每日基础数据\n", + "成功获取并保存 20190104 的每日基础数据\n", + "成功获取并保存 20190103 的每日基础数据\n", + "成功获取并保存 20190102 的每日基础数据\n", + "成功获取并保存 20181228 的每日基础数据\n", + "成功获取并保存 20181227 的每日基础数据\n", + "成功获取并保存 20181226 的每日基础数据\n", + "成功获取并保存 20181225 的每日基础数据\n", + "成功获取并保存 20181224 的每日基础数据\n", + "成功获取并保存 20181221 的每日基础数据\n", + "成功获取并保存 20181220 的每日基础数据\n", + "成功获取并保存 20181219 的每日基础数据\n", + "已调用 150 次 API,等待 25.41 秒以满足速率限制...\n", + "成功获取并保存 20181218 的每日基础数据\n", + "成功获取并保存 20181217 的每日基础数据\n", + "成功获取并保存 20181214 的每日基础数据\n", + "成功获取并保存 20181213 的每日基础数据\n", + "成功获取并保存 20181212 的每日基础数据\n", + "成功获取并保存 20181211 的每日基础数据\n", + "成功获取并保存 20181210 的每日基础数据\n", + "成功获取并保存 20181207 的每日基础数据\n", + "成功获取并保存 20181206 的每日基础数据\n", + "成功获取并保存 20181205 的每日基础数据\n", + "成功获取并保存 20181204 的每日基础数据\n", + "成功获取并保存 20181203 的每日基础数据\n", + "成功获取并保存 20181130 的每日基础数据\n", + "成功获取并保存 20181129 的每日基础数据\n", + "成功获取并保存 20181128 的每日基础数据\n", + "成功获取并保存 20181127 的每日基础数据\n", + "成功获取并保存 20181126 的每日基础数据\n", + "成功获取并保存 20181123 的每日基础数据\n", + "成功获取并保存 20181122 的每日基础数据\n", + "成功获取并保存 20181121 的每日基础数据\n", + "成功获取并保存 20181120 的每日基础数据\n", + "成功获取并保存 20181119 的每日基础数据\n", + "成功获取并保存 20181116 的每日基础数据\n", + "成功获取并保存 20181115 的每日基础数据\n", + "成功获取并保存 20181114 的每日基础数据\n", + "成功获取并保存 20181113 的每日基础数据\n", + "成功获取并保存 20181112 的每日基础数据\n", + "成功获取并保存 20181109 的每日基础数据\n", + "成功获取并保存 20181108 的每日基础数据\n", + "成功获取并保存 20181107 的每日基础数据\n", + "成功获取并保存 20181106 的每日基础数据\n", + "成功获取并保存 20181105 的每日基础数据\n", + "成功获取并保存 20181102 的每日基础数据\n", + "成功获取并保存 20181101 的每日基础数据\n", + "成功获取并保存 20181031 的每日基础数据\n", + "成功获取并保存 20181030 的每日基础数据\n", + "成功获取并保存 20181029 的每日基础数据\n", + "成功获取并保存 20181026 的每日基础数据\n", + "成功获取并保存 20181025 的每日基础数据\n", + "成功获取并保存 20181024 的每日基础数据\n", + "成功获取并保存 20181023 的每日基础数据\n", + "成功获取并保存 20181022 的每日基础数据\n", + "成功获取并保存 20181019 的每日基础数据\n", + "成功获取并保存 20181018 的每日基础数据\n", + "成功获取并保存 20181017 的每日基础数据\n", + "成功获取并保存 20181016 的每日基础数据\n", + "成功获取并保存 20181015 的每日基础数据\n", + "成功获取并保存 20181012 的每日基础数据\n", + "成功获取并保存 20181011 的每日基础数据\n", + "成功获取并保存 20181010 的每日基础数据\n", + "成功获取并保存 20181009 的每日基础数据\n", + "成功获取并保存 20181008 的每日基础数据\n", + "成功获取并保存 20180928 的每日基础数据\n", + "成功获取并保存 20180927 的每日基础数据\n", + "成功获取并保存 20180926 的每日基础数据\n", + "成功获取并保存 20180925 的每日基础数据\n", + "成功获取并保存 20180921 的每日基础数据\n", + "成功获取并保存 20180920 的每日基础数据\n", + "成功获取并保存 20180919 的每日基础数据\n", + "成功获取并保存 20180918 的每日基础数据\n", + "成功获取并保存 20180917 的每日基础数据\n", + "成功获取并保存 20180914 的每日基础数据\n", + "成功获取并保存 20180913 的每日基础数据\n", + "成功获取并保存 20180912 的每日基础数据\n", + "成功获取并保存 20180911 的每日基础数据\n", + "成功获取并保存 20180910 的每日基础数据\n", + "成功获取并保存 20180907 的每日基础数据\n", + "成功获取并保存 20180906 的每日基础数据\n", + "成功获取并保存 20180905 的每日基础数据\n", + "成功获取并保存 20180904 的每日基础数据\n", + "成功获取并保存 20180903 的每日基础数据\n", + "成功获取并保存 20180831 的每日基础数据\n", + "成功获取并保存 20180830 的每日基础数据\n", + "成功获取并保存 20180829 的每日基础数据\n", + "成功获取并保存 20180828 的每日基础数据\n", + "成功获取并保存 20180827 的每日基础数据\n", + "成功获取并保存 20180824 的每日基础数据\n", + "成功获取并保存 20180823 的每日基础数据\n", + "成功获取并保存 20180822 的每日基础数据\n", + "成功获取并保存 20180821 的每日基础数据\n", + "成功获取并保存 20180820 的每日基础数据\n", + "成功获取并保存 20180817 的每日基础数据\n", + "成功获取并保存 20180816 的每日基础数据\n", + "成功获取并保存 20180815 的每日基础数据\n", + "成功获取并保存 20180814 的每日基础数据\n", + "成功获取并保存 20180813 的每日基础数据\n", + "成功获取并保存 20180810 的每日基础数据\n", + "成功获取并保存 20180809 的每日基础数据\n", + "成功获取并保存 20180808 的每日基础数据\n", + "成功获取并保存 20180807 的每日基础数据\n", + "成功获取并保存 20180806 的每日基础数据\n", + "成功获取并保存 20180803 的每日基础数据\n", + "成功获取并保存 20180802 的每日基础数据\n", + "成功获取并保存 20180801 的每日基础数据\n", + "成功获取并保存 20180731 的每日基础数据\n", + "成功获取并保存 20180730 的每日基础数据\n", + "成功获取并保存 20180727 的每日基础数据\n", + "成功获取并保存 20180726 的每日基础数据\n", + "成功获取并保存 20180725 的每日基础数据\n", + "成功获取并保存 20180724 的每日基础数据\n", + "成功获取并保存 20180723 的每日基础数据\n", + "成功获取并保存 20180720 的每日基础数据\n", + "成功获取并保存 20180719 的每日基础数据\n", + "成功获取并保存 20180718 的每日基础数据\n", + "成功获取并保存 20180717 的每日基础数据\n", + "成功获取并保存 20180716 的每日基础数据\n", + "成功获取并保存 20180713 的每日基础数据\n", + "成功获取并保存 20180712 的每日基础数据\n", + "成功获取并保存 20180711 的每日基础数据\n", + "成功获取并保存 20180710 的每日基础数据\n", + "成功获取并保存 20180709 的每日基础数据\n", + "成功获取并保存 20180706 的每日基础数据\n", + "成功获取并保存 20180705 的每日基础数据\n", + "成功获取并保存 20180704 的每日基础数据\n", + "成功获取并保存 20180703 的每日基础数据\n", + "成功获取并保存 20180702 的每日基础数据\n", + "成功获取并保存 20180629 的每日基础数据\n", + "成功获取并保存 20180628 的每日基础数据\n", + "成功获取并保存 20180627 的每日基础数据\n", + "成功获取并保存 20180626 的每日基础数据\n", + "成功获取并保存 20180625 的每日基础数据\n", + "成功获取并保存 20180622 的每日基础数据\n", + "成功获取并保存 20180621 的每日基础数据\n", + "成功获取并保存 20180620 的每日基础数据\n", + "成功获取并保存 20180619 的每日基础数据\n", + "成功获取并保存 20180615 的每日基础数据\n", + "成功获取并保存 20180614 的每日基础数据\n", + "成功获取并保存 20180613 的每日基础数据\n", + "成功获取并保存 20180612 的每日基础数据\n", + "成功获取并保存 20180611 的每日基础数据\n", + "成功获取并保存 20180608 的每日基础数据\n", + "成功获取并保存 20180607 的每日基础数据\n", + "成功获取并保存 20180606 的每日基础数据\n", + "成功获取并保存 20180605 的每日基础数据\n", + "成功获取并保存 20180604 的每日基础数据\n", + "成功获取并保存 20180601 的每日基础数据\n", + "成功获取并保存 20180531 的每日基础数据\n", + "成功获取并保存 20180530 的每日基础数据\n", + "成功获取并保存 20180529 的每日基础数据\n", + "成功获取并保存 20180528 的每日基础数据\n", + "成功获取并保存 20180525 的每日基础数据\n", + "成功获取并保存 20180524 的每日基础数据\n", + "成功获取并保存 20180523 的每日基础数据\n", + "成功获取并保存 20180522 的每日基础数据\n", + "成功获取并保存 20180521 的每日基础数据\n", + "成功获取并保存 20180518 的每日基础数据\n", + "成功获取并保存 20180517 的每日基础数据\n", + "成功获取并保存 20180516 的每日基础数据\n", + "成功获取并保存 20180515 的每日基础数据\n", + "成功获取并保存 20180514 的每日基础数据\n", + "已调用 150 次 API,等待 25.83 秒以满足速率限制...\n", + "成功获取并保存 20180511 的每日基础数据\n", + "成功获取并保存 20180510 的每日基础数据\n", + "成功获取并保存 20180509 的每日基础数据\n", + "成功获取并保存 20180508 的每日基础数据\n", + "成功获取并保存 20180507 的每日基础数据\n", + "成功获取并保存 20180504 的每日基础数据\n", + "成功获取并保存 20180503 的每日基础数据\n", + "成功获取并保存 20180502 的每日基础数据\n", + "成功获取并保存 20180427 的每日基础数据\n", + "成功获取并保存 20180426 的每日基础数据\n", + "成功获取并保存 20180425 的每日基础数据\n", + "成功获取并保存 20180424 的每日基础数据\n", + "成功获取并保存 20180423 的每日基础数据\n", + "成功获取并保存 20180420 的每日基础数据\n", + "成功获取并保存 20180419 的每日基础数据\n", + "成功获取并保存 20180418 的每日基础数据\n", + "成功获取并保存 20180417 的每日基础数据\n", + "成功获取并保存 20180416 的每日基础数据\n", + "成功获取并保存 20180413 的每日基础数据\n", + "成功获取并保存 20180412 的每日基础数据\n", + "成功获取并保存 20180411 的每日基础数据\n", + "成功获取并保存 20180410 的每日基础数据\n", + "成功获取并保存 20180409 的每日基础数据\n", + "成功获取并保存 20180404 的每日基础数据\n", + "成功获取并保存 20180403 的每日基础数据\n", + "成功获取并保存 20180402 的每日基础数据\n", + "成功获取并保存 20180330 的每日基础数据\n", + "成功获取并保存 20180329 的每日基础数据\n", + "成功获取并保存 20180328 的每日基础数据\n", + "成功获取并保存 20180327 的每日基础数据\n", + "成功获取并保存 20180326 的每日基础数据\n", + "成功获取并保存 20180323 的每日基础数据\n", + "成功获取并保存 20180322 的每日基础数据\n", + "成功获取并保存 20180321 的每日基础数据\n", + "成功获取并保存 20180320 的每日基础数据\n", + "成功获取并保存 20180319 的每日基础数据\n", + "成功获取并保存 20180316 的每日基础数据\n", + "成功获取并保存 20180315 的每日基础数据\n", + "成功获取并保存 20180314 的每日基础数据\n", + "成功获取并保存 20180313 的每日基础数据\n", + "成功获取并保存 20180312 的每日基础数据\n", + "成功获取并保存 20180309 的每日基础数据\n", + "成功获取并保存 20180308 的每日基础数据\n", + "成功获取并保存 20180307 的每日基础数据\n", + "成功获取并保存 20180306 的每日基础数据\n", + "成功获取并保存 20180305 的每日基础数据\n", + "成功获取并保存 20180302 的每日基础数据\n", + "成功获取并保存 20180301 的每日基础数据\n", + "成功获取并保存 20180228 的每日基础数据\n", + "成功获取并保存 20180227 的每日基础数据\n", + "成功获取并保存 20180226 的每日基础数据\n", + "成功获取并保存 20180223 的每日基础数据\n", + "成功获取并保存 20180222 的每日基础数据\n", + "成功获取并保存 20180214 的每日基础数据\n", + "成功获取并保存 20180213 的每日基础数据\n", + "成功获取并保存 20180212 的每日基础数据\n", + "成功获取并保存 20180209 的每日基础数据\n", + "成功获取并保存 20180208 的每日基础数据\n", + "成功获取并保存 20180207 的每日基础数据\n", + "成功获取并保存 20180206 的每日基础数据\n", + "成功获取并保存 20180205 的每日基础数据\n", + "成功获取并保存 20180202 的每日基础数据\n", + "成功获取并保存 20180201 的每日基础数据\n", + "成功获取并保存 20180131 的每日基础数据\n", + "成功获取并保存 20180130 的每日基础数据\n", + "成功获取并保存 20180129 的每日基础数据\n", + "成功获取并保存 20180126 的每日基础数据\n", + "成功获取并保存 20180125 的每日基础数据\n", + "成功获取并保存 20180124 的每日基础数据\n", + "成功获取并保存 20180123 的每日基础数据\n", + "成功获取并保存 20180122 的每日基础数据\n", + "成功获取并保存 20180119 的每日基础数据\n", + "成功获取并保存 20180118 的每日基础数据\n", + "成功获取并保存 20180117 的每日基础数据\n", + "成功获取并保存 20180116 的每日基础数据\n", + "成功获取并保存 20180115 的每日基础数据\n", + "成功获取并保存 20180112 的每日基础数据\n", + "成功获取并保存 20180111 的每日基础数据\n", + "成功获取并保存 20180110 的每日基础数据\n", + "成功获取并保存 20180109 的每日基础数据\n", + "成功获取并保存 20180108 的每日基础数据\n", + "成功获取并保存 20180105 的每日基础数据\n", + "成功获取并保存 20180104 的每日基础数据\n", + "成功获取并保存 20180103 的每日基础数据\n", + "成功获取并保存 20180102 的每日基础数据\n", + "成功获取并保存 20171229 的每日基础数据\n", + "成功获取并保存 20171228 的每日基础数据\n", + "成功获取并保存 20171227 的每日基础数据\n", + "成功获取并保存 20171226 的每日基础数据\n", + "成功获取并保存 20171225 的每日基础数据\n", + "成功获取并保存 20171222 的每日基础数据\n", + "成功获取并保存 20171221 的每日基础数据\n", + "成功获取并保存 20171220 的每日基础数据\n", + "成功获取并保存 20171219 的每日基础数据\n", + "成功获取并保存 20171218 的每日基础数据\n", + "成功获取并保存 20171215 的每日基础数据\n", + "成功获取并保存 20171214 的每日基础数据\n", + "成功获取并保存 20171213 的每日基础数据\n", + "成功获取并保存 20171212 的每日基础数据\n", + "成功获取并保存 20171211 的每日基础数据\n", + "成功获取并保存 20171208 的每日基础数据\n", + "成功获取并保存 20171207 的每日基础数据\n", + "成功获取并保存 20171206 的每日基础数据\n", + "成功获取并保存 20171205 的每日基础数据\n", + "成功获取并保存 20171204 的每日基础数据\n", + "成功获取并保存 20171201 的每日基础数据\n", + "成功获取并保存 20171130 的每日基础数据\n", + "成功获取并保存 20171129 的每日基础数据\n", + "成功获取并保存 20171128 的每日基础数据\n", + "成功获取并保存 20171127 的每日基础数据\n", + "成功获取并保存 20171124 的每日基础数据\n", + "成功获取并保存 20171123 的每日基础数据\n", + "成功获取并保存 20171122 的每日基础数据\n", + "成功获取并保存 20171121 的每日基础数据\n", + "成功获取并保存 20171120 的每日基础数据\n", + "成功获取并保存 20171117 的每日基础数据\n", + "成功获取并保存 20171116 的每日基础数据\n", + "成功获取并保存 20171115 的每日基础数据\n", + "成功获取并保存 20171114 的每日基础数据\n", + "成功获取并保存 20171113 的每日基础数据\n", + "成功获取并保存 20171110 的每日基础数据\n", + "成功获取并保存 20171109 的每日基础数据\n", + "成功获取并保存 20171108 的每日基础数据\n", + "成功获取并保存 20171107 的每日基础数据\n", + "成功获取并保存 20171106 的每日基础数据\n", + "成功获取并保存 20171103 的每日基础数据\n", + "成功获取并保存 20171102 的每日基础数据\n", + "成功获取并保存 20171101 的每日基础数据\n", + "成功获取并保存 20171031 的每日基础数据\n", + "成功获取并保存 20171030 的每日基础数据\n", + "成功获取并保存 20171027 的每日基础数据\n", + "成功获取并保存 20171026 的每日基础数据\n", + "成功获取并保存 20171025 的每日基础数据\n", + "成功获取并保存 20171024 的每日基础数据\n", + "成功获取并保存 20171023 的每日基础数据\n", + "成功获取并保存 20171020 的每日基础数据\n", + "成功获取并保存 20171019 的每日基础数据\n", + "成功获取并保存 20171018 的每日基础数据\n", + "成功获取并保存 20171017 的每日基础数据\n", + "成功获取并保存 20171016 的每日基础数据\n", + "成功获取并保存 20171013 的每日基础数据\n", + "成功获取并保存 20171012 的每日基础数据\n", + "成功获取并保存 20171011 的每日基础数据\n", + "成功获取并保存 20171010 的每日基础数据\n", + "成功获取并保存 20171009 的每日基础数据\n", + "成功获取并保存 20170929 的每日基础数据\n", + "成功获取并保存 20170928 的每日基础数据\n", + "成功获取并保存 20170927 的每日基础数据\n", + "成功获取并保存 20170926 的每日基础数据\n", + "成功获取并保存 20170925 的每日基础数据\n", + "已调用 150 次 API,等待 26.08 秒以满足速率限制...\n", + "成功获取并保存 20170922 的每日基础数据\n", + "成功获取并保存 20170921 的每日基础数据\n", + "成功获取并保存 20170920 的每日基础数据\n", + "成功获取并保存 20170919 的每日基础数据\n", + "成功获取并保存 20170918 的每日基础数据\n", + "成功获取并保存 20170915 的每日基础数据\n", + "成功获取并保存 20170914 的每日基础数据\n", + "成功获取并保存 20170913 的每日基础数据\n", + "成功获取并保存 20170912 的每日基础数据\n", + "成功获取并保存 20170911 的每日基础数据\n", + "成功获取并保存 20170908 的每日基础数据\n", + "成功获取并保存 20170907 的每日基础数据\n", + "成功获取并保存 20170906 的每日基础数据\n", + "成功获取并保存 20170905 的每日基础数据\n", + "成功获取并保存 20170904 的每日基础数据\n", + "成功获取并保存 20170901 的每日基础数据\n", + "成功获取并保存 20170831 的每日基础数据\n", + "成功获取并保存 20170830 的每日基础数据\n", + "成功获取并保存 20170829 的每日基础数据\n", + "成功获取并保存 20170828 的每日基础数据\n", + "成功获取并保存 20170825 的每日基础数据\n", + "成功获取并保存 20170824 的每日基础数据\n", + "成功获取并保存 20170823 的每日基础数据\n", + "成功获取并保存 20170822 的每日基础数据\n", + "成功获取并保存 20170821 的每日基础数据\n", + "成功获取并保存 20170818 的每日基础数据\n", + "成功获取并保存 20170817 的每日基础数据\n", + "成功获取并保存 20170816 的每日基础数据\n", + "成功获取并保存 20170815 的每日基础数据\n", + "成功获取并保存 20170814 的每日基础数据\n", + "成功获取并保存 20170811 的每日基础数据\n", + "成功获取并保存 20170810 的每日基础数据\n", + "成功获取并保存 20170809 的每日基础数据\n", + "成功获取并保存 20170808 的每日基础数据\n", + "成功获取并保存 20170807 的每日基础数据\n", + "成功获取并保存 20170804 的每日基础数据\n", + "成功获取并保存 20170803 的每日基础数据\n", + "成功获取并保存 20170802 的每日基础数据\n", + "成功获取并保存 20170801 的每日基础数据\n", + "成功获取并保存 20170731 的每日基础数据\n", + "成功获取并保存 20170728 的每日基础数据\n", + "成功获取并保存 20170727 的每日基础数据\n", + "成功获取并保存 20170726 的每日基础数据\n", + "成功获取并保存 20170725 的每日基础数据\n", + "成功获取并保存 20170724 的每日基础数据\n", + "成功获取并保存 20170721 的每日基础数据\n", + "成功获取并保存 20170720 的每日基础数据\n", + "成功获取并保存 20170719 的每日基础数据\n", + "成功获取并保存 20170718 的每日基础数据\n", + "成功获取并保存 20170717 的每日基础数据\n", + "成功获取并保存 20170714 的每日基础数据\n", + "成功获取并保存 20170713 的每日基础数据\n", + "成功获取并保存 20170712 的每日基础数据\n", + "成功获取并保存 20170711 的每日基础数据\n", + "成功获取并保存 20170710 的每日基础数据\n", + "成功获取并保存 20170707 的每日基础数据\n", + "成功获取并保存 20170706 的每日基础数据\n", + "成功获取并保存 20170705 的每日基础数据\n", + "成功获取并保存 20170704 的每日基础数据\n", + "成功获取并保存 20170703 的每日基础数据\n", + "成功获取并保存 20170630 的每日基础数据\n", + "成功获取并保存 20170629 的每日基础数据\n", + "成功获取并保存 20170628 的每日基础数据\n", + "成功获取并保存 20170627 的每日基础数据\n", + "成功获取并保存 20170626 的每日基础数据\n", + "成功获取并保存 20170623 的每日基础数据\n", + "成功获取并保存 20170622 的每日基础数据\n", + "成功获取并保存 20170621 的每日基础数据\n", + "成功获取并保存 20170620 的每日基础数据\n", + "成功获取并保存 20170619 的每日基础数据\n", + "成功获取并保存 20170616 的每日基础数据\n", + "成功获取并保存 20170615 的每日基础数据\n", + "成功获取并保存 20170614 的每日基础数据\n", + "成功获取并保存 20170613 的每日基础数据\n", + "成功获取并保存 20170612 的每日基础数据\n", + "成功获取并保存 20170609 的每日基础数据\n", + "成功获取并保存 20170608 的每日基础数据\n", + "成功获取并保存 20170607 的每日基础数据\n", + "成功获取并保存 20170606 的每日基础数据\n", + "成功获取并保存 20170605 的每日基础数据\n", + "成功获取并保存 20170602 的每日基础数据\n", + "成功获取并保存 20170601 的每日基础数据\n", + "成功获取并保存 20170531 的每日基础数据\n", + "成功获取并保存 20170526 的每日基础数据\n", + "成功获取并保存 20170525 的每日基础数据\n", + "成功获取并保存 20170524 的每日基础数据\n", + "成功获取并保存 20170523 的每日基础数据\n", + "成功获取并保存 20170522 的每日基础数据\n", + "成功获取并保存 20170519 的每日基础数据\n", + "成功获取并保存 20170518 的每日基础数据\n", + "成功获取并保存 20170517 的每日基础数据\n", + "成功获取并保存 20170516 的每日基础数据\n", + "成功获取并保存 20170515 的每日基础数据\n", + "成功获取并保存 20170512 的每日基础数据\n", + "成功获取并保存 20170511 的每日基础数据\n", + "成功获取并保存 20170510 的每日基础数据\n", + "成功获取并保存 20170509 的每日基础数据\n", + "成功获取并保存 20170508 的每日基础数据\n", + "成功获取并保存 20170505 的每日基础数据\n", + "成功获取并保存 20170504 的每日基础数据\n", + "成功获取并保存 20170503 的每日基础数据\n", + "成功获取并保存 20170502 的每日基础数据\n", + "成功获取并保存 20170428 的每日基础数据\n", + "成功获取并保存 20170427 的每日基础数据\n", + "成功获取并保存 20170426 的每日基础数据\n", + "成功获取并保存 20170425 的每日基础数据\n", + "成功获取并保存 20170424 的每日基础数据\n", + "成功获取并保存 20170421 的每日基础数据\n", + "成功获取并保存 20170420 的每日基础数据\n", + "成功获取并保存 20170419 的每日基础数据\n", + "成功获取并保存 20170418 的每日基础数据\n", + "成功获取并保存 20170417 的每日基础数据\n", + "成功获取并保存 20170414 的每日基础数据\n", + "成功获取并保存 20170413 的每日基础数据\n", + "成功获取并保存 20170412 的每日基础数据\n", + "成功获取并保存 20170411 的每日基础数据\n", + "成功获取并保存 20170410 的每日基础数据\n", + "成功获取并保存 20170407 的每日基础数据\n", + "成功获取并保存 20170406 的每日基础数据\n", + "成功获取并保存 20170405 的每日基础数据\n", + "成功获取并保存 20170331 的每日基础数据\n", + "成功获取并保存 20170330 的每日基础数据\n", + "成功获取并保存 20170329 的每日基础数据\n", + "成功获取并保存 20170328 的每日基础数据\n", + "成功获取并保存 20170327 的每日基础数据\n", + "成功获取并保存 20170324 的每日基础数据\n", + "成功获取并保存 20170323 的每日基础数据\n", + "成功获取并保存 20170322 的每日基础数据\n", + "成功获取并保存 20170321 的每日基础数据\n", + "成功获取并保存 20170320 的每日基础数据\n", + "成功获取并保存 20170317 的每日基础数据\n", + "成功获取并保存 20170316 的每日基础数据\n", + "成功获取并保存 20170315 的每日基础数据\n", + "成功获取并保存 20170314 的每日基础数据\n", + "成功获取并保存 20170313 的每日基础数据\n", + "成功获取并保存 20170310 的每日基础数据\n", + "成功获取并保存 20170309 的每日基础数据\n", + "成功获取并保存 20170308 的每日基础数据\n", + "成功获取并保存 20170307 的每日基础数据\n", + "成功获取并保存 20170306 的每日基础数据\n", + "成功获取并保存 20170303 的每日基础数据\n", + "成功获取并保存 20170302 的每日基础数据\n", + "成功获取并保存 20170301 的每日基础数据\n", + "成功获取并保存 20170228 的每日基础数据\n", + "成功获取并保存 20170227 的每日基础数据\n", + "成功获取并保存 20170224 的每日基础数据\n", + "成功获取并保存 20170223 的每日基础数据\n", + "成功获取并保存 20170222 的每日基础数据\n", + "成功获取并保存 20170221 的每日基础数据\n", + "成功获取并保存 20170220 的每日基础数据\n", + "已调用 150 次 API,等待 25.80 秒以满足速率限制...\n", + "成功获取并保存 20170217 的每日基础数据\n", + "成功获取并保存 20170216 的每日基础数据\n", + "成功获取并保存 20170215 的每日基础数据\n", + "成功获取并保存 20170214 的每日基础数据\n", + "成功获取并保存 20170213 的每日基础数据\n", + "成功获取并保存 20170210 的每日基础数据\n", + "成功获取并保存 20170209 的每日基础数据\n", + "成功获取并保存 20170208 的每日基础数据\n", + "成功获取并保存 20170207 的每日基础数据\n", + "成功获取并保存 20170206 的每日基础数据\n", + "成功获取并保存 20170203 的每日基础数据\n", + "成功获取并保存 20170126 的每日基础数据\n", + "成功获取并保存 20170125 的每日基础数据\n", + "成功获取并保存 20170124 的每日基础数据\n", + "成功获取并保存 20170123 的每日基础数据\n", + "成功获取并保存 20170120 的每日基础数据\n", + "成功获取并保存 20170119 的每日基础数据\n", + "成功获取并保存 20170118 的每日基础数据\n", + "成功获取并保存 20170117 的每日基础数据\n", + "成功获取并保存 20170116 的每日基础数据\n", + "成功获取并保存 20170113 的每日基础数据\n", + "成功获取并保存 20170112 的每日基础数据\n", + "成功获取并保存 20170111 的每日基础数据\n", + "成功获取并保存 20170110 的每日基础数据\n", + "成功获取并保存 20170109 的每日基础数据\n", + "成功获取并保存 20170106 的每日基础数据\n", + "成功获取并保存 20170105 的每日基础数据\n", + "成功获取并保存 20170104 的每日基础数据\n", + "成功获取并保存 20170103 的每日基础数据\n" + ] + } + ], + "source": [ + "import tushare as ts\n", + "import pandas as pd\n", + "import time\n", + "\n", + "\n", + "# 获取交易日历\n", + "trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250301')\n", + "trade_cal = trade_cal[trade_cal['is_open'] == 1] # 只保留交易日\n", + "trade_dates = trade_cal['cal_date'].tolist() # 获取所有交易日期列表\n", + "\n", + "# 使用 HDFStore 存储数据\n", + "all_daily_data = []\n", + "\n", + "# API 调用计数和时间控制变量\n", + "api_call_count = 0\n", + "batch_start_time = time.time()\n", + "\n", + "# 遍历每个交易日期并获取数据\n", + "for trade_date in trade_dates:\n", + " try:\n", + " # 获取每日基础数据\n", + " sw_daily = pro.sw_daily(trade_date=trade_date)\n", + " if sw_daily is not None and not sw_daily.empty:\n", + " all_daily_data.append(sw_daily)\n", + " print(f\"成功获取并保存 {trade_date} 的每日基础数据\")\n", + "\n", + " # 计数一次 API 调用\n", + " api_call_count += 1\n", + "\n", + " # 每调用 300 次,检查时间是否少于 1 分钟,如果少于则等待剩余时间\n", + " if api_call_count % 150 == 0:\n", + " elapsed = time.time() - batch_start_time\n", + " if elapsed < 60:\n", + " sleep_time = 60 - elapsed\n", + " print(f\"已调用 150 次 API,等待 {sleep_time:.2f} 秒以满足速率限制...\")\n", + " time.sleep(sleep_time)\n", + " # 重置批次起始时间\n", + " batch_start_time = time.time()\n", + "\n", + " except Exception as e:\n", + " print(f\"获取 {trade_date} 数据时出错: {e}\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "260641c7-5e5b-407c-8cbf-8371a3c98961", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "所有每日基础数据获取并保存完毕!\n" + ] + } + ], + "source": [ + "\n", + "# 将所有数据合并为一个 DataFrame\n", + "all_daily_data_df = pd.concat(all_daily_data, ignore_index=True)\n", + "\n", + "# 将数据保存为 HDF5 文件(table 格式)\n", + "all_daily_data_df.to_hdf('../../data/sw_daily.h5', key='sw_daily', mode='w', format='table', data_columns=True)\n", + "\n", + "print(\"所有每日基础数据获取并保存完毕!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "86961191-2337-4ef4-a84a-a790408bca57", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date name open low high close \\\n", + "0 801001.SI 20250221 申万50 3035.90 3032.87 3082.66 3080.21 \n", + "1 801002.SI 20250221 申万中小 6669.62 6661.71 6764.47 6756.56 \n", + "2 801003.SI 20250221 申万A指 3820.27 3804.30 3868.00 3866.24 \n", + "3 801005.SI 20250221 申万创业 2948.20 2940.50 3015.09 3011.72 \n", + "4 801010.SI 20250221 农林牧渔 2484.68 2474.55 2509.74 2482.52 \n", + ".. ... ... ... ... ... ... ... \n", + "434 859811.SI 20250221 生活用纸 1246.80 1232.31 1262.77 1242.81 \n", + "435 859821.SI 20250221 化妆品制造及其他 2556.69 2509.55 2571.30 2541.22 \n", + "436 859822.SI 20250221 品牌化妆品 8094.33 8012.65 8187.53 8097.73 \n", + "437 859852.SI 20250221 培训教育 697.66 681.08 712.29 701.34 \n", + "438 859951.SI 20250221 电视广播Ⅲ 1065.62 1052.04 1100.17 1082.18 \n", + "\n", + " change pct_change vol amount pe pb float_mv \\\n", + "0 52.96 1.75 816982.0 23041217.0 14.09 1.99 8.250593e+08 \n", + "1 103.90 1.56 3829971.0 44318003.0 26.50 2.36 6.496748e+08 \n", + "2 53.69 1.41 15127544.0 219063211.0 18.24 1.81 3.690715e+09 \n", + "3 68.00 2.31 3330400.0 66930876.0 38.42 3.77 6.188568e+08 \n", + "4 2.94 0.12 176011.0 1500583.0 22.17 2.25 5.354195e+07 \n", + ".. ... ... ... ... ... ... ... \n", + "434 -2.94 -0.24 4569.0 66382.0 40.52 2.05 2.102047e+06 \n", + "435 -27.71 -1.08 14028.0 100506.0 40.09 2.10 1.550297e+06 \n", + "436 20.03 0.25 4185.0 98655.0 27.34 3.10 3.700208e+06 \n", + "437 2.40 0.34 64215.0 481622.0 128.82 7.13 3.987335e+06 \n", + "438 26.90 2.55 65040.0 407776.0 60.36 1.09 6.848231e+06 \n", + "\n", + " total_mv \n", + "0 2.124415e+09 \n", + "1 1.216920e+09 \n", + "2 8.808614e+09 \n", + "3 1.386123e+09 \n", + "4 1.206622e+08 \n", + ".. ... \n", + "434 5.901333e+06 \n", + "435 3.119048e+06 \n", + "436 1.032154e+07 \n", + "437 6.559061e+06 \n", + "438 1.663464e+07 \n", + "\n", + "[439 rows x 15 columns]\n" + ] + } + ], + "source": [ + "print(pro.sw_daily(trade_date='20250221'))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/data/industry_data.ipynb b/code/data/industry_data.ipynb new file mode 100644 index 0000000..a3fa419 --- /dev/null +++ b/code/data/industry_data.ipynb @@ -0,0 +1,5894 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ac5ca4b4-2ec8-4919-ab95-0af825efb6c1", + "metadata": {}, + "outputs": [], + "source": [ + "import tushare as ts\n", + "import pandas as pd\n", + "import time\n", + "\n", + "\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "pro = ts.pro_api()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f0e4ee09-c6c2-474f-a881-01268eaa1d4f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " l1_code l1_name l2_code l2_name l3_code l3_name ts_code name \\\n", + "0 801080.SI 电子 801082.SI 其他电子Ⅱ 850841.SI 其他电子Ⅲ 600751.SH 海航科技 \n", + "1 801170.SI 交通运输 801992.SI 航运港口 851761.SI 航运 600751.SH 海航科技 \n", + "\n", + " in_date out_date is_new \n", + "0 20180713 None Y \n", + "1 20240730 None Y \n" + ] + } + ], + "source": [ + "print(pro.index_member_all(ts_code='600751.SH'))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "fc09abd2-2404-4a37-9357-5576930a9d3a", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "成功获取 000001.SZ 的数据\n", + "成功获取 000002.SZ 的数据\n", + "成功获取 000004.SZ 的数据\n", + "成功获取 000006.SZ 的数据\n", + "成功获取 000007.SZ 的数据\n", + "成功获取 000008.SZ 的数据\n", + "成功获取 000009.SZ 的数据\n", + "成功获取 000010.SZ 的数据\n", + "成功获取 000011.SZ 的数据\n", + "成功获取 000012.SZ 的数据\n", + "成功获取 000014.SZ 的数据\n", + "成功获取 000016.SZ 的数据\n", + "成功获取 000017.SZ 的数据\n", + "成功获取 000019.SZ 的数据\n", + "成功获取 000020.SZ 的数据\n", + "成功获取 000021.SZ 的数据\n", + "成功获取 000025.SZ 的数据\n", + "成功获取 000026.SZ 的数据\n", + "成功获取 000027.SZ 的数据\n", + "成功获取 000028.SZ 的数据\n", + "成功获取 000029.SZ 的数据\n", + "成功获取 000030.SZ 的数据\n", + "成功获取 000031.SZ 的数据\n", + "成功获取 000032.SZ 的数据\n", + "成功获取 000034.SZ 的数据\n", + "成功获取 000035.SZ 的数据\n", + "成功获取 000036.SZ 的数据\n", + "成功获取 000037.SZ 的数据\n", + "成功获取 000039.SZ 的数据\n", + "成功获取 000040.SZ 的数据\n", + "成功获取 000042.SZ 的数据\n", + "成功获取 000045.SZ 的数据\n", + "成功获取 000048.SZ 的数据\n", + "成功获取 000049.SZ 的数据\n", + "成功获取 000050.SZ 的数据\n", + "成功获取 000055.SZ 的数据\n", + "成功获取 000056.SZ 的数据\n", + "成功获取 000058.SZ 的数据\n", + "成功获取 000059.SZ 的数据\n", + "成功获取 000060.SZ 的数据\n", + "成功获取 000061.SZ 的数据\n", + "成功获取 000062.SZ 的数据\n", + "成功获取 000063.SZ 的数据\n", + "成功获取 000065.SZ 的数据\n", + "成功获取 000066.SZ 的数据\n", + "成功获取 000068.SZ 的数据\n", + "成功获取 000069.SZ 的数据\n", + "成功获取 000070.SZ 的数据\n", + "成功获取 000078.SZ 的数据\n", + "成功获取 000088.SZ 的数据\n", + "成功获取 000089.SZ 的数据\n", + "成功获取 000090.SZ 的数据\n", + "成功获取 000096.SZ 的数据\n", + "成功获取 000099.SZ 的数据\n", + "成功获取 000100.SZ 的数据\n", + "成功获取 000151.SZ 的数据\n", + "成功获取 000153.SZ 的数据\n", + "成功获取 000155.SZ 的数据\n", + "成功获取 000156.SZ 的数据\n", + "成功获取 000157.SZ 的数据\n", + "成功获取 000158.SZ 的数据\n", + "成功获取 000159.SZ 的数据\n", + "成功获取 000166.SZ 的数据\n", + "成功获取 000301.SZ 的数据\n", + "成功获取 000333.SZ 的数据\n", + "成功获取 000338.SZ 的数据\n", + "成功获取 000400.SZ 的数据\n", + "成功获取 000401.SZ 的数据\n", + "成功获取 000402.SZ 的数据\n", + "成功获取 000403.SZ 的数据\n", + "成功获取 000404.SZ 的数据\n", + "成功获取 000407.SZ 的数据\n", + "成功获取 000408.SZ 的数据\n", + "成功获取 000409.SZ 的数据\n", + "成功获取 000410.SZ 的数据\n", + "成功获取 000411.SZ 的数据\n", + "成功获取 000415.SZ 的数据\n", + "成功获取 000417.SZ 的数据\n", + "成功获取 000419.SZ 的数据\n", + "成功获取 000420.SZ 的数据\n", + "成功获取 000421.SZ 的数据\n", + "成功获取 000422.SZ 的数据\n", + "成功获取 000423.SZ 的数据\n", + "成功获取 000425.SZ 的数据\n", + "成功获取 000426.SZ 的数据\n", + "成功获取 000428.SZ 的数据\n", + "成功获取 000429.SZ 的数据\n", + "成功获取 000430.SZ 的数据\n", + "成功获取 000488.SZ 的数据\n", + "成功获取 000498.SZ 的数据\n", + "成功获取 000501.SZ 的数据\n", + "成功获取 000503.SZ 的数据\n", + "成功获取 000504.SZ 的数据\n", + "成功获取 000505.SZ 的数据\n", + "成功获取 000506.SZ 的数据\n", + "成功获取 000507.SZ 的数据\n", + "成功获取 000509.SZ 的数据\n", + "成功获取 000510.SZ 的数据\n", + "成功获取 000513.SZ 的数据\n", + "成功获取 000514.SZ 的数据\n", + "成功获取 000516.SZ 的数据\n", + "成功获取 000517.SZ 的数据\n", + "成功获取 000518.SZ 的数据\n", + "成功获取 000519.SZ 的数据\n", + "成功获取 000520.SZ 的数据\n", + "成功获取 000521.SZ 的数据\n", + "成功获取 000523.SZ 的数据\n", + "成功获取 000524.SZ 的数据\n", + "成功获取 000525.SZ 的数据\n", + "成功获取 000526.SZ 的数据\n", + "成功获取 000528.SZ 的数据\n", + "成功获取 000529.SZ 的数据\n", + "成功获取 000530.SZ 的数据\n", + "成功获取 000531.SZ 的数据\n", + "成功获取 000532.SZ 的数据\n", + "成功获取 000533.SZ 的数据\n", + "成功获取 000534.SZ 的数据\n", + "成功获取 000536.SZ 的数据\n", + "成功获取 000537.SZ 的数据\n", + "成功获取 000538.SZ 的数据\n", + "成功获取 000539.SZ 的数据\n", + "成功获取 000541.SZ 的数据\n", + "成功获取 000543.SZ 的数据\n", + "成功获取 000544.SZ 的数据\n", + "成功获取 000545.SZ 的数据\n", + "成功获取 000546.SZ 的数据\n", + "成功获取 000547.SZ 的数据\n", + "成功获取 000548.SZ 的数据\n", + "成功获取 000550.SZ 的数据\n", + "成功获取 000551.SZ 的数据\n", + "成功获取 000552.SZ 的数据\n", + "成功获取 000553.SZ 的数据\n", + "成功获取 000554.SZ 的数据\n", + "成功获取 000555.SZ 的数据\n", + "成功获取 000557.SZ 的数据\n", + "成功获取 000558.SZ 的数据\n", + "成功获取 000559.SZ 的数据\n", + "成功获取 000560.SZ 的数据\n", + "成功获取 000561.SZ 的数据\n", + "成功获取 000563.SZ 的数据\n", + "成功获取 000564.SZ 的数据\n", + "成功获取 000565.SZ 的数据\n", + "成功获取 000566.SZ 的数据\n", + "成功获取 000567.SZ 的数据\n", + "成功获取 000568.SZ 的数据\n", + "成功获取 000570.SZ 的数据\n", + "成功获取 000571.SZ 的数据\n", + "成功获取 000572.SZ 的数据\n", + "成功获取 000573.SZ 的数据\n", + "成功获取 000576.SZ 的数据\n", + "成功获取 000581.SZ 的数据\n", + "成功获取 000582.SZ 的数据\n", + "成功获取 000584.SZ 的数据\n", + "成功获取 000586.SZ 的数据\n", + "成功获取 000589.SZ 的数据\n", + "成功获取 000590.SZ 的数据\n", + "成功获取 000591.SZ 的数据\n", + "成功获取 000592.SZ 的数据\n", + "成功获取 000593.SZ 的数据\n", + "成功获取 000595.SZ 的数据\n", + "成功获取 000596.SZ 的数据\n", + "成功获取 000597.SZ 的数据\n", + "成功获取 000598.SZ 的数据\n", + "成功获取 000599.SZ 的数据\n", + "成功获取 000600.SZ 的数据\n", + "成功获取 000601.SZ 的数据\n", + "成功获取 000603.SZ 的数据\n", + "成功获取 000605.SZ 的数据\n", + "成功获取 000607.SZ 的数据\n", + "成功获取 000608.SZ 的数据\n", + "成功获取 000609.SZ 的数据\n", + "成功获取 000610.SZ 的数据\n", + "成功获取 000612.SZ 的数据\n", + "成功获取 000615.SZ 的数据\n", + "成功获取 000617.SZ 的数据\n", + "成功获取 000619.SZ 的数据\n", + "成功获取 000620.SZ 的数据\n", + "成功获取 000622.SZ 的数据\n", + "成功获取 000623.SZ 的数据\n", + "成功获取 000625.SZ 的数据\n", + "成功获取 000626.SZ 的数据\n", + "成功获取 000627.SZ 的数据\n", + "成功获取 000628.SZ 的数据\n", + "成功获取 000629.SZ 的数据\n", + "成功获取 000630.SZ 的数据\n", + "成功获取 000631.SZ 的数据\n", + "成功获取 000632.SZ 的数据\n", + "成功获取 000633.SZ 的数据\n", + "成功获取 000635.SZ 的数据\n", + "成功获取 000636.SZ 的数据\n", + "成功获取 000637.SZ 的数据\n", + "成功获取 000638.SZ 的数据\n", + "成功获取 000639.SZ 的数据\n", + "成功获取 000650.SZ 的数据\n", + "成功获取 000651.SZ 的数据\n", + "成功获取 000652.SZ 的数据\n", + "成功获取 000655.SZ 的数据\n", + "成功获取 000656.SZ 的数据\n", + "成功获取 000657.SZ 的数据\n", + "成功获取 000659.SZ 的数据\n", + "成功获取 000661.SZ 的数据\n", + "成功获取 000663.SZ 的数据\n", + "成功获取 000665.SZ 的数据\n", + "成功获取 000668.SZ 的数据\n", + "成功获取 000669.SZ 的数据\n", + "成功获取 000670.SZ 的数据\n", + "成功获取 000672.SZ 的数据\n", + "成功获取 000676.SZ 的数据\n", + "成功获取 000677.SZ 的数据\n", + "成功获取 000678.SZ 的数据\n", + "成功获取 000679.SZ 的数据\n", + "成功获取 000680.SZ 的数据\n", + "成功获取 000681.SZ 的数据\n", + "成功获取 000682.SZ 的数据\n", + "成功获取 000683.SZ 的数据\n", + "成功获取 000685.SZ 的数据\n", + "成功获取 000686.SZ 的数据\n", + "成功获取 000688.SZ 的数据\n", + "成功获取 000690.SZ 的数据\n", + "成功获取 000691.SZ 的数据\n", + "成功获取 000692.SZ 的数据\n", + "成功获取 000695.SZ 的数据\n", + "成功获取 000697.SZ 的数据\n", + "成功获取 000698.SZ 的数据\n", + "成功获取 000700.SZ 的数据\n", + "成功获取 000701.SZ 的数据\n", + "成功获取 000702.SZ 的数据\n", + "成功获取 000703.SZ 的数据\n", + "成功获取 000705.SZ 的数据\n", + "成功获取 000707.SZ 的数据\n", + "成功获取 000708.SZ 的数据\n", + "成功获取 000709.SZ 的数据\n", + "成功获取 000710.SZ 的数据\n", + "成功获取 000711.SZ 的数据\n", + "成功获取 000712.SZ 的数据\n", + "成功获取 000713.SZ 的数据\n", + "成功获取 000715.SZ 的数据\n", + "成功获取 000716.SZ 的数据\n", + "成功获取 000717.SZ 的数据\n", + "成功获取 000718.SZ 的数据\n", + "成功获取 000719.SZ 的数据\n", + "成功获取 000720.SZ 的数据\n", + "成功获取 000721.SZ 的数据\n", + "成功获取 000722.SZ 的数据\n", + "成功获取 000723.SZ 的数据\n", + "成功获取 000725.SZ 的数据\n", + "成功获取 000726.SZ 的数据\n", + "成功获取 000727.SZ 的数据\n", + "成功获取 000728.SZ 的数据\n", + "成功获取 000729.SZ 的数据\n", + "成功获取 000731.SZ 的数据\n", + "成功获取 000733.SZ 的数据\n", + "成功获取 000735.SZ 的数据\n", + "成功获取 000736.SZ 的数据\n", + "成功获取 000737.SZ 的数据\n", + "成功获取 000738.SZ 的数据\n", + "成功获取 000739.SZ 的数据\n", + "成功获取 000750.SZ 的数据\n", + "成功获取 000751.SZ 的数据\n", + "成功获取 000752.SZ 的数据\n", + "成功获取 000753.SZ 的数据\n", + "成功获取 000755.SZ 的数据\n", + "成功获取 000756.SZ 的数据\n", + "成功获取 000757.SZ 的数据\n", + "成功获取 000758.SZ 的数据\n", + "成功获取 000759.SZ 的数据\n", + "成功获取 000761.SZ 的数据\n", + "成功获取 000762.SZ 的数据\n", + "成功获取 000766.SZ 的数据\n", + "成功获取 000767.SZ 的数据\n", + "成功获取 000768.SZ 的数据\n", + "成功获取 000776.SZ 的数据\n", + "成功获取 000777.SZ 的数据\n", + "成功获取 000778.SZ 的数据\n", + "成功获取 000779.SZ 的数据\n", + "成功获取 000782.SZ 的数据\n", + "成功获取 000783.SZ 的数据\n", + "成功获取 000785.SZ 的数据\n", + "成功获取 000786.SZ 的数据\n", + "成功获取 000788.SZ 的数据\n", + "成功获取 000789.SZ 的数据\n", + "成功获取 000790.SZ 的数据\n", + "成功获取 000791.SZ 的数据\n", + "成功获取 000792.SZ 的数据\n", + "成功获取 000793.SZ 的数据\n", + "成功获取 000795.SZ 的数据\n", + "成功获取 000796.SZ 的数据\n", + "成功获取 000797.SZ 的数据\n", + "成功获取 000798.SZ 的数据\n", + "成功获取 000799.SZ 的数据\n", + "成功获取 000800.SZ 的数据\n", + "成功获取 000801.SZ 的数据\n", + "成功获取 000802.SZ 的数据\n", + "成功获取 000803.SZ 的数据\n", + "成功获取 000807.SZ 的数据\n", + "成功获取 000809.SZ 的数据\n", + "成功获取 000810.SZ 的数据\n", + "成功获取 000811.SZ 的数据\n", + "成功获取 000812.SZ 的数据\n", + "成功获取 000813.SZ 的数据\n", + "已调用300次API,等待 20.52 秒以满足速率限制...\n", + "成功获取 000815.SZ 的数据\n", + "成功获取 000816.SZ 的数据\n", + "成功获取 000818.SZ 的数据\n", + "成功获取 000819.SZ 的数据\n", + "成功获取 000820.SZ 的数据\n", + "成功获取 000821.SZ 的数据\n", + "成功获取 000822.SZ 的数据\n", + "成功获取 000823.SZ 的数据\n", + "成功获取 000825.SZ 的数据\n", + "成功获取 000826.SZ 的数据\n", + "成功获取 000828.SZ 的数据\n", + "成功获取 000829.SZ 的数据\n", + "成功获取 000830.SZ 的数据\n", + "成功获取 000831.SZ 的数据\n", + "成功获取 000833.SZ 的数据\n", + "成功获取 000837.SZ 的数据\n", + "成功获取 000838.SZ 的数据\n", + "成功获取 000839.SZ 的数据\n", + "成功获取 000848.SZ 的数据\n", + "成功获取 000850.SZ 的数据\n", + "成功获取 000851.SZ 的数据\n", + "成功获取 000852.SZ 的数据\n", + "成功获取 000856.SZ 的数据\n", + "成功获取 000858.SZ 的数据\n", + "成功获取 000859.SZ 的数据\n", + "成功获取 000860.SZ 的数据\n", + "成功获取 000862.SZ 的数据\n", + "成功获取 000863.SZ 的数据\n", + "成功获取 000868.SZ 的数据\n", + "成功获取 000869.SZ 的数据\n", + "成功获取 000875.SZ 的数据\n", + "成功获取 000876.SZ 的数据\n", + "成功获取 000877.SZ 的数据\n", + "成功获取 000878.SZ 的数据\n", + "成功获取 000880.SZ 的数据\n", + "成功获取 000881.SZ 的数据\n", + "成功获取 000882.SZ 的数据\n", + "成功获取 000883.SZ 的数据\n", + "成功获取 000885.SZ 的数据\n", + "成功获取 000886.SZ 的数据\n", + "成功获取 000887.SZ 的数据\n", + "成功获取 000888.SZ 的数据\n", + "成功获取 000889.SZ 的数据\n", + "成功获取 000890.SZ 的数据\n", + "成功获取 000892.SZ 的数据\n", + "成功获取 000893.SZ 的数据\n", + "成功获取 000895.SZ 的数据\n", + "成功获取 000897.SZ 的数据\n", + "成功获取 000898.SZ 的数据\n", + "成功获取 000899.SZ 的数据\n", + "成功获取 000900.SZ 的数据\n", + "成功获取 000901.SZ 的数据\n", + "成功获取 000902.SZ 的数据\n", + "成功获取 000903.SZ 的数据\n", + "成功获取 000905.SZ 的数据\n", + "成功获取 000906.SZ 的数据\n", + "成功获取 000908.SZ 的数据\n", + "成功获取 000909.SZ 的数据\n", + "成功获取 000910.SZ 的数据\n", + "成功获取 000911.SZ 的数据\n", + "成功获取 000912.SZ 的数据\n", + "成功获取 000913.SZ 的数据\n", + "成功获取 000915.SZ 的数据\n", + "成功获取 000917.SZ 的数据\n", + "成功获取 000919.SZ 的数据\n", + "成功获取 000920.SZ 的数据\n", + "成功获取 000921.SZ 的数据\n", + "成功获取 000922.SZ 的数据\n", + "成功获取 000923.SZ 的数据\n", + "成功获取 000925.SZ 的数据\n", + "成功获取 000926.SZ 的数据\n", + "成功获取 000927.SZ 的数据\n", + "成功获取 000928.SZ 的数据\n", + "成功获取 000929.SZ 的数据\n", + "成功获取 000930.SZ 的数据\n", + "成功获取 000931.SZ 的数据\n", + "成功获取 000932.SZ 的数据\n", + "成功获取 000933.SZ 的数据\n", + "成功获取 000935.SZ 的数据\n", + "成功获取 000936.SZ 的数据\n", + "成功获取 000937.SZ 的数据\n", + "成功获取 000938.SZ 的数据\n", + "成功获取 000948.SZ 的数据\n", + "成功获取 000949.SZ 的数据\n", + "成功获取 000950.SZ 的数据\n", + "成功获取 000951.SZ 的数据\n", + "成功获取 000952.SZ 的数据\n", + "成功获取 000953.SZ 的数据\n", + "成功获取 000955.SZ 的数据\n", + "成功获取 000957.SZ 的数据\n", + "成功获取 000958.SZ 的数据\n", + "成功获取 000959.SZ 的数据\n", + "成功获取 000960.SZ 的数据\n", + "成功获取 000962.SZ 的数据\n", + "成功获取 000963.SZ 的数据\n", + "成功获取 000965.SZ 的数据\n", + "成功获取 000966.SZ 的数据\n", + "成功获取 000967.SZ 的数据\n", + "成功获取 000968.SZ 的数据\n", + "成功获取 000969.SZ 的数据\n", + "成功获取 000970.SZ 的数据\n", + "成功获取 000972.SZ 的数据\n", + "成功获取 000973.SZ 的数据\n", + "成功获取 000975.SZ 的数据\n", + "成功获取 000977.SZ 的数据\n", + "成功获取 000978.SZ 的数据\n", + "成功获取 000980.SZ 的数据\n", + "成功获取 000981.SZ 的数据\n", + "成功获取 000983.SZ 的数据\n", + "成功获取 000985.SZ 的数据\n", + "成功获取 000987.SZ 的数据\n", + "成功获取 000988.SZ 的数据\n", + "成功获取 000989.SZ 的数据\n", + "成功获取 000990.SZ 的数据\n", + "成功获取 000993.SZ 的数据\n", + "成功获取 000995.SZ 的数据\n", + "成功获取 000997.SZ 的数据\n", + "成功获取 000998.SZ 的数据\n", + "成功获取 000999.SZ 的数据\n", + "成功获取 001201.SZ 的数据\n", + "成功获取 001202.SZ 的数据\n", + "成功获取 001203.SZ 的数据\n", + "成功获取 001205.SZ 的数据\n", + "成功获取 001206.SZ 的数据\n", + "成功获取 001207.SZ 的数据\n", + "成功获取 001208.SZ 的数据\n", + "成功获取 001209.SZ 的数据\n", + "成功获取 001210.SZ 的数据\n", + "成功获取 001211.SZ 的数据\n", + "成功获取 001212.SZ 的数据\n", + "成功获取 001213.SZ 的数据\n", + "成功获取 001215.SZ 的数据\n", + "成功获取 001216.SZ 的数据\n", + "成功获取 001217.SZ 的数据\n", + "成功获取 001218.SZ 的数据\n", + "成功获取 001219.SZ 的数据\n", + "成功获取 001222.SZ 的数据\n", + "成功获取 001223.SZ 的数据\n", + "成功获取 001225.SZ 的数据\n", + "成功获取 001226.SZ 的数据\n", + "成功获取 001227.SZ 的数据\n", + "成功获取 001228.SZ 的数据\n", + "成功获取 001229.SZ 的数据\n", + "成功获取 001230.SZ 的数据\n", + "成功获取 001231.SZ 的数据\n", + "成功获取 001234.SZ 的数据\n", + "成功获取 001236.SZ 的数据\n", + "成功获取 001238.SZ 的数据\n", + "成功获取 001239.SZ 的数据\n", + "成功获取 001255.SZ 的数据\n", + "成功获取 001256.SZ 的数据\n", + "成功获取 001258.SZ 的数据\n", + "成功获取 001259.SZ 的数据\n", + "成功获取 001260.SZ 的数据\n", + "成功获取 001266.SZ 的数据\n", + "成功获取 001267.SZ 的数据\n", + "成功获取 001268.SZ 的数据\n", + "成功获取 001269.SZ 的数据\n", + "成功获取 001270.SZ 的数据\n", + "成功获取 001277.SZ 的数据\n", + "成功获取 001278.SZ 的数据\n", + "成功获取 001279.SZ 的数据\n", + "成功获取 001282.SZ 的数据\n", + "成功获取 001283.SZ 的数据\n", + "成功获取 001286.SZ 的数据\n", + "成功获取 001287.SZ 的数据\n", + "成功获取 001288.SZ 的数据\n", + "成功获取 001289.SZ 的数据\n", + "成功获取 001296.SZ 的数据\n", + "成功获取 001298.SZ 的数据\n", + "成功获取 001299.SZ 的数据\n", + "成功获取 001300.SZ 的数据\n", + "成功获取 001301.SZ 的数据\n", + "成功获取 001306.SZ 的数据\n", + "成功获取 001308.SZ 的数据\n", + "成功获取 001309.SZ 的数据\n", + "成功获取 001311.SZ 的数据\n", + "成功获取 001313.SZ 的数据\n", + "成功获取 001314.SZ 的数据\n", + "成功获取 001316.SZ 的数据\n", + "成功获取 001317.SZ 的数据\n", + "成功获取 001318.SZ 的数据\n", + "成功获取 001319.SZ 的数据\n", + "成功获取 001322.SZ 的数据\n", + "成功获取 001323.SZ 的数据\n", + "成功获取 001324.SZ 的数据\n", + "成功获取 001326.SZ 的数据\n", + "成功获取 001328.SZ 的数据\n", + "成功获取 001330.SZ 的数据\n", + "成功获取 001331.SZ 的数据\n", + "成功获取 001332.SZ 的数据\n", + "成功获取 001333.SZ 的数据\n", + "成功获取 001336.SZ 的数据\n", + "成功获取 001337.SZ 的数据\n", + "成功获取 001338.SZ 的数据\n", + "成功获取 001339.SZ 的数据\n", + "成功获取 001356.SZ 的数据\n", + "成功获取 001358.SZ 的数据\n", + "成功获取 001359.SZ 的数据\n", + "成功获取 001360.SZ 的数据\n", + "成功获取 001366.SZ 的数据\n", + "成功获取 001367.SZ 的数据\n", + "成功获取 001368.SZ 的数据\n", + "成功获取 001373.SZ 的数据\n", + "成功获取 001376.SZ 的数据\n", + "成功获取 001378.SZ 的数据\n", + "成功获取 001379.SZ 的数据\n", + "成功获取 001380.SZ 的数据\n", + "成功获取 001387.SZ 的数据\n", + "成功获取 001389.SZ 的数据\n", + "成功获取 001391.SZ 的数据\n", + "成功获取 001395.SZ 的数据\n", + "成功获取 001696.SZ 的数据\n", + "成功获取 001872.SZ 的数据\n", + "成功获取 001896.SZ 的数据\n", + "成功获取 001914.SZ 的数据\n", + "成功获取 001965.SZ 的数据\n", + "成功获取 001979.SZ 的数据\n", + "成功获取 002001.SZ 的数据\n", + "成功获取 002003.SZ 的数据\n", + "成功获取 002004.SZ 的数据\n", + "成功获取 002005.SZ 的数据\n", + "成功获取 002006.SZ 的数据\n", + "成功获取 002007.SZ 的数据\n", + "成功获取 002008.SZ 的数据\n", + "成功获取 002009.SZ 的数据\n", + "成功获取 002010.SZ 的数据\n", + "成功获取 002011.SZ 的数据\n", + "成功获取 002012.SZ 的数据\n", + "成功获取 002014.SZ 的数据\n", + "成功获取 002015.SZ 的数据\n", + "成功获取 002016.SZ 的数据\n", + "成功获取 002017.SZ 的数据\n", + "成功获取 002019.SZ 的数据\n", + "成功获取 002020.SZ 的数据\n", + "成功获取 002021.SZ 的数据\n", + "成功获取 002022.SZ 的数据\n", + "成功获取 002023.SZ 的数据\n", + "成功获取 002024.SZ 的数据\n", + "成功获取 002025.SZ 的数据\n", + "成功获取 002026.SZ 的数据\n", + "成功获取 002027.SZ 的数据\n", + "成功获取 002028.SZ 的数据\n", + "成功获取 002029.SZ 的数据\n", + "成功获取 002030.SZ 的数据\n", + "成功获取 002031.SZ 的数据\n", + "成功获取 002032.SZ 的数据\n", + "成功获取 002033.SZ 的数据\n", + "成功获取 002034.SZ 的数据\n", + "成功获取 002035.SZ 的数据\n", + "成功获取 002036.SZ 的数据\n", + "成功获取 002037.SZ 的数据\n", + "成功获取 002038.SZ 的数据\n", + "成功获取 002039.SZ 的数据\n", + "成功获取 002040.SZ 的数据\n", + "成功获取 002041.SZ 的数据\n", + "成功获取 002042.SZ 的数据\n", + "成功获取 002043.SZ 的数据\n", + "成功获取 002044.SZ 的数据\n", + "成功获取 002045.SZ 的数据\n", + "成功获取 002046.SZ 的数据\n", + "成功获取 002047.SZ 的数据\n", + "成功获取 002048.SZ 的数据\n", + "成功获取 002049.SZ 的数据\n", + "成功获取 002050.SZ 的数据\n", + "成功获取 002051.SZ 的数据\n", + "成功获取 002052.SZ 的数据\n", + "成功获取 002053.SZ 的数据\n", + "成功获取 002054.SZ 的数据\n", + "成功获取 002055.SZ 的数据\n", + "成功获取 002056.SZ 的数据\n", + "成功获取 002057.SZ 的数据\n", + "成功获取 002058.SZ 的数据\n", + "成功获取 002059.SZ 的数据\n", + "成功获取 002060.SZ 的数据\n", + "成功获取 002061.SZ 的数据\n", + "成功获取 002062.SZ 的数据\n", + "成功获取 002063.SZ 的数据\n", + "成功获取 002064.SZ 的数据\n", + "成功获取 002065.SZ 的数据\n", + "成功获取 002066.SZ 的数据\n", + "成功获取 002067.SZ 的数据\n", + "成功获取 002068.SZ 的数据\n", + "成功获取 002069.SZ 的数据\n", + "成功获取 002072.SZ 的数据\n", + "成功获取 002073.SZ 的数据\n", + "成功获取 002074.SZ 的数据\n", + "成功获取 002075.SZ 的数据\n", + "成功获取 002076.SZ 的数据\n", + "成功获取 002077.SZ 的数据\n", + "成功获取 002078.SZ 的数据\n", + "成功获取 002079.SZ 的数据\n", + "成功获取 002080.SZ 的数据\n", + "成功获取 002081.SZ 的数据\n", + "成功获取 002082.SZ 的数据\n", + "成功获取 002083.SZ 的数据\n", + "成功获取 002084.SZ 的数据\n", + "成功获取 002085.SZ 的数据\n", + "成功获取 002086.SZ 的数据\n", + "成功获取 002088.SZ 的数据\n", + "已调用300次API,等待 22.72 秒以满足速率限制...\n", + "成功获取 002090.SZ 的数据\n", + "成功获取 002091.SZ 的数据\n", + "成功获取 002092.SZ 的数据\n", + "成功获取 002093.SZ 的数据\n", + "成功获取 002094.SZ 的数据\n", + "成功获取 002095.SZ 的数据\n", + "成功获取 002096.SZ 的数据\n", + "成功获取 002097.SZ 的数据\n", + "成功获取 002098.SZ 的数据\n", + "成功获取 002099.SZ 的数据\n", + "成功获取 002100.SZ 的数据\n", + "成功获取 002101.SZ 的数据\n", + "成功获取 002102.SZ 的数据\n", + "成功获取 002103.SZ 的数据\n", + "成功获取 002104.SZ 的数据\n", + "成功获取 002105.SZ 的数据\n", + "成功获取 002106.SZ 的数据\n", + "成功获取 002107.SZ 的数据\n", + "成功获取 002108.SZ 的数据\n", + "成功获取 002109.SZ 的数据\n", + "成功获取 002110.SZ 的数据\n", + "成功获取 002111.SZ 的数据\n", + "成功获取 002112.SZ 的数据\n", + "成功获取 002114.SZ 的数据\n", + "成功获取 002115.SZ 的数据\n", + "成功获取 002116.SZ 的数据\n", + "成功获取 002117.SZ 的数据\n", + "成功获取 002119.SZ 的数据\n", + "成功获取 002120.SZ 的数据\n", + "成功获取 002121.SZ 的数据\n", + "成功获取 002122.SZ 的数据\n", + "成功获取 002123.SZ 的数据\n", + "成功获取 002124.SZ 的数据\n", + "成功获取 002125.SZ 的数据\n", + "成功获取 002126.SZ 的数据\n", + "成功获取 002127.SZ 的数据\n", + "成功获取 002128.SZ 的数据\n", + "成功获取 002129.SZ 的数据\n", + "成功获取 002130.SZ 的数据\n", + "成功获取 002131.SZ 的数据\n", + "成功获取 002132.SZ 的数据\n", + "成功获取 002133.SZ 的数据\n", + "成功获取 002134.SZ 的数据\n", + "成功获取 002135.SZ 的数据\n", + "成功获取 002136.SZ 的数据\n", + "成功获取 002137.SZ 的数据\n", + "成功获取 002138.SZ 的数据\n", + "成功获取 002139.SZ 的数据\n", + "成功获取 002140.SZ 的数据\n", + "成功获取 002141.SZ 的数据\n", + "成功获取 002142.SZ 的数据\n", + "成功获取 002144.SZ 的数据\n", + "成功获取 002145.SZ 的数据\n", + "成功获取 002146.SZ 的数据\n", + "成功获取 002148.SZ 的数据\n", + "成功获取 002149.SZ 的数据\n", + "成功获取 002150.SZ 的数据\n", + "成功获取 002151.SZ 的数据\n", + "成功获取 002152.SZ 的数据\n", + "成功获取 002153.SZ 的数据\n", + "成功获取 002154.SZ 的数据\n", + "成功获取 002155.SZ 的数据\n", + "成功获取 002156.SZ 的数据\n", + "成功获取 002157.SZ 的数据\n", + "成功获取 002158.SZ 的数据\n", + "成功获取 002159.SZ 的数据\n", + "成功获取 002160.SZ 的数据\n", + "成功获取 002161.SZ 的数据\n", + "成功获取 002162.SZ 的数据\n", + "成功获取 002163.SZ 的数据\n", + "成功获取 002164.SZ 的数据\n", + "成功获取 002165.SZ 的数据\n", + "成功获取 002166.SZ 的数据\n", + "成功获取 002167.SZ 的数据\n", + "成功获取 002168.SZ 的数据\n", + "成功获取 002169.SZ 的数据\n", + "成功获取 002170.SZ 的数据\n", + "成功获取 002171.SZ 的数据\n", + "成功获取 002172.SZ 的数据\n", + "成功获取 002173.SZ 的数据\n", + "成功获取 002174.SZ 的数据\n", + "成功获取 002175.SZ 的数据\n", + "成功获取 002176.SZ 的数据\n", + "成功获取 002177.SZ 的数据\n", + "成功获取 002178.SZ 的数据\n", + "成功获取 002179.SZ 的数据\n", + "成功获取 002180.SZ 的数据\n", + "成功获取 002181.SZ 的数据\n", + "成功获取 002182.SZ 的数据\n", + "成功获取 002183.SZ 的数据\n", + "成功获取 002184.SZ 的数据\n", + "成功获取 002185.SZ 的数据\n", + "成功获取 002186.SZ 的数据\n", + "成功获取 002187.SZ 的数据\n", + "成功获取 002188.SZ 的数据\n", + "成功获取 002189.SZ 的数据\n", + "成功获取 002190.SZ 的数据\n", + "成功获取 002191.SZ 的数据\n", + "成功获取 002192.SZ 的数据\n", + "成功获取 002193.SZ 的数据\n", + "成功获取 002194.SZ 的数据\n", + "成功获取 002195.SZ 的数据\n", + "成功获取 002196.SZ 的数据\n", + "成功获取 002197.SZ 的数据\n", + "成功获取 002198.SZ 的数据\n", + "成功获取 002199.SZ 的数据\n", + "成功获取 002200.SZ 的数据\n", + "成功获取 002201.SZ 的数据\n", + "成功获取 002202.SZ 的数据\n", + "成功获取 002203.SZ 的数据\n", + "成功获取 002204.SZ 的数据\n", + "成功获取 002205.SZ 的数据\n", + "成功获取 002206.SZ 的数据\n", + "成功获取 002207.SZ 的数据\n", + "成功获取 002208.SZ 的数据\n", + "成功获取 002209.SZ 的数据\n", + "成功获取 002210.SZ 的数据\n", + "成功获取 002211.SZ 的数据\n", + "成功获取 002212.SZ 的数据\n", + "成功获取 002213.SZ 的数据\n", + "成功获取 002214.SZ 的数据\n", + "成功获取 002215.SZ 的数据\n", + "成功获取 002216.SZ 的数据\n", + "成功获取 002217.SZ 的数据\n", + "成功获取 002218.SZ 的数据\n", + "成功获取 002219.SZ 的数据\n", + "成功获取 002221.SZ 的数据\n", + "成功获取 002222.SZ 的数据\n", + "成功获取 002223.SZ 的数据\n", + "成功获取 002224.SZ 的数据\n", + "成功获取 002225.SZ 的数据\n", + "成功获取 002226.SZ 的数据\n", + "成功获取 002227.SZ 的数据\n", + "成功获取 002228.SZ 的数据\n", + "成功获取 002229.SZ 的数据\n", + "成功获取 002230.SZ 的数据\n", + "成功获取 002231.SZ 的数据\n", + "成功获取 002232.SZ 的数据\n", + "成功获取 002233.SZ 的数据\n", + "成功获取 002234.SZ 的数据\n", + "成功获取 002235.SZ 的数据\n", + "成功获取 002236.SZ 的数据\n", + "成功获取 002237.SZ 的数据\n", + "成功获取 002238.SZ 的数据\n", + "成功获取 002239.SZ 的数据\n", + "成功获取 002240.SZ 的数据\n", + "成功获取 002241.SZ 的数据\n", + "成功获取 002242.SZ 的数据\n", + "成功获取 002243.SZ 的数据\n", + "成功获取 002244.SZ 的数据\n", + "成功获取 002245.SZ 的数据\n", + "成功获取 002246.SZ 的数据\n", + "成功获取 002247.SZ 的数据\n", + "成功获取 002248.SZ 的数据\n", + "成功获取 002249.SZ 的数据\n", + "成功获取 002250.SZ 的数据\n", + "成功获取 002251.SZ 的数据\n", + "成功获取 002252.SZ 的数据\n", + "成功获取 002253.SZ 的数据\n", + "成功获取 002254.SZ 的数据\n", + "成功获取 002255.SZ 的数据\n", + "成功获取 002256.SZ 的数据\n", + "成功获取 002258.SZ 的数据\n", + "成功获取 002259.SZ 的数据\n", + "成功获取 002261.SZ 的数据\n", + "成功获取 002262.SZ 的数据\n", + "成功获取 002263.SZ 的数据\n", + "成功获取 002264.SZ 的数据\n", + "成功获取 002265.SZ 的数据\n", + "成功获取 002266.SZ 的数据\n", + "成功获取 002267.SZ 的数据\n", + "成功获取 002268.SZ 的数据\n", + "成功获取 002269.SZ 的数据\n", + "成功获取 002270.SZ 的数据\n", + "成功获取 002271.SZ 的数据\n", + "成功获取 002272.SZ 的数据\n", + "成功获取 002273.SZ 的数据\n", + "成功获取 002274.SZ 的数据\n", + "成功获取 002275.SZ 的数据\n", + "成功获取 002276.SZ 的数据\n", + "成功获取 002277.SZ 的数据\n", + "成功获取 002278.SZ 的数据\n", + "成功获取 002279.SZ 的数据\n", + "成功获取 002281.SZ 的数据\n", + "成功获取 002282.SZ 的数据\n", + "成功获取 002283.SZ 的数据\n", + "成功获取 002284.SZ 的数据\n", + "成功获取 002285.SZ 的数据\n", + "成功获取 002286.SZ 的数据\n", + "成功获取 002287.SZ 的数据\n", + "成功获取 002289.SZ 的数据\n", + "成功获取 002290.SZ 的数据\n", + "成功获取 002291.SZ 的数据\n", + "成功获取 002292.SZ 的数据\n", + "成功获取 002293.SZ 的数据\n", + "成功获取 002294.SZ 的数据\n", + "成功获取 002295.SZ 的数据\n", + "成功获取 002296.SZ 的数据\n", + "成功获取 002297.SZ 的数据\n", + "成功获取 002298.SZ 的数据\n", + "成功获取 002299.SZ 的数据\n", + "成功获取 002300.SZ 的数据\n", + "成功获取 002301.SZ 的数据\n", + "成功获取 002302.SZ 的数据\n", + "成功获取 002303.SZ 的数据\n", + "成功获取 002304.SZ 的数据\n", + "成功获取 002305.SZ 的数据\n", + "成功获取 002306.SZ 的数据\n", + "成功获取 002307.SZ 的数据\n", + "成功获取 002309.SZ 的数据\n", + "成功获取 002310.SZ 的数据\n", + "成功获取 002311.SZ 的数据\n", + "成功获取 002312.SZ 的数据\n", + "成功获取 002313.SZ 的数据\n", + "成功获取 002314.SZ 的数据\n", + "成功获取 002315.SZ 的数据\n", + "成功获取 002316.SZ 的数据\n", + "成功获取 002317.SZ 的数据\n", + "成功获取 002318.SZ 的数据\n", + "成功获取 002319.SZ 的数据\n", + "成功获取 002320.SZ 的数据\n", + "成功获取 002321.SZ 的数据\n", + "成功获取 002322.SZ 的数据\n", + "成功获取 002323.SZ 的数据\n", + "成功获取 002324.SZ 的数据\n", + "成功获取 002326.SZ 的数据\n", + "成功获取 002327.SZ 的数据\n", + "成功获取 002328.SZ 的数据\n", + "成功获取 002329.SZ 的数据\n", + "成功获取 002330.SZ 的数据\n", + "成功获取 002331.SZ 的数据\n", + "成功获取 002332.SZ 的数据\n", + "成功获取 002333.SZ 的数据\n", + "成功获取 002334.SZ 的数据\n", + "成功获取 002335.SZ 的数据\n", + "成功获取 002336.SZ 的数据\n", + "成功获取 002337.SZ 的数据\n", + "成功获取 002338.SZ 的数据\n", + "成功获取 002339.SZ 的数据\n", + "成功获取 002340.SZ 的数据\n", + "成功获取 002342.SZ 的数据\n", + "成功获取 002343.SZ 的数据\n", + "成功获取 002344.SZ 的数据\n", + "成功获取 002345.SZ 的数据\n", + "成功获取 002346.SZ 的数据\n", + "成功获取 002347.SZ 的数据\n", + "成功获取 002348.SZ 的数据\n", + "成功获取 002349.SZ 的数据\n", + "成功获取 002350.SZ 的数据\n", + "成功获取 002351.SZ 的数据\n", + "成功获取 002352.SZ 的数据\n", + "成功获取 002353.SZ 的数据\n", + "成功获取 002354.SZ 的数据\n", + "成功获取 002355.SZ 的数据\n", + "成功获取 002356.SZ 的数据\n", + "成功获取 002357.SZ 的数据\n", + "成功获取 002358.SZ 的数据\n", + "成功获取 002360.SZ 的数据\n", + "成功获取 002361.SZ 的数据\n", + "成功获取 002362.SZ 的数据\n", + "成功获取 002363.SZ 的数据\n", + "成功获取 002364.SZ 的数据\n", + "成功获取 002365.SZ 的数据\n", + "成功获取 002366.SZ 的数据\n", + "成功获取 002367.SZ 的数据\n", + "成功获取 002368.SZ 的数据\n", + "成功获取 002369.SZ 的数据\n", + "成功获取 002370.SZ 的数据\n", + "成功获取 002371.SZ 的数据\n", + "成功获取 002372.SZ 的数据\n", + "成功获取 002373.SZ 的数据\n", + "成功获取 002374.SZ 的数据\n", + "成功获取 002375.SZ 的数据\n", + "成功获取 002376.SZ 的数据\n", + "成功获取 002377.SZ 的数据\n", + "成功获取 002378.SZ 的数据\n", + "成功获取 002379.SZ 的数据\n", + "成功获取 002380.SZ 的数据\n", + "成功获取 002381.SZ 的数据\n", + "成功获取 002382.SZ 的数据\n", + "成功获取 002383.SZ 的数据\n", + "成功获取 002384.SZ 的数据\n", + "成功获取 002385.SZ 的数据\n", + "成功获取 002386.SZ 的数据\n", + "成功获取 002387.SZ 的数据\n", + "成功获取 002388.SZ 的数据\n", + "成功获取 002389.SZ 的数据\n", + "成功获取 002390.SZ 的数据\n", + "成功获取 002391.SZ 的数据\n", + "成功获取 002392.SZ 的数据\n", + "成功获取 002393.SZ 的数据\n", + "成功获取 002394.SZ 的数据\n", + "成功获取 002395.SZ 的数据\n", + "成功获取 002396.SZ 的数据\n", + "成功获取 002397.SZ 的数据\n", + "成功获取 002398.SZ 的数据\n", + "成功获取 002399.SZ 的数据\n", + "成功获取 002400.SZ 的数据\n", + "成功获取 002401.SZ 的数据\n", + "成功获取 002402.SZ 的数据\n", + "已调用300次API,等待 19.75 秒以满足速率限制...\n", + "成功获取 002403.SZ 的数据\n", + "成功获取 002404.SZ 的数据\n", + "成功获取 002405.SZ 的数据\n", + "成功获取 002406.SZ 的数据\n", + "成功获取 002407.SZ 的数据\n", + "成功获取 002408.SZ 的数据\n", + "成功获取 002409.SZ 的数据\n", + "成功获取 002410.SZ 的数据\n", + "成功获取 002412.SZ 的数据\n", + "成功获取 002413.SZ 的数据\n", + "成功获取 002414.SZ 的数据\n", + "成功获取 002415.SZ 的数据\n", + "成功获取 002416.SZ 的数据\n", + "成功获取 002418.SZ 的数据\n", + "成功获取 002419.SZ 的数据\n", + "成功获取 002420.SZ 的数据\n", + "成功获取 002421.SZ 的数据\n", + "成功获取 002422.SZ 的数据\n", + "成功获取 002423.SZ 的数据\n", + "成功获取 002424.SZ 的数据\n", + "成功获取 002425.SZ 的数据\n", + "成功获取 002426.SZ 的数据\n", + "成功获取 002427.SZ 的数据\n", + "成功获取 002428.SZ 的数据\n", + "成功获取 002429.SZ 的数据\n", + "成功获取 002430.SZ 的数据\n", + "成功获取 002431.SZ 的数据\n", + "成功获取 002432.SZ 的数据\n", + "成功获取 002434.SZ 的数据\n", + "成功获取 002436.SZ 的数据\n", + "成功获取 002437.SZ 的数据\n", + "成功获取 002438.SZ 的数据\n", + "成功获取 002439.SZ 的数据\n", + "成功获取 002440.SZ 的数据\n", + "成功获取 002441.SZ 的数据\n", + "成功获取 002442.SZ 的数据\n", + "成功获取 002443.SZ 的数据\n", + "成功获取 002444.SZ 的数据\n", + "成功获取 002445.SZ 的数据\n", + "成功获取 002446.SZ 的数据\n", + "成功获取 002448.SZ 的数据\n", + "成功获取 002449.SZ 的数据\n", + "成功获取 002451.SZ 的数据\n", + "成功获取 002452.SZ 的数据\n", + "成功获取 002453.SZ 的数据\n", + "成功获取 002454.SZ 的数据\n", + "成功获取 002455.SZ 的数据\n", + "成功获取 002456.SZ 的数据\n", + "成功获取 002457.SZ 的数据\n", + "成功获取 002458.SZ 的数据\n", + "成功获取 002459.SZ 的数据\n", + "成功获取 002460.SZ 的数据\n", + "成功获取 002461.SZ 的数据\n", + "成功获取 002462.SZ 的数据\n", + "成功获取 002463.SZ 的数据\n", + "成功获取 002465.SZ 的数据\n", + "成功获取 002466.SZ 的数据\n", + "成功获取 002467.SZ 的数据\n", + "成功获取 002468.SZ 的数据\n", + "成功获取 002469.SZ 的数据\n", + "成功获取 002470.SZ 的数据\n", + "成功获取 002471.SZ 的数据\n", + "成功获取 002472.SZ 的数据\n", + "成功获取 002474.SZ 的数据\n", + "成功获取 002475.SZ 的数据\n", + "成功获取 002476.SZ 的数据\n", + "成功获取 002478.SZ 的数据\n", + "成功获取 002479.SZ 的数据\n", + "成功获取 002480.SZ 的数据\n", + "成功获取 002481.SZ 的数据\n", + "成功获取 002482.SZ 的数据\n", + "成功获取 002483.SZ 的数据\n", + "成功获取 002484.SZ 的数据\n", + "成功获取 002485.SZ 的数据\n", + "成功获取 002486.SZ 的数据\n", + "成功获取 002487.SZ 的数据\n", + "成功获取 002488.SZ 的数据\n", + "成功获取 002489.SZ 的数据\n", + "成功获取 002490.SZ 的数据\n", + "成功获取 002491.SZ 的数据\n", + "成功获取 002492.SZ 的数据\n", + "成功获取 002493.SZ 的数据\n", + "成功获取 002494.SZ 的数据\n", + "成功获取 002495.SZ 的数据\n", + "成功获取 002496.SZ 的数据\n", + "成功获取 002497.SZ 的数据\n", + "成功获取 002498.SZ 的数据\n", + "成功获取 002500.SZ 的数据\n", + "成功获取 002501.SZ 的数据\n", + "成功获取 002506.SZ 的数据\n", + "成功获取 002507.SZ 的数据\n", + "成功获取 002508.SZ 的数据\n", + "成功获取 002510.SZ 的数据\n", + "成功获取 002511.SZ 的数据\n", + "成功获取 002512.SZ 的数据\n", + "成功获取 002513.SZ 的数据\n", + "成功获取 002514.SZ 的数据\n", + "成功获取 002515.SZ 的数据\n", + "成功获取 002516.SZ 的数据\n", + "成功获取 002517.SZ 的数据\n", + "成功获取 002518.SZ 的数据\n", + "成功获取 002519.SZ 的数据\n", + "成功获取 002520.SZ 的数据\n", + "成功获取 002521.SZ 的数据\n", + "成功获取 002522.SZ 的数据\n", + "成功获取 002523.SZ 的数据\n", + "成功获取 002524.SZ 的数据\n", + "成功获取 002526.SZ 的数据\n", + "成功获取 002527.SZ 的数据\n", + "成功获取 002528.SZ 的数据\n", + "成功获取 002529.SZ 的数据\n", + "成功获取 002530.SZ 的数据\n", + "成功获取 002531.SZ 的数据\n", + "成功获取 002532.SZ 的数据\n", + "成功获取 002533.SZ 的数据\n", + "成功获取 002534.SZ 的数据\n", + "成功获取 002535.SZ 的数据\n", + "成功获取 002536.SZ 的数据\n", + "成功获取 002537.SZ 的数据\n", + "成功获取 002538.SZ 的数据\n", + "成功获取 002539.SZ 的数据\n", + "成功获取 002540.SZ 的数据\n", + "成功获取 002541.SZ 的数据\n", + "成功获取 002542.SZ 的数据\n", + "成功获取 002543.SZ 的数据\n", + "成功获取 002544.SZ 的数据\n", + "成功获取 002545.SZ 的数据\n", + "成功获取 002546.SZ 的数据\n", + "成功获取 002547.SZ 的数据\n", + "成功获取 002548.SZ 的数据\n", + "成功获取 002549.SZ 的数据\n", + "成功获取 002550.SZ 的数据\n", + "成功获取 002551.SZ 的数据\n", + "成功获取 002552.SZ 的数据\n", + "成功获取 002553.SZ 的数据\n", + "成功获取 002554.SZ 的数据\n", + "成功获取 002555.SZ 的数据\n", + "成功获取 002556.SZ 的数据\n", + "成功获取 002557.SZ 的数据\n", + "成功获取 002558.SZ 的数据\n", + "成功获取 002559.SZ 的数据\n", + "成功获取 002560.SZ 的数据\n", + "成功获取 002561.SZ 的数据\n", + "成功获取 002562.SZ 的数据\n", + "成功获取 002563.SZ 的数据\n", + "成功获取 002564.SZ 的数据\n", + "成功获取 002565.SZ 的数据\n", + "成功获取 002566.SZ 的数据\n", + "成功获取 002567.SZ 的数据\n", + "成功获取 002568.SZ 的数据\n", + "成功获取 002569.SZ 的数据\n", + "成功获取 002570.SZ 的数据\n", + "成功获取 002571.SZ 的数据\n", + "成功获取 002572.SZ 的数据\n", + "成功获取 002573.SZ 的数据\n", + "成功获取 002574.SZ 的数据\n", + "成功获取 002575.SZ 的数据\n", + "成功获取 002576.SZ 的数据\n", + "成功获取 002577.SZ 的数据\n", + "成功获取 002578.SZ 的数据\n", + "成功获取 002579.SZ 的数据\n", + "成功获取 002580.SZ 的数据\n", + "成功获取 002581.SZ 的数据\n", + "成功获取 002582.SZ 的数据\n", + "成功获取 002583.SZ 的数据\n", + "成功获取 002584.SZ 的数据\n", + "成功获取 002585.SZ 的数据\n", + "成功获取 002586.SZ 的数据\n", + "成功获取 002587.SZ 的数据\n", + "成功获取 002588.SZ 的数据\n", + "成功获取 002589.SZ 的数据\n", + "成功获取 002590.SZ 的数据\n", + "成功获取 002591.SZ 的数据\n", + "成功获取 002592.SZ 的数据\n", + "成功获取 002593.SZ 的数据\n", + "成功获取 002594.SZ 的数据\n", + "成功获取 002595.SZ 的数据\n", + "成功获取 002596.SZ 的数据\n", + "成功获取 002597.SZ 的数据\n", + "成功获取 002598.SZ 的数据\n", + "成功获取 002599.SZ 的数据\n", + "成功获取 002600.SZ 的数据\n", + "成功获取 002601.SZ 的数据\n", + "成功获取 002602.SZ 的数据\n", + "成功获取 002603.SZ 的数据\n", + "成功获取 002605.SZ 的数据\n", + "成功获取 002606.SZ 的数据\n", + "成功获取 002607.SZ 的数据\n", + "成功获取 002608.SZ 的数据\n", + "成功获取 002609.SZ 的数据\n", + "成功获取 002611.SZ 的数据\n", + "成功获取 002612.SZ 的数据\n", + "成功获取 002613.SZ 的数据\n", + "成功获取 002614.SZ 的数据\n", + "成功获取 002615.SZ 的数据\n", + "成功获取 002616.SZ 的数据\n", + "成功获取 002617.SZ 的数据\n", + "成功获取 002620.SZ 的数据\n", + "成功获取 002622.SZ 的数据\n", + "成功获取 002623.SZ 的数据\n", + "成功获取 002624.SZ 的数据\n", + "成功获取 002625.SZ 的数据\n", + "成功获取 002626.SZ 的数据\n", + "成功获取 002627.SZ 的数据\n", + "成功获取 002628.SZ 的数据\n", + "成功获取 002629.SZ 的数据\n", + "成功获取 002630.SZ 的数据\n", + "成功获取 002631.SZ 的数据\n", + "成功获取 002632.SZ 的数据\n", + "成功获取 002633.SZ 的数据\n", + "成功获取 002634.SZ 的数据\n", + "成功获取 002635.SZ 的数据\n", + "成功获取 002636.SZ 的数据\n", + "成功获取 002637.SZ 的数据\n", + "成功获取 002638.SZ 的数据\n", + "成功获取 002639.SZ 的数据\n", + "成功获取 002640.SZ 的数据\n", + "成功获取 002641.SZ 的数据\n", + "成功获取 002642.SZ 的数据\n", + "成功获取 002643.SZ 的数据\n", + "成功获取 002644.SZ 的数据\n", + "成功获取 002645.SZ 的数据\n", + "成功获取 002646.SZ 的数据\n", + "成功获取 002647.SZ 的数据\n", + "成功获取 002648.SZ 的数据\n", + "成功获取 002649.SZ 的数据\n", + "成功获取 002650.SZ 的数据\n", + "成功获取 002651.SZ 的数据\n", + "成功获取 002652.SZ 的数据\n", + "成功获取 002653.SZ 的数据\n", + "成功获取 002654.SZ 的数据\n", + "成功获取 002655.SZ 的数据\n", + "成功获取 002656.SZ 的数据\n", + "成功获取 002657.SZ 的数据\n", + "成功获取 002658.SZ 的数据\n", + "成功获取 002659.SZ 的数据\n", + "成功获取 002660.SZ 的数据\n", + "成功获取 002661.SZ 的数据\n", + "成功获取 002662.SZ 的数据\n", + "成功获取 002663.SZ 的数据\n", + "成功获取 002664.SZ 的数据\n", + "成功获取 002666.SZ 的数据\n", + "成功获取 002667.SZ 的数据\n", + "成功获取 002668.SZ 的数据\n", + "成功获取 002669.SZ 的数据\n", + "成功获取 002670.SZ 的数据\n", + "成功获取 002671.SZ 的数据\n", + "成功获取 002672.SZ 的数据\n", + "成功获取 002673.SZ 的数据\n", + "成功获取 002674.SZ 的数据\n", + "成功获取 002675.SZ 的数据\n", + "成功获取 002676.SZ 的数据\n", + "成功获取 002677.SZ 的数据\n", + "成功获取 002678.SZ 的数据\n", + "成功获取 002679.SZ 的数据\n", + "成功获取 002681.SZ 的数据\n", + "成功获取 002682.SZ 的数据\n", + "成功获取 002683.SZ 的数据\n", + "成功获取 002685.SZ 的数据\n", + "成功获取 002686.SZ 的数据\n", + "成功获取 002687.SZ 的数据\n", + "成功获取 002688.SZ 的数据\n", + "成功获取 002689.SZ 的数据\n", + "成功获取 002690.SZ 的数据\n", + "成功获取 002691.SZ 的数据\n", + "成功获取 002692.SZ 的数据\n", + "成功获取 002693.SZ 的数据\n", + "成功获取 002694.SZ 的数据\n", + "成功获取 002695.SZ 的数据\n", + "成功获取 002696.SZ 的数据\n", + "成功获取 002697.SZ 的数据\n", + "成功获取 002698.SZ 的数据\n", + "成功获取 002700.SZ 的数据\n", + "成功获取 002701.SZ 的数据\n", + "成功获取 002702.SZ 的数据\n", + "成功获取 002703.SZ 的数据\n", + "成功获取 002705.SZ 的数据\n", + "成功获取 002706.SZ 的数据\n", + "成功获取 002707.SZ 的数据\n", + "成功获取 002708.SZ 的数据\n", + "成功获取 002709.SZ 的数据\n", + "成功获取 002712.SZ 的数据\n", + "成功获取 002713.SZ 的数据\n", + "成功获取 002714.SZ 的数据\n", + "成功获取 002715.SZ 的数据\n", + "成功获取 002716.SZ 的数据\n", + "成功获取 002717.SZ 的数据\n", + "成功获取 002718.SZ 的数据\n", + "成功获取 002719.SZ 的数据\n", + "成功获取 002721.SZ 的数据\n", + "成功获取 002722.SZ 的数据\n", + "成功获取 002723.SZ 的数据\n", + "成功获取 002724.SZ 的数据\n", + "成功获取 002725.SZ 的数据\n", + "成功获取 002726.SZ 的数据\n", + "成功获取 002727.SZ 的数据\n", + "成功获取 002728.SZ 的数据\n", + "成功获取 002729.SZ 的数据\n", + "成功获取 002730.SZ 的数据\n", + "成功获取 002731.SZ 的数据\n", + "已调用300次API,等待 22.64 秒以满足速率限制...\n", + "成功获取 002732.SZ 的数据\n", + "成功获取 002733.SZ 的数据\n", + "成功获取 002734.SZ 的数据\n", + "成功获取 002735.SZ 的数据\n", + "成功获取 002736.SZ 的数据\n", + "成功获取 002737.SZ 的数据\n", + "成功获取 002738.SZ 的数据\n", + "成功获取 002739.SZ 的数据\n", + "成功获取 002741.SZ 的数据\n", + "成功获取 002742.SZ 的数据\n", + "成功获取 002743.SZ 的数据\n", + "成功获取 002745.SZ 的数据\n", + "成功获取 002746.SZ 的数据\n", + "成功获取 002747.SZ 的数据\n", + "成功获取 002748.SZ 的数据\n", + "成功获取 002749.SZ 的数据\n", + "成功获取 002750.SZ 的数据\n", + "成功获取 002752.SZ 的数据\n", + "成功获取 002753.SZ 的数据\n", + "成功获取 002755.SZ 的数据\n", + "成功获取 002756.SZ 的数据\n", + "成功获取 002757.SZ 的数据\n", + "成功获取 002758.SZ 的数据\n", + "成功获取 002759.SZ 的数据\n", + "成功获取 002760.SZ 的数据\n", + "成功获取 002761.SZ 的数据\n", + "成功获取 002762.SZ 的数据\n", + "成功获取 002763.SZ 的数据\n", + "成功获取 002765.SZ 的数据\n", + "成功获取 002766.SZ 的数据\n", + "成功获取 002767.SZ 的数据\n", + "成功获取 002768.SZ 的数据\n", + "成功获取 002769.SZ 的数据\n", + "成功获取 002771.SZ 的数据\n", + "成功获取 002772.SZ 的数据\n", + "成功获取 002773.SZ 的数据\n", + "成功获取 002774.SZ 的数据\n", + "成功获取 002775.SZ 的数据\n", + "成功获取 002777.SZ 的数据\n", + "成功获取 002778.SZ 的数据\n", + "成功获取 002779.SZ 的数据\n", + "成功获取 002780.SZ 的数据\n", + "成功获取 002782.SZ 的数据\n", + "成功获取 002783.SZ 的数据\n", + "成功获取 002785.SZ 的数据\n", + "成功获取 002786.SZ 的数据\n", + "成功获取 002787.SZ 的数据\n", + "成功获取 002788.SZ 的数据\n", + "成功获取 002789.SZ 的数据\n", + "成功获取 002790.SZ 的数据\n", + "成功获取 002791.SZ 的数据\n", + "成功获取 002792.SZ 的数据\n", + "成功获取 002793.SZ 的数据\n", + "成功获取 002795.SZ 的数据\n", + "成功获取 002796.SZ 的数据\n", + "成功获取 002797.SZ 的数据\n", + "成功获取 002798.SZ 的数据\n", + "成功获取 002799.SZ 的数据\n", + "成功获取 002800.SZ 的数据\n", + "成功获取 002801.SZ 的数据\n", + "成功获取 002802.SZ 的数据\n", + "成功获取 002803.SZ 的数据\n", + "成功获取 002805.SZ 的数据\n", + "成功获取 002806.SZ 的数据\n", + "成功获取 002807.SZ 的数据\n", + "成功获取 002808.SZ 的数据\n", + "成功获取 002809.SZ 的数据\n", + "成功获取 002810.SZ 的数据\n", + "成功获取 002811.SZ 的数据\n", + "成功获取 002812.SZ 的数据\n", + "成功获取 002813.SZ 的数据\n", + "成功获取 002815.SZ 的数据\n", + "成功获取 002816.SZ 的数据\n", + "成功获取 002817.SZ 的数据\n", + "成功获取 002818.SZ 的数据\n", + "成功获取 002819.SZ 的数据\n", + "成功获取 002820.SZ 的数据\n", + "成功获取 002821.SZ 的数据\n", + "成功获取 002822.SZ 的数据\n", + "成功获取 002823.SZ 的数据\n", + "成功获取 002824.SZ 的数据\n", + "成功获取 002825.SZ 的数据\n", + "成功获取 002826.SZ 的数据\n", + "成功获取 002827.SZ 的数据\n", + "成功获取 002828.SZ 的数据\n", + "成功获取 002829.SZ 的数据\n", + "成功获取 002830.SZ 的数据\n", + "成功获取 002831.SZ 的数据\n", + "成功获取 002832.SZ 的数据\n", + "成功获取 002833.SZ 的数据\n", + "成功获取 002835.SZ 的数据\n", + "成功获取 002836.SZ 的数据\n", + "成功获取 002837.SZ 的数据\n", + "成功获取 002838.SZ 的数据\n", + "成功获取 002839.SZ 的数据\n", + "成功获取 002840.SZ 的数据\n", + "成功获取 002841.SZ 的数据\n", + "成功获取 002842.SZ 的数据\n", + "成功获取 002843.SZ 的数据\n", + "成功获取 002845.SZ 的数据\n", + "成功获取 002846.SZ 的数据\n", + "成功获取 002847.SZ 的数据\n", + "成功获取 002848.SZ 的数据\n", + "成功获取 002849.SZ 的数据\n", + "成功获取 002850.SZ 的数据\n", + "成功获取 002851.SZ 的数据\n", + "成功获取 002852.SZ 的数据\n", + "成功获取 002853.SZ 的数据\n", + "成功获取 002855.SZ 的数据\n", + "成功获取 002856.SZ 的数据\n", + "成功获取 002857.SZ 的数据\n", + "成功获取 002858.SZ 的数据\n", + "成功获取 002859.SZ 的数据\n", + "成功获取 002860.SZ 的数据\n", + "成功获取 002861.SZ 的数据\n", + "成功获取 002862.SZ 的数据\n", + "成功获取 002863.SZ 的数据\n", + "成功获取 002864.SZ 的数据\n", + "成功获取 002865.SZ 的数据\n", + "成功获取 002866.SZ 的数据\n", + "成功获取 002867.SZ 的数据\n", + "成功获取 002868.SZ 的数据\n", + "成功获取 002869.SZ 的数据\n", + "成功获取 002870.SZ 的数据\n", + "成功获取 002871.SZ 的数据\n", + "成功获取 002872.SZ 的数据\n", + "成功获取 002873.SZ 的数据\n", + "成功获取 002875.SZ 的数据\n", + "成功获取 002876.SZ 的数据\n", + "成功获取 002877.SZ 的数据\n", + "成功获取 002878.SZ 的数据\n", + "成功获取 002879.SZ 的数据\n", + "成功获取 002880.SZ 的数据\n", + "成功获取 002881.SZ 的数据\n", + "成功获取 002882.SZ 的数据\n", + "成功获取 002883.SZ 的数据\n", + "成功获取 002884.SZ 的数据\n", + "成功获取 002885.SZ 的数据\n", + "成功获取 002886.SZ 的数据\n", + "成功获取 002887.SZ 的数据\n", + "成功获取 002888.SZ 的数据\n", + "成功获取 002889.SZ 的数据\n", + "成功获取 002890.SZ 的数据\n", + "成功获取 002891.SZ 的数据\n", + "成功获取 002892.SZ 的数据\n", + "成功获取 002893.SZ 的数据\n", + "成功获取 002895.SZ 的数据\n", + "成功获取 002896.SZ 的数据\n", + "成功获取 002897.SZ 的数据\n", + "成功获取 002898.SZ 的数据\n", + "成功获取 002899.SZ 的数据\n", + "成功获取 002900.SZ 的数据\n", + "成功获取 002901.SZ 的数据\n", + "成功获取 002902.SZ 的数据\n", + "成功获取 002903.SZ 的数据\n", + "成功获取 002905.SZ 的数据\n", + "成功获取 002906.SZ 的数据\n", + "成功获取 002907.SZ 的数据\n", + "成功获取 002908.SZ 的数据\n", + "成功获取 002909.SZ 的数据\n", + "成功获取 002910.SZ 的数据\n", + "成功获取 002911.SZ 的数据\n", + "成功获取 002912.SZ 的数据\n", + "成功获取 002913.SZ 的数据\n", + "成功获取 002915.SZ 的数据\n", + "成功获取 002916.SZ 的数据\n", + "成功获取 002917.SZ 的数据\n", + "成功获取 002918.SZ 的数据\n", + "成功获取 002919.SZ 的数据\n", + "成功获取 002920.SZ 的数据\n", + "成功获取 002921.SZ 的数据\n", + "成功获取 002922.SZ 的数据\n", + "成功获取 002923.SZ 的数据\n", + "成功获取 002925.SZ 的数据\n", + "成功获取 002926.SZ 的数据\n", + "成功获取 002927.SZ 的数据\n", + "成功获取 002928.SZ 的数据\n", + "成功获取 002929.SZ 的数据\n", + "成功获取 002930.SZ 的数据\n", + "成功获取 002931.SZ 的数据\n", + "成功获取 002932.SZ 的数据\n", + "成功获取 002933.SZ 的数据\n", + "成功获取 002935.SZ 的数据\n", + "成功获取 002936.SZ 的数据\n", + "成功获取 002937.SZ 的数据\n", + "成功获取 002938.SZ 的数据\n", + "成功获取 002939.SZ 的数据\n", + "成功获取 002940.SZ 的数据\n", + "成功获取 002941.SZ 的数据\n", + "成功获取 002942.SZ 的数据\n", + "成功获取 002943.SZ 的数据\n", + "成功获取 002945.SZ 的数据\n", + "成功获取 002946.SZ 的数据\n", + "成功获取 002947.SZ 的数据\n", + "成功获取 002948.SZ 的数据\n", + "成功获取 002949.SZ 的数据\n", + "成功获取 002950.SZ 的数据\n", + "成功获取 002951.SZ 的数据\n", + "成功获取 002952.SZ 的数据\n", + "成功获取 002953.SZ 的数据\n", + "成功获取 002955.SZ 的数据\n", + "成功获取 002956.SZ 的数据\n", + "成功获取 002957.SZ 的数据\n", + "成功获取 002958.SZ 的数据\n", + "成功获取 002959.SZ 的数据\n", + "成功获取 002960.SZ 的数据\n", + "成功获取 002961.SZ 的数据\n", + "成功获取 002962.SZ 的数据\n", + "成功获取 002963.SZ 的数据\n", + "成功获取 002965.SZ 的数据\n", + "成功获取 002966.SZ 的数据\n", + "成功获取 002967.SZ 的数据\n", + "成功获取 002968.SZ 的数据\n", + "成功获取 002969.SZ 的数据\n", + "成功获取 002970.SZ 的数据\n", + "成功获取 002971.SZ 的数据\n", + "成功获取 002972.SZ 的数据\n", + "成功获取 002973.SZ 的数据\n", + "成功获取 002975.SZ 的数据\n", + "成功获取 002976.SZ 的数据\n", + "成功获取 002977.SZ 的数据\n", + "成功获取 002978.SZ 的数据\n", + "成功获取 002979.SZ 的数据\n", + "成功获取 002980.SZ 的数据\n", + "成功获取 002981.SZ 的数据\n", + "成功获取 002982.SZ 的数据\n", + "成功获取 002983.SZ 的数据\n", + "成功获取 002984.SZ 的数据\n", + "成功获取 002985.SZ 的数据\n", + "成功获取 002986.SZ 的数据\n", + "成功获取 002987.SZ 的数据\n", + "成功获取 002988.SZ 的数据\n", + "成功获取 002989.SZ 的数据\n", + "成功获取 002990.SZ 的数据\n", + "成功获取 002991.SZ 的数据\n", + "成功获取 002992.SZ 的数据\n", + "成功获取 002993.SZ 的数据\n", + "成功获取 002995.SZ 的数据\n", + "成功获取 002996.SZ 的数据\n", + "成功获取 002997.SZ 的数据\n", + "成功获取 002998.SZ 的数据\n", + "成功获取 002999.SZ 的数据\n", + "成功获取 003000.SZ 的数据\n", + "成功获取 003001.SZ 的数据\n", + "成功获取 003002.SZ 的数据\n", + "成功获取 003003.SZ 的数据\n", + "成功获取 003004.SZ 的数据\n", + "成功获取 003005.SZ 的数据\n", + "成功获取 003006.SZ 的数据\n", + "成功获取 003007.SZ 的数据\n", + "成功获取 003008.SZ 的数据\n", + "成功获取 003009.SZ 的数据\n", + "成功获取 003010.SZ 的数据\n", + "成功获取 003011.SZ 的数据\n", + "成功获取 003012.SZ 的数据\n", + "成功获取 003013.SZ 的数据\n", + "成功获取 003015.SZ 的数据\n", + "成功获取 003016.SZ 的数据\n", + "成功获取 003017.SZ 的数据\n", + "成功获取 003018.SZ 的数据\n", + "成功获取 003019.SZ 的数据\n", + "成功获取 003020.SZ 的数据\n", + "成功获取 003021.SZ 的数据\n", + "成功获取 003022.SZ 的数据\n", + "成功获取 003023.SZ 的数据\n", + "成功获取 003025.SZ 的数据\n", + "成功获取 003026.SZ 的数据\n", + "成功获取 003027.SZ 的数据\n", + "成功获取 003028.SZ 的数据\n", + "成功获取 003029.SZ 的数据\n", + "成功获取 003030.SZ 的数据\n", + "成功获取 003031.SZ 的数据\n", + "成功获取 003032.SZ 的数据\n", + "成功获取 003033.SZ 的数据\n", + "成功获取 003035.SZ 的数据\n", + "成功获取 003036.SZ 的数据\n", + "成功获取 003037.SZ 的数据\n", + "成功获取 003038.SZ 的数据\n", + "成功获取 003039.SZ 的数据\n", + "成功获取 003040.SZ 的数据\n", + "成功获取 003041.SZ 的数据\n", + "成功获取 003042.SZ 的数据\n", + "成功获取 003043.SZ 的数据\n", + "成功获取 003816.SZ 的数据\n", + "成功获取 300001.SZ 的数据\n", + "成功获取 300002.SZ 的数据\n", + "成功获取 300003.SZ 的数据\n", + "成功获取 300004.SZ 的数据\n", + "成功获取 300005.SZ 的数据\n", + "成功获取 300006.SZ 的数据\n", + "成功获取 300007.SZ 的数据\n", + "成功获取 300008.SZ 的数据\n", + "成功获取 300009.SZ 的数据\n", + "成功获取 300010.SZ 的数据\n", + "成功获取 300011.SZ 的数据\n", + "成功获取 300012.SZ 的数据\n", + "成功获取 300013.SZ 的数据\n", + "成功获取 300014.SZ 的数据\n", + "成功获取 300015.SZ 的数据\n", + "成功获取 300016.SZ 的数据\n", + "已调用300次API,等待 20.35 秒以满足速率限制...\n", + "成功获取 300017.SZ 的数据\n", + "成功获取 300018.SZ 的数据\n", + "成功获取 300019.SZ 的数据\n", + "成功获取 300020.SZ 的数据\n", + "成功获取 300021.SZ 的数据\n", + "成功获取 300022.SZ 的数据\n", + "成功获取 300024.SZ 的数据\n", + "成功获取 300025.SZ 的数据\n", + "成功获取 300026.SZ 的数据\n", + "成功获取 300027.SZ 的数据\n", + "成功获取 300029.SZ 的数据\n", + "成功获取 300030.SZ 的数据\n", + "成功获取 300031.SZ 的数据\n", + "成功获取 300032.SZ 的数据\n", + "成功获取 300033.SZ 的数据\n", + "成功获取 300034.SZ 的数据\n", + "成功获取 300035.SZ 的数据\n", + "成功获取 300036.SZ 的数据\n", + "成功获取 300037.SZ 的数据\n", + "成功获取 300039.SZ 的数据\n", + "成功获取 300040.SZ 的数据\n", + "成功获取 300041.SZ 的数据\n", + "成功获取 300042.SZ 的数据\n", + "成功获取 300043.SZ 的数据\n", + "成功获取 300044.SZ 的数据\n", + "成功获取 300045.SZ 的数据\n", + "成功获取 300046.SZ 的数据\n", + "成功获取 300047.SZ 的数据\n", + "成功获取 300048.SZ 的数据\n", + "成功获取 300049.SZ 的数据\n", + "成功获取 300050.SZ 的数据\n", + "成功获取 300051.SZ 的数据\n", + "成功获取 300052.SZ 的数据\n", + "成功获取 300053.SZ 的数据\n", + "成功获取 300054.SZ 的数据\n", + "成功获取 300055.SZ 的数据\n", + "成功获取 300056.SZ 的数据\n", + "成功获取 300057.SZ 的数据\n", + "成功获取 300058.SZ 的数据\n", + "成功获取 300059.SZ 的数据\n", + "成功获取 300061.SZ 的数据\n", + "成功获取 300062.SZ 的数据\n", + "成功获取 300063.SZ 的数据\n", + "成功获取 300065.SZ 的数据\n", + "成功获取 300066.SZ 的数据\n", + "成功获取 300067.SZ 的数据\n", + "成功获取 300068.SZ 的数据\n", + "成功获取 300069.SZ 的数据\n", + "成功获取 300070.SZ 的数据\n", + "成功获取 300071.SZ 的数据\n", + "成功获取 300072.SZ 的数据\n", + "成功获取 300073.SZ 的数据\n", + "成功获取 300074.SZ 的数据\n", + "成功获取 300075.SZ 的数据\n", + "成功获取 300076.SZ 的数据\n", + "成功获取 300077.SZ 的数据\n", + "成功获取 300078.SZ 的数据\n", + "成功获取 300079.SZ 的数据\n", + "成功获取 300080.SZ 的数据\n", + "成功获取 300081.SZ 的数据\n", + "成功获取 300082.SZ 的数据\n", + "成功获取 300083.SZ 的数据\n", + "成功获取 300084.SZ 的数据\n", + "成功获取 300085.SZ 的数据\n", + "成功获取 300086.SZ 的数据\n", + "成功获取 300087.SZ 的数据\n", + "成功获取 300088.SZ 的数据\n", + "成功获取 300091.SZ 的数据\n", + "成功获取 300092.SZ 的数据\n", + "成功获取 300093.SZ 的数据\n", + "成功获取 300094.SZ 的数据\n", + "成功获取 300095.SZ 的数据\n", + "成功获取 300096.SZ 的数据\n", + "成功获取 300097.SZ 的数据\n", + "成功获取 300098.SZ 的数据\n", + "成功获取 300099.SZ 的数据\n", + "成功获取 300100.SZ 的数据\n", + "成功获取 300101.SZ 的数据\n", + "成功获取 300102.SZ 的数据\n", + "成功获取 300103.SZ 的数据\n", + "成功获取 300105.SZ 的数据\n", + "成功获取 300106.SZ 的数据\n", + "成功获取 300107.SZ 的数据\n", + "成功获取 300108.SZ 的数据\n", + "成功获取 300109.SZ 的数据\n", + "成功获取 300110.SZ 的数据\n", + "成功获取 300111.SZ 的数据\n", + "成功获取 300112.SZ 的数据\n", + "成功获取 300113.SZ 的数据\n", + "成功获取 300114.SZ 的数据\n", + "成功获取 300115.SZ 的数据\n", + "成功获取 300117.SZ 的数据\n", + "成功获取 300118.SZ 的数据\n", + "成功获取 300119.SZ 的数据\n", + "成功获取 300120.SZ 的数据\n", + "成功获取 300121.SZ 的数据\n", + "成功获取 300122.SZ 的数据\n", + "成功获取 300123.SZ 的数据\n", + "成功获取 300124.SZ 的数据\n", + "成功获取 300125.SZ 的数据\n", + "成功获取 300126.SZ 的数据\n", + "成功获取 300127.SZ 的数据\n", + "成功获取 300128.SZ 的数据\n", + "成功获取 300129.SZ 的数据\n", + "成功获取 300130.SZ 的数据\n", + "成功获取 300131.SZ 的数据\n", + "成功获取 300132.SZ 的数据\n", + "成功获取 300133.SZ 的数据\n", + "成功获取 300134.SZ 的数据\n", + "成功获取 300135.SZ 的数据\n", + "成功获取 300136.SZ 的数据\n", + "成功获取 300137.SZ 的数据\n", + "成功获取 300138.SZ 的数据\n", + "成功获取 300139.SZ 的数据\n", + "成功获取 300140.SZ 的数据\n", + "成功获取 300141.SZ 的数据\n", + "成功获取 300142.SZ 的数据\n", + "成功获取 300143.SZ 的数据\n", + "成功获取 300144.SZ 的数据\n", + "成功获取 300145.SZ 的数据\n", + "成功获取 300146.SZ 的数据\n", + "成功获取 300147.SZ 的数据\n", + "成功获取 300148.SZ 的数据\n", + "成功获取 300149.SZ 的数据\n", + "成功获取 300150.SZ 的数据\n", + "成功获取 300151.SZ 的数据\n", + "成功获取 300152.SZ 的数据\n", + "成功获取 300153.SZ 的数据\n", + "成功获取 300154.SZ 的数据\n", + "成功获取 300155.SZ 的数据\n", + "成功获取 300157.SZ 的数据\n", + "成功获取 300158.SZ 的数据\n", + "成功获取 300159.SZ 的数据\n", + "成功获取 300160.SZ 的数据\n", + "成功获取 300161.SZ 的数据\n", + "成功获取 300162.SZ 的数据\n", + "成功获取 300163.SZ 的数据\n", + "成功获取 300164.SZ 的数据\n", + "成功获取 300165.SZ 的数据\n", + "成功获取 300166.SZ 的数据\n", + "成功获取 300167.SZ 的数据\n", + "成功获取 300168.SZ 的数据\n", + "成功获取 300169.SZ 的数据\n", + "成功获取 300170.SZ 的数据\n", + "成功获取 300171.SZ 的数据\n", + "成功获取 300172.SZ 的数据\n", + "成功获取 300173.SZ 的数据\n", + "成功获取 300174.SZ 的数据\n", + "成功获取 300175.SZ 的数据\n", + "成功获取 300176.SZ 的数据\n", + "成功获取 300177.SZ 的数据\n", + "成功获取 300179.SZ 的数据\n", + "成功获取 300180.SZ 的数据\n", + "成功获取 300181.SZ 的数据\n", + "成功获取 300182.SZ 的数据\n", + "成功获取 300183.SZ 的数据\n", + "成功获取 300184.SZ 的数据\n", + "成功获取 300185.SZ 的数据\n", + "成功获取 300187.SZ 的数据\n", + "成功获取 300188.SZ 的数据\n", + "成功获取 300189.SZ 的数据\n", + "成功获取 300190.SZ 的数据\n", + "成功获取 300191.SZ 的数据\n", + "成功获取 300192.SZ 的数据\n", + "成功获取 300193.SZ 的数据\n", + "成功获取 300194.SZ 的数据\n", + "成功获取 300195.SZ 的数据\n", + "成功获取 300196.SZ 的数据\n", + "成功获取 300197.SZ 的数据\n", + "成功获取 300198.SZ 的数据\n", + "成功获取 300199.SZ 的数据\n", + "成功获取 300200.SZ 的数据\n", + "成功获取 300201.SZ 的数据\n", + "成功获取 300203.SZ 的数据\n", + "成功获取 300204.SZ 的数据\n", + "成功获取 300205.SZ 的数据\n", + "成功获取 300206.SZ 的数据\n", + "成功获取 300207.SZ 的数据\n", + "成功获取 300208.SZ 的数据\n", + "成功获取 300209.SZ 的数据\n", + "成功获取 300210.SZ 的数据\n", + "成功获取 300211.SZ 的数据\n", + "成功获取 300212.SZ 的数据\n", + "成功获取 300213.SZ 的数据\n", + "成功获取 300214.SZ 的数据\n", + "成功获取 300215.SZ 的数据\n", + "成功获取 300217.SZ 的数据\n", + "成功获取 300218.SZ 的数据\n", + "成功获取 300219.SZ 的数据\n", + "成功获取 300220.SZ 的数据\n", + "成功获取 300221.SZ 的数据\n", + "成功获取 300222.SZ 的数据\n", + "成功获取 300223.SZ 的数据\n", + "成功获取 300224.SZ 的数据\n", + "成功获取 300225.SZ 的数据\n", + "成功获取 300226.SZ 的数据\n", + "成功获取 300227.SZ 的数据\n", + "成功获取 300228.SZ 的数据\n", + "成功获取 300229.SZ 的数据\n", + "成功获取 300230.SZ 的数据\n", + "成功获取 300231.SZ 的数据\n", + "成功获取 300232.SZ 的数据\n", + "成功获取 300233.SZ 的数据\n", + "成功获取 300234.SZ 的数据\n", + "成功获取 300235.SZ 的数据\n", + "成功获取 300236.SZ 的数据\n", + "成功获取 300237.SZ 的数据\n", + "成功获取 300238.SZ 的数据\n", + "成功获取 300239.SZ 的数据\n", + "成功获取 300240.SZ 的数据\n", + "成功获取 300241.SZ 的数据\n", + "成功获取 300242.SZ 的数据\n", + "成功获取 300243.SZ 的数据\n", + "成功获取 300244.SZ 的数据\n", + "成功获取 300245.SZ 的数据\n", + "成功获取 300246.SZ 的数据\n", + "成功获取 300247.SZ 的数据\n", + "成功获取 300248.SZ 的数据\n", + "成功获取 300249.SZ 的数据\n", + "成功获取 300250.SZ 的数据\n", + "成功获取 300251.SZ 的数据\n", + "成功获取 300252.SZ 的数据\n", + "成功获取 300253.SZ 的数据\n", + "成功获取 300254.SZ 的数据\n", + "成功获取 300255.SZ 的数据\n", + "成功获取 300256.SZ 的数据\n", + "成功获取 300257.SZ 的数据\n", + "成功获取 300258.SZ 的数据\n", + "成功获取 300259.SZ 的数据\n", + "成功获取 300260.SZ 的数据\n", + "成功获取 300261.SZ 的数据\n", + "成功获取 300263.SZ 的数据\n", + "成功获取 300264.SZ 的数据\n", + "成功获取 300265.SZ 的数据\n", + "成功获取 300266.SZ 的数据\n", + "成功获取 300267.SZ 的数据\n", + "成功获取 300268.SZ 的数据\n", + "成功获取 300269.SZ 的数据\n", + "成功获取 300270.SZ 的数据\n", + "成功获取 300271.SZ 的数据\n", + "成功获取 300272.SZ 的数据\n", + "成功获取 300274.SZ 的数据\n", + "成功获取 300275.SZ 的数据\n", + "成功获取 300276.SZ 的数据\n", + "成功获取 300277.SZ 的数据\n", + "成功获取 300278.SZ 的数据\n", + "成功获取 300279.SZ 的数据\n", + "成功获取 300280.SZ 的数据\n", + "成功获取 300281.SZ 的数据\n", + "成功获取 300283.SZ 的数据\n", + "成功获取 300284.SZ 的数据\n", + "成功获取 300285.SZ 的数据\n", + "成功获取 300286.SZ 的数据\n", + "成功获取 300287.SZ 的数据\n", + "成功获取 300288.SZ 的数据\n", + "成功获取 300289.SZ 的数据\n", + "成功获取 300290.SZ 的数据\n", + "成功获取 300291.SZ 的数据\n", + "成功获取 300292.SZ 的数据\n", + "成功获取 300293.SZ 的数据\n", + "成功获取 300294.SZ 的数据\n", + "成功获取 300295.SZ 的数据\n", + "成功获取 300296.SZ 的数据\n", + "成功获取 300298.SZ 的数据\n", + "成功获取 300299.SZ 的数据\n", + "成功获取 300300.SZ 的数据\n", + "成功获取 300301.SZ 的数据\n", + "成功获取 300302.SZ 的数据\n", + "成功获取 300303.SZ 的数据\n", + "成功获取 300304.SZ 的数据\n", + "成功获取 300305.SZ 的数据\n", + "成功获取 300306.SZ 的数据\n", + "成功获取 300307.SZ 的数据\n", + "成功获取 300308.SZ 的数据\n", + "成功获取 300310.SZ 的数据\n", + "成功获取 300311.SZ 的数据\n", + "成功获取 300313.SZ 的数据\n", + "成功获取 300314.SZ 的数据\n", + "成功获取 300315.SZ 的数据\n", + "成功获取 300316.SZ 的数据\n", + "成功获取 300317.SZ 的数据\n", + "成功获取 300318.SZ 的数据\n", + "成功获取 300319.SZ 的数据\n", + "成功获取 300320.SZ 的数据\n", + "成功获取 300321.SZ 的数据\n", + "成功获取 300322.SZ 的数据\n", + "成功获取 300323.SZ 的数据\n", + "成功获取 300324.SZ 的数据\n", + "成功获取 300326.SZ 的数据\n", + "成功获取 300327.SZ 的数据\n", + "成功获取 300328.SZ 的数据\n", + "成功获取 300329.SZ 的数据\n", + "成功获取 300331.SZ 的数据\n", + "成功获取 300332.SZ 的数据\n", + "成功获取 300333.SZ 的数据\n", + "成功获取 300334.SZ 的数据\n", + "成功获取 300335.SZ 的数据\n", + "成功获取 300337.SZ 的数据\n", + "成功获取 300338.SZ 的数据\n", + "成功获取 300339.SZ 的数据\n", + "已调用300次API,等待 21.27 秒以满足速率限制...\n", + "成功获取 300340.SZ 的数据\n", + "成功获取 300341.SZ 的数据\n", + "成功获取 300342.SZ 的数据\n", + "成功获取 300343.SZ 的数据\n", + "成功获取 300344.SZ 的数据\n", + "成功获取 300345.SZ 的数据\n", + "成功获取 300346.SZ 的数据\n", + "成功获取 300347.SZ 的数据\n", + "成功获取 300348.SZ 的数据\n", + "成功获取 300349.SZ 的数据\n", + "成功获取 300350.SZ 的数据\n", + "成功获取 300351.SZ 的数据\n", + "成功获取 300352.SZ 的数据\n", + "成功获取 300353.SZ 的数据\n", + "成功获取 300354.SZ 的数据\n", + "成功获取 300355.SZ 的数据\n", + "成功获取 300357.SZ 的数据\n", + "成功获取 300358.SZ 的数据\n", + "成功获取 300359.SZ 的数据\n", + "成功获取 300360.SZ 的数据\n", + "成功获取 300363.SZ 的数据\n", + "成功获取 300364.SZ 的数据\n", + "成功获取 300365.SZ 的数据\n", + "成功获取 300366.SZ 的数据\n", + "成功获取 300368.SZ 的数据\n", + "成功获取 300369.SZ 的数据\n", + "成功获取 300370.SZ 的数据\n", + "成功获取 300371.SZ 的数据\n", + "成功获取 300373.SZ 的数据\n", + "成功获取 300374.SZ 的数据\n", + "成功获取 300375.SZ 的数据\n", + "成功获取 300376.SZ 的数据\n", + "成功获取 300377.SZ 的数据\n", + "成功获取 300378.SZ 的数据\n", + "成功获取 300379.SZ 的数据\n", + "成功获取 300380.SZ 的数据\n", + "成功获取 300381.SZ 的数据\n", + "成功获取 300382.SZ 的数据\n", + "成功获取 300383.SZ 的数据\n", + "成功获取 300384.SZ 的数据\n", + "成功获取 300385.SZ 的数据\n", + "成功获取 300386.SZ 的数据\n", + "成功获取 300387.SZ 的数据\n", + "成功获取 300388.SZ 的数据\n", + "成功获取 300389.SZ 的数据\n", + "成功获取 300390.SZ 的数据\n", + "成功获取 300391.SZ 的数据\n", + "成功获取 300393.SZ 的数据\n", + "成功获取 300394.SZ 的数据\n", + "成功获取 300395.SZ 的数据\n", + "成功获取 300396.SZ 的数据\n", + "成功获取 300397.SZ 的数据\n", + "成功获取 300398.SZ 的数据\n", + "成功获取 300399.SZ 的数据\n", + "成功获取 300400.SZ 的数据\n", + "成功获取 300401.SZ 的数据\n", + "成功获取 300402.SZ 的数据\n", + "成功获取 300403.SZ 的数据\n", + "成功获取 300404.SZ 的数据\n", + "成功获取 300405.SZ 的数据\n", + "成功获取 300406.SZ 的数据\n", + "成功获取 300407.SZ 的数据\n", + "成功获取 300408.SZ 的数据\n", + "成功获取 300409.SZ 的数据\n", + "成功获取 300410.SZ 的数据\n", + "成功获取 300411.SZ 的数据\n", + "成功获取 300412.SZ 的数据\n", + "成功获取 300413.SZ 的数据\n", + "成功获取 300414.SZ 的数据\n", + "成功获取 300415.SZ 的数据\n", + "成功获取 300416.SZ 的数据\n", + "成功获取 300417.SZ 的数据\n", + "成功获取 300418.SZ 的数据\n", + "成功获取 300419.SZ 的数据\n", + "成功获取 300420.SZ 的数据\n", + "成功获取 300421.SZ 的数据\n", + "成功获取 300422.SZ 的数据\n", + "成功获取 300423.SZ 的数据\n", + "成功获取 300424.SZ 的数据\n", + "成功获取 300425.SZ 的数据\n", + "成功获取 300426.SZ 的数据\n", + "成功获取 300427.SZ 的数据\n", + "成功获取 300428.SZ 的数据\n", + "成功获取 300429.SZ 的数据\n", + "成功获取 300430.SZ 的数据\n", + "成功获取 300432.SZ 的数据\n", + "成功获取 300433.SZ 的数据\n", + "成功获取 300434.SZ 的数据\n", + "成功获取 300435.SZ 的数据\n", + "成功获取 300436.SZ 的数据\n", + "成功获取 300437.SZ 的数据\n", + "成功获取 300438.SZ 的数据\n", + "成功获取 300439.SZ 的数据\n", + "成功获取 300440.SZ 的数据\n", + "成功获取 300441.SZ 的数据\n", + "成功获取 300442.SZ 的数据\n", + "成功获取 300443.SZ 的数据\n", + "成功获取 300444.SZ 的数据\n", + "成功获取 300445.SZ 的数据\n", + "成功获取 300446.SZ 的数据\n", + "成功获取 300447.SZ 的数据\n", + "成功获取 300448.SZ 的数据\n", + "成功获取 300449.SZ 的数据\n", + "成功获取 300450.SZ 的数据\n", + "成功获取 300451.SZ 的数据\n", + "成功获取 300452.SZ 的数据\n", + "成功获取 300453.SZ 的数据\n", + "成功获取 300454.SZ 的数据\n", + "成功获取 300455.SZ 的数据\n", + "成功获取 300456.SZ 的数据\n", + "成功获取 300457.SZ 的数据\n", + "成功获取 300458.SZ 的数据\n", + "成功获取 300459.SZ 的数据\n", + "成功获取 300460.SZ 的数据\n", + "成功获取 300461.SZ 的数据\n", + "成功获取 300462.SZ 的数据\n", + "成功获取 300463.SZ 的数据\n", + "成功获取 300464.SZ 的数据\n", + "成功获取 300465.SZ 的数据\n", + "成功获取 300466.SZ 的数据\n", + "成功获取 300467.SZ 的数据\n", + "成功获取 300468.SZ 的数据\n", + "成功获取 300469.SZ 的数据\n", + "成功获取 300470.SZ 的数据\n", + "成功获取 300471.SZ 的数据\n", + "成功获取 300472.SZ 的数据\n", + "成功获取 300473.SZ 的数据\n", + "成功获取 300474.SZ 的数据\n", + "成功获取 300475.SZ 的数据\n", + "成功获取 300476.SZ 的数据\n", + "成功获取 300477.SZ 的数据\n", + "成功获取 300478.SZ 的数据\n", + "成功获取 300479.SZ 的数据\n", + "成功获取 300480.SZ 的数据\n", + "成功获取 300481.SZ 的数据\n", + "成功获取 300482.SZ 的数据\n", + "成功获取 300483.SZ 的数据\n", + "成功获取 300484.SZ 的数据\n", + "成功获取 300485.SZ 的数据\n", + "成功获取 300486.SZ 的数据\n", + "成功获取 300487.SZ 的数据\n", + "成功获取 300488.SZ 的数据\n", + "成功获取 300489.SZ 的数据\n", + "成功获取 300490.SZ 的数据\n", + "成功获取 300491.SZ 的数据\n", + "成功获取 300492.SZ 的数据\n", + "成功获取 300493.SZ 的数据\n", + "成功获取 300494.SZ 的数据\n", + "成功获取 300496.SZ 的数据\n", + "成功获取 300497.SZ 的数据\n", + "成功获取 300498.SZ 的数据\n", + "成功获取 300499.SZ 的数据\n", + "成功获取 300500.SZ 的数据\n", + "成功获取 300501.SZ 的数据\n", + "成功获取 300502.SZ 的数据\n", + "成功获取 300503.SZ 的数据\n", + "成功获取 300504.SZ 的数据\n", + "成功获取 300505.SZ 的数据\n", + "成功获取 300506.SZ 的数据\n", + "成功获取 300507.SZ 的数据\n", + "成功获取 300508.SZ 的数据\n", + "成功获取 300509.SZ 的数据\n", + "成功获取 300510.SZ 的数据\n", + "成功获取 300511.SZ 的数据\n", + "成功获取 300512.SZ 的数据\n", + "成功获取 300513.SZ 的数据\n", + "成功获取 300514.SZ 的数据\n", + "成功获取 300515.SZ 的数据\n", + "成功获取 300516.SZ 的数据\n", + "成功获取 300517.SZ 的数据\n", + "成功获取 300518.SZ 的数据\n", + "成功获取 300519.SZ 的数据\n", + "成功获取 300520.SZ 的数据\n", + "成功获取 300521.SZ 的数据\n", + "成功获取 300522.SZ 的数据\n", + "成功获取 300523.SZ 的数据\n", + "成功获取 300525.SZ 的数据\n", + "成功获取 300527.SZ 的数据\n", + "成功获取 300528.SZ 的数据\n", + "成功获取 300529.SZ 的数据\n", + "成功获取 300530.SZ 的数据\n", + "成功获取 300531.SZ 的数据\n", + "成功获取 300532.SZ 的数据\n", + "成功获取 300533.SZ 的数据\n", + "成功获取 300534.SZ 的数据\n", + "成功获取 300535.SZ 的数据\n", + "成功获取 300536.SZ 的数据\n", + "成功获取 300537.SZ 的数据\n", + "成功获取 300538.SZ 的数据\n", + "成功获取 300539.SZ 的数据\n", + "成功获取 300540.SZ 的数据\n", + "成功获取 300541.SZ 的数据\n", + "成功获取 300542.SZ 的数据\n", + "成功获取 300543.SZ 的数据\n", + "成功获取 300545.SZ 的数据\n", + "成功获取 300546.SZ 的数据\n", + "成功获取 300547.SZ 的数据\n", + "成功获取 300548.SZ 的数据\n", + "成功获取 300549.SZ 的数据\n", + "成功获取 300550.SZ 的数据\n", + "成功获取 300551.SZ 的数据\n", + "成功获取 300552.SZ 的数据\n", + "成功获取 300553.SZ 的数据\n", + "成功获取 300554.SZ 的数据\n", + "成功获取 300555.SZ 的数据\n", + "成功获取 300556.SZ 的数据\n", + "成功获取 300557.SZ 的数据\n", + "成功获取 300558.SZ 的数据\n", + "成功获取 300559.SZ 的数据\n", + "成功获取 300560.SZ 的数据\n", + "成功获取 300561.SZ 的数据\n", + "成功获取 300562.SZ 的数据\n", + "成功获取 300563.SZ 的数据\n", + "成功获取 300564.SZ 的数据\n", + "成功获取 300565.SZ 的数据\n", + "成功获取 300566.SZ 的数据\n", + "成功获取 300567.SZ 的数据\n", + "成功获取 300568.SZ 的数据\n", + "成功获取 300569.SZ 的数据\n", + "成功获取 300570.SZ 的数据\n", + "成功获取 300571.SZ 的数据\n", + "成功获取 300572.SZ 的数据\n", + "成功获取 300573.SZ 的数据\n", + "成功获取 300575.SZ 的数据\n", + "成功获取 300576.SZ 的数据\n", + "成功获取 300577.SZ 的数据\n", + "成功获取 300578.SZ 的数据\n", + "成功获取 300579.SZ 的数据\n", + "成功获取 300580.SZ 的数据\n", + "成功获取 300581.SZ 的数据\n", + "成功获取 300582.SZ 的数据\n", + "成功获取 300583.SZ 的数据\n", + "成功获取 300584.SZ 的数据\n", + "成功获取 300585.SZ 的数据\n", + "成功获取 300586.SZ 的数据\n", + "成功获取 300587.SZ 的数据\n", + "成功获取 300588.SZ 的数据\n", + "成功获取 300589.SZ 的数据\n", + "成功获取 300590.SZ 的数据\n", + "成功获取 300591.SZ 的数据\n", + "成功获取 300592.SZ 的数据\n", + "成功获取 300593.SZ 的数据\n", + "成功获取 300594.SZ 的数据\n", + "成功获取 300595.SZ 的数据\n", + "成功获取 300596.SZ 的数据\n", + "成功获取 300597.SZ 的数据\n", + "成功获取 300598.SZ 的数据\n", + "成功获取 300599.SZ 的数据\n", + "成功获取 300600.SZ 的数据\n", + "成功获取 300601.SZ 的数据\n", + "成功获取 300602.SZ 的数据\n", + "成功获取 300603.SZ 的数据\n", + "成功获取 300604.SZ 的数据\n", + "成功获取 300605.SZ 的数据\n", + "成功获取 300606.SZ 的数据\n", + "成功获取 300607.SZ 的数据\n", + "成功获取 300608.SZ 的数据\n", + "成功获取 300609.SZ 的数据\n", + "成功获取 300610.SZ 的数据\n", + "成功获取 300611.SZ 的数据\n", + "成功获取 300612.SZ 的数据\n", + "成功获取 300613.SZ 的数据\n", + "成功获取 300614.SZ 的数据\n", + "成功获取 300615.SZ 的数据\n", + "成功获取 300616.SZ 的数据\n", + "成功获取 300617.SZ 的数据\n", + "成功获取 300618.SZ 的数据\n", + "成功获取 300619.SZ 的数据\n", + "成功获取 300620.SZ 的数据\n", + "成功获取 300621.SZ 的数据\n", + "成功获取 300622.SZ 的数据\n", + "成功获取 300623.SZ 的数据\n", + "成功获取 300624.SZ 的数据\n", + "成功获取 300625.SZ 的数据\n", + "成功获取 300626.SZ 的数据\n", + "成功获取 300627.SZ 的数据\n", + "成功获取 300628.SZ 的数据\n", + "成功获取 300629.SZ 的数据\n", + "成功获取 300630.SZ 的数据\n", + "成功获取 300631.SZ 的数据\n", + "成功获取 300632.SZ 的数据\n", + "成功获取 300633.SZ 的数据\n", + "成功获取 300634.SZ 的数据\n", + "成功获取 300635.SZ 的数据\n", + "成功获取 300636.SZ 的数据\n", + "成功获取 300637.SZ 的数据\n", + "成功获取 300638.SZ 的数据\n", + "成功获取 300639.SZ 的数据\n", + "成功获取 300640.SZ 的数据\n", + "成功获取 300641.SZ 的数据\n", + "成功获取 300642.SZ 的数据\n", + "成功获取 300643.SZ 的数据\n", + "成功获取 300644.SZ 的数据\n", + "成功获取 300645.SZ 的数据\n", + "成功获取 300647.SZ 的数据\n", + "成功获取 300648.SZ 的数据\n", + "成功获取 300649.SZ 的数据\n", + "成功获取 300650.SZ 的数据\n", + "成功获取 300651.SZ 的数据\n", + "成功获取 300652.SZ 的数据\n", + "已调用300次API,等待 21.34 秒以满足速率限制...\n", + "成功获取 300653.SZ 的数据\n", + "成功获取 300654.SZ 的数据\n", + "成功获取 300655.SZ 的数据\n", + "成功获取 300656.SZ 的数据\n", + "成功获取 300657.SZ 的数据\n", + "成功获取 300658.SZ 的数据\n", + "成功获取 300659.SZ 的数据\n", + "成功获取 300660.SZ 的数据\n", + "成功获取 300661.SZ 的数据\n", + "成功获取 300662.SZ 的数据\n", + "成功获取 300663.SZ 的数据\n", + "成功获取 300664.SZ 的数据\n", + "成功获取 300665.SZ 的数据\n", + "成功获取 300666.SZ 的数据\n", + "成功获取 300667.SZ 的数据\n", + "成功获取 300668.SZ 的数据\n", + "成功获取 300669.SZ 的数据\n", + "成功获取 300670.SZ 的数据\n", + "成功获取 300671.SZ 的数据\n", + "成功获取 300672.SZ 的数据\n", + "成功获取 300673.SZ 的数据\n", + "成功获取 300674.SZ 的数据\n", + "成功获取 300675.SZ 的数据\n", + "成功获取 300676.SZ 的数据\n", + "成功获取 300677.SZ 的数据\n", + "成功获取 300678.SZ 的数据\n", + "成功获取 300679.SZ 的数据\n", + "成功获取 300680.SZ 的数据\n", + "成功获取 300681.SZ 的数据\n", + "成功获取 300682.SZ 的数据\n", + "成功获取 300683.SZ 的数据\n", + "成功获取 300684.SZ 的数据\n", + "成功获取 300685.SZ 的数据\n", + "成功获取 300686.SZ 的数据\n", + "成功获取 300687.SZ 的数据\n", + "成功获取 300688.SZ 的数据\n", + "成功获取 300689.SZ 的数据\n", + "成功获取 300690.SZ 的数据\n", + "成功获取 300691.SZ 的数据\n", + "成功获取 300692.SZ 的数据\n", + "成功获取 300693.SZ 的数据\n", + "成功获取 300694.SZ 的数据\n", + "成功获取 300695.SZ 的数据\n", + "成功获取 300696.SZ 的数据\n", + "成功获取 300697.SZ 的数据\n", + "成功获取 300698.SZ 的数据\n", + "成功获取 300699.SZ 的数据\n", + "成功获取 300700.SZ 的数据\n", + "成功获取 300701.SZ 的数据\n", + "成功获取 300702.SZ 的数据\n", + "成功获取 300703.SZ 的数据\n", + "成功获取 300705.SZ 的数据\n", + "成功获取 300706.SZ 的数据\n", + "成功获取 300707.SZ 的数据\n", + "成功获取 300708.SZ 的数据\n", + "成功获取 300709.SZ 的数据\n", + "成功获取 300710.SZ 的数据\n", + "成功获取 300711.SZ 的数据\n", + "成功获取 300712.SZ 的数据\n", + "成功获取 300713.SZ 的数据\n", + "成功获取 300715.SZ 的数据\n", + "成功获取 300716.SZ 的数据\n", + "成功获取 300717.SZ 的数据\n", + "成功获取 300718.SZ 的数据\n", + "成功获取 300719.SZ 的数据\n", + "成功获取 300720.SZ 的数据\n", + "成功获取 300721.SZ 的数据\n", + "成功获取 300722.SZ 的数据\n", + "成功获取 300723.SZ 的数据\n", + "成功获取 300724.SZ 的数据\n", + "成功获取 300725.SZ 的数据\n", + "成功获取 300726.SZ 的数据\n", + "成功获取 300727.SZ 的数据\n", + "成功获取 300729.SZ 的数据\n", + "成功获取 300730.SZ 的数据\n", + "成功获取 300731.SZ 的数据\n", + "成功获取 300732.SZ 的数据\n", + "成功获取 300733.SZ 的数据\n", + "成功获取 300735.SZ 的数据\n", + "成功获取 300736.SZ 的数据\n", + "成功获取 300737.SZ 的数据\n", + "成功获取 300738.SZ 的数据\n", + "成功获取 300739.SZ 的数据\n", + "成功获取 300740.SZ 的数据\n", + "成功获取 300741.SZ 的数据\n", + "成功获取 300743.SZ 的数据\n", + "成功获取 300745.SZ 的数据\n", + "成功获取 300746.SZ 的数据\n", + "成功获取 300747.SZ 的数据\n", + "成功获取 300748.SZ 的数据\n", + "成功获取 300749.SZ 的数据\n", + "成功获取 300750.SZ 的数据\n", + "成功获取 300751.SZ 的数据\n", + "成功获取 300752.SZ 的数据\n", + "成功获取 300753.SZ 的数据\n", + "成功获取 300755.SZ 的数据\n", + "成功获取 300756.SZ 的数据\n", + "成功获取 300757.SZ 的数据\n", + "成功获取 300758.SZ 的数据\n", + "成功获取 300759.SZ 的数据\n", + "成功获取 300760.SZ 的数据\n", + "成功获取 300761.SZ 的数据\n", + "成功获取 300762.SZ 的数据\n", + "成功获取 300763.SZ 的数据\n", + "成功获取 300765.SZ 的数据\n", + "成功获取 300766.SZ 的数据\n", + "成功获取 300767.SZ 的数据\n", + "成功获取 300768.SZ 的数据\n", + "成功获取 300769.SZ 的数据\n", + "成功获取 300770.SZ 的数据\n", + "成功获取 300771.SZ 的数据\n", + "成功获取 300772.SZ 的数据\n", + "成功获取 300773.SZ 的数据\n", + "成功获取 300774.SZ 的数据\n", + "成功获取 300775.SZ 的数据\n", + "成功获取 300776.SZ 的数据\n", + "成功获取 300777.SZ 的数据\n", + "成功获取 300778.SZ 的数据\n", + "成功获取 300779.SZ 的数据\n", + "成功获取 300780.SZ 的数据\n", + "成功获取 300781.SZ 的数据\n", + "成功获取 300782.SZ 的数据\n", + "成功获取 300783.SZ 的数据\n", + "成功获取 300784.SZ 的数据\n", + "成功获取 300785.SZ 的数据\n", + "成功获取 300786.SZ 的数据\n", + "成功获取 300787.SZ 的数据\n", + "成功获取 300788.SZ 的数据\n", + "成功获取 300789.SZ 的数据\n", + "成功获取 300790.SZ 的数据\n", + "成功获取 300791.SZ 的数据\n", + "成功获取 300792.SZ 的数据\n", + "成功获取 300793.SZ 的数据\n", + "成功获取 300795.SZ 的数据\n", + "成功获取 300796.SZ 的数据\n", + "成功获取 300797.SZ 的数据\n", + "成功获取 300798.SZ 的数据\n", + "成功获取 300800.SZ 的数据\n", + "成功获取 300801.SZ 的数据\n", + "成功获取 300802.SZ 的数据\n", + "成功获取 300803.SZ 的数据\n", + "成功获取 300804.SZ 的数据\n", + "成功获取 300805.SZ 的数据\n", + "成功获取 300806.SZ 的数据\n", + "成功获取 300807.SZ 的数据\n", + "成功获取 300808.SZ 的数据\n", + "成功获取 300809.SZ 的数据\n", + "成功获取 300810.SZ 的数据\n", + "成功获取 300811.SZ 的数据\n", + "成功获取 300812.SZ 的数据\n", + "成功获取 300813.SZ 的数据\n", + "成功获取 300814.SZ 的数据\n", + "成功获取 300815.SZ 的数据\n", + "成功获取 300816.SZ 的数据\n", + "成功获取 300817.SZ 的数据\n", + "成功获取 300818.SZ 的数据\n", + "成功获取 300819.SZ 的数据\n", + "成功获取 300820.SZ 的数据\n", + "成功获取 300821.SZ 的数据\n", + "成功获取 300822.SZ 的数据\n", + "成功获取 300823.SZ 的数据\n", + "成功获取 300824.SZ 的数据\n", + "成功获取 300825.SZ 的数据\n", + "成功获取 300826.SZ 的数据\n", + "成功获取 300827.SZ 的数据\n", + "成功获取 300828.SZ 的数据\n", + "成功获取 300829.SZ 的数据\n", + "成功获取 300830.SZ 的数据\n", + "成功获取 300831.SZ 的数据\n", + "成功获取 300832.SZ 的数据\n", + "成功获取 300833.SZ 的数据\n", + "成功获取 300834.SZ 的数据\n", + "成功获取 300835.SZ 的数据\n", + "成功获取 300836.SZ 的数据\n", + "成功获取 300837.SZ 的数据\n", + "成功获取 300838.SZ 的数据\n", + "成功获取 300839.SZ 的数据\n", + "成功获取 300840.SZ 的数据\n", + "成功获取 300841.SZ 的数据\n", + "成功获取 300842.SZ 的数据\n", + "成功获取 300843.SZ 的数据\n", + "成功获取 300844.SZ 的数据\n", + "成功获取 300845.SZ 的数据\n", + "成功获取 300846.SZ 的数据\n", + "成功获取 300847.SZ 的数据\n", + "成功获取 300848.SZ 的数据\n", + "成功获取 300849.SZ 的数据\n", + "成功获取 300850.SZ 的数据\n", + "成功获取 300851.SZ 的数据\n", + "成功获取 300852.SZ 的数据\n", + "成功获取 300853.SZ 的数据\n", + "成功获取 300854.SZ 的数据\n", + "成功获取 300855.SZ 的数据\n", + "成功获取 300856.SZ 的数据\n", + "成功获取 300857.SZ 的数据\n", + "成功获取 300858.SZ 的数据\n", + "成功获取 300859.SZ 的数据\n", + "成功获取 300860.SZ 的数据\n", + "成功获取 300861.SZ 的数据\n", + "成功获取 300862.SZ 的数据\n", + "成功获取 300863.SZ 的数据\n", + "成功获取 300864.SZ 的数据\n", + "成功获取 300865.SZ 的数据\n", + "成功获取 300866.SZ 的数据\n", + "成功获取 300867.SZ 的数据\n", + "成功获取 300868.SZ 的数据\n", + "成功获取 300869.SZ 的数据\n", + "成功获取 300870.SZ 的数据\n", + "成功获取 300871.SZ 的数据\n", + "成功获取 300872.SZ 的数据\n", + "成功获取 300873.SZ 的数据\n", + "成功获取 300875.SZ 的数据\n", + "成功获取 300876.SZ 的数据\n", + "成功获取 300877.SZ 的数据\n", + "成功获取 300878.SZ 的数据\n", + "成功获取 300879.SZ 的数据\n", + "成功获取 300880.SZ 的数据\n", + "成功获取 300881.SZ 的数据\n", + "成功获取 300882.SZ 的数据\n", + "成功获取 300883.SZ 的数据\n", + "成功获取 300884.SZ 的数据\n", + "成功获取 300885.SZ 的数据\n", + "成功获取 300886.SZ 的数据\n", + "成功获取 300887.SZ 的数据\n", + "成功获取 300888.SZ 的数据\n", + "成功获取 300889.SZ 的数据\n", + "成功获取 300890.SZ 的数据\n", + "成功获取 300891.SZ 的数据\n", + "成功获取 300892.SZ 的数据\n", + "成功获取 300893.SZ 的数据\n", + "成功获取 300894.SZ 的数据\n", + "成功获取 300895.SZ 的数据\n", + "成功获取 300896.SZ 的数据\n", + "成功获取 300897.SZ 的数据\n", + "成功获取 300898.SZ 的数据\n", + "成功获取 300899.SZ 的数据\n", + "成功获取 300900.SZ 的数据\n", + "成功获取 300901.SZ 的数据\n", + "成功获取 300902.SZ 的数据\n", + "成功获取 300903.SZ 的数据\n", + "成功获取 300904.SZ 的数据\n", + "成功获取 300905.SZ 的数据\n", + "成功获取 300906.SZ 的数据\n", + "成功获取 300907.SZ 的数据\n", + "成功获取 300908.SZ 的数据\n", + "成功获取 300909.SZ 的数据\n", + "成功获取 300910.SZ 的数据\n", + "成功获取 300911.SZ 的数据\n", + "成功获取 300912.SZ 的数据\n", + "成功获取 300913.SZ 的数据\n", + "成功获取 300915.SZ 的数据\n", + "成功获取 300916.SZ 的数据\n", + "成功获取 300917.SZ 的数据\n", + "成功获取 300918.SZ 的数据\n", + "成功获取 300919.SZ 的数据\n", + "成功获取 300920.SZ 的数据\n", + "成功获取 300921.SZ 的数据\n", + "成功获取 300922.SZ 的数据\n", + "成功获取 300923.SZ 的数据\n", + "成功获取 300925.SZ 的数据\n", + "成功获取 300926.SZ 的数据\n", + "成功获取 300927.SZ 的数据\n", + "成功获取 300928.SZ 的数据\n", + "成功获取 300929.SZ 的数据\n", + "成功获取 300930.SZ 的数据\n", + "成功获取 300931.SZ 的数据\n", + "成功获取 300932.SZ 的数据\n", + "成功获取 300933.SZ 的数据\n", + "成功获取 300935.SZ 的数据\n", + "成功获取 300936.SZ 的数据\n", + "成功获取 300937.SZ 的数据\n", + "成功获取 300938.SZ 的数据\n", + "成功获取 300939.SZ 的数据\n", + "成功获取 300940.SZ 的数据\n", + "成功获取 300941.SZ 的数据\n", + "成功获取 300942.SZ 的数据\n", + "成功获取 300943.SZ 的数据\n", + "成功获取 300945.SZ 的数据\n", + "成功获取 300946.SZ 的数据\n", + "成功获取 300947.SZ 的数据\n", + "成功获取 300948.SZ 的数据\n", + "成功获取 300949.SZ 的数据\n", + "成功获取 300950.SZ 的数据\n", + "成功获取 300951.SZ 的数据\n", + "成功获取 300952.SZ 的数据\n", + "成功获取 300953.SZ 的数据\n", + "成功获取 300955.SZ 的数据\n", + "成功获取 300956.SZ 的数据\n", + "成功获取 300957.SZ 的数据\n", + "成功获取 300958.SZ 的数据\n", + "成功获取 300959.SZ 的数据\n", + "成功获取 300960.SZ 的数据\n", + "成功获取 300961.SZ 的数据\n", + "成功获取 300962.SZ 的数据\n", + "成功获取 300963.SZ 的数据\n", + "成功获取 300964.SZ 的数据\n", + "成功获取 300965.SZ 的数据\n", + "成功获取 300966.SZ 的数据\n", + "成功获取 300967.SZ 的数据\n", + "成功获取 300968.SZ 的数据\n", + "已调用300次API,等待 21.34 秒以满足速率限制...\n", + "成功获取 300969.SZ 的数据\n", + "成功获取 300970.SZ 的数据\n", + "成功获取 300971.SZ 的数据\n", + "成功获取 300972.SZ 的数据\n", + "成功获取 300973.SZ 的数据\n", + "成功获取 300975.SZ 的数据\n", + "成功获取 300976.SZ 的数据\n", + "成功获取 300977.SZ 的数据\n", + "成功获取 300978.SZ 的数据\n", + "成功获取 300979.SZ 的数据\n", + "成功获取 300980.SZ 的数据\n", + "成功获取 300981.SZ 的数据\n", + "成功获取 300982.SZ 的数据\n", + "成功获取 300983.SZ 的数据\n", + "成功获取 300984.SZ 的数据\n", + "成功获取 300985.SZ 的数据\n", + "成功获取 300986.SZ 的数据\n", + "成功获取 300987.SZ 的数据\n", + "成功获取 300988.SZ 的数据\n", + "成功获取 300989.SZ 的数据\n", + "成功获取 300990.SZ 的数据\n", + "成功获取 300991.SZ 的数据\n", + "成功获取 300992.SZ 的数据\n", + "成功获取 300993.SZ 的数据\n", + "成功获取 300994.SZ 的数据\n", + "成功获取 300995.SZ 的数据\n", + "成功获取 300996.SZ 的数据\n", + "成功获取 300997.SZ 的数据\n", + "成功获取 300998.SZ 的数据\n", + "成功获取 300999.SZ 的数据\n", + "成功获取 301000.SZ 的数据\n", + "成功获取 301001.SZ 的数据\n", + "成功获取 301002.SZ 的数据\n", + "成功获取 301003.SZ 的数据\n", + "成功获取 301004.SZ 的数据\n", + "成功获取 301005.SZ 的数据\n", + "成功获取 301006.SZ 的数据\n", + "成功获取 301007.SZ 的数据\n", + "成功获取 301008.SZ 的数据\n", + "成功获取 301009.SZ 的数据\n", + "成功获取 301010.SZ 的数据\n", + "成功获取 301011.SZ 的数据\n", + "成功获取 301012.SZ 的数据\n", + "成功获取 301013.SZ 的数据\n", + "成功获取 301015.SZ 的数据\n", + "成功获取 301016.SZ 的数据\n", + "成功获取 301017.SZ 的数据\n", + "成功获取 301018.SZ 的数据\n", + "成功获取 301019.SZ 的数据\n", + "成功获取 301020.SZ 的数据\n", + "成功获取 301021.SZ 的数据\n", + "成功获取 301022.SZ 的数据\n", + "成功获取 301023.SZ 的数据\n", + "成功获取 301024.SZ 的数据\n", + "成功获取 301025.SZ 的数据\n", + "成功获取 301026.SZ 的数据\n", + "成功获取 301027.SZ 的数据\n", + "成功获取 301028.SZ 的数据\n", + "成功获取 301029.SZ 的数据\n", + "成功获取 301030.SZ 的数据\n", + "成功获取 301031.SZ 的数据\n", + "成功获取 301032.SZ 的数据\n", + "成功获取 301033.SZ 的数据\n", + "成功获取 301035.SZ 的数据\n", + "成功获取 301036.SZ 的数据\n", + "成功获取 301037.SZ 的数据\n", + "成功获取 301038.SZ 的数据\n", + "成功获取 301039.SZ 的数据\n", + "成功获取 301040.SZ 的数据\n", + "成功获取 301041.SZ 的数据\n", + "成功获取 301042.SZ 的数据\n", + "成功获取 301043.SZ 的数据\n", + "成功获取 301045.SZ 的数据\n", + "成功获取 301046.SZ 的数据\n", + "成功获取 301047.SZ 的数据\n", + "成功获取 301048.SZ 的数据\n", + "成功获取 301049.SZ 的数据\n", + "成功获取 301050.SZ 的数据\n", + "成功获取 301051.SZ 的数据\n", + "成功获取 301052.SZ 的数据\n", + "成功获取 301053.SZ 的数据\n", + "成功获取 301055.SZ 的数据\n", + "成功获取 301056.SZ 的数据\n", + "成功获取 301057.SZ 的数据\n", + "成功获取 301058.SZ 的数据\n", + "成功获取 301059.SZ 的数据\n", + "成功获取 301060.SZ 的数据\n", + "成功获取 301061.SZ 的数据\n", + "成功获取 301062.SZ 的数据\n", + "成功获取 301063.SZ 的数据\n", + "成功获取 301065.SZ 的数据\n", + "成功获取 301066.SZ 的数据\n", + "成功获取 301067.SZ 的数据\n", + "成功获取 301068.SZ 的数据\n", + "成功获取 301069.SZ 的数据\n", + "成功获取 301070.SZ 的数据\n", + "成功获取 301071.SZ 的数据\n", + "成功获取 301072.SZ 的数据\n", + "成功获取 301073.SZ 的数据\n", + "成功获取 301075.SZ 的数据\n", + "成功获取 301076.SZ 的数据\n", + "成功获取 301077.SZ 的数据\n", + "成功获取 301078.SZ 的数据\n", + "成功获取 301079.SZ 的数据\n", + "成功获取 301080.SZ 的数据\n", + "成功获取 301081.SZ 的数据\n", + "成功获取 301082.SZ 的数据\n", + "成功获取 301083.SZ 的数据\n", + "成功获取 301085.SZ 的数据\n", + "成功获取 301086.SZ 的数据\n", + "成功获取 301087.SZ 的数据\n", + "成功获取 301088.SZ 的数据\n", + "成功获取 301089.SZ 的数据\n", + "成功获取 301090.SZ 的数据\n", + "成功获取 301091.SZ 的数据\n", + "成功获取 301092.SZ 的数据\n", + "成功获取 301093.SZ 的数据\n", + "成功获取 301095.SZ 的数据\n", + "成功获取 301096.SZ 的数据\n", + "成功获取 301097.SZ 的数据\n", + "成功获取 301098.SZ 的数据\n", + "成功获取 301099.SZ 的数据\n", + "成功获取 301100.SZ 的数据\n", + "成功获取 301101.SZ 的数据\n", + "成功获取 301102.SZ 的数据\n", + "成功获取 301103.SZ 的数据\n", + "成功获取 301105.SZ 的数据\n", + "成功获取 301106.SZ 的数据\n", + "成功获取 301107.SZ 的数据\n", + "成功获取 301108.SZ 的数据\n", + "成功获取 301109.SZ 的数据\n", + "成功获取 301110.SZ 的数据\n", + "成功获取 301111.SZ 的数据\n", + "成功获取 301112.SZ 的数据\n", + "成功获取 301113.SZ 的数据\n", + "成功获取 301115.SZ 的数据\n", + "成功获取 301116.SZ 的数据\n", + "成功获取 301117.SZ 的数据\n", + "成功获取 301118.SZ 的数据\n", + "成功获取 301119.SZ 的数据\n", + "成功获取 301120.SZ 的数据\n", + "成功获取 301121.SZ 的数据\n", + "成功获取 301122.SZ 的数据\n", + "成功获取 301123.SZ 的数据\n", + "成功获取 301125.SZ 的数据\n", + "成功获取 301126.SZ 的数据\n", + "成功获取 301127.SZ 的数据\n", + "成功获取 301128.SZ 的数据\n", + "成功获取 301129.SZ 的数据\n", + "成功获取 301130.SZ 的数据\n", + "成功获取 301131.SZ 的数据\n", + "成功获取 301132.SZ 的数据\n", + "成功获取 301133.SZ 的数据\n", + "成功获取 301135.SZ 的数据\n", + "成功获取 301136.SZ 的数据\n", + "成功获取 301137.SZ 的数据\n", + "成功获取 301138.SZ 的数据\n", + "成功获取 301139.SZ 的数据\n", + "成功获取 301141.SZ 的数据\n", + "成功获取 301148.SZ 的数据\n", + "成功获取 301149.SZ 的数据\n", + "成功获取 301150.SZ 的数据\n", + "成功获取 301151.SZ 的数据\n", + "成功获取 301152.SZ 的数据\n", + "成功获取 301153.SZ 的数据\n", + "成功获取 301155.SZ 的数据\n", + "成功获取 301156.SZ 的数据\n", + "成功获取 301157.SZ 的数据\n", + "成功获取 301158.SZ 的数据\n", + "成功获取 301159.SZ 的数据\n", + "成功获取 301160.SZ 的数据\n", + "成功获取 301161.SZ 的数据\n", + "成功获取 301162.SZ 的数据\n", + "成功获取 301163.SZ 的数据\n", + "成功获取 301165.SZ 的数据\n", + "成功获取 301166.SZ 的数据\n", + "成功获取 301167.SZ 的数据\n", + "成功获取 301168.SZ 的数据\n", + "成功获取 301169.SZ 的数据\n", + "成功获取 301170.SZ 的数据\n", + "成功获取 301171.SZ 的数据\n", + "成功获取 301172.SZ 的数据\n", + "成功获取 301175.SZ 的数据\n", + "成功获取 301176.SZ 的数据\n", + "成功获取 301177.SZ 的数据\n", + "成功获取 301178.SZ 的数据\n", + "成功获取 301179.SZ 的数据\n", + "成功获取 301180.SZ 的数据\n", + "成功获取 301181.SZ 的数据\n", + "成功获取 301182.SZ 的数据\n", + "成功获取 301183.SZ 的数据\n", + "成功获取 301185.SZ 的数据\n", + "成功获取 301186.SZ 的数据\n", + "成功获取 301187.SZ 的数据\n", + "成功获取 301188.SZ 的数据\n", + "成功获取 301189.SZ 的数据\n", + "成功获取 301190.SZ 的数据\n", + "成功获取 301191.SZ 的数据\n", + "成功获取 301192.SZ 的数据\n", + "成功获取 301193.SZ 的数据\n", + "成功获取 301195.SZ 的数据\n", + "成功获取 301196.SZ 的数据\n", + "成功获取 301197.SZ 的数据\n", + "成功获取 301198.SZ 的数据\n", + "成功获取 301199.SZ 的数据\n", + "成功获取 301200.SZ 的数据\n", + "成功获取 301201.SZ 的数据\n", + "成功获取 301202.SZ 的数据\n", + "成功获取 301203.SZ 的数据\n", + "成功获取 301205.SZ 的数据\n", + "成功获取 301206.SZ 的数据\n", + "成功获取 301207.SZ 的数据\n", + "成功获取 301208.SZ 的数据\n", + "成功获取 301209.SZ 的数据\n", + "成功获取 301210.SZ 的数据\n", + "成功获取 301211.SZ 的数据\n", + "成功获取 301212.SZ 的数据\n", + "成功获取 301213.SZ 的数据\n", + "成功获取 301215.SZ 的数据\n", + "成功获取 301216.SZ 的数据\n", + "成功获取 301217.SZ 的数据\n", + "成功获取 301218.SZ 的数据\n", + "成功获取 301219.SZ 的数据\n", + "成功获取 301220.SZ 的数据\n", + "成功获取 301221.SZ 的数据\n", + "成功获取 301222.SZ 的数据\n", + "成功获取 301223.SZ 的数据\n", + "成功获取 301225.SZ 的数据\n", + "成功获取 301226.SZ 的数据\n", + "成功获取 301227.SZ 的数据\n", + "成功获取 301228.SZ 的数据\n", + "成功获取 301229.SZ 的数据\n", + "成功获取 301230.SZ 的数据\n", + "成功获取 301231.SZ 的数据\n", + "成功获取 301232.SZ 的数据\n", + "成功获取 301233.SZ 的数据\n", + "成功获取 301234.SZ 的数据\n", + "成功获取 301235.SZ 的数据\n", + "成功获取 301236.SZ 的数据\n", + "成功获取 301237.SZ 的数据\n", + "成功获取 301238.SZ 的数据\n", + "成功获取 301239.SZ 的数据\n", + "成功获取 301246.SZ 的数据\n", + "成功获取 301248.SZ 的数据\n", + "成功获取 301251.SZ 的数据\n", + "成功获取 301252.SZ 的数据\n", + "成功获取 301255.SZ 的数据\n", + "成功获取 301256.SZ 的数据\n", + "成功获取 301257.SZ 的数据\n", + "成功获取 301258.SZ 的数据\n", + "成功获取 301259.SZ 的数据\n", + "成功获取 301260.SZ 的数据\n", + "成功获取 301261.SZ 的数据\n", + "成功获取 301262.SZ 的数据\n", + "成功获取 301263.SZ 的数据\n", + "成功获取 301265.SZ 的数据\n", + "成功获取 301266.SZ 的数据\n", + "成功获取 301267.SZ 的数据\n", + "成功获取 301268.SZ 的数据\n", + "成功获取 301269.SZ 的数据\n", + "成功获取 301270.SZ 的数据\n", + "成功获取 301272.SZ 的数据\n", + "成功获取 301273.SZ 的数据\n", + "成功获取 301276.SZ 的数据\n", + "成功获取 301277.SZ 的数据\n", + "成功获取 301278.SZ 的数据\n", + "成功获取 301279.SZ 的数据\n", + "成功获取 301280.SZ 的数据\n", + "成功获取 301281.SZ 的数据\n", + "成功获取 301282.SZ 的数据\n", + "成功获取 301283.SZ 的数据\n", + "成功获取 301285.SZ 的数据\n", + "成功获取 301286.SZ 的数据\n", + "成功获取 301287.SZ 的数据\n", + "成功获取 301288.SZ 的数据\n", + "成功获取 301289.SZ 的数据\n", + "成功获取 301290.SZ 的数据\n", + "成功获取 301291.SZ 的数据\n", + "成功获取 301292.SZ 的数据\n", + "成功获取 301293.SZ 的数据\n", + "成功获取 301295.SZ 的数据\n", + "成功获取 301296.SZ 的数据\n", + "成功获取 301297.SZ 的数据\n", + "成功获取 301298.SZ 的数据\n", + "成功获取 301299.SZ 的数据\n", + "成功获取 301300.SZ 的数据\n", + "成功获取 301301.SZ 的数据\n", + "成功获取 301302.SZ 的数据\n", + "成功获取 301303.SZ 的数据\n", + "成功获取 301305.SZ 的数据\n", + "成功获取 301306.SZ 的数据\n", + "成功获取 301307.SZ 的数据\n", + "成功获取 301308.SZ 的数据\n", + "成功获取 301309.SZ 的数据\n", + "成功获取 301310.SZ 的数据\n", + "成功获取 301311.SZ 的数据\n", + "成功获取 301312.SZ 的数据\n", + "成功获取 301313.SZ 的数据\n", + "成功获取 301314.SZ 的数据\n", + "成功获取 301315.SZ 的数据\n", + "已调用300次API,等待 19.67 秒以满足速率限制...\n", + "成功获取 301316.SZ 的数据\n", + "成功获取 301317.SZ 的数据\n", + "成功获取 301318.SZ 的数据\n", + "成功获取 301319.SZ 的数据\n", + "成功获取 301320.SZ 的数据\n", + "成功获取 301321.SZ 的数据\n", + "成功获取 301322.SZ 的数据\n", + "成功获取 301323.SZ 的数据\n", + "成功获取 301325.SZ 的数据\n", + "成功获取 301326.SZ 的数据\n", + "成功获取 301327.SZ 的数据\n", + "成功获取 301328.SZ 的数据\n", + "成功获取 301329.SZ 的数据\n", + "成功获取 301330.SZ 的数据\n", + "成功获取 301331.SZ 的数据\n", + "成功获取 301332.SZ 的数据\n", + "成功获取 301333.SZ 的数据\n", + "成功获取 301335.SZ 的数据\n", + "成功获取 301336.SZ 的数据\n", + "成功获取 301337.SZ 的数据\n", + "成功获取 301338.SZ 的数据\n", + "成功获取 301339.SZ 的数据\n", + "成功获取 301345.SZ 的数据\n", + "成功获取 301348.SZ 的数据\n", + "成功获取 301349.SZ 的数据\n", + "成功获取 301353.SZ 的数据\n", + "成功获取 301355.SZ 的数据\n", + "成功获取 301356.SZ 的数据\n", + "成功获取 301357.SZ 的数据\n", + "成功获取 301358.SZ 的数据\n", + "成功获取 301359.SZ 的数据\n", + "成功获取 301360.SZ 的数据\n", + "成功获取 301361.SZ 的数据\n", + "成功获取 301362.SZ 的数据\n", + "成功获取 301363.SZ 的数据\n", + "成功获取 301365.SZ 的数据\n", + "成功获取 301366.SZ 的数据\n", + "成功获取 301367.SZ 的数据\n", + "成功获取 301368.SZ 的数据\n", + "成功获取 301369.SZ 的数据\n", + "成功获取 301370.SZ 的数据\n", + "成功获取 301371.SZ 的数据\n", + "成功获取 301372.SZ 的数据\n", + "成功获取 301373.SZ 的数据\n", + "成功获取 301376.SZ 的数据\n", + "成功获取 301377.SZ 的数据\n", + "成功获取 301378.SZ 的数据\n", + "成功获取 301379.SZ 的数据\n", + "成功获取 301380.SZ 的数据\n", + "成功获取 301381.SZ 的数据\n", + "成功获取 301382.SZ 的数据\n", + "成功获取 301383.SZ 的数据\n", + "成功获取 301386.SZ 的数据\n", + "成功获取 301387.SZ 的数据\n", + "成功获取 301388.SZ 的数据\n", + "成功获取 301389.SZ 的数据\n", + "成功获取 301390.SZ 的数据\n", + "成功获取 301391.SZ 的数据\n", + "成功获取 301392.SZ 的数据\n", + "成功获取 301393.SZ 的数据\n", + "成功获取 301395.SZ 的数据\n", + "成功获取 301396.SZ 的数据\n", + "成功获取 301397.SZ 的数据\n", + "成功获取 301398.SZ 的数据\n", + "成功获取 301399.SZ 的数据\n", + "成功获取 301408.SZ 的数据\n", + "成功获取 301413.SZ 的数据\n", + "成功获取 301418.SZ 的数据\n", + "成功获取 301419.SZ 的数据\n", + "成功获取 301421.SZ 的数据\n", + "成功获取 301428.SZ 的数据\n", + "成功获取 301429.SZ 的数据\n", + "成功获取 301439.SZ 的数据\n", + "成功获取 301446.SZ 的数据\n", + "成功获取 301448.SZ 的数据\n", + "成功获取 301456.SZ 的数据\n", + "成功获取 301458.SZ 的数据\n", + "成功获取 301459.SZ 的数据\n", + "成功获取 301468.SZ 的数据\n", + "成功获取 301469.SZ 的数据\n", + "成功获取 301486.SZ 的数据\n", + "成功获取 301487.SZ 的数据\n", + "成功获取 301488.SZ 的数据\n", + "成功获取 301489.SZ 的数据\n", + "成功获取 301498.SZ 的数据\n", + "成功获取 301499.SZ 的数据\n", + "成功获取 301500.SZ 的数据\n", + "成功获取 301502.SZ 的数据\n", + "成功获取 301503.SZ 的数据\n", + "成功获取 301505.SZ 的数据\n", + "成功获取 301507.SZ 的数据\n", + "成功获取 301508.SZ 的数据\n", + "成功获取 301509.SZ 的数据\n", + "成功获取 301510.SZ 的数据\n", + "成功获取 301511.SZ 的数据\n", + "成功获取 301512.SZ 的数据\n", + "成功获取 301515.SZ 的数据\n", + "成功获取 301516.SZ 的数据\n", + "成功获取 301517.SZ 的数据\n", + "成功获取 301518.SZ 的数据\n", + "成功获取 301519.SZ 的数据\n", + "成功获取 301520.SZ 的数据\n", + "成功获取 301522.SZ 的数据\n", + "成功获取 301525.SZ 的数据\n", + "成功获取 301526.SZ 的数据\n", + "成功获取 301528.SZ 的数据\n", + "成功获取 301529.SZ 的数据\n", + "成功获取 301533.SZ 的数据\n", + "成功获取 301536.SZ 的数据\n", + "成功获取 301538.SZ 的数据\n", + "成功获取 301539.SZ 的数据\n", + "成功获取 301548.SZ 的数据\n", + "成功获取 301550.SZ 的数据\n", + "成功获取 301551.SZ 的数据\n", + "成功获取 301552.SZ 的数据\n", + "成功获取 301555.SZ 的数据\n", + "成功获取 301556.SZ 的数据\n", + "成功获取 301558.SZ 的数据\n", + "成功获取 301559.SZ 的数据\n", + "成功获取 301565.SZ 的数据\n", + "成功获取 301566.SZ 的数据\n", + "成功获取 301567.SZ 的数据\n", + "成功获取 301568.SZ 的数据\n", + "成功获取 301571.SZ 的数据\n", + "成功获取 301577.SZ 的数据\n", + "成功获取 301578.SZ 的数据\n", + "成功获取 301580.SZ 的数据\n", + "成功获取 301581.SZ 的数据\n", + "成功获取 301585.SZ 的数据\n", + "成功获取 301586.SZ 的数据\n", + "成功获取 301587.SZ 的数据\n", + "成功获取 301588.SZ 的数据\n", + "成功获取 301589.SZ 的数据\n", + "成功获取 301591.SZ 的数据\n", + "成功获取 301592.SZ 的数据\n", + "成功获取 301596.SZ 的数据\n", + "成功获取 301598.SZ 的数据\n", + "成功获取 301600.SZ 的数据\n", + "成功获取 301601.SZ 的数据\n", + "成功获取 301602.SZ 的数据\n", + "成功获取 301603.SZ 的数据\n", + "成功获取 301606.SZ 的数据\n", + "成功获取 301607.SZ 的数据\n", + "成功获取 301608.SZ 的数据\n", + "成功获取 301611.SZ 的数据\n", + "成功获取 301613.SZ 的数据\n", + "成功获取 301617.SZ 的数据\n", + "成功获取 301618.SZ 的数据\n", + "成功获取 301622.SZ 的数据\n", + "成功获取 301626.SZ 的数据\n", + "成功获取 301628.SZ 的数据\n", + "成功获取 301631.SZ 的数据\n", + "成功获取 301633.SZ 的数据\n", + "成功获取 430017.BJ 的数据\n", + "成功获取 430047.BJ 的数据\n", + "成功获取 430090.BJ 的数据\n", + "成功获取 430139.BJ 的数据\n", + "成功获取 430198.BJ 的数据\n", + "成功获取 430300.BJ 的数据\n", + "成功获取 430418.BJ 的数据\n", + "成功获取 430425.BJ 的数据\n", + "成功获取 430476.BJ 的数据\n", + "成功获取 430478.BJ 的数据\n", + "成功获取 430489.BJ 的数据\n", + "成功获取 430510.BJ 的数据\n", + "成功获取 430556.BJ 的数据\n", + "成功获取 430564.BJ 的数据\n", + "成功获取 430685.BJ 的数据\n", + "成功获取 430718.BJ 的数据\n", + "成功获取 600000.SH 的数据\n", + "成功获取 600004.SH 的数据\n", + "成功获取 600006.SH 的数据\n", + "成功获取 600007.SH 的数据\n", + "成功获取 600008.SH 的数据\n", + "成功获取 600009.SH 的数据\n", + "成功获取 600010.SH 的数据\n", + "成功获取 600011.SH 的数据\n", + "成功获取 600012.SH 的数据\n", + "成功获取 600015.SH 的数据\n", + "成功获取 600016.SH 的数据\n", + "成功获取 600017.SH 的数据\n", + "成功获取 600018.SH 的数据\n", + "成功获取 600019.SH 的数据\n", + "成功获取 600020.SH 的数据\n", + "成功获取 600021.SH 的数据\n", + "成功获取 600022.SH 的数据\n", + "成功获取 600023.SH 的数据\n", + "成功获取 600025.SH 的数据\n", + "成功获取 600026.SH 的数据\n", + "成功获取 600027.SH 的数据\n", + "成功获取 600028.SH 的数据\n", + "成功获取 600029.SH 的数据\n", + "成功获取 600030.SH 的数据\n", + "成功获取 600031.SH 的数据\n", + "成功获取 600032.SH 的数据\n", + "成功获取 600033.SH 的数据\n", + "成功获取 600035.SH 的数据\n", + "成功获取 600036.SH 的数据\n", + "成功获取 600037.SH 的数据\n", + "成功获取 600038.SH 的数据\n", + "成功获取 600039.SH 的数据\n", + "成功获取 600048.SH 的数据\n", + "成功获取 600050.SH 的数据\n", + "成功获取 600051.SH 的数据\n", + "成功获取 600052.SH 的数据\n", + "成功获取 600053.SH 的数据\n", + "成功获取 600054.SH 的数据\n", + "成功获取 600055.SH 的数据\n", + "成功获取 600056.SH 的数据\n", + "成功获取 600057.SH 的数据\n", + "成功获取 600058.SH 的数据\n", + "成功获取 600059.SH 的数据\n", + "成功获取 600060.SH 的数据\n", + "成功获取 600061.SH 的数据\n", + "成功获取 600062.SH 的数据\n", + "成功获取 600063.SH 的数据\n", + "成功获取 600064.SH 的数据\n", + "成功获取 600066.SH 的数据\n", + "成功获取 600067.SH 的数据\n", + "成功获取 600070.SH 的数据\n", + "成功获取 600071.SH 的数据\n", + "成功获取 600072.SH 的数据\n", + "成功获取 600073.SH 的数据\n", + "成功获取 600075.SH 的数据\n", + "成功获取 600076.SH 的数据\n", + "成功获取 600078.SH 的数据\n", + "成功获取 600079.SH 的数据\n", + "成功获取 600080.SH 的数据\n", + "成功获取 600081.SH 的数据\n", + "成功获取 600082.SH 的数据\n", + "成功获取 600083.SH 的数据\n", + "成功获取 600084.SH 的数据\n", + "成功获取 600085.SH 的数据\n", + "成功获取 600088.SH 的数据\n", + "成功获取 600089.SH 的数据\n", + "成功获取 600094.SH 的数据\n", + "成功获取 600095.SH 的数据\n", + "成功获取 600096.SH 的数据\n", + "成功获取 600097.SH 的数据\n", + "成功获取 600098.SH 的数据\n", + "成功获取 600099.SH 的数据\n", + "成功获取 600100.SH 的数据\n", + "成功获取 600101.SH 的数据\n", + "成功获取 600103.SH 的数据\n", + "成功获取 600104.SH 的数据\n", + "成功获取 600105.SH 的数据\n", + "成功获取 600106.SH 的数据\n", + "成功获取 600107.SH 的数据\n", + "成功获取 600108.SH 的数据\n", + "成功获取 600109.SH 的数据\n", + "成功获取 600110.SH 的数据\n", + "成功获取 600111.SH 的数据\n", + "成功获取 600113.SH 的数据\n", + "成功获取 600114.SH 的数据\n", + "成功获取 600115.SH 的数据\n", + "成功获取 600116.SH 的数据\n", + "成功获取 600117.SH 的数据\n", + "成功获取 600118.SH 的数据\n", + "成功获取 600119.SH 的数据\n", + "成功获取 600120.SH 的数据\n", + "成功获取 600121.SH 的数据\n", + "成功获取 600123.SH 的数据\n", + "成功获取 600125.SH 的数据\n", + "成功获取 600126.SH 的数据\n", + "成功获取 600127.SH 的数据\n", + "成功获取 600128.SH 的数据\n", + "成功获取 600129.SH 的数据\n", + "成功获取 600130.SH 的数据\n", + "成功获取 600131.SH 的数据\n", + "成功获取 600132.SH 的数据\n", + "成功获取 600133.SH 的数据\n", + "成功获取 600135.SH 的数据\n", + "成功获取 600136.SH 的数据\n", + "成功获取 600137.SH 的数据\n", + "成功获取 600138.SH 的数据\n", + "成功获取 600141.SH 的数据\n", + "成功获取 600143.SH 的数据\n", + "成功获取 600148.SH 的数据\n", + "成功获取 600149.SH 的数据\n", + "成功获取 600150.SH 的数据\n", + "成功获取 600151.SH 的数据\n", + "成功获取 600152.SH 的数据\n", + "成功获取 600153.SH 的数据\n", + "成功获取 600155.SH 的数据\n", + "成功获取 600156.SH 的数据\n", + "成功获取 600157.SH 的数据\n", + "成功获取 600158.SH 的数据\n", + "成功获取 600159.SH 的数据\n", + "成功获取 600160.SH 的数据\n", + "成功获取 600161.SH 的数据\n", + "成功获取 600162.SH 的数据\n", + "成功获取 600163.SH 的数据\n", + "成功获取 600165.SH 的数据\n", + "成功获取 600166.SH 的数据\n", + "成功获取 600167.SH 的数据\n", + "成功获取 600168.SH 的数据\n", + "成功获取 600169.SH 的数据\n", + "成功获取 600170.SH 的数据\n", + "成功获取 600171.SH 的数据\n", + "成功获取 600172.SH 的数据\n", + "已调用300次API,等待 21.99 秒以满足速率限制...\n", + "成功获取 600173.SH 的数据\n", + "成功获取 600176.SH 的数据\n", + "成功获取 600177.SH 的数据\n", + "成功获取 600178.SH 的数据\n", + "成功获取 600179.SH 的数据\n", + "成功获取 600180.SH 的数据\n", + "成功获取 600182.SH 的数据\n", + "成功获取 600183.SH 的数据\n", + "成功获取 600184.SH 的数据\n", + "成功获取 600185.SH 的数据\n", + "成功获取 600186.SH 的数据\n", + "成功获取 600187.SH 的数据\n", + "成功获取 600188.SH 的数据\n", + "成功获取 600189.SH 的数据\n", + "成功获取 600190.SH 的数据\n", + "成功获取 600191.SH 的数据\n", + "成功获取 600192.SH 的数据\n", + "成功获取 600193.SH 的数据\n", + "成功获取 600195.SH 的数据\n", + "成功获取 600196.SH 的数据\n", + "成功获取 600197.SH 的数据\n", + "成功获取 600198.SH 的数据\n", + "成功获取 600199.SH 的数据\n", + "成功获取 600200.SH 的数据\n", + "成功获取 600201.SH 的数据\n", + "成功获取 600202.SH 的数据\n", + "成功获取 600203.SH 的数据\n", + "成功获取 600206.SH 的数据\n", + "成功获取 600207.SH 的数据\n", + "成功获取 600208.SH 的数据\n", + "成功获取 600210.SH 的数据\n", + "成功获取 600211.SH 的数据\n", + "成功获取 600212.SH 的数据\n", + "成功获取 600215.SH 的数据\n", + "成功获取 600216.SH 的数据\n", + "成功获取 600217.SH 的数据\n", + "成功获取 600218.SH 的数据\n", + "成功获取 600219.SH 的数据\n", + "成功获取 600221.SH 的数据\n", + "成功获取 600222.SH 的数据\n", + "成功获取 600223.SH 的数据\n", + "成功获取 600225.SH 的数据\n", + "成功获取 600226.SH 的数据\n", + "成功获取 600227.SH 的数据\n", + "成功获取 600228.SH 的数据\n", + "成功获取 600229.SH 的数据\n", + "成功获取 600230.SH 的数据\n", + "成功获取 600231.SH 的数据\n", + "成功获取 600232.SH 的数据\n", + "成功获取 600233.SH 的数据\n", + "成功获取 600234.SH 的数据\n", + "成功获取 600235.SH 的数据\n", + "成功获取 600236.SH 的数据\n", + "成功获取 600237.SH 的数据\n", + "成功获取 600238.SH 的数据\n", + "成功获取 600239.SH 的数据\n", + "成功获取 600241.SH 的数据\n", + "成功获取 600243.SH 的数据\n", + "成功获取 600246.SH 的数据\n", + "成功获取 600248.SH 的数据\n", + "成功获取 600249.SH 的数据\n", + "成功获取 600250.SH 的数据\n", + "成功获取 600251.SH 的数据\n", + "成功获取 600252.SH 的数据\n", + "成功获取 600255.SH 的数据\n", + "成功获取 600256.SH 的数据\n", + "成功获取 600257.SH 的数据\n", + "成功获取 600258.SH 的数据\n", + "成功获取 600259.SH 的数据\n", + "成功获取 600261.SH 的数据\n", + "成功获取 600262.SH 的数据\n", + "成功获取 600265.SH 的数据\n", + "成功获取 600266.SH 的数据\n", + "成功获取 600267.SH 的数据\n", + "成功获取 600268.SH 的数据\n", + "成功获取 600269.SH 的数据\n", + "成功获取 600271.SH 的数据\n", + "成功获取 600272.SH 的数据\n", + "成功获取 600273.SH 的数据\n", + "成功获取 600276.SH 的数据\n", + "成功获取 600278.SH 的数据\n", + "成功获取 600279.SH 的数据\n", + "成功获取 600280.SH 的数据\n", + "成功获取 600281.SH 的数据\n", + "成功获取 600282.SH 的数据\n", + "成功获取 600283.SH 的数据\n", + "成功获取 600284.SH 的数据\n", + "成功获取 600285.SH 的数据\n", + "成功获取 600287.SH 的数据\n", + "成功获取 600288.SH 的数据\n", + "成功获取 600289.SH 的数据\n", + "成功获取 600292.SH 的数据\n", + "成功获取 600293.SH 的数据\n", + "成功获取 600295.SH 的数据\n", + "成功获取 600298.SH 的数据\n", + "成功获取 600299.SH 的数据\n", + "成功获取 600300.SH 的数据\n", + "成功获取 600301.SH 的数据\n", + "成功获取 600302.SH 的数据\n", + "成功获取 600303.SH 的数据\n", + "成功获取 600305.SH 的数据\n", + "成功获取 600307.SH 的数据\n", + "成功获取 600308.SH 的数据\n", + "成功获取 600309.SH 的数据\n", + "成功获取 600310.SH 的数据\n", + "成功获取 600312.SH 的数据\n", + "成功获取 600313.SH 的数据\n", + "成功获取 600315.SH 的数据\n", + "成功获取 600316.SH 的数据\n", + "成功获取 600318.SH 的数据\n", + "成功获取 600319.SH 的数据\n", + "成功获取 600320.SH 的数据\n", + "成功获取 600322.SH 的数据\n", + "成功获取 600323.SH 的数据\n", + "成功获取 600325.SH 的数据\n", + "成功获取 600326.SH 的数据\n", + "成功获取 600327.SH 的数据\n", + "成功获取 600328.SH 的数据\n", + "成功获取 600329.SH 的数据\n", + "成功获取 600330.SH 的数据\n", + "成功获取 600331.SH 的数据\n", + "成功获取 600332.SH 的数据\n", + "成功获取 600333.SH 的数据\n", + "成功获取 600335.SH 的数据\n", + "成功获取 600336.SH 的数据\n", + "成功获取 600337.SH 的数据\n", + "成功获取 600338.SH 的数据\n", + "成功获取 600339.SH 的数据\n", + "成功获取 600340.SH 的数据\n", + "成功获取 600343.SH 的数据\n", + "成功获取 600345.SH 的数据\n", + "成功获取 600346.SH 的数据\n", + "成功获取 600348.SH 的数据\n", + "成功获取 600350.SH 的数据\n", + "成功获取 600351.SH 的数据\n", + "成功获取 600352.SH 的数据\n", + "成功获取 600353.SH 的数据\n", + "成功获取 600354.SH 的数据\n", + "成功获取 600355.SH 的数据\n", + "成功获取 600356.SH 的数据\n", + "成功获取 600358.SH 的数据\n", + "成功获取 600359.SH 的数据\n", + "成功获取 600360.SH 的数据\n", + "成功获取 600361.SH 的数据\n", + "成功获取 600362.SH 的数据\n", + "成功获取 600363.SH 的数据\n", + "成功获取 600365.SH 的数据\n", + "成功获取 600366.SH 的数据\n", + "成功获取 600367.SH 的数据\n", + "成功获取 600368.SH 的数据\n", + "成功获取 600369.SH 的数据\n", + "成功获取 600370.SH 的数据\n", + "成功获取 600371.SH 的数据\n", + "成功获取 600372.SH 的数据\n", + "成功获取 600373.SH 的数据\n", + "成功获取 600375.SH 的数据\n", + "成功获取 600376.SH 的数据\n", + "成功获取 600377.SH 的数据\n", + "成功获取 600378.SH 的数据\n", + "成功获取 600379.SH 的数据\n", + "成功获取 600380.SH 的数据\n", + "成功获取 600381.SH 的数据\n", + "成功获取 600382.SH 的数据\n", + "成功获取 600383.SH 的数据\n", + "成功获取 600386.SH 的数据\n", + "成功获取 600387.SH 的数据\n", + "成功获取 600388.SH 的数据\n", + "成功获取 600389.SH 的数据\n", + "成功获取 600390.SH 的数据\n", + "成功获取 600391.SH 的数据\n", + "成功获取 600392.SH 的数据\n", + "成功获取 600395.SH 的数据\n", + "成功获取 600396.SH 的数据\n", + "成功获取 600397.SH 的数据\n", + "成功获取 600398.SH 的数据\n", + "成功获取 600399.SH 的数据\n", + "成功获取 600400.SH 的数据\n", + "成功获取 600403.SH 的数据\n", + "成功获取 600405.SH 的数据\n", + "成功获取 600406.SH 的数据\n", + "成功获取 600408.SH 的数据\n", + "成功获取 600409.SH 的数据\n", + "成功获取 600410.SH 的数据\n", + "成功获取 600415.SH 的数据\n", + "成功获取 600416.SH 的数据\n", + "成功获取 600418.SH 的数据\n", + "成功获取 600419.SH 的数据\n", + "成功获取 600420.SH 的数据\n", + "成功获取 600421.SH 的数据\n", + "成功获取 600422.SH 的数据\n", + "成功获取 600423.SH 的数据\n", + "成功获取 600425.SH 的数据\n", + "成功获取 600426.SH 的数据\n", + "成功获取 600428.SH 的数据\n", + "成功获取 600429.SH 的数据\n", + "成功获取 600433.SH 的数据\n", + "成功获取 600435.SH 的数据\n", + "成功获取 600436.SH 的数据\n", + "成功获取 600438.SH 的数据\n", + "成功获取 600439.SH 的数据\n", + "成功获取 600444.SH 的数据\n", + "成功获取 600446.SH 的数据\n", + "成功获取 600448.SH 的数据\n", + "成功获取 600449.SH 的数据\n", + "成功获取 600452.SH 的数据\n", + "成功获取 600455.SH 的数据\n", + "成功获取 600456.SH 的数据\n", + "成功获取 600458.SH 的数据\n", + "成功获取 600459.SH 的数据\n", + "成功获取 600460.SH 的数据\n", + "成功获取 600461.SH 的数据\n", + "成功获取 600462.SH 的数据\n", + "成功获取 600463.SH 的数据\n", + "成功获取 600467.SH 的数据\n", + "成功获取 600468.SH 的数据\n", + "成功获取 600469.SH 的数据\n", + "成功获取 600470.SH 的数据\n", + "成功获取 600475.SH 的数据\n", + "成功获取 600476.SH 的数据\n", + "成功获取 600477.SH 的数据\n", + "成功获取 600478.SH 的数据\n", + "成功获取 600479.SH 的数据\n", + "成功获取 600480.SH 的数据\n", + "成功获取 600481.SH 的数据\n", + "成功获取 600482.SH 的数据\n", + "成功获取 600483.SH 的数据\n", + "成功获取 600486.SH 的数据\n", + "成功获取 600487.SH 的数据\n", + "成功获取 600488.SH 的数据\n", + "成功获取 600489.SH 的数据\n", + "成功获取 600490.SH 的数据\n", + "成功获取 600491.SH 的数据\n", + "成功获取 600493.SH 的数据\n", + "成功获取 600495.SH 的数据\n", + "成功获取 600496.SH 的数据\n", + "成功获取 600497.SH 的数据\n", + "成功获取 600498.SH 的数据\n", + "成功获取 600499.SH 的数据\n", + "成功获取 600500.SH 的数据\n", + "成功获取 600501.SH 的数据\n", + "成功获取 600502.SH 的数据\n", + "成功获取 600503.SH 的数据\n", + "成功获取 600505.SH 的数据\n", + "成功获取 600506.SH 的数据\n", + "成功获取 600507.SH 的数据\n", + "成功获取 600508.SH 的数据\n", + "成功获取 600509.SH 的数据\n", + "成功获取 600510.SH 的数据\n", + "成功获取 600511.SH 的数据\n", + "成功获取 600512.SH 的数据\n", + "成功获取 600513.SH 的数据\n", + "成功获取 600515.SH 的数据\n", + "成功获取 600516.SH 的数据\n", + "成功获取 600517.SH 的数据\n", + "成功获取 600518.SH 的数据\n", + "成功获取 600519.SH 的数据\n", + "成功获取 600520.SH 的数据\n", + "成功获取 600521.SH 的数据\n", + "成功获取 600522.SH 的数据\n", + "成功获取 600523.SH 的数据\n", + "成功获取 600525.SH 的数据\n", + "成功获取 600526.SH 的数据\n", + "成功获取 600527.SH 的数据\n", + "成功获取 600528.SH 的数据\n", + "成功获取 600529.SH 的数据\n", + "成功获取 600530.SH 的数据\n", + "成功获取 600531.SH 的数据\n", + "成功获取 600533.SH 的数据\n", + "成功获取 600535.SH 的数据\n", + "成功获取 600536.SH 的数据\n", + "成功获取 600537.SH 的数据\n", + "成功获取 600538.SH 的数据\n", + "成功获取 600539.SH 的数据\n", + "成功获取 600540.SH 的数据\n", + "成功获取 600543.SH 的数据\n", + "成功获取 600545.SH 的数据\n", + "成功获取 600546.SH 的数据\n", + "成功获取 600547.SH 的数据\n", + "成功获取 600548.SH 的数据\n", + "成功获取 600549.SH 的数据\n", + "成功获取 600550.SH 的数据\n", + "成功获取 600551.SH 的数据\n", + "成功获取 600552.SH 的数据\n", + "成功获取 600556.SH 的数据\n", + "成功获取 600557.SH 的数据\n", + "成功获取 600558.SH 的数据\n", + "成功获取 600559.SH 的数据\n", + "成功获取 600560.SH 的数据\n", + "成功获取 600561.SH 的数据\n", + "成功获取 600562.SH 的数据\n", + "成功获取 600563.SH 的数据\n", + "成功获取 600566.SH 的数据\n", + "成功获取 600567.SH 的数据\n", + "成功获取 600568.SH 的数据\n", + "成功获取 600569.SH 的数据\n", + "成功获取 600570.SH 的数据\n", + "成功获取 600571.SH 的数据\n", + "成功获取 600572.SH 的数据\n", + "成功获取 600573.SH 的数据\n", + "成功获取 600575.SH 的数据\n", + "已调用300次API,等待 21.44 秒以满足速率限制...\n", + "成功获取 600576.SH 的数据\n", + "成功获取 600577.SH 的数据\n", + "成功获取 600578.SH 的数据\n", + "成功获取 600579.SH 的数据\n", + "成功获取 600580.SH 的数据\n", + "成功获取 600581.SH 的数据\n", + "成功获取 600582.SH 的数据\n", + "成功获取 600583.SH 的数据\n", + "成功获取 600584.SH 的数据\n", + "成功获取 600585.SH 的数据\n", + "成功获取 600586.SH 的数据\n", + "成功获取 600587.SH 的数据\n", + "成功获取 600588.SH 的数据\n", + "成功获取 600589.SH 的数据\n", + "成功获取 600590.SH 的数据\n", + "成功获取 600592.SH 的数据\n", + "成功获取 600593.SH 的数据\n", + "成功获取 600594.SH 的数据\n", + "成功获取 600595.SH 的数据\n", + "成功获取 600596.SH 的数据\n", + "成功获取 600597.SH 的数据\n", + "成功获取 600598.SH 的数据\n", + "成功获取 600599.SH 的数据\n", + "成功获取 600600.SH 的数据\n", + "成功获取 600601.SH 的数据\n", + "成功获取 600602.SH 的数据\n", + "成功获取 600603.SH 的数据\n", + "成功获取 600604.SH 的数据\n", + "成功获取 600605.SH 的数据\n", + "成功获取 600606.SH 的数据\n", + "成功获取 600608.SH 的数据\n", + "成功获取 600609.SH 的数据\n", + "成功获取 600610.SH 的数据\n", + "成功获取 600611.SH 的数据\n", + "成功获取 600612.SH 的数据\n", + "成功获取 600613.SH 的数据\n", + "成功获取 600615.SH 的数据\n", + "成功获取 600616.SH 的数据\n", + "成功获取 600617.SH 的数据\n", + "成功获取 600618.SH 的数据\n", + "成功获取 600619.SH 的数据\n", + "成功获取 600620.SH 的数据\n", + "成功获取 600621.SH 的数据\n", + "成功获取 600622.SH 的数据\n", + "成功获取 600623.SH 的数据\n", + "成功获取 600624.SH 的数据\n", + "成功获取 600626.SH 的数据\n", + "成功获取 600628.SH 的数据\n", + "成功获取 600629.SH 的数据\n", + "成功获取 600630.SH 的数据\n", + "成功获取 600633.SH 的数据\n", + "成功获取 600635.SH 的数据\n", + "成功获取 600636.SH 的数据\n", + "成功获取 600637.SH 的数据\n", + "成功获取 600638.SH 的数据\n", + "成功获取 600639.SH 的数据\n", + "成功获取 600640.SH 的数据\n", + "成功获取 600641.SH 的数据\n", + "成功获取 600642.SH 的数据\n", + "成功获取 600643.SH 的数据\n", + "成功获取 600644.SH 的数据\n", + "成功获取 600645.SH 的数据\n", + "成功获取 600648.SH 的数据\n", + "成功获取 600649.SH 的数据\n", + "成功获取 600650.SH 的数据\n", + "成功获取 600651.SH 的数据\n", + "成功获取 600653.SH 的数据\n", + "成功获取 600654.SH 的数据\n", + "成功获取 600655.SH 的数据\n", + "成功获取 600657.SH 的数据\n", + "成功获取 600658.SH 的数据\n", + "成功获取 600660.SH 的数据\n", + "成功获取 600661.SH 的数据\n", + "成功获取 600662.SH 的数据\n", + "成功获取 600663.SH 的数据\n", + "成功获取 600664.SH 的数据\n", + "成功获取 600665.SH 的数据\n", + "成功获取 600666.SH 的数据\n", + "成功获取 600667.SH 的数据\n", + "成功获取 600668.SH 的数据\n", + "成功获取 600671.SH 的数据\n", + "成功获取 600673.SH 的数据\n", + "成功获取 600674.SH 的数据\n", + "成功获取 600675.SH 的数据\n", + "成功获取 600676.SH 的数据\n", + "成功获取 600678.SH 的数据\n", + "成功获取 600679.SH 的数据\n", + "成功获取 600681.SH 的数据\n", + "成功获取 600682.SH 的数据\n", + "成功获取 600683.SH 的数据\n", + "成功获取 600684.SH 的数据\n", + "成功获取 600685.SH 的数据\n", + "成功获取 600686.SH 的数据\n", + "成功获取 600688.SH 的数据\n", + "成功获取 600689.SH 的数据\n", + "成功获取 600690.SH 的数据\n", + "成功获取 600691.SH 的数据\n", + "成功获取 600692.SH 的数据\n", + "成功获取 600693.SH 的数据\n", + "成功获取 600694.SH 的数据\n", + "成功获取 600696.SH 的数据\n", + "成功获取 600697.SH 的数据\n", + "成功获取 600698.SH 的数据\n", + "成功获取 600699.SH 的数据\n", + "成功获取 600702.SH 的数据\n", + "成功获取 600703.SH 的数据\n", + "成功获取 600704.SH 的数据\n", + "成功获取 600705.SH 的数据\n", + "成功获取 600706.SH 的数据\n", + "成功获取 600707.SH 的数据\n", + "成功获取 600708.SH 的数据\n", + "成功获取 600710.SH 的数据\n", + "成功获取 600711.SH 的数据\n", + "成功获取 600712.SH 的数据\n", + "成功获取 600713.SH 的数据\n", + "成功获取 600714.SH 的数据\n", + "成功获取 600715.SH 的数据\n", + "成功获取 600716.SH 的数据\n", + "成功获取 600717.SH 的数据\n", + "成功获取 600718.SH 的数据\n", + "成功获取 600719.SH 的数据\n", + "成功获取 600720.SH 的数据\n", + "成功获取 600721.SH 的数据\n", + "成功获取 600722.SH 的数据\n", + "成功获取 600724.SH 的数据\n", + "成功获取 600725.SH 的数据\n", + "成功获取 600726.SH 的数据\n", + "成功获取 600727.SH 的数据\n", + "成功获取 600728.SH 的数据\n", + "成功获取 600729.SH 的数据\n", + "成功获取 600730.SH 的数据\n", + "成功获取 600731.SH 的数据\n", + "成功获取 600732.SH 的数据\n", + "成功获取 600733.SH 的数据\n", + "成功获取 600734.SH 的数据\n", + "成功获取 600735.SH 的数据\n", + "成功获取 600736.SH 的数据\n", + "成功获取 600737.SH 的数据\n", + "成功获取 600738.SH 的数据\n", + "成功获取 600739.SH 的数据\n", + "成功获取 600740.SH 的数据\n", + "成功获取 600741.SH 的数据\n", + "成功获取 600742.SH 的数据\n", + "成功获取 600743.SH 的数据\n", + "成功获取 600744.SH 的数据\n", + "成功获取 600745.SH 的数据\n", + "成功获取 600746.SH 的数据\n", + "成功获取 600748.SH 的数据\n", + "成功获取 600749.SH 的数据\n", + "成功获取 600750.SH 的数据\n", + "成功获取 600751.SH 的数据\n", + "成功获取 600753.SH 的数据\n", + "成功获取 600754.SH 的数据\n", + "成功获取 600755.SH 的数据\n", + "成功获取 600756.SH 的数据\n", + "成功获取 600757.SH 的数据\n", + "成功获取 600758.SH 的数据\n", + "成功获取 600759.SH 的数据\n", + "成功获取 600760.SH 的数据\n", + "成功获取 600761.SH 的数据\n", + "成功获取 600763.SH 的数据\n", + "成功获取 600764.SH 的数据\n", + "成功获取 600765.SH 的数据\n", + "成功获取 600768.SH 的数据\n", + "成功获取 600769.SH 的数据\n", + "成功获取 600770.SH 的数据\n", + "成功获取 600771.SH 的数据\n", + "成功获取 600773.SH 的数据\n", + "成功获取 600774.SH 的数据\n", + "成功获取 600775.SH 的数据\n", + "成功获取 600776.SH 的数据\n", + "成功获取 600777.SH 的数据\n", + "成功获取 600778.SH 的数据\n", + "成功获取 600779.SH 的数据\n", + "成功获取 600780.SH 的数据\n", + "成功获取 600782.SH 的数据\n", + "成功获取 600783.SH 的数据\n", + "成功获取 600784.SH 的数据\n", + "成功获取 600785.SH 的数据\n", + "成功获取 600787.SH 的数据\n", + "成功获取 600789.SH 的数据\n", + "成功获取 600790.SH 的数据\n", + "成功获取 600791.SH 的数据\n", + "成功获取 600792.SH 的数据\n", + "成功获取 600793.SH 的数据\n", + "成功获取 600794.SH 的数据\n", + "成功获取 600795.SH 的数据\n", + "成功获取 600796.SH 的数据\n", + "成功获取 600797.SH 的数据\n", + "成功获取 600798.SH 的数据\n", + "成功获取 600800.SH 的数据\n", + "成功获取 600801.SH 的数据\n", + "成功获取 600802.SH 的数据\n", + "成功获取 600803.SH 的数据\n", + "成功获取 600804.SH 的数据\n", + "成功获取 600805.SH 的数据\n", + "成功获取 600807.SH 的数据\n", + "成功获取 600808.SH 的数据\n", + "成功获取 600809.SH 的数据\n", + "成功获取 600810.SH 的数据\n", + "成功获取 600811.SH 的数据\n", + "成功获取 600812.SH 的数据\n", + "成功获取 600814.SH 的数据\n", + "成功获取 600815.SH 的数据\n", + "成功获取 600816.SH 的数据\n", + "成功获取 600817.SH 的数据\n", + "成功获取 600818.SH 的数据\n", + "成功获取 600819.SH 的数据\n", + "成功获取 600820.SH 的数据\n", + "成功获取 600821.SH 的数据\n", + "成功获取 600822.SH 的数据\n", + "成功获取 600824.SH 的数据\n", + "成功获取 600825.SH 的数据\n", + "成功获取 600826.SH 的数据\n", + "成功获取 600827.SH 的数据\n", + "成功获取 600828.SH 的数据\n", + "成功获取 600829.SH 的数据\n", + "成功获取 600830.SH 的数据\n", + "成功获取 600831.SH 的数据\n", + "成功获取 600833.SH 的数据\n", + "成功获取 600834.SH 的数据\n", + "成功获取 600835.SH 的数据\n", + "成功获取 600837.SH 的数据\n", + "成功获取 600838.SH 的数据\n", + "成功获取 600839.SH 的数据\n", + "成功获取 600841.SH 的数据\n", + "成功获取 600843.SH 的数据\n", + "成功获取 600844.SH 的数据\n", + "成功获取 600845.SH 的数据\n", + "成功获取 600846.SH 的数据\n", + "成功获取 600847.SH 的数据\n", + "成功获取 600848.SH 的数据\n", + "成功获取 600850.SH 的数据\n", + "成功获取 600851.SH 的数据\n", + "成功获取 600853.SH 的数据\n", + "成功获取 600854.SH 的数据\n", + "成功获取 600855.SH 的数据\n", + "成功获取 600857.SH 的数据\n", + "成功获取 600858.SH 的数据\n", + "成功获取 600859.SH 的数据\n", + "成功获取 600860.SH 的数据\n", + "成功获取 600861.SH 的数据\n", + "成功获取 600862.SH 的数据\n", + "成功获取 600863.SH 的数据\n", + "成功获取 600864.SH 的数据\n", + "成功获取 600865.SH 的数据\n", + "成功获取 600866.SH 的数据\n", + "成功获取 600867.SH 的数据\n", + "成功获取 600868.SH 的数据\n", + "成功获取 600869.SH 的数据\n", + "成功获取 600871.SH 的数据\n", + "成功获取 600872.SH 的数据\n", + "成功获取 600873.SH 的数据\n", + "成功获取 600874.SH 的数据\n", + "成功获取 600875.SH 的数据\n", + "成功获取 600876.SH 的数据\n", + "成功获取 600877.SH 的数据\n", + "成功获取 600879.SH 的数据\n", + "成功获取 600880.SH 的数据\n", + "成功获取 600881.SH 的数据\n", + "成功获取 600882.SH 的数据\n", + "成功获取 600883.SH 的数据\n", + "成功获取 600884.SH 的数据\n", + "成功获取 600885.SH 的数据\n", + "成功获取 600886.SH 的数据\n", + "成功获取 600887.SH 的数据\n", + "成功获取 600888.SH 的数据\n", + "成功获取 600889.SH 的数据\n", + "成功获取 600892.SH 的数据\n", + "成功获取 600893.SH 的数据\n", + "成功获取 600894.SH 的数据\n", + "成功获取 600895.SH 的数据\n", + "成功获取 600897.SH 的数据\n", + "成功获取 600898.SH 的数据\n", + "成功获取 600900.SH 的数据\n", + "成功获取 600901.SH 的数据\n", + "成功获取 600903.SH 的数据\n", + "成功获取 600905.SH 的数据\n", + "成功获取 600906.SH 的数据\n", + "成功获取 600908.SH 的数据\n", + "成功获取 600909.SH 的数据\n", + "成功获取 600916.SH 的数据\n", + "成功获取 600917.SH 的数据\n", + "成功获取 600918.SH 的数据\n", + "成功获取 600919.SH 的数据\n", + "成功获取 600925.SH 的数据\n", + "成功获取 600926.SH 的数据\n", + "成功获取 600927.SH 的数据\n", + "成功获取 600928.SH 的数据\n", + "成功获取 600929.SH 的数据\n", + "成功获取 600933.SH 的数据\n", + "成功获取 600935.SH 的数据\n", + "成功获取 600936.SH 的数据\n", + "成功获取 600938.SH 的数据\n", + "成功获取 600939.SH 的数据\n", + "成功获取 600941.SH 的数据\n", + "成功获取 600955.SH 的数据\n", + "成功获取 600956.SH 的数据\n", + "成功获取 600958.SH 的数据\n", + "成功获取 600959.SH 的数据\n", + "已调用300次API,等待 21.17 秒以满足速率限制...\n", + "成功获取 600960.SH 的数据\n", + "成功获取 600961.SH 的数据\n", + "成功获取 600962.SH 的数据\n", + "成功获取 600963.SH 的数据\n", + "成功获取 600965.SH 的数据\n", + "成功获取 600966.SH 的数据\n", + "成功获取 600967.SH 的数据\n", + "成功获取 600968.SH 的数据\n", + "成功获取 600969.SH 的数据\n", + "成功获取 600970.SH 的数据\n", + "成功获取 600971.SH 的数据\n", + "成功获取 600973.SH 的数据\n", + "成功获取 600975.SH 的数据\n", + "成功获取 600976.SH 的数据\n", + "成功获取 600977.SH 的数据\n", + "成功获取 600979.SH 的数据\n", + "成功获取 600980.SH 的数据\n", + "成功获取 600981.SH 的数据\n", + "成功获取 600982.SH 的数据\n", + "成功获取 600983.SH 的数据\n", + "成功获取 600984.SH 的数据\n", + "成功获取 600985.SH 的数据\n", + "成功获取 600986.SH 的数据\n", + "成功获取 600987.SH 的数据\n", + "成功获取 600988.SH 的数据\n", + "成功获取 600989.SH 的数据\n", + "成功获取 600990.SH 的数据\n", + "成功获取 600992.SH 的数据\n", + "成功获取 600993.SH 的数据\n", + "成功获取 600995.SH 的数据\n", + "成功获取 600996.SH 的数据\n", + "成功获取 600997.SH 的数据\n", + "成功获取 600998.SH 的数据\n", + "成功获取 600999.SH 的数据\n", + "成功获取 601000.SH 的数据\n", + "成功获取 601001.SH 的数据\n", + "成功获取 601002.SH 的数据\n", + "成功获取 601003.SH 的数据\n", + "成功获取 601005.SH 的数据\n", + "成功获取 601006.SH 的数据\n", + "成功获取 601007.SH 的数据\n", + "成功获取 601008.SH 的数据\n", + "成功获取 601009.SH 的数据\n", + "成功获取 601010.SH 的数据\n", + "成功获取 601011.SH 的数据\n", + "成功获取 601012.SH 的数据\n", + "成功获取 601015.SH 的数据\n", + "成功获取 601016.SH 的数据\n", + "成功获取 601018.SH 的数据\n", + "成功获取 601019.SH 的数据\n", + "成功获取 601020.SH 的数据\n", + "成功获取 601021.SH 的数据\n", + "成功获取 601022.SH 的数据\n", + "成功获取 601028.SH 的数据\n", + "成功获取 601033.SH 的数据\n", + "成功获取 601038.SH 的数据\n", + "成功获取 601058.SH 的数据\n", + "成功获取 601059.SH 的数据\n", + "成功获取 601061.SH 的数据\n", + "成功获取 601065.SH 的数据\n", + "成功获取 601066.SH 的数据\n", + "成功获取 601068.SH 的数据\n", + "成功获取 601069.SH 的数据\n", + "成功获取 601077.SH 的数据\n", + "成功获取 601083.SH 的数据\n", + "成功获取 601086.SH 的数据\n", + "成功获取 601088.SH 的数据\n", + "成功获取 601089.SH 的数据\n", + "成功获取 601096.SH 的数据\n", + "成功获取 601098.SH 的数据\n", + "成功获取 601099.SH 的数据\n", + "成功获取 601100.SH 的数据\n", + "成功获取 601101.SH 的数据\n", + "成功获取 601106.SH 的数据\n", + "成功获取 601107.SH 的数据\n", + "成功获取 601108.SH 的数据\n", + "成功获取 601111.SH 的数据\n", + "成功获取 601113.SH 的数据\n", + "成功获取 601116.SH 的数据\n", + "成功获取 601117.SH 的数据\n", + "成功获取 601118.SH 的数据\n", + "成功获取 601121.SH 的数据\n", + "成功获取 601126.SH 的数据\n", + "成功获取 601127.SH 的数据\n", + "成功获取 601128.SH 的数据\n", + "成功获取 601133.SH 的数据\n", + "成功获取 601136.SH 的数据\n", + "成功获取 601137.SH 的数据\n", + "成功获取 601138.SH 的数据\n", + "成功获取 601139.SH 的数据\n", + "成功获取 601155.SH 的数据\n", + "成功获取 601156.SH 的数据\n", + "成功获取 601158.SH 的数据\n", + "成功获取 601162.SH 的数据\n", + "成功获取 601163.SH 的数据\n", + "成功获取 601166.SH 的数据\n", + "成功获取 601168.SH 的数据\n", + "成功获取 601169.SH 的数据\n", + "成功获取 601177.SH 的数据\n", + "成功获取 601179.SH 的数据\n", + "成功获取 601186.SH 的数据\n", + "成功获取 601187.SH 的数据\n", + "成功获取 601188.SH 的数据\n", + "成功获取 601198.SH 的数据\n", + "成功获取 601199.SH 的数据\n", + "成功获取 601200.SH 的数据\n", + "成功获取 601208.SH 的数据\n", + "成功获取 601211.SH 的数据\n", + "成功获取 601212.SH 的数据\n", + "成功获取 601216.SH 的数据\n", + "成功获取 601218.SH 的数据\n", + "成功获取 601222.SH 的数据\n", + "成功获取 601225.SH 的数据\n", + "成功获取 601226.SH 的数据\n", + "成功获取 601228.SH 的数据\n", + "成功获取 601229.SH 的数据\n", + "成功获取 601231.SH 的数据\n", + "成功获取 601233.SH 的数据\n", + "成功获取 601236.SH 的数据\n", + "成功获取 601238.SH 的数据\n", + "成功获取 601279.SH 的数据\n", + "成功获取 601288.SH 的数据\n", + "成功获取 601298.SH 的数据\n", + "成功获取 601311.SH 的数据\n", + "成功获取 601318.SH 的数据\n", + "成功获取 601319.SH 的数据\n", + "成功获取 601326.SH 的数据\n", + "成功获取 601328.SH 的数据\n", + "成功获取 601330.SH 的数据\n", + "成功获取 601333.SH 的数据\n", + "成功获取 601336.SH 的数据\n", + "成功获取 601339.SH 的数据\n", + "成功获取 601360.SH 的数据\n", + "成功获取 601366.SH 的数据\n", + "成功获取 601368.SH 的数据\n", + "成功获取 601369.SH 的数据\n", + "成功获取 601375.SH 的数据\n", + "成功获取 601377.SH 的数据\n", + "成功获取 601388.SH 的数据\n", + "成功获取 601390.SH 的数据\n", + "成功获取 601398.SH 的数据\n", + "成功获取 601399.SH 的数据\n", + "成功获取 601456.SH 的数据\n", + "成功获取 601500.SH 的数据\n", + "成功获取 601512.SH 的数据\n", + "成功获取 601515.SH 的数据\n", + "成功获取 601518.SH 的数据\n", + "成功获取 601519.SH 的数据\n", + "成功获取 601528.SH 的数据\n", + "成功获取 601555.SH 的数据\n", + "成功获取 601566.SH 的数据\n", + "成功获取 601567.SH 的数据\n", + "成功获取 601568.SH 的数据\n", + "成功获取 601577.SH 的数据\n", + "成功获取 601579.SH 的数据\n", + "成功获取 601588.SH 的数据\n", + "成功获取 601595.SH 的数据\n", + "成功获取 601598.SH 的数据\n", + "成功获取 601599.SH 的数据\n", + "成功获取 601600.SH 的数据\n", + "成功获取 601601.SH 的数据\n", + "成功获取 601606.SH 的数据\n", + "成功获取 601607.SH 的数据\n", + "成功获取 601608.SH 的数据\n", + "成功获取 601609.SH 的数据\n", + "成功获取 601611.SH 的数据\n", + "成功获取 601615.SH 的数据\n", + "成功获取 601616.SH 的数据\n", + "成功获取 601618.SH 的数据\n", + "成功获取 601619.SH 的数据\n", + "成功获取 601628.SH 的数据\n", + "成功获取 601633.SH 的数据\n", + "成功获取 601636.SH 的数据\n", + "成功获取 601658.SH 的数据\n", + "成功获取 601665.SH 的数据\n", + "成功获取 601666.SH 的数据\n", + "成功获取 601668.SH 的数据\n", + "成功获取 601669.SH 的数据\n", + "成功获取 601677.SH 的数据\n", + "成功获取 601678.SH 的数据\n", + "成功获取 601686.SH 的数据\n", + "成功获取 601688.SH 的数据\n", + "成功获取 601689.SH 的数据\n", + "成功获取 601696.SH 的数据\n", + "成功获取 601698.SH 的数据\n", + "成功获取 601699.SH 的数据\n", + "成功获取 601700.SH 的数据\n", + "成功获取 601702.SH 的数据\n", + "成功获取 601717.SH 的数据\n", + "成功获取 601718.SH 的数据\n", + "成功获取 601727.SH 的数据\n", + "成功获取 601728.SH 的数据\n", + "成功获取 601766.SH 的数据\n", + "成功获取 601777.SH 的数据\n", + "成功获取 601778.SH 的数据\n", + "成功获取 601788.SH 的数据\n", + "成功获取 601789.SH 的数据\n", + "成功获取 601798.SH 的数据\n", + "成功获取 601799.SH 的数据\n", + "成功获取 601800.SH 的数据\n", + "成功获取 601801.SH 的数据\n", + "成功获取 601808.SH 的数据\n", + "成功获取 601811.SH 的数据\n", + "成功获取 601816.SH 的数据\n", + "成功获取 601818.SH 的数据\n", + "成功获取 601825.SH 的数据\n", + "成功获取 601827.SH 的数据\n", + "成功获取 601828.SH 的数据\n", + "成功获取 601838.SH 的数据\n", + "成功获取 601857.SH 的数据\n", + "成功获取 601858.SH 的数据\n", + "成功获取 601860.SH 的数据\n", + "成功获取 601865.SH 的数据\n", + "成功获取 601866.SH 的数据\n", + "成功获取 601868.SH 的数据\n", + "成功获取 601869.SH 的数据\n", + "成功获取 601872.SH 的数据\n", + "成功获取 601877.SH 的数据\n", + "成功获取 601878.SH 的数据\n", + "成功获取 601880.SH 的数据\n", + "成功获取 601881.SH 的数据\n", + "成功获取 601882.SH 的数据\n", + "成功获取 601886.SH 的数据\n", + "成功获取 601888.SH 的数据\n", + "成功获取 601890.SH 的数据\n", + "成功获取 601898.SH 的数据\n", + "成功获取 601899.SH 的数据\n", + "成功获取 601900.SH 的数据\n", + "成功获取 601901.SH 的数据\n", + "成功获取 601908.SH 的数据\n", + "成功获取 601916.SH 的数据\n", + "成功获取 601918.SH 的数据\n", + "成功获取 601919.SH 的数据\n", + "成功获取 601921.SH 的数据\n", + "成功获取 601928.SH 的数据\n", + "成功获取 601929.SH 的数据\n", + "成功获取 601933.SH 的数据\n", + "成功获取 601939.SH 的数据\n", + "成功获取 601949.SH 的数据\n", + "成功获取 601952.SH 的数据\n", + "成功获取 601956.SH 的数据\n", + "成功获取 601958.SH 的数据\n", + "成功获取 601963.SH 的数据\n", + "成功获取 601965.SH 的数据\n", + "成功获取 601966.SH 的数据\n", + "成功获取 601968.SH 的数据\n", + "成功获取 601969.SH 的数据\n", + "成功获取 601975.SH 的数据\n", + "成功获取 601985.SH 的数据\n", + "成功获取 601988.SH 的数据\n", + "成功获取 601989.SH 的数据\n", + "成功获取 601990.SH 的数据\n", + "成功获取 601991.SH 的数据\n", + "成功获取 601992.SH 的数据\n", + "成功获取 601995.SH 的数据\n", + "成功获取 601996.SH 的数据\n", + "成功获取 601997.SH 的数据\n", + "成功获取 601998.SH 的数据\n", + "成功获取 601999.SH 的数据\n", + "成功获取 603000.SH 的数据\n", + "成功获取 603001.SH 的数据\n", + "成功获取 603002.SH 的数据\n", + "成功获取 603003.SH 的数据\n", + "成功获取 603004.SH 的数据\n", + "成功获取 603005.SH 的数据\n", + "成功获取 603006.SH 的数据\n", + "成功获取 603007.SH 的数据\n", + "成功获取 603008.SH 的数据\n", + "成功获取 603009.SH 的数据\n", + "成功获取 603010.SH 的数据\n", + "成功获取 603011.SH 的数据\n", + "成功获取 603012.SH 的数据\n", + "成功获取 603013.SH 的数据\n", + "成功获取 603015.SH 的数据\n", + "成功获取 603016.SH 的数据\n", + "成功获取 603017.SH 的数据\n", + "成功获取 603018.SH 的数据\n", + "成功获取 603019.SH 的数据\n", + "成功获取 603020.SH 的数据\n", + "成功获取 603021.SH 的数据\n", + "成功获取 603022.SH 的数据\n", + "成功获取 603023.SH 的数据\n", + "成功获取 603025.SH 的数据\n", + "成功获取 603026.SH 的数据\n", + "成功获取 603027.SH 的数据\n", + "成功获取 603028.SH 的数据\n", + "成功获取 603029.SH 的数据\n", + "成功获取 603030.SH 的数据\n", + "成功获取 603031.SH 的数据\n", + "成功获取 603032.SH 的数据\n", + "成功获取 603033.SH 的数据\n", + "成功获取 603035.SH 的数据\n", + "成功获取 603036.SH 的数据\n", + "成功获取 603037.SH 的数据\n", + "成功获取 603038.SH 的数据\n", + "成功获取 603039.SH 的数据\n", + "成功获取 603040.SH 的数据\n", + "成功获取 603041.SH 的数据\n", + "成功获取 603042.SH 的数据\n", + "成功获取 603043.SH 的数据\n", + "已调用300次API,等待 21.35 秒以满足速率限制...\n", + "成功获取 603045.SH 的数据\n", + "成功获取 603048.SH 的数据\n", + "成功获取 603050.SH 的数据\n", + "成功获取 603051.SH 的数据\n", + "成功获取 603052.SH 的数据\n", + "成功获取 603053.SH 的数据\n", + "成功获取 603055.SH 的数据\n", + "成功获取 603056.SH 的数据\n", + "成功获取 603057.SH 的数据\n", + "成功获取 603058.SH 的数据\n", + "成功获取 603059.SH 的数据\n", + "成功获取 603060.SH 的数据\n", + "成功获取 603061.SH 的数据\n", + "成功获取 603062.SH 的数据\n", + "成功获取 603063.SH 的数据\n", + "成功获取 603065.SH 的数据\n", + "成功获取 603066.SH 的数据\n", + "成功获取 603067.SH 的数据\n", + "成功获取 603068.SH 的数据\n", + "成功获取 603069.SH 的数据\n", + "成功获取 603070.SH 的数据\n", + "成功获取 603071.SH 的数据\n", + "成功获取 603072.SH 的数据\n", + "成功获取 603073.SH 的数据\n", + "成功获取 603075.SH 的数据\n", + "成功获取 603076.SH 的数据\n", + "成功获取 603077.SH 的数据\n", + "成功获取 603078.SH 的数据\n", + "成功获取 603079.SH 的数据\n", + "成功获取 603080.SH 的数据\n", + "成功获取 603081.SH 的数据\n", + "成功获取 603082.SH 的数据\n", + "成功获取 603083.SH 的数据\n", + "成功获取 603085.SH 的数据\n", + "成功获取 603086.SH 的数据\n", + "成功获取 603087.SH 的数据\n", + "成功获取 603088.SH 的数据\n", + "成功获取 603089.SH 的数据\n", + "成功获取 603090.SH 的数据\n", + "成功获取 603091.SH 的数据\n", + "成功获取 603093.SH 的数据\n", + "成功获取 603095.SH 的数据\n", + "成功获取 603096.SH 的数据\n", + "成功获取 603097.SH 的数据\n", + "成功获取 603098.SH 的数据\n", + "成功获取 603099.SH 的数据\n", + "成功获取 603100.SH 的数据\n", + "成功获取 603101.SH 的数据\n", + "成功获取 603102.SH 的数据\n", + "成功获取 603103.SH 的数据\n", + "成功获取 603105.SH 的数据\n", + "成功获取 603106.SH 的数据\n", + "成功获取 603107.SH 的数据\n", + "成功获取 603108.SH 的数据\n", + "成功获取 603109.SH 的数据\n", + "成功获取 603110.SH 的数据\n", + "成功获取 603111.SH 的数据\n", + "成功获取 603112.SH 的数据\n", + "成功获取 603113.SH 的数据\n", + "成功获取 603115.SH 的数据\n", + "成功获取 603116.SH 的数据\n", + "成功获取 603117.SH 的数据\n", + "成功获取 603118.SH 的数据\n", + "成功获取 603119.SH 的数据\n", + "成功获取 603121.SH 的数据\n", + "成功获取 603122.SH 的数据\n", + "成功获取 603123.SH 的数据\n", + "成功获取 603125.SH 的数据\n", + "成功获取 603126.SH 的数据\n", + "成功获取 603127.SH 的数据\n", + "成功获取 603128.SH 的数据\n", + "成功获取 603129.SH 的数据\n", + "成功获取 603130.SH 的数据\n", + "成功获取 603131.SH 的数据\n", + "成功获取 603132.SH 的数据\n", + "成功获取 603135.SH 的数据\n", + "成功获取 603136.SH 的数据\n", + "成功获取 603137.SH 的数据\n", + "成功获取 603138.SH 的数据\n", + "成功获取 603139.SH 的数据\n", + "成功获取 603150.SH 的数据\n", + "成功获取 603151.SH 的数据\n", + "成功获取 603153.SH 的数据\n", + "成功获取 603155.SH 的数据\n", + "成功获取 603156.SH 的数据\n", + "成功获取 603158.SH 的数据\n", + "成功获取 603159.SH 的数据\n", + "成功获取 603160.SH 的数据\n", + "成功获取 603161.SH 的数据\n", + "成功获取 603162.SH 的数据\n", + "成功获取 603163.SH 的数据\n", + "成功获取 603165.SH 的数据\n", + "成功获取 603166.SH 的数据\n", + "成功获取 603167.SH 的数据\n", + "成功获取 603168.SH 的数据\n", + "成功获取 603169.SH 的数据\n", + "成功获取 603170.SH 的数据\n", + "成功获取 603171.SH 的数据\n", + "成功获取 603172.SH 的数据\n", + "成功获取 603173.SH 的数据\n", + "成功获取 603176.SH 的数据\n", + "成功获取 603177.SH 的数据\n", + "成功获取 603178.SH 的数据\n", + "成功获取 603179.SH 的数据\n", + "成功获取 603180.SH 的数据\n", + "成功获取 603181.SH 的数据\n", + "成功获取 603182.SH 的数据\n", + "成功获取 603183.SH 的数据\n", + "成功获取 603185.SH 的数据\n", + "成功获取 603186.SH 的数据\n", + "成功获取 603187.SH 的数据\n", + "成功获取 603188.SH 的数据\n", + "成功获取 603189.SH 的数据\n", + "成功获取 603190.SH 的数据\n", + "成功获取 603191.SH 的数据\n", + "成功获取 603192.SH 的数据\n", + "成功获取 603193.SH 的数据\n", + "成功获取 603194.SH 的数据\n", + "成功获取 603195.SH 的数据\n", + "成功获取 603196.SH 的数据\n", + "成功获取 603197.SH 的数据\n", + "成功获取 603198.SH 的数据\n", + "成功获取 603199.SH 的数据\n", + "成功获取 603200.SH 的数据\n", + "成功获取 603201.SH 的数据\n", + "成功获取 603203.SH 的数据\n", + "成功获取 603205.SH 的数据\n", + "成功获取 603206.SH 的数据\n", + "成功获取 603207.SH 的数据\n", + "成功获取 603208.SH 的数据\n", + "成功获取 603209.SH 的数据\n", + "成功获取 603211.SH 的数据\n", + "成功获取 603212.SH 的数据\n", + "成功获取 603213.SH 的数据\n", + "成功获取 603214.SH 的数据\n", + "成功获取 603215.SH 的数据\n", + "成功获取 603216.SH 的数据\n", + "成功获取 603217.SH 的数据\n", + "成功获取 603218.SH 的数据\n", + "成功获取 603219.SH 的数据\n", + "成功获取 603220.SH 的数据\n", + "成功获取 603221.SH 的数据\n", + "成功获取 603222.SH 的数据\n", + "成功获取 603223.SH 的数据\n", + "成功获取 603225.SH 的数据\n", + "成功获取 603226.SH 的数据\n", + "成功获取 603227.SH 的数据\n", + "成功获取 603228.SH 的数据\n", + "成功获取 603229.SH 的数据\n", + "成功获取 603230.SH 的数据\n", + "成功获取 603231.SH 的数据\n", + "成功获取 603232.SH 的数据\n", + "成功获取 603233.SH 的数据\n", + "成功获取 603235.SH 的数据\n", + "成功获取 603236.SH 的数据\n", + "成功获取 603237.SH 的数据\n", + "成功获取 603238.SH 的数据\n", + "成功获取 603239.SH 的数据\n", + "成功获取 603255.SH 的数据\n", + "成功获取 603256.SH 的数据\n", + "成功获取 603258.SH 的数据\n", + "成功获取 603259.SH 的数据\n", + "成功获取 603260.SH 的数据\n", + "成功获取 603261.SH 的数据\n", + "成功获取 603266.SH 的数据\n", + "成功获取 603267.SH 的数据\n", + "成功获取 603268.SH 的数据\n", + "成功获取 603269.SH 的数据\n", + "成功获取 603270.SH 的数据\n", + "成功获取 603272.SH 的数据\n", + "成功获取 603273.SH 的数据\n", + "成功获取 603275.SH 的数据\n", + "成功获取 603276.SH 的数据\n", + "成功获取 603277.SH 的数据\n", + "成功获取 603278.SH 的数据\n", + "成功获取 603279.SH 的数据\n", + "成功获取 603280.SH 的数据\n", + "成功获取 603281.SH 的数据\n", + "成功获取 603282.SH 的数据\n", + "成功获取 603283.SH 的数据\n", + "成功获取 603285.SH 的数据\n", + "成功获取 603286.SH 的数据\n", + "成功获取 603288.SH 的数据\n", + "成功获取 603289.SH 的数据\n", + "成功获取 603290.SH 的数据\n", + "成功获取 603291.SH 的数据\n", + "成功获取 603296.SH 的数据\n", + "成功获取 603297.SH 的数据\n", + "成功获取 603298.SH 的数据\n", + "成功获取 603299.SH 的数据\n", + "成功获取 603300.SH 的数据\n", + "成功获取 603301.SH 的数据\n", + "成功获取 603303.SH 的数据\n", + "成功获取 603305.SH 的数据\n", + "成功获取 603306.SH 的数据\n", + "成功获取 603307.SH 的数据\n", + "成功获取 603308.SH 的数据\n", + "成功获取 603309.SH 的数据\n", + "成功获取 603310.SH 的数据\n", + "成功获取 603311.SH 的数据\n", + "成功获取 603312.SH 的数据\n", + "成功获取 603313.SH 的数据\n", + "成功获取 603315.SH 的数据\n", + "成功获取 603316.SH 的数据\n", + "成功获取 603317.SH 的数据\n", + "成功获取 603318.SH 的数据\n", + "成功获取 603319.SH 的数据\n", + "成功获取 603320.SH 的数据\n", + "成功获取 603321.SH 的数据\n", + "成功获取 603322.SH 的数据\n", + "成功获取 603323.SH 的数据\n", + "成功获取 603324.SH 的数据\n", + "成功获取 603325.SH 的数据\n", + "成功获取 603326.SH 的数据\n", + "成功获取 603327.SH 的数据\n", + "成功获取 603328.SH 的数据\n", + "成功获取 603329.SH 的数据\n", + "成功获取 603330.SH 的数据\n", + "成功获取 603331.SH 的数据\n", + "成功获取 603332.SH 的数据\n", + "成功获取 603333.SH 的数据\n", + "成功获取 603335.SH 的数据\n", + "成功获取 603336.SH 的数据\n", + "成功获取 603337.SH 的数据\n", + "成功获取 603338.SH 的数据\n", + "成功获取 603339.SH 的数据\n", + "成功获取 603341.SH 的数据\n", + "成功获取 603344.SH 的数据\n", + "成功获取 603345.SH 的数据\n", + "成功获取 603348.SH 的数据\n", + "成功获取 603350.SH 的数据\n", + "成功获取 603351.SH 的数据\n", + "成功获取 603353.SH 的数据\n", + "成功获取 603355.SH 的数据\n", + "成功获取 603356.SH 的数据\n", + "成功获取 603357.SH 的数据\n", + "成功获取 603358.SH 的数据\n", + "成功获取 603359.SH 的数据\n", + "成功获取 603360.SH 的数据\n", + "成功获取 603363.SH 的数据\n", + "成功获取 603365.SH 的数据\n", + "成功获取 603366.SH 的数据\n", + "成功获取 603367.SH 的数据\n", + "成功获取 603368.SH 的数据\n", + "成功获取 603369.SH 的数据\n", + "成功获取 603373.SH 的数据\n", + "成功获取 603375.SH 的数据\n", + "成功获取 603377.SH 的数据\n", + "成功获取 603378.SH 的数据\n", + "成功获取 603379.SH 的数据\n", + "成功获取 603380.SH 的数据\n", + "成功获取 603381.SH 的数据\n", + "成功获取 603383.SH 的数据\n", + "成功获取 603385.SH 的数据\n", + "成功获取 603386.SH 的数据\n", + "成功获取 603387.SH 的数据\n", + "成功获取 603388.SH 的数据\n", + "成功获取 603389.SH 的数据\n", + "成功获取 603390.SH 的数据\n", + "成功获取 603391.SH 的数据\n", + "成功获取 603392.SH 的数据\n", + "成功获取 603393.SH 的数据\n", + "成功获取 603395.SH 的数据\n", + "成功获取 603396.SH 的数据\n", + "成功获取 603398.SH 的数据\n", + "成功获取 603399.SH 的数据\n", + "成功获取 603408.SH 的数据\n", + "成功获取 603416.SH 的数据\n", + "成功获取 603421.SH 的数据\n", + "成功获取 603429.SH 的数据\n", + "成功获取 603439.SH 的数据\n", + "成功获取 603444.SH 的数据\n", + "成功获取 603456.SH 的数据\n", + "成功获取 603458.SH 的数据\n", + "成功获取 603466.SH 的数据\n", + "成功获取 603477.SH 的数据\n", + "成功获取 603486.SH 的数据\n", + "成功获取 603488.SH 的数据\n", + "成功获取 603489.SH 的数据\n", + "成功获取 603496.SH 的数据\n", + "成功获取 603499.SH 的数据\n", + "成功获取 603500.SH 的数据\n", + "成功获取 603501.SH 的数据\n", + "成功获取 603505.SH 的数据\n", + "成功获取 603506.SH 的数据\n", + "成功获取 603507.SH 的数据\n", + "成功获取 603508.SH 的数据\n", + "成功获取 603511.SH 的数据\n", + "成功获取 603515.SH 的数据\n", + "成功获取 603516.SH 的数据\n", + "成功获取 603517.SH 的数据\n", + "成功获取 603518.SH 的数据\n", + "成功获取 603519.SH 的数据\n", + "成功获取 603520.SH 的数据\n", + "成功获取 603527.SH 的数据\n", + "成功获取 603528.SH 的数据\n", + "成功获取 603529.SH 的数据\n", + "成功获取 603530.SH 的数据\n", + "成功获取 603533.SH 的数据\n", + "成功获取 603535.SH 的数据\n", + "已调用300次API,等待 19.24 秒以满足速率限制...\n", + "成功获取 603536.SH 的数据\n", + "成功获取 603538.SH 的数据\n", + "成功获取 603551.SH 的数据\n", + "成功获取 603556.SH 的数据\n", + "成功获取 603557.SH 的数据\n", + "成功获取 603558.SH 的数据\n", + "成功获取 603559.SH 的数据\n", + "成功获取 603565.SH 的数据\n", + "成功获取 603566.SH 的数据\n", + "成功获取 603567.SH 的数据\n", + "成功获取 603568.SH 的数据\n", + "成功获取 603569.SH 的数据\n", + "成功获取 603577.SH 的数据\n", + "成功获取 603578.SH 的数据\n", + "成功获取 603579.SH 的数据\n", + "成功获取 603580.SH 的数据\n", + "成功获取 603583.SH 的数据\n", + "成功获取 603585.SH 的数据\n", + "成功获取 603586.SH 的数据\n", + "成功获取 603587.SH 的数据\n", + "成功获取 603588.SH 的数据\n", + "成功获取 603589.SH 的数据\n", + "成功获取 603590.SH 的数据\n", + "成功获取 603595.SH 的数据\n", + "成功获取 603596.SH 的数据\n", + "成功获取 603598.SH 的数据\n", + "成功获取 603599.SH 的数据\n", + "成功获取 603600.SH 的数据\n", + "成功获取 603601.SH 的数据\n", + "成功获取 603602.SH 的数据\n", + "成功获取 603605.SH 的数据\n", + "成功获取 603606.SH 的数据\n", + "成功获取 603607.SH 的数据\n", + "成功获取 603608.SH 的数据\n", + "成功获取 603609.SH 的数据\n", + "成功获取 603610.SH 的数据\n", + "成功获取 603611.SH 的数据\n", + "成功获取 603612.SH 的数据\n", + "成功获取 603613.SH 的数据\n", + "成功获取 603615.SH 的数据\n", + "成功获取 603616.SH 的数据\n", + "成功获取 603617.SH 的数据\n", + "成功获取 603618.SH 的数据\n", + "成功获取 603619.SH 的数据\n", + "成功获取 603626.SH 的数据\n", + "成功获取 603628.SH 的数据\n", + "成功获取 603629.SH 的数据\n", + "成功获取 603630.SH 的数据\n", + "成功获取 603633.SH 的数据\n", + "成功获取 603636.SH 的数据\n", + "成功获取 603637.SH 的数据\n", + "成功获取 603638.SH 的数据\n", + "成功获取 603639.SH 的数据\n", + "成功获取 603648.SH 的数据\n", + "成功获取 603650.SH 的数据\n", + "成功获取 603655.SH 的数据\n", + "成功获取 603656.SH 的数据\n", + "成功获取 603657.SH 的数据\n", + "成功获取 603658.SH 的数据\n", + "成功获取 603659.SH 的数据\n", + "成功获取 603660.SH 的数据\n", + "成功获取 603661.SH 的数据\n", + "成功获取 603662.SH 的数据\n", + "成功获取 603663.SH 的数据\n", + "成功获取 603665.SH 的数据\n", + "成功获取 603666.SH 的数据\n", + "成功获取 603667.SH 的数据\n", + "成功获取 603668.SH 的数据\n", + "成功获取 603669.SH 的数据\n", + "成功获取 603676.SH 的数据\n", + "成功获取 603677.SH 的数据\n", + "成功获取 603678.SH 的数据\n", + "成功获取 603679.SH 的数据\n", + "成功获取 603680.SH 的数据\n", + "成功获取 603681.SH 的数据\n", + "成功获取 603682.SH 的数据\n", + "成功获取 603683.SH 的数据\n", + "成功获取 603685.SH 的数据\n", + "成功获取 603686.SH 的数据\n", + "成功获取 603687.SH 的数据\n", + "成功获取 603688.SH 的数据\n", + "成功获取 603689.SH 的数据\n", + "成功获取 603690.SH 的数据\n", + "成功获取 603693.SH 的数据\n", + "成功获取 603696.SH 的数据\n", + "成功获取 603697.SH 的数据\n", + "成功获取 603698.SH 的数据\n", + "成功获取 603699.SH 的数据\n", + "成功获取 603700.SH 的数据\n", + "成功获取 603701.SH 的数据\n", + "成功获取 603703.SH 的数据\n", + "成功获取 603706.SH 的数据\n", + "成功获取 603707.SH 的数据\n", + "成功获取 603708.SH 的数据\n", + "成功获取 603709.SH 的数据\n", + "成功获取 603711.SH 的数据\n", + "成功获取 603712.SH 的数据\n", + "成功获取 603713.SH 的数据\n", + "成功获取 603716.SH 的数据\n", + "成功获取 603717.SH 的数据\n", + "成功获取 603718.SH 的数据\n", + "成功获取 603719.SH 的数据\n", + "成功获取 603721.SH 的数据\n", + "成功获取 603722.SH 的数据\n", + "成功获取 603725.SH 的数据\n", + "成功获取 603726.SH 的数据\n", + "成功获取 603727.SH 的数据\n", + "成功获取 603728.SH 的数据\n", + "成功获取 603729.SH 的数据\n", + "成功获取 603730.SH 的数据\n", + "成功获取 603733.SH 的数据\n", + "成功获取 603737.SH 的数据\n", + "成功获取 603738.SH 的数据\n", + "成功获取 603739.SH 的数据\n", + "成功获取 603755.SH 的数据\n", + "成功获取 603757.SH 的数据\n", + "成功获取 603758.SH 的数据\n", + "成功获取 603759.SH 的数据\n", + "成功获取 603766.SH 的数据\n", + "成功获取 603767.SH 的数据\n", + "成功获取 603768.SH 的数据\n", + "成功获取 603773.SH 的数据\n", + "成功获取 603776.SH 的数据\n", + "成功获取 603777.SH 的数据\n", + "成功获取 603778.SH 的数据\n", + "成功获取 603779.SH 的数据\n", + "成功获取 603786.SH 的数据\n", + "成功获取 603787.SH 的数据\n", + "成功获取 603788.SH 的数据\n", + "成功获取 603789.SH 的数据\n", + "成功获取 603790.SH 的数据\n", + "成功获取 603797.SH 的数据\n", + "成功获取 603798.SH 的数据\n", + "成功获取 603799.SH 的数据\n", + "成功获取 603800.SH 的数据\n", + "成功获取 603801.SH 的数据\n", + "成功获取 603803.SH 的数据\n", + "成功获取 603806.SH 的数据\n", + "成功获取 603808.SH 的数据\n", + "成功获取 603809.SH 的数据\n", + "成功获取 603810.SH 的数据\n", + "成功获取 603811.SH 的数据\n", + "成功获取 603813.SH 的数据\n", + "成功获取 603815.SH 的数据\n", + "成功获取 603816.SH 的数据\n", + "成功获取 603817.SH 的数据\n", + "成功获取 603818.SH 的数据\n", + "成功获取 603819.SH 的数据\n", + "成功获取 603822.SH 的数据\n", + "成功获取 603823.SH 的数据\n", + "成功获取 603825.SH 的数据\n", + "成功获取 603826.SH 的数据\n", + "成功获取 603828.SH 的数据\n", + "成功获取 603829.SH 的数据\n", + "成功获取 603833.SH 的数据\n", + "成功获取 603836.SH 的数据\n", + "成功获取 603838.SH 的数据\n", + "成功获取 603839.SH 的数据\n", + "成功获取 603843.SH 的数据\n", + "成功获取 603848.SH 的数据\n", + "成功获取 603855.SH 的数据\n", + "成功获取 603856.SH 的数据\n", + "成功获取 603858.SH 的数据\n", + "成功获取 603859.SH 的数据\n", + "成功获取 603860.SH 的数据\n", + "成功获取 603861.SH 的数据\n", + "成功获取 603863.SH 的数据\n", + "成功获取 603866.SH 的数据\n", + "成功获取 603867.SH 的数据\n", + "成功获取 603868.SH 的数据\n", + "成功获取 603869.SH 的数据\n", + "成功获取 603871.SH 的数据\n", + "成功获取 603876.SH 的数据\n", + "成功获取 603877.SH 的数据\n", + "成功获取 603878.SH 的数据\n", + "成功获取 603879.SH 的数据\n", + "成功获取 603880.SH 的数据\n", + "成功获取 603881.SH 的数据\n", + "成功获取 603882.SH 的数据\n", + "成功获取 603883.SH 的数据\n", + "成功获取 603885.SH 的数据\n", + "成功获取 603886.SH 的数据\n", + "成功获取 603887.SH 的数据\n", + "成功获取 603888.SH 的数据\n", + "成功获取 603889.SH 的数据\n", + "成功获取 603890.SH 的数据\n", + "成功获取 603893.SH 的数据\n", + "成功获取 603895.SH 的数据\n", + "成功获取 603896.SH 的数据\n", + "成功获取 603897.SH 的数据\n", + "成功获取 603898.SH 的数据\n", + "成功获取 603899.SH 的数据\n", + "成功获取 603900.SH 的数据\n", + "成功获取 603901.SH 的数据\n", + "成功获取 603903.SH 的数据\n", + "成功获取 603906.SH 的数据\n", + "成功获取 603908.SH 的数据\n", + "成功获取 603909.SH 的数据\n", + "成功获取 603912.SH 的数据\n", + "成功获取 603915.SH 的数据\n", + "成功获取 603916.SH 的数据\n", + "成功获取 603917.SH 的数据\n", + "成功获取 603918.SH 的数据\n", + "成功获取 603919.SH 的数据\n", + "成功获取 603920.SH 的数据\n", + "成功获取 603922.SH 的数据\n", + "成功获取 603926.SH 的数据\n", + "成功获取 603927.SH 的数据\n", + "成功获取 603928.SH 的数据\n", + "成功获取 603929.SH 的数据\n", + "成功获取 603931.SH 的数据\n", + "成功获取 603933.SH 的数据\n", + "成功获取 603936.SH 的数据\n", + "成功获取 603937.SH 的数据\n", + "成功获取 603938.SH 的数据\n", + "成功获取 603939.SH 的数据\n", + "成功获取 603948.SH 的数据\n", + "成功获取 603949.SH 的数据\n", + "成功获取 603950.SH 的数据\n", + "成功获取 603955.SH 的数据\n", + "成功获取 603956.SH 的数据\n", + "成功获取 603958.SH 的数据\n", + "成功获取 603959.SH 的数据\n", + "成功获取 603960.SH 的数据\n", + "成功获取 603963.SH 的数据\n", + "成功获取 603966.SH 的数据\n", + "成功获取 603967.SH 的数据\n", + "成功获取 603968.SH 的数据\n", + "成功获取 603969.SH 的数据\n", + "成功获取 603970.SH 的数据\n", + "成功获取 603976.SH 的数据\n", + "成功获取 603977.SH 的数据\n", + "成功获取 603978.SH 的数据\n", + "成功获取 603979.SH 的数据\n", + "成功获取 603980.SH 的数据\n", + "成功获取 603982.SH 的数据\n", + "成功获取 603983.SH 的数据\n", + "成功获取 603985.SH 的数据\n", + "成功获取 603986.SH 的数据\n", + "成功获取 603987.SH 的数据\n", + "成功获取 603988.SH 的数据\n", + "成功获取 603989.SH 的数据\n", + "成功获取 603990.SH 的数据\n", + "成功获取 603991.SH 的数据\n", + "成功获取 603992.SH 的数据\n", + "成功获取 603993.SH 的数据\n", + "成功获取 603995.SH 的数据\n", + "成功获取 603997.SH 的数据\n", + "成功获取 603998.SH 的数据\n", + "成功获取 603999.SH 的数据\n", + "成功获取 605001.SH 的数据\n", + "成功获取 605003.SH 的数据\n", + "成功获取 605005.SH 的数据\n", + "成功获取 605006.SH 的数据\n", + "成功获取 605007.SH 的数据\n", + "成功获取 605008.SH 的数据\n", + "成功获取 605009.SH 的数据\n", + "成功获取 605011.SH 的数据\n", + "成功获取 605016.SH 的数据\n", + "成功获取 605018.SH 的数据\n", + "成功获取 605020.SH 的数据\n", + "成功获取 605028.SH 的数据\n", + "成功获取 605033.SH 的数据\n", + "成功获取 605050.SH 的数据\n", + "成功获取 605055.SH 的数据\n", + "成功获取 605056.SH 的数据\n", + "成功获取 605058.SH 的数据\n", + "成功获取 605060.SH 的数据\n", + "成功获取 605066.SH 的数据\n", + "成功获取 605068.SH 的数据\n", + "成功获取 605069.SH 的数据\n", + "成功获取 605077.SH 的数据\n", + "成功获取 605080.SH 的数据\n", + "成功获取 605081.SH 的数据\n", + "成功获取 605086.SH 的数据\n", + "成功获取 605088.SH 的数据\n", + "成功获取 605089.SH 的数据\n", + "成功获取 605090.SH 的数据\n", + "成功获取 605098.SH 的数据\n", + "成功获取 605099.SH 的数据\n", + "成功获取 605100.SH 的数据\n", + "成功获取 605108.SH 的数据\n", + "成功获取 605111.SH 的数据\n", + "成功获取 605116.SH 的数据\n", + "成功获取 605117.SH 的数据\n", + "成功获取 605118.SH 的数据\n", + "成功获取 605122.SH 的数据\n", + "成功获取 605123.SH 的数据\n", + "成功获取 605128.SH 的数据\n", + "成功获取 605133.SH 的数据\n", + "成功获取 605136.SH 的数据\n", + "成功获取 605138.SH 的数据\n", + "成功获取 605151.SH 的数据\n", + "成功获取 605155.SH 的数据\n", + "成功获取 605158.SH 的数据\n", + "成功获取 605162.SH 的数据\n", + "成功获取 605166.SH 的数据\n", + "成功获取 605167.SH 的数据\n", + "成功获取 605168.SH 的数据\n", + "成功获取 605169.SH 的数据\n", + "已调用300次API,等待 21.87 秒以满足速率限制...\n", + "成功获取 605177.SH 的数据\n", + "成功获取 605178.SH 的数据\n", + "成功获取 605179.SH 的数据\n", + "成功获取 605180.SH 的数据\n", + "成功获取 605183.SH 的数据\n", + "成功获取 605186.SH 的数据\n", + "成功获取 605188.SH 的数据\n", + "成功获取 605189.SH 的数据\n", + "成功获取 605196.SH 的数据\n", + "成功获取 605198.SH 的数据\n", + "成功获取 605199.SH 的数据\n", + "成功获取 605208.SH 的数据\n", + "成功获取 605218.SH 的数据\n", + "成功获取 605222.SH 的数据\n", + "成功获取 605228.SH 的数据\n", + "成功获取 605255.SH 的数据\n", + "成功获取 605258.SH 的数据\n", + "成功获取 605259.SH 的数据\n", + "成功获取 605266.SH 的数据\n", + "成功获取 605268.SH 的数据\n", + "成功获取 605277.SH 的数据\n", + "成功获取 605286.SH 的数据\n", + "成功获取 605287.SH 的数据\n", + "成功获取 605288.SH 的数据\n", + "成功获取 605289.SH 的数据\n", + "成功获取 605296.SH 的数据\n", + "成功获取 605298.SH 的数据\n", + "成功获取 605299.SH 的数据\n", + "成功获取 605300.SH 的数据\n", + "成功获取 605303.SH 的数据\n", + "成功获取 605305.SH 的数据\n", + "成功获取 605318.SH 的数据\n", + "成功获取 605319.SH 的数据\n", + "成功获取 605333.SH 的数据\n", + "成功获取 605336.SH 的数据\n", + "成功获取 605337.SH 的数据\n", + "成功获取 605338.SH 的数据\n", + "成功获取 605339.SH 的数据\n", + "成功获取 605358.SH 的数据\n", + "成功获取 605365.SH 的数据\n", + "成功获取 605366.SH 的数据\n", + "成功获取 605368.SH 的数据\n", + "成功获取 605369.SH 的数据\n", + "成功获取 605376.SH 的数据\n", + "成功获取 605377.SH 的数据\n", + "成功获取 605378.SH 的数据\n", + "成功获取 605388.SH 的数据\n", + "成功获取 605389.SH 的数据\n", + "成功获取 605398.SH 的数据\n", + "成功获取 605399.SH 的数据\n", + "成功获取 605488.SH 的数据\n", + "成功获取 605499.SH 的数据\n", + "成功获取 605500.SH 的数据\n", + "成功获取 605507.SH 的数据\n", + "成功获取 605555.SH 的数据\n", + "成功获取 605566.SH 的数据\n", + "成功获取 605567.SH 的数据\n", + "成功获取 605577.SH 的数据\n", + "成功获取 605580.SH 的数据\n", + "成功获取 605588.SH 的数据\n", + "成功获取 605589.SH 的数据\n", + "成功获取 605598.SH 的数据\n", + "成功获取 605599.SH 的数据\n", + "成功获取 688001.SH 的数据\n", + "成功获取 688002.SH 的数据\n", + "成功获取 688003.SH 的数据\n", + "成功获取 688004.SH 的数据\n", + "成功获取 688005.SH 的数据\n", + "成功获取 688006.SH 的数据\n", + "成功获取 688007.SH 的数据\n", + "成功获取 688008.SH 的数据\n", + "成功获取 688009.SH 的数据\n", + "成功获取 688010.SH 的数据\n", + "成功获取 688011.SH 的数据\n", + "成功获取 688012.SH 的数据\n", + "成功获取 688013.SH 的数据\n", + "成功获取 688015.SH 的数据\n", + "成功获取 688016.SH 的数据\n", + "成功获取 688017.SH 的数据\n", + "成功获取 688018.SH 的数据\n", + "成功获取 688019.SH 的数据\n", + "成功获取 688020.SH 的数据\n", + "成功获取 688021.SH 的数据\n", + "成功获取 688022.SH 的数据\n", + "成功获取 688023.SH 的数据\n", + "成功获取 688025.SH 的数据\n", + "成功获取 688026.SH 的数据\n", + "成功获取 688027.SH 的数据\n", + "成功获取 688028.SH 的数据\n", + "成功获取 688029.SH 的数据\n", + "成功获取 688030.SH 的数据\n", + "成功获取 688031.SH 的数据\n", + "成功获取 688032.SH 的数据\n", + "成功获取 688033.SH 的数据\n", + "成功获取 688035.SH 的数据\n", + "成功获取 688036.SH 的数据\n", + "成功获取 688037.SH 的数据\n", + "成功获取 688038.SH 的数据\n", + "成功获取 688039.SH 的数据\n", + "成功获取 688041.SH 的数据\n", + "成功获取 688045.SH 的数据\n", + "成功获取 688046.SH 的数据\n", + "成功获取 688047.SH 的数据\n", + "成功获取 688048.SH 的数据\n", + "成功获取 688049.SH 的数据\n", + "成功获取 688050.SH 的数据\n", + "成功获取 688051.SH 的数据\n", + "成功获取 688052.SH 的数据\n", + "成功获取 688053.SH 的数据\n", + "成功获取 688055.SH 的数据\n", + "成功获取 688056.SH 的数据\n", + "成功获取 688057.SH 的数据\n", + "成功获取 688058.SH 的数据\n", + "成功获取 688059.SH 的数据\n", + "成功获取 688060.SH 的数据\n", + "成功获取 688061.SH 的数据\n", + "成功获取 688062.SH 的数据\n", + "成功获取 688063.SH 的数据\n", + "成功获取 688065.SH 的数据\n", + "成功获取 688066.SH 的数据\n", + "成功获取 688067.SH 的数据\n", + "成功获取 688068.SH 的数据\n", + "成功获取 688069.SH 的数据\n", + "成功获取 688070.SH 的数据\n", + "成功获取 688071.SH 的数据\n", + "成功获取 688072.SH 的数据\n", + "成功获取 688073.SH 的数据\n", + "成功获取 688075.SH 的数据\n", + "成功获取 688076.SH 的数据\n", + "成功获取 688077.SH 的数据\n", + "成功获取 688078.SH 的数据\n", + "成功获取 688079.SH 的数据\n", + "成功获取 688080.SH 的数据\n", + "成功获取 688081.SH 的数据\n", + "成功获取 688082.SH 的数据\n", + "成功获取 688083.SH 的数据\n", + "成功获取 688084.SH 的数据\n", + "成功获取 688085.SH 的数据\n", + "成功获取 688087.SH 的数据\n", + "成功获取 688088.SH 的数据\n", + "成功获取 688089.SH 的数据\n", + "成功获取 688090.SH 的数据\n", + "成功获取 688091.SH 的数据\n", + "成功获取 688092.SH 的数据\n", + "成功获取 688093.SH 的数据\n", + "成功获取 688095.SH 的数据\n", + "成功获取 688096.SH 的数据\n", + "成功获取 688097.SH 的数据\n", + "成功获取 688098.SH 的数据\n", + "成功获取 688099.SH 的数据\n", + "成功获取 688100.SH 的数据\n", + "成功获取 688101.SH 的数据\n", + "成功获取 688102.SH 的数据\n", + "成功获取 688103.SH 的数据\n", + "成功获取 688105.SH 的数据\n", + "成功获取 688106.SH 的数据\n", + "成功获取 688107.SH 的数据\n", + "成功获取 688108.SH 的数据\n", + "成功获取 688109.SH 的数据\n", + "成功获取 688110.SH 的数据\n", + "成功获取 688111.SH 的数据\n", + "成功获取 688112.SH 的数据\n", + "成功获取 688113.SH 的数据\n", + "成功获取 688114.SH 的数据\n", + "成功获取 688115.SH 的数据\n", + "成功获取 688116.SH 的数据\n", + "成功获取 688117.SH 的数据\n", + "成功获取 688118.SH 的数据\n", + "成功获取 688119.SH 的数据\n", + "成功获取 688120.SH 的数据\n", + "成功获取 688121.SH 的数据\n", + "成功获取 688122.SH 的数据\n", + "成功获取 688123.SH 的数据\n", + "成功获取 688125.SH 的数据\n", + "成功获取 688126.SH 的数据\n", + "成功获取 688127.SH 的数据\n", + "成功获取 688128.SH 的数据\n", + "成功获取 688129.SH 的数据\n", + "成功获取 688130.SH 的数据\n", + "成功获取 688131.SH 的数据\n", + "成功获取 688132.SH 的数据\n", + "成功获取 688133.SH 的数据\n", + "成功获取 688135.SH 的数据\n", + "成功获取 688136.SH 的数据\n", + "成功获取 688137.SH 的数据\n", + "成功获取 688138.SH 的数据\n", + "成功获取 688139.SH 的数据\n", + "成功获取 688141.SH 的数据\n", + "成功获取 688143.SH 的数据\n", + "成功获取 688146.SH 的数据\n", + "成功获取 688147.SH 的数据\n", + "成功获取 688148.SH 的数据\n", + "成功获取 688150.SH 的数据\n", + "成功获取 688151.SH 的数据\n", + "成功获取 688152.SH 的数据\n", + "成功获取 688153.SH 的数据\n", + "成功获取 688155.SH 的数据\n", + "成功获取 688156.SH 的数据\n", + "成功获取 688157.SH 的数据\n", + "成功获取 688158.SH 的数据\n", + "成功获取 688159.SH 的数据\n", + "成功获取 688160.SH 的数据\n", + "成功获取 688161.SH 的数据\n", + "成功获取 688162.SH 的数据\n", + "成功获取 688163.SH 的数据\n", + "成功获取 688165.SH 的数据\n", + "成功获取 688166.SH 的数据\n", + "成功获取 688167.SH 的数据\n", + "成功获取 688168.SH 的数据\n", + "成功获取 688169.SH 的数据\n", + "成功获取 688170.SH 的数据\n", + "成功获取 688171.SH 的数据\n", + "成功获取 688172.SH 的数据\n", + "成功获取 688173.SH 的数据\n", + "成功获取 688175.SH 的数据\n", + "成功获取 688176.SH 的数据\n", + "成功获取 688177.SH 的数据\n", + "成功获取 688178.SH 的数据\n", + "成功获取 688179.SH 的数据\n", + "成功获取 688180.SH 的数据\n", + "成功获取 688181.SH 的数据\n", + "成功获取 688182.SH 的数据\n", + "成功获取 688183.SH 的数据\n", + "成功获取 688184.SH 的数据\n", + "成功获取 688185.SH 的数据\n", + "成功获取 688186.SH 的数据\n", + "成功获取 688187.SH 的数据\n", + "成功获取 688188.SH 的数据\n", + "成功获取 688189.SH 的数据\n", + "成功获取 688190.SH 的数据\n", + "成功获取 688191.SH 的数据\n", + "成功获取 688192.SH 的数据\n", + "成功获取 688193.SH 的数据\n", + "成功获取 688195.SH 的数据\n", + "成功获取 688196.SH 的数据\n", + "成功获取 688197.SH 的数据\n", + "成功获取 688198.SH 的数据\n", + "成功获取 688199.SH 的数据\n", + "成功获取 688200.SH 的数据\n", + "成功获取 688201.SH 的数据\n", + "成功获取 688202.SH 的数据\n", + "成功获取 688203.SH 的数据\n", + "成功获取 688205.SH 的数据\n", + "成功获取 688206.SH 的数据\n", + "成功获取 688207.SH 的数据\n", + "成功获取 688208.SH 的数据\n", + "成功获取 688209.SH 的数据\n", + "成功获取 688210.SH 的数据\n", + "成功获取 688211.SH 的数据\n", + "成功获取 688212.SH 的数据\n", + "成功获取 688213.SH 的数据\n", + "成功获取 688215.SH 的数据\n", + "成功获取 688216.SH 的数据\n", + "成功获取 688217.SH 的数据\n", + "成功获取 688218.SH 的数据\n", + "成功获取 688219.SH 的数据\n", + "成功获取 688220.SH 的数据\n", + "成功获取 688221.SH 的数据\n", + "成功获取 688222.SH 的数据\n", + "成功获取 688223.SH 的数据\n", + "成功获取 688225.SH 的数据\n", + "成功获取 688226.SH 的数据\n", + "成功获取 688227.SH 的数据\n", + "成功获取 688228.SH 的数据\n", + "成功获取 688229.SH 的数据\n", + "成功获取 688230.SH 的数据\n", + "成功获取 688231.SH 的数据\n", + "成功获取 688232.SH 的数据\n", + "成功获取 688233.SH 的数据\n", + "成功获取 688234.SH 的数据\n", + "成功获取 688235.SH 的数据\n", + "成功获取 688236.SH 的数据\n", + "成功获取 688237.SH 的数据\n", + "成功获取 688238.SH 的数据\n", + "成功获取 688239.SH 的数据\n", + "成功获取 688244.SH 的数据\n", + "成功获取 688246.SH 的数据\n", + "成功获取 688247.SH 的数据\n", + "成功获取 688248.SH 的数据\n", + "成功获取 688249.SH 的数据\n", + "成功获取 688251.SH 的数据\n", + "成功获取 688252.SH 的数据\n", + "成功获取 688253.SH 的数据\n", + "成功获取 688255.SH 的数据\n", + "成功获取 688256.SH 的数据\n", + "成功获取 688257.SH 的数据\n", + "成功获取 688258.SH 的数据\n", + "成功获取 688259.SH 的数据\n", + "成功获取 688260.SH 的数据\n", + "成功获取 688261.SH 的数据\n", + "成功获取 688262.SH 的数据\n", + "成功获取 688265.SH 的数据\n", + "成功获取 688266.SH 的数据\n", + "成功获取 688267.SH 的数据\n", + "成功获取 688268.SH 的数据\n", + "成功获取 688269.SH 的数据\n", + "成功获取 688270.SH 的数据\n", + "成功获取 688271.SH 的数据\n", + "成功获取 688272.SH 的数据\n", + "成功获取 688273.SH 的数据\n", + "已调用300次API,等待 22.60 秒以满足速率限制...\n", + "成功获取 688275.SH 的数据\n", + "成功获取 688276.SH 的数据\n", + "成功获取 688277.SH 的数据\n", + "成功获取 688278.SH 的数据\n", + "成功获取 688279.SH 的数据\n", + "成功获取 688280.SH 的数据\n", + "成功获取 688281.SH 的数据\n", + "成功获取 688282.SH 的数据\n", + "成功获取 688283.SH 的数据\n", + "成功获取 688285.SH 的数据\n", + "成功获取 688286.SH 的数据\n", + "成功获取 688287.SH 的数据\n", + "成功获取 688288.SH 的数据\n", + "成功获取 688289.SH 的数据\n", + "成功获取 688290.SH 的数据\n", + "成功获取 688291.SH 的数据\n", + "成功获取 688292.SH 的数据\n", + "成功获取 688293.SH 的数据\n", + "成功获取 688295.SH 的数据\n", + "成功获取 688296.SH 的数据\n", + "成功获取 688297.SH 的数据\n", + "成功获取 688298.SH 的数据\n", + "成功获取 688299.SH 的数据\n", + "成功获取 688300.SH 的数据\n", + "成功获取 688301.SH 的数据\n", + "成功获取 688302.SH 的数据\n", + "成功获取 688303.SH 的数据\n", + "成功获取 688305.SH 的数据\n", + "成功获取 688306.SH 的数据\n", + "成功获取 688307.SH 的数据\n", + "成功获取 688308.SH 的数据\n", + "成功获取 688309.SH 的数据\n", + "成功获取 688310.SH 的数据\n", + "成功获取 688311.SH 的数据\n", + "成功获取 688312.SH 的数据\n", + "成功获取 688313.SH 的数据\n", + "成功获取 688314.SH 的数据\n", + "成功获取 688315.SH 的数据\n", + "成功获取 688316.SH 的数据\n", + "成功获取 688317.SH 的数据\n", + "成功获取 688318.SH 的数据\n", + "成功获取 688319.SH 的数据\n", + "成功获取 688320.SH 的数据\n", + "成功获取 688321.SH 的数据\n", + "成功获取 688322.SH 的数据\n", + "成功获取 688323.SH 的数据\n", + "成功获取 688325.SH 的数据\n", + "成功获取 688326.SH 的数据\n", + "成功获取 688327.SH 的数据\n", + "成功获取 688328.SH 的数据\n", + "成功获取 688329.SH 的数据\n", + "成功获取 688330.SH 的数据\n", + "成功获取 688331.SH 的数据\n", + "成功获取 688332.SH 的数据\n", + "成功获取 688333.SH 的数据\n", + "成功获取 688334.SH 的数据\n", + "成功获取 688335.SH 的数据\n", + "成功获取 688336.SH 的数据\n", + "成功获取 688337.SH 的数据\n", + "成功获取 688338.SH 的数据\n", + "成功获取 688339.SH 的数据\n", + "成功获取 688343.SH 的数据\n", + "成功获取 688345.SH 的数据\n", + "成功获取 688347.SH 的数据\n", + "成功获取 688348.SH 的数据\n", + "成功获取 688349.SH 的数据\n", + "成功获取 688350.SH 的数据\n", + "成功获取 688351.SH 的数据\n", + "成功获取 688352.SH 的数据\n", + "成功获取 688353.SH 的数据\n", + "成功获取 688355.SH 的数据\n", + "成功获取 688356.SH 的数据\n", + "成功获取 688357.SH 的数据\n", + "成功获取 688358.SH 的数据\n", + "成功获取 688359.SH 的数据\n", + "成功获取 688360.SH 的数据\n", + "成功获取 688361.SH 的数据\n", + "成功获取 688362.SH 的数据\n", + "成功获取 688363.SH 的数据\n", + "成功获取 688365.SH 的数据\n", + "成功获取 688366.SH 的数据\n", + "成功获取 688367.SH 的数据\n", + "成功获取 688368.SH 的数据\n", + "成功获取 688369.SH 的数据\n", + "成功获取 688370.SH 的数据\n", + "成功获取 688371.SH 的数据\n", + "成功获取 688372.SH 的数据\n", + "成功获取 688373.SH 的数据\n", + "成功获取 688375.SH 的数据\n", + "成功获取 688376.SH 的数据\n", + "成功获取 688377.SH 的数据\n", + "成功获取 688378.SH 的数据\n", + "成功获取 688379.SH 的数据\n", + "成功获取 688380.SH 的数据\n", + "成功获取 688381.SH 的数据\n", + "成功获取 688382.SH 的数据\n", + "成功获取 688383.SH 的数据\n", + "成功获取 688385.SH 的数据\n", + "成功获取 688386.SH 的数据\n", + "成功获取 688387.SH 的数据\n", + "成功获取 688388.SH 的数据\n", + "成功获取 688389.SH 的数据\n", + "成功获取 688390.SH 的数据\n", + "成功获取 688391.SH 的数据\n", + "成功获取 688392.SH 的数据\n", + "成功获取 688393.SH 的数据\n", + "成功获取 688395.SH 的数据\n", + "成功获取 688396.SH 的数据\n", + "成功获取 688398.SH 的数据\n", + "成功获取 688399.SH 的数据\n", + "成功获取 688400.SH 的数据\n", + "成功获取 688401.SH 的数据\n", + "成功获取 688403.SH 的数据\n", + "成功获取 688408.SH 的数据\n", + "成功获取 688409.SH 的数据\n", + "成功获取 688410.SH 的数据\n", + "成功获取 688411.SH 的数据\n", + "成功获取 688416.SH 的数据\n", + "成功获取 688418.SH 的数据\n", + "成功获取 688419.SH 的数据\n", + "成功获取 688420.SH 的数据\n", + "成功获取 688425.SH 的数据\n", + "成功获取 688426.SH 的数据\n", + "成功获取 688428.SH 的数据\n", + "成功获取 688429.SH 的数据\n", + "成功获取 688432.SH 的数据\n", + "成功获取 688433.SH 的数据\n", + "成功获取 688435.SH 的数据\n", + "成功获取 688439.SH 的数据\n", + "成功获取 688443.SH 的数据\n", + "成功获取 688448.SH 的数据\n", + "成功获取 688449.SH 的数据\n", + "成功获取 688450.SH 的数据\n", + "成功获取 688455.SH 的数据\n", + "成功获取 688456.SH 的数据\n", + "成功获取 688458.SH 的数据\n", + "成功获取 688459.SH 的数据\n", + "成功获取 688466.SH 的数据\n", + "成功获取 688468.SH 的数据\n", + "成功获取 688469.SH 的数据\n", + "成功获取 688472.SH 的数据\n", + "成功获取 688475.SH 的数据\n", + "成功获取 688478.SH 的数据\n", + "成功获取 688479.SH 的数据\n", + "成功获取 688480.SH 的数据\n", + "成功获取 688484.SH 的数据\n", + "成功获取 688485.SH 的数据\n", + "成功获取 688486.SH 的数据\n", + "成功获取 688488.SH 的数据\n", + "成功获取 688489.SH 的数据\n", + "成功获取 688496.SH 的数据\n", + "成功获取 688498.SH 的数据\n", + "成功获取 688499.SH 的数据\n", + "成功获取 688500.SH 的数据\n", + "成功获取 688501.SH 的数据\n", + "成功获取 688502.SH 的数据\n", + "成功获取 688503.SH 的数据\n", + "成功获取 688505.SH 的数据\n", + "成功获取 688506.SH 的数据\n", + "成功获取 688507.SH 的数据\n", + "成功获取 688508.SH 的数据\n", + "成功获取 688509.SH 的数据\n", + "成功获取 688510.SH 的数据\n", + "成功获取 688511.SH 的数据\n", + "成功获取 688512.SH 的数据\n", + "成功获取 688513.SH 的数据\n", + "成功获取 688515.SH 的数据\n", + "成功获取 688516.SH 的数据\n", + "成功获取 688517.SH 的数据\n", + "成功获取 688518.SH 的数据\n", + "成功获取 688519.SH 的数据\n", + "成功获取 688520.SH 的数据\n", + "成功获取 688521.SH 的数据\n", + "成功获取 688522.SH 的数据\n", + "成功获取 688523.SH 的数据\n", + "成功获取 688525.SH 的数据\n", + "成功获取 688526.SH 的数据\n", + "成功获取 688528.SH 的数据\n", + "成功获取 688529.SH 的数据\n", + "成功获取 688530.SH 的数据\n", + "成功获取 688531.SH 的数据\n", + "成功获取 688533.SH 的数据\n", + "成功获取 688535.SH 的数据\n", + "成功获取 688536.SH 的数据\n", + "成功获取 688538.SH 的数据\n", + "成功获取 688539.SH 的数据\n", + "成功获取 688543.SH 的数据\n", + "成功获取 688545.SH 的数据\n", + "成功获取 688548.SH 的数据\n", + "成功获取 688549.SH 的数据\n", + "成功获取 688550.SH 的数据\n", + "成功获取 688551.SH 的数据\n", + "成功获取 688552.SH 的数据\n", + "成功获取 688553.SH 的数据\n", + "成功获取 688556.SH 的数据\n", + "成功获取 688557.SH 的数据\n", + "成功获取 688558.SH 的数据\n", + "成功获取 688559.SH 的数据\n", + "成功获取 688560.SH 的数据\n", + "成功获取 688561.SH 的数据\n", + "成功获取 688562.SH 的数据\n", + "成功获取 688563.SH 的数据\n", + "成功获取 688565.SH 的数据\n", + "成功获取 688566.SH 的数据\n", + "成功获取 688567.SH 的数据\n", + "成功获取 688568.SH 的数据\n", + "成功获取 688569.SH 的数据\n", + "成功获取 688570.SH 的数据\n", + "成功获取 688571.SH 的数据\n", + "成功获取 688573.SH 的数据\n", + "成功获取 688575.SH 的数据\n", + "成功获取 688576.SH 的数据\n", + "成功获取 688577.SH 的数据\n", + "成功获取 688578.SH 的数据\n", + "成功获取 688579.SH 的数据\n", + "成功获取 688580.SH 的数据\n", + "成功获取 688581.SH 的数据\n", + "成功获取 688582.SH 的数据\n", + "成功获取 688583.SH 的数据\n", + "成功获取 688584.SH 的数据\n", + "成功获取 688585.SH 的数据\n", + "成功获取 688586.SH 的数据\n", + "成功获取 688588.SH 的数据\n", + "成功获取 688589.SH 的数据\n", + "成功获取 688590.SH 的数据\n", + "成功获取 688591.SH 的数据\n", + "成功获取 688592.SH 的数据\n", + "成功获取 688593.SH 的数据\n", + "成功获取 688595.SH 的数据\n", + "成功获取 688596.SH 的数据\n", + "成功获取 688597.SH 的数据\n", + "成功获取 688598.SH 的数据\n", + "成功获取 688599.SH 的数据\n", + "成功获取 688600.SH 的数据\n", + "成功获取 688601.SH 的数据\n", + "成功获取 688602.SH 的数据\n", + "成功获取 688603.SH 的数据\n", + "成功获取 688605.SH 的数据\n", + "成功获取 688606.SH 的数据\n", + "成功获取 688607.SH 的数据\n", + "成功获取 688608.SH 的数据\n", + "成功获取 688609.SH 的数据\n", + "成功获取 688610.SH 的数据\n", + "成功获取 688611.SH 的数据\n", + "成功获取 688612.SH 的数据\n", + "成功获取 688613.SH 的数据\n", + "成功获取 688615.SH 的数据\n", + "成功获取 688616.SH 的数据\n", + "成功获取 688617.SH 的数据\n", + "成功获取 688618.SH 的数据\n", + "成功获取 688619.SH 的数据\n", + "成功获取 688620.SH 的数据\n", + "成功获取 688621.SH 的数据\n", + "成功获取 688622.SH 的数据\n", + "成功获取 688623.SH 的数据\n", + "成功获取 688625.SH 的数据\n", + "成功获取 688626.SH 的数据\n", + "成功获取 688627.SH 的数据\n", + "成功获取 688628.SH 的数据\n", + "成功获取 688629.SH 的数据\n", + "成功获取 688630.SH 的数据\n", + "成功获取 688631.SH 的数据\n", + "成功获取 688633.SH 的数据\n", + "成功获取 688636.SH 的数据\n", + "成功获取 688638.SH 的数据\n", + "成功获取 688639.SH 的数据\n", + "成功获取 688646.SH 的数据\n", + "成功获取 688648.SH 的数据\n", + "成功获取 688651.SH 的数据\n", + "成功获取 688652.SH 的数据\n", + "成功获取 688653.SH 的数据\n", + "成功获取 688655.SH 的数据\n", + "成功获取 688656.SH 的数据\n", + "成功获取 688657.SH 的数据\n", + "成功获取 688658.SH 的数据\n", + "成功获取 688659.SH 的数据\n", + "成功获取 688660.SH 的数据\n", + "成功获取 688661.SH 的数据\n", + "成功获取 688662.SH 的数据\n", + "成功获取 688663.SH 的数据\n", + "成功获取 688665.SH 的数据\n", + "成功获取 688667.SH 的数据\n", + "成功获取 688668.SH 的数据\n", + "成功获取 688669.SH 的数据\n", + "成功获取 688670.SH 的数据\n", + "成功获取 688671.SH 的数据\n", + "成功获取 688676.SH 的数据\n", + "成功获取 688677.SH 的数据\n", + "成功获取 688678.SH 的数据\n", + "成功获取 688679.SH 的数据\n", + "成功获取 688680.SH 的数据\n", + "成功获取 688681.SH 的数据\n", + "成功获取 688682.SH 的数据\n", + "成功获取 688683.SH 的数据\n", + "成功获取 688685.SH 的数据\n", + "成功获取 688686.SH 的数据\n", + "成功获取 688687.SH 的数据\n", + "成功获取 688689.SH 的数据\n", + "成功获取 688690.SH 的数据\n", + "成功获取 688691.SH 的数据\n", + "已调用300次API,等待 20.75 秒以满足速率限制...\n", + "成功获取 688692.SH 的数据\n", + "成功获取 688693.SH 的数据\n", + "成功获取 688695.SH 的数据\n", + "成功获取 688696.SH 的数据\n", + "成功获取 688697.SH 的数据\n", + "成功获取 688698.SH 的数据\n", + "成功获取 688699.SH 的数据\n", + "成功获取 688700.SH 的数据\n", + "成功获取 688701.SH 的数据\n", + "成功获取 688702.SH 的数据\n", + "成功获取 688707.SH 的数据\n", + "成功获取 688708.SH 的数据\n", + "成功获取 688709.SH 的数据\n", + "成功获取 688710.SH 的数据\n", + "成功获取 688711.SH 的数据\n", + "成功获取 688716.SH 的数据\n", + "成功获取 688717.SH 的数据\n", + "成功获取 688718.SH 的数据\n", + "成功获取 688719.SH 的数据\n", + "成功获取 688720.SH 的数据\n", + "成功获取 688721.SH 的数据\n", + "成功获取 688722.SH 的数据\n", + "成功获取 688726.SH 的数据\n", + "成功获取 688728.SH 的数据\n", + "成功获取 688733.SH 的数据\n", + "成功获取 688737.SH 的数据\n", + "成功获取 688739.SH 的数据\n", + "成功获取 688750.SH 的数据\n", + "成功获取 688758.SH 的数据\n", + "成功获取 688766.SH 的数据\n", + "成功获取 688767.SH 的数据\n", + "成功获取 688768.SH 的数据\n", + "成功获取 688772.SH 的数据\n", + "成功获取 688776.SH 的数据\n", + "成功获取 688777.SH 的数据\n", + "成功获取 688778.SH 的数据\n", + "成功获取 688779.SH 的数据\n", + "成功获取 688786.SH 的数据\n", + "成功获取 688787.SH 的数据\n", + "成功获取 688788.SH 的数据\n", + "成功获取 688789.SH 的数据\n", + "成功获取 688793.SH 的数据\n", + "成功获取 688798.SH 的数据\n", + "成功获取 688799.SH 的数据\n", + "成功获取 688800.SH 的数据\n", + "成功获取 688819.SH 的数据\n", + "成功获取 688981.SH 的数据\n", + "成功获取 830779.BJ 的数据\n", + "成功获取 830799.BJ 的数据\n", + "成功获取 830809.BJ 的数据\n", + "成功获取 830832.BJ 的数据\n", + "成功获取 830839.BJ 的数据\n", + "成功获取 830879.BJ 的数据\n", + "成功获取 830896.BJ 的数据\n", + "成功获取 830946.BJ 的数据\n", + "成功获取 830964.BJ 的数据\n", + "成功获取 830974.BJ 的数据\n", + "成功获取 831010.BJ 的数据\n", + "成功获取 831039.BJ 的数据\n", + "成功获取 831087.BJ 的数据\n", + "成功获取 831152.BJ 的数据\n", + "成功获取 831167.BJ 的数据\n", + "成功获取 831175.BJ 的数据\n", + "成功获取 831195.BJ 的数据\n", + "成功获取 831278.BJ 的数据\n", + "成功获取 831304.BJ 的数据\n", + "成功获取 831305.BJ 的数据\n", + "成功获取 831370.BJ 的数据\n", + "成功获取 831396.BJ 的数据\n", + "成功获取 831445.BJ 的数据\n", + "成功获取 831526.BJ 的数据\n", + "成功获取 831627.BJ 的数据\n", + "成功获取 831641.BJ 的数据\n", + "成功获取 831689.BJ 的数据\n", + "成功获取 831726.BJ 的数据\n", + "成功获取 831768.BJ 的数据\n", + "成功获取 831832.BJ 的数据\n", + "成功获取 831834.BJ 的数据\n", + "成功获取 831855.BJ 的数据\n", + "成功获取 831856.BJ 的数据\n", + "成功获取 831906.BJ 的数据\n", + "成功获取 831961.BJ 的数据\n", + "成功获取 832000.BJ 的数据\n", + "成功获取 832023.BJ 的数据\n", + "成功获取 832089.BJ 的数据\n", + "成功获取 832110.BJ 的数据\n", + "成功获取 832145.BJ 的数据\n", + "成功获取 832149.BJ 的数据\n", + "成功获取 832171.BJ 的数据\n", + "成功获取 832175.BJ 的数据\n", + "成功获取 832225.BJ 的数据\n", + "成功获取 832278.BJ 的数据\n", + "成功获取 832419.BJ 的数据\n", + "成功获取 832469.BJ 的数据\n", + "成功获取 832471.BJ 的数据\n", + "成功获取 832491.BJ 的数据\n", + "成功获取 832522.BJ 的数据\n", + "成功获取 832566.BJ 的数据\n", + "成功获取 832651.BJ 的数据\n", + "成功获取 832662.BJ 的数据\n", + "成功获取 832735.BJ 的数据\n", + "成功获取 832786.BJ 的数据\n", + "成功获取 832802.BJ 的数据\n", + "成功获取 832876.BJ 的数据\n", + "成功获取 832885.BJ 的数据\n", + "成功获取 832978.BJ 的数据\n", + "成功获取 832982.BJ 的数据\n", + "成功获取 833030.BJ 的数据\n", + "成功获取 833075.BJ 的数据\n", + "成功获取 833171.BJ 的数据\n", + "成功获取 833230.BJ 的数据\n", + "成功获取 833266.BJ 的数据\n", + "成功获取 833284.BJ 的数据\n", + "成功获取 833346.BJ 的数据\n", + "成功获取 833394.BJ 的数据\n", + "成功获取 833427.BJ 的数据\n", + "成功获取 833429.BJ 的数据\n", + "成功获取 833454.BJ 的数据\n", + "成功获取 833455.BJ 的数据\n", + "成功获取 833509.BJ 的数据\n", + "成功获取 833523.BJ 的数据\n", + "成功获取 833533.BJ 的数据\n", + "成功获取 833575.BJ 的数据\n", + "成功获取 833580.BJ 的数据\n", + "成功获取 833751.BJ 的数据\n", + "成功获取 833781.BJ 的数据\n", + "成功获取 833819.BJ 的数据\n", + "成功获取 833873.BJ 的数据\n", + "成功获取 833914.BJ 的数据\n", + "成功获取 833943.BJ 的数据\n", + "成功获取 834014.BJ 的数据\n", + "成功获取 834021.BJ 的数据\n", + "成功获取 834033.BJ 的数据\n", + "成功获取 834058.BJ 的数据\n", + "成功获取 834062.BJ 的数据\n", + "成功获取 834261.BJ 的数据\n", + "成功获取 834407.BJ 的数据\n", + "成功获取 834415.BJ 的数据\n", + "成功获取 834475.BJ 的数据\n", + "成功获取 834599.BJ 的数据\n", + "成功获取 834639.BJ 的数据\n", + "成功获取 834682.BJ 的数据\n", + "成功获取 834765.BJ 的数据\n", + "成功获取 834770.BJ 的数据\n", + "成功获取 834950.BJ 的数据\n", + "成功获取 835174.BJ 的数据\n", + "成功获取 835179.BJ 的数据\n", + "成功获取 835184.BJ 的数据\n", + "成功获取 835185.BJ 的数据\n", + "成功获取 835207.BJ 的数据\n", + "成功获取 835237.BJ 的数据\n", + "成功获取 835305.BJ 的数据\n", + "成功获取 835368.BJ 的数据\n", + "成功获取 835438.BJ 的数据\n", + "成功获取 835508.BJ 的数据\n", + "成功获取 835579.BJ 的数据\n", + "成功获取 835640.BJ 的数据\n", + "成功获取 835670.BJ 的数据\n", + "成功获取 835857.BJ 的数据\n", + "成功获取 835892.BJ 的数据\n", + "成功获取 835985.BJ 的数据\n", + "成功获取 836077.BJ 的数据\n", + "成功获取 836149.BJ 的数据\n", + "成功获取 836208.BJ 的数据\n", + "成功获取 836221.BJ 的数据\n", + "成功获取 836239.BJ 的数据\n", + "成功获取 836247.BJ 的数据\n", + "成功获取 836260.BJ 的数据\n", + "成功获取 836263.BJ 的数据\n", + "成功获取 836270.BJ 的数据\n", + "成功获取 836395.BJ 的数据\n", + "成功获取 836414.BJ 的数据\n", + "成功获取 836419.BJ 的数据\n", + "成功获取 836422.BJ 的数据\n", + "成功获取 836433.BJ 的数据\n", + "成功获取 836504.BJ 的数据\n", + "成功获取 836547.BJ 的数据\n", + "成功获取 836675.BJ 的数据\n", + "成功获取 836699.BJ 的数据\n", + "成功获取 836717.BJ 的数据\n", + "成功获取 836720.BJ 的数据\n", + "成功获取 836807.BJ 的数据\n", + "成功获取 836826.BJ 的数据\n", + "成功获取 836871.BJ 的数据\n", + "成功获取 836892.BJ 的数据\n", + "成功获取 836942.BJ 的数据\n", + "成功获取 836957.BJ 的数据\n", + "成功获取 836961.BJ 的数据\n", + "成功获取 837006.BJ 的数据\n", + "成功获取 837023.BJ 的数据\n", + "成功获取 837046.BJ 的数据\n", + "成功获取 837092.BJ 的数据\n", + "成功获取 837174.BJ 的数据\n", + "成功获取 837212.BJ 的数据\n", + "成功获取 837242.BJ 的数据\n", + "成功获取 837344.BJ 的数据\n", + "成功获取 837403.BJ 的数据\n", + "成功获取 837592.BJ 的数据\n", + "成功获取 837663.BJ 的数据\n", + "成功获取 837748.BJ 的数据\n", + "成功获取 837821.BJ 的数据\n", + "成功获取 838030.BJ 的数据\n", + "成功获取 838163.BJ 的数据\n", + "成功获取 838171.BJ 的数据\n", + "成功获取 838227.BJ 的数据\n", + "成功获取 838262.BJ 的数据\n", + "成功获取 838275.BJ 的数据\n", + "成功获取 838402.BJ 的数据\n", + "成功获取 838670.BJ 的数据\n", + "成功获取 838701.BJ 的数据\n", + "成功获取 838810.BJ 的数据\n", + "成功获取 838837.BJ 的数据\n", + "成功获取 838924.BJ 的数据\n", + "成功获取 838971.BJ 的数据\n", + "成功获取 839167.BJ 的数据\n", + "成功获取 839273.BJ 的数据\n", + "成功获取 839371.BJ 的数据\n", + "成功获取 839493.BJ 的数据\n", + "成功获取 839680.BJ 的数据\n", + "成功获取 839719.BJ 的数据\n", + "成功获取 839725.BJ 的数据\n", + "成功获取 839729.BJ 的数据\n", + "成功获取 839790.BJ 的数据\n", + "成功获取 839792.BJ 的数据\n", + "成功获取 839946.BJ 的数据\n", + "成功获取 870199.BJ 的数据\n", + "成功获取 870204.BJ 的数据\n", + "成功获取 870299.BJ 的数据\n", + "成功获取 870357.BJ 的数据\n", + "成功获取 870436.BJ 的数据\n", + "成功获取 870508.BJ 的数据\n", + "成功获取 870656.BJ 的数据\n", + "成功获取 870726.BJ 的数据\n", + "成功获取 870866.BJ 的数据\n", + "成功获取 870976.BJ 的数据\n", + "成功获取 871245.BJ 的数据\n", + "成功获取 871263.BJ 的数据\n", + "成功获取 871396.BJ 的数据\n", + "成功获取 871478.BJ 的数据\n", + "成功获取 871553.BJ 的数据\n", + "成功获取 871634.BJ 的数据\n", + "成功获取 871642.BJ 的数据\n", + "成功获取 871694.BJ 的数据\n", + "成功获取 871753.BJ 的数据\n", + "成功获取 871857.BJ 的数据\n", + "成功获取 871970.BJ 的数据\n", + "成功获取 871981.BJ 的数据\n", + "成功获取 872190.BJ 的数据\n", + "成功获取 872351.BJ 的数据\n", + "成功获取 872374.BJ 的数据\n", + "成功获取 872392.BJ 的数据\n", + "成功获取 872541.BJ 的数据\n", + "成功获取 872808.BJ 的数据\n", + "成功获取 872895.BJ 的数据\n", + "成功获取 872925.BJ 的数据\n", + "成功获取 872931.BJ 的数据\n", + "成功获取 872953.BJ 的数据\n", + "成功获取 873001.BJ 的数据\n", + "成功获取 873122.BJ 的数据\n", + "成功获取 873132.BJ 的数据\n", + "成功获取 873152.BJ 的数据\n", + "成功获取 873167.BJ 的数据\n", + "成功获取 873169.BJ 的数据\n", + "成功获取 873223.BJ 的数据\n", + "成功获取 873305.BJ 的数据\n", + "成功获取 873339.BJ 的数据\n", + "成功获取 873527.BJ 的数据\n", + "成功获取 873570.BJ 的数据\n", + "成功获取 873576.BJ 的数据\n", + "成功获取 873593.BJ 的数据\n", + "成功获取 873665.BJ 的数据\n", + "成功获取 873679.BJ 的数据\n", + "成功获取 873690.BJ 的数据\n", + "成功获取 873693.BJ 的数据\n", + "成功获取 873703.BJ 的数据\n", + "成功获取 873706.BJ 的数据\n", + "成功获取 873726.BJ 的数据\n", + "成功获取 873806.BJ 的数据\n", + "成功获取 873833.BJ 的数据\n", + "成功获取 920002.BJ 的数据\n", + "成功获取 920008.BJ 的数据\n", + "成功获取 920016.BJ 的数据\n", + "成功获取 920019.BJ 的数据\n", + "成功获取 920060.BJ 的数据\n", + "成功获取 920066.BJ 的数据\n", + "成功获取 920082.BJ 的数据\n", + "成功获取 920088.BJ 的数据\n", + "成功获取 920098.BJ 的数据\n", + "成功获取 920099.BJ 的数据\n", + "成功获取 920106.BJ 的数据\n", + "成功获取 920108.BJ 的数据\n", + "成功获取 920111.BJ 的数据\n", + "成功获取 920116.BJ 的数据\n", + "成功获取 920118.BJ 的数据\n", + "成功获取 920128.BJ 的数据\n", + "成功获取 689009.SH 的数据\n", + "成功获取 000003.SZ 的数据\n", + "成功获取 000005.SZ 的数据\n", + "成功获取 000013.SZ 的数据\n", + "成功获取 000015.SZ 的数据\n", + "已调用300次API,等待 22.26 秒以满足速率限制...\n", + "成功获取 000018.SZ 的数据\n", + "成功获取 000023.SZ 的数据\n", + "成功获取 000024.SZ 的数据\n", + "成功获取 000033.SZ 的数据\n", + "成功获取 000038.SZ 的数据\n", + "成功获取 000046.SZ 的数据\n", + "成功获取 000047.SZ 的数据\n", + "成功获取 000150.SZ 的数据\n", + "成功获取 000405.SZ 的数据\n", + "成功获取 000406.SZ 的数据\n", + "成功获取 000412.SZ 的数据\n", + "成功获取 000413.SZ 的数据\n", + "成功获取 000416.SZ 的数据\n", + "成功获取 000418.SZ 的数据\n", + "成功获取 000502.SZ 的数据\n", + "成功获取 000508.SZ 的数据\n", + "成功获取 000511.SZ 的数据\n", + "成功获取 000515.SZ 的数据\n", + "成功获取 000522.SZ 的数据\n", + "成功获取 000527.SZ 的数据\n", + "成功获取 000535.SZ 的数据\n", + "成功获取 000540.SZ 的数据\n", + "成功获取 000542.SZ 的数据\n", + "成功获取 000549.SZ 的数据\n", + "成功获取 000556.SZ 的数据\n", + "成功获取 000562.SZ 的数据\n", + "成功获取 000569.SZ 的数据\n", + "成功获取 000578.SZ 的数据\n", + "成功获取 000583.SZ 的数据\n", + "成功获取 000585.SZ 的数据\n", + "成功获取 000587.SZ 的数据\n", + "成功获取 000588.SZ 的数据\n", + "成功获取 000594.SZ 的数据\n", + "成功获取 000602.SZ 的数据\n", + "成功获取 000606.SZ 的数据\n", + "成功获取 000611.SZ 的数据\n", + "成功获取 000613.SZ 的数据\n", + "成功获取 000616.SZ 的数据\n", + "成功获取 000618.SZ 的数据\n", + "成功获取 000621.SZ 的数据\n", + "成功获取 000653.SZ 的数据\n", + "成功获取 000658.SZ 的数据\n", + "成功获取 000660.SZ 的数据\n", + "成功获取 000662.SZ 的数据\n", + "成功获取 000666.SZ 的数据\n", + "成功获取 000667.SZ 的数据\n", + "成功获取 000671.SZ 的数据\n", + "成功获取 000673.SZ 的数据\n", + "成功获取 000675.SZ 的数据\n", + "成功获取 000687.SZ 的数据\n", + "成功获取 000689.SZ 的数据\n", + "成功获取 000693.SZ 的数据\n", + "成功获取 000699.SZ 的数据\n", + "成功获取 000730.SZ 的数据\n", + "成功获取 000732.SZ 的数据\n", + "成功获取 000748.SZ 的数据\n", + "成功获取 000760.SZ 的数据\n", + "成功获取 000763.SZ 的数据\n", + "成功获取 000765.SZ 的数据\n", + "成功获取 000769.SZ 的数据\n", + "成功获取 000780.SZ 的数据\n", + "成功获取 000787.SZ 的数据\n", + "成功获取 000805.SZ 的数据\n", + "成功获取 000806.SZ 的数据\n", + "成功获取 000817.SZ 的数据\n", + "成功获取 000827.SZ 的数据\n", + "成功获取 000832.SZ 的数据\n", + "成功获取 000835.SZ 的数据\n", + "成功获取 000836.SZ 的数据\n", + "成功获取 000861.SZ 的数据\n", + "成功获取 000866.SZ 的数据\n", + "成功获取 000916.SZ 的数据\n", + "成功获取 000918.SZ 的数据\n", + "成功获取 000939.SZ 的数据\n", + "成功获取 000956.SZ 的数据\n", + "成功获取 000961.SZ 的数据\n", + "成功获取 000971.SZ 的数据\n", + "成功获取 000976.SZ 的数据\n", + "成功获取 000979.SZ 的数据\n", + "成功获取 000982.SZ 的数据\n", + "成功获取 000996.SZ 的数据\n", + "成功获取 002002.SZ 的数据\n", + "成功获取 002013.SZ 的数据\n", + "成功获取 002018.SZ 的数据\n", + "成功获取 002070.SZ 的数据\n", + "成功获取 002071.SZ 的数据\n", + "成功获取 002087.SZ 的数据\n", + "成功获取 002089.SZ 的数据\n", + "成功获取 002113.SZ 的数据\n", + "成功获取 002118.SZ 的数据\n", + "成功获取 002143.SZ 的数据\n", + "成功获取 002147.SZ 的数据\n", + "成功获取 002220.SZ 的数据\n", + "成功获取 002260.SZ 的数据\n", + "成功获取 002280.SZ 的数据\n", + "成功获取 002288.SZ 的数据\n", + "成功获取 002308.SZ 的数据\n", + "成功获取 002325.SZ 的数据\n", + "成功获取 002341.SZ 的数据\n", + "成功获取 002359.SZ 的数据\n", + "成功获取 002411.SZ 的数据\n", + "成功获取 002417.SZ 的数据\n", + "成功获取 002433.SZ 的数据\n", + "成功获取 002435.SZ 的数据\n", + "成功获取 002447.SZ 的数据\n", + "成功获取 002450.SZ 的数据\n", + "成功获取 002464.SZ 的数据\n", + "成功获取 002473.SZ 的数据\n", + "成功获取 002477.SZ 的数据\n", + "成功获取 002499.SZ 的数据\n", + "成功获取 002502.SZ 的数据\n", + "成功获取 002503.SZ 的数据\n", + "成功获取 002504.SZ 的数据\n", + "成功获取 002505.SZ 的数据\n", + "成功获取 002509.SZ 的数据\n", + "成功获取 002604.SZ 的数据\n", + "成功获取 002610.SZ 的数据\n", + "成功获取 002618.SZ 的数据\n", + "成功获取 002619.SZ 的数据\n", + "成功获取 002621.SZ 的数据\n", + "成功获取 002665.SZ 的数据\n", + "成功获取 002680.SZ 的数据\n", + "成功获取 002684.SZ 的数据\n", + "成功获取 002699.SZ 的数据\n", + "成功获取 002711.SZ 的数据\n", + "成功获取 002740.SZ 的数据\n", + "成功获取 002751.SZ 的数据\n", + "成功获取 002770.SZ 的数据\n", + "成功获取 002776.SZ 的数据\n", + "成功获取 002781.SZ 的数据\n", + "成功获取 300023.SZ 的数据\n", + "成功获取 300028.SZ 的数据\n", + "成功获取 300038.SZ 的数据\n", + "成功获取 300064.SZ 的数据\n", + "成功获取 300089.SZ 的数据\n", + "成功获取 300090.SZ 的数据\n", + "成功获取 300104.SZ 的数据\n", + "成功获取 300116.SZ 的数据\n", + "成功获取 300156.SZ 的数据\n", + "成功获取 300178.SZ 的数据\n", + "成功获取 300186.SZ 的数据\n", + "成功获取 300202.SZ 的数据\n", + "成功获取 300216.SZ 的数据\n", + "成功获取 300262.SZ 的数据\n", + "成功获取 300273.SZ 的数据\n", + "成功获取 300282.SZ 的数据\n", + "成功获取 300297.SZ 的数据\n", + "成功获取 300309.SZ 的数据\n", + "成功获取 300312.SZ 的数据\n", + "成功获取 300325.SZ 的数据\n", + "成功获取 300330.SZ 的数据\n", + "成功获取 300336.SZ 的数据\n", + "成功获取 300356.SZ 的数据\n", + "成功获取 300362.SZ 的数据\n", + "成功获取 300367.SZ 的数据\n", + "成功获取 300372.SZ 的数据\n", + "成功获取 300392.SZ 的数据\n", + "成功获取 300431.SZ 的数据\n", + "成功获取 300495.SZ 的数据\n", + "成功获取 300526.SZ 的数据\n", + "成功获取 300742.SZ 的数据\n", + "成功获取 300799.SZ 的数据\n", + "成功获取 600001.SH 的数据\n", + "成功获取 600002.SH 的数据\n", + "成功获取 600003.SH 的数据\n", + "成功获取 600005.SH 的数据\n", + "成功获取 600065.SH 的数据\n", + "成功获取 600068.SH 的数据\n", + "成功获取 600069.SH 的数据\n", + "成功获取 600074.SH 的数据\n", + "成功获取 600077.SH 的数据\n", + "成功获取 600086.SH 的数据\n", + "成功获取 600087.SH 的数据\n", + "成功获取 600090.SH 的数据\n", + "成功获取 600091.SH 的数据\n", + "成功获取 600092.SH 的数据\n", + "成功获取 600093.SH 的数据\n", + "成功获取 600102.SH 的数据\n", + "成功获取 600112.SH 的数据\n", + "成功获取 600122.SH 的数据\n", + "成功获取 600139.SH 的数据\n", + "成功获取 600145.SH 的数据\n", + "成功获取 600146.SH 的数据\n", + "成功获取 600175.SH 的数据\n", + "成功获取 600181.SH 的数据\n", + "成功获取 600205.SH 的数据\n", + "成功获取 600209.SH 的数据\n", + "成功获取 600213.SH 的数据\n", + "成功获取 600220.SH 的数据\n", + "成功获取 600240.SH 的数据\n", + "成功获取 600242.SH 的数据\n", + "成功获取 600247.SH 的数据\n", + "成功获取 600253.SH 的数据\n", + "成功获取 600260.SH 的数据\n", + "成功获取 600263.SH 的数据\n", + "成功获取 600270.SH 的数据\n", + "成功获取 600275.SH 的数据\n", + "成功获取 600277.SH 的数据\n", + "成功获取 600286.SH 的数据\n", + "成功获取 600290.SH 的数据\n", + "成功获取 600291.SH 的数据\n", + "成功获取 600296.SH 的数据\n", + "成功获取 600297.SH 的数据\n", + "成功获取 600306.SH 的数据\n", + "成功获取 600311.SH 的数据\n", + "成功获取 600317.SH 的数据\n", + "成功获取 600321.SH 的数据\n", + "成功获取 600357.SH 的数据\n", + "成功获取 600385.SH 的数据\n", + "成功获取 600393.SH 的数据\n", + "成功获取 600401.SH 的数据\n", + "成功获取 600432.SH 的数据\n", + "成功获取 600466.SH 的数据\n", + "成功获取 600472.SH 的数据\n", + "成功获取 600485.SH 的数据\n", + "成功获取 600532.SH 的数据\n", + "成功获取 600553.SH 的数据\n", + "成功获取 600555.SH 的数据\n", + "成功获取 600565.SH 的数据\n", + "成功获取 600591.SH 的数据\n", + "成功获取 600607.SH 的数据\n", + "成功获取 600614.SH 的数据\n", + "成功获取 600625.SH 的数据\n", + "成功获取 600627.SH 的数据\n", + "成功获取 600631.SH 的数据\n", + "成功获取 600632.SH 的数据\n", + "成功获取 600634.SH 的数据\n", + "成功获取 600646.SH 的数据\n", + "成功获取 600647.SH 的数据\n", + "成功获取 600652.SH 的数据\n", + "成功获取 600656.SH 的数据\n", + "成功获取 600659.SH 的数据\n", + "成功获取 600669.SH 的数据\n", + "成功获取 600670.SH 的数据\n", + "成功获取 600672.SH 的数据\n", + "成功获取 600677.SH 的数据\n", + "成功获取 600680.SH 的数据\n", + "成功获取 600687.SH 的数据\n", + "成功获取 600695.SH 的数据\n", + "成功获取 600700.SH 的数据\n", + "成功获取 600701.SH 的数据\n", + "成功获取 600709.SH 的数据\n", + "成功获取 600723.SH 的数据\n", + "成功获取 600747.SH 的数据\n", + "成功获取 600752.SH 的数据\n", + "成功获取 600762.SH 的数据\n", + "成功获取 600766.SH 的数据\n", + "成功获取 600767.SH 的数据\n", + "成功获取 600772.SH 的数据\n", + "成功获取 600781.SH 的数据\n", + "成功获取 600786.SH 的数据\n", + "成功获取 600788.SH 的数据\n", + "成功获取 600799.SH 的数据\n", + "成功获取 600806.SH 的数据\n", + "成功获取 600813.SH 的数据\n", + "成功获取 600823.SH 的数据\n", + "成功获取 600832.SH 的数据\n", + "成功获取 600836.SH 的数据\n", + "成功获取 600840.SH 的数据\n", + "成功获取 600842.SH 的数据\n", + "成功获取 600852.SH 的数据\n", + "成功获取 600856.SH 的数据\n", + "成功获取 600870.SH 的数据\n", + "成功获取 600878.SH 的数据\n", + "成功获取 600890.SH 的数据\n", + "成功获取 600891.SH 的数据\n", + "成功获取 600896.SH 的数据\n", + "成功获取 600899.SH 的数据\n", + "成功获取 600978.SH 的数据\n", + "成功获取 600991.SH 的数据\n", + "成功获取 601258.SH 的数据\n", + "成功获取 601268.SH 的数据\n", + "成功获取 601299.SH 的数据\n", + "成功获取 601558.SH 的数据\n", + "成功获取 603133.SH 的数据\n", + "成功获取 603157.SH 的数据\n", + "成功获取 603555.SH 的数据\n", + "成功获取 603603.SH 的数据\n", + "成功获取 603996.SH 的数据\n", + "成功获取 688086.SH 的数据\n", + "成功获取 688555.SH 的数据\n", + "成功获取 832317.BJ 的数据\n", + "成功获取 833874.BJ 的数据\n", + "成功获取 833994.BJ 的数据\n", + "成功获取 T00018.SH 的数据\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# 读取本地保存的股票列表 CSV 文件(假设文件名为 stocks_data.csv)\n", + "stocks_df = pd.read_csv('../../stocks_list.csv', encoding='utf-8-sig')\n", + "\n", + "# 用于存放所有股票的日线数据(每次获取的 DataFrame)\n", + "daily_data_list = []\n", + "\n", + "# API 调用计数和时间控制变量\n", + "api_call_count = 0\n", + "batch_start_time = time.time()\n", + "\n", + "# 循环遍历每个股票代码并获取数据\n", + "for idx, row in stocks_df.iterrows():\n", + " ts_code = row['ts_code'] # 假设股票代码列名为 ts_code\n", + " try:\n", + " # 调用 tushare 接口获取该股票自 2017 年以来的日线数据\n", + " daily_data = pro.index_member_all(ts_code=ts_code)\n", + " # 如果返回数据不为空,则添加一列标识股票代码\n", + " if not daily_data.empty:\n", + " daily_data['ts_code'] = ts_code\n", + " daily_data_list.append(daily_data)\n", + " print(f\"成功获取 {ts_code} 的数据\")\n", + " except Exception as e:\n", + " print(f\"获取 {ts_code} 数据时出错: {e}\")\n", + "\n", + " # 计数一次 API 调用\n", + " api_call_count += 1\n", + "\n", + " # 每调用300次,检查时间是否少于1分钟,如果少于则等待剩余时间\n", + " if api_call_count % 300 == 0:\n", + " elapsed = time.time() - batch_start_time\n", + " if elapsed < 60:\n", + " sleep_time = 60 - elapsed\n", + " print(f\"已调用300次API,等待 {sleep_time:.2f} 秒以满足速率限制...\")\n", + " time.sleep(sleep_time)\n", + " # 重置批次起始时间\n", + " batch_start_time = time.time()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "afaca5f2-1b44-435c-81c6-7432443844c3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "所有日线数据已保存到 industry_data.h5\n" + ] + } + ], + "source": [ + "# 合并所有获取到的日线数据\n", + "if daily_data_list:\n", + " all_daily_data = pd.concat(daily_data_list, ignore_index=True)\n", + " # 使用 HDF5 格式保存到本地文件(文件名:daily_data.h5,key设为 'daily_data')\n", + " all_daily_data.to_hdf('../../data/industry_data.h5', key='industry_data', mode='w', format='table')\n", + " print(\"所有日线数据已保存到 industry_data.h5\")\n", + "else:\n", + " print(\"未获取到任何日线数据。\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "57e28839-128c-4916-9f59-9121d3b5f537", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " l1_code l1_name l2_code l2_name l3_code l3_name ts_code \\\n", + "0 801780.SI 银行 801783.SI 股份制银行Ⅱ 857831.SI 股份制银行Ⅲ 000001.SZ \n", + "1 801180.SI 房地产 801181.SI 房地产开发 851811.SI 住宅开发 000002.SZ \n", + "2 801750.SI 计算机 801104.SI 软件开发 851042.SI 横向通用软件 000004.SZ \n", + "3 801180.SI 房地产 801181.SI 房地产开发 851811.SI 住宅开发 000006.SZ \n", + "4 801200.SI 商贸零售 801203.SI 一般零售 852034.SI 商业物业经营 000007.SZ \n", + "... ... ... ... ... ... ... ... \n", + "5733 801750.SI 计算机 801104.SI 软件开发 851041.SI 垂直应用软件 688555.SH \n", + "5734 801740.SI 国防军工 801742.SI 航空装备Ⅱ 857421.SI 航空装备Ⅲ 832317.BJ \n", + "5735 801880.SI 汽车 801093.SI 汽车零部件 850923.SI 底盘与发动机系统 833874.BJ \n", + "5736 801080.SI 电子 801084.SI 光学光电子 850831.SI 面板 833994.BJ \n", + "5737 801170.SI 交通运输 801992.SI 航运港口 851711.SI 港口 T00018.SH \n", + "\n", + " name in_date out_date is_new \n", + "0 平安银行 19910403 None Y \n", + "1 万科A 19910129 None Y \n", + "2 国华网安 20210730 None Y \n", + "3 深振业A 20150930 None Y \n", + "4 全新好 20190724 None Y \n", + "... ... ... ... ... \n", + "5733 退市泽达(退市) 20200605 None Y \n", + "5734 观典防务(退市) 20200727 None Y \n", + "5735 泰祥股份(退市) 20200727 None Y \n", + "5736 翰博高新(退市) 20200727 None Y \n", + "5737 上港集箱(退市) 20000719 None Y \n", + "\n", + "[5738 rows x 11 columns]\n" + ] + } + ], + "source": [ + "print(all_daily_data)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/data/kpl_concept.ipynb b/code/data/kpl_concept.ipynb new file mode 100644 index 0000000..ce37f42 --- /dev/null +++ b/code/data/kpl_concept.ipynb @@ -0,0 +1,273 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "initial_id", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:28:49.275220Z", + "start_time": "2025-03-12T15:28:48.624632Z" + } + }, + "outputs": [], + "source": [ + "from operator import index\n", + "\n", + "import tushare as ts\n", + "import pandas as pd\n", + "import time\n", + "\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "pro = ts.pro_api()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "972a5ac9f79fe373", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:28:49.280632Z", + "start_time": "2025-03-12T15:28:49.275220Z" + } + }, + "outputs": [], + "source": [ + "\n", + "# df = pro.cyq_perf(start_date='20220101', end_date='20220429')\n", + "# print(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f448da220816bf98", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:39:50.128089Z", + "start_time": "2025-03-12T15:28:49.437760Z" + }, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "成功获取并保存 20250228 的每日基础数据\n", + "成功获取并保存 20250227 的每日基础数据\n", + "成功获取并保存 20250226 的每日基础数据\n", + "成功获取并保存 20250225 的每日基础数据\n", + "成功获取并保存 20250224 的每日基础数据\n", + "成功获取并保存 20250221 的每日基础数据\n", + "成功获取并保存 20250220 的每日基础数据\n", + "成功获取并保存 20250219 的每日基础数据\n", + "成功获取并保存 20250218 的每日基础数据\n", + "成功获取并保存 20250217 的每日基础数据\n", + "成功获取并保存 20250214 的每日基础数据\n", + "成功获取并保存 20250213 的每日基础数据\n", + "成功获取并保存 20250212 的每日基础数据\n", + "成功获取并保存 20250211 的每日基础数据\n", + "成功获取并保存 20250210 的每日基础数据\n", + "成功获取并保存 20250207 的每日基础数据\n", + "成功获取并保存 20250206 的每日基础数据\n", + "成功获取并保存 20250205 的每日基础数据\n", + "成功获取并保存 20250127 的每日基础数据\n", + "成功获取并保存 20250124 的每日基础数据\n", + "成功获取并保存 20250123 的每日基础数据\n", + "成功获取并保存 20250122 的每日基础数据\n", + "成功获取并保存 20250121 的每日基础数据\n", + "成功获取并保存 20250120 的每日基础数据\n", + "成功获取并保存 20250117 的每日基础数据\n", + "成功获取并保存 20250116 的每日基础数据\n", + "成功获取并保存 20250115 的每日基础数据\n", + "成功获取并保存 20250114 的每日基础数据\n", + "成功获取并保存 20250113 的每日基础数据\n", + "成功获取并保存 20250110 的每日基础数据\n", + "成功获取并保存 20250109 的每日基础数据\n", + "成功获取并保存 20250108 的每日基础数据\n", + "成功获取并保存 20250107 的每日基础数据\n", + "成功获取并保存 20250106 的每日基础数据\n", + "成功获取并保存 20250103 的每日基础数据\n", + "成功获取并保存 20250102 的每日基础数据\n", + "成功获取并保存 20241231 的每日基础数据\n", + "成功获取并保存 20241230 的每日基础数据\n", + "成功获取并保存 20241227 的每日基础数据\n", + "成功获取并保存 20241226 的每日基础数据\n", + "成功获取并保存 20241225 的每日基础数据\n", + "成功获取并保存 20241224 的每日基础数据\n", + "成功获取并保存 20241223 的每日基础数据\n", + "成功获取并保存 20241220 的每日基础数据\n", + "成功获取并保存 20241219 的每日基础数据\n", + "成功获取并保存 20241218 的每日基础数据\n", + "成功获取并保存 20241217 的每日基础数据\n", + "成功获取并保存 20241216 的每日基础数据\n", + "成功获取并保存 20241213 的每日基础数据\n", + "成功获取并保存 20241212 的每日基础数据\n", + "成功获取并保存 20241211 的每日基础数据\n", + "成功获取并保存 20241210 的每日基础数据\n", + "成功获取并保存 20241209 的每日基础数据\n", + "成功获取并保存 20241206 的每日基础数据\n", + "成功获取并保存 20241205 的每日基础数据\n", + "成功获取并保存 20241204 的每日基础数据\n", + "成功获取并保存 20241203 的每日基础数据\n", + "成功获取并保存 20241202 的每日基础数据\n", + "成功获取并保存 20241129 的每日基础数据\n", + "成功获取并保存 20241128 的每日基础数据\n", + "成功获取并保存 20241127 的每日基础数据\n", + "成功获取并保存 20241126 的每日基础数据\n", + "成功获取并保存 20241125 的每日基础数据\n", + "成功获取并保存 20241122 的每日基础数据\n", + "成功获取并保存 20241121 的每日基础数据\n", + "成功获取并保存 20241120 的每日基础数据\n", + "成功获取并保存 20241119 的每日基础数据\n", + "成功获取并保存 20241118 的每日基础数据\n", + "成功获取并保存 20241115 的每日基础数据\n", + "成功获取并保存 20241114 的每日基础数据\n", + "成功获取并保存 20241113 的每日基础数据\n", + "成功获取并保存 20241112 的每日基础数据\n", + "成功获取并保存 20241111 的每日基础数据\n", + "成功获取并保存 20241108 的每日基础数据\n", + "成功获取并保存 20241107 的每日基础数据\n", + "成功获取并保存 20241106 的每日基础数据\n", + "成功获取并保存 20241105 的每日基础数据\n", + "成功获取并保存 20241104 的每日基础数据\n", + "成功获取并保存 20241101 的每日基础数据\n", + "成功获取并保存 20241031 的每日基础数据\n", + "成功获取并保存 20241030 的每日基础数据\n", + "成功获取并保存 20241029 的每日基础数据\n", + "成功获取并保存 20241028 的每日基础数据\n", + "成功获取并保存 20241025 的每日基础数据\n", + "成功获取并保存 20241024 的每日基础数据\n", + "成功获取并保存 20241023 的每日基础数据\n", + "成功获取并保存 20241022 的每日基础数据\n", + "成功获取并保存 20241021 的每日基础数据\n", + "成功获取并保存 20241014 的每日基础数据\n", + "150 1741835004.3988936 1741834982.2357981\n", + "已调用 150 次 API,等待 37.84 秒以满足速率限制...\n", + "300 1741835064.0700593 1741835042.2372077\n", + "已调用 150 次 API,等待 38.17 秒以满足速率限制...\n", + "450 1741835124.4976892 1741835102.2381623\n", + "已调用 150 次 API,等待 37.74 秒以满足速率限制...\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[4], line 22\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m trade_date \u001b[38;5;129;01min\u001b[39;00m trade_dates:\n\u001b[0;32m 20\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 21\u001b[0m \u001b[38;5;66;03m# 获取每日基础数据\u001b[39;00m\n\u001b[1;32m---> 22\u001b[0m kpl_concept \u001b[38;5;241m=\u001b[39m pro\u001b[38;5;241m.\u001b[39mkpl_concept(trade_date\u001b[38;5;241m=\u001b[39mtrade_date)\n\u001b[0;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kpl_concept \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kpl_concept\u001b[38;5;241m.\u001b[39mempty:\n\u001b[0;32m 24\u001b[0m all_daily_data\u001b[38;5;241m.\u001b[39mappend(kpl_concept)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\tushare\\pro\\client.py:41\u001b[0m, in \u001b[0;36mDataApi.query\u001b[1;34m(self, api_name, fields, **kwargs)\u001b[0m\n\u001b[0;32m 33\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mquery\u001b[39m(\u001b[38;5;28mself\u001b[39m, api_name, fields\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 34\u001b[0m req_params \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 35\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mapi_name\u001b[39m\u001b[38;5;124m'\u001b[39m: api_name,\n\u001b[0;32m 36\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoken\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__token,\n\u001b[0;32m 37\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparams\u001b[39m\u001b[38;5;124m'\u001b[39m: kwargs,\n\u001b[0;32m 38\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfields\u001b[39m\u001b[38;5;124m'\u001b[39m: fields\n\u001b[0;32m 39\u001b[0m }\n\u001b[1;32m---> 41\u001b[0m res \u001b[38;5;241m=\u001b[39m requests\u001b[38;5;241m.\u001b[39mpost(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__http_url\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mapi_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, json\u001b[38;5;241m=\u001b[39mreq_params, timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__timeout)\n\u001b[0;32m 42\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m res:\n\u001b[0;32m 43\u001b[0m result \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mloads(res\u001b[38;5;241m.\u001b[39mtext)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\api.py:115\u001b[0m, in \u001b[0;36mpost\u001b[1;34m(url, data, json, **kwargs)\u001b[0m\n\u001b[0;32m 103\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpost\u001b[39m(url, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, json\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 104\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a POST request.\u001b[39;00m\n\u001b[0;32m 105\u001b[0m \n\u001b[0;32m 106\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 112\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[0;32m 113\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 115\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m request(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost\u001b[39m\u001b[38;5;124m\"\u001b[39m, url, data\u001b[38;5;241m=\u001b[39mdata, json\u001b[38;5;241m=\u001b[39mjson, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[1;34m(method, url, **kwargs)\u001b[0m\n\u001b[0;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[0;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[0;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[0;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[1;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m session\u001b[38;5;241m.\u001b[39mrequest(method\u001b[38;5;241m=\u001b[39mmethod, url\u001b[38;5;241m=\u001b[39murl, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[1;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[0;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[0;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[0;32m 587\u001b[0m }\n\u001b[0;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[1;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend(prep, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39msend_kwargs)\n\u001b[0;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\sessions.py:724\u001b[0m, in \u001b[0;36mSession.send\u001b[1;34m(self, request, **kwargs)\u001b[0m\n\u001b[0;32m 721\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m allow_redirects:\n\u001b[0;32m 722\u001b[0m \u001b[38;5;66;03m# Redirect resolving generator.\u001b[39;00m\n\u001b[0;32m 723\u001b[0m gen \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresolve_redirects(r, request, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m--> 724\u001b[0m history \u001b[38;5;241m=\u001b[39m [resp \u001b[38;5;28;01mfor\u001b[39;00m resp \u001b[38;5;129;01min\u001b[39;00m gen]\n\u001b[0;32m 725\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 726\u001b[0m history \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\sessions.py:724\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 721\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m allow_redirects:\n\u001b[0;32m 722\u001b[0m \u001b[38;5;66;03m# Redirect resolving generator.\u001b[39;00m\n\u001b[0;32m 723\u001b[0m gen \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresolve_redirects(r, request, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m--> 724\u001b[0m history \u001b[38;5;241m=\u001b[39m [resp \u001b[38;5;28;01mfor\u001b[39;00m resp \u001b[38;5;129;01min\u001b[39;00m gen]\n\u001b[0;32m 725\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 726\u001b[0m history \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\sessions.py:265\u001b[0m, in \u001b[0;36mSessionRedirectMixin.resolve_redirects\u001b[1;34m(self, resp, req, stream, timeout, verify, cert, proxies, yield_requests, **adapter_kwargs)\u001b[0m\n\u001b[0;32m 263\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m req\n\u001b[0;32m 264\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 265\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend(\n\u001b[0;32m 266\u001b[0m req,\n\u001b[0;32m 267\u001b[0m stream\u001b[38;5;241m=\u001b[39mstream,\n\u001b[0;32m 268\u001b[0m timeout\u001b[38;5;241m=\u001b[39mtimeout,\n\u001b[0;32m 269\u001b[0m verify\u001b[38;5;241m=\u001b[39mverify,\n\u001b[0;32m 270\u001b[0m cert\u001b[38;5;241m=\u001b[39mcert,\n\u001b[0;32m 271\u001b[0m proxies\u001b[38;5;241m=\u001b[39mproxies,\n\u001b[0;32m 272\u001b[0m allow_redirects\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 273\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39madapter_kwargs,\n\u001b[0;32m 274\u001b[0m )\n\u001b[0;32m 276\u001b[0m extract_cookies_to_jar(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcookies, prepared_request, resp\u001b[38;5;241m.\u001b[39mraw)\n\u001b[0;32m 278\u001b[0m \u001b[38;5;66;03m# extract redirect url, if any, for the next loop\u001b[39;00m\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[1;34m(self, request, **kwargs)\u001b[0m\n\u001b[0;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[0;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[1;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m adapter\u001b[38;5;241m.\u001b[39msend(request, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[0;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\requests\\adapters.py:667\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[1;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[0;32m 664\u001b[0m timeout \u001b[38;5;241m=\u001b[39m TimeoutSauce(connect\u001b[38;5;241m=\u001b[39mtimeout, read\u001b[38;5;241m=\u001b[39mtimeout)\n\u001b[0;32m 666\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 667\u001b[0m resp \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39murlopen(\n\u001b[0;32m 668\u001b[0m method\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mmethod,\n\u001b[0;32m 669\u001b[0m url\u001b[38;5;241m=\u001b[39murl,\n\u001b[0;32m 670\u001b[0m body\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mbody,\n\u001b[0;32m 671\u001b[0m headers\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mheaders,\n\u001b[0;32m 672\u001b[0m redirect\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 673\u001b[0m assert_same_host\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 674\u001b[0m preload_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 675\u001b[0m decode_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 676\u001b[0m retries\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_retries,\n\u001b[0;32m 677\u001b[0m timeout\u001b[38;5;241m=\u001b[39mtimeout,\n\u001b[0;32m 678\u001b[0m chunked\u001b[38;5;241m=\u001b[39mchunked,\n\u001b[0;32m 679\u001b[0m )\n\u001b[0;32m 681\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m 682\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(err, request\u001b[38;5;241m=\u001b[39mrequest)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\urllib3\\connectionpool.py:787\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[1;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[0;32m 784\u001b[0m response_conn \u001b[38;5;241m=\u001b[39m conn \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m release_conn \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 786\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[1;32m--> 787\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_request(\n\u001b[0;32m 788\u001b[0m conn,\n\u001b[0;32m 789\u001b[0m method,\n\u001b[0;32m 790\u001b[0m url,\n\u001b[0;32m 791\u001b[0m timeout\u001b[38;5;241m=\u001b[39mtimeout_obj,\n\u001b[0;32m 792\u001b[0m body\u001b[38;5;241m=\u001b[39mbody,\n\u001b[0;32m 793\u001b[0m headers\u001b[38;5;241m=\u001b[39mheaders,\n\u001b[0;32m 794\u001b[0m chunked\u001b[38;5;241m=\u001b[39mchunked,\n\u001b[0;32m 795\u001b[0m retries\u001b[38;5;241m=\u001b[39mretries,\n\u001b[0;32m 796\u001b[0m response_conn\u001b[38;5;241m=\u001b[39mresponse_conn,\n\u001b[0;32m 797\u001b[0m preload_content\u001b[38;5;241m=\u001b[39mpreload_content,\n\u001b[0;32m 798\u001b[0m decode_content\u001b[38;5;241m=\u001b[39mdecode_content,\n\u001b[0;32m 799\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mresponse_kw,\n\u001b[0;32m 800\u001b[0m )\n\u001b[0;32m 802\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n\u001b[0;32m 803\u001b[0m clean_exit \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\urllib3\\connectionpool.py:534\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[1;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[0;32m 532\u001b[0m \u001b[38;5;66;03m# Receive the response from the server\u001b[39;00m\n\u001b[0;32m 533\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 534\u001b[0m response \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39mgetresponse()\n\u001b[0;32m 535\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (BaseSSLError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m 536\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_raise_timeout(err\u001b[38;5;241m=\u001b[39me, url\u001b[38;5;241m=\u001b[39murl, timeout_value\u001b[38;5;241m=\u001b[39mread_timeout)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\urllib3\\connection.py:516\u001b[0m, in \u001b[0;36mHTTPConnection.getresponse\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 513\u001b[0m _shutdown \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mshutdown\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m 515\u001b[0m \u001b[38;5;66;03m# Get the response from http.client.HTTPConnection\u001b[39;00m\n\u001b[1;32m--> 516\u001b[0m httplib_response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39mgetresponse()\n\u001b[0;32m 518\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 519\u001b[0m assert_header_parsing(httplib_response\u001b[38;5;241m.\u001b[39mmsg)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\http\\client.py:1395\u001b[0m, in \u001b[0;36mHTTPConnection.getresponse\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1393\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 1394\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 1395\u001b[0m response\u001b[38;5;241m.\u001b[39mbegin()\n\u001b[0;32m 1396\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m:\n\u001b[0;32m 1397\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\http\\client.py:325\u001b[0m, in \u001b[0;36mHTTPResponse.begin\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 323\u001b[0m \u001b[38;5;66;03m# read until we get a non-100 response\u001b[39;00m\n\u001b[0;32m 324\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m--> 325\u001b[0m version, status, reason \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_read_status()\n\u001b[0;32m 326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m status \u001b[38;5;241m!=\u001b[39m CONTINUE:\n\u001b[0;32m 327\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\http\\client.py:286\u001b[0m, in \u001b[0;36mHTTPResponse._read_status\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 285\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_read_status\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m--> 286\u001b[0m line \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfp\u001b[38;5;241m.\u001b[39mreadline(_MAXLINE \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m), \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miso-8859-1\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 287\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(line) \u001b[38;5;241m>\u001b[39m _MAXLINE:\n\u001b[0;32m 288\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LineTooLong(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstatus line\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\socket.py:718\u001b[0m, in \u001b[0;36mSocketIO.readinto\u001b[1;34m(self, b)\u001b[0m\n\u001b[0;32m 716\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m 717\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 718\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sock\u001b[38;5;241m.\u001b[39mrecv_into(b)\n\u001b[0;32m 719\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m timeout:\n\u001b[0;32m 720\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_timeout_occurred \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "import tushare as ts\n", + "import pandas as pd\n", + "import time\n", + "\n", + "\n", + "# 获取交易日历\n", + "trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250301')\n", + "trade_cal = trade_cal[trade_cal['is_open'] == 1] # 只保留交易日\n", + "trade_dates = trade_cal['cal_date'].tolist() # 获取所有交易日期列表\n", + "\n", + "# 使用 HDFStore 存储数据\n", + "all_daily_data = []\n", + "\n", + "# API 调用计数和时间控制变量\n", + "api_call_count = 0\n", + "batch_start_time = time.time()\n", + "\n", + "# 遍历每个交易日期并获取数据\n", + "for trade_date in trade_dates:\n", + " try:\n", + " # 获取每日基础数据\n", + " kpl_concept = pro.kpl_concept(trade_date=trade_date)\n", + " if kpl_concept is not None and not kpl_concept.empty:\n", + " all_daily_data.append(kpl_concept)\n", + " print(f\"成功获取并保存 {trade_date} 的每日基础数据\")\n", + "\n", + " # 计数一次 API 调用\n", + " api_call_count += 1\n", + "\n", + " # 每调用 300 次,检查时间是否少于 1 分钟,如果少于则等待剩余时间\n", + " if api_call_count % 150 == 0:\n", + " print(api_call_count,time.time(), batch_start_time)\n", + " elapsed = time.time() - batch_start_time\n", + " if elapsed < 60:\n", + " sleep_time = 60 - elapsed\n", + " print(f\"已调用 150 次 API,等待 {sleep_time:.2f} 秒以满足速率限制...\")\n", + " time.sleep(sleep_time)\n", + " # 重置批次起始时间\n", + " batch_start_time = time.time()\n", + "\n", + " except Exception as e:\n", + " print(f\"获取 {trade_date} 数据时出错: {e}\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "907f732d3c397bf", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-12T15:39:50.141920800Z", + "start_time": "2025-03-12T15:23:41.345460Z" + } + }, + "outputs": [], + "source": [ + "\n", + "# 将所有数据合并为一个 DataFrame\n", + "all_daily_data_df = pd.concat(all_daily_data, ignore_index=True)\n", + "\n", + "# 将数据保存为 HDF5 文件(table 格式)\n", + "all_daily_data_df.to_hdf('../../data/kpl_concept.h5', key='kpl_concept', mode='w', format='table', data_columns=True)\n", + "\n", + "print(\"所有每日基础数据获取并保存完毕!\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/data/update/cyq-perf.ipynb b/code/data/update/cyq-perf.ipynb new file mode 100644 index 0000000..499cbf1 --- /dev/null +++ b/code/data/update/cyq-perf.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "f74ce078-f7e8-4733-a14c-14d8815a3626", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:31.596637Z", + "start_time": "2025-03-30T16:42:30.883319Z" + } + }, + "source": [ + "import tushare as ts\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "pro = ts.pro_api()" + ], + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "id": "44dd8d87-e60b-49e5-aed9-efaa7f92d4fe", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:37.590148Z", + "start_time": "2025-03-30T16:42:31.596637Z" + } + }, + "source": [ + "import pandas as pd\n", + "import time\n", + "\n", + "h5_filename = '../../../data/cyq_perf.h5'\n", + "key = '/cyq_perf'\n", + "max_date = None\n", + "with pd.HDFStore(h5_filename, mode='r') as store:\n", + " df = store[key][['ts_code', 'trade_date']]\n", + " print(df)\n", + " max_date = df['trade_date'].max()\n", + "\n", + "print(max_date)\n", + "trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250420')\n", + "trade_cal = trade_cal[trade_cal['is_open'] == 1] # 只保留交易日\n", + "trade_dates = trade_cal[trade_cal['cal_date'] > max_date]['cal_date'].tolist()\n", + "start_date = min(trade_dates)\n", + "print(f'start_date: {start_date}')" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date\n", + "0 000001.SZ 20250312\n", + "1 000002.SZ 20250312\n", + "2 000004.SZ 20250312\n", + "3 000006.SZ 20250312\n", + "4 000007.SZ 20250312\n", + "... ... ...\n", + "32304 920108.BJ 20250314\n", + "32305 920111.BJ 20250314\n", + "32306 920116.BJ 20250314\n", + "32307 920118.BJ 20250314\n", + "32308 920128.BJ 20250314\n", + "\n", + "[7503415 rows x 2 columns]\n", + "20250321\n", + "start_date: 20250324\n" + ] + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "id": "747acc47-0884-4f76-90fb-276f6494e31d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:43:29.275885Z", + "start_time": "2025-03-30T16:42:37.858763Z" + } + }, + "source": [ + "from concurrent.futures import ThreadPoolExecutor, as_completed\n", + "\n", + "all_daily_data = []\n", + "\n", + "# API 调用计数和时间控制变量\n", + "api_call_count = 0\n", + "batch_start_time = time.time()\n", + "\n", + "\n", + "def get_data(trade_date):\n", + " time.sleep(0.1)\n", + " data = pro.cyq_perf(trade_date=trade_date)\n", + " if data is not None and not data.empty:\n", + " return data\n", + "\n", + "\n", + "with ThreadPoolExecutor(max_workers=2) as executor:\n", + " future_to_date = {executor.submit(get_data, td): td for td in trade_dates}\n", + "\n", + " for future in as_completed(future_to_date):\n", + " trade_date = future_to_date[future] # 获取对应的交易日期\n", + " try:\n", + " result = future.result() # 获取任务执行的结果\n", + " all_daily_data.append(result)\n", + " print(f\"任务 {trade_date} 完成\")\n", + " except Exception as e:\n", + " print(f\"获取 {trade_date} 数据时出错: {e}\")\n", + "\n" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "任务 20250418 完成\n", + "任务 20250417 完成\n", + "任务 20250415 完成\n", + "任务 20250416 完成\n", + "任务 20250411 完成\n", + "任务 20250414 完成\n", + "任务 20250409 完成\n", + "任务 20250410 完成\n", + "任务 20250408 完成\n", + "任务 20250407 完成\n", + "任务 20250403 完成\n", + "任务 20250402 完成\n", + "任务 20250401 完成\n", + "任务 20250331 完成\n", + "任务 20250328 完成\n", + "任务 20250327 完成\n", + "任务 20250326 完成\n", + "任务 20250325 完成\n", + "任务 20250324 完成\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "id": "c6765638-481f-40d8-a259-2e7b25362618", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:43:30.100678Z", + "start_time": "2025-03-30T16:43:29.311710Z" + } + }, + "source": [ + "all_daily_data_df = pd.concat(all_daily_data, ignore_index=True)\n", + "\n", + "# 将所有数据合并为一个 DataFrame\n", + "\n", + "# 将数据保存为 HDF5 文件(table 格式)\n", + "all_daily_data_df.to_hdf(h5_filename, key=key, mode='a', format='table', append=True, data_columns=True)\n", + "\n", + "print(\"所有每日基础数据获取并保存完毕!\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "所有每日基础数据获取并保存完毕!\n" + ] + } + ], + "execution_count": 4 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/data/update/index_data.ipynb b/code/data/update/index_data.ipynb new file mode 100644 index 0000000..f32b914 --- /dev/null +++ b/code/data/update/index_data.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "f74ce078-f7e8-4733-a14c-14d8815a3626", + "metadata": {}, + "outputs": [], + "source": [ + "import tushare as ts\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "pro = ts.pro_api()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "44dd8d87-e60b-49e5-aed9-efaa7f92d4fe", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date\n", + "0 801001.SI 20250221\n", + "1 801002.SI 20250221\n", + "2 801003.SI 20250221\n", + "3 801005.SI 20250221\n", + "4 801010.SI 20250221\n", + "... ... ...\n", + "1044388 857344.SI 20170103\n", + "1044389 857411.SI 20170103\n", + "1044390 857421.SI 20170103\n", + "1044391 857431.SI 20170103\n", + "1044392 858811.SI 20170103\n", + "\n", + "[1044393 rows x 2 columns]\n", + "20250221\n", + "start_date: 20250224\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import time\n", + "\n", + "h5_filename = '../../../data/sw_daily.h5'\n", + "key = '/sw_daily'\n", + "max_date = None\n", + "with pd.HDFStore(h5_filename, mode='r') as store:\n", + " df = store[key][['ts_code', 'trade_date']]\n", + " print(df)\n", + " max_date = df['trade_date'].max()\n", + "\n", + "print(max_date)\n", + "trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250420')\n", + "trade_cal = trade_cal[trade_cal['is_open'] == 1] # 只保留交易日\n", + "trade_dates = trade_cal[trade_cal['cal_date'] > max_date]['cal_date'].tolist()\n", + "start_date = min(trade_dates)\n", + "print(f'start_date: {start_date}')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "747acc47-0884-4f76-90fb-276f6494e31d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "任务 20250417 完成\n", + "任务 20250418 完成\n", + "任务 20250416 完成\n", + "任务 20250415 完成\n", + "任务 20250411 完成\n", + "任务 20250414 完成\n", + "任务 20250410 完成\n", + "任务 20250409 完成\n", + "任务 20250408 完成\n", + "任务 20250403 完成\n", + "任务 20250407 完成\n", + "任务 20250402 完成\n", + "任务 20250401 完成\n", + "任务 20250331 完成\n", + "任务 20250328 完成\n", + "任务 20250327 完成\n", + "任务 20250326 完成\n", + "任务 20250325 完成\n", + "任务 20250324 完成\n", + "任务 20250321 完成\n", + "任务 20250320 完成\n", + "任务 20250319 完成\n", + "任务 20250317 完成\n", + "任务 20250314 完成\n", + "任务 20250318 完成\n", + "任务 20250313 完成\n", + "任务 20250312 完成\n", + "任务 20250311 完成\n", + "任务 20250310 完成\n", + "任务 20250307 完成\n", + "任务 20250306 完成\n", + "任务 20250305 完成\n", + "任务 20250304 完成\n", + "任务 20250303 完成\n", + "任务 20250228 完成\n", + "任务 20250227 完成\n", + "任务 20250226 完成\n", + "任务 20250225 完成\n", + "任务 20250224 完成\n" + ] + } + ], + "source": [ + "from concurrent.futures import ThreadPoolExecutor, as_completed\n", + "\n", + "all_daily_data = []\n", + "\n", + "# API 调用计数和时间控制变量\n", + "api_call_count = 0\n", + "batch_start_time = time.time()\n", + "\n", + "index_list = ['399300.SH', '000905.SH', '000852.SH', '399006.SZ']\n", + "def get_data(trade_date):\n", + " time.sleep(0.1)\n", + " data = pro.sw_daily(trade_date=trade_date)\n", + " if data is not None and not data.empty:\n", + " return data\n", + "\n", + "\n", + "with ThreadPoolExecutor(max_workers=2) as executor:\n", + " future_to_date = {executor.submit(get_data, td): td for td in trade_dates}\n", + "\n", + " for future in as_completed(future_to_date):\n", + " trade_date = future_to_date[future] # 获取对应的交易日期\n", + " try:\n", + " result = future.result() # 获取任务执行的结果\n", + " all_daily_data.append(result)\n", + " print(f\"任务 {trade_date} 完成\")\n", + " except Exception as e:\n", + " print(f\"获取 {trade_date} 数据时出错: {e}\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c6765638-481f-40d8-a259-2e7b25362618", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "所有每日基础数据获取并保存完毕!\n" + ] + } + ], + "source": [ + "all_daily_data_df = pd.concat(all_daily_data, ignore_index=True)\n", + "\n", + "# 将所有数据合并为一个 DataFrame\n", + "\n", + "# 将数据保存为 HDF5 文件(table 格式)\n", + "all_daily_data_df.to_hdf(h5_filename, key=key, mode='a', format='table', append=True, data_columns=True)\n", + "\n", + "print(\"所有每日基础数据获取并保存完毕!\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/data/update/sw_daily.ipynb b/code/data/update/sw_daily.ipynb new file mode 100644 index 0000000..1ce7b7f --- /dev/null +++ b/code/data/update/sw_daily.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "f74ce078-f7e8-4733-a14c-14d8815a3626", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:32.996500Z", + "start_time": "2025-03-30T16:42:32.209631Z" + } + }, + "source": [ + "import tushare as ts\n", + "ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n", + "pro = ts.pro_api()" + ], + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "id": "44dd8d87-e60b-49e5-aed9-efaa7f92d4fe", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:34.591433Z", + "start_time": "2025-03-30T16:42:32.996500Z" + } + }, + "source": [ + "import pandas as pd\n", + "import time\n", + "\n", + "h5_filename = '../../../data/sw_daily.h5'\n", + "key = '/sw_daily'\n", + "max_date = None\n", + "with pd.HDFStore(h5_filename, mode='r') as store:\n", + " df = store[key][['ts_code', 'trade_date']]\n", + " print(df)\n", + " max_date = df['trade_date'].max()\n", + "\n", + "print(max_date)\n", + "trade_cal = pro.trade_cal(exchange='', start_date='20170101', end_date='20250420')\n", + "trade_cal = trade_cal[trade_cal['is_open'] == 1] # 只保留交易日\n", + "trade_dates = trade_cal[trade_cal['cal_date'] > max_date]['cal_date'].tolist()\n", + "start_date = min(trade_dates)\n", + "print(f'start_date: {start_date}')" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date\n", + "0 801001.SI 20250221\n", + "1 801002.SI 20250221\n", + "2 801003.SI 20250221\n", + "3 801005.SI 20250221\n", + "4 801010.SI 20250221\n", + "... ... ...\n", + "2629 859811.SI 20250314\n", + "2630 859821.SI 20250314\n", + "2631 859822.SI 20250314\n", + "2632 859852.SI 20250314\n", + "2633 859951.SI 20250314\n", + "\n", + "[1053173 rows x 2 columns]\n", + "20250321\n", + "start_date: 20250324\n" + ] + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "id": "747acc47-0884-4f76-90fb-276f6494e31d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:37.718270Z", + "start_time": "2025-03-30T16:42:34.817305Z" + } + }, + "source": [ + "from concurrent.futures import ThreadPoolExecutor, as_completed\n", + "\n", + "all_daily_data = []\n", + "\n", + "# API 调用计数和时间控制变量\n", + "api_call_count = 0\n", + "batch_start_time = time.time()\n", + "\n", + "\n", + "def get_data(trade_date):\n", + " time.sleep(0.1)\n", + " data = pro.sw_daily(trade_date=trade_date)\n", + " if data is not None and not data.empty:\n", + " return data\n", + "\n", + "\n", + "with ThreadPoolExecutor(max_workers=2) as executor:\n", + " future_to_date = {executor.submit(get_data, td): td for td in trade_dates}\n", + "\n", + " for future in as_completed(future_to_date):\n", + " trade_date = future_to_date[future] # 获取对应的交易日期\n", + " try:\n", + " result = future.result() # 获取任务执行的结果\n", + " all_daily_data.append(result)\n", + " print(f\"任务 {trade_date} 完成\")\n", + " except Exception as e:\n", + " print(f\"获取 {trade_date} 数据时出错: {e}\")\n", + "\n" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "任务 20250417 完成\n", + "任务 20250418 完成\n", + "任务 20250416 完成\n", + "任务 20250415 完成\n", + "任务 20250414 完成\n", + "任务 20250411 完成\n", + "任务 20250410 完成\n", + "任务 20250409 完成\n", + "任务 20250408 完成\n", + "任务 20250407 完成\n", + "任务 20250403 完成\n", + "任务 20250402 完成\n", + "任务 20250401 完成\n", + "任务 20250331 完成\n", + "任务 20250328 完成\n", + "任务 20250327 完成\n", + "任务 20250326 完成\n", + "任务 20250325 完成\n", + "任务 20250324 完成\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "id": "c6765638-481f-40d8-a259-2e7b25362618", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T16:42:37.922827Z", + "start_time": "2025-03-30T16:42:37.739040Z" + } + }, + "source": [ + "all_daily_data_df = pd.concat(all_daily_data, ignore_index=True)\n", + "\n", + "# 将所有数据合并为一个 DataFrame\n", + "\n", + "# 将数据保存为 HDF5 文件(table 格式)\n", + "all_daily_data_df.to_hdf(h5_filename, key=key, mode='a', format='table', append=True, data_columns=True)\n", + "\n", + "print(\"所有每日基础数据获取并保存完毕!\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "所有每日基础数据获取并保存完毕!\n" + ] + } + ], + "execution_count": 4 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/model/lightgbm_model_UpdateRegression_2025-2-25.pkl b/code/model/lightgbm_model_UpdateRegression_2025-2-25.pkl new file mode 100644 index 0000000..79b4ed7 Binary files /dev/null and b/code/model/lightgbm_model_UpdateRegression_2025-2-25.pkl differ diff --git a/code/test.py b/code/test.py new file mode 100644 index 0000000..797c6f4 --- /dev/null +++ b/code/test.py @@ -0,0 +1,5 @@ +import torch +print(torch.__version__) + +print(torch.version.cuda) +print(torch.backends.cudnn.version()) diff --git a/code/train/ClassifyLR.ipynb b/code/train/ClassifyLR.ipynb new file mode 100644 index 0000000..df5178e --- /dev/null +++ b/code/train/ClassifyLR.ipynb @@ -0,0 +1,1317 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "79a7758178bafdd3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:19:35.036653Z", + "start_time": "2025-02-23T14:19:34.973432Z" + }, + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a79cafb06a7e0e43", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:20:18.946211Z", + "start_time": "2025-02-23T14:19:35.036653Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "daily data\n", + "daily basic\n", + "inner merge on ['ts_code', 'trade_date']\n", + "stk limit\n", + "left merge on ['ts_code', 'trade_date']\n", + "money flow\n", + "left merge on ['ts_code', 'trade_date']\n", + "\n", + "RangeIndex: 8296325 entries, 0 to 8296324\n", + "Data columns (total 21 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 turnover_rate float64 \n", + " 8 pe_ttm float64 \n", + " 9 circ_mv float64 \n", + " 10 volume_ratio float64 \n", + " 11 is_st bool \n", + " 12 up_limit float64 \n", + " 13 down_limit float64 \n", + " 14 buy_sm_vol float64 \n", + " 15 sell_sm_vol float64 \n", + " 16 buy_lg_vol float64 \n", + " 17 sell_lg_vol float64 \n", + " 18 buy_elg_vol float64 \n", + " 19 sell_elg_vol float64 \n", + " 20 net_mf_vol float64 \n", + "dtypes: bool(1), datetime64[ns](1), float64(18), object(1)\n", + "memory usage: 1.2+ GB\n", + "None\n" + ] + } + ], + "source": [ + "from utils.utils import read_and_merge_h5_data\n", + "\n", + "print('daily data')\n", + "df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df, join='inner')\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)\n", + "print(df.info())" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "38879273d3574ae3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:20:21.108154Z", + "start_time": "2025-02-23T14:20:19.025121Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "industry\n", + "left merge on ['ts_code']\n" + ] + } + ], + "source": [ + "print('industry')\n", + "df = read_and_merge_h5_data('../../data/industry_data.h5', key='industry_data',\n", + " columns=['ts_code', 'l2_code'],\n", + " df=df, on=['ts_code'], join='left')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a4eec8c93f6a7cc3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:20:21.712957Z", + "start_time": "2025-02-23T14:20:21.602953Z" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "\n", + "def calculate_indicators(df):\n", + " \"\"\"\n", + " 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。\n", + " \"\"\"\n", + " df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100\n", + " # df['5_day_ma'] = df['close'].rolling(window=5).mean()\n", + " delta = df['close'].diff()\n", + " gain = delta.where(delta > 0, 0)\n", + " loss = -delta.where(delta < 0, 0)\n", + " avg_gain = gain.rolling(window=14).mean()\n", + " avg_loss = loss.rolling(window=14).mean()\n", + " rs = avg_gain / avg_loss\n", + " df['RSI'] = 100 - (100 / (1 + rs))\n", + "\n", + " # 计算MACD\n", + " ema12 = df['close'].ewm(span=12, adjust=False).mean()\n", + " ema26 = df['close'].ewm(span=26, adjust=False).mean()\n", + " df['MACD'] = ema12 - ema26\n", + " df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean()\n", + " df['MACD_hist'] = df['MACD'] - df['Signal_line']\n", + "\n", + " return df\n", + "\n", + "\n", + "def generate_index_indicators(h5_filename):\n", + " df = pd.read_hdf(h5_filename, key='index_data')\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n", + " df = df.sort_values('trade_date')\n", + "\n", + " # 计算每个ts_code的相关指标\n", + " df_indicators = []\n", + " for ts_code in df['ts_code'].unique():\n", + " df_index = df[df['ts_code'] == ts_code].copy()\n", + " df_index = calculate_indicators(df_index)\n", + " df_indicators.append(df_index)\n", + "\n", + " # 合并所有指数的结果\n", + " df_all_indicators = pd.concat(df_indicators, ignore_index=True)\n", + "\n", + " # 保留trade_date列,并将同一天的数据按ts_code合并成一行\n", + " df_final = df_all_indicators.pivot_table(\n", + " index='trade_date',\n", + " columns='ts_code',\n", + " values=['daily_return', 'RSI', 'MACD', 'Signal_line', 'MACD_hist'],\n", + " aggfunc='last'\n", + " )\n", + "\n", + " df_final.columns = [f\"{col[1]}_{col[0]}\" for col in df_final.columns]\n", + " df_final = df_final.reset_index()\n", + "\n", + " return df_final\n", + "\n", + "\n", + "# 使用函数\n", + "h5_filename = '../../data/index_data.h5'\n", + "index_data = generate_index_indicators(h5_filename)\n", + "index_data = index_data.dropna()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c4e9e1d31da6dba6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:20:21.860318Z", + "start_time": "2025-02-23T14:20:21.735442Z" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "\n", + "def get_technical_factor(df):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " # 计算 up 和 down\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " # 计算 ATR\n", + " df['atr_14'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14),\n", + " index=x.index)\n", + " )\n", + " df['atr_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6),\n", + " index=x.index)\n", + " )\n", + "\n", + " # 计算 OBV 及其均线\n", + " df['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " df['maobv_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n", + "\n", + " # 计算 RSI\n", + " df['rsi_3'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n", + " )\n", + " df['rsi_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['rsi_9'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n", + " )\n", + "\n", + " # 计算 return_10 和 return_20\n", + " df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n", + " df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # 计算 avg_close_5\n", + " df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n", + "\n", + " # 计算标准差指标\n", + " df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n", + " df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n", + " df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n", + " df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n", + " df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n", + "\n", + " # 计算比值指标\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算标准差差值\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_act_factor(df, cat=True):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + " # 计算 EMA 指标\n", + " df['ema_5'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n", + " )\n", + " df['ema_13'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n", + " )\n", + " df['ema_20'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n", + " )\n", + " df['ema_60'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n", + " )\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = grouped['ema_5'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n", + " )\n", + " df['act_factor2'] = grouped['ema_13'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n", + " )\n", + " df['act_factor3'] = grouped['ema_20'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n", + " )\n", + " df['act_factor4'] = grouped['ema_60'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n", + " )\n", + "\n", + " if cat:\n", + " df['cat_af1'] = df['act_factor1'] > 0\n", + " df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n", + " df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n", + " df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(\n", + " df['act_factor1'] ** 2 + df['act_factor2'] ** 2)\n", + "\n", + " # 根据 trade_date 截面计算排名\n", + " df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True)\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_money_flow_factor(df):\n", + " # 计算资金流相关因子(字段名称见 tushare 数据说明)\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + " return df\n", + "\n", + "\n", + "def get_alpha_factor(df):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code')\n", + "\n", + " # alpha_022: 当前 close 与 5 日前 close 差值\n", + " df['alpha_022'] = grouped['close'].transform(lambda x: x - x.shift(5))\n", + "\n", + " # alpha_003: (close - open) / (high - low)\n", + " df['alpha_003'] = np.where(df['high'] != df['low'],\n", + " (df['close'] - df['open']) / (df['high'] - df['low']),\n", + " 0)\n", + "\n", + " # alpha_007: 计算过去5日 close 与 vol 的相关性,并按 trade_date 排名\n", + " df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n", + " df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n", + "\n", + " # alpha_013: 计算过去5日 close 之和 - 20日 close 之和,并按 trade_date 排名\n", + " df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n", + " df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n", + "\n", + " return df\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "53f86ddc0677a6d7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:20:25.061140Z", + "start_time": "2025-02-23T14:20:21.880078Z" + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "def read_industry_data(h5_filename):\n", + " # 读取 H5 文件中所有的行业数据\n", + " industry_data = pd.read_hdf(h5_filename, key='sw_daily', columns=[\n", + " 'ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'pe', 'pb', 'vol'\n", + " ]) # 假设 H5 文件的键是 'industry_data'\n", + " industry_data = industry_data.reindex()\n", + " industry_data['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n", + "\n", + " grouped = industry_data.groupby('ts_code', group_keys=False)\n", + " industry_data['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " industry_data['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " # industry_data['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # industry_data = get_act_factor(industry_data, cat=False)\n", + " # industry_data = industry_data.sort_values(by=['trade_date', 'ts_code'])\n", + "\n", + " # 计算每天每个 ts_code 的因子和当天所有 ts_code 的中位数的偏差\n", + " factor_columns = ['obv', 'return_5', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4'] # 因子列\n", + "\n", + " for factor in factor_columns:\n", + " if factor in industry_data.columns:\n", + " # 计算每天每个 ts_code 的因子值与当天所有 ts_code 的中位数的偏差\n", + " industry_data[f'{factor}_deviation'] = industry_data.groupby('trade_date')[factor].transform(\n", + " lambda x: x - x.median())\n", + "\n", + " industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform(\n", + " lambda x: x.rank(pct=True))\n", + " industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol'])\n", + "\n", + " industry_data = industry_data.rename(\n", + " columns={col: f'industry_{col}' for col in industry_data.columns if col not in ['ts_code', 'trade_date']})\n", + "\n", + " industry_data = industry_data.rename(columns={'ts_code': 'cat_l2_code'})\n", + " return industry_data\n", + "\n", + "\n", + "industry_df = read_industry_data('../../data/sw_daily.h5')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "dbe2fd8021b9417f", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:20:25.128062Z", + "start_time": "2025-02-23T14:20:25.076707Z" + }, + "jupyter": { + "source_hidden": true + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "origin_columns = df.columns.tolist()\n", + "origin_columns = [col for col in origin_columns if col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'l2_code']]\n", + "origin_columns = [col for col in origin_columns if col not in index_data.columns]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5f3d9aece75318cd", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:22.858178Z", + "start_time": "2025-02-23T14:20:25.145555Z" + }, + "jupyter": { + "source_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 5538535 entries, 1962 to 5538534\n", + "Data columns (total 71 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 turnover_rate float64 \n", + " 8 pe_ttm float64 \n", + " 9 circ_mv float64 \n", + " 10 volume_ratio float64 \n", + " 11 is_st bool \n", + " 12 up_limit float64 \n", + " 13 down_limit float64 \n", + " 14 buy_sm_vol float64 \n", + " 15 sell_sm_vol float64 \n", + " 16 buy_lg_vol float64 \n", + " 17 sell_lg_vol float64 \n", + " 18 buy_elg_vol float64 \n", + " 19 sell_elg_vol float64 \n", + " 20 net_mf_vol float64 \n", + " 21 cat_l2_code object \n", + " 22 up float64 \n", + " 23 down float64 \n", + " 24 atr_14 float64 \n", + " 25 atr_6 float64 \n", + " 26 obv float64 \n", + " 27 maobv_6 float64 \n", + " 28 obv-maobv_6 float64 \n", + " 29 rsi_3 float64 \n", + " 30 rsi_6 float64 \n", + " 31 rsi_9 float64 \n", + " 32 return_5 float64 \n", + " 33 return_10 float64 \n", + " 34 return_20 float64 \n", + " 35 avg_close_5 float64 \n", + " 36 std_return_5 float64 \n", + " 37 std_return_15 float64 \n", + " 38 std_return_25 float64 \n", + " 39 std_return_90 float64 \n", + " 40 std_return_90_2 float64 \n", + " 41 std_return_5 / std_return_90 float64 \n", + " 42 std_return_5 / std_return_25 float64 \n", + " 43 std_return_90 - std_return_90_2 float64 \n", + " 44 ema_5 float64 \n", + " 45 ema_13 float64 \n", + " 46 ema_20 float64 \n", + " 47 ema_60 float64 \n", + " 48 act_factor1 float64 \n", + " 49 act_factor2 float64 \n", + " 50 act_factor3 float64 \n", + " 51 act_factor4 float64 \n", + " 52 cat_af1 bool \n", + " 53 cat_af2 bool \n", + " 54 cat_af3 bool \n", + " 55 cat_af4 bool \n", + " 56 act_factor5 float64 \n", + " 57 act_factor6 float64 \n", + " 58 rank_act_factor1 float64 \n", + " 59 rank_act_factor2 float64 \n", + " 60 rank_act_factor3 float64 \n", + " 61 active_buy_volume_large float64 \n", + " 62 active_buy_volume_big float64 \n", + " 63 active_buy_volume_small float64 \n", + " 64 buy_lg_vol_minus_sell_lg_vol float64 \n", + " 65 buy_elg_vol_minus_sell_elg_vol float64 \n", + " 66 log(circ_mv) float64 \n", + " 67 alpha_022 float64 \n", + " 68 alpha_003 float64 \n", + " 69 alpha_007 float64 \n", + " 70 alpha_013 float64 \n", + "dtypes: bool(5), datetime64[ns](1), float64(63), object(2)\n", + "memory usage: 2.8+ GB\n", + "None\n" + ] + } + ], + "source": [ + "def filter_data(df):\n", + " # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1'))\n", + " df = df[~df['is_st']]\n", + " df = df[~df['ts_code'].str.endswith('BJ')]\n", + " df = df[~df['ts_code'].str.startswith('30')]\n", + " df = df[~df['ts_code'].str.startswith('68')]\n", + " df = df[~df['ts_code'].str.startswith('8')]\n", + " df = df.reset_index(drop=True)\n", + " return df\n", + "\n", + "\n", + "df = filter_data(df)\n", + "df = get_technical_factor(df)\n", + "df = get_act_factor(df)\n", + "df = get_money_flow_factor(df)\n", + "df = get_alpha_factor(df)\n", + "# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\n", + "df = df.rename(columns={'l2_code': 'cat_l2_code'})\n", + "# df = df.merge(index_data, on='trade_date', how='left')\n", + "\n", + "print(df.info())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f4f16d63ad18d1bc", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:23.090304Z", + "start_time": "2025-02-23T14:21:22.943303Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['turnover_rate', 'pe_ttm', 'volume_ratio', 'cat_l2_code', 'up', 'down', 'atr_14', 'atr_6', 'obv', 'maobv_6', 'obv-maobv_6', 'rsi_3', 'rsi_6', 'rsi_9', 'return_5', 'return_10', 'return_20', 'avg_close_5', 'std_return_5', 'std_return_15', 'std_return_25', 'std_return_90', 'std_return_90_2', 'std_return_5 / std_return_90', 'std_return_5 / std_return_25', 'std_return_90 - std_return_90_2', 'ema_5', 'ema_13', 'ema_20', 'ema_60', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'cat_af1', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol', 'buy_elg_vol_minus_sell_elg_vol', 'log(circ_mv)', 'alpha_022', 'alpha_003', 'alpha_007', 'alpha_013']\n" + ] + } + ], + "source": [ + "feature_columns = [col for col in df.columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "feature_columns = [col for col in feature_columns if not col.startswith('_')]\n", + "print(feature_columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0ebdfb92-d88b-4b5c-a715-675dab876fc0", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:23.168842Z", + "start_time": "2025-02-23T14:21:23.122002Z" + } + }, + "outputs": [], + "source": [ + "def create_deviation_within_dates(df, feature_columns):\n", + " groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组\n", + " new_columns = {}\n", + " ret_feature_columns = feature_columns[:]\n", + "\n", + " # 自动选择所有数值型特征\n", + " num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col]\n", + "\n", + " # 遍历所有数值型特征\n", + " for feature in num_features:\n", + " if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差\n", + " continue\n", + "\n", + " grouped_median = df.groupby(['trade_date', groupby_col])[feature].transform('median')\n", + " deviation_col_name = f'deviation_median_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_median\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " grouped_mean = df.groupby(groupby_col)[feature].transform('mean')\n", + " deviation_col_name = f'deviation_mean_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " # 将新计算的偏差特征与原始 DataFrame 合并\n", + " df = pd.concat([df, pd.DataFrame(new_columns)], axis=1)\n", + "\n", + " # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']:\n", + " # if feature in df.columns and f'industry_{feature}' in df:\n", + " # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}']\n", + "\n", + " return df, ret_feature_columns\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fbb968383f8cf2c7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:39.397925Z", + "start_time": "2025-02-23T14:21:23.168842Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed 123852 outliers.\n" + ] + } + ], + "source": [ + "def get_qcuts(series, quantiles):\n", + " q = pd.qcut(series, q=quantiles, labels=False, duplicates='drop')\n", + " return q[-1] # 返回窗口最后一个元素的分位数标签\n", + "\n", + "\n", + "import pandas as pd\n", + "\n", + "\n", + "def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99):\n", + " if not (0 <= lower_percentile < upper_percentile <= 1):\n", + " raise ValueError(\"Percentile values must satisfy 0 <= lower_percentile < upper_percentile <= 1.\")\n", + "\n", + " # Calculate lower and upper bounds based on percentiles\n", + " lower_bound = label.quantile(lower_percentile)\n", + " upper_bound = label.quantile(upper_percentile)\n", + "\n", + " # Filter out values outside the bounds\n", + " filtered_label = label[(label >= lower_bound) & (label <= upper_bound)]\n", + "\n", + " # Print the number of removed outliers\n", + " print(f\"Removed {len(label) - len(filtered_label)} outliers.\")\n", + " return filtered_label\n", + "\n", + "\n", + "def calculate_risk_adjusted_target(df, days=5):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n", + " df['future_return'] = (df['future_close'] - df['close']) / df['close']\n", + "\n", + " df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(\n", + " level=0, drop=True)\n", + " df['sharpe_ratio'] = df['future_return'] * df['future_volatility']\n", + " df['sharpe_ratio'].replace([np.inf, -np.inf], np.nan, inplace=True)\n", + "\n", + " return df['sharpe_ratio']\n", + "\n", + "\n", + "future_close = df.groupby('ts_code')['close'].shift(-4)\n", + "future_return = (future_close - df['close']) / df['close']\n", + "labels = future_return >= 0.03\n", + "df['label'] = labels\n", + "df['lr_label'] = future_return\n", + "df['lr_label'] = remove_outliers_label_percentile(df['lr_label'])\n", + "\n", + "# df = df.apply(lambda x: x.astype('float32') if x.dtype in ['float64', 'float32'] else x)\n", + "df = df.sort_values(by=['trade_date', 'ts_code'])\n", + "train_data = df[(df['trade_date'] <= '2023-01-01') & (df['trade_date'] >= '2016-01-01')]\n", + "test_data = df[df['trade_date'] >= '2023-01-01']\n", + "\n", + "# train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "# train_data = train_data.merge(index_data, on='trade_date', how='left')\n", + "# train_data = train_data.rename(columns={'l2_code': 'cat_l2_code'})\n", + "# test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "# test_data = test_data.merge(index_data, on='trade_date', how='left')\n", + "# test_data = test_data.rename(columns={'l2_code': 'cat_l2_code'})\n", + "\n", + "train_data = train_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "test_data = test_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "\n", + "# train_data = get_future_data(train_data)\n", + "\n", + "# df = df[['ts_code', 'trade_date', 'open', 'close']]\n", + "\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "35238cb4f45ce756", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:56.438803Z", + "start_time": "2025-02-23T14:21:39.431593Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "feature_columns size: 149\n", + "feature_columns size: 149\n", + "1171702\n", + "最小日期: 2017-03-21\n", + "最大日期: 2022-12-30\n", + "402634\n", + "最小日期: 2023-01-03\n", + "最大日期: 2025-02-12\n" + ] + } + ], + "source": [ + "# feature_columns_new = feature_columns[:]\n", + "train_data, feature_columns_new = create_deviation_within_dates(train_data, feature_columns)\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "test_data, feature_columns_new = create_deviation_within_dates(test_data, feature_columns)\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "\n", + "train_data = train_data.dropna(subset=feature_columns_new)\n", + "train_data = train_data.dropna(subset=['label'])\n", + "train_data = train_data.reset_index(drop=True)\n", + "\n", + "test_data = test_data.dropna(subset=feature_columns_new)\n", + "test_data = test_data.dropna(subset=['label'])\n", + "test_data = test_data.reset_index(drop=True)\n", + "\n", + "print(len(train_data))\n", + "print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "print(len(test_data))\n", + "print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f679ccccecd09a06", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:56.621062Z", + "start_time": "2025-02-23T14:21:56.470090Z" + } + }, + "outputs": [], + "source": [ + "cat_columns = [col for col in df.columns if col.startswith('cat')]\n", + "for col in cat_columns:\n", + " train_data[col] = train_data[col].astype('category')\n", + " test_data[col] = test_data[col].astype('category')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8f134d435f71e9e2", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:58.157508Z", + "start_time": "2025-02-23T14:21:56.638939Z" + }, + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "from catboost import Pool\n", + "import lightgbm as lgb\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import optuna\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.metrics import mean_absolute_error\n", + "import os\n", + "import json\n", + "import pickle\n", + "import hashlib\n", + "\n", + "\n", + "def train_light_model(train_data_df, test_data_df, params, feature_columns, callbacks, evals,\n", + " print_feature_importance=True, num_boost_round=100,\n", + " use_optuna=False):\n", + " train_data_df, test_data_df = train_data_df.dropna(subset=['label']), test_data_df.dropna(subset=['label'])\n", + " X_train = train_data_df[feature_columns]\n", + " y_train = train_data_df['label']\n", + "\n", + " X_val = test_data_df[feature_columns]\n", + " y_val = test_data_df['label']\n", + "\n", + " categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " print(f'categorical_feature: {categorical_feature}')\n", + " train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n", + " val_data = lgb.Dataset(X_val, label=y_val, categorical_feature=categorical_feature)\n", + " model = lgb.train(\n", + " params, train_data, num_boost_round=num_boost_round,\n", + " valid_sets=[train_data, val_data], valid_names=['train', 'valid'],\n", + " callbacks=callbacks\n", + " )\n", + "\n", + " if print_feature_importance:\n", + " lgb.plot_metric(evals)\n", + " # lgb.plot_tree(model, figsize=(20, 8))\n", + " lgb.plot_importance(model, importance_type='split', max_num_features=20)\n", + " plt.show()\n", + " return model\n", + "\n", + "\n", + "from catboost import CatBoostClassifier\n", + "import pandas as pd\n", + "\n", + "\n", + "def train_catboost(train_data_df, test_data_df, feature_columns, params=None, plot=False):\n", + " train_data_df, test_data_df = train_data_df.dropna(subset=['label']), test_data_df.dropna(subset=['label'])\n", + " X_train = train_data_df[feature_columns]\n", + " y_train = train_data_df['label']\n", + "\n", + " X_val = test_data_df[feature_columns]\n", + " y_val = test_data_df['label']\n", + "\n", + " cat_features = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " print(f'cat_features: {cat_features}')\n", + " train_pool = Pool(data=X_train, label=y_train, cat_features=cat_features)\n", + " val_pool = Pool(data=X_val, label=y_val, cat_features=cat_features)\n", + "\n", + " model = CatBoostClassifier(**params)\n", + " model.fit(train_pool,\n", + " eval_set=val_pool, plot=plot)\n", + "\n", + " return model" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "4a4542e1ed6afe7d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:21:58.418136Z", + "start_time": "2025-02-23T14:21:58.339405Z" + } + }, + "outputs": [], + "source": [ + "light_params = {\n", + " 'objective': 'binary',\n", + " 'metric': 'average_precision',\n", + " 'learning_rate': 0.05,\n", + " 'is_unbalance': True,\n", + " 'num_leaves': 2048,\n", + " 'min_data_in_leaf': 1024,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " 'feature_fraction': 0.7,\n", + " 'bagging_fraction': 0.7,\n", + " 'bagging_freq': 5,\n", + " # 'lambda_l1': 80,\n", + " # 'lambda_l2': 65,\n", + " 'verbosity': -1,\n", + " 'num_threads': 16\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "beeb098799ecfa6a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:23:12.347650Z", + "start_time": "2025-02-23T14:21:58.449422Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 1171702\n", + "categorical_feature: [3, 34, 35, 36, 37]\n", + "Training until validation scores don't improve for 50 rounds\n", + "Early stopping, best iteration is:\n", + "[89]\ttrain's average_precision: 0.473589\tvalid's average_precision: 0.284686\n", + "Evaluated only: average_precision\n" + ] + }, + { + "data": { + "image/png": "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IjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik8MARERERCaHAYiIiIhMDgMQERERmRwGICIiIjI5DEBERERkchiAiIiIyOQwABEREZHJYQAiIiIik2Nm7AG0RoIgAACKi4thbm5u5NG0PgqFAmVlZSgqKmJ9HsDa1I/10Y+10Y+1qR/rU62oqAhA9ed4fRiA6pCfnw8A8PX1NfJIiIiIqLGKi4thb29fbx8GoDp07NgRAJCWlvbQApqioqIieHp6Ij09HXZ2dsYeTqvC2tSP9dGPtdGPtakf61NNEAQUFxfDw8PjoX0ZgOogFmsOjbK3tzf5H6b62NnZsT56sDb1Y330Y230Y23qx/poNHTiggdBExERkclhACIiIiKTwwBUB5lMhvfeew8ymczYQ2mVWB/9WJv6sT76sTb6sTb1Y30MIxIacq4YERERUTvCGSAiIiIyOQxAREREZHIYgIiIiMjkMAARERGRyWEAqsPGjRvh6+sLCwsLhIWF4fDhw8YeUotbuXIl+vbtC1tbW7i4uOCZZ57B5cuXdfoIgoClS5fCw8MDlpaWGDx4MC5cuGCkERvPypUrIRKJMG/ePG2bqdcmIyMDU6ZMgaOjI6ysrNC7d28kJiZql5tqfZRKJZYsWQJfX19YWlqiS5cuWL58OdRqtbaPKdXm0KFDGDNmDDw8PCASibBr1y6d5Q2pRUVFBd544w04OTnB2toaTz/9NO7cudOCW9E86quNQqHA22+/jZCQEFhbW8PDwwPTpk1DZmamzjraa22ajEA6vvvuO8Hc3Fz417/+JaSmpgpz584VrK2thdu3bxt7aC1qxIgRwpYtW4Tz588LycnJwujRowUvLy+hpKRE22fVqlWCra2tsH37duHcuXPCxIkTBXd3d6GoqMiII29ZJ0+eFHx8fISePXsKc+fO1babcm0KCgoEb29vYcaMGcKJEyeEmzdvCvv37xeu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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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lStXlualjtnfZmhoCEdHR1y9elWtP3MLCwvY29vL2ho3boz09HQA6v//+e3bt3H48GGMHDlSalP3zB8SC0MiIiqRjo4OnJycEBMTI2uPiYlB27ZtK2hW75etrS3Mzc1lGXNycnD8+HEpo5OTE7S1tWV9MjIycOnSJamPq6srnj17hjNnzkh9Tp8+jWfPnlXIvhJCIDAwELt27cLRo0dha2sr266uuUsihEB2drZa5+7cuTOSk5ORlJQkPZydneHr64ukpCTUrVtXbbO/LTs7G6mpqbCwsFDrz7xdu3ZFbkPz3//+F9bW1gDU///z0NBQ1KxZE15eXlKbumf+oD7aMjdERPRJKrxdxaZNm8Tly5fFxIkThaGhobh161ZFT63cnj9/Li5cuCAuXLggAIgVK1aICxcuSLfcWLp0qVAqlWLXrl0iOTlZDBo0qNilzWvXri0OHz4szp8/Lzp16lTs0uZNmzYV8fHxIj4+Xjg6OlbY0ub/93//J5RKpTh27JhsWfeXL19KfdQxtxBCzJgxQ/zyyy/i5s2b4uLFi2LmzJlCS0tLHDp0SAihvrmL8+aqpEKob/YpU6aIY8eOiRs3boiEhATRq1cvYWxsLH2fUtfcZ86cEZUrVxaLFi0SV69eFdu3bxcGBgZi27ZtUh91zZ6fny/q1KkjgoKCimxT18wfGgtDIiIq07///W9hbW0tdHR0RMuWLaVbHnwqYmNjBYAij6FDhwohXi/pPnfuXGFubi50dXWFm5ubSE5Olo3xxx9/iMDAQFG9enWhr68vevXqJdLT02V9Hj9+LHx9fYWxsbEwNjYWvr6+4smTJx8ppVxxeQGI0NBQqY865hZCiOHDh0tfr6ampqJz585SUSiE+uYuztuFobpmL7xPnba2trC0tBT9+/cXKSkp0nZ1zS2EEPv27RMODg5CV1dXNGrUSHz//fey7eqaPTo6WgAQaWlpRbapa+YPTSGEEBVyqJKIiIiIiIj+FniNIRERERERkYZjYUhERERERKThWBgSERERERFpOBaGREREREREGo6FIRERERERkYZjYUhERERERKThWBgSERERERFpOBaGRERERGrKw8MDEydOrOhpENEngIUhERERaSR/f38oFIoij2vXrr2X8Tdv3oyqVau+l7H+rF27dmHBggUVOofSHDt2DAqFAk+fPq3oqRBpvMoVPQEiIiKiitK9e3eEhobK2kxNTStoNiXLzc2Ftrb2O7+uevXqH2A270dubm5FT4GI3sAjhkRERKSxdHV1YW5uLntUqlQJALBv3z44OTlBT08PdevWxbx585CXlye9dsWKFXB0dIShoSGsrKwwZswYZGVlAXh9JGzYsGF49uyZdCQyODgYAKBQKLB7927ZPKpWrYrNmzcDAG7dugWFQoGdO3fCw8MDenp62LZtGwAgNDQUjRs3hp6eHho1aoS1a9eWmu/tU0ltbGywcOFC+Pn5wcjICNbW1tizZw8ePnyIvn37wsjICI6Ojjh37pz0msIjn7t370bDhg2hp6eHrl274s6dO7L3WrduHerVqwcdHR3Y2dlh69atsu0KhQLr169H3759YWhoiJEjR6Jjx44AgGrVqkGhUMDf3x8AcPDgQbRv3x5Vq1aFiYkJevXqhevXr0tjFe6jXbt2oWPHjjAwMECzZs0QHx8ve89Tp07B3d0dBgYGqFatGjw9PfHkyRMAgBACX3/9NerWrQt9fX00a9YMP/30U6n7k0idsTAkIiIiekt0dDSGDBmC8ePH4/Lly9iwYQM2b96MRYsWSX20tLSwevVqXLp0CWFhYTh69CimTZsGAGjbti1WrlyJKlWqICMjAxkZGZg6deo7zSEoKAjjx49HamoqPD09ERISglmzZmHRokVITU3F4sWLMWfOHISFhb3TuN9++y3atWuHCxcuwMvLC59//jn8/PwwZMgQnD9/HvXr14efnx+EENJrXr58iUWLFiEsLAynTp2CSqWCj4+PtD0yMhITJkzAlClTcOnSJfzrX//CsGHDEBsbK3vvuXPnom/fvkhOTsb8+fMREREBAEhLS0NGRgZWrVoFAHjx4gUmT56Ms2fP4siRI9DS0sI//vEPFBQUyMabNWsWpk6diqSkJDRs2BCDBg2SivekpCR07twZTZo0QXx8PE6ePInevXsjPz8fADB79myEhoZi3bp1SElJwaRJkzBkyBAcP378nfYnkdoQRERERBpo6NCholKlSsLQ0FB6fPbZZ0IIITp06CAWL14s679161ZhYWFR4ng7d+4UJiYm0vPQ0FChVCqL9AMgIiMjZW1KpVKEhoYKIYS4efOmACBWrlwp62NlZSV27Ngha1uwYIFwdXUtcU7u7u5iwoQJ0nNra2sxZMgQ6XlGRoYAIObMmSO1xcfHCwAiIyNDygFAJCQkSH1SU1MFAHH69GkhhBBt27YVo0aNkr33gAEDRM+ePWW5J06cKOsTGxsrAIgnT56UmEEIITIzMwUAkZycLIT43z7auHGj1CclJUUAEKmpqUIIIQYNGiTatWtX7HhZWVlCT09PxMXFydpHjBghBg0aVOpciNQVrzEkIiIijdWxY0esW7dOem5oaAgASExMxNmzZ2VHCPPz8/Hq1Su8fPkSBgYGiI2NxeLFi3H58mWoVCrk5eXh1atXePHihTTOX+Hs7Cz9++HDh7hz5w5GjBiBUaNGSe15eXlQKpXvNG7Tpk2lf5uZmQEAHB0di7RlZmbC3NwcAFC5cmXZfBo1aoSqVasiNTUVLi4uSE1NxejRo2Xv065dO+kIYHGZSnP9+nXMmTMHCQkJePTokXSkMD09HQ4ODsVmsbCwkObdqFEjJCUlYcCAAcWOf/nyZbx69Qpdu3aVtefk5KBFixblmiORumFhSERERBrL0NAQ9evXL9JeUFCAefPmoX///kW26enp4fbt2+jZsycCAgKwYMECVK9eHSdPnsSIESPKXFRFoVDITtMEil+I5c3isrAwCgkJQevWrWX9Cq+JLK83F7FRKBQltr192mZhe0ltb28XQhRpK2/B3Lt3b1hZWSEkJASWlpYoKCiAg4MDcnJyysxSOG99ff0Sxy/sExUVhVq1asm26erqlmuOROqGhSERERHRW1q2bIm0tLRii0YAOHfuHPLy8rB8+XJoab1esmHnzp2yPjo6OtL1bG8yNTVFRkaG9Pzq1at4+fJlqfMxMzNDrVq1cOPGDfj6+r5rnL8sLy8P586dg4uLC4DX1wQ+ffoUjRo1AgA0btwYJ0+ehJ+fn/SauLg4NG7cuNRxdXR0AEC2nx4/fozU1FRs2LABHTp0AACcPHnynefctGlTHDlyBPPmzSuyzd7eHrq6ukhPT4e7u/s7j02kjlgYEhEREb3lyy+/RK9evWBlZYUBAwZAS0sLFy9eRHJyMhYuXIh69eohLy8Pa9asQe/evXHq1CmsX79eNoaNjQ2ysrJw5MgRNGvWDAYGBjAwMECnTp3w3XffoU2bNigoKEBQUFC5bkURHByM8ePHo0qVKujRoweys7Nx7tw5PHnyBJMnT/5QuwLA6yNz48aNw+rVq6GtrY3AwEC0adNGKhS/+OILDBw4EC1btkTnzp2xb98+7Nq1C4cPHy51XGtraygUCvz888/o2bMn9PX1Ua1aNZiYmOD777+HhYUF0tPTMX369Hee84wZM+Do6IgxY8YgICAAOjo6iI2NxYABA1CjRg1MnToVkyZNQkFBAdq3bw+VSoW4uDgYGRlh6NChf2o/EX3KuCopERER0Vs8PT3x888/IyYmBq1atUKbNm2wYsUKWFtbAwCaN2+OFStW4KuvvoKDgwO2b9+OJUuWyMZo27YtAgIC4O3tDVNTU3z99dcAgOXLl8PKygpubm4YPHgwpk6dCgMDgzLnNHLkSGzcuBGbN2+Go6Mj3N3dsXnzZtja2r7/HfAWAwMDBAUFYfDgwXB1dYW+vj7Cw8Ol7f369cOqVauwbNkyNGnSBBs2bEBoaCg8PDxKHbdWrVqYN28epk+fDjMzMwQGBkJLSwvh4eFITEyEg4MDJk2ahGXLlr3znBs2bIhDhw7h119/hYuLC1xdXbFnzx5Urvz6uMiCBQvw5ZdfYsmSJWjcuDE8PT2xb9++j7I/if6OFOLtk9yJiIiIiP6/zZs3Y+LEiXj69GlFT4WIPiAeMSQiIiIiItJwLAyJiIiIiIg0HE8lJSIiIiIi0nA8YkhERERERKThWBgSERERERFpOBaGREREREREGo6FIRERERERkYZjYUhERERERKThWBgSERERERFpOBaGREREREREGo6FIRERERERkYZjYUhERERERKTh/h/0va8un88HFgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "evals = {}\n", + "model = train_light_model(train_data, test_data, light_params, feature_columns_new,\n", + " [lgb.log_evaluation(period=500),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=1000, use_optuna=False,\n", + " print_feature_importance=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "445dff84-70b2-4fc9-a9b6-1251993324d6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:23:12.546231Z", + "start_time": "2025-02-23T14:23:12.397923Z" + } + }, + "outputs": [], + "source": [ + "catboost_params = {\n", + " 'loss_function': 'Logloss', # 适用于二分类\n", + " 'eval_metric': 'AUC', # 评估指标\n", + " 'iterations': 5000,\n", + " 'learning_rate': 0.01,\n", + " 'depth': 10, # 控制模型复杂度\n", + " # 'l2_leaf_reg': 3, # L2 正则化\n", + " 'verbose': 500,\n", + " 'early_stopping_rounds': 100,\n", + " # 'one_hot_max_size': 50,\n", + " # 'class_weights': [0.6, 1.2]\n", + " 'task_type': 'GPU'\n", + "}\n", + "\n", + "# model = train_catboost(train_data, test_data, feature_columns_new, catboost_params, plot=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "c8783e36d104ec15", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:23:12.687156Z", + "start_time": "2025-02-23T14:23:12.546231Z" + } + }, + "outputs": [], + "source": [ + "from sklearn.linear_model import SGDClassifier, LinearRegression, LogisticRegression\n", + "\n", + "\n", + "def train_gbdt_lr(model, X_train: pd.DataFrame, y_train: pd.Series, model_type: str = 'lightgbm'):\n", + " if model_type not in ['lightgbm', 'catboost']:\n", + " raise ValueError(\"model_type must be either 'lightgbm' or 'catboost'\")\n", + "\n", + " # Step 1: Use the pre-trained GBDT model to transform the data into leaf indices\n", + " X_train_lr = predict(model, X_train, model_type=model_type)\n", + " # Raw predictions\n", + " # Convert raw predictions to leaf indices (CatBoost doesn't directly support leaf indices)\n", + " # X_train_lr = np.array([np.argmax(row) for row in X_train_lr])\n", + "\n", + " # # Step 2: One-hot encode the leaf indices to create new features\n", + " # X_train_lr = pd.DataFrame(X_train_lr).add_prefix('tree_') # Add prefix for clarity\n", + "\n", + " # # One-hot encoding for leaf indices\n", + " # X_train_lr = pd.get_dummies(X_train_lr, columns=X_train_lr.columns)\n", + "\n", + " # Step 3: Train a Logistic Regression model on the transformed features\n", + " lr_model = SGDClassifier(loss='log_loss')\n", + " lr_model.fit(X_train_lr, y_train)\n", + "\n", + " return lr_model\n", + "\n", + "\n", + "def predict(model, X: pd.DataFrame, model_type: str = 'lightgbm'):\n", + " if model_type == 'lightgbm':\n", + " X_train_lr = model.predict(X, pred_leaf=True) # Get leaf indices for training data\n", + " elif model_type == 'catboost':\n", + " X_train_lr = model.calc_leaf_indexes(X, ntree_start=int(model.tree_count_ * 0.3),\n", + " ntree_end=int(model.tree_count_ * 0.7))\n", + " return X_train_lr" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1a169a7d962c7ba7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:23:12.799750Z", + "start_time": "2025-02-23T14:23:12.720458Z" + } + }, + "outputs": [], + "source": [ + "\n", + "# train_data = train_data.dropna(subset=['lr_label'])\n", + "# lr_model = train_gbdt_lr(model, train_data[feature_columns_new], train_data['label'], model_type='lightgbm')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "52a6ffb090e92f84", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:23:12.911717Z", + "start_time": "2025-02-23T14:23:12.834986Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.14485596707818926\n" + ] + } + ], + "source": [ + "print(train_data['lr_label'].min())" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "63cd2f8d16f05b38", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:37:28.748351Z", + "start_time": "2025-02-23T14:37:28.538732Z" + } + }, + "outputs": [], + "source": [ + "from tqdm import tqdm\n", + "\n", + "\n", + "def incremental_training(test_data: pd.DataFrame,\n", + " model, lr_model,\n", + " days: int,\n", + " back_days: int,\n", + " feature_columns: list,\n", + " params: dict,\n", + " model_type: str = 'lightgbm'):\n", + "\n", + " test_data = test_data.sort_values(by='trade_date')\n", + " scores = []\n", + " unique_trade_dates = sorted(test_data['trade_date'].unique())\n", + "\n", + " for i in tqdm(range(0, len(unique_trade_dates), days)):\n", + " # Get the current window of trade dates\n", + " current_dates = unique_trade_dates[i:i + days]\n", + " window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + " X = window_data[feature_columns]\n", + "\n", + " if lr_model is not None:\n", + " window_scores = lr_model.predict_proba(model.predict(X, pred_leaf=True, num_iteration=1000))[:, -1]\n", + " scores.extend(window_scores)\n", + "\n", + " # Prepare data for incremental training\n", + " current_dates = unique_trade_dates[max(0, i - back_days):i + days]\n", + " window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + " X_train = window_data[feature_columns]\n", + " y_train = window_data['label'] # Assuming 'label' is what you're predicting\n", + " # Incrementally train the model\n", + " if len(y_train.unique()) > 1:\n", + " if model_type == 'lightgbm':\n", + " categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n", + " model = lgb.train(params,\n", + " train_set=train_data,\n", + " num_boost_round=100,\n", + " init_model=model,\n", + " keep_training_booster=True)\n", + " elif model_type == 'catboost':\n", + " from catboost import Pool\n", + " train_data = Pool(data=X_train, label=y_train,\n", + " cat_features=[col for col in feature_columns if col.startswith('cat')])\n", + " # model.set_params(**params)\n", + " model.fit(train_data, init_model=model)\n", + " lr_model = LogisticRegression(max_iter=10000)\n", + " lr_model.fit(model.predict(X_train, pred_leaf=True, num_iteration=1000), y_train)\n", + " else:\n", + " print(current_dates)\n", + "\n", + " # Add the scores as a new 'score' column to the test_data\n", + " test_data['score'] = scores\n", + " return test_data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "751a6df9-d90b-4053-8769-c6c3b6654406", + "metadata": { + "ExecuteTime": { + "start_time": "2025-02-23T14:37:28.771726Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 9%|▉ | 9/102 [00:56<13:10, 8.50s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 10%|▉ | 10/102 [01:10<15:47, 10.29s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 12%|█▏ | 12/102 [01:37<17:54, 11.94s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 14%|█▎ | 14/102 [02:06<19:15, 13.13s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 15%|█▍ | 15/102 [02:21<20:00, 13.80s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 18%|█▊ | 18/102 [03:06<20:25, 14.59s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 21%|██ | 21/102 [03:48<18:57, 14.05s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 24%|██▎ | 24/102 [05:13<30:33, 23.51s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 25%|██▍ | 25/102 [05:50<35:04, 27.33s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 26%|██▋ | 27/102 [06:19<25:45, 20.60s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 27%|██▋ | 28/102 [06:33<22:54, 18.58s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 28%|██▊ | 29/102 [06:46<20:50, 17.13s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 29%|██▉ | 30/102 [06:59<18:49, 15.68s/it]E:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n", + " 30%|███ | 31/102 [07:26<17:01, 14.39s/it]\n" + ] + } + ], + "source": [ + "predictions_test = incremental_training(test_data, model, None, 5, 0, feature_columns_new, light_params, model_type='lightgbm')\n", + "predictions_test = predictions_test.loc[predictions_test.groupby('trade_date')['score'].idxmax()]\n", + "predictions_test[['trade_date', 'score', 'ts_code']].to_csv('predictions_test.tsv', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6329ae6f358dabe7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-23T14:44:59.546639600Z", + "start_time": "2025-02-22T21:50:47.121759Z" + } + }, + "outputs": [], + "source": [ + "from lightgbm import LGBMClassifier" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/DoubleQuntile.ipynb b/code/train/DoubleQuntile.ipynb new file mode 100644 index 0000000..fe08a2c --- /dev/null +++ b/code/train/DoubleQuntile.ipynb @@ -0,0 +1,967 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "79a7758178bafdd3", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-02-16T08:24:31.295363Z", + "start_time": "2025-02-16T08:24:31.248141Z" + } + }, + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n" + ], + "outputs": [], + "execution_count": 1 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:26:37.921393Z", + "start_time": "2025-02-16T08:26:37.822365Z" + } + }, + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "def calculate_indicators(df):\n", + " \"\"\"\n", + " 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。\n", + " \"\"\"\n", + " # 计算当日涨跌幅\n", + " df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100\n", + "\n", + " # 计算5日移动平均\n", + " df['5_day_ma'] = df['close'].rolling(window=5).mean()\n", + "\n", + " # 计算RSI(14日)\n", + " delta = df['close'].diff()\n", + " gain = delta.where(delta > 0, 0)\n", + " loss = -delta.where(delta < 0, 0)\n", + " avg_gain = gain.rolling(window=14).mean()\n", + " avg_loss = loss.rolling(window=14).mean()\n", + " rs = avg_gain / avg_loss\n", + " df['RSI'] = 100 - (100 / (1 + rs))\n", + "\n", + " # 计算MACD\n", + " ema12 = df['close'].ewm(span=12, adjust=False).mean()\n", + " ema26 = df['close'].ewm(span=26, adjust=False).mean()\n", + " df['MACD'] = ema12 - ema26\n", + " df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean()\n", + " df['MACD_hist'] = df['MACD'] - df['Signal_line']\n", + "\n", + " return df\n", + "\n", + "def generate_index_indicators(h5_filename):\n", + " \"\"\"\n", + " 从H5文件中读取指数行情数据,计算相关指标,返回结果。\n", + "\n", + " 参数:\n", + " h5_filename (str): 存储指数行情数据的H5文件路径\n", + "\n", + " 返回:\n", + " DataFrame: 包含计算结果的DataFrame,每行代表一天,包含所有指数的指标\n", + " \"\"\"\n", + " # 读取指数行情数据\n", + " df = pd.read_hdf(h5_filename, key='index_data')\n", + "\n", + " # 计算每个ts_code的相关指标\n", + " df_indicators = []\n", + " for ts_code in df['ts_code'].unique():\n", + " # 获取某个指数的日线数据\n", + " df_index = df[df['ts_code'] == ts_code].copy()\n", + "\n", + " # 计算相关指标\n", + " df_index = calculate_indicators(df_index)\n", + "\n", + " # 将结果添加到df_indicators列表\n", + " df_indicators.append(df_index)\n", + "\n", + " # 合并所有指数的结果\n", + " df_all_indicators = pd.concat(df_indicators, ignore_index=True)\n", + "\n", + " # 保留trade_date列,并将同一天的数据按ts_code合并成一行\n", + " df_final = df_all_indicators.pivot_table(\n", + " index='trade_date',\n", + " columns='ts_code',\n", + " values=['daily_return', '5_day_ma', 'RSI', 'MACD', 'Signal_line', 'MACD_hist'],\n", + " aggfunc='last'\n", + " )\n", + "\n", + " df_final.columns = [f\"{col[1]}_{col[0]}\" for col in df_final.columns]\n", + " df_final = df_final.reset_index()\n", + " df_final['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n", + "\n", + " return df_final\n", + "\n", + "\n", + "# 使用函数\n", + "h5_filename = '../../data/index_data.h5'\n", + "index_data = generate_index_indicators(h5_filename)\n", + "index_data = index_data.dropna()\n", + "# 打印结果\n", + "print(index_data.head())\n" + ], + "id": "b216cc5529d07cad", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " trade_date 000852.SH_5_day_ma 000905.SH_5_day_ma 399006.SZ_5_day_ma \\\n", + "1314 2019-09-06 4108.5648 4064.9986 1013.1790 \n", + "1315 2019-09-05 4132.3992 4081.7042 1031.9632 \n", + "1316 2019-09-04 4164.2720 4107.3572 1048.1040 \n", + "1317 2019-09-03 4204.0682 4141.2734 1071.9208 \n", + "1318 2019-09-02 4232.8298 4163.0654 1090.8244 \n", + "\n", + " 000852.SH_MACD 000905.SH_MACD 399006.SZ_MACD 000852.SH_MACD_hist \\\n", + "1314 20.380810 34.702099 15.173396 -2.837620 \n", + "1315 28.830595 41.792560 21.448935 4.902761 \n", + "1316 32.263643 44.346834 26.714792 9.561498 \n", + "1317 39.294963 49.978947 32.917542 18.983194 \n", + "1318 44.192628 52.871877 37.373758 28.626657 \n", + "\n", + " 000905.SH_MACD_hist 399006.SZ_MACD_hist 000852.SH_RSI 000905.SH_RSI \\\n", + "1314 1.270353 -9.734351 39.526629 45.136516 \n", + "1315 8.678401 -5.892400 49.265364 53.813061 \n", + "1316 13.402276 -2.099643 53.026120 56.084097 \n", + "1317 22.384958 3.578197 66.615288 68.521794 \n", + "1318 30.874127 8.928962 68.827733 70.274913 \n", + "\n", + " 399006.SZ_RSI 000852.SH_Signal_line 000905.SH_Signal_line \\\n", + "1314 38.536512 23.218429 33.431746 \n", + "1315 47.245649 23.927834 33.114158 \n", + "1316 51.408682 22.702144 30.944558 \n", + "1317 63.606060 20.311770 27.593989 \n", + "1318 69.525065 15.565971 21.997750 \n", + "\n", + " 399006.SZ_Signal_line 000852.SH_daily_return 000905.SH_daily_return \\\n", + "1314 24.907747 -2.133006 -1.914426 \n", + "1315 27.341335 1.676448 1.436414 \n", + "1316 28.814435 -0.741755 -0.725607 \n", + "1317 29.339346 0.839908 0.864581 \n", + "1318 28.444796 -0.331791 -0.402711 \n", + "\n", + " 399006.SZ_daily_return \n", + "1314 -2.676700 \n", + "1315 2.454294 \n", + "1316 0.127868 \n", + "1317 2.933411 \n", + "1318 4.066145 \n" + ] + } + ], + "execution_count": 5 + }, + { + "cell_type": "code", + "id": "a79cafb06a7e0e43", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:25:13.872207Z", + "start_time": "2025-02-16T08:24:31.906361Z" + } + }, + "source": [ + "from utils.utils import read_and_merge_h5_data\n", + "\n", + "print('daily data')\n", + "df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df, join='inner')\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "daily data\n", + "daily basic\n", + "stk limit\n", + "money flow\n" + ] + } + ], + "execution_count": 3 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:26:43.228123Z", + "start_time": "2025-02-16T08:26:41.895312Z" + } + }, + "cell_type": "code", + "source": "df = df.merge(index_data, on='trade_date', how='left')", + "id": "7357147395bda969", + "outputs": [], + "execution_count": 6 + }, + { + "cell_type": "code", + "id": "c4e9e1d31da6dba6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:26:43.275563Z", + "start_time": "2025-02-16T08:26:43.228123Z" + } + }, + "source": [ + "origin_columns = df.columns.tolist()\n", + "origin_columns = [col for col in origin_columns if col not in ['turnover_rate', 'pe_ttm', 'volume_ratio']]" + ], + "outputs": [], + "execution_count": 7 + }, + { + "cell_type": "code", + "id": "a735bc02ceb4d872", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-02-16T08:26:43.388955Z", + "start_time": "2025-02-16T08:26:43.310081Z" + } + }, + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "def get_technical_factor(df):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " # 计算 up 和 down\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " # 计算 ATR\n", + " df['atr_14'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14), index=x.index)\n", + " )\n", + " df['atr_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + "\n", + " # 计算 OBV 及其均线\n", + " df['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " df['maobv_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n", + "\n", + " # 计算 RSI\n", + " df['rsi_3'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n", + " )\n", + " df['rsi_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['rsi_9'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n", + " )\n", + "\n", + " # 计算 return_10 和 return_20\n", + " df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n", + " df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # 计算 avg_close_5\n", + " df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n", + "\n", + " # 计算标准差指标\n", + " df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n", + " df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n", + " df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n", + " df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n", + " df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n", + "\n", + " # 计算比值指标\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算标准差差值\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_act_factor(df):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + " # 计算 EMA 指标\n", + " df['ema_5'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n", + " )\n", + " df['ema_13'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n", + " )\n", + " df['ema_20'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n", + " )\n", + " df['ema_60'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n", + " )\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = grouped['ema_5'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n", + " )\n", + " df['act_factor2'] = grouped['ema_13'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n", + " )\n", + " df['act_factor3'] = grouped['ema_20'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n", + " )\n", + " df['act_factor4'] = grouped['ema_60'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n", + " )\n", + "\n", + " df['cat_af1'] = df['act_factor1'] > 0\n", + " df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n", + " df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n", + " df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(df['act_factor1']**2 + df['act_factor2']**2)\n", + "\n", + " # 根据 trade_date 截面计算排名\n", + " df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True)\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_money_flow_factor(df):\n", + " # 计算资金流相关因子(字段名称见 tushare 数据说明)\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + " return df\n", + "\n", + "\n", + "def get_alpha_factor(df):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code')\n", + "\n", + " # alpha_022: 当前 close 与 5 日前 close 差值\n", + " df['alpha_022'] = grouped['close'].transform(lambda x: x - x.shift(5))\n", + "\n", + " # alpha_003: (close - open) / (high - low)\n", + " df['alpha_003'] = np.where(df['high'] != df['low'],\n", + " (df['close'] - df['open']) / (df['high'] - df['low']),\n", + " 0)\n", + "\n", + " # alpha_007: 计算过去5日 close 与 vol 的相关性,并按 trade_date 排名\n", + " df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n", + " df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n", + "\n", + " # alpha_013: 计算过去5日 close 之和 - 20日 close 之和,并按 trade_date 排名\n", + " df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n", + " df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n", + "\n", + " return df\n", + "\n" + ], + "outputs": [], + "execution_count": 8 + }, + { + "cell_type": "code", + "id": "dbe2fd8021b9417f", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "scrolled": true, + "ExecuteTime": { + "end_time": "2025-02-16T08:27:52.356590Z", + "start_time": "2025-02-16T08:26:43.420269Z" + } + }, + "source": [ + "def filter_data(df):\n", + " # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1'))\n", + " df = df[~df['is_st']]\n", + " df = df[~df['ts_code'].str.endswith('BJ')]\n", + " df = df[~df['ts_code'].str.startswith('30')]\n", + " df = df[~df['ts_code'].str.startswith('68')]\n", + " df = df[~df['ts_code'].str.startswith('8')]\n", + " df = df.reset_index(drop=True)\n", + " return df\n", + "\n", + "\n", + "df = filter_data(df)\n", + "df = get_technical_factor(df)\n", + "df = get_act_factor(df)\n", + "df = get_money_flow_factor(df)\n", + "df = get_alpha_factor(df)\n", + "print(df.info())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 5453316 entries, 1962 to 5453315\n", + "Data columns (total 87 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 turnover_rate float64 \n", + " 8 pe_ttm float64 \n", + " 9 circ_mv float64 \n", + " 10 volume_ratio float64 \n", + " 11 is_st bool \n", + " 12 up_limit float64 \n", + " 13 down_limit float64 \n", + " 14 buy_sm_vol float64 \n", + " 15 sell_sm_vol float64 \n", + " 16 buy_lg_vol float64 \n", + " 17 sell_lg_vol float64 \n", + " 18 buy_elg_vol float64 \n", + " 19 sell_elg_vol float64 \n", + " 20 net_mf_vol float64 \n", + " 21 000852.SH_5_day_ma float64 \n", + " 22 000905.SH_5_day_ma float64 \n", + " 23 399006.SZ_5_day_ma float64 \n", + " 24 000852.SH_MACD float64 \n", + " 25 000905.SH_MACD float64 \n", + " 26 399006.SZ_MACD float64 \n", + " 27 000852.SH_MACD_hist float64 \n", + " 28 000905.SH_MACD_hist float64 \n", + " 29 399006.SZ_MACD_hist float64 \n", + " 30 000852.SH_RSI float64 \n", + " 31 000905.SH_RSI float64 \n", + " 32 399006.SZ_RSI float64 \n", + " 33 000852.SH_Signal_line float64 \n", + " 34 000905.SH_Signal_line float64 \n", + " 35 399006.SZ_Signal_line float64 \n", + " 36 000852.SH_daily_return float64 \n", + " 37 000905.SH_daily_return float64 \n", + " 38 399006.SZ_daily_return float64 \n", + " 39 up float64 \n", + " 40 down float64 \n", + " 41 atr_14 float64 \n", + " 42 atr_6 float64 \n", + " 43 obv float64 \n", + " 44 maobv_6 float64 \n", + " 45 obv-maobv_6 float64 \n", + " 46 rsi_3 float64 \n", + " 47 rsi_6 float64 \n", + " 48 rsi_9 float64 \n", + " 49 return_10 float64 \n", + " 50 return_20 float64 \n", + " 51 avg_close_5 float64 \n", + " 52 std_return_5 float64 \n", + " 53 std_return_15 float64 \n", + " 54 std_return_25 float64 \n", + " 55 std_return_90 float64 \n", + " 56 std_return_90_2 float64 \n", + " 57 std_return_5 / std_return_90 float64 \n", + " 58 std_return_5 / std_return_25 float64 \n", + " 59 std_return_90 - std_return_90_2 float64 \n", + " 60 ema_5 float64 \n", + " 61 ema_13 float64 \n", + " 62 ema_20 float64 \n", + " 63 ema_60 float64 \n", + " 64 act_factor1 float64 \n", + " 65 act_factor2 float64 \n", + " 66 act_factor3 float64 \n", + " 67 act_factor4 float64 \n", + " 68 cat_af1 bool \n", + " 69 cat_af2 bool \n", + " 70 cat_af3 bool \n", + " 71 cat_af4 bool \n", + " 72 act_factor5 float64 \n", + " 73 act_factor6 float64 \n", + " 74 rank_act_factor1 float64 \n", + " 75 rank_act_factor2 float64 \n", + " 76 rank_act_factor3 float64 \n", + " 77 active_buy_volume_large float64 \n", + " 78 active_buy_volume_big float64 \n", + " 79 active_buy_volume_small float64 \n", + " 80 buy_lg_vol_minus_sell_lg_vol float64 \n", + " 81 buy_elg_vol_minus_sell_elg_vol float64 \n", + " 82 log(circ_mv) float64 \n", + " 83 alpha_022 float64 \n", + " 84 alpha_003 float64 \n", + " 85 alpha_007 float64 \n", + " 86 alpha_013 float64 \n", + "dtypes: bool(5), datetime64[ns](1), float64(80), object(1)\n", + "memory usage: 3.4+ GB\n", + "None\n" + ] + } + ], + "execution_count": 9 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:27:52.874223Z", + "start_time": "2025-02-16T08:27:52.717759Z" + } + }, + "cell_type": "code", + "source": [ + "feature_columns = [col for col in df.columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "print(feature_columns)" + ], + "id": "2132103543a77819", + "outputs": [], + "execution_count": 10 + }, + { + "cell_type": "code", + "id": "5f3d9aece75318cd", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:42:38.569134Z", + "start_time": "2025-02-16T08:42:37.956365Z" + } + }, + "source": [ + "def get_qcuts(series, quantiles):\n", + " q = pd.qcut(series, q=quantiles, labels=False, duplicates='drop')\n", + " return q[-1] # 返回窗口最后一个元素的分位数标签\n", + "\n", + "\n", + "window = 5\n", + "quantiles = 20\n", + "\n", + "def calculate_risk_adjusted_target(df, days=5):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n", + " df['future_return'] = (df['future_close'] - df['close']) / df['close']\n", + "\n", + " df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(level=0, drop=True)\n", + " df['sharpe_ratio'] = df['future_return'] * df['future_volatility']\n", + " df['sharpe_ratio'].replace([np.inf, -np.inf], np.nan, inplace=True)\n", + "\n", + " return df['sharpe_ratio']\n", + "\n", + "def get_label(df):\n", + " # labels = df['future_af13'] - df['act_factor1']\n", + " labels = df['future_close5']\n", + " # labels = df['future_af11']\n", + " # labels = df['ema_5'].shift(-1) - df['close']\n", + " # df['label'] = (df['future_af11'] - df['act_factor1']) / df['act_factor1']\n", + " # df['label'] = calculate_risk_adjusted_target(df, days=5)\n", + " # lower_percentile = df['label'].quantile(0.01) # 1%分位数\n", + " # upper_percentile = df['label'].quantile(0.99) # 99%分位数\n", + " # labels = df['label'].clip(lower=lower_percentile, upper=upper_percentile)\n", + " # labels = calculate_risk_adjusted_return(df, days=3, history_days=3, method='ratio')\n", + " return labels\n", + "\n", + "df['label'] = get_label(df)\n", + "train_data = df[df['trade_date'] <= '2023-01-01']\n", + "test_data = df[df['trade_date'] >= '2023-01-01']\n", + "\n", + "train_data = train_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "test_data = test_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "\n", + "# train_data = get_future_data(train_data)\n", + "\n", + "# df = df[['ts_code', 'trade_date', 'open', 'close']]\n", + "\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n", + "train_data = train_data.dropna(subset=feature_columns)\n", + "train_data = train_data.reset_index(drop=True)\n", + "train_data['label'] = get_label(train_data)\n", + "\n", + "test_data = test_data.dropna(subset=feature_columns)\n", + "test_data = test_data.reset_index(drop=True)\n", + "test_data['label'] = get_label(test_data)\n", + "\n", + "print(len(train_data))\n", + "print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "print(len(test_data))\n", + "print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n" + ], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'df' is not defined", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[1], line 34\u001B[0m\n\u001B[0;32m 24\u001B[0m \u001B[38;5;66;03m# labels = df['future_af11']\u001B[39;00m\n\u001B[0;32m 25\u001B[0m \u001B[38;5;66;03m# labels = df['ema_5'].shift(-1) - df['close']\u001B[39;00m\n\u001B[0;32m 26\u001B[0m \u001B[38;5;66;03m# df['label'] = (df['future_af11'] - df['act_factor1']) / df['act_factor1']\u001B[39;00m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 30\u001B[0m \u001B[38;5;66;03m# labels = df['label'].clip(lower=lower_percentile, upper=upper_percentile)\u001B[39;00m\n\u001B[0;32m 31\u001B[0m \u001B[38;5;66;03m# labels = calculate_risk_adjusted_return(df, days=3, history_days=3, method='ratio')\u001B[39;00m\n\u001B[0;32m 32\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m labels\n\u001B[1;32m---> 34\u001B[0m df[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mlabel\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m get_label(\u001B[43mdf\u001B[49m)\n\u001B[0;32m 35\u001B[0m train_data \u001B[38;5;241m=\u001B[39m df[df[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mtrade_date\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m<\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[38;5;124m'\u001B[39m\u001B[38;5;124m2023-01-01\u001B[39m\u001B[38;5;124m'\u001B[39m]\n\u001B[0;32m 36\u001B[0m test_data \u001B[38;5;241m=\u001B[39m df[df[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mtrade_date\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m>\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[38;5;124m'\u001B[39m\u001B[38;5;124m2023-01-01\u001B[39m\u001B[38;5;124m'\u001B[39m]\n", + "\u001B[1;31mNameError\u001B[0m: name 'df' is not defined" + ] + } + ], + "execution_count": 1 + }, + { + "cell_type": "code", + "id": "8f134d435f71e9e2", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-02-16T08:42:38.569134800Z", + "start_time": "2025-02-16T08:28:25.333768Z" + } + }, + "source": [ + "import lightgbm as lgb\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import optuna\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.metrics import mean_absolute_error\n", + "import os\n", + "import json\n", + "import pickle\n", + "import hashlib\n", + "\n", + "def train_light_model(train_data_df, test_data_df, params, feature_columns, callbacks, evals,\n", + " print_feature_importance=True, num_boost_round=100,\n", + " use_optuna=False):\n", + "\n", + " X_train = train_data_df[feature_columns]\n", + " y_train = train_data_df['label']\n", + "\n", + " X_val = test_data_df[feature_columns]\n", + " y_val = test_data_df['label']\n", + "\n", + " categorical_feature = [col for col in feature_columns if 'cat' in col]\n", + " train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n", + " val_data = lgb.Dataset(X_val, label=y_val, categorical_feature=categorical_feature)\n", + " model = lgb.train(\n", + " params, train_data, num_boost_round=num_boost_round,\n", + " valid_sets=[train_data, val_data], valid_names=['train', 'valid'],\n", + " callbacks=callbacks\n", + " )\n", + "\n", + " if print_feature_importance:\n", + " lgb.plot_metric(evals)\n", + " # lgb.plot_tree(model, figsize=(20, 8))\n", + " lgb.plot_importance(model, importance_type='split', max_num_features=20)\n", + " plt.show()\n", + " return model\n", + "\n", + "\n", + "from catboost import CatBoostRegressor\n", + "import pandas as pd\n", + "\n", + "\n", + "def train_catboost(df, feature_columns, params=None):\n", + " \"\"\"\n", + " 训练 CatBoost 排序模型\n", + " - df: 包含因子、date、instrument 和 label 的 DataFrame\n", + " - num_boost_round: 训练的轮数\n", + " - print_feature_importance: 是否打印特征重要性\n", + " - plot: 是否绘制特征重要性图\n", + " - split_date: 用于划分训练集和验证集的日期(比如 '2020-01-01')\n", + "\n", + " 返回训练好的模型\n", + " \"\"\"\n", + " df_sorted = df.sort_values(by=['trade_date', 'label'], ascending=[True, False])\n", + "\n", + " df_sorted = df_sorted.sort_values(by='trade_date')\n", + " unique_dates = df_sorted['trade_date'].unique()\n", + " val_date_count = int(len(unique_dates) * 0.1)\n", + " val_dates = unique_dates[-val_date_count:]\n", + " val_indices = df_sorted[df_sorted['trade_date'].isin(val_dates)].index\n", + " train_indices = df_sorted[~df_sorted['trade_date'].isin(val_dates)].index\n", + "\n", + " # 获取训练集和验证集的样本\n", + " train_df = df_sorted.iloc[train_indices].sort_values(by=['trade_date', 'label'], ascending=[True, False])\n", + " val_df = df_sorted.iloc[val_indices].sort_values(by=['trade_date', 'label'], ascending=[True, False])\n", + "\n", + " X_train = train_df[feature_columns]\n", + " y_train = train_df['label']\n", + "\n", + " X_val = val_df[feature_columns]\n", + " y_val = val_df['label']\n", + "\n", + " model = CatBoostRegressor(**params)\n", + " model.fit(X_train,\n", + " y_train,\n", + " eval_set=(X_val, y_val))\n", + "\n", + " return model" + ], + "outputs": [], + "execution_count": 12 + }, + { + "cell_type": "code", + "id": "beeb098799ecfa6a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:42:38.569134800Z", + "start_time": "2025-02-16T08:29:41.943281Z" + } + }, + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "light_params9 = {\n", + " # 'objective': 'regression',\n", + " # 'metric': 'l2',\n", + " 'objective': 'quantile', # 分位回归\n", + " 'metric': 'quantile', # 使用 quantile 作为评估指标\n", + " 'alpha': 0.75, # 90% 分位数\n", + " 'learning_rate': 0.05,\n", + " 'is_unbalance': True,\n", + " 'num_leaves': 2048,\n", + " 'min_data_in_leaf': 256,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " # 'feature_fraction': 0.7,\n", + " # 'bagging_fraction': 0.7,\n", + " # 'bagging_freq': 5,\n", + " # 'lambda_l1': 10,\n", + " # 'lambda_l2': 10,\n", + " 'verbosity': -1,\n", + " # 'device': 'gpu'\n", + "}\n", + "evals = {}\n", + "light_model9 = train_light_model(train_data, test_data, light_params9, feature_columns,\n", + " [lgb.log_evaluation(period=500),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=10000, use_optuna=False,\n", + " print_feature_importance=True)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 1170833\n", + "Training until validation scores don't improve for 50 rounds\n", + "Early stopping, best iteration is:\n", + "[147]\ttrain's quantile: 0.00152696\tvalid's quantile: 0.00164099\n", + "Evaluated only: quantile\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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f/8S21xdXcu17/XwuohcawpSIjXEqFGj+Nvf/sa0adP4+9//Xma7gIAA/P39+eWXX0p9/EqWSyjPukSBgYGAdcLxlfL39yc5ObnE9tK2ubm5lZjkDNZgGBAQUGK7vWsqlcXf3581a9aU2F5arfYord7Fixdz7Ngxli5dahuFAjh16lSFPGdFuNavi8i1plN7IjVEnTp1eOqppxg4cCAjR44ss92AAQNIT0+nsLCQ2NjYEremTZva2pZ3ZOJSmjRpYjvtWFrQuZQePXqwfft2Nm/eXGz7//73vxJtIyIi2LJlS7Fte/bsYffu3VdetB26detGZmYmP//8c7Hts2bNKtf+rq6uAFf0ep8PV+f3Pe/DDz8s9zGutat9XUQcTSNSIjXI66+/ftk2d911F1988QX9+/fn8ccf54YbbsBisXDkyBGWLFnCoEGDGDJkCACtWrVi1qxZzJ49mwYNGuDm5karVq2uuK7333+fgQMH0rFjRyZMmEC9evVITExkwYIFfPHFF2XuN378eGbMmMGtt97Kq6++SnBwMF988QW7du0q0XbEiBHcd999jBs3jjvuuINDhw7xj3/8wzYidq2NHDmSt99+m/vuu49XX32VRo0a8fPPP7NgwQIAnJwu/f/ali1bAvDRRx/h7e2Nm5sbkZGRpZ56O69z587Url2bsWPH8sILL2CxWPjiiy9KBE9HutrXRcTR9AkVkWLMZjM//PADf/3rX/n2228ZMmQIgwcP5vXXXy8RlF566SW6devGmDFjuOGGG8r9lfqL9e3bl+XLlxMaGspjjz3GLbfcwssvv3zZeTIhISEsW7aMqKgoHn74Ye677z7c3Nx47733SrS95557+Mc//sGCBQsYMGAAH3zwAR988AFNmjSxq+Yr5enpyeLFi+nevTtPP/00d9xxB4mJiUydOhUAX1/fS+4fGRnJlClT2Lx5M927d6d9+/b8+OOPl9zH39+fefPm4eHhwX333ceDDz6Il5cXs2fPrqhuXbWrfV1EHM1kGIbh6CJERGqq1157jeeee47ExES7JtxXV3pdpKrQqT0RkUpyfqSsWbNm5Ofns3jxYt59913uu+++Gh0W9LpIVaYgJSJSSTw8PHj77bc5ePAgubm51KtXj7/85S8899xzji7NofS6SFWmU3siIiIidtJkcxERERE7KUiJiIiI2MnhQWrq1KlERkbi5uZGTEwMK1asuGT7ZcuWERMTg5ubGw0aNGDatGkl2syZM4eoqChcXV2JiooqcUX65cuXM3DgQMLCwjCZTHz33XcljpGSksKoUaMICwvDw8ODW265hb17915VX0VERKR6cehk89mzZzN+/HimTp3KjTfeyIcffki/fv3YsWNHsYtknpeQkED//v0ZM2YM//3vf/ntt98YN24cgYGBtguMxsfHM3z4cF555RWGDBnC3LlzGTZsGCtXrqRDhw4AZGdnEx0dzQMPPFDqhUkNw2Dw4MFYLBa+//57atWqxVtvvcXNN9/Mjh078PT0LFf/ioqKOHbsGN7e3hV+uQkRERG5NgzDIDMzk7CwsMsvCms40A033GCMHTu22LZmzZoZzzzzTKntn376aaNZs2bFtv3f//2f0bFjR9v9YcOGGbfcckuxNn379jXuuuuuUo8JGHPnzi22bffu3QZgbNu2zbatoKDA8PPzM/7zn/9ctl/nHT582AB000033XTTTbcqeDt8+PBl/6132IhUXl4e69ev55lnnim2vU+fPqxatarUfeLj4+nTp0+xbX379mX69Onk5+djsViIj49nwoQJJdpMmTKl3LWdv97XhVctN5vNuLi4sHLlSh566KEy97vwWmHGuS9E7tmzBz8/v3I/f3WQn5/PkiVL6NGjBxaLxdHlVCr1XX1X32sO9b169j0zM5PIyMhyXaTdYUEqLS2NwsLCEpeACA4OLvOq38nJyaW2LygoIC0tjdDQ0DLbXMmVxJs1a0b9+vWZNGkSH374IZ6enrz11lskJyeTlJRU5n6TJ0/mpZdeKrF93bp1eHh4lPv5qwsPDw9Wr17t6DIcQn1X32sa9V19r05ycnIAyjUtx+ELcl5cpGEYlyy8tPYXb7/SY17MYrEwZ84cRo8ejZ+fH2azmZtvvpl+/fpdcr9JkyYxceJE2/2MjAzCw8Pp0aPHJS8sWh3l5+cTFxdH7969q93/VC5HfVff1feaQ32vnn3PyMgod1uHBamAgADMZnOJkaLU1NQyL1QaEhJSantnZ2dbUCmrzeUufnqxmJgYNm3axOnTp8nLyyMwMJAOHToQGxtb5j6urq64urqW2G6xWKrdh6y81Hf1vaZR39X3mqY69v1K+uOw5Q9cXFyIiYkhLi6u2Pa4uDg6d+5c6j6dOnUq0X7hwoXExsbaOl1Wm7KOeTk+Pj4EBgayd+9e1q1bx6BBg+w6joiIiFQ/Dj21N3HiREaMGEFsbCydOnXio48+IjExkbFjxwLWU2VHjx7ls88+A2Ds2LG89957TJw4kTFjxhAfH8/06dP58ssvbcd8/PHH6dq1K2+88QaDBg3i+++/Z9GiRaxcudLWJisri3379tnuJyQksGnTJvz8/GzLLnz99dcEBgZSr149tm7dyuOPP87gwYNLTHYXERGpbEVFReTl5Tm0hvz8fJydnTl79iyFhYUOreVKWSwWzGZzhRzLoUFq+PDhpKen8/LLL5OUlETLli2ZP38+9evXByApKYnExERb+8jISObPn8+ECRN4//33CQsL49133y22FlTnzp2ZNWsWzz33HM8//zwNGzZk9uzZtjWkwDr5u0ePHrb75+c1jRw5kpkzZ9qee+LEiaSkpBAaGsr999/P888/fy1fDhERkcvKy8sjISGBoqIih9ZhGAYhISEcPny4Sq6V6OvrS0hIyFXX7vDJ5uPGjWPcuHGlPnY+1FyoW7dubNiw4ZLHHDp0KEOHDi3z8e7du9smqZflscce47HHHrtkGxERkcpkGAZJSUmYzWbCw8Mvv1jkNVRUVERWVhZeXl4OreNKGYZBTk4OqampAISGhl7V8RwepERERKR8CgoKyMnJsV2+zJHOn150c3OrUkEKwN3dHbB+GS0oKOiqTvNVrZ6LiIjUYOfnIrm4uDi4kqrvfBDNz8+/quMoSImIiFQxVXFO0vWmol5DBSkREREROylIiYiISJURERFxRdfPvdY02VxERESuqe7du9OmTZsKCUBr167F09Pz6ouqIApSIiIi4lCGYVBYWIiz8+VjSWBgYCVUVH46tSciIiLXzKhRo1i2bBnvvPMOJpMJk8nEzJkzMZlMLFiwgNjYWFxdXVmxYgX79+9n0KBBBAcH4+XlRfv27Vm0aFGx4118as9kMvHxxx8zZMgQPDw8aNy4MT/88EOl9U9BSkREpIoyDIOcvAKH3C63sPV577zzDp06dWLMmDEkJSWRlJREeHg4AE8//TSTJ09m586dtG7dmqysLPr378+iRYvYuHEjffv2ZeDAgcWuclKal156iWHDhrFlyxb69+/Pvffey4kTJ6769S0PndoTERGpos7kFxL1twUOee5tL/YuVzsfHx9cXFzw8PAgJCQEgF27dgHw8ssv07v3H8fx9/cnOjradv/VV19l7ty5/PDDDzz66KNlPseoUaO4++67AXjttdf497//zZo1a7jllluuuF9XSiNSIiIi4hCxsbHF7mdnZ/P0008TFRWFr68vXl5e7Nq167IjUq1bt7b97unpibe3t+0SMNeaRqRERESqKHeLmR0v93XIc7uaTWSevbpjXPztu6eeeooFCxbw5ptv0qhRI9zd3Rk6dCh5eXmXPI7FYil232QyVdpFnRWkREREqiiTyYSHi2P+Kb+SoOLi4mK7vM2lrFixglGjRjFkyBAAsrKyOHjwoL0lVgqd2hMREZFrKiIigtWrV3Pw4EHS0tLKDGGNGjXi22+/ZdOmTWzevJl77rmn0kaW7KUgJSIiItfUk08+idlsJioqisDAwDLnPL399tvUrl2bzp07M3DgQPr27Uu7du0qudoro1N7IiIick01adKE+Pj4YttGjRpVol1ERASLFy8utu2RRx4pdv/iU32lLcNw6tQpu+q0h0akREREROykICUiIiJiJwUpERERETspSImIiIjYSUFKRERExE4KUiIiIiJ2UpASERERsZOClIiIiIidFKRERERE7KQgJSIiIte1iIgIpkyZYrtvMpn47rvvymx/8OBBTCYTmzZtuua16RIxIiIiUqUkJSVRu3ZtR5cBKEiJiIhIFRMSEuLoEmx0ak9ERESumQ8//JA6depQVFRUbPttt93GyJEj2b9/P4MGDSI4OBgvLy/at2/PokWLLnnMi0/trVmzhrZt2+Lm5kZsbCwbN268Fl0plYKUiIhIVWUYkJftmJthlKvEO++8k7S0NJYsWWLbdvLkSRYsWMC9995LVlYW/fv3Z9GiRWzcuJG+ffsycOBAEhMTy3X87OxsBgwYQNOmTVm/fj0vvvgiTz75pF0vpz10ak9ERKSqys+B18Ic89zPHClXMz8/P2655Rb+97//0atXLwC+/vpr/Pz86NWrF2azmejoaFv7V199lblz5/LDDz/w6KOPXvb4X3zxBYWFhcyYMQMPDw9atGjBkSNHePjhh+3r1xXSiJSIiIhcU/feey9z5swhNzcXsIafu+66C7PZTHZ2Nk8//TRRUVH4+vri5eXFrl27yj0itXPnTqKjo/Hw8LBt69Sp0zXpR2k0IiUiIlJVWTzgr8cc89xmNzibWa6mAwcOpKioiHnz5tG+fXtWrFjBW2+9BcBTTz3FggULePPNN2nUqBHu7u4MHTqUvLy8ch3bKOcpxmtFQUpERKSqMpnAxdMxz33R5PFLcXd35/bbb+eLL75g3759NGnShJiYGABWrFjBqFGjGDJkCABZWVkcPHiw3MeOiori888/58yZM7i7uwPw+++/l78fV0mn9kREROSau/fee5k3bx4zZszgvvvus21v1KgR3377LZs2bWLz5s3cc889Jb7hdyn33HMPTk5OjB49mh07djB//nzefPPNa9GFUilIiYiIyDXXs2dP/Pz82L17N/fcc49t+9tvv03t2rXp3LkzAwcOpG/fvrRr167cx/Xy8uLHH39kx44dtG3blmeffZY33njjWnShVDq1JyIiItec2Wzm2LGS87kiIiJYvHhxsW2PPPJIsfsXn+q7eF5Ux44dS1wOprLmTmlESkRERMROClIiIiIidlKQEhEREbGTgpSIiIiInRSkREREqhhHL0JZHVTUa6ggJSIiUkWYzWaAcq/6LWXLyckBwGKxXNVxtPxBJTibX+joEkREpBpwdnbGw8OD48ePY7FYcHJy3HhIUVEReXl5nD171qF1XCnDMMjJySE1NRVfX19bOLWXglQl+D3hBHeEBDm6DBERqeJMJhOhoaEkJCRw6NAhh9ZiGIbtsiwmk8mhtdjD19eXkJCQqz6OglQlWLo7jTsq70LUIiJSjbm4uNC4cWOHn97Lz89n+fLldO3a9apPj1U2i8Vy1SNR5ylIVYJle45TUFiEs7nqDH2KiMj1y8nJCTc3N4fWYDabKSgowM3NrcoFqYqkf9krwakzBaw/dNLRZYiIiEgFU5CqJAt3pDi6BBEREalgClKVZMH2ZK37ISIiUs0oSFUCV4sTR06eYWdSpqNLERERkQqkIFUJOkXWBqyjUiIiIlJ9KEhVgp5NrWtIzd+a5OBKREREpCIpSFWC7k0DcDE7sTc1iz0pOr0nIiJSXShIVQJvNwtdmwQC8NPmYw6uRkRERCqKglQlGdA6FICftibp23siIiLVhIJUJenVPAgXZycOHM9mV7JO74mIiFQHClKVxNvNQvfzp/e26PSeiIhIdaAgVYkGRIcBMG+LTu+JiIhUBwpSlahXsyDcLE4cTM9h85HTji5HRERErpKCVCXydHWmb4sQAOasP+LgakRERORqKUhVsjva1QXgh83HyC0odHA1IiIicjUU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cYajp6y3+Vut3/i/vW0dXuzXoNzPpSAlIiIi1ZrJZCLM150wX3duvuC04Okz+ew4lsG6gyeIP5DO+kMnaVHH54qOrSAlIiIiNZKPu4VODa2n9P7cqzFn8wspLDIozK1CK5uLiIiIXA/czq2inpF7mYYXqJ6XYhYRERGpBApSIiIiInZSkBIRERGxk4KUiIiIiJ0UpERERETspCAlIiIiYicFKRERERE7KUiJiIiI2ElBSkRERMROClIiIiIidlKQEhEREbGTgpSIiIiInRSkREREROykICUiIiJiJwUpERERETspSImIiIjYSUFKRERExE4KUiIiIiJ2UpASERERsZOClIiIiIidFKRERERE7KQgJSIiImInBSkREREROylIiYiIiNhJQUpERETETgpSIiIiInZSkBIRERGxk4KUiIiIiJ0UpERERETspCAlIiIiYicFKRERERE7KUiJiIiI2ElBSkRERMROClIiIiIidlKQEhEREbGTgpSIiIiInRSkREREROykICUiIiJiJwUpERERETspSImIiIjYSUFKRERExE4KUiIiIiJ2UpASERERsZOClIiIiIidFKRERERE7KQgJSIiImInBSkREREROylIiYiIiNhJQUpERETETs6OLqA6MwwDgMzMTCwWi4OrqVz5+fnk5OSQkZGhvtcg6rv6rr7XHNW57xkZGcAf/45fioLUNZSeng5AZGSkgysRERGRK5WZmYmPj88l2yhIXUN+fn4AJCYmXvaNqG4yMjIIDw/n8OHD1KpVy9HlVCr1XX1X32sO9b169t0wDDIzMwkLC7tsWwWpa8jJyToFzcfHp9p9yMqrVq1a6nsNpL6r7zWN+l79+l7eARBNNhcRERGxk4KUiIiIiJ0UpK4hV1dXXnjhBVxdXR1dSqVT39X3mkZ9V99rmprc9wuZjPJ8t09EREREStCIlIiIiIidFKRERERE7KQgJSIiImInBSkREREROylIXSNTp04lMjISNzc3YmJiWLFihaNLqnCTJ0+mffv2eHt7ExQUxODBg9m9e3exNqNGjcJkMhW7dezY0UEVV5wXX3yxRL9CQkJsjxuGwYsvvkhYWBju7u50796d7du3O7DiihMREVGi7yaTiUceeQSoXu/58uXLGThwIGFhYZhMJr777rtij5fnfc7NzeXPf/4zAQEBeHp6ctttt3HkyJFK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RKQiaURKRKqt9evXs2TJEry8vGy3Zs2aAdZRoPNiY2NL7LtkyRJ69+5NnTp18Pb25v777yc9Pf2KTqnt3LmT8PBwW4gCiIqKwtfXl507d9q2RURE2EIUQGhoKKmpqQBER0fTq1cvWrVqxZ133sl//vMfTp48Wf4XQUSuKQUpEam2ioqKGDhwIJs2bSp227t3L127drW18/T0LLbfoUOH6N+/Py1btmTOnDmsX7+e999/H4D8/PxyP79hGJhMpstut1gsxR43mUwUFRUBYDabiYuL4+effyYqKop///vfNG3alISEhHLXISLXjoKUiFQLLi4uFBYWFtvWrl07tm/fTkREBI0aNSp2uzg8XWjdunUUFBTwr3/9i44dO9KkSROOHTt22ee7WFRUFImJiRw+fNi2bceOHZw+fZrmzZuXu28mk4kbb7yRl156iY0bN+Li4sLcuXPLvb+IXDsKUiJSLURERLB69WoOHjxIWloaRUVFPPLII5w4cYK7776bNWvWcODAARYuXMiDDz54yRDUsGFDCgoK+Pe//82BAwf4/PPPmTZtWonny8rK4tdffyUtLY2cnJwSx7n55ptp3bo19957Lxs2bGDNmjXcf//9dOvWrdTTiaVZvXo1r732GuvWrSMxMZFvv/2W48ePX1EQE5FrR0FKRKqFJ598ErPZTFRUFIGBgSQmJhIWFsZvv/1GYWEhffv2pWXLljz++OP4+Pjg5FT2X39t2rThrbfe4o033qBly5Z88cUXTJ48uVibzp07M3bsWIYPH05gYGCJyepgHUn67rvvqF27Nl27duXmm2+mQYMGzJ49u9z9qlWrFsuXL6d///40adKE5557jn/961/069ev/C+OiFwzJkPfoRURERGxi0akREREROykICUiIiJiJwUpERERETspSImIiIjYSUFKRERExE4KUiIiIiJ2UpASERERsZOClIiIiIidFKRERERE7KQgJSIiImInBSkREREROylIiYiIiNjp/wH0YSbdowgh7gAAAABJRU5ErkJggg==" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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RcHf358ffviBsLAwNBoN48ePJzIykq1bt9K4ceN31VaRRwUGBrJ//37mzZuHRqNBo9EQGhqabvp28+bNaDQa9X1QUBCVK1dm+fLllChRAq1Wi6IoaDQali5dSps2bTAzM6N06dJs2bJFr6z9+/fz0UcfodVqcXJyYuTIkSQnJwOwaNEiihQpkm56umXLlvTo0UN9v3XrVqpWrUqBAgUoUaIEwcHBahkAGo2GhQsX0qpVK8zNzZk0adJL47Bv3z40Gg07duzA29sbrVbLwYMHuX79Oq1atcLBwQELCwuqVavGrl271PN8fHz4448/GDx4sBq/NEeOHKFu3bqYmpri4uLCgAEDiI+Pf8V3RAgh3q86deqwe/durly5AsC5c+c4dOgQfn5+ap7U1FQCAgIYNmwYHh4e6cpISEhAo9Gg1WrVtAIFCmBgYMChQ4fefSeE+EBl65Jj6dKliYmJwd7eniZNmrB8+XKuXbuGo6Pju2qfyAfmzZvHlStX8PT0JCQkBIDt27dn6dxr167x448/smHDBr2b2YODg/Wmmbt27coff/yBtbU1t2/fxs/Pj8DAQFatWsXvv/9O7969KVCgAEFBQbRv3159unbDhg0BePjwITt27GDr1q0A7Nixg27duvHNN9/w8ccfc/36dT777DNAN3OWZsKECUydOlV9andWDB8+nFmzZlGiRAkKFSrErVu38PPzY9KkSRQoUICVK1fi7+/P5cuXKVasGBs3bqRSpUp89tlnert7nT9/niZNmjBx4kSWLVvGvXv36N+/P/3792fFihWZ1p+QkEBCQoL6Pi4uDoC603eRbGyepT7kRVoDhYneUDUknIRUzatPyKMkDjoSB523EYcLQU0YMmQIDx48oFy5chgaGpKSkkJISAjt2rVT70WcPn06hoaG9OvXT01LSUlRv65atSrm5uYMGzaMiRMnoigKo0ePJjU1ldu3b6e7pzElJQXgrdzrmFZGfr9vUuKgk1vikNX6NYqiKFkt1MDAgDt37qjbNhYsWJCzZ89SokSJ12ulEP+fj48PlStXVte9h4aGMmjQIP799181z+bNm2nTpg1pP7JBQUFMmTKF27dvY2dnp+bTaDSMHTuWiRMnArp1pJaWloSFhdG0aVPGjBnDhg0biIyMVK+if/fdd4wYMYLY2FgMDAxo1aoVtra2LFu2DIDFixczYcIE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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "id": "10bdf199fcff6b48", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:42:38.569134800Z", + "start_time": "2025-02-16T08:30:40.002290Z" + } + }, + "source": [ + "light_params1 = {\n", + " # 'objective': 'regression',\n", + " # 'metric': 'l2',\n", + " 'objective': 'quantile', # 分位回归\n", + " 'metric': 'quantile', # 使用 quantile 作为评估指标\n", + " 'alpha': 0.25, # 90% 分位数\n", + " 'learning_rate': 0.05,\n", + " 'is_unbalance': True,\n", + " 'num_leaves': 2048,\n", + " 'min_data_in_leaf': 256,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " # 'feature_fraction': 0.7,\n", + " # 'bagging_fraction': 0.7,\n", + " # 'bagging_freq': 5,\n", + " # 'lambda_l1': 10,\n", + " # 'lambda_l2': 10,\n", + " 'verbosity': -1,\n", + " # 'device': 'gpu'\n", + "}\n", + "evals = {}\n", + "light_model1 = train_light_model(train_data, test_data, light_params1, feature_columns,\n", + " [lgb.log_evaluation(period=500),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=10000, use_optuna=False,\n", + " print_feature_importance=True)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training until validation scores don't improve for 50 rounds\n", + "Early stopping, best iteration is:\n", + "[82]\ttrain's quantile: 0.00160062\tvalid's quantile: 0.00150239\n", + "Evaluated only: quantile\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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ty4eHh4MGjSInJyci+7HxcWlwHOTyXTVbuqsICUiIlJBmUymEh1eczRXV1fb7W0uZunSpdx9990MGDAAgIyMDPbu3XuFq7s8OrQnIiIiV1StWrVYuXIle/fuJTU1tdjZorp16zJz5kzWr1/Phg0bGDJkyFWbWbKXgpSIiIhcUY888ghms5mYmBiqVatW7DlP77//PgEBAXTo0IG+ffvSq1cvWrVqdZWrLZ3yPx8oIiIiFVrdunX566+/cHI6N39z9913F+oXFRXFn3/+WaDt4YcfLvD8wkN9RS3DcOLECbtrLS3NSImIiIjYSUFKRERExE4KUiIiIiJ2UpASERERsZOClIiIiIidFKRERERE7KQgJSIiImInBSkREREROylIiYiIiNhJQUpERETKtaioKCZMmGB7bjKZ+Omnn4rtv3fvXkwmE+vXr7/itekWMSIiIlKhJCUlERAQ4OgyAAUpERERqWBCQ0MdXYKNDu2JiIjIFfPxxx8TExNDfn5+gfabb76Z4cOHs3v3bvr160dISAje3t60adOGBQsWXHSfFx7aW7lyJS1btsTd3Z3Y2FjWrVt3JT5KkRSkREREKirDgJxMxzwMo0Ql3nrrrRw9epSFCxfa2o4fP868efO48847ycjIoE+fPixYsIB169bRq1cv+vbtS2JiYon2n5mZyU033USDBg1Ys2YNL774Io899phdw2kPHdoTERGpqCxZ8Hq4Y9776UPg6nXJboGBgXTv3p3vvvuOHj16APDDDz/Y2s1mM82bN7f1f/XVV5k1axazZ8/mkUceueT+v/32W/Ly8vj888/x9PSkcePGHDhwgIceesj+z1YKmpESERGRK+rWW29l5syZZGdnA9bwc/vtt2M2m8nMzOSJJ54gJiYGf39/vL292bZtW4lnpLZu3Urz5s3x9PS0tbVv3/6KfI6iaEZKRESkonLxtM4MOeq9S6h3796MGjWKOXPm0KZNG5YuXcp7770HwOOPP868efN45513qFu3Lh4eHgwaNIicnJwS7dso4SHGK0VBSkREpKIymUp0eM3RPDw8GDBgAN9++y27du2ifv36tG7dGoClS5dy9913M2DAAAAyMjLYu3dvifcdExPD119/zalTp/Dw8ADg77//LvPPUBwd2hMREZErbsiQIcyZM4fPP/+coUOH2trr1q3LzJkzWb9+PRs2bGDI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HHpob+zYsQwbNozY2Fjat2/PJ598QmJiom1dqHHjxnHw4EG++uorwHqF3gcffMDYsWN54IEHiI+PZ8qUKQWuxhs1ahSdO3fmzTffpF+/fvz8888sWLCAZcuW2fpkZGSwa9cu2/OEhATWr19PYGAgtWrVIiMjgxdffJFbbrmFsLAw9u7dy9NPP01wcHCB9ahERESkanNokBo8eDBHjx7l5ZdfJikpiSZNmjB37lwiIyMBSEpKIjEx0dY/OjqauXPnMmbMGD788EPCw8OZOHFigbWgOnTowLRp03j22Wd57rnnqFOnDtOnT7etIQWwevVqunXrZnt+9rym4cOHM3XqVMxmMxs3buSrr77ixIkThIWF0a1bN6ZPn46Pj8+VHhYRERGpIBx+svnIkSMZOXJkka9NnTq1UFuXLl1Yu3btRfc5aNAgBg0aVOzrXbt25WLLZ3l4eDBv3ryLvoeIiIiIw86REhEREanoFKRERERE7KQgJSIiImInBSkREREROylIiYiIiNhJQUpERETETgpSIiIiInZSkBIRERGxk4KUiIiIiJ0UpERERETspCAlIiIiYicFKRERERE7KUiJiIiI2ElBSkRERMROClIiIiIidlKQEhEREbGTgpSIiIiInRSkREREROykICUiIiJiJwUpERERETspSImIiIjYSUFKRERExE4KUiIiIiJ2UpASERERsZOClIiIiIidFKRERERE7KQgJSIiImInBSkREREROylIiYiIiNhJQUpERETETgpSIiIiInZSkBIRERGxk4KUiIiIiJ0UpERERETspCAlIiIiYicFKRERERE7KUiJiIiI2ElBSkRERMROClIiIiIidlKQEhEREbGTgpSIiIiInRSkREREROykICUiIiJiJ2dHF1CZGYYBQHp6Oi4uLg6upnyzWCxkZWWRlpamsboEjVXJaaxKR+NVchqrkquIY5WWlgac+z1+MQpSV9DRo0cBiI6OdnAlIiIiUlrp6en4+fldtI+C1BUUGBgIQGJi4iX/Q1R1aWlpREREsH//fnx9fR1dTrmmsSo5jVXpaLxKTmNVchVxrAzDID09nfDw8Ev2VZC6gpycrKeg+fn5VZgfHkfz9fXVWJWQxqrkNFalo/EqOY1VyVW0sSrpBIhONhcRERGxk4KUiIiIiJ0UpK4gNzc3XnjhBdzc3BxdSrmnsSo5jVXJ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4QUjNDTUcHNzMzp37mxs3LjRcUWXIxcGKY1VQb/88ovRpEkTw83NzWjYsKHxySefFHhd42WVlpZmjBo1yqhVq5bh7u5u1K5d23jmmWcK/IKrqmO1cOHCIv+NGj58uGEYJRuXU6dOGY888ogRGBhoeHh4GDfddJORmJjogE9zZV1srBISEor9937hwoW2fVSWsTIZhmFcvfkvERERkcpD50iJiIiI2ElBSkRERMROClIiIiIidlKQEhEREbGTgpSIiIiInRSkREREROykICUiIiJiJwUpEZEyFBUVxYQJExxdhohcJQpSIlJh3X333fTv3x+Arl27Mnr06Kv23lOnTsXf379Q+6pVq3jwwQevWh0i4ljOji5ARKQ8ycnJwdXV1e7tq1WrVobViEh5pxkpEanw7r77bhYvXsx//vMfTCYTJpOJvXv3ArBlyxb69OmDt7c3ISEhDBs2jNTUVNu2Xbt25ZFHHmHs2LEEBwfTo0cPAN577z2aNm2Kl5cXERERjBw5koyMDAAWLVrEPffcw8mTJ23v9+KLLwKFD+0lJibSr18/vL298fX15bbbbuPw4cO211988UVatGjB119/TVRUFH5+ftx+++2kp6fb+vz44480bdoUDw8PgoKCuP7668nMzLxCoykipaEgJSIV3n/+8x/at2/PAw88QFJSEklJSURERJCUlESXLl1o0aIFq1ev5vfff+fw4cPcdtttBbb/8ssvcXZ25q+//uLjjz8GwMnJiYkTJ7Jp0ya+/PJL/vzzT5544gkAOnTowIQJE/D19bW932OPPVaoLsMw6N+/P8eOHWPx4sXExcWxe/duBg8eXKDf7t27+emnn/j111/59ddfWbx4MePHjwcgKSmJO+64g3vvvZetW7eyaNEiBg4ciG6TKlI+6NCeiFR4fn5+uLq64unpSWhoqK39o48+olWrVrz++uu2ts8//5yIiAh27NhB/fr1Aahbty5vvfVWgX2ef75VdHQ0r7zyCg899BCTJk3C1dUVPz8/TCZTgfe70IIFC/jnn39ISEggIiICgK+//prGjRuzatUq2rRpA0B+fj5Tp07Fx8cHgGHDhvHHH3/w2muvkZSURG5uLgMHDiQyMhKApk2bXsZoiUhZ0oyUiFRaa9asYeHChXh7e9seDRs2BKyzQGfFxsYW2nbhwoX06NGDGjVq4OPjw1133cXRo0dLdUht69atRERE2EIUQExMDP7+/mzdutXWFhUVZQtRAGFhYaSkpADQvHlzunfvTtOmTbn11lv59NNPOX78eMkHQUSuKAUpEam08vPz6du3L+vXry/w2LlzJ507d7b18/LyKrDdvn376NOnD02aNGHGjBmsWbOGDz/8EACLxVLi9zcMA5PJdMl2FxeXAq+bTCby8/MBMJvNxMXF8dtvvxETE8N///tfGjRoQEJCQonrEJErR0FKRCoFV1dX8vLyCrS1atWKzZs3ExUVRd26dQs8LgxP51u9ejW5ubm8++67tGvXjvr163Po0KFLvt+FYmJiSExMZP/+/ba2LVu2cPLkSRo1alTiz2Yymbj22mt56aWXWLduHa6ursyaNavE24vIlaMgJSKVQlRUFCtWrGDv3r2kpqaSn5/Pww8/zLFjx7jjjjtYuXIle/bsYf78+dx7770XDUF16tQhNzeX//73v+zZs4evv/6ayZMnF3q/jIwM/vjjD1JTU8nKyiq0n+uvv55mzZpx5513snbtWlauXMldd91Fly5dijycWJQVK1bw+uuvs3r1ahITE5k5cyZHjhwpVRATkStHQUpEKoXHHnsMs9lMTEwM1apVIzExkfDwcP766y/y8vLo1asXTZo0YdSoUfj5+eHkVPw/fy1atOC9997jzTffpEmTJnz77be88cYbBfp06NCBESNGMHjwYKpVq1boZHWwziT99NNPBAQE0LlzZ66//npq167N9OnTS/y5fH19WbJkCX369KF+/fo8++yzvPvuu9xwww0lHxwRuWJMhq6hFREREbGLZqRERERE7KQgJSIiImInBSkREREROylIiYiIiNhJQUpERETETgpSIiIiInZSkBIRERGxk4KUiIiIiJ0UpERERETspCAlIiIiYicFKRERERE7KUiJiIiI2On/ARudzu/VpnzOAAAAAElFTkSuQmCC" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxQAAAHFCAYAAABrfr8yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVzN2f/A8dfttmhXaWNSthKFZrJH2UJElmE0g4ZhMIY0MXbZ92XGjH3IYMbMyFgbNIixG/vga4nEiMYaIbe6vz88+vxchQpFvZ+Px33ons/5nHPe96Z7z+csH5VWq9UihBBCCCGEEHmgV9ANEEIIIYQQQry7pEMhhBBCCCGEyDPpUAghhBBCCCHyTDoUQgghhBBCiDyTDoUQQgghhBAiz6RDIYQQQgghhMgz6VAIIYQQQggh8kw6FEIIIYQQQog8kw6FEEIIIYQQIs+kQyGEEOKdFRkZiUqlyvYRHh7+Ruo8deoUERERxMfHv5HyX0V8fDwqlYrIyMiCbkqeRUdHExERUdDNEELkgn5BN0AIIYR4VUuWLKFixYo6aSVLlnwjdZ06dYrRo0fj5+eHi4vLG6kjrxwdHdm7dy/lypUr6KbkWXR0NN9//710KoR4h0iHQgghxDvPw8MDb2/vgm7GK9FoNKhUKvT18/7RbGRkRK1atV5jq/LPgwcPMDExKehmCCHyQKY8CSGEKPR++eUXateujampKWZmZjRt2pQjR47o5Pn777/56KOPcHFxwdjYGBcXFzp16sSlS5eUPJGRkXz44YcANGjQQJlelTnFyMXFhZCQkCz1+/n54efnpzyPjY1FpVKxbNkyvvrqK0qVKoWRkRHnz58H4M8//6RRo0ZYWFhgYmJC3bp12bp160vjzG7KU0REBCqViuPHj/Phhx9iaWmJtbU1YWFhpKWlcebMGZo1a4a5uTkuLi5MmTJFp8zMti5fvpywsDAcHBwwNjbG19c3y2sIsG7dOmrXro2JiQnm5uY0adKEvXv36uTJbNPhw4dp3749VlZWlCtXjpCQEL7//nsAnelrmdPLvv/+e+rXr4+dnR2mpqZ4enoyZcoUNBpNltfbw8ODgwcPUq9ePUxMTChbtiyTJk0iIyNDJ++dO3f46quvKFu2LEZGRtjZ2REQEMD//vc/Jc/jx48ZN24cFStWxMjICFtbWz799FP++++/l74nQhQF0qEQQgjxzktPTyctLU3nkWnChAl06tSJSpUq8euvv7Js2TLu3btHvXr1OHXqlJIvPj4eNzc3Zs2axebNm5k8eTKJiYlUr16dGzduANCiRQsmTJgAPPlyu3fvXvbu3UuLFi3y1O4hQ4aQkJDAvHnzWL9+PXZ2dixfvhx/f38sLCxYunQpv/76K9bW1jRt2jRHnYrn6dChA1WrViUqKooePXowc+ZMBgwYQFBQEC1atOD333+nYcOGfP3116xevTrL+UOHDuXChQssWrSIRYsWcfXqVfz8/Lhw4YKS56effqJ169ZYWFjw888/88MPP3D79m38/PzYtWtXljLbtm1L+fLl+e2335g3bx4jRoygffv2AMpru3fvXhwdHQGIi4sjODiYZcuWsWHDBrp3787UqVP5/PPPs5R97do1Pv74Yz755BPWrVtH8+bNGTJkCMuXL1fy3Lt3Dx8fH+bPn8+nn37K+vXrmTdvHq6uriQmJgKQkZFB69atmTRpEsHBwWzcuJFJkyYRExODn58fDx8+zPN7IkShoRVCCCHeUUuWLNEC2T40Go02ISFBq6+vr/3yyy91zrt3757WwcFB26FDh+eWnZaWpr1//77W1NRU+8033yjpv/32mxbQbt++Pcs5zs7O2q5du2ZJ9/X11fr6+irPt2/frgW09evX18mXkpKitba21gYGBuqkp6ena6tWraqtUaPGC14NrfbixYtaQLtkyRIlbdSoUVpAO336dJ281apV0wLa1atXK2kajUZra2urbdu2bZa2vv/++9qMjAwlPT4+XmtgYKD97LPPlDaWLFlS6+npqU1PT1fy3bt3T2tnZ6etU6dOljaNHDkySwxffPGFNidfT9LT07UajUb7448/atVqtfbWrVvKMV9fXy2g3b9/v845lSpV0jZt2lR5PmbMGC2gjYmJeW49P//8sxbQRkVF6aQfPHhQC2jnzJnz0rYKUdjJCIUQQoh33o8//sjBgwd1Hvr6+mzevJm0tDS6dOmiM3pRrFgxfH19iY2NVcq4f/8+X3/9NeXLl0dfXx99fX3MzMxISUnh9OnTb6Td7dq103m+Z88ebt26RdeuXXXam5GRQbNmzTh48CApKSl5qqtly5Y6z93d3VGpVDRv3lxJ09fXp3z58jrTvDIFBwejUqmU587OztSpU4ft27cDcObMGa5evUrnzp3R0/v/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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 15 + }, + { + "cell_type": "code", + "id": "5bb96ca8492e74d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:42:38.584794600Z", + "start_time": "2025-02-16T08:31:20.861518Z" + } + }, + "source": [ + "score_df = train_data\n", + "score_df['score'] = light_model9.predict(score_df[feature_columns]) + light_model1.predict(score_df[feature_columns])\n", + "# train_data['score'] = catboost_model.predict(train_data[feature_columns])\n", + "# score_df = score_df[score_df['score'] > 0]\n", + "predictions_train = score_df.loc[score_df.groupby('trade_date')['score'].idxmax()]\n", + "predictions_train[['trade_date', 'score', 'ts_code']].to_csv('predictions_train.tsv', index=False)\n" + ], + "outputs": [], + "execution_count": 16 + }, + { + "cell_type": "code", + "id": "5d1522a7538db91b", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:42:38.584794600Z", + "start_time": "2025-02-16T08:31:26.697459Z" + } + }, + "source": [ + "score_df = test_data\n", + "score_df['score'] = light_model9.predict(score_df[feature_columns]) / light_model1.predict(score_df[feature_columns])\n", + "# test_data['score'] = catboost_model.predict(test_data[feature_columns])\n", + "# score_df = score_df[score_df['score'] > 0]\n", + "predictions_test = score_df.loc[score_df.groupby('trade_date')['score'].idxmax()]\n", + "predictions_test[['trade_date', 'score', 'ts_code']].to_csv('predictions_test.tsv', index=False)" + ], + "outputs": [], + "execution_count": 17 + }, + { + "cell_type": "code", + "id": "b427ce41-9739-4e9e-bea8-5f2551fec5d7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-16T08:42:38.584794600Z", + "start_time": "2025-02-16T08:31:28.801289Z" + } + }, + "source": [], + "outputs": [], + "execution_count": null + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/DoubleRank.ipynb b/code/train/DoubleRank.ipynb new file mode 100644 index 0000000..cff6b9c --- /dev/null +++ b/code/train/DoubleRank.ipynb @@ -0,0 +1,1385 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "79a7758178bafdd3", + "metadata": {}, + "source": [ + "# %load_ext autoreload\n", + "# %autoreload 2\n", + "\n", + "import pandas as pd\n", + "import warnings\n", + "\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "pd.set_option('display.max_columns', None)\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "a79cafb06a7e0e43", + "metadata": { + "scrolled": true + }, + "source": [ + "from utils.utils import read_and_merge_h5_data\n", + "\n", + "print('daily data')\n", + "df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol', 'pct_chg'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df, join='inner')\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)\n", + "print('cyq perf')\n", + "df = read_and_merge_h5_data('../../data/cyq_perf.h5', key='cyq_perf',\n", + " columns=['ts_code', 'trade_date', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct',\n", + " 'cost_50pct',\n", + " 'cost_85pct', 'cost_95pct', 'weight_avg', 'winner_rate'],\n", + " df=df)\n", + "print(df.info())" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "cac01788dac10678", + "metadata": {}, + "source": [ + "print('industry')\n", + "industry_df = read_and_merge_h5_data('../../data/industry_data.h5', key='industry_data',\n", + " columns=['ts_code', 'l2_code', 'in_date'],\n", + " df=None, on=['ts_code'], join='left')\n", + "\n", + "\n", + "def merge_with_industry_data(df, industry_df):\n", + " # 确保日期字段是 datetime 类型\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'])\n", + " industry_df['in_date'] = pd.to_datetime(industry_df['in_date'])\n", + "\n", + " # 对 industry_df 按 ts_code 和 in_date 排序\n", + " industry_df_sorted = industry_df.sort_values(['in_date', 'ts_code'])\n", + "\n", + " # 对原始 df 按 ts_code 和 trade_date 排序\n", + " df_sorted = df.sort_values(['trade_date', 'ts_code'])\n", + "\n", + " # 使用 merge_asof 进行向后合并\n", + " merged = pd.merge_asof(\n", + " df_sorted,\n", + " industry_df_sorted,\n", + " by='ts_code', # 按 ts_code 分组\n", + " left_on='trade_date',\n", + " right_on='in_date',\n", + " direction='backward'\n", + " )\n", + "\n", + " # 获取每个 ts_code 的最早 in_date 记录\n", + " min_in_date_per_ts = (industry_df_sorted\n", + " .groupby('ts_code')\n", + " .first()\n", + " .reset_index()[['ts_code', 'l2_code']])\n", + "\n", + " # 填充未匹配到的记录(trade_date 早于所有 in_date 的情况)\n", + " merged['l2_code'] = merged['l2_code'].fillna(\n", + " merged['ts_code'].map(min_in_date_per_ts.set_index('ts_code')['l2_code'])\n", + " )\n", + "\n", + " # 保留需要的列并重置索引\n", + " result = merged.reset_index(drop=True)\n", + " return result\n", + "\n", + "\n", + "# 使用示例\n", + "df = merge_with_industry_data(df, industry_df)\n", + "# print(mdf[mdf['ts_code'] == '600751.SH'][['ts_code', 'trade_date', 'l2_code']])" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "c4e9e1d31da6dba6", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "source": [ + "def calculate_indicators(df):\n", + " \"\"\"\n", + " 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。\n", + " \"\"\"\n", + " df = df.sort_values('trade_date')\n", + " df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100\n", + " # df['5_day_ma'] = df['close'].rolling(window=5).mean()\n", + " delta = df['close'].diff()\n", + " gain = delta.where(delta > 0, 0)\n", + " loss = -delta.where(delta < 0, 0)\n", + " avg_gain = gain.rolling(window=14).mean()\n", + " avg_loss = loss.rolling(window=14).mean()\n", + " rs = avg_gain / avg_loss\n", + " df['RSI'] = 100 - (100 / (1 + rs))\n", + "\n", + " # 计算MACD\n", + " ema12 = df['close'].ewm(span=12, adjust=False).mean()\n", + " ema26 = df['close'].ewm(span=26, adjust=False).mean()\n", + " df['MACD'] = ema12 - ema26\n", + " df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean()\n", + " df['MACD_hist'] = df['MACD'] - df['Signal_line']\n", + "\n", + " # 4. 情绪因子1:市场上涨比例(Up Ratio)\n", + " df['up_ratio'] = df['daily_return'].apply(lambda x: 1 if x > 0 else 0)\n", + " df['up_ratio_20d'] = df['up_ratio'].rolling(window=20).mean() # 过去20天上涨比例\n", + "\n", + " # 5. 情绪因子2:成交量变化率(Volume Change Rate)\n", + " df['volume_mean'] = df['vol'].rolling(window=20).mean() # 过去20天的平均成交量\n", + " df['volume_change_rate'] = (df['vol'] - df['volume_mean']) / df['volume_mean'] * 100 # 成交量变化率\n", + "\n", + " # 6. 情绪因子3:波动率(Volatility)\n", + " df['volatility'] = df['daily_return'].rolling(window=20).std() # 过去20天的日收益率标准差\n", + "\n", + " # 7. 情绪因子4:成交额变化率(Amount Change Rate)\n", + " df['amount_mean'] = df['amount'].rolling(window=20).mean() # 过去20天的平均成交额\n", + " df['amount_change_rate'] = (df['amount'] - df['amount_mean']) / df['amount_mean'] * 100 # 成交额变化率\n", + "\n", + " return df\n", + "\n", + "\n", + "def generate_index_indicators(h5_filename):\n", + " df = pd.read_hdf(h5_filename, key='index_data')\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n", + " df = df.sort_values('trade_date')\n", + "\n", + " # 计算每个ts_code的相关指标\n", + " df_indicators = []\n", + " for ts_code in df['ts_code'].unique():\n", + " df_index = df[df['ts_code'] == ts_code].copy()\n", + " df_index = calculate_indicators(df_index)\n", + " df_indicators.append(df_index)\n", + "\n", + " # 合并所有指数的结果\n", + " df_all_indicators = pd.concat(df_indicators, ignore_index=True)\n", + "\n", + " # 保留trade_date列,并将同一天的数据按ts_code合并成一行\n", + " df_final = df_all_indicators.pivot_table(\n", + " index='trade_date',\n", + " columns='ts_code',\n", + " values=['daily_return', 'RSI', 'MACD', 'Signal_line',\n", + " 'MACD_hist', 'up_ratio_20d', 'volume_change_rate', 'volatility',\n", + " 'amount_change_rate', 'amount_mean'],\n", + " aggfunc='last'\n", + " )\n", + "\n", + " df_final.columns = [f\"{col[1]}_{col[0]}\" for col in df_final.columns]\n", + " df_final = df_final.reset_index()\n", + "\n", + " return df_final\n", + "\n", + "\n", + "# 使用函数\n", + "h5_filename = '../../data/index_data.h5'\n", + "index_data = generate_index_indicators(h5_filename)\n", + "index_data = index_data.dropna()\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "a735bc02ceb4d872", + "metadata": {}, + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "\n", + "def get_rolling_factor(df):\n", + " old_columns = df.columns.tolist()[:]\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " # df[\"gap_next_open\"] = (df[\"open\"].shift(-1) - df[\"close\"]) / df[\"close\"]\n", + "\n", + " df['return_skew'] = grouped['pct_chg'].rolling(window=5).skew().reset_index(0, drop=True)\n", + " df['return_kurtosis'] = grouped['pct_chg'].rolling(window=5).kurt().reset_index(0, drop=True)\n", + "\n", + " # 因子 1:短期成交量变化率\n", + " df['volume_change_rate'] = (\n", + " grouped['vol'].rolling(window=2).mean() /\n", + " grouped['vol'].rolling(window=10).mean() - 1\n", + " ).reset_index(level=0, drop=True) # 确保索引对齐\n", + "\n", + " # 因子 2:成交量突破信号\n", + " max_volume = grouped['vol'].rolling(window=5).max().reset_index(level=0, drop=True) # 确保索引对齐\n", + " df['cat_volume_breakout'] = (df['vol'] > max_volume)\n", + "\n", + " # 因子 3:换手率均线偏离度\n", + " mean_turnover = grouped['turnover_rate'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + " std_turnover = grouped['turnover_rate'].rolling(window=3).std().reset_index(level=0, drop=True)\n", + " df['turnover_deviation'] = (df['turnover_rate'] - mean_turnover) / std_turnover\n", + "\n", + " # 因子 4:换手率激增信号\n", + " df['cat_turnover_spike'] = (df['turnover_rate'] > mean_turnover + 2 * std_turnover)\n", + "\n", + " # 因子 5:量比均值\n", + " df['avg_volume_ratio'] = grouped['volume_ratio'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + "\n", + " # 因子 6:量比突破信号\n", + " max_volume_ratio = grouped['volume_ratio'].rolling(window=5).max().reset_index(level=0, drop=True)\n", + " df['cat_volume_ratio_breakout'] = (df['volume_ratio'] > max_volume_ratio)\n", + "\n", + " df['vol_spike'] = grouped.apply(\n", + " lambda x: pd.Series(x['vol'].rolling(20).mean(), index=x.index)\n", + " )\n", + " df['vol_std_5'] = df['vol'].pct_change().rolling(5).std()\n", + "\n", + " # 计算 ATR\n", + " df['atr_14'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14),\n", + " index=x.index)\n", + " )\n", + " df['atr_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6),\n", + " index=x.index)\n", + " )\n", + "\n", + " # 计算 OBV 及其均线\n", + " df['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " df['maobv_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n", + " )\n", + "\n", + " df['rsi_3'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n", + " )\n", + " df['rsi_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['rsi_9'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n", + " )\n", + "\n", + " # 计算 return_10 和 return_20\n", + " df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n", + " df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n", + "\n", + " # 计算标准差指标\n", + " df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n", + " df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n", + " df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n", + " df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n", + " df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n", + "\n", + " # 计算 EMA 指标\n", + " df['_ema_5'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n", + " )\n", + " df['_ema_13'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n", + " )\n", + " df['_ema_20'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n", + " )\n", + " df['_ema_60'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n", + " )\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = grouped['_ema_5'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n", + " )\n", + " df['act_factor2'] = grouped['_ema_13'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n", + " )\n", + " df['act_factor3'] = grouped['_ema_20'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n", + " )\n", + " df['act_factor4'] = grouped['_ema_60'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n", + " )\n", + "\n", + " # 根据 trade_date 截面计算排名\n", + " df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True)\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + "\n", + " def rolling_covariance(x, y, window):\n", + " return x.rolling(window).cov(y)\n", + "\n", + " def delta(series, period):\n", + " return series.diff(period)\n", + "\n", + " def rank(series):\n", + " return series.rank(pct=True)\n", + "\n", + " def stddev(series, window):\n", + " return series.rolling(window).std()\n", + "\n", + " window_high_volume = 5\n", + " window_close_stddev = 20\n", + " period_delta = 5\n", + " df['cov'] = rolling_covariance(df['high'], df['vol'], window_high_volume)\n", + " df['delta_cov'] = delta(df['cov'], period_delta)\n", + " df['_rank_stddev'] = rank(stddev(df['close'], window_close_stddev))\n", + " df['alpha_22_improved'] = -1 * df['delta_cov'] * df['_rank_stddev']\n", + "\n", + " df['alpha_003'] = np.where(df['high'] != df['low'],\n", + " (df['close'] - df['open']) / (df['high'] - df['low']),\n", + " 0)\n", + "\n", + " df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n", + " df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n", + "\n", + " df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n", + " df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n", + "\n", + " df['cat_up_limit'] = (df['close'] == df['up_limit']) # 是否涨停(1表示涨停,0表示未涨停)\n", + " df['cat_down_limit'] = (df['close'] == df['down_limit']) # 是否跌停(1表示跌停,0表示未跌停)\n", + " df['up_limit_count_10d'] = grouped['cat_up_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + " df['down_limit_count_10d'] = grouped['cat_down_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + "\n", + " # 3. 最近连续涨跌停天数\n", + " def calculate_consecutive_limits(series):\n", + " \"\"\"\n", + " 计算连续涨停/跌停天数。\n", + " \"\"\"\n", + " consecutive_up = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " consecutive_down = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " return consecutive_up, consecutive_down\n", + "\n", + " # 连续涨停天数\n", + " df['consecutive_up_limit'] = grouped['cat_up_limit'].apply(\n", + " lambda x: calculate_consecutive_limits(x)[0]\n", + " ).reset_index(level=0, drop=True)\n", + "\n", + " df['vol_break'] = np.where((df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2), 1, 0)\n", + "\n", + " df['weight_roc5'] = grouped['weight_avg'].apply(lambda x: x.pct_change(5))\n", + "\n", + " def rolling_corr(group):\n", + " roc_close = group['close'].pct_change()\n", + " roc_weight = group['weight_avg'].pct_change()\n", + " return roc_close.rolling(10).corr(roc_weight)\n", + "\n", + " df['price_cost_divergence'] = grouped.apply(rolling_corr)\n", + "\n", + " df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct'])\n", + "\n", + " # 16. 筹码稳定性指数 (20日波动率)\n", + " df['weight_std20'] = grouped['weight_avg'].apply(lambda x: x.rolling(20).std())\n", + " df['cost_stability'] = df['weight_std20'] / grouped['weight_avg'].transform(lambda x: x.rolling(20).mean())\n", + "\n", + " # 17. 成本区间突破标记\n", + " df['high_cost_break_days'] = grouped.apply(lambda g: g['close'].gt(g['cost_95pct']).rolling(5).sum())\n", + "\n", + " # 20. 筹码-流动性风险\n", + " df['liquidity_risk'] = (df['cost_95pct'] - df['cost_5pct']) * (\n", + " 1 / grouped['vol'].transform(lambda x: x.rolling(10).mean()))\n", + "\n", + " # 7. 市值波动率因子\n", + " df['turnover_std'] = grouped['turnover_rate'].rolling(window=20).std().reset_index(level=0, drop=True)\n", + " df['mv_volatility'] = grouped.apply(lambda x: x['turnover_std'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " # 8. 市值成长性因子\n", + " df['volume_growth'] = grouped['vol'].pct_change(periods=20).reset_index(level=0, drop=True)\n", + " df['mv_growth'] = grouped.apply(lambda x: x['volume_growth'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " df.drop(columns=['weight_std20'], inplace=True, errors='ignore')\n", + " new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns]\n", + "\n", + " return df, new_columns\n", + "\n", + "\n", + "def get_simple_factor(df):\n", + " old_columns = df.columns.tolist()[:]\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " alpha = 0.5\n", + " df['momentum_factor'] = df['volume_change_rate'] + alpha * df['turnover_deviation']\n", + " df['resonance_factor'] = df['volume_ratio'] * df['pct_chg']\n", + " df['log_close'] = np.log(df['close'])\n", + "\n", + " df['cat_vol_spike'] = df['vol'] > 2 * df['vol_spike']\n", + "\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n", + "\n", + " # 计算比值指标\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算标准差差值\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + "\n", + " df['cat_af1'] = df['act_factor1'] > 0\n", + " df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n", + " df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n", + " df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(\n", + " df['act_factor1'] ** 2 + df['act_factor2'] ** 2)\n", + "\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + "\n", + " df['ctrl_strength'] = (df['cost_85pct'] - df['cost_15pct']) / (df['his_high'] - df['his_low'])\n", + "\n", + " df['low_cost_dev'] = (df['close'] - df['cost_5pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['asymmetry'] = (df['cost_95pct'] - df['cost_50pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['lock_factor'] = df['turnover_rate'] * (\n", + " 1 - (df['cost_95pct'] - df['cost_5pct']) / (df['his_high'] - df['his_low']))\n", + "\n", + " df['cat_vol_break'] = (df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2)\n", + "\n", + " df['cost_atr_adj'] = (df['cost_95pct'] - df['cost_5pct']) / df['atr_14']\n", + "\n", + " # 12. 小盘股筹码集中度\n", + " df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct'])\n", + "\n", + " df['cat_golden_resonance'] = ((df['close'] > df['weight_avg']) &\n", + " (df['volume_ratio'] > 1.5) &\n", + " (df['winner_rate'] > 0.7))\n", + "\n", + " df['mv_turnover_ratio'] = df['turnover_rate'] / df['circ_mv']\n", + "\n", + " df['mv_adjusted_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " df['mv_weighted_turnover'] = df['turnover_rate'] * (1 / df['circ_mv'])\n", + "\n", + " df['nonlinear_mv_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " df['mv_volume_ratio'] = df['volume_ratio'] / df['circ_mv']\n", + "\n", + " df['mv_momentum'] = df['turnover_rate'] * df['volume_ratio'] / df['circ_mv']\n", + "\n", + " drop_columns = [col for col in df.columns if col.startswith('_')]\n", + " df.drop(columns=drop_columns, inplace=True, errors='ignore')\n", + "\n", + " new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns]\n", + " return df, new_columns\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "53f86ddc0677a6d7", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "scrolled": true + }, + "source": [ + "from utils.factor import get_act_factor\n", + "\n", + "\n", + "def read_industry_data(h5_filename):\n", + " # 读取 H5 文件中所有的行业数据\n", + " industry_data = pd.read_hdf(h5_filename, key='sw_daily', columns=[\n", + " 'ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'pe', 'pb', 'vol'\n", + " ]) # 假设 H5 文件的键是 'industry_data'\n", + " industry_data = industry_data.sort_values(by=['ts_code', 'trade_date'])\n", + " industry_data = industry_data.reindex()\n", + " industry_data['trade_date'] = pd.to_datetime(industry_data['trade_date'], format='%Y%m%d')\n", + "\n", + " grouped = industry_data.groupby('ts_code', group_keys=False)\n", + " industry_data['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " industry_data['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " industry_data['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " industry_data = get_act_factor(industry_data, cat=False)\n", + " industry_data = industry_data.sort_values(by=['trade_date', 'ts_code'])\n", + "\n", + " # # 计算每天每个 ts_code 的因子和当天所有 ts_code 的中位数的偏差\n", + " # factor_columns = ['obv', 'return_5', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4'] # 因子列\n", + " # \n", + " # for factor in factor_columns:\n", + " # if factor in industry_data.columns:\n", + " # # 计算每天每个 ts_code 的因子值与当天所有 ts_code 的中位数的偏差\n", + " # industry_data[f'{factor}_deviation'] = industry_data.groupby('trade_date')[factor].transform(\n", + " # lambda x: x - x.mean())\n", + "\n", + " industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform(\n", + " lambda x: x.rank(pct=True))\n", + " industry_data['return_20_percentile'] = industry_data.groupby('trade_date')['return_20'].transform(\n", + " lambda x: x.rank(pct=True))\n", + " industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol'])\n", + "\n", + " industry_data = industry_data.rename(\n", + " columns={col: f'industry_{col}' for col in industry_data.columns if col not in ['ts_code', 'trade_date']})\n", + "\n", + " industry_data = industry_data.rename(columns={'ts_code': 'cat_l2_code'})\n", + " return industry_data\n", + "\n", + "\n", + "industry_df = read_industry_data('../../data/sw_daily.h5')\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "dbe2fd8021b9417f", + "metadata": {}, + "source": [ + "origin_columns = df.columns.tolist()\n", + "origin_columns = [col for col in origin_columns if\n", + " col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'vol', 'pct_chg', 'l2_code', 'winner_rate']]\n", + "origin_columns = [col for col in origin_columns if col not in index_data.columns]\n", + "origin_columns = [col for col in origin_columns if 'cyq' not in col]\n", + "print(origin_columns)" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "92d84ce15a562ec6", + "metadata": {}, + "source": [ + "def filter_data(df):\n", + " # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1'))\n", + " df = df[~df['is_st']]\n", + " df = df[~df['ts_code'].str.endswith('BJ')]\n", + " df = df[~df['ts_code'].str.startswith('30')]\n", + " df = df[~df['ts_code'].str.startswith('68')]\n", + " df = df[~df['ts_code'].str.startswith('8')]\n", + " df = df[df['trade_date'] >= '20180101']\n", + " df = df.reset_index(drop=True)\n", + " return df\n", + "\n", + "\n", + "df = filter_data(df)\n", + "# df = get_technical_factor(df)\n", + "# df = get_act_factor(df)\n", + "# df = get_money_flow_factor(df)\n", + "# df = get_alpha_factor(df)\n", + "# df = get_limit_factor(df)\n", + "# df = get_cyp_perf_factor(df)\n", + "# df = get_mv_factors(df)\n", + "df, _ = get_rolling_factor(df)\n", + "df, _ = get_simple_factor(df)\n", + "# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\n", + "df = df.rename(columns={'l2_code': 'cat_l2_code'})\n", + "# df = df.merge(index_data, on='trade_date', how='left')\n", + "\n", + "print(df.info())" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "b87b938028afa206", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "source": [ + "from scipy.stats import ks_2samp, wasserstein_distance\n", + "from sklearn.metrics import roc_auc_score\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "\n", + "def remove_shifted_features(train_data, test_data, feature_columns, ks_threshold=0.1, wasserstein_threshold=0.15,\n", + " importance_threshold=0.05):\n", + " dropped_features = []\n", + "\n", + " # **统计数据漂移**\n", + " numeric_columns = train_data.select_dtypes(include=['float64', 'int64']).columns\n", + " numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + " for feature in numeric_columns:\n", + " ks_stat, p_value = ks_2samp(train_data[feature], test_data[feature])\n", + " wasserstein_dist = wasserstein_distance(train_data[feature], test_data[feature])\n", + "\n", + " if p_value < ks_threshold and wasserstein_dist > wasserstein_threshold:\n", + " dropped_features.append(feature)\n", + "\n", + " print(f\"检测到 {len(dropped_features)} 个可能漂移的特征: {dropped_features}\")\n", + "\n", + " # **应用阈值进行最终筛选**\n", + " filtered_features = [f for f in feature_columns if f not in dropped_features]\n", + "\n", + " return filtered_features, dropped_features\n", + "\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "f4f16d63ad18d1bc", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "source": [ + "def create_deviation_within_dates(df, feature_columns):\n", + " groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组\n", + " new_columns = {}\n", + " ret_feature_columns = feature_columns[:]\n", + "\n", + " # 自动选择所有数值型特征\n", + " num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col]\n", + "\n", + " # num_features = ['vol', 'pct_chg', 'turnover_rate', 'volume_ratio', 'cat_vol_spike', 'obv', 'maobv_6', 'return_5', 'return_10', 'return_20', 'std_return_5', 'std_return_15', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'alpha_022', 'alpha_003', 'alpha_007', 'alpha_013']\n", + " num_features = [col for col in num_features if 'cat' not in col and 'industry' not in col]\n", + " num_features = [col for col in num_features if 'limit' not in col]\n", + " num_features = [col for col in num_features if 'cyq' not in col]\n", + "\n", + " # 遍历所有数值型特征\n", + " for feature in num_features:\n", + " if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差\n", + " continue\n", + "\n", + " # grouped_mean = df.groupby(['trade_date'])[feature].transform('mean')\n", + " # deviation_col_name = f'deviation_mean_{feature}'\n", + " # new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " # ret_feature_columns.append(deviation_col_name)\n", + "\n", + " grouped_mean = df.groupby(['trade_date', groupby_col])[feature].transform('mean')\n", + " deviation_col_name = f'deviation_mean_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " # 将新计算的偏差特征与原始 DataFrame 合并\n", + " df = pd.concat([df, pd.DataFrame(new_columns)], axis=1)\n", + "\n", + " # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']:\n", + " # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}']\n", + "\n", + " return df, ret_feature_columns\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "40e6b68a91b30c79", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "source": [ + "import pandas as pd\n", + "\n", + "\n", + "def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99,\n", + " log=True):\n", + " if not (0 <= lower_percentile < upper_percentile <= 1):\n", + " raise ValueError(\"Percentile values must satisfy 0 <= lower_percentile < upper_percentile <= 1.\")\n", + "\n", + " # Calculate lower and upper bounds based on percentiles\n", + " lower_bound = label.quantile(lower_percentile)\n", + " upper_bound = label.quantile(upper_percentile)\n", + "\n", + " # Filter out values outside the bounds\n", + " filtered_label = label[(label >= lower_bound) & (label <= upper_bound)]\n", + "\n", + " # Print the number of removed outliers\n", + " if log:\n", + " print(f\"Removed {len(label) - len(filtered_label)} outliers.\")\n", + " return filtered_label\n", + "\n", + "\n", + "def calculate_risk_adjusted_target(df, days=5):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n", + " df['future_open'] = df.groupby('ts_code')['open'].shift(-1)\n", + " df['future_return'] = (df['future_close'] - df['future_open']) / df['future_open']\n", + "\n", + " df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(\n", + " level=0, drop=True)\n", + " sharpe_ratio = df['future_return'] * df['future_volatility']\n", + " sharpe_ratio.replace([np.inf, -np.inf], np.nan, inplace=True)\n", + "\n", + " return sharpe_ratio\n", + "\n", + "\n", + "def calculate_score(df, days=5, lambda_param=1.0):\n", + " def calculate_max_drawdown(prices):\n", + " peak = prices.iloc[0] # 初始化峰值\n", + " max_drawdown = 0 # 初始化最大回撤\n", + "\n", + " for price in prices:\n", + " if price > peak:\n", + " peak = price # 更新峰值\n", + " else:\n", + " drawdown = (peak - price) / peak # 计算当前回撤\n", + " max_drawdown = max(max_drawdown, drawdown) # 更新最大回撤\n", + "\n", + " return max_drawdown\n", + "\n", + " def compute_stock_score(stock_df):\n", + " stock_df = stock_df.sort_values(by=['trade_date'])\n", + " future_return = stock_df['future_return']\n", + " volatility = stock_df['close'].pct_change().rolling(days).std().shift(-days)\n", + " max_drawdown = stock_df['close'].rolling(days).apply(calculate_max_drawdown, raw=False).shift(-days)\n", + " score = future_return - lambda_param * max_drawdown\n", + "\n", + " return score\n", + "\n", + " scores = df.groupby('ts_code').apply(lambda x: compute_stock_score(x))\n", + " scores = scores.reset_index(level=0, drop=True)\n", + "\n", + " return scores\n", + "\n", + "\n", + "def remove_highly_correlated_features(df, feature_columns, threshold=0.9):\n", + " numeric_features = df[feature_columns].select_dtypes(include=[np.number]).columns.tolist()\n", + " if not numeric_features:\n", + " raise ValueError(\"No numeric features found in the provided data.\")\n", + "\n", + " corr_matrix = df[numeric_features].corr().abs()\n", + " upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))\n", + " to_drop = [column for column in upper.columns if any(upper[column] > threshold)]\n", + " remaining_features = [col for col in feature_columns if col not in to_drop\n", + " or 'act' in col or 'af' in col]\n", + " return remaining_features\n", + "\n", + "\n", + "import pandas as pd\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "\n", + "def cross_sectional_standardization(df, features):\n", + " df_sorted = df.sort_values(by='trade_date') # 按时间排序\n", + " df_standardized = df_sorted.copy()\n", + "\n", + " for date in df_sorted['trade_date'].unique():\n", + " # 获取当前时间点的数据\n", + " current_data = df_standardized[df_standardized['trade_date'] == date]\n", + "\n", + " # 只对指定特征进行标准化\n", + " scaler = StandardScaler()\n", + " standardized_values = scaler.fit_transform(current_data[features])\n", + "\n", + " # 将标准化结果重新赋值回去\n", + " df_standardized.loc[df_standardized['trade_date'] == date, features] = standardized_values\n", + "\n", + " return df_standardized\n", + "\n", + "\n", + "import gc\n", + "\n", + "gc.collect()" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "47c12bb34062ae7a", + "metadata": {}, + "source": [ + "days = 2\n", + "validation_days=120\n", + "\n", + "import gc\n", + "\n", + "gc.collect()\n", + "\n", + "# df['future_return'] = df.groupby('ts_code', group_keys=False)['close'].apply(lambda x: x.shift(-days) / x - 1)\n", + "df['future_return'] = (df.groupby('ts_code')['close'].shift(-days) - df.groupby('ts_code')['open'].shift(-1)) / \\\n", + " df.groupby('ts_code')['open'].shift(-1)\n", + "df['future_volatility'] = (\n", + " df.groupby('ts_code')['future_return']\n", + " .transform(lambda x: x.rolling(days).std())\n", + ")\n", + "\n", + "df['future_score'] = (\n", + " 0.7 * df['future_return'] +\n", + " 0.15 * df['future_volatility']\n", + ")\n", + "\n", + "filter_index = df['future_return'].between(df['future_return'].quantile(0.01), df['future_return'].quantile(0.99))\n", + "\n", + "df['label'] = df.groupby('trade_date', group_keys=False)['future_volatility'].transform(\n", + " lambda x: pd.qcut(x, q=30, labels=False, duplicates='drop')\n", + ")\n", + "\n", + "df['label2'] = df.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + " lambda x: pd.qcut(x, q=30, labels=False, duplicates='drop')\n", + ")\n", + "\n", + "# df['1_score'] = df.groupby('ts_code', group_keys=False)['future_score'].shift(days)\n", + "# df['2_score'] = df.groupby('ts_code', group_keys=False)['future_score'].shift(1 + days)\n", + "# df['3_score'] = df.groupby('ts_code', group_keys=False)['future_score'].shift(3 + days - 1)\n", + "\n", + "def symmetric_log_transform(values):\n", + " return np.sign(values) * np.log1p(np.abs(values))\n", + "\n", + "\n", + "train_data = df[filter_index & (df['trade_date'] <= '2024-06-01') & (df['trade_date'] >= '2021-01-01')]\n", + "test_data = df[filter_index & (df['trade_date'] >= '2024-06-01')]\n", + "\n", + "\n", + "def select_pre_zt_stocks_dynamic(stock_df):\n", + " # 排序数据\n", + " stock_df = stock_df.sort_values(by=['trade_date', 'ts_code'])\n", + "\n", + " # avg_vol_3 = stock_df.groupby('ts_code')['vol'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + " # avg_vol_5 = stock_df.groupby('ts_code')['vol'].rolling(window=5).mean().shift(3).reset_index(level=0, drop=True)\n", + "\n", + " # stock_df = stock_df[\n", + " # (stock_df['cat_up_limit'] == 1) |\n", + " # (stock_df['vol'] > vol_spike_multiplier * stock_df['vol_spike'])\n", + " # ]\n", + " # cd1 = stock_df[\"close\"] > stock_df[\"close\"].shift(1)\n", + "\n", + " # cd2 = stock_df[\"close\"] > stock_df[\"close\"].rolling(window=10).mean()\n", + " #\n", + " # cd3 = (avg_vol_3 > avg_vol_5 * 2)\n", + " #\n", + " # cd4 = stock_df['gap_next_open'] < 0\n", + "\n", + " # stock_df = stock_df[(cd2 & cd4) | cd3]\n", + " stock_df = stock_df.groupby('trade_date', group_keys=False).apply(\n", + " lambda x: x.nlargest(1000, 'return_20')\n", + " )\n", + "\n", + " return stock_df\n", + "\n", + "\n", + "train_data = select_pre_zt_stocks_dynamic(train_data)\n", + "test_data = select_pre_zt_stocks_dynamic(test_data)\n", + "\n", + "# train_data, _ = get_simple_factor(train_data)\n", + "# test_data, _ = get_simple_factor(test_data)\n", + "\n", + "\n", + "# train_data['label'] = train_data.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + "# lambda x: pd.qcut(x, q=50, labels=False, duplicates='drop')\n", + "# )\n", + "# test_data['label'] = test_data.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + "# lambda x: pd.qcut(x, q=50, labels=False, duplicates='drop')\n", + "# )\n", + "\n", + "industry_df = industry_df.sort_values(by=['trade_date'])\n", + "index_data = index_data.sort_values(by=['trade_date'])\n", + "\n", + "train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "train_data = train_data.merge(index_data, on='trade_date', how='left')\n", + "test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "test_data = test_data.merge(index_data, on='trade_date', how='left')\n", + "\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n", + "\n", + "# feature_columns_new = feature_columns[:]\n", + "# train_data, _ = create_deviation_within_dates(train_data, feature_columns)\n", + "# test_data, _ = create_deviation_within_dates(test_data, feature_columns)\n", + "\n", + "feature_columns = [col for col in train_data.columns if col in train_data.columns]\n", + "feature_columns = [col for col in feature_columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'label' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if 'gen' not in col]\n", + "feature_columns = [col for col in feature_columns if 'cat_l2_code' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "feature_columns = [col for col in feature_columns if not col.startswith('_')]\n", + "print(f'feature_columns size: {len(feature_columns)}')\n", + "\n", + "feature_columns, _ = remove_shifted_features(train_data[train_data['label'] == train_data['label'].max()],\n", + " test_data[test_data['label'] == test_data['label'].max()],\n", + " feature_columns)\n", + "\n", + "feature_columns = remove_highly_correlated_features(train_data[train_data['label'] == train_data['label'].max()],\n", + " feature_columns)\n", + "keep_columns = [col for col in train_data.columns if\n", + " col in feature_columns or col in ['ts_code', 'trade_date', 'label', 'future_return',\n", + " 'future_score', 'future_volatility']]\n", + "# train_data = train_data[keep_columns]\n", + "print(f'feature_columns: {feature_columns}')\n", + "\n", + "train_data = train_data.dropna(subset=feature_columns)\n", + "train_data = train_data.dropna(subset=['label'])\n", + "train_data = train_data.reset_index(drop=True)\n", + "\n", + "# print(test_data.tail())\n", + "test_data = test_data.dropna(subset=feature_columns)\n", + "# test_data = test_data.dropna(subset=['label'])\n", + "test_data = test_data.reset_index(drop=True)\n", + "\n", + "print(len(train_data))\n", + "print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "print(len(test_data))\n", + "print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "\n", + "cat_columns = [col for col in feature_columns if col.startswith('cat')]\n", + "for col in cat_columns:\n", + " train_data[col] = train_data[col].astype('category')\n", + " test_data[col] = test_data[col].astype('category')\n", + "\n", + "\n", + "\n", + "# feature_columns_new.remove('cat_l2_code')" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "8f134d435f71e9e2", + "metadata": { + "jupyter": { + "source_hidden": true + } + }, + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "import lightgbm as lgb\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.decomposition import PCA\n", + "\n", + "\n", + "def train_light_model(train_data_df, params, feature_columns, callbacks, evals,\n", + " print_feature_importance=True, num_boost_round=100,\n", + " validation_days=180, use_pca=False, split_date=None,\n", + " label_column='label'): # 新增参数:validation_days\n", + " # 确保数据按时间排序\n", + " train_data_df = train_data_df.sort_values(by='trade_date')\n", + "\n", + " numeric_columns = train_data_df.select_dtypes(include=['float64', 'int64']).columns\n", + " numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + " # X_train.loc[:, numeric_columns] = scaler.fit_transform(X_train[numeric_columns])\n", + " # X_val.loc[:, numeric_columns] = scaler.transform(X_val[numeric_columns])\n", + " train_data_df = cross_sectional_standardization(train_data_df, numeric_columns)\n", + "\n", + " # 去除标签为空的样本\n", + " train_data_df = train_data_df.dropna(subset=[label_column])\n", + " print('原始训练集大小: ', len(train_data_df))\n", + "\n", + " # 按时间顺序划分训练集和验证集\n", + " if split_date is None:\n", + " all_dates = train_data_df['trade_date'].unique() # 获取所有唯一的 trade_date\n", + " split_date = all_dates[-validation_days] # 划分点为倒数第 validation_days 天\n", + " train_data_split = train_data_df[train_data_df['trade_date'] < split_date] # 训练集\n", + " val_data_split = train_data_df[train_data_df['trade_date'] >= split_date] # 验证集\n", + "\n", + " # 打印划分结果\n", + " print(f\"划分后的训练集大小: {len(train_data_split)}, 验证集大小: {len(val_data_split)}\")\n", + "\n", + " # 提取特征和标签\n", + " X_train = train_data_split[feature_columns]\n", + " y_train = train_data_split[label_column]\n", + "\n", + " X_val = val_data_split[feature_columns]\n", + " y_val = val_data_split[label_column]\n", + "\n", + " # 标准化数值特征\n", + " scaler = StandardScaler()\n", + "\n", + " # 计算每个 trade_date 内的样本数(LTR 需要 group 信息)\n", + " train_groups = train_data_split.groupby('trade_date').size().tolist()\n", + " val_groups = val_data_split.groupby('trade_date').size().tolist()\n", + "\n", + " # 处理类别特征\n", + " categorical_feature = [col for col in feature_columns if 'cat' in col]\n", + "\n", + " pca = None\n", + " if use_pca:\n", + " pca = PCA(n_components=0.95) # 或指定 n_components=固定值(如 10)\n", + " numeric_features = [col for col in feature_columns if col not in categorical_feature]\n", + " numeric_pca = pca.fit_transform(X_train[numeric_features])\n", + " X_train = pd.concat([pd.DataFrame(numeric_pca, index=X_train.index), X_train[categorical_feature]], axis=1)\n", + "\n", + " numeric_pca = pca.transform(X_val[numeric_features])\n", + " X_val = pd.concat([pd.DataFrame(numeric_pca, index=X_val.index), X_val[categorical_feature]], axis=1)\n", + "\n", + " # 计算权重(基于时间)\n", + " # trade_date = train_data_split['trade_date'] # 交易日期\n", + " # weights = (trade_date - trade_date.min()).dt.days / (trade_date.max() - trade_date.min()).days + 1\n", + " # weights = train_data_split.groupby('trade_date')['std_return_5'].transform(\n", + " # lambda x: x / x.mean()\n", + " # )\n", + " ud = sorted(train_data_split[\"trade_date\"].unique().tolist())\n", + " date_weights = {date: weight * weight for date, weight in zip(ud, np.linspace(1, 10, len(ud)))}\n", + " params['weight'] = train_data_split[\"trade_date\"].map(date_weights).tolist()\n", + "\n", + " print('feature_columns size: ', len(X_train.columns.tolist()))\n", + "\n", + " train_dataset = lgb.Dataset(\n", + " X_train, label=y_train, group=train_groups,\n", + " categorical_feature=categorical_feature\n", + " )\n", + "\n", + " # weights = val_data_split.groupby('trade_date')['std_return_5'].transform(\n", + " # lambda x: x / x.mean()\n", + " # )\n", + " val_dataset = lgb.Dataset(\n", + " X_val, label=y_val, group=val_groups,\n", + " categorical_feature=categorical_feature\n", + " )\n", + "\n", + " # 训练模型\n", + " # 显式创建 LGBMRanker 模型\n", + " model = lgb.train(\n", + " params, train_dataset, num_boost_round=num_boost_round,\n", + " valid_sets=[train_dataset, val_dataset], valid_names=['train', 'valid'],\n", + " callbacks=callbacks\n", + " )\n", + "\n", + " # 打印特征重要性(如果需要)\n", + " if print_feature_importance:\n", + " lgb.plot_metric(evals)\n", + " lgb.plot_importance(model, importance_type='split', max_num_features=20)\n", + " plt.show()\n", + "\n", + " return model, scaler, pca\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "c6eb5cd4-e714-420a-ac48-39af3e11ee81", + "metadata": {}, + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "if 'gen_volatility' in feature_columns:\n", + " feature_columns.remove('gen_volatility')\n", + "\n", + "label_gain = list(range(len(train_data['label'].unique())))\n", + "label_gain = [gain * gain for gain in label_gain]\n", + "light_params = {\n", + " 'label_gain': label_gain,\n", + " 'objective': 'lambdarank',\n", + " 'metric': 'lambdarank',\n", + " 'learning_rate': 0.03,\n", + " 'num_leaves': 1024,\n", + " 'min_data_in_leaf': 128,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " 'feature_fraction': 0.7,\n", + " 'bagging_fraction': 1,\n", + " 'bagging_freq': 5,\n", + " 'lambda_l1': 0.1,\n", + " 'lambda_l2': 0.1,\n", + " # 'boosting': 'dart',\n", + " 'verbosity': -1,\n", + " 'extra_trees': True,\n", + " 'max_position': 5,\n", + " 'ndcg_at': 1,\n", + " 'seed': 7\n", + "}\n", + "evals = {}\n", + "\n", + "gc.collect()\n", + "\n", + "use_pca = False\n", + "feature_contri = [2 if feat.startswith('act_factor') else 1 for feat in feature_columns]\n", + "light_params['feature_contri'] = feature_contri\n", + "print(f'feature_contri: {feature_contri}')\n", + "model, scaler, pca = train_light_model(train_data.copy().dropna(subset=['label']),\n", + " light_params, feature_columns,\n", + " [lgb.log_evaluation(period=100),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=1000, validation_days=validation_days,\n", + " print_feature_importance=True, use_pca=use_pca)\n", + "\n", + "print('train data size: ', len(train_data))" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "5d1522a7538db91b", + "metadata": {}, + "source": [ + "days = 2\n", + "\n", + "import gc\n", + "\n", + "gc.collect()\n", + "\n", + "if 'gen_volatility' in feature_columns:\n", + " feature_columns.remove('gen_volatility')\n", + "\n", + "train_data = train_data.sort_values(['trade_date', 'ts_code'])\n", + "\n", + "score_df = train_data\n", + "numeric_columns = score_df.select_dtypes(include=['float64', 'int64']).columns\n", + "numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + "score_df = cross_sectional_standardization(score_df, numeric_columns)\n", + "score_df['score'] = model.predict(score_df[feature_columns])\n", + "\n", + "train_data['gen_volatility'] = score_df['score']\n", + "# train_data['gen_volatility'] = train_data.groupby('trade_date')['gen_volatility'].rank(pct=True)\n", + "train_data['cat_gen_volatility'] = train_data.groupby('trade_date', group_keys=False)['gen_volatility'].transform(\n", + " lambda x: pd.qcut(x, q=3, labels=False, duplicates='drop')\n", + ")\n", + "\n", + "score_df = test_data\n", + "numeric_columns = score_df.select_dtypes(include=['float64', 'int64']).columns\n", + "numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + "score_df = cross_sectional_standardization(score_df, numeric_columns)\n", + "score_df['score'] = model.predict(score_df[feature_columns])\n", + "\n", + "test_data['gen_volatility'] = score_df['score']\n", + "# test_data['gen_volatility'] = test_data.groupby('trade_date')['gen_volatility'].rank(pct=True)\n", + "test_data['cat_gen_volatility'] = test_data.groupby('trade_date', group_keys=False)['gen_volatility'].transform(\n", + " lambda x: pd.qcut(x, q=3, labels=False, duplicates='drop')\n", + ")\n", + "\n", + "# test_data['future_score'] = (\n", + "# 0.7 * test_data['future_return'] +\n", + "# 0.3 * test_data['future_volatility']\n", + "# )\n", + "\n", + "if 'gen_volatility' not in feature_columns:\n", + " feature_columns.append('gen_volatility')\n", + "\n", + "print(feature_columns)" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "612d1bdc10933f64", + "metadata": {}, + "source": [ + "# print(test_data[['gen_volatility', 'future_volatility_r']].head(15))\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "d86af99d15cb3bdd", + "metadata": {}, + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "label_gain = list(range(len(train_data['label'].unique())))\n", + "light_params['label_gain'] = [gain * gain for gain in label_gain]\n", + "# light_params['max_depth'] = 32\n", + "# light_params = {\n", + "# 'label_gain': label_gain,\n", + "# 'objective': 'lambdarank',\n", + "# 'metric': 'lambdarank',\n", + "# 'learning_rate': 0.1,\n", + "# 'num_leaves': 1024,\n", + "# 'min_data_in_leaf': 128,\n", + "# 'max_depth': 16,\n", + "# 'max_bin': 1024,\n", + "# 'feature_fraction': 0.7,\n", + "# 'bagging_fraction': 1,\n", + "# 'bagging_freq': 5,\n", + "# 'lambda_l1': 1,\n", + "# 'lambda_l2': 1,\n", + "# # 'boosting': 'dart',\n", + "# 'verbosity': -1,\n", + "# 'extra_trees': True,\n", + "# 'max_position': 5,\n", + "# 'ndcg_at': 1,\n", + "# 'seed': 7\n", + "# }\n", + "evals = {}\n", + "\n", + "gc.collect()\n", + "\n", + "use_pca = False\n", + "# feature_contri = [2 if feat.startswith('gen_volatility') else 1 for feat in feature_columns]\n", + "feature_contri = [2 if feat.startswith('act_factor') else 1 for feat in feature_columns]\n", + "light_params['feature_contri'] = feature_contri\n", + "print(f'feature_contri: {feature_contri}')\n", + "model2, scaler, pca = train_light_model(train_data.dropna(subset=['label2']),\n", + " light_params, feature_columns,\n", + " [lgb.log_evaluation(period=100),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=1000, validation_days=validation_days,\n", + " print_feature_importance=True, use_pca=use_pca,\n", + " label_column='label2')\n", + "\n", + "print('train data size: ', len(train_data))" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "ef9d068e-67f7-412c-bbd8-cdee7492dbc9", + "metadata": {}, + "source": [ + "# train_data = train_data.sort_values(by='trade_date')\n", + "# all_dates = train_data['trade_date'].unique() # 获取所有唯一的 trade_date\n", + "# split_date = all_dates[-120] # 划分点为倒数第 validation_days 天\n", + "# print(split_date)\n", + "# print(all_dates)\n", + "# val_data_split = train_data[train_data['trade_date'] >= split_date] # 验证集\n", + "\n", + "score_df = test_data\n", + "numeric_columns = score_df.select_dtypes(include=['float64', 'int64']).columns\n", + "numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + "# score_df.loc[:, numeric_columns] = scaler.transform(score_df[numeric_columns])\n", + "score_df = cross_sectional_standardization(score_df, numeric_columns)\n", + "\n", + "if use_pca and pca is not None:\n", + " categorical_feature = [col for col in feature_columns if 'cat' in col]\n", + " numeric_features = [col for col in feature_columns if col not in categorical_feature]\n", + " numeric_pca = pca.transform(score_df[numeric_features])\n", + " score_df = pd.concat([pd.DataFrame(numeric_pca), score_df[categorical_feature],\n", + " score_df[['trade_date', 'ts_code', 'future_return', 'future_score', 'label']]], axis=1)\n", + " score_df['score'] = model2.predict(score_df[[col for col in score_df.columns if\n", + " col not in ['trade_date', 'ts_code', 'future_return', 'future_score',\n", + " 'label']]])\n", + "else:\n", + " score_df['score'] = model2.predict(score_df[feature_columns])\n", + "# train_data['score'] = catboost_model.predict(train_data[feature_columns])\n", + "# 按 trade_date 分组,并对每组按 score 降序排序,取前 10\n", + "score_df = score_df.groupby('trade_date', group_keys=False).apply(\n", + " lambda x: x.nlargest(1, 'score')\n", + ")# score_df = score_df[score_df['score'] > 0]\n", + "score_df[['trade_date', 'score', 'ts_code']].to_csv('predictions_test.tsv', index=False)\n", + "print(score_df['label2'].mean())\n", + "print(score_df['future_return'].mean())" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "7ea31b06eec3cac9", + "metadata": {}, + "source": [ + "print(score_df[score_df['trade_date'] >= '2024-08-01'][['trade_date', 'ts_code', 'future_return', 'future_score', 'label', 'label2']].head(15))\n" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "code", + "id": "bcc6a60c-a134-4eb2-9125-5a608ef88e27", + "metadata": {}, + "source": [ + "test_data['future_volatility_r'] = test_data.groupby('trade_date', group_keys=False)['future_volatility'].transform(\n", + " lambda x: pd.qcut(x, q=3, labels=False, duplicates='drop')\n", + ")\n", + "td = test_data.dropna(subset=['cat_gen_volatility'])\n", + "td = td.dropna(subset=['future_volatility'])\n", + "\n", + "gen_volatility = td['gen_volatility']\n", + "future_volatility = td['future_volatility_r']\n", + "\n", + "from scipy.stats import spearmanr, kendalltau\n", + "from sklearn.metrics import mean_squared_error, ndcg_score\n", + "import numpy as np\n", + "\n", + "# (1) Spearman 相关系数\n", + "spearman_corr, _ = spearmanr(gen_volatility, future_volatility)\n", + "print(f\"Spearman Correlation: {spearman_corr}\")\n", + "\n", + "# (2) Kendall Tau 系数\n", + "kendall_corr, _ = kendalltau(gen_volatility, future_volatility)\n", + "print(f\"Kendall Tau Correlation: {kendall_corr}\")\n", + "\n", + "# (3) 均方误差 (MSE)\n", + "mse = mean_squared_error(future_volatility, gen_volatility)\n", + "print(f\"Mean Squared Error (MSE): {mse}\")\n", + "\n", + "# (4) Top-K 准确率\n", + "def top_k_accuracy(y_true, y_pred, k=5):\n", + " correct = 0\n", + " for true, pred in zip(y_true, y_pred):\n", + " if abs(true - pred) <= k:\n", + " correct += 1\n", + " return correct / len(y_true)\n", + "\n", + "top_5_acc = top_k_accuracy(future_volatility, gen_volatility, k=5)\n", + "top_10_acc = top_k_accuracy(future_volatility, gen_volatility, k=20)\n", + "# print(f\"Top-5 Accuracy: {top_5_acc}, Top-10 Accuracy: {top_10_acc}\")\n", + "\n", + "# (5) NDCG\n", + "true_scores = 50 - future_volatility\n", + "pred_scores = 50 - gen_volatility\n", + "ndcg = ndcg_score([true_scores.values], [pred_scores.values])\n", + "print(f\"NDCG Score: {ndcg}\")\n", + "\n", + "\n", + "# print(gen_volatility, future_volatility)" + ], + "outputs": [], + "execution_count": null + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/PlUpdateClassify.ipynb b/code/train/PlUpdateClassify.ipynb new file mode 100644 index 0000000..3111572 --- /dev/null +++ b/code/train/PlUpdateClassify.ipynb @@ -0,0 +1,1016 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "79a7758178bafdd3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:09:12.588477Z", + "start_time": "2025-02-21T15:09:12.513776Z" + } + }, + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "execution_count": 13 + }, + { + "cell_type": "code", + "id": "a79cafb06a7e0e43", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:09:52.492559Z", + "start_time": "2025-02-21T15:09:12.603475Z" + } + }, + "source": [ + "from utils.utils import read_and_merge_h5_data_polars\n", + "\n", + "print('daily data')\n", + "df = read_and_merge_h5_data_polars('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data_polars('../../data/daily_basic.h5', key='daily_basic',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df, join='inner')\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data_polars('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data_polars('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "daily data\n", + "daily basic\n", + "inner merge on ['ts_code', 'trade_date']\n", + "stk limit\n", + "left merge on ['ts_code', 'trade_date']\n", + "money flow\n", + "left merge on ['ts_code', 'trade_date']\n" + ] + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "id": "a4eec8c93f6a7cc3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:09:53.009911Z", + "start_time": "2025-02-21T15:09:52.621225Z" + } + }, + "source": [ + "print('industry')\n", + "df = read_and_merge_h5_data_polars('../../data/industry_data.h5', key='industry_data',\n", + " columns=['ts_code', 'l2_code'],\n", + " df=df, on=['ts_code'], join='left')\n" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "industry\n", + "left merge on ['ts_code']\n" + ] + } + ], + "execution_count": 15 + }, + { + "cell_type": "code", + "id": "4243c838-1775-4c33-8ec5-38d3fae3e55c", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:09:53.087600Z", + "start_time": "2025-02-21T15:09:53.016442Z" + } + }, + "source": [ + "import polars as pl\n", + "\n", + "def print_df_info(df: pl.DataFrame):\n", + " # 获取行列信息\n", + " shape = df.shape\n", + " print(f\"Shape: {shape[0]} rows, {shape[1]} columns\")\n", + " \n", + " # 获取内存占用大小\n", + " mem_size = df.estimated_size() # 单位是字节\n", + " print(f\"Memory usage: {mem_size / (1024 ** 2):.2f} MB\") # 转换为 MB\n", + " \n", + " # 获取列名和每列的类型\n", + " print(\"\\nColumn types:\")\n", + " for col_name, dtype in zip(df.columns, df.dtypes):\n", + " print(f\"{col_name}: {dtype}\")\n", + "\n", + "print_df_info(df)\n", + "\n" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape: 8418162 rows, 22 columns\n", + "Memory usage: 1380.84 MB\n", + "\n", + "Column types:\n", + "ts_code: String\n", + "trade_date: String\n", + "open: Float64\n", + "close: Float64\n", + "high: Float64\n", + "low: Float64\n", + "vol: Float64\n", + "turnover_rate: Float64\n", + "pe_ttm: Float64\n", + "circ_mv: Float64\n", + "volume_ratio: Float64\n", + "is_st: Boolean\n", + "up_limit: Float64\n", + "down_limit: Float64\n", + "buy_sm_vol: Int64\n", + "sell_sm_vol: Int64\n", + "buy_lg_vol: Int64\n", + "sell_lg_vol: Int64\n", + "buy_elg_vol: Int64\n", + "sell_elg_vol: Int64\n", + "net_mf_vol: Int64\n", + "l2_code: String\n" + ] + } + ], + "execution_count": 16 + }, + { + "cell_type": "code", + "id": "99776e73-f310-47c0-953e-2cf73ff13310", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:09:53.229940Z", + "start_time": "2025-02-21T15:09:53.151622Z" + } + }, + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "\n", + "def get_technical_factor(df: pl.LazyFrame) -> pl.LazyFrame:\n", + " # 按股票和日期排序\n", + " df = df.sort(['ts_code', 'trade_date'])\n", + " \n", + " # 计算 up 和 down\n", + " df = df.with_columns([\n", + " ((pl.col('high') - pl.max_horizontal(['close', 'open'])) / pl.col('close')).alias('up'),\n", + " ((pl.min_horizontal(['close', 'open']) - pl.col('low')) / pl.col('close')).alias('down')\n", + " ])\n", + " \n", + " # 定义一个函数来计算分组指标(如 ATR、OBV、RSI 等)\n", + " def calculate_talib_indicator(col_names, func, *args, **kwargs):\n", + " return (\n", + " df.group_by('ts_code', maintain_order=True)\n", + " .agg(\n", + " pl.map_batches(\n", + " col_names,\n", + " lambda cols: pl.Series(func(*[col.to_numpy() for col in cols], **kwargs))\n", + " ).alias(kwargs.get('output_col'))\n", + " )\n", + " .explode(kwargs.get('output_col'))\n", + " )\n", + "\n", + " # 计算 ATR\n", + " atr_14_df = calculate_talib_indicator(\n", + " ['high', 'low', 'close'], talib.ATR, timeperiod=14, output_col='atr_14'\n", + " )\n", + " atr_6_df = calculate_talib_indicator(\n", + " ['high', 'low', 'close'], talib.ATR, timeperiod=6, output_col='atr_6'\n", + " )\n", + "\n", + " # 合并 ATR 列\n", + " df = df.join(atr_14_df, on='ts_code', how='left').join(atr_6_df, on='ts_code', how='left')\n", + "\n", + " # 计算 OBV 及其均线\n", + " obv_df = calculate_talib_indicator(\n", + " ['close', 'vol'], talib.OBV, output_col='obv'\n", + " )\n", + " maobv_6_df = obv_df.with_columns(\n", + " pl.map_batches(\n", + " ['obv'],\n", + " lambda cols: pl.Series(talib.SMA(cols[0].to_numpy(), timeperiod=6))\n", + " ).alias('maobv_6')\n", + " )\n", + "\n", + " # 合并 OBV 和 MAOBV 列\n", + " df = df.join(obv_df, on='ts_code', how='left').join(maobv_6_df, on='ts_code', how='left')\n", + " df = df.with_columns((pl.col('obv') - pl.col('maobv_6')).alias('obv-maobv_6'))\n", + "\n", + " # 计算 RSI\n", + " rsi_3_df = calculate_talib_indicator(\n", + " ['close'], talib.RSI, timeperiod=3, output_col='rsi_3'\n", + " )\n", + " rsi_6_df = calculate_talib_indicator(\n", + " ['close'], talib.RSI, timeperiod=6, output_col='rsi_6'\n", + " )\n", + " rsi_9_df = calculate_talib_indicator(\n", + " ['close'], talib.RSI, timeperiod=9, output_col='rsi_9'\n", + " )\n", + "\n", + " # 合并 RSI 列\n", + " df = (\n", + " df.join(rsi_3_df, on='ts_code', how='left')\n", + " .join(rsi_6_df, on='ts_code', how='left')\n", + " .join(rsi_9_df, on='ts_code', how='left')\n", + " )\n", + "\n", + " # 计算 return_5, return_10, return_20\n", + " df = df.with_columns([\n", + " (pl.col('close') / pl.col('close').shift(5) - 1).over('ts_code').alias('return_5'),\n", + " (pl.col('close') / pl.col('close').shift(10) - 1).over('ts_code').alias('return_10'),\n", + " (pl.col('close') / pl.col('close').shift(20) - 1).over('ts_code').alias('return_20')\n", + " ])\n", + "\n", + " # 计算 avg_close_5\n", + " df = df.with_columns(\n", + " (pl.col('close').rolling_mean(window_size=5) / pl.col('close')).over('ts_code').alias('avg_close_5')\n", + " )\n", + "\n", + " # 计算标准差指标\n", + " df = df.with_columns([\n", + " pl.col('close').pct_change().rolling_std(window_size=5).over('ts_code').alias('std_return_5'),\n", + " pl.col('close').pct_change().rolling_std(window_size=15).over('ts_code').alias('std_return_15'),\n", + " pl.col('close').pct_change().rolling_std(window_size=25).over('ts_code').alias('std_return_25'),\n", + " pl.col('close').pct_change().rolling_std(window_size=90).over('ts_code').alias('std_return_90'),\n", + " pl.col('close').shift(10).pct_change().rolling_std(window_size=90).over('ts_code').alias('std_return_90_2')\n", + " ])\n", + "\n", + " # 计算比值指标\n", + " df = df.with_columns([\n", + " (pl.col('std_return_5') / pl.col('std_return_90')).alias('std_return_5 / std_return_90'),\n", + " (pl.col('std_return_5') / pl.col('std_return_25')).alias('std_return_5 / std_return_25')\n", + " ])\n", + "\n", + " # 计算标准差差值\n", + " df = df.with_columns(\n", + " (pl.col('std_return_90') - pl.col('std_return_90_2')).alias('std_return_90 - std_return_90_2')\n", + " )\n", + "\n", + " return df\n", + "\n", + "def get_act_factor(df: pl.LazyFrame, cat=True) -> pl.LazyFrame:\n", + " # 按股票和日期排序\n", + " df = df.sort(['ts_code', 'trade_date'])\n", + " \n", + " # 定义一个函数来计算分组 EMA\n", + " def calculate_ema(col_name, timeperiod):\n", + " return (\n", + " df.group_by('ts_code', maintain_order=True)\n", + " .agg(\n", + " pl.map_batches(\n", + " [col_name],\n", + " lambda cols: pl.Series(talib.EMA(cols[0].to_numpy(), timeperiod=timeperiod))\n", + " ).alias(f\"ema_{timeperiod}\")\n", + " )\n", + " .explode(f\"ema_{timeperiod}\")\n", + " )\n", + " \n", + " # 计算 EMA 指标\n", + " ema_columns = []\n", + " for period in [5, 13, 20, 60]:\n", + " ema_df = calculate_ema('close', period)\n", + " ema_columns.append(ema_df.select([f\"ts_code\", f\"ema_{period}\"]))\n", + " \n", + " # 将所有 EMA 列合并到原始 DataFrame 中\n", + " for ema_col in ema_columns:\n", + " df = df.join(ema_col, on='ts_code', how='left')\n", + " \n", + " # 使用 NumPy 的 arctan 和 sqrt 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df = df.with_columns([\n", + " (pl.map_batches(\n", + " ['ema_5'],\n", + " lambda cols: pl.Series(np.arctan((cols[0] / cols[0].shift(1) - 1) * 100) * 57.3 / 50)\n", + " )).alias('act_factor1'),\n", + " (pl.map_batches(\n", + " ['ema_13'],\n", + " lambda cols: pl.Series(np.arctan((cols[0] / cols[0].shift(1) - 1) * 100) * 57.3 / 40)\n", + " )).alias('act_factor2'),\n", + " (pl.map_batches(\n", + " ['ema_20'],\n", + " lambda cols: pl.Series(np.arctan((cols[0] / cols[0].shift(1) - 1) * 100) * 57.3 / 21)\n", + " )).alias('act_factor3'),\n", + " (pl.map_batches(\n", + " ['ema_60'],\n", + " lambda cols: pl.Series(np.arctan((cols[0] / cols[0].shift(1) - 1) * 100) * 57.3 / 10)\n", + " )).alias('act_factor4')\n", + " ])\n", + " \n", + " if cat:\n", + " df = df.with_columns([\n", + " (pl.col('act_factor1') > 0).alias('cat_af1'),\n", + " (pl.col('act_factor2') > pl.col('act_factor1')).alias('cat_af2'),\n", + " (pl.col('act_factor3') > pl.col('act_factor2')).alias('cat_af3'),\n", + " (pl.col('act_factor4') > pl.col('act_factor3')).alias('cat_af4')\n", + " ])\n", + " \n", + " # 计算 act_factor5 和 act_factor6\n", + " df = df.with_columns([\n", + " (pl.col('act_factor1') + pl.col('act_factor2') + pl.col('act_factor3') + pl.col('act_factor4')).alias('act_factor5'),\n", + " ((pl.col('act_factor1') - pl.col('act_factor2')) / \n", + " pl.map_batches(\n", + " ['act_factor1', 'act_factor2'],\n", + " lambda cols: pl.Series(np.sqrt(cols[0]**2 + cols[1]**2))\n", + " )).alias('act_factor6')\n", + " ])\n", + " \n", + " # 根据 trade_date 截面计算排名\n", + " df = df.with_columns([\n", + " pl.col('act_factor1').rank(method='average', descending=True).over('trade_date').alias('rank_act_factor1'),\n", + " pl.col('act_factor2').rank(method='average', descending=True).over('trade_date').alias('rank_act_factor2'),\n", + " pl.col('act_factor3').rank(method='average', descending=True).over('trade_date').alias('rank_act_factor3')\n", + " ])\n", + " \n", + " return df" + ], + "outputs": [], + "execution_count": 17 + }, + { + "cell_type": "code", + "id": "53f86ddc0677a6d7", + "metadata": { + "scrolled": true, + "ExecuteTime": { + "end_time": "2025-02-21T15:09:53.292850Z", + "start_time": "2025-02-21T15:09:53.234877Z" + } + }, + "source": [ + "origin_columns = df.columns\n", + "origin_columns = [col for col in origin_columns if col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'l2_code']]\n", + "# origin_columns = [col for col in origin_columns if col not in index_data.columns]\n" + ], + "outputs": [], + "execution_count": 18 + }, + { + "cell_type": "code", + "id": "5f3d9aece75318cd", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:09:55.552350Z", + "start_time": "2025-02-21T15:09:53.310664Z" + } + }, + "source": [ + "def filter_data(df):\n", + " # 转换为 lazy frame\n", + " df = df.lazy()\n", + "\n", + " df = df.filter(~pl.col('is_st')) # 去掉 is_st 为 True 的行\n", + " df = df.filter(~pl.col('ts_code').str.contains('BJ$')) # ts_code 以 'BJ' 结尾的行\n", + " df = df.filter(~pl.col('ts_code').str.contains('^30')) # ts_code 以 '30' 开头的行\n", + " df = df.filter(~pl.col('ts_code').str.contains('^68')) # ts_code 以 '68' 开头的行\n", + " df = df.filter(~pl.col('ts_code').str.contains('^8')) # ts_code 以 '8' 开头的行\n", + "\n", + " return df\n", + "\n", + "\n", + "\n", + "tdf = filter_data(df)\n", + "tdf = get_technical_factor(tdf)\n", + "tdf = get_act_factor(tdf)\n", + "# df = get_money_flow_factor(df)\n", + "# df = get_alpha_factor(df)\n", + "# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\n", + "# df = df.rename(columns={'l2_code': 'cat_l2_code'})\n", + "# df = df.merge(index_data, on='trade_date', how='left')\n", + "\n", + "print_df_info(tdf.collect())" + ], + "outputs": [ + { + "ename": "PanicException", + "evalue": "python function failed: ATR() got an unexpected keyword argument 'output_col'", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mPanicException\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[19], line 24\u001B[0m\n\u001B[0;32m 17\u001B[0m tdf \u001B[38;5;241m=\u001B[39m get_act_factor(tdf)\n\u001B[0;32m 18\u001B[0m \u001B[38;5;66;03m# df = get_money_flow_factor(df)\u001B[39;00m\n\u001B[0;32m 19\u001B[0m \u001B[38;5;66;03m# df = get_alpha_factor(df)\u001B[39;00m\n\u001B[0;32m 20\u001B[0m \u001B[38;5;66;03m# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\u001B[39;00m\n\u001B[0;32m 21\u001B[0m \u001B[38;5;66;03m# df = df.rename(columns={'l2_code': 'cat_l2_code'})\u001B[39;00m\n\u001B[0;32m 22\u001B[0m \u001B[38;5;66;03m# df = df.merge(index_data, on='trade_date', how='left')\u001B[39;00m\n\u001B[1;32m---> 24\u001B[0m print_df_info(\u001B[43mtdf\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mcollect\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m)\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\try_trader\\lib\\site-packages\\polars\\lazyframe\\frame.py:2053\u001B[0m, in \u001B[0;36mLazyFrame.collect\u001B[1;34m(self, type_coercion, predicate_pushdown, projection_pushdown, simplify_expression, slice_pushdown, comm_subplan_elim, comm_subexpr_elim, cluster_with_columns, collapse_joins, no_optimization, streaming, engine, background, _eager, **_kwargs)\u001B[0m\n\u001B[0;32m 2051\u001B[0m \u001B[38;5;66;03m# Only for testing purposes\u001B[39;00m\n\u001B[0;32m 2052\u001B[0m callback \u001B[38;5;241m=\u001B[39m _kwargs\u001B[38;5;241m.\u001B[39mget(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpost_opt_callback\u001B[39m\u001B[38;5;124m\"\u001B[39m, callback)\n\u001B[1;32m-> 2053\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m wrap_df(\u001B[43mldf\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mcollect\u001B[49m\u001B[43m(\u001B[49m\u001B[43mcallback\u001B[49m\u001B[43m)\u001B[49m)\n", + "\u001B[1;31mPanicException\u001B[0m: python function failed: ATR() got an unexpected keyword argument 'output_col'" + ] + } + ], + "execution_count": 19 + }, + { + "cell_type": "code", + "id": "f4f16d63ad18d1bc", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:09:55.555352100Z", + "start_time": "2025-02-21T15:06:05.193979Z" + } + }, + "source": [ + "feature_columns = [col for col in tdf.columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "feature_columns = [col for col in feature_columns if not col.startswith('_')]\n", + "print(feature_columns)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['turnover_rate', 'pe_ttm', 'volume_ratio', 'l2_code', 'up', 'down', 'atr_14', 'atr_6', 'rsi_3', 'rsi_6', 'rsi_9', 'return_5', 'return_10', 'return_20', 'avg_close_5', 'std_return_5', 'std_return_15', 'std_return_25', 'std_return_90', 'std_return_90_2', 'std_return_5 / std_return_90', 'std_return_5 / std_return_25', 'std_return_90 - std_return_90_2']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\liaozhaorun\\AppData\\Local\\Temp\\ipykernel_6468\\1049439272.py:1: PerformanceWarning: Determining the column names of a LazyFrame requires resolving its schema, which is a potentially expensive operation. Use `LazyFrame.collect_schema().names()` to get the column names without this warning.\n", + " feature_columns = [col for col in tdf.columns if col not in ['trade_date',\n" + ] + } + ], + "execution_count": 8 + }, + { + "cell_type": "code", + "id": "0ebdfb92-d88b-4b5c-a715-675dab876fc0", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.360476Z", + "start_time": "2025-02-21T15:06:05.298420Z" + } + }, + "source": [ + "def create_deviation_within_dates(df, feature_columns):\n", + " groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组\n", + " new_columns = {}\n", + " ret_feature_columns = feature_columns[:]\n", + "\n", + " # 自动选择所有数值型特征\n", + " num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col]\n", + "\n", + " # 遍历所有数值型特征\n", + " for feature in num_features:\n", + " if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差\n", + " continue\n", + "\n", + " grouped_median = df.groupby(['trade_date', groupby_col])[feature].transform('median')\n", + " deviation_col_name = f'deviation_median_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_median\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " grouped_mean = df.groupby(groupby_col)[feature].transform('mean')\n", + " deviation_col_name = f'deviation_mean_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " # 将新计算的偏差特征与原始 DataFrame 合并\n", + " df = pd.concat([df, pd.DataFrame(new_columns)], axis=1)\n", + "\n", + " # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']:\n", + " # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}']\n", + "\n", + " return df, ret_feature_columns\n" + ], + "outputs": [], + "execution_count": 9 + }, + { + "cell_type": "code", + "id": "fbb968383f8cf2c7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.485541Z", + "start_time": "2025-02-21T15:06:05.392972Z" + } + }, + "source": [ + "def get_qcuts(series, quantiles):\n", + " q = pd.qcut(series, q=quantiles, labels=False, duplicates='drop')\n", + " return q[-1] # 返回窗口最后一个元素的分位数标签\n", + "\n", + "\n", + "window = 5\n", + "quantiles = 20\n", + "\n", + "def calculate_risk_adjusted_target(df, days=5):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n", + " df['future_return'] = (df['future_close'] - df['close']) / df['close']\n", + "\n", + " df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(level=0, drop=True)\n", + " df['sharpe_ratio'] = df['future_return'] * df['future_volatility']\n", + " df['sharpe_ratio'].replace([np.inf, -np.inf], np.nan, inplace=True)\n", + "\n", + " return df['sharpe_ratio']\n", + "\n", + "def get_label(df):\n", + " # labels = df['future_af13'] - df['act_factor1']\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-4)\n", + " df['future_open'] = df.groupby('ts_code')['open'].shift(-1)\n", + " df['future_high'] = df.groupby('ts_code')['high'].shift(-1)\n", + " df['future_return'] = (df['future_close'] - df['close']) / df['close']\n", + " labels = df['future_return'] >= 0.03\n", + " # labels = df['future_af11']\n", + " # labels = df['ema_5'].shift(-1) - df['close']\n", + " # df['label'] = (df['future_af11'] - df['act_factor1']) / df['act_factor1']\n", + " # df['label'] = calculate_risk_adjusted_target(df, days=5)\n", + " # lower_percentile = df['label'].quantile(0.01) # 1%分位数\n", + " # upper_percentile = df['label'].quantile(0.99) # 99%分位数\n", + " # labels = df['label'].clip(lower=lower_percentile, upper=upper_percentile)\n", + " # labels = calculate_risk_adjusted_return(df, days=3, history_days=3, method='ratio')\n", + " return labels\n", + "\n", + "df['label'] = get_label(df)\n", + "# df = df.apply(lambda x: x.astype('float32') if x.dtype in ['float64', 'float32'] else x)\n", + "df = df.sort_values(by=['trade_date', 'ts_code'])\n", + "train_data = df[(df['trade_date'] <= '2023-01-01') & (df['trade_date'] >= '2016-01-01')]\n", + "test_data = df[df['trade_date'] >= '2023-01-01']\n", + "\n", + "train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "# train_data = train_data.rename(columns={'l2_code': 'cat_l2_code'})\n", + "test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "# test_data = test_data.rename(columns={'l2_code': 'cat_l2_code'})\n", + "\n", + "train_data = train_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "test_data = test_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "\n", + "# train_data = get_future_data(train_data)\n", + "\n", + "# df = df[['ts_code', 'trade_date', 'open', 'close']]\n", + "\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n" + ], + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'DataFrame' object has no attribute 'groupby'", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mAttributeError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[10], line 38\u001B[0m\n\u001B[0;32m 28\u001B[0m \u001B[38;5;66;03m# labels = df['future_af11']\u001B[39;00m\n\u001B[0;32m 29\u001B[0m \u001B[38;5;66;03m# labels = df['ema_5'].shift(-1) - df['close']\u001B[39;00m\n\u001B[0;32m 30\u001B[0m \u001B[38;5;66;03m# df['label'] = (df['future_af11'] - df['act_factor1']) / df['act_factor1']\u001B[39;00m\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 34\u001B[0m \u001B[38;5;66;03m# labels = df['label'].clip(lower=lower_percentile, upper=upper_percentile)\u001B[39;00m\n\u001B[0;32m 35\u001B[0m \u001B[38;5;66;03m# labels = calculate_risk_adjusted_return(df, days=3, history_days=3, method='ratio')\u001B[39;00m\n\u001B[0;32m 36\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m labels\n\u001B[1;32m---> 38\u001B[0m df[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mlabel\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m \u001B[43mget_label\u001B[49m\u001B[43m(\u001B[49m\u001B[43mdf\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 39\u001B[0m \u001B[38;5;66;03m# df = df.apply(lambda x: x.astype('float32') if x.dtype in ['float64', 'float32'] else x)\u001B[39;00m\n\u001B[0;32m 40\u001B[0m df \u001B[38;5;241m=\u001B[39m df\u001B[38;5;241m.\u001B[39msort_values(by\u001B[38;5;241m=\u001B[39m[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mtrade_date\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mts_code\u001B[39m\u001B[38;5;124m'\u001B[39m])\n", + "Cell \u001B[1;32mIn[10], line 23\u001B[0m, in \u001B[0;36mget_label\u001B[1;34m(df)\u001B[0m\n\u001B[0;32m 21\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mget_label\u001B[39m(df):\n\u001B[0;32m 22\u001B[0m \u001B[38;5;66;03m# labels = df['future_af13'] - df['act_factor1']\u001B[39;00m\n\u001B[1;32m---> 23\u001B[0m df[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mfuture_close\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m \u001B[43mdf\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mgroupby\u001B[49m(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mts_code\u001B[39m\u001B[38;5;124m'\u001B[39m)[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mclose\u001B[39m\u001B[38;5;124m'\u001B[39m]\u001B[38;5;241m.\u001B[39mshift(\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m4\u001B[39m)\n\u001B[0;32m 24\u001B[0m df[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mfuture_open\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m df\u001B[38;5;241m.\u001B[39mgroupby(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mts_code\u001B[39m\u001B[38;5;124m'\u001B[39m)[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mopen\u001B[39m\u001B[38;5;124m'\u001B[39m]\u001B[38;5;241m.\u001B[39mshift(\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m)\n\u001B[0;32m 25\u001B[0m df[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mfuture_high\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m df\u001B[38;5;241m.\u001B[39mgroupby(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mts_code\u001B[39m\u001B[38;5;124m'\u001B[39m)[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mhigh\u001B[39m\u001B[38;5;124m'\u001B[39m]\u001B[38;5;241m.\u001B[39mshift(\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m)\n", + "\u001B[1;31mAttributeError\u001B[0m: 'DataFrame' object has no attribute 'groupby'" + ] + } + ], + "execution_count": 10 + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "de8c2f6c770d2439", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.491525100Z", + "start_time": "2025-02-20T16:12:48.951414Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol',\n", + " 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio', 'is_st',\n", + " 'up_limit', 'down_limit', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol',\n", + " 'sell_lg_vol', 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol',\n", + " 'cat_l2_code', 'up', 'down', 'atr_14', 'atr_6', 'obv', 'maobv_6',\n", + " 'obv-maobv_6', 'rsi_3', 'rsi_6', 'rsi_9', 'return_5', 'return_10',\n", + " 'return_20', 'avg_close_5', 'std_return_5', 'std_return_15',\n", + " 'std_return_25', 'std_return_90', 'std_return_90_2',\n", + " 'std_return_5 / std_return_90', 'std_return_5 / std_return_25',\n", + " 'std_return_90 - std_return_90_2', 'ema_5', 'ema_13', 'ema_20',\n", + " 'ema_60', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4',\n", + " 'cat_af1', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5',\n", + " 'act_factor6', 'rank_act_factor1', 'rank_act_factor2',\n", + " 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big',\n", + " 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol',\n", + " 'buy_elg_vol_minus_sell_elg_vol', 'log(circ_mv)', 'alpha_022',\n", + " 'alpha_003', 'alpha_007', 'alpha_013', 'future_close', 'future_open',\n", + " 'future_high', 'future_return', 'label', 'industry_obv',\n", + " 'industry_return_5', 'industry_obv_deviation',\n", + " 'industry_return_5_deviation', 'industry_return_5_percentile'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "print(train_data.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "20ffa7229c9d2f86", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.492528800Z", + "start_time": "2025-02-20T16:12:49.145792Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "feature_columns size: 149\n", + "feature_columns size: 149\n", + "1164839\n", + "最小日期: 2017-03-21\n", + "最大日期: 2022-12-30\n", + "397977\n", + "最小日期: 2023-01-03\n", + "最大日期: 2025-02-12\n" + ] + } + ], + "source": [ + "feature_columns_new = feature_columns[:]\n", + "train_data, feature_columns_new = create_deviation_within_dates(train_data, feature_columns)\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "test_data, feature_columns_new = create_deviation_within_dates(test_data, feature_columns)\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "\n", + "train_data = train_data.dropna(subset=feature_columns_new)\n", + "train_data = train_data.dropna(subset=['label'])\n", + "train_data = train_data.reset_index(drop=True)\n", + "\n", + "test_data = test_data.dropna(subset=feature_columns_new)\n", + "test_data = test_data.dropna(subset=['label'])\n", + "test_data = test_data.reset_index(drop=True)\n", + "\n", + "print(len(train_data))\n", + "print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "print(len(test_data))\n", + "print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "35238cb4f45ce756", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.507525300Z", + "start_time": "2025-02-20T16:13:07.227911Z" + } + }, + "outputs": [], + "source": [ + "cat_columns = [col for col in df.columns if col.startswith('cat')]\n", + "for col in cat_columns:\n", + " train_data[col] = train_data[col].astype('category')\n", + " test_data[col] = test_data[col].astype('category')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "8f134d435f71e9e2", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.508526600Z", + "start_time": "2025-02-20T16:13:07.436171Z" + }, + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "from catboost import Pool\n", + "import lightgbm as lgb\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import optuna\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.metrics import mean_absolute_error\n", + "import os\n", + "import json\n", + "import pickle\n", + "import hashlib\n", + "\n", + "def train_light_model(train_data_df, test_data_df, params, feature_columns, callbacks, evals,\n", + " print_feature_importance=True, num_boost_round=100,\n", + " use_optuna=False):\n", + " train_data_df, test_data_df = train_data_df.dropna(subset=['label']), test_data_df.dropna(subset=['label'])\n", + " X_train = train_data_df[feature_columns]\n", + " y_train = train_data_df['label']\n", + "\n", + " X_val = test_data_df[feature_columns]\n", + " y_val = test_data_df['label']\n", + "\n", + " categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " print(f'categorical_feature: {categorical_feature}')\n", + " train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n", + " val_data = lgb.Dataset(X_val, label=y_val, categorical_feature=categorical_feature)\n", + " model = lgb.train(\n", + " params, train_data, num_boost_round=num_boost_round,\n", + " valid_sets=[train_data, val_data], valid_names=['train', 'valid'],\n", + " callbacks=callbacks\n", + " )\n", + "\n", + " if print_feature_importance:\n", + " lgb.plot_metric(evals)\n", + " # lgb.plot_tree(model, figsize=(20, 8))\n", + " lgb.plot_importance(model, importance_type='split', max_num_features=20)\n", + " plt.show()\n", + " return model\n", + "\n", + "\n", + "from catboost import CatBoostClassifier\n", + "import pandas as pd\n", + "\n", + "\n", + "def train_catboost(train_data_df, test_data_df, feature_columns, params=None, plot=False):\n", + "\n", + " train_data_df, test_data_df = train_data_df.dropna(subset=['label']), test_data_df.dropna(subset=['label'])\n", + " X_train = train_data_df[feature_columns]\n", + " y_train = train_data_df['label']\n", + "\n", + " X_val = test_data_df[feature_columns]\n", + " y_val = test_data_df['label']\n", + "\n", + " cat_features = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " print(f'cat_features: {cat_features}')\n", + " train_pool = Pool(data=X_train, label=y_train, cat_features=cat_features)\n", + " val_pool = Pool(data=X_val, label=y_val, cat_features=cat_features)\n", + "\n", + "\n", + " model = CatBoostClassifier(**params)\n", + " model.fit(train_pool,\n", + " eval_set=val_pool, plot=plot)\n", + "\n", + " return model" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "4a4542e1ed6afe7d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.509525700Z", + "start_time": "2025-02-20T16:13:09.199245Z" + } + }, + "outputs": [], + "source": [ + "light_params = {\n", + " 'objective': 'binary',\n", + " 'metric': 'average_precision',\n", + " 'learning_rate': 0.05,\n", + " 'is_unbalance': True,\n", + " 'num_leaves': 2048,\n", + " 'min_data_in_leaf': 1024,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " 'feature_fraction': 0.7,\n", + " 'bagging_fraction': 0.7,\n", + " 'bagging_freq': 5,\n", + " # 'lambda_l1': 80,\n", + " # 'lambda_l2': 65,\n", + " 'verbosity': -1,\n", + " 'num_threads' : 16\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "beeb098799ecfa6a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.520525800Z", + "start_time": "2025-02-20T16:13:09.280097Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 1164839\n", + "categorical_feature: [3, 34, 35, 36, 37]\n", + "Training until validation scores don't improve for 50 rounds\n", + "Early stopping, best iteration is:\n", + "[82]\ttrain's average_precision: 0.534659\tvalid's average_precision: 0.281957\n", + "Evaluated only: average_precision\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print('train data size: ', len(train_data))\n", + " \n", + "evals = {}\n", + "model = train_light_model(train_data, test_data, light_params, feature_columns_new,\n", + " [lgb.log_evaluation(period=500),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=1000, use_optuna=False,\n", + " print_feature_importance=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "445dff84-70b2-4fc9-a9b6-1251993324d6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.522549500Z", + "start_time": "2025-02-20T16:14:20.677936Z" + } + }, + "outputs": [], + "source": [ + "# catboost_params = {\n", + "# 'loss_function': 'CrossEntropy', # 适用于二分类\n", + "# 'eval_metric': 'AUC', # 评估指标\n", + "# 'iterations': 1000,\n", + "# 'learning_rate': 0.01,\n", + "# 'depth': , # 控制模型复杂度\n", + "# # 'l2_leaf_reg': 3, # L2 正则化\n", + "# 'verbose': 500,\n", + "# 'early_stopping_rounds': 100,\n", + "# # 'one_hot_max_size': 50,\n", + "# # 'class_weights': [0.6, 1.2]\n", + "# # 'task_type': 'GPU'\n", + "# }\n", + "\n", + "# model = train_catboost(train_data, test_data, feature_columns_new, catboost_params, plot=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "751a6df9-d90b-4053-8769-c6c3b6654406", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.523526100Z", + "start_time": "2025-02-20T16:14:20.855152Z" + } + }, + "outputs": [], + "source": [ + "from tqdm import tqdm\n", + "\n", + "\n", + "def incremental_training(test_data: pd.DataFrame, model: lgb.Booster, days: int, back_days: int, feature_columns: list, params: dict):\n", + " test_data = test_data.sort_values(by='trade_date')\n", + "\n", + " scores = []\n", + "\n", + " unique_trade_dates = sorted(test_data['trade_date'].unique())\n", + " for i in tqdm(range(0, len(unique_trade_dates), days)):\n", + " # Get the current window of trade dates\n", + " current_dates = unique_trade_dates[i:i + days]\n", + " window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + " X = window_data[feature_columns]\n", + "\n", + " window_scores = model.predict(X)\n", + " scores.extend(window_scores)\n", + "\n", + " current_dates = unique_trade_dates[max(0, i - back_days):i + days]\n", + " window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + "\n", + " # Incrementally train the model with the current window data\n", + " X_train = window_data[feature_columns]\n", + " y_train = window_data['label'] # Assuming 'score' is what you're predicting\n", + " categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " # print(f'categorical_feature: {categorical_feature}')\n", + " train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n", + "\n", + " model = lgb.train(params,\n", + " train_set=train_data,\n", + " num_boost_round=100,\n", + " init_model=model,\n", + " keep_training_booster=True)\n", + "\n", + " # Add the scores as a new 'score' column to the test_data\n", + " test_data['score'] = scores\n", + "\n", + " return test_data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "660a24f74501f98f", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.533542700Z", + "start_time": "2025-02-20T16:14:20.978664Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████| 102/102 [02:16<00:00, 1.34s/it]\n" + ] + } + ], + "source": [ + "predictions_test = incremental_training(test_data, model, 5, 0, feature_columns_new, light_params)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "36ccaa730ab46718", + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-21T15:06:05.535526300Z", + "start_time": "2025-02-20T16:17:08.116647Z" + } + }, + "outputs": [], + "source": [ + "predictions_test = predictions_test.loc[predictions_test.groupby('trade_date')['score'].idxmax()]\n", + "predictions_test[['trade_date', 'score', 'ts_code']].to_csv('predictions_test.tsv', index=False)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/RollingRank.py b/code/train/RollingRank.py new file mode 100644 index 0000000..a34f5ad --- /dev/null +++ b/code/train/RollingRank.py @@ -0,0 +1,1250 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[1]: + + +# %load_ext autoreload +# %autoreload 2 + +import pandas as pd +import warnings + +warnings.filterwarnings("ignore") + +pd.set_option('display.max_columns', None) + + +# In[2]: + + +from utils.utils import read_and_merge_h5_data + +print('daily data') +df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data', + columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol', 'pct_chg'], + df=None) + +print('daily basic') +df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic', + columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio', + 'is_st'], df=df, join='inner') + +print('stk limit') +df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit', + columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'], + df=df) +print('money flow') +df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow', + columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol', + 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'], + df=df) +print('cyq perf') +df = read_and_merge_h5_data('../../data/cyq_perf.h5', key='cyq_perf', + columns=['ts_code', 'trade_date', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct', + 'cost_50pct', + 'cost_85pct', 'cost_95pct', 'weight_avg', 'winner_rate'], + df=df) +print(df.info()) + + +# In[3]: + + +print('industry') +industry_df = read_and_merge_h5_data('../../data/industry_data.h5', key='industry_data', + columns=['ts_code', 'l2_code', 'in_date'], + df=None, on=['ts_code'], join='left') + + +def merge_with_industry_data(df, industry_df): + # 确保日期字段是 datetime 类型 + df['trade_date'] = pd.to_datetime(df['trade_date']) + industry_df['in_date'] = pd.to_datetime(industry_df['in_date']) + + # 对 industry_df 按 ts_code 和 in_date 排序 + industry_df_sorted = industry_df.sort_values(['in_date', 'ts_code']) + + # 对原始 df 按 ts_code 和 trade_date 排序 + df_sorted = df.sort_values(['trade_date', 'ts_code']) + + # 使用 merge_asof 进行向后合并 + merged = pd.merge_asof( + df_sorted, + industry_df_sorted, + by='ts_code', # 按 ts_code 分组 + left_on='trade_date', + right_on='in_date', + direction='backward' + ) + + # 获取每个 ts_code 的最早 in_date 记录 + min_in_date_per_ts = (industry_df_sorted + .groupby('ts_code') + .first() + .reset_index()[['ts_code', 'l2_code']]) + + # 填充未匹配到的记录(trade_date 早于所有 in_date 的情况) + merged['l2_code'] = merged['l2_code'].fillna( + merged['ts_code'].map(min_in_date_per_ts.set_index('ts_code')['l2_code']) + ) + + # 保留需要的列并重置索引 + result = merged.reset_index(drop=True) + return result + + +# 使用示例 +df = merge_with_industry_data(df, industry_df) +# print(mdf[mdf['ts_code'] == '600751.SH'][['ts_code', 'trade_date', 'l2_code']]) + + +# In[4]: + + +def calculate_indicators(df): + """ + 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。 + """ + df = df.sort_values('trade_date') + df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100 + # df['5_day_ma'] = df['close'].rolling(window=5).mean() + delta = df['close'].diff() + gain = delta.where(delta > 0, 0) + loss = -delta.where(delta < 0, 0) + avg_gain = gain.rolling(window=14).mean() + avg_loss = loss.rolling(window=14).mean() + rs = avg_gain / avg_loss + df['RSI'] = 100 - (100 / (1 + rs)) + + # 计算MACD + ema12 = df['close'].ewm(span=12, adjust=False).mean() + ema26 = df['close'].ewm(span=26, adjust=False).mean() + df['MACD'] = ema12 - ema26 + df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean() + df['MACD_hist'] = df['MACD'] - df['Signal_line'] + + # 4. 情绪因子1:市场上涨比例(Up Ratio) + df['up_ratio'] = df['daily_return'].apply(lambda x: 1 if x > 0 else 0) + df['up_ratio_20d'] = df['up_ratio'].rolling(window=20).mean() # 过去20天上涨比例 + + # 5. 情绪因子2:成交量变化率(Volume Change Rate) + df['volume_mean'] = df['vol'].rolling(window=20).mean() # 过去20天的平均成交量 + df['volume_change_rate'] = (df['vol'] - df['volume_mean']) / df['volume_mean'] * 100 # 成交量变化率 + + # 6. 情绪因子3:波动率(Volatility) + df['volatility'] = df['daily_return'].rolling(window=20).std() # 过去20天的日收益率标准差 + + # 7. 情绪因子4:成交额变化率(Amount Change Rate) + df['amount_mean'] = df['amount'].rolling(window=20).mean() # 过去20天的平均成交额 + df['amount_change_rate'] = (df['amount'] - df['amount_mean']) / df['amount_mean'] * 100 # 成交额变化率 + + return df + + +def generate_index_indicators(h5_filename): + df = pd.read_hdf(h5_filename, key='index_data') + df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d') + df = df.sort_values('trade_date') + + # 计算每个ts_code的相关指标 + df_indicators = [] + for ts_code in df['ts_code'].unique(): + df_index = df[df['ts_code'] == ts_code].copy() + df_index = calculate_indicators(df_index) + df_indicators.append(df_index) + + # 合并所有指数的结果 + df_all_indicators = pd.concat(df_indicators, ignore_index=True) + + # 保留trade_date列,并将同一天的数据按ts_code合并成一行 + df_final = df_all_indicators.pivot_table( + index='trade_date', + columns='ts_code', + values=['daily_return', 'RSI', 'MACD', 'Signal_line', + 'MACD_hist', 'up_ratio_20d', 'volume_change_rate', 'volatility', + 'amount_change_rate', 'amount_mean'], + aggfunc='last' + ) + + df_final.columns = [f"{col[1]}_{col[0]}" for col in df_final.columns] + df_final = df_final.reset_index() + + return df_final + + +# 使用函数 +h5_filename = '../../data/index_data.h5' +index_data = generate_index_indicators(h5_filename) +index_data = index_data.dropna() + + +# In[5]: + + +import numpy as np +import talib + + +def get_rolling_factor(df): + old_columns = df.columns.tolist()[:] + # 按股票和日期排序 + df = df.sort_values(by=['ts_code', 'trade_date']) + grouped = df.groupby('ts_code', group_keys=False) + + # df["gap_next_open"] = (df["open"].shift(-1) - df["close"]) / df["close"] + + df['return_skew'] = grouped['pct_chg'].rolling(window=5).skew().reset_index(0, drop=True) + df['return_kurtosis'] = grouped['pct_chg'].rolling(window=5).kurt().reset_index(0, drop=True) + + # 因子 1:短期成交量变化率 + df['volume_change_rate'] = ( + grouped['vol'].rolling(window=2).mean() / + grouped['vol'].rolling(window=10).mean() - 1 + ).reset_index(level=0, drop=True) # 确保索引对齐 + + # 因子 2:成交量突破信号 + max_volume = grouped['vol'].rolling(window=5).max().reset_index(level=0, drop=True) # 确保索引对齐 + df['cat_volume_breakout'] = (df['vol'] > max_volume) + + # 因子 3:换手率均线偏离度 + mean_turnover = grouped['turnover_rate'].rolling(window=3).mean().reset_index(level=0, drop=True) + std_turnover = grouped['turnover_rate'].rolling(window=3).std().reset_index(level=0, drop=True) + df['turnover_deviation'] = (df['turnover_rate'] - mean_turnover) / std_turnover + + # 因子 4:换手率激增信号 + df['cat_turnover_spike'] = (df['turnover_rate'] > mean_turnover + 2 * std_turnover) + + # 因子 5:量比均值 + df['avg_volume_ratio'] = grouped['volume_ratio'].rolling(window=3).mean().reset_index(level=0, drop=True) + + # 因子 6:量比突破信号 + max_volume_ratio = grouped['volume_ratio'].rolling(window=5).max().reset_index(level=0, drop=True) + df['cat_volume_ratio_breakout'] = (df['volume_ratio'] > max_volume_ratio) + + df['vol_spike'] = grouped.apply( + lambda x: pd.Series(x['vol'].rolling(20).mean(), index=x.index) + ) + df['vol_std_5'] = df['vol'].pct_change().rolling(5).std() + + # 计算 ATR + df['atr_14'] = grouped.apply( + lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14), + index=x.index) + ) + df['atr_6'] = grouped.apply( + lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6), + index=x.index) + ) + + # 计算 OBV 及其均线 + df['obv'] = grouped.apply( + lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index) + ) + df['maobv_6'] = grouped.apply( + lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index) + ) + + df['rsi_3'] = grouped.apply( + lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index) + ) + # df['rsi_6'] = grouped.apply( + # lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index) + # ) + # df['rsi_9'] = grouped.apply( + # lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index) + # ) + + # 计算 return_10 和 return_20 + df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1) + # df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1) + df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1) + + # df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x) + + # 计算标准差指标 + df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std()) + # df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std()) + # df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std()) + df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std()) + df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std()) + + # 计算 EMA 指标 + df['_ema_5'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index) + ) + df['_ema_13'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index) + ) + df['_ema_20'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index) + ) + df['_ema_60'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index) + ) + + # 计算 act_factor1, act_factor2, act_factor3, act_factor4 + df['act_factor1'] = grouped['_ema_5'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50 + ) + df['act_factor2'] = grouped['_ema_13'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40 + ) + df['act_factor3'] = grouped['_ema_20'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21 + ) + df['act_factor4'] = grouped['_ema_60'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10 + ) + + # 根据 trade_date 截面计算排名 + df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True) + df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True) + df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True) + + df['log(circ_mv)'] = np.log(df['circ_mv']) + + def rolling_covariance(x, y, window): + return x.rolling(window).cov(y) + + def delta(series, period): + return series.diff(period) + + def rank(series): + return series.rank(pct=True) + + def stddev(series, window): + return series.rolling(window).std() + + window_high_volume = 5 + window_close_stddev = 20 + period_delta = 5 + df['cov'] = rolling_covariance(df['high'], df['vol'], window_high_volume) + df['delta_cov'] = delta(df['cov'], period_delta) + df['_rank_stddev'] = rank(stddev(df['close'], window_close_stddev)) + df['alpha_22_improved'] = -1 * df['delta_cov'] * df['_rank_stddev'] + + df['alpha_003'] = np.where(df['high'] != df['low'], + (df['close'] - df['open']) / (df['high'] - df['low']), + 0) + + df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True) + df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True) + + df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum()) + df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True) + + df['cat_up_limit'] = (df['close'] == df['up_limit']) # 是否涨停(1表示涨停,0表示未涨停) + df['cat_down_limit'] = (df['close'] == df['down_limit']) # 是否跌停(1表示跌停,0表示未跌停) + df['up_limit_count_10d'] = grouped['cat_up_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0, + drop=True) + df['down_limit_count_10d'] = grouped['cat_down_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0, + drop=True) + + # 3. 最近连续涨跌停天数 + def calculate_consecutive_limits(series): + """ + 计算连续涨停/跌停天数。 + """ + consecutive_up = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1) + consecutive_down = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1) + return consecutive_up, consecutive_down + + # 连续涨停天数 + df['consecutive_up_limit'] = grouped['cat_up_limit'].apply( + lambda x: calculate_consecutive_limits(x)[0] + ).reset_index(level=0, drop=True) + + df['vol_break'] = np.where((df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2), 1, 0) + + df['weight_roc5'] = grouped['weight_avg'].apply(lambda x: x.pct_change(5)) + + def rolling_corr(group): + roc_close = group['close'].pct_change() + roc_weight = group['weight_avg'].pct_change() + return roc_close.rolling(10).corr(roc_weight) + + df['price_cost_divergence'] = grouped.apply(rolling_corr) + + df['smallcap_concentration'] = (1 / df['log(circ_mv)']) * (df['cost_85pct'] - df['cost_15pct']) + + # 16. 筹码稳定性指数 (20日波动率) + df['weight_std20'] = grouped['weight_avg'].apply(lambda x: x.rolling(20).std()) + df['cost_stability'] = df['weight_std20'] / grouped['weight_avg'].transform(lambda x: x.rolling(20).mean()) + + # 17. 成本区间突破标记 + df['high_cost_break_days'] = grouped.apply(lambda g: g['close'].gt(g['cost_95pct']).rolling(5).sum()) + + # 20. 筹码-流动性风险 + df['liquidity_risk'] = (df['cost_95pct'] - df['cost_5pct']) * ( + 1 / grouped['vol'].transform(lambda x: x.rolling(10).mean())) + + # 7. 市值波动率因子 + df['turnover_std'] = grouped['turnover_rate'].rolling(window=20).std().reset_index(level=0, drop=True) + df['mv_volatility'] = grouped.apply(lambda x: x['turnover_std'] / x['log(circ_mv)']).reset_index(level=0, drop=True) + + # 8. 市值成长性因子 + df['volume_growth'] = grouped['vol'].pct_change(periods=20).reset_index(level=0, drop=True) + df['mv_growth'] = grouped.apply(lambda x: x['volume_growth'] / x['log(circ_mv)']).reset_index(level=0, drop=True) + + df["ar"] = df["high"].div(df["open"]).rolling(3).sum() / df["open"].div(df["low"]).rolling(3).sum() * 100 + # 计算 BR 指标 + df["pre_close"] = df["close"].shift(1) + df["br_up"] = (df["high"] - df["pre_close"]).clip(lower=0) + df["br_down"] = (df["pre_close"] - df["low"]).clip(lower=0) + df["br"] = df["br_up"].rolling(3).sum() / df["br_down"].rolling(3).sum() * 100 + df['arbr'] = df['ar'] - df['br'] + df.drop(columns=["pre_close", "br_up", "br_down", 'ar', 'br'], inplace=True) + + df.drop(columns=['weight_std20'], inplace=True, errors='ignore') + new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns] + + return df, new_columns + + +def get_simple_factor(df): + old_columns = df.columns.tolist()[:] + df = df.sort_values(by=['ts_code', 'trade_date']) + + alpha = 0.5 + df['momentum_factor'] = df['volume_change_rate'] + alpha * df['turnover_deviation'] + df['resonance_factor'] = df['volume_ratio'] * df['pct_chg'] + df['log_close'] = np.log(df['close']) + + df['cat_vol_spike'] = df['vol'] > 2 * df['vol_spike'] + + df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close'] + df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close'] + + df['obv-maobv_6'] = df['obv'] - df['maobv_6'] + + # 计算比值指标 + df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90'] + # df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25'] + + # 计算标准差差值 + df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2'] + + # df['cat_af1'] = df['act_factor1'] > 0 + df['cat_af2'] = df['act_factor2'] > df['act_factor1'] + df['cat_af3'] = df['act_factor3'] > df['act_factor2'] + df['cat_af4'] = df['act_factor4'] > df['act_factor3'] + + # 计算 act_factor5 和 act_factor6 + df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4'] + df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt( + df['act_factor1'] ** 2 + df['act_factor2'] ** 2) + + df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol'] + df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol'] + df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol'] + + df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol'] + df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol'] + + df['log(circ_mv)'] = np.log(df['circ_mv']) + + df['ctrl_strength'] = (df['cost_85pct'] - df['cost_15pct']) / (df['his_high'] - df['his_low']) + + df['low_cost_dev'] = (df['close'] - df['cost_5pct']) / (df['cost_50pct'] - df['cost_5pct']) + + df['asymmetry'] = (df['cost_95pct'] - df['cost_50pct']) / (df['cost_50pct'] - df['cost_5pct']) + + df['lock_factor'] = df['turnover_rate'] * ( + 1 - (df['cost_95pct'] - df['cost_5pct']) / (df['his_high'] - df['his_low'])) + + df['cat_vol_break'] = (df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2) + + df['cost_atr_adj'] = (df['cost_95pct'] - df['cost_5pct']) / df['atr_14'] + + # 12. 小盘股筹码集中度 + df['smallcap_concentration'] = (1 / df['log(circ_mv)']) * (df['cost_85pct'] - df['cost_15pct']) + + df['cat_golden_resonance'] = ((df['close'] > df['weight_avg']) & + (df['volume_ratio'] > 1.5) & + (df['winner_rate'] > 0.7)) + + df['mv_turnover_ratio'] = df['turnover_rate'] / df['log(circ_mv)'] + + df['mv_adjusted_volume'] = df['vol'] / df['log(circ_mv)'] + + df['mv_weighted_turnover'] = df['turnover_rate'] * (1 / df['log(circ_mv)']) + + df['nonlinear_mv_volume'] = df['vol'] / df['log(circ_mv)'] + + df['mv_volume_ratio'] = df['volume_ratio'] / df['log(circ_mv)'] + + df['mv_momentum'] = df['turnover_rate'] * df['volume_ratio'] / df['log(circ_mv)'] + + drop_columns = [col for col in df.columns if col.startswith('_')] + df.drop(columns=drop_columns, inplace=True, errors='ignore') + + new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns] + return df, new_columns + + +# In[6]: + + +from utils.factor import get_act_factor + + +def read_industry_data(h5_filename): + # 读取 H5 文件中所有的行业数据 + industry_data = pd.read_hdf(h5_filename, key='sw_daily', columns=[ + 'ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'pe', 'pb', 'vol' + ]) # 假设 H5 文件的键是 'industry_data' + industry_data = industry_data.sort_values(by=['ts_code', 'trade_date']) + industry_data = industry_data.reindex() + industry_data['trade_date'] = pd.to_datetime(industry_data['trade_date'], format='%Y%m%d') + + grouped = industry_data.groupby('ts_code', group_keys=False) + industry_data['obv'] = grouped.apply( + lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index) + ) + industry_data['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1) + industry_data['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1) + + industry_data = get_act_factor(industry_data, cat=False) + industry_data = industry_data.sort_values(by=['trade_date', 'ts_code']) + + # # 计算每天每个 ts_code 的因子和当天所有 ts_code 的中位数的偏差 + # factor_columns = ['obv', 'return_5', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4'] # 因子列 + # + # for factor in factor_columns: + # if factor in industry_data.columns: + # # 计算每天每个 ts_code 的因子值与当天所有 ts_code 的中位数的偏差 + # industry_data[f'{factor}_deviation'] = industry_data.groupby('trade_date')[factor].transform( + # lambda x: x - x.mean()) + + industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform( + lambda x: x.rank(pct=True)) + industry_data['return_20_percentile'] = industry_data.groupby('trade_date')['return_20'].transform( + lambda x: x.rank(pct=True)) + industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol']) + + industry_data = industry_data.rename( + columns={col: f'industry_{col}' for col in industry_data.columns if col not in ['ts_code', 'trade_date']}) + + industry_data = industry_data.rename(columns={'ts_code': 'cat_l2_code'}) + return industry_data + + +industry_df = read_industry_data('../../data/sw_daily.h5') + + +# In[7]: + + +origin_columns = df.columns.tolist() +origin_columns = [col for col in origin_columns if + col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'vol', 'pct_chg', 'l2_code', 'winner_rate']] +origin_columns = [col for col in origin_columns if col not in index_data.columns] +origin_columns = [col for col in origin_columns if 'cyq' not in col] +print(origin_columns) + + +# In[8]: + + +def filter_data(df): + # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1')) + df = df[~df['is_st']] + df = df[~df['ts_code'].str.endswith('BJ')] + df = df[~df['ts_code'].str.startswith('30')] + df = df[~df['ts_code'].str.startswith('68')] + df = df[~df['ts_code'].str.startswith('8')] + df = df[df['trade_date'] >= '20180101'] + df = df.drop(columns=['in_date']) + df = df.reset_index(drop=True) + return df + + +df = filter_data(df) +# df = get_technical_factor(df) +# df = get_act_factor(df) +# df = get_money_flow_factor(df) +# df = get_alpha_factor(df) +# df = get_limit_factor(df) +# df = get_cyp_perf_factor(df) +# df = get_mv_factors(df) +df, _ = get_rolling_factor(df) +df, _ = get_simple_factor(df) +# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left') +df = df.rename(columns={'l2_code': 'cat_l2_code'}) +# df = df.merge(index_data, on='trade_date', how='left') + +print(df.info()) + + +# In[9]: + + +from scipy.stats import ks_2samp, wasserstein_distance +from sklearn.metrics import roc_auc_score +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler + + +def remove_shifted_features(train_data, test_data, feature_columns, ks_threshold=0.05, wasserstein_threshold=0.1, + importance_threshold=0.05): + dropped_features = [] + + # **统计数据漂移** + numeric_columns = train_data.select_dtypes(include=['float64', 'int64']).columns + numeric_columns = [col for col in numeric_columns if col in feature_columns] + for feature in numeric_columns: + ks_stat, p_value = ks_2samp(train_data[feature], test_data[feature]) + wasserstein_dist = wasserstein_distance(train_data[feature], test_data[feature]) + + if p_value < ks_threshold and wasserstein_dist > wasserstein_threshold: + dropped_features.append(feature) + + print(f"检测到 {len(dropped_features)} 个可能漂移的特征: {dropped_features}") + + # **应用阈值进行最终筛选** + filtered_features = [f for f in feature_columns if f not in dropped_features] + + return filtered_features, dropped_features + + + +# In[10]: + + +def create_deviation_within_dates(df, feature_columns): + groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组 + new_columns = {} + ret_feature_columns = feature_columns[:] + + # 自动选择所有数值型特征 + num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col] + + # num_features = ['vol', 'pct_chg', 'turnover_rate', 'volume_ratio', 'cat_vol_spike', 'obv', 'maobv_6', 'return_5', 'return_10', 'return_20', 'std_return_5', 'std_return_15', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'alpha_022', 'alpha_003', 'alpha_007', 'alpha_013'] + num_features = [col for col in num_features if 'cat' not in col and 'industry' not in col] + num_features = [col for col in num_features if 'limit' not in col] + num_features = [col for col in num_features if 'cyq' not in col] + + # 遍历所有数值型特征 + for feature in num_features: + if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差 + continue + + # grouped_mean = df.groupby(['trade_date'])[feature].transform('mean') + # deviation_col_name = f'deviation_mean_{feature}' + # new_columns[deviation_col_name] = df[feature] - grouped_mean + # ret_feature_columns.append(deviation_col_name) + + grouped_mean = df.groupby(['trade_date', groupby_col])[feature].transform('mean') + deviation_col_name = f'deviation_mean_{feature}' + new_columns[deviation_col_name] = df[feature] - grouped_mean + ret_feature_columns.append(deviation_col_name) + + # 将新计算的偏差特征与原始 DataFrame 合并 + df = pd.concat([df, pd.DataFrame(new_columns)], axis=1) + + # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']: + # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}'] + + return df, ret_feature_columns + + +# In[11]: + + +import pandas as pd + + +def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99, + log=True): + if not (0 <= lower_percentile < upper_percentile <= 1): + raise ValueError("Percentile values must satisfy 0 <= lower_percentile < upper_percentile <= 1.") + + # Calculate lower and upper bounds based on percentiles + lower_bound = label.quantile(lower_percentile) + upper_bound = label.quantile(upper_percentile) + + # Filter out values outside the bounds + filtered_label = label[(label >= lower_bound) & (label <= upper_bound)] + + # Print the number of removed outliers + if log: + print(f"Removed {len(label) - len(filtered_label)} outliers.") + return filtered_label + + +def calculate_risk_adjusted_target(df, days=5): + df = df.sort_values(by=['ts_code', 'trade_date']) + + df['future_close'] = df.groupby('ts_code')['close'].shift(-days) + df['future_open'] = df.groupby('ts_code')['open'].shift(-1) + df['future_return'] = (df['future_close'] - df['future_open']) / df['future_open'] + + df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index( + level=0, drop=True) + sharpe_ratio = df['future_return'] * df['future_volatility'] + sharpe_ratio.replace([np.inf, -np.inf], np.nan, inplace=True) + + return sharpe_ratio + + +def calculate_score(df, days=5, lambda_param=1.0): + def calculate_max_drawdown(prices): + peak = prices.iloc[0] # 初始化峰值 + max_drawdown = 0 # 初始化最大回撤 + + for price in prices: + if price > peak: + peak = price # 更新峰值 + else: + drawdown = (peak - price) / peak # 计算当前回撤 + max_drawdown = max(max_drawdown, drawdown) # 更新最大回撤 + + return max_drawdown + + def compute_stock_score(stock_df): + stock_df = stock_df.sort_values(by=['trade_date']) + future_return = stock_df['future_return'] + volatility = stock_df['close'].pct_change().rolling(days).std().shift(-days) + max_drawdown = stock_df['close'].rolling(days).apply(calculate_max_drawdown, raw=False).shift(-days) + score = future_return - lambda_param * max_drawdown + + return score + + scores = df.groupby('ts_code').apply(lambda x: compute_stock_score(x)) + scores = scores.reset_index(level=0, drop=True) + + return scores + + +def remove_highly_correlated_features(df, feature_columns, threshold=0.9): + numeric_features = df[feature_columns].select_dtypes(include=[np.number]).columns.tolist() + if not numeric_features: + raise ValueError("No numeric features found in the provided data.") + + # 先找出需要强制保留的特征 + always_keep = [col for col in feature_columns if 'act' in col or 'af' in col] + features_to_check = [col for col in numeric_features if col not in always_keep] + + corr_matrix = df[features_to_check].corr().abs() + upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool)) + to_drop = [column for column in upper.columns if any(upper[column] > threshold)] + + remaining_features = [col for col in feature_columns if col not in to_drop or col in always_keep] + return remaining_features + + +import pandas as pd +from sklearn.preprocessing import StandardScaler + + +def cross_sectional_standardization(df, features): + df_sorted = df.sort_values(by='trade_date') # 按时间排序 + df_standardized = df_sorted.copy() + + for date in df_sorted['trade_date'].unique(): + # 获取当前时间点的数据 + current_data = df_standardized[df_standardized['trade_date'] == date] + + # 只对指定特征进行标准化 + scaler = StandardScaler() + standardized_values = scaler.fit_transform(current_data[features]) + + # 将标准化结果重新赋值回去 + df_standardized.loc[df_standardized['trade_date'] == date, features] = standardized_values + + return df_standardized + + +import numpy as np +import pandas as pd +import statsmodels.api as sm + +from concurrent.futures import ProcessPoolExecutor + + +def neutralize_manual(df, features, industry_col, mkt_cap_col): + """ 手动实现简单回归以提升速度 """ + + for col in features: + residuals = [] + for _, group in df.groupby(industry_col): + if len(group) > 1: + x = np.log(group[mkt_cap_col]) # 市值对数 + y = group[col] # 因子值 + beta = np.cov(y, x)[0, 1] / np.var(x) # 计算斜率 + alpha = np.mean(y) - beta * np.mean(x) # 计算截距 + resid = y - (alpha + beta * x) # 计算残差 + residuals.extend(resid) + else: + residuals.extend(group[col]) # 样本不足时保留原值 + + df[col] = residuals + + return df + + +import gc + +gc.collect() + + +def mad_filter(df, features, n=3): + df = df.copy() + for col in features: + median = df[col].median() + mad = np.median(np.abs(df[col] - median)) + upper = median + n * mad + lower = median - n * mad + df[col] = np.clip(df[col], lower, upper) # 截断极值 + return df + + +def percentile_filter(df, features, lower_percentile=0.01, upper_percentile=0.99): + df = df.copy() + for col in features: + # 按日期分组计算上下百分位数 + lower_bound = df.groupby('trade_date')[col].transform( + lambda x: x.quantile(lower_percentile) + ) + upper_bound = df.groupby('trade_date')[col].transform( + lambda x: x.quantile(upper_percentile) + ) + # 截断超出范围的值 + df[col] = np.clip(df[col], lower_bound, upper_bound) + return df + + +from scipy.stats import iqr + + +def iqr_filter(df, features): + df = df.copy() + for col in features: + df[col] = df.groupby('trade_date')[col].transform( + lambda x: (x - x.median()) / iqr(x) if iqr(x) != 0 else x + ) + return df + + +def quantile_filter(df, features, lower_quantile=0.01, upper_quantile=0.99, window=60): + df = df.copy() + for col in features: + # 计算 rolling 统计量,需要按日期进行 groupby + rolling_lower = df.groupby('trade_date')[col].transform(lambda x: x.rolling(window=min(len(x), window)).quantile(lower_quantile)) + rolling_upper = df.groupby('trade_date')[col].transform(lambda x: x.rolling(window=min(len(x), window)).quantile(upper_quantile)) + + # 对数据进行裁剪 + df[col] = np.clip(df[col], rolling_lower, rolling_upper) + + return df + + +# In[12]: + + +# print(test_data.head()[['act_factor1', 'act_factor2', 'ts_code', 'trade_date']]) + + +# In[13]: + + +from sklearn.preprocessing import StandardScaler +import lightgbm as lgb +import matplotlib.pyplot as plt +from sklearn.decomposition import PCA + + +def train_light_model(train_data_df, params, feature_columns, callbacks, evals, + print_feature_importance=True, num_boost_round=100, + validation_days=180, use_pca=False, split_date=None): # 新增参数:validation_days + # 确保数据按时间排序 + train_data_df = train_data_df.sort_values(by='trade_date') + + numeric_columns = train_data_df.select_dtypes(include=['float64', 'int64']).columns + numeric_columns = [col for col in numeric_columns if col in feature_columns] + # X_train.loc[:, numeric_columns] = scaler.fit_transform(X_train[numeric_columns]) + # X_val.loc[:, numeric_columns] = scaler.transform(X_val[numeric_columns]) + # train_data_df = cross_sectional_standardization(train_data_df, numeric_columns) + + # 去除标签为空的样本 + train_data_df = train_data_df.dropna(subset=['label']) + print('原始训练集大小: ', len(train_data_df)) + + # 按时间顺序划分训练集和验证集 + if split_date is None: + all_dates = train_data_df['trade_date'].unique() # 获取所有唯一的 trade_date + split_date = all_dates[-validation_days] # 划分点为倒数第 validation_days 天 + train_data_split = train_data_df[train_data_df['trade_date'] < split_date] # 训练集 + val_data_split = train_data_df[train_data_df['trade_date'] >= split_date] # 验证集 + + # 打印划分结果 + print(f"划分后的训练集大小: {len(train_data_split)}, 验证集大小: {len(val_data_split)}") + + # 提取特征和标签 + X_train = train_data_split[feature_columns] + y_train = train_data_split['label'] + + X_val = val_data_split[feature_columns] + y_val = val_data_split['label'] + + # 标准化数值特征 + scaler = StandardScaler() + + + # 计算每个 trade_date 内的样本数(LTR 需要 group 信息) + train_groups = train_data_split.groupby('trade_date').size().tolist() + val_groups = val_data_split.groupby('trade_date').size().tolist() + + # 处理类别特征 + categorical_feature = [col for col in feature_columns if 'cat' in col] + + pca = None + if use_pca: + pca = PCA(n_components=0.95) # 或指定 n_components=固定值(如 10) + numeric_features = [col for col in feature_columns if col not in categorical_feature] + numeric_pca = pca.fit_transform(X_train[numeric_features]) + X_train = pd.concat([pd.DataFrame(numeric_pca, index=X_train.index), X_train[categorical_feature]], axis=1) + + numeric_pca = pca.transform(X_val[numeric_features]) + X_val = pd.concat([pd.DataFrame(numeric_pca, index=X_val.index), X_val[categorical_feature]], axis=1) + + # 计算权重(基于时间) + # trade_date = train_data_split['trade_date'] # 交易日期 + # weights = (trade_date - trade_date.min()).dt.days / (trade_date.max() - trade_date.min()).days + 1 + # weights = train_data_split.groupby('trade_date')['std_return_5'].transform( + # lambda x: x / x.mean() + # ) + ud = sorted(train_data_split["trade_date"].unique().tolist()) + date_weights = {date: weight * weight for date, weight in zip(ud, np.linspace(1, 10, len(ud)))} + params['weight'] = train_data_split["trade_date"].map(date_weights).tolist() + + train_dataset = lgb.Dataset( + X_train, label=y_train, group=train_groups, + categorical_feature=categorical_feature + ) + + # weights = val_data_split.groupby('trade_date')['std_return_5'].transform( + # lambda x: x / x.mean() + # ) + val_dataset = lgb.Dataset( + X_val, label=y_val, group=val_groups, + categorical_feature=categorical_feature + ) + + # 训练模型 + model = lgb.train( + params, train_dataset, num_boost_round=num_boost_round, + valid_sets=[train_dataset, val_dataset], valid_names=['train', 'valid'], + callbacks=callbacks + ) + + # 打印特征重要性(如果需要) + if print_feature_importance: + lgb.plot_metric(evals) + lgb.plot_importance(model, importance_type='split', max_num_features=20) + plt.show() + + return model, scaler, pca + + +# In[14]: + + +days = 2 +df['future_return'] = (df.groupby('ts_code')['close'].shift(-days) - df.groupby('ts_code')['open'].shift(-1)) / \ + df.groupby('ts_code')['open'].shift(-1) +df['future_volatility'] = ( + df.groupby('ts_code')['future_return'] + .transform(lambda x: x.rolling(days).std()) +) + +df['future_score'] = ( + 0.7 * df['future_return'] + + 0.3 * df['future_volatility'] +) + +filter_index = df['future_return'].between(df['future_return'].quantile(0.01), df['future_return'].quantile(0.99)) +filter_index = df['future_volatility'].between(df['future_volatility'].quantile(0.01), + df['future_volatility'].quantile(0.99)) | filter_index +df['label'] = df.groupby('trade_date', group_keys=False)['future_score'].transform( + lambda x: pd.qcut(x, q=50, labels=False, duplicates='drop') +) +# industry_df = industry_df.sort_values(by=['trade_date']) + +# df = df.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left') +df = df.sort_values(['trade_date']) + +df = df.replace([np.inf, -np.inf], np.nan) + +feature_columns = [col for col in df.columns] +feature_columns = [col for col in feature_columns if col not in ['trade_date', + 'ts_code', + 'label']] +feature_columns = [col for col in feature_columns if 'future' not in col] +feature_columns = [col for col in feature_columns if 'label' not in col] +feature_columns = [col for col in feature_columns if 'score' not in col] +feature_columns = [col for col in feature_columns if 'gen' not in col] +feature_columns = [col for col in feature_columns if 'cat_l2_code' not in col] +feature_columns = [col for col in feature_columns if col not in origin_columns] +feature_columns = [col for col in feature_columns if not col.startswith('_')] + +numeric_columns = df.select_dtypes(include=['float64', 'int64']).columns +numeric_columns = [col for col in numeric_columns if col in feature_columns] + +qdf = quantile_filter(df, numeric_columns, window=20) + + +# In[15]: + + +# print('train data size: ', len(train_data)) + +label_gain = list(range(len(df['label'].unique()))) +label_gain = [gain * gain for gain in label_gain] +light_params = { + 'label_gain': label_gain, + 'objective': 'lambdarank', + 'metric': 'lambdarank', + 'learning_rate': 0.05, + 'num_leaves': 1024, + 'min_data_in_leaf': 128, + 'max_depth': 16, + 'max_bin': 1024, + 'feature_fraction': 0.7, + 'bagging_fraction': 1, + 'bagging_freq': 5, + 'lambda_l1': 0.1, + 'lambda_l2': 0.1, + # 'boosting': 'dart', + 'verbosity': -1, + 'extra_trees': True, + 'max_position': 5, + 'ndcg_at': 1, + 'quant_train_renew_leaf': True, + 'lambdarank_truncation_level': 5, + 'lambdarank_position_bias_regularization': 1, + 'seed': 7 +} +evals = {} + +gc.collect() + + +# In[16]: + + +gc.collect() + + +def rolling_train_predict(df, train_days, test_days, industry_df, index_df, days=5, use_pca=False, validation_days=60, filter_index=None): + # 1. 按照交易日期排序 + unique_dates = df[df['trade_date'] >= '2020-01-01']['trade_date'].unique().tolist() + unique_dates = sorted(unique_dates) + n = len(unique_dates) + + # 2. 计算需要跳过的天数,使后续窗口对齐 + extra_days = (n - train_days) % test_days + start_index = extra_days # 从此索引开始滚动 + + predictions_list = [] + + + def select_pre_zt_stocks_dynamic( + stock_df, + ): + stock_df = stock_df.groupby('trade_date', group_keys=False).apply( + lambda x: x.nlargest(1000, 'return_20') + ) + return stock_df + + df = select_pre_zt_stocks_dynamic(df) + + feature_columns = [col for col in df.columns] + feature_columns = [col for col in feature_columns if col not in ['trade_date', + 'ts_code', + 'label']] + feature_columns = [col for col in feature_columns if 'future' not in col] + feature_columns = [col for col in feature_columns if 'label' not in col] + feature_columns = [col for col in feature_columns if 'score' not in col] + feature_columns = [col for col in feature_columns if 'gen' not in col] + feature_columns = [col for col in feature_columns if 'cat_l2_code' not in col] + feature_columns = [col for col in feature_columns if col not in origin_columns] + feature_columns = [col for col in feature_columns if not col.startswith('_')] + + numeric_columns = df.select_dtypes(include=['float64', 'int64']).columns + numeric_columns = [col for col in numeric_columns if col in feature_columns] + df = cross_sectional_standardization(df, numeric_columns) + + for start in range(start_index, n - train_days - test_days + 1, test_days): + gc.collect() + + train_dates = unique_dates[start: start + train_days] + test_dates = unique_dates[start + train_days: start + train_days + test_days] + + # 根据日期筛选数据 + train_data = df[filter_index & df['trade_date'].isin(train_dates)] + test_data = df[df['trade_date'].isin(test_dates)] + + train_data = train_data.sort_values('trade_date') + test_data = test_data.sort_values('trade_date') + + + industry_df = industry_df.sort_values(by=['trade_date']) + # index_df = index_df.sort_values(by=['trade_date']) + + train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left') + # # train_data = train_data.merge(index_df, on='trade_date', how='left') + test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left') + # # test_data = test_data.merge(index_df, on='trade_date', how='left') + + # train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], + # np.nan) + + feature_columns = [col for col in train_data.columns if col in train_data.columns] + feature_columns = [col for col in feature_columns if col not in ['trade_date', + 'ts_code', + 'label']] + feature_columns = [col for col in feature_columns if 'future' not in col] + feature_columns = [col for col in feature_columns if 'label' not in col] + feature_columns = [col for col in feature_columns if 'score' not in col] + feature_columns = [col for col in feature_columns if 'gen' not in col] + feature_columns = [col for col in feature_columns if 'cat_l2_code' not in col] + feature_columns = [col for col in feature_columns if col not in origin_columns] + feature_columns = [col for col in feature_columns if not col.startswith('_')] + + numeric_columns = train_data.select_dtypes(include=['float64', 'int64']).columns + numeric_columns = [col for col in numeric_columns if col in feature_columns] + # print('去极值') + train_data = quantile_filter(train_data, numeric_columns) # 去极值 + # # print('中性化') + # # train_data = neutralize_manual(train_data, numeric_columns, industry_col='cat_l2_code', mkt_cap_col='log(circ_mv)') # 中性化 + # print('去极值') + test_data = quantile_filter(test_data, numeric_columns) # 去极值 + + all_dates = train_data['trade_date'].unique() # 获取所有唯一的 trade_date + split_date = all_dates[-validation_days] # 划分点为倒数第 validation_days 天 + train_data_split = train_data[train_data['trade_date'] < split_date] # 训练集 + val_data_split = train_data[train_data['trade_date'] >= split_date] # 验证集 + + feature_columns, _ = remove_shifted_features(train_data_split[train_data_split['label'] == train_data_split['label'].max()], + val_data_split[val_data_split['label'] == val_data_split['label'].max()], + feature_columns) + + feature_columns = remove_highly_correlated_features(train_data[train_data['label'] == train_data['label'].max()], + feature_columns) + + train_data = train_data.dropna(subset=feature_columns) + train_data = train_data.dropna(subset=['label']) + train_data = train_data.reset_index(drop=True) + + # print(test_data.tail()) + test_data = test_data.dropna(subset=feature_columns) + # test_data = test_data.dropna(subset=['label']) + test_data = test_data.reset_index(drop=True) + + # print(len(train_data)) + print(f"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}") + print(f"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}") + # print(len(test_data)) + print(f"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}") + print(f"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}") + + cat_columns = [col for col in df.columns if col.startswith('cat')] + for col in cat_columns: + train_data[col] = train_data[col].astype('category') + test_data[col] = test_data[col].astype('category') + + label_gain = list(range(len(train_data['label'].unique()))) + label_gain = [(gain + 1) * (gain + 1) for gain in label_gain] + light_params['label_gain'] = label_gain + + # ud = train_data["trade_date"].unique() + # date_weights = {date: weight for date, weight in zip(ud, np.linspace(1, 2, len(unique_dates)))} + # light_params['weight'] = train_data["trade_date"].map(date_weights).tolist() + + # print(f'feature_columns: {feature_columns}') + feature_contri = [2 if feat.startswith('act_factor') else 1 for feat in feature_columns] + light_params['feature_contri'] = feature_contri + model, _, _ = train_light_model(train_data.dropna(subset=['label']), + light_params, feature_columns, + [lgb.log_evaluation(period=100), + lgb.callback.record_evaluation(evals), + lgb.early_stopping(50, first_metric_only=True) + ], evals, + num_boost_round=3000, validation_days=validation_days, + print_feature_importance=False, use_pca=False) + + score_df = test_data.copy() + numeric_columns = score_df.select_dtypes(include=['float64', 'int64']).columns + numeric_columns = [col for col in numeric_columns if col in feature_columns] + score_df = cross_sectional_standardization(score_df, numeric_columns) + score_df['score'] = model.predict(score_df[feature_columns]) + score_df = score_df.loc[score_df.groupby('trade_date')['score'].idxmax()] + score_df = score_df[['trade_date', 'score', 'ts_code']] + predictions_list.append(score_df) + + # m = 5 + # all_data = [] + # for i, trade_date in enumerate(sorted(score_df['trade_date'].unique().tolist())): + # # 提取当前日期的数据 + # current_data = score_df[score_df['trade_date'] == trade_date] + # all_data.append(current_data) + # + # numeric_columns = [col for col in feature_columns if col in current_data.select_dtypes(include=['float64', 'int64']).columns] + # current_data = cross_sectional_standardization(current_data, numeric_columns) + # current_data['score'] = model.predict(current_data[feature_columns]) + # daily_top_score = current_data.loc[[current_data['score'].idxmax()]] + # predictions_list.append(daily_top_score[['trade_date', 'score', 'ts_code']]) + # + # if i % m == 0: + # train_data_split = pd.concat(all_data) + # train_data_split = train_data_split.dropna(subset=['label']) + # + # X_train = train_data_split[feature_columns] + # y_train = train_data_split['label'] + # + # train_groups = train_data_split.groupby('trade_date').size().tolist() + # categorical_feature = [col for col in feature_columns if 'cat' in col] + # + # train_dataset = lgb.Dataset( + # X_train, label=y_train, group=train_groups, + # categorical_feature=categorical_feature + # ) + # + # model = lgb.train( + # light_params, train_dataset, num_boost_round=36, + # init_model=model + # ) + # all_data = [] + + final_predictions = pd.concat(predictions_list, ignore_index=True) + return final_predictions + + +# In[ ]: + + +gc.collect() + +print(df[df['ts_code'] == '000001.SZ'].tail(1)[['act_factor1', 'act_factor2']]) +print('finish') +# qdf = qdf[qdf['trade_date'] >= '2022-01-01'] + +final_predictions = rolling_train_predict(df[df['trade_date'] >= '2022-01-01'], 90, 5, industry_df, None, + days=days, validation_days=10, filter_index=filter_index) +final_predictions.to_csv('predictions_test.tsv', index=False) + + +# In[ ]: + + +print(df[df['ts_code'] == '000001.SZ'].tail(1)[['act_factor1', 'act_factor2']]) +print('finish') + + +# In[ ]: + + + + diff --git a/code/train/TRank.ipynb b/code/train/TRank.ipynb new file mode 100644 index 0000000..2eae67f --- /dev/null +++ b/code/train/TRank.ipynb @@ -0,0 +1,1723 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "79a7758178bafdd3", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-03-19T14:44:14.217154Z", + "start_time": "2025-03-19T14:44:13.935883Z" + } + }, + "source": [ + "# %load_ext autoreload\n", + "# %autoreload 2\n", + "\n", + "import pandas as pd\n", + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "pd.set_option('display.max_columns', None)\n" + ], + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "code", + "id": "a79cafb06a7e0e43", + "metadata": { + "scrolled": true, + "ExecuteTime": { + "end_time": "2025-03-19T14:45:19.808772Z", + "start_time": "2025-03-19T14:44:14.221159Z" + } + }, + "source": [ + "from utils.utils import read_and_merge_h5_data\n", + "\n", + "print('daily data')\n", + "df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol', 'pct_chg'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df, join='inner')\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)\n", + "print('cyq perf')\n", + "df = read_and_merge_h5_data('../../data/cyq_perf.h5', key='cyq_perf',\n", + " columns=['ts_code', 'trade_date', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct',\n", + " 'cost_50pct',\n", + " 'cost_85pct', 'cost_95pct', 'weight_avg', 'winner_rate'],\n", + " df=df)\n", + "print(df.info())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "daily data\n", + "daily basic\n", + "inner merge on ['ts_code', 'trade_date']\n", + "stk limit\n", + "left merge on ['ts_code', 'trade_date']\n", + "money flow\n", + "left merge on ['ts_code', 'trade_date']\n", + "cyq perf\n", + "left merge on ['ts_code', 'trade_date']\n", + "\n", + "RangeIndex: 8418207 entries, 0 to 8418206\n", + "Data columns (total 31 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 pct_chg float64 \n", + " 8 turnover_rate float64 \n", + " 9 pe_ttm float64 \n", + " 10 circ_mv float64 \n", + " 11 volume_ratio float64 \n", + " 12 is_st bool \n", + " 13 up_limit float64 \n", + " 14 down_limit float64 \n", + " 15 buy_sm_vol float64 \n", + " 16 sell_sm_vol float64 \n", + " 17 buy_lg_vol float64 \n", + " 18 sell_lg_vol float64 \n", + " 19 buy_elg_vol float64 \n", + " 20 sell_elg_vol float64 \n", + " 21 net_mf_vol float64 \n", + " 22 his_low float64 \n", + " 23 his_high float64 \n", + " 24 cost_5pct float64 \n", + " 25 cost_15pct float64 \n", + " 26 cost_50pct float64 \n", + " 27 cost_85pct float64 \n", + " 28 cost_95pct float64 \n", + " 29 weight_avg float64 \n", + " 30 winner_rate float64 \n", + "dtypes: bool(1), datetime64[ns](1), float64(28), object(1)\n", + "memory usage: 1.9+ GB\n", + "None\n" + ] + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "id": "cac01788dac10678", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-03-19T14:45:35.459083Z", + "start_time": "2025-03-19T14:45:20.342424Z" + } + }, + "source": [ + "print('industry')\n", + "industry_df = read_and_merge_h5_data('../../data/industry_data.h5', key='industry_data',\n", + " columns=['ts_code', 'l2_code', 'in_date'],\n", + " df=None, on=['ts_code'], join='left')\n", + "\n", + "\n", + "def merge_with_industry_data(df, industry_df):\n", + " # 确保日期字段是 datetime 类型\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'])\n", + " industry_df['in_date'] = pd.to_datetime(industry_df['in_date'])\n", + "\n", + " # 对 industry_df 按 ts_code 和 in_date 排序\n", + " industry_df_sorted = industry_df.sort_values(['in_date', 'ts_code'])\n", + "\n", + " # 对原始 df 按 ts_code 和 trade_date 排序\n", + " df_sorted = df.sort_values(['trade_date', 'ts_code'])\n", + "\n", + " # 使用 merge_asof 进行向后合并\n", + " merged = pd.merge_asof(\n", + " df_sorted,\n", + " industry_df_sorted,\n", + " by='ts_code', # 按 ts_code 分组\n", + " left_on='trade_date',\n", + " right_on='in_date',\n", + " direction='backward'\n", + " )\n", + "\n", + " # 获取每个 ts_code 的最早 in_date 记录\n", + " min_in_date_per_ts = (industry_df_sorted\n", + " .groupby('ts_code')\n", + " .first()\n", + " .reset_index()[['ts_code', 'l2_code']])\n", + "\n", + " # 填充未匹配到的记录(trade_date 早于所有 in_date 的情况)\n", + " merged['l2_code'] = merged['l2_code'].fillna(\n", + " merged['ts_code'].map(min_in_date_per_ts.set_index('ts_code')['l2_code'])\n", + " )\n", + "\n", + " # 保留需要的列并重置索引\n", + " result = merged.reset_index(drop=True)\n", + " return result\n", + "\n", + "\n", + "# 使用示例\n", + "df = merge_with_industry_data(df, industry_df)\n", + "# print(mdf[mdf['ts_code'] == '600751.SH'][['ts_code', 'trade_date', 'l2_code']])" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "industry\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "id": "c4e9e1d31da6dba6", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-03-19T14:45:35.759821Z", + "start_time": "2025-03-19T14:45:35.492414Z" + } + }, + "source": [ + "def calculate_indicators(df):\n", + " \"\"\"\n", + " 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。\n", + " \"\"\"\n", + " df = df.sort_values('trade_date')\n", + " df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100\n", + " # df['5_day_ma'] = df['close'].rolling(window=5).mean()\n", + " delta = df['close'].diff()\n", + " gain = delta.where(delta > 0, 0)\n", + " loss = -delta.where(delta < 0, 0)\n", + " avg_gain = gain.rolling(window=14).mean()\n", + " avg_loss = loss.rolling(window=14).mean()\n", + " rs = avg_gain / avg_loss\n", + " df['RSI'] = 100 - (100 / (1 + rs))\n", + "\n", + " # 计算MACD\n", + " ema12 = df['close'].ewm(span=12, adjust=False).mean()\n", + " ema26 = df['close'].ewm(span=26, adjust=False).mean()\n", + " df['MACD'] = ema12 - ema26\n", + " df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean()\n", + " df['MACD_hist'] = df['MACD'] - df['Signal_line']\n", + "\n", + " # 4. 情绪因子1:市场上涨比例(Up Ratio)\n", + " df['up_ratio'] = df['daily_return'].apply(lambda x: 1 if x > 0 else 0)\n", + " df['up_ratio_20d'] = df['up_ratio'].rolling(window=20).mean() # 过去20天上涨比例\n", + "\n", + " # 5. 情绪因子2:成交量变化率(Volume Change Rate)\n", + " df['volume_mean'] = df['vol'].rolling(window=20).mean() # 过去20天的平均成交量\n", + " df['volume_change_rate'] = (df['vol'] - df['volume_mean']) / df['volume_mean'] * 100 # 成交量变化率\n", + "\n", + " # 6. 情绪因子3:波动率(Volatility)\n", + " df['volatility'] = df['daily_return'].rolling(window=20).std() # 过去20天的日收益率标准差\n", + "\n", + " # 7. 情绪因子4:成交额变化率(Amount Change Rate)\n", + " df['amount_mean'] = df['amount'].rolling(window=20).mean() # 过去20天的平均成交额\n", + " df['amount_change_rate'] = (df['amount'] - df['amount_mean']) / df['amount_mean'] * 100 # 成交额变化率\n", + "\n", + " return df\n", + "\n", + "\n", + "def generate_index_indicators(h5_filename):\n", + " df = pd.read_hdf(h5_filename, key='index_data')\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n", + " df = df.sort_values('trade_date')\n", + "\n", + " # 计算每个ts_code的相关指标\n", + " df_indicators = []\n", + " for ts_code in df['ts_code'].unique():\n", + " df_index = df[df['ts_code'] == ts_code].copy()\n", + " df_index = calculate_indicators(df_index)\n", + " df_indicators.append(df_index)\n", + "\n", + " # 合并所有指数的结果\n", + " df_all_indicators = pd.concat(df_indicators, ignore_index=True)\n", + "\n", + " # 保留trade_date列,并将同一天的数据按ts_code合并成一行\n", + " df_final = df_all_indicators.pivot_table(\n", + " index='trade_date',\n", + " columns='ts_code',\n", + " values=['daily_return', 'RSI', 'MACD', 'Signal_line',\n", + " 'MACD_hist', 'up_ratio_20d', 'volume_change_rate', 'volatility',\n", + " 'amount_change_rate', 'amount_mean'],\n", + " aggfunc='last'\n", + " )\n", + "\n", + " df_final.columns = [f\"{col[1]}_{col[0]}\" for col in df_final.columns]\n", + " df_final = df_final.reset_index()\n", + "\n", + " return df_final\n", + "\n", + "\n", + "# 使用函数\n", + "h5_filename = '../../data/index_data.h5'\n", + "index_data = generate_index_indicators(h5_filename)\n", + "index_data = index_data.dropna()\n" + ], + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "code", + "id": "a735bc02ceb4d872", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-03-19T14:45:35.904531Z", + "start_time": "2025-03-19T14:45:35.790296Z" + } + }, + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "\n", + "def get_rolling_factor(df):\n", + " old_columns = df.columns.tolist()[:]\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " df['return_skew'] = grouped['pct_chg'].rolling(window=5).skew().reset_index(0, drop=True)\n", + " df['return_kurtosis'] = grouped['pct_chg'].rolling(window=5).kurt().reset_index(0, drop=True)\n", + "\n", + " # 因子 1:短期成交量变化率\n", + " df['volume_change_rate'] = (\n", + " grouped['vol'].rolling(window=2).mean() /\n", + " grouped['vol'].rolling(window=10).mean() - 1\n", + " ).reset_index(level=0, drop=True) # 确保索引对齐\n", + "\n", + " # 因子 2:成交量突破信号\n", + " max_volume = grouped['vol'].rolling(window=5).max().reset_index(level=0, drop=True) # 确保索引对齐\n", + " df['cat_volume_breakout'] = (df['vol'] > max_volume)\n", + "\n", + " # 因子 3:换手率均线偏离度\n", + " mean_turnover = grouped['turnover_rate'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + " std_turnover = grouped['turnover_rate'].rolling(window=3).std().reset_index(level=0, drop=True)\n", + " df['turnover_deviation'] = (df['turnover_rate'] - mean_turnover) / std_turnover\n", + "\n", + " # 因子 4:换手率激增信号\n", + " df['cat_turnover_spike'] = (df['turnover_rate'] > mean_turnover + 2 * std_turnover)\n", + "\n", + " # 因子 5:量比均值\n", + " df['avg_volume_ratio'] = grouped['volume_ratio'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + "\n", + " # 因子 6:量比突破信号\n", + " max_volume_ratio = grouped['volume_ratio'].rolling(window=5).max().reset_index(level=0, drop=True)\n", + " df['cat_volume_ratio_breakout'] = (df['volume_ratio'] > max_volume_ratio)\n", + "\n", + " df['vol_spike'] = grouped.apply(\n", + " lambda x: pd.Series(x['vol'].rolling(20).mean(), index=x.index)\n", + " )\n", + " df['vol_std_5'] = df['vol'].pct_change().rolling(5).std()\n", + "\n", + " # 计算 OBV 及其均线\n", + " df['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " df['maobv_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n", + " )\n", + "\n", + " # df['rsi_3'] = grouped.apply(\n", + " # lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n", + " # )\n", + " # df['rsi_6'] = grouped.apply(\n", + " # lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n", + " # )\n", + " # df['rsi_9'] = grouped.apply(\n", + " # lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n", + " # )\n", + "\n", + " # 计算 return_10 和 return_20\n", + " df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n", + " df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n", + "\n", + " # 计算标准差指标\n", + " df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n", + " df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n", + " df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n", + " df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n", + " df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n", + "\n", + " # 计算 EMA 指标\n", + " df['_ema_5'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n", + " )\n", + " df['_ema_13'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n", + " )\n", + " df['_ema_20'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n", + " )\n", + " df['_ema_60'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n", + " )\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = grouped['_ema_5'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n", + " )\n", + " df['act_factor2'] = grouped['_ema_13'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n", + " )\n", + " df['act_factor3'] = grouped['_ema_20'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n", + " )\n", + " df['act_factor4'] = grouped['_ema_60'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n", + " )\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + "\n", + " def rolling_covariance(x, y, window):\n", + " return x.rolling(window).cov(y)\n", + "\n", + " def delta(series, period):\n", + " return series.diff(period)\n", + "\n", + " def rank(series):\n", + " return series.rank(pct=True)\n", + "\n", + " def stddev(series, window):\n", + " return series.rolling(window).std()\n", + "\n", + " window_high_volume = 5\n", + " window_close_stddev = 20\n", + " period_delta = 5\n", + " df['cov'] = rolling_covariance(df['high'], df['vol'], window_high_volume)\n", + " df['delta_cov'] = delta(df['cov'], period_delta)\n", + " df['_rank_stddev'] = rank(stddev(df['close'], window_close_stddev))\n", + " df['alpha_22_improved'] = -1 * df['delta_cov'] * df['_rank_stddev']\n", + "\n", + " df['alpha_003'] = np.where(df['high'] != df['low'],\n", + " (df['close'] - df['open']) / (df['high'] - df['low']),\n", + " 0)\n", + "\n", + " df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n", + " df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n", + "\n", + " df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n", + " df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n", + "\n", + " df['cat_up_limit'] = (df['close'] == df['up_limit']) # 是否涨停(1表示涨停,0表示未涨停)\n", + " df['cat_down_limit'] = (df['close'] == df['down_limit']) # 是否跌停(1表示跌停,0表示未跌停)\n", + " df['up_limit_count_10d'] = grouped['cat_up_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + " df['down_limit_count_10d'] = grouped['cat_down_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + "\n", + " # 3. 最近连续涨跌停天数\n", + " def calculate_consecutive_limits(series):\n", + " \"\"\"\n", + " 计算连续涨停/跌停天数。\n", + " \"\"\"\n", + " consecutive_up = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " consecutive_down = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " return consecutive_up, consecutive_down\n", + "\n", + " # 连续涨停天数\n", + " df['consecutive_up_limit'] = grouped['cat_up_limit'].apply(\n", + " lambda x: calculate_consecutive_limits(x)[0]\n", + " ).reset_index(level=0, drop=True)\n", + "\n", + " df['vol_break'] = np.where((df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2), 1, 0)\n", + "\n", + " df['weight_roc5'] = grouped['weight_avg'].apply(lambda x: x.pct_change(5))\n", + "\n", + " def rolling_corr(group):\n", + " roc_close = group['close'].pct_change()\n", + " roc_weight = group['weight_avg'].pct_change()\n", + " return roc_close.rolling(10).corr(roc_weight)\n", + "\n", + " df['price_cost_divergence'] = grouped.apply(rolling_corr)\n", + "\n", + " df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct'])\n", + "\n", + " # 16. 筹码稳定性指数 (20日波动率)\n", + " df['weight_std20'] = grouped['weight_avg'].apply(lambda x: x.rolling(20).std())\n", + " df['cost_stability'] = df['weight_std20'] / grouped['weight_avg'].transform(lambda x: x.rolling(20).mean())\n", + "\n", + " # 17. 成本区间突破标记\n", + " df['high_cost_break_days'] = grouped.apply(lambda g: g['close'].gt(g['cost_95pct']).rolling(5).sum())\n", + "\n", + " # 20. 筹码-流动性风险\n", + " df['liquidity_risk'] = (df['cost_95pct'] - df['cost_5pct']) * (\n", + " 1 / grouped['vol'].transform(lambda x: x.rolling(10).mean()))\n", + "\n", + " # 7. 市值波动率因子\n", + " df['turnover_std'] = grouped['turnover_rate'].rolling(window=20).std().reset_index(level=0, drop=True)\n", + " df['mv_volatility'] = grouped.apply(lambda x: x['turnover_std'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " # 8. 市值成长性因子\n", + " df['volume_growth'] = grouped['vol'].pct_change(periods=20).reset_index(level=0, drop=True)\n", + " df['mv_growth'] = grouped.apply(lambda x: x['volume_growth'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " df.drop(columns=['weight_std20'], inplace=True, errors='ignore')\n", + " new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns]\n", + "\n", + " return df, new_columns\n", + "\n", + "\n", + "def get_simple_factor(df):\n", + " old_columns = df.columns.tolist()[:]\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " alpha = 0.5\n", + " df['momentum_factor'] = df['volume_change_rate'] + alpha * df['turnover_deviation']\n", + " df['resonance_factor'] = df['volume_ratio'] * df['pct_chg']\n", + " df['log_close'] = np.log(df['close'])\n", + "\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " # 计算比值指标\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算标准差差值\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + "\n", + " df['cat_af1'] = df['act_factor1'] > 0\n", + " df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n", + " df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n", + " df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(\n", + " df['act_factor1'] ** 2 + df['act_factor2'] ** 2)\n", + "\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + "\n", + " df['ctrl_strength'] = (df['cost_85pct'] - df['cost_15pct']) / (df['his_high'] - df['his_low'])\n", + "\n", + " df['low_cost_dev'] = (df['close'] - df['cost_5pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['asymmetry'] = (df['cost_95pct'] - df['cost_50pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['lock_factor'] = df['turnover_rate'] * (\n", + " 1 - (df['cost_95pct'] - df['cost_5pct']) / (df['his_high'] - df['his_low']))\n", + "\n", + " df['cat_vol_break'] = (df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2)\n", + "\n", + " df['cost_atr_adj'] = (df['cost_95pct'] - df['cost_5pct']) / df['atr_14']\n", + "\n", + " # 12. 小盘股筹码集中度\n", + " df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct'])\n", + "\n", + " df['cat_golden_resonance'] = ((df['close'] > df['weight_avg']) &\n", + " (df['volume_ratio'] > 1.5) &\n", + " (df['winner_rate'] > 0.7))\n", + "\n", + " df['mv_turnover_ratio'] = df['turnover_rate'] / df['circ_mv']\n", + "\n", + " df['mv_adjusted_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " df['mv_weighted_turnover'] = df['turnover_rate'] * (1 / df['circ_mv'])\n", + "\n", + " df['nonlinear_mv_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " df['mv_volume_ratio'] = df['volume_ratio'] / df['circ_mv']\n", + "\n", + " df['mv_momentum'] = df['turnover_rate'] * df['volume_ratio'] / df['circ_mv']\n", + "\n", + " drop_columns = [col for col in df.columns if col.startswith('_')]\n", + " df.drop(columns=drop_columns, inplace=True, errors='ignore')\n", + "\n", + " new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns]\n", + " return df, new_columns\n" + ], + "outputs": [], + "execution_count": 5 + }, + { + "cell_type": "code", + "id": "53f86ddc0677a6d7", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "scrolled": true, + "ExecuteTime": { + "end_time": "2025-03-19T14:45:43.390734Z", + "start_time": "2025-03-19T14:45:35.933466Z" + } + }, + "source": [ + "from utils.factor import get_act_factor\n", + "\n", + "\n", + "def read_industry_data(h5_filename):\n", + " # 读取 H5 文件中所有的行业数据\n", + " industry_data = pd.read_hdf(h5_filename, key='sw_daily', columns=[\n", + " 'ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'pe', 'pb', 'vol'\n", + " ]) # 假设 H5 文件的键是 'industry_data'\n", + " industry_data = industry_data.sort_values(by=['ts_code', 'trade_date'])\n", + " industry_data = industry_data.reindex()\n", + " industry_data['trade_date'] = pd.to_datetime(industry_data['trade_date'], format='%Y%m%d')\n", + "\n", + " grouped = industry_data.groupby('ts_code', group_keys=False)\n", + " industry_data['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " industry_data['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " industry_data['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " industry_data = get_act_factor(industry_data, cat=False)\n", + " industry_data = industry_data.sort_values(by=['trade_date', 'ts_code'])\n", + "\n", + " # # 计算每天每个 ts_code 的因子和当天所有 ts_code 的中位数的偏差\n", + " # factor_columns = ['obv', 'return_5', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4'] # 因子列\n", + " # \n", + " # for factor in factor_columns:\n", + " # if factor in industry_data.columns:\n", + " # # 计算每天每个 ts_code 的因子值与当天所有 ts_code 的中位数的偏差\n", + " # industry_data[f'{factor}_deviation'] = industry_data.groupby('trade_date')[factor].transform(\n", + " # lambda x: x - x.mean())\n", + "\n", + " industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform(\n", + " lambda x: x.rank(pct=True))\n", + " industry_data['return_20_percentile'] = industry_data.groupby('trade_date')['return_20'].transform(\n", + " lambda x: x.rank(pct=True))\n", + " industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol'])\n", + "\n", + " industry_data = industry_data.rename(\n", + " columns={col: f'industry_{col}' for col in industry_data.columns if col not in ['ts_code', 'trade_date']})\n", + "\n", + " industry_data = industry_data.rename(columns={'ts_code': 'cat_l2_code'})\n", + " return industry_data\n", + "\n", + "\n", + "industry_df = read_industry_data('../../data/sw_daily.h5')\n" + ], + "outputs": [], + "execution_count": 6 + }, + { + "cell_type": "code", + "id": "dbe2fd8021b9417f", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T14:45:43.435718Z", + "start_time": "2025-03-19T14:45:43.429472Z" + } + }, + "source": [ + "origin_columns = df.columns.tolist()\n", + "origin_columns = [col for col in origin_columns if\n", + " col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'vol', 'pct_chg', 'l2_code', 'winner_rate']]\n", + "origin_columns = [col for col in origin_columns if col not in index_data.columns]\n", + "origin_columns = [col for col in origin_columns if 'cyq' not in col]\n", + "print(origin_columns)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['ts_code', 'open', 'close', 'high', 'low', 'circ_mv', 'is_st', 'up_limit', 'down_limit', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol', 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct', 'cost_50pct', 'cost_85pct', 'cost_95pct', 'weight_avg', 'in_date']\n" + ] + } + ], + "execution_count": 7 + }, + { + "cell_type": "code", + "id": "85c3e3d0235ffffa", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T14:45:43.684712Z", + "start_time": "2025-03-19T14:45:43.492971Z" + } + }, + "source": [ + "print(df[df['is_st']][['ts_code', 'trade_date', 'is_st']])" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date is_st\n", + "29 000037.SZ 2017-01-03 True\n", + "72 000408.SZ 2017-01-03 True\n", + "95 000504.SZ 2017-01-03 True\n", + "96 000505.SZ 2017-01-03 True\n", + "101 000511.SZ 2017-01-03 True\n", + "... ... ... ...\n", + "8417201 603869.SH 2025-03-13 True\n", + "8417206 603879.SH 2025-03-13 True\n", + "8417253 603959.SH 2025-03-13 True\n", + "8417635 688282.SH 2025-03-13 True\n", + "8417639 688287.SH 2025-03-13 True\n", + "\n", + "[191519 rows x 3 columns]\n" + ] + } + ], + "execution_count": 8 + }, + { + "cell_type": "code", + "id": "92d84ce15a562ec6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T14:47:42.395141Z", + "start_time": "2025-03-19T14:45:43.718152Z" + } + }, + "source": [ + "def filter_data(df):\n", + " # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1'))\n", + " df = df[~df['is_st']]\n", + " df = df[~df['ts_code'].str.endswith('BJ')]\n", + " df = df[~df['ts_code'].str.startswith('30')]\n", + " df = df[~df['ts_code'].str.startswith('68')]\n", + " df = df[~df['ts_code'].str.startswith('8')]\n", + " df = df[df['trade_date'] >= '20180101']\n", + " df = df.drop(columns=[col for col in df.columns if col.startswith('_')])\n", + " df = df.reset_index(drop=True)\n", + " return df\n", + "\n", + "\n", + "df = filter_data(df)\n", + "# df = get_technical_factor(df)\n", + "# df = get_act_factor(df)\n", + "# df = get_money_flow_factor(df)\n", + "# df = get_alpha_factor(df)\n", + "# df = get_limit_factor(df)\n", + "# df = get_cyp_perf_factor(df)\n", + "# df = get_mv_factors(df)\n", + "df, _ = get_rolling_factor(df)\n", + "\n", + "# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\n", + "df = df.rename(columns={'l2_code': 'cat_l2_code'})\n", + "# df = df.merge(index_data, on='trade_date', how='left')\n", + "\n", + "print(df.info())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 5084263 entries, 0 to 5084262\n", + "Data columns (total 85 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 pct_chg float64 \n", + " 8 turnover_rate float64 \n", + " 9 pe_ttm float64 \n", + " 10 circ_mv float64 \n", + " 11 volume_ratio float64 \n", + " 12 is_st bool \n", + " 13 up_limit float64 \n", + " 14 down_limit float64 \n", + " 15 buy_sm_vol float64 \n", + " 16 sell_sm_vol float64 \n", + " 17 buy_lg_vol float64 \n", + " 18 sell_lg_vol float64 \n", + " 19 buy_elg_vol float64 \n", + " 20 sell_elg_vol float64 \n", + " 21 net_mf_vol float64 \n", + " 22 his_low float64 \n", + " 23 his_high float64 \n", + " 24 cost_5pct float64 \n", + " 25 cost_15pct float64 \n", + " 26 cost_50pct float64 \n", + " 27 cost_85pct float64 \n", + " 28 cost_95pct float64 \n", + " 29 weight_avg float64 \n", + " 30 winner_rate float64 \n", + " 31 cat_l2_code object \n", + " 32 in_date datetime64[ns]\n", + " 33 return_skew float64 \n", + " 34 return_kurtosis float64 \n", + " 35 volume_change_rate float64 \n", + " 36 cat_volume_breakout bool \n", + " 37 turnover_deviation float64 \n", + " 38 cat_turnover_spike bool \n", + " 39 avg_volume_ratio float64 \n", + " 40 cat_volume_ratio_breakout bool \n", + " 41 vol_spike float64 \n", + " 42 vol_std_5 float64 \n", + " 43 obv float64 \n", + " 44 maobv_6 float64 \n", + " 45 return_5 float64 \n", + " 46 return_10 float64 \n", + " 47 return_20 float64 \n", + " 48 std_return_5 float64 \n", + " 49 std_return_15 float64 \n", + " 50 std_return_25 float64 \n", + " 51 std_return_90 float64 \n", + " 52 std_return_90_2 float64 \n", + " 53 _ema_5 float64 \n", + " 54 _ema_13 float64 \n", + " 55 _ema_20 float64 \n", + " 56 _ema_60 float64 \n", + " 57 act_factor1 float64 \n", + " 58 act_factor2 float64 \n", + " 59 act_factor3 float64 \n", + " 60 act_factor4 float64 \n", + " 61 log(circ_mv) float64 \n", + " 62 cov float64 \n", + " 63 delta_cov float64 \n", + " 64 _rank_stddev float64 \n", + " 65 alpha_22_improved float64 \n", + " 66 alpha_003 float64 \n", + " 67 alpha_007 float64 \n", + " 68 alpha_013 float64 \n", + " 69 cat_up_limit bool \n", + " 70 cat_down_limit bool \n", + " 71 up_limit_count_10d float64 \n", + " 72 down_limit_count_10d float64 \n", + " 73 consecutive_up_limit int64 \n", + " 74 vol_break int32 \n", + " 75 weight_roc5 float64 \n", + " 76 price_cost_divergence float64 \n", + " 77 smallcap_concentration float64 \n", + " 78 cost_stability float64 \n", + " 79 high_cost_break_days float64 \n", + " 80 liquidity_risk float64 \n", + " 81 turnover_std float64 \n", + " 82 mv_volatility float64 \n", + " 83 volume_growth float64 \n", + " 84 mv_growth float64 \n", + "dtypes: bool(6), datetime64[ns](2), float64(73), int32(1), int64(1), object(2)\n", + "memory usage: 3.0+ GB\n", + "None\n" + ] + } + ], + "execution_count": 9 + }, + { + "cell_type": "code", + "id": "f4f16d63ad18d1bc", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-03-19T14:47:42.645061Z", + "start_time": "2025-03-19T14:47:42.637235Z" + } + }, + "source": [ + "def create_deviation_within_dates(df, feature_columns):\n", + " groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组\n", + " new_columns = {}\n", + " ret_feature_columns = feature_columns[:]\n", + "\n", + " # 自动选择所有数值型特征\n", + " num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col]\n", + "\n", + " # num_features = ['vol', 'pct_chg', 'turnover_rate', 'volume_ratio', 'cat_vol_spike', 'obv', 'maobv_6', 'return_5', 'return_10', 'return_20', 'std_return_5', 'std_return_15', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'alpha_022', 'alpha_003', 'alpha_007', 'alpha_013']\n", + " num_features = [col for col in num_features if 'cat' not in col and 'industry' not in col]\n", + " num_features = [col for col in num_features if 'limit' not in col]\n", + " num_features = [col for col in num_features if 'cyq' not in col]\n", + "\n", + " # 遍历所有数值型特征\n", + " for feature in num_features:\n", + " if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差\n", + " continue\n", + "\n", + " # grouped_mean = df.groupby(['trade_date'])[feature].transform('mean')\n", + " # deviation_col_name = f'deviation_mean_{feature}'\n", + " # new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " # ret_feature_columns.append(deviation_col_name)\n", + "\n", + " grouped_mean = df.groupby(['trade_date', groupby_col])[feature].transform('mean')\n", + " deviation_col_name = f'deviation_mean_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " # 将新计算的偏差特征与原始 DataFrame 合并\n", + " df = pd.concat([df, pd.DataFrame(new_columns)], axis=1)\n", + "\n", + " # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']:\n", + " # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}']\n", + "\n", + " return df, ret_feature_columns\n" + ], + "outputs": [], + "execution_count": 10 + }, + { + "cell_type": "code", + "id": "40e6b68a91b30c79", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T14:47:42.840210Z", + "start_time": "2025-03-19T14:47:42.740146Z" + } + }, + "source": [ + "import pandas as pd\n", + "\n", + "\n", + "def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99,\n", + " log=True):\n", + " if not (0 <= lower_percentile < upper_percentile <= 1):\n", + " raise ValueError(\"Percentile values must satisfy 0 <= lower_percentile < upper_percentile <= 1.\")\n", + "\n", + " # Calculate lower and upper bounds based on percentiles\n", + " lower_bound = label.quantile(lower_percentile)\n", + " upper_bound = label.quantile(upper_percentile)\n", + "\n", + " # Filter out values outside the bounds\n", + " filtered_label = label[(label >= lower_bound) & (label <= upper_bound)]\n", + "\n", + " # Print the number of removed outliers\n", + " if log:\n", + " print(f\"Removed {len(label) - len(filtered_label)} outliers.\")\n", + " return filtered_label\n", + "\n", + "\n", + "def calculate_risk_adjusted_target(df, days=5):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n", + " df['future_open'] = df.groupby('ts_code')['open'].shift(-1)\n", + " df['future_return'] = (df['future_close'] - df['future_open']) / df['future_open']\n", + "\n", + " df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(\n", + " level=0, drop=True)\n", + " sharpe_ratio = df['future_return'] * df['future_volatility']\n", + " sharpe_ratio.replace([np.inf, -np.inf], np.nan, inplace=True)\n", + "\n", + " return sharpe_ratio\n", + "\n", + "\n", + "def calculate_score(df, days=5, lambda_param=1.0):\n", + " def calculate_max_drawdown(prices):\n", + " peak = prices.iloc[0] # 初始化峰值\n", + " max_drawdown = 0 # 初始化最大回撤\n", + "\n", + " for price in prices:\n", + " if price > peak:\n", + " peak = price # 更新峰值\n", + " else:\n", + " drawdown = (peak - price) / peak # 计算当前回撤\n", + " max_drawdown = max(max_drawdown, drawdown) # 更新最大回撤\n", + "\n", + " return max_drawdown\n", + "\n", + " def compute_stock_score(stock_df):\n", + " stock_df = stock_df.sort_values(by=['trade_date'])\n", + " future_return = stock_df['future_return']\n", + " volatility = stock_df['close'].pct_change().rolling(days).std().shift(-days)\n", + " max_drawdown = stock_df['close'].rolling(days).apply(calculate_max_drawdown, raw=False).shift(-days)\n", + " score = future_return - lambda_param * max_drawdown\n", + "\n", + " return score\n", + "\n", + " scores = df.groupby('ts_code').apply(lambda x: compute_stock_score(x))\n", + " scores = scores.reset_index(level=0, drop=True)\n", + "\n", + " return scores\n", + "\n", + "\n", + "import gc\n", + "\n", + "gc.collect()" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 11 + }, + { + "cell_type": "code", + "id": "47c12bb34062ae7a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T15:54:02.848116Z", + "start_time": "2025-03-19T15:51:53.055184Z" + } + }, + "source": [ + "days = 5\n", + "\n", + "import gc\n", + "\n", + "gc.collect()\n", + "\n", + "df['future_return'] = df.groupby('ts_code', group_keys=False)['close'].apply(lambda x: x.shift(-days) / x - 1)\n", + "\n", + "\n", + "# df['future_return'] = (df.groupby('ts_code')['close'].shift(-days) - df.groupby('ts_code')['open'].shift(-1)) / \\\n", + "# df.groupby('ts_code')['open'].shift(-1)\n", + "\n", + "\n", + "def symmetric_log_transform(values):\n", + " return np.sign(values) * np.log1p(np.abs(values))\n", + "\n", + "\n", + "# df['future_score'] = df['future_return']\n", + "df['future_score'] = calculate_score(df, days=days, lambda_param=0.5)\n", + "# df['future_score'] = df.groupby('ts_code')['future_return'].shift(-1).rolling(window=2).mean()\n", + "df['future_score'] = symmetric_log_transform(df['future_score'])\n", + "\n", + "# df['label'] = remove_outliers_label_percentile(df['label'])\n", + "train_data = df[(df['trade_date'] <= '2024-01-01') & (df['trade_date'] >= '2000-01-01')]\n", + "test_data = df[(df['trade_date'] >= '2024-01-01')]\n", + "\n", + "\n", + "def select_pre_zt_stocks_dynamic(\n", + " stock_df,\n", + " vol_spike_multiplier=1.5,\n", + " min_return=0.03, # 最小累计涨幅(例如 3%)\n", + " min_main_net_inflow=1e6, # 最小主力资金净流入(例如 100 万元)\n", + " window=30, # 计算历史均值的窗口大小\n", + " signal_days=1 # 异动信号需要连续出现的天数\n", + "):\n", + " # 排序数据\n", + " stock_df = stock_df.sort_values(by=['trade_date', 'ts_code'])\n", + " stock_df = stock_df.groupby('trade_date', group_keys=False).apply(\n", + " lambda x: x.nlargest(512, 'return_20')\n", + " )\n", + "\n", + " return stock_df\n", + "\n", + "\n", + "train_data = select_pre_zt_stocks_dynamic(train_data)\n", + "test_data = select_pre_zt_stocks_dynamic(test_data)\n", + "# # train_data = train_data[train_data['circ_mv'] < 2000000]\n", + "# # test_data = test_data[test_data['circ_mv'] < 2000000]\n", + "#\n", + "# train_data = train_data[train_data['vol'] > 1.5 * train_data['vol_spike']]\n", + "# test_data = test_data[test_data['vol'] > 1.5 * test_data['vol_spike']]\n", + "# train_data = train_data.groupby('trade_date', group_keys=False).apply(\n", + "# lambda x: x.nsmallest(500, 'return_20')\n", + "# )\n", + "#\n", + "# test_data = test_data.groupby('trade_date', group_keys=False).apply(\n", + "# lambda x: x.nsmallest(500, 'return_20')\n", + "# )\n", + "\n", + "# train_data, _ = get_simple_factor(train_data)\n", + "# test_data, _ = get_simple_factor(test_data)\n", + "\n", + "train_data['label'] = train_data.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + " lambda x: pd.qcut(x, q=5, labels=False, duplicates='drop')\n", + ")\n", + "test_data['label'] = test_data.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + " lambda x: pd.qcut(x, q=5, labels=False, duplicates='drop')\n", + ")\n", + "# train_data['label'] = train_data['label'] == 4\n", + "# test_data['label'] = test_data['label'] == 4\n", + "\n", + "industry_df = industry_df.sort_values(by=['trade_date'])\n", + "index_data = index_data.sort_values(by=['trade_date'])\n", + "\n", + "train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "train_data = train_data.merge(index_data, on='trade_date', how='left')\n", + "test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "test_data = test_data.merge(index_data, on='trade_date', how='left')\n", + "\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n", + "\n", + "feature_columns = [col for col in train_data.columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "feature_columns = [col for col in feature_columns if not col.startswith('_')]\n", + "print(feature_columns)\n", + "\n", + "feature_columns_new = feature_columns[:]\n", + "train_data, feature_columns_new = create_deviation_within_dates(train_data, feature_columns)\n", + "test_data, feature_columns_new = create_deviation_within_dates(test_data, feature_columns)\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "\n", + "train_data = train_data.dropna(subset=feature_columns_new)\n", + "train_data = train_data.dropna(subset=['label'])\n", + "train_data = train_data.reset_index(drop=True)\n", + "\n", + "# print(test_data.tail())\n", + "test_data = test_data.dropna(subset=feature_columns_new)\n", + "# test_data = test_data.dropna(subset=['label'])\n", + "test_data = test_data.reset_index(drop=True)\n", + "\n", + "print(len(train_data))\n", + "print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "print(len(test_data))\n", + "print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "\n", + "cat_columns = [col for col in df.columns if col.startswith('cat')]\n", + "for col in cat_columns:\n", + " train_data[col] = train_data[col].astype('category')\n", + " test_data[col] = test_data[col].astype('category')\n", + "\n", + "\n", + "# feature_columns_new.remove('cat_l2_code')" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['vol', 'pct_chg', 'turnover_rate', 'pe_ttm', 'volume_ratio', 'winner_rate', 'cat_l2_code', 'return_skew', 'return_kurtosis', 'volume_change_rate', 'cat_volume_breakout', 'turnover_deviation', 'cat_turnover_spike', 'avg_volume_ratio', 'cat_volume_ratio_breakout', 'vol_spike', 'vol_std_5', 'obv', 'maobv_6', 'return_5', 'return_10', 'return_20', 'std_return_5', 'std_return_15', 'std_return_25', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'log(circ_mv)', 'cov', 'delta_cov', 'alpha_22_improved', 'alpha_003', 'alpha_007', 'alpha_013', 'cat_up_limit', 'cat_down_limit', 'up_limit_count_10d', 'down_limit_count_10d', 'consecutive_up_limit', 'vol_break', 'weight_roc5', 'price_cost_divergence', 'smallcap_concentration', 'cost_stability', 'high_cost_break_days', 'liquidity_risk', 'turnover_std', 'mv_volatility', 'volume_growth', 'mv_growth', 'industry_obv', 'industry_return_5', 'industry_return_20', 'industry__ema_5', 'industry__ema_13', 'industry__ema_20', 'industry__ema_60', 'industry_act_factor1', 'industry_act_factor2', 'industry_act_factor3', 'industry_act_factor4', 'industry_act_factor5', 'industry_act_factor6', 'industry_rank_act_factor1', 'industry_rank_act_factor2', 'industry_rank_act_factor3', 'industry_return_5_percentile', 'industry_return_20_percentile', '000852.SH_MACD', '000905.SH_MACD', '399006.SZ_MACD', '000852.SH_MACD_hist', '000905.SH_MACD_hist', '399006.SZ_MACD_hist', '000852.SH_RSI', '000905.SH_RSI', '399006.SZ_RSI', '000852.SH_Signal_line', '000905.SH_Signal_line', '399006.SZ_Signal_line', '000852.SH_amount_change_rate', '000905.SH_amount_change_rate', '399006.SZ_amount_change_rate', '000852.SH_amount_mean', '000905.SH_amount_mean', '399006.SZ_amount_mean', '000852.SH_daily_return', '000905.SH_daily_return', '399006.SZ_daily_return', '000852.SH_up_ratio_20d', '000905.SH_up_ratio_20d', '399006.SZ_up_ratio_20d', '000852.SH_volatility', '000905.SH_volatility', '399006.SZ_volatility', '000852.SH_volume_change_rate', '000905.SH_volume_change_rate', '399006.SZ_volume_change_rate']\n", + "feature_columns size: 177\n", + "541133\n", + "最小日期: 2018-06-04\n", + "最大日期: 2023-12-29\n", + "106062\n", + "最小日期: 2024-01-02\n", + "最大日期: 2025-03-13\n" + ] + } + ], + "execution_count": 40 + }, + { + "cell_type": "code", + "id": "1c46817a-b5dd-4bec-8bb4-e6e80bfd9d66", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T15:54:03.016065Z", + "start_time": "2025-03-19T15:54:03.011956Z" + } + }, + "source": [ + "# test_data = df[(df['trade_date'] >= '2024-04-01')]\n", + "# test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "# test_data = test_data.merge(index_data, on='trade_date', how='left')" + ], + "outputs": [], + "execution_count": 41 + }, + { + "cell_type": "code", + "id": "da2bb202843d9275", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T15:54:24.393873Z", + "start_time": "2025-03-19T15:54:03.049056Z" + } + }, + "source": [ + "def remove_highly_correlated_features(df, feature_columns, threshold=0.9):\n", + " numeric_features = df[feature_columns].select_dtypes(include=[np.number]).columns.tolist()\n", + " if not numeric_features:\n", + " raise ValueError(\"No numeric features found in the provided data.\")\n", + "\n", + " corr_matrix = df[numeric_features].corr().abs()\n", + " upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))\n", + " to_drop = [column for column in upper.columns if any(upper[column] > threshold)]\n", + " remaining_features = [col for col in feature_columns if col not in to_drop\n", + " or 'act' in col or 'af' in col]\n", + " return remaining_features\n", + "\n", + "\n", + "feature_columns_new = remove_highly_correlated_features(train_data, feature_columns_new)\n", + "keep_columns = [col for col in train_data.columns if\n", + " col in feature_columns_new or col in ['ts_code', 'trade_date', 'label', 'future_return',\n", + " 'future_score']]\n", + "train_data = train_data[keep_columns]\n", + "# test_data = test_data[keep_columns]\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "# print(feature_columns_new)\n", + "# 2. 按 trade_date 分组" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "feature_columns size: 154\n" + ] + } + ], + "execution_count": 42 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T15:54:24.499139Z", + "start_time": "2025-03-19T15:54:24.490686Z" + } + }, + "cell_type": "code", + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import DataLoader, Dataset\n", + "from sklearn.metrics import accuracy_score\n", + "\n", + "num_heads = 4 # Transformer头数\n", + "transformer_input_dim = 64\n", + "num_layers = 2 # Transformer层数\n", + "hidden_dim = 64 # 隐藏层维度\n", + "num_epochs = 10 # 训练轮数\n", + "learning_rate = 0.001 # 学习率\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "validation_days = 180\n", + "\n", + "print(device)" + ], + "id": "8113bba62de693cc", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cuda\n" + ] + } + ], + "execution_count": 43 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T15:57:09.407047Z", + "start_time": "2025-03-19T15:54:24.596522Z" + } + }, + "cell_type": "code", + "source": [ + "from tqdm import tqdm\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from sklearn.preprocessing import LabelEncoder, StandardScaler\n", + "from sklearn.metrics import accuracy_score\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "\n", + "\n", + "class StockPredictionModel(nn.Module):\n", + " def __init__(self, input_dim, hidden_dim, num_classes, num_heads, num_layers, transformer_input_dim):\n", + " super(StockPredictionModel, self).__init__()\n", + "\n", + " # 输入全连接层:将原始输入特征映射到 Transformer 的输入维度\n", + " self.fc_input = nn.Sequential(\n", + " nn.Linear(input_dim, hidden_dim),\n", + " nn.ReLU(),\n", + " nn.Dropout(0.3),\n", + " nn.Linear(hidden_dim, hidden_dim),\n", + " nn.ReLU(),\n", + " nn.Dropout(0.3),\n", + " nn.Linear(hidden_dim, hidden_dim),\n", + " )\n", + "\n", + " # Transformer Encoder\n", + " self.transformer = nn.Transformer(\n", + " d_model=transformer_input_dim,\n", + " nhead=num_heads,\n", + " num_encoder_layers=num_layers,\n", + " batch_first=True\n", + " )\n", + "\n", + " self.dropout = nn.Dropout(0.3)\n", + "\n", + " # 全连接层\n", + " self.fc_output = nn.Sequential(\n", + " nn.Linear(transformer_input_dim, hidden_dim),\n", + " nn.ReLU(),\n", + " nn.Dropout(0.3),\n", + " nn.Linear(hidden_dim, hidden_dim),\n", + " nn.ReLU(),\n", + " nn.Dropout(0.3),\n", + " nn.Linear(hidden_dim, num_classes),\n", + " )\n", + "\n", + " def forward(self, x):\n", + " # x: (batch_size, num_stocks, input_dim)\n", + "\n", + " # 输入全连接层处理\n", + " x = (self.fc_input(x))\n", + "\n", + " # Transformer处理\n", + " transformer_out = self.transformer(x, x) # Self-attention\n", + "\n", + " # 全连接层处理\n", + " out = self.fc_output(transformer_out)\n", + "\n", + " return out\n", + "\n", + "\n", + "# 数据预处理函数\n", + "def preprocess_data(data, cat_columns, feature_columns, label_encoders=None, scaler=None):\n", + " \"\"\"\n", + " 预处理数据:\n", + " - 对分类特征进行 LabelEncoder 编码。\n", + " - 对数值特征进行标准化。\n", + " - 将数据按天分组并转换为 NumPy 数组。\n", + " \"\"\"\n", + " # 分离分类特征和数值特征\n", + " numeric_cols = [col for col in feature_columns if col not in cat_columns]\n", + "\n", + " # 初始化编码器和标准化器(如果是训练阶段)\n", + " if label_encoders is None:\n", + " label_encoders = {col: LabelEncoder() for col in cat_columns}\n", + " X_cat = np.array([label_encoders[col].fit_transform(data[col]) for col in cat_columns]).T\n", + " else:\n", + " X_cat = np.array([label_encoders[col].transform(data[col]) for col in cat_columns]).T\n", + " if scaler is None:\n", + " scaler = StandardScaler()\n", + " X_num = scaler.fit_transform(data[numeric_cols])\n", + " else:\n", + " X_num = scaler.transform(data[numeric_cols])\n", + "\n", + "\n", + " # 处理分类特征\n", + "\n", + " # 处理数值特征\n", + "\n", + " # 合并特征\n", + " X_processed = np.hstack([X_num, X_cat])\n", + "\n", + " # 将处理后的数据与日期对齐\n", + " processed_data = pd.DataFrame(X_processed, columns=numeric_cols + cat_columns)\n", + " processed_data['trade_date'] = data['trade_date'].values # 保留日期列\n", + " processed_data['label'] = data['label'].values # 保留标签列\n", + "\n", + " # 按天分组\n", + " grouped_X = []\n", + " grouped_y = []\n", + " for date, group in processed_data.groupby('trade_date'):\n", + " X_day = group[numeric_cols + cat_columns].values # 使用预处理后的特征\n", + " y_day = group['label'].values # 使用原始标签\n", + " grouped_X.append(X_day)\n", + " grouped_y.append(y_day)\n", + "\n", + " # 获取每个分类特征的最大类别数(用于嵌入层)\n", + " cat_dims = [len(label_encoders[col].classes_) for col in cat_columns]\n", + "\n", + " return grouped_X, grouped_y, label_encoders, scaler, cat_dims\n", + "\n", + "\n", + "# 训练函数(逐天训练)\n", + "def train_by_day(model, X_train, y_train, criterion, optimizer, device):\n", + " model.train()\n", + " total_loss = 0\n", + " all_preds, all_labels = [], []\n", + "\n", + " for day_idx in range(len(X_train)):\n", + " # 取出当天的数据\n", + " X_batch = torch.tensor(X_train[day_idx], dtype=torch.float32).to(device)\n", + " y_batch = torch.tensor(y_train[day_idx], dtype=torch.long).to(device)\n", + "\n", + " # 添加 batch 维度(从 2D 变为 3D)\n", + " if X_batch.dim() == 2:\n", + " X_batch = X_batch.unsqueeze(0) # 形状变为 (1, num_stocks, num_features)\n", + "\n", + " # 前向传播\n", + " outputs = model(X_batch) # (batch_size, num_stocks, num_classes)\n", + " loss = criterion(outputs.view(-1, outputs.size(-1)), y_batch.view(-1))\n", + "\n", + " # 反向传播\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # 统计损失和预测结果\n", + " total_loss += loss.item()\n", + " preds = torch.argmax(outputs, dim=-1).cpu().numpy()\n", + " labels = y_batch.cpu().numpy()\n", + " all_preds.extend(preds.flatten())\n", + " all_labels.extend(labels.flatten())\n", + "\n", + " avg_loss = total_loss / len(X_train)\n", + " accuracy = accuracy_score(all_labels, all_preds)\n", + " return avg_loss, accuracy\n", + "\n", + "\n", + "# 验证/测试函数(逐天验证)\n", + "def evaluate_by_day(model, X_val, y_val, criterion, device):\n", + " model.eval()\n", + " total_loss = 0\n", + " all_preds, all_labels = [], []\n", + "\n", + " with torch.no_grad():\n", + " for day_idx in range(len(X_val)):\n", + " # 取出当天的数据\n", + " X_batch = torch.tensor(X_val[day_idx], dtype=torch.float32).to(device)\n", + " y_batch = torch.tensor(y_val[day_idx], dtype=torch.long).to(device)\n", + " # 添加 batch 维度(从 2D 变为 3D)\n", + " if X_batch.dim() == 2:\n", + " X_batch = X_batch.unsqueeze(0) # 形状变为 (1, num_stocks, num_features)\n", + "\n", + " # 前向传播\n", + " outputs = model(X_batch)\n", + " loss = criterion(outputs.view(-1, outputs.size(-1)), y_batch.view(-1))\n", + "\n", + " # 统计损失和预测结果\n", + " total_loss += loss.item()\n", + " preds = torch.argmax(outputs, dim=-1).cpu().numpy()\n", + " labels = y_batch.cpu().numpy()\n", + " all_preds.extend(preds.flatten())\n", + " all_labels.extend(labels.flatten())\n", + "\n", + " avg_loss = total_loss / len(X_val)\n", + " accuracy = accuracy_score(all_labels, all_preds)\n", + " return avg_loss, accuracy\n", + "\n", + "\n", + "# 主程序\n", + "gc.collect()\n", + "# 数据切分\n", + "all_dates = train_data['trade_date'].unique() # 获取所有唯一的 trade_date\n", + "split_date = all_dates[-validation_days] # 划分点为倒数第 validation_days 天\n", + "train_data_split = train_data[train_data['trade_date'] < split_date] # 训练集\n", + "val_data_split = train_data[train_data['trade_date'] >= split_date] # 验证集\n", + "\n", + "# 找到分类特征列\n", + "cat_columns = [col for col in train_data.columns if col.startswith(\"cat\")]\n", + "\n", + "# 预处理数据\n", + "X_train_processed, y_train_processed, label_encoders, scaler, cat_dims = preprocess_data(train_data_split, cat_columns,\n", + " feature_columns_new)\n", + "X_val_processed, y_val_processed, _, _, _ = preprocess_data(val_data_split, cat_columns, feature_columns_new,\n", + " label_encoders, scaler)\n", + "X_test_processed, y_test_processed, _, _, _ = preprocess_data(test_data, cat_columns, feature_columns_new,\n", + " label_encoders, scaler)\n", + "\n", + "# 超参数\n", + "input_dim = X_train_processed[0].shape[1] # 直接从数据获取输入维度\n", + "print(input_dim)\n", + "num_classes = len(train_data[\"label\"].unique())\n", + "\n", + "\n", + "# 模型、损失函数和优化器\n", + "model = StockPredictionModel(\n", + " input_dim=input_dim,\n", + " hidden_dim=hidden_dim,\n", + " num_classes=num_classes,\n", + " num_heads=num_heads,\n", + " num_layers=num_layers,\n", + " transformer_input_dim=transformer_input_dim,\n", + ").to(device)\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.Adam(model.parameters(), lr=learning_rate)\n", + "\n", + "# 训练和验证\n", + "best_val_accuracy = 0\n", + "for epoch in tqdm(range(num_epochs)):\n", + " train_loss, train_acc = train_by_day(model, X_train_processed, y_train_processed, criterion, optimizer, device)\n", + " val_loss, val_acc = evaluate_by_day(model, X_val_processed, y_val_processed, criterion, device)\n", + "\n", + " print(f\"Epoch {epoch + 1}/{num_epochs}: \"\n", + " f\"Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.4f}, \"\n", + " f\"Val Loss: {val_loss:.4f}, Val Acc: {val_acc:.4f}\")\n", + "\n", + " # 保存最佳模型\n", + " # if val_acc > best_val_accuracy:\n", + " # best_val_accuracy = val_acc\n", + " # torch.save(model.state_dict(), \"best_model.pth\")\n", + "\n", + "# 测试\n", + "# model.load_state_dict(torch.load(\"best_model.pth\"))\n", + "# test_loss, test_acc = evaluate_by_day(model, X_test_processed, y_test_processed, criterion, device)\n", + "# print(f\"Test Loss: {test_loss:.4f}, Test Acc: {test_acc:.4f}\")" + ], + "id": "beeb098799ecfa6a", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "154\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 10%|█ | 1/10 [00:26<03:58, 26.47s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10: Train Loss: 1.6094, Train Acc: 0.2037, Val Loss: 1.6091, Val Acc: 0.2088\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 20%|██ | 2/10 [00:53<03:33, 26.72s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/10: Train Loss: 1.6091, Train Acc: 0.2046, Val Loss: 1.6091, Val Acc: 0.2088\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 30%|███ | 3/10 [01:20<03:07, 26.80s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/10: Train Loss: 1.6091, Train Acc: 0.2038, Val Loss: 1.6091, Val Acc: 0.2088\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 40%|████ | 4/10 [01:44<02:35, 25.92s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/10: Train Loss: 1.6091, Train Acc: 0.2043, Val Loss: 1.6091, Val Acc: 0.2088\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 50%|█████ | 5/10 [02:08<02:05, 25.18s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5/10: Train Loss: 1.6091, Train Acc: 0.2046, Val Loss: 1.6091, Val Acc: 0.2088\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 60%|██████ | 6/10 [02:35<01:42, 25.72s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/10: Train Loss: 1.6091, Train Acc: 0.2042, Val Loss: 1.6091, Val Acc: 0.2088\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 60%|██████ | 6/10 [02:41<01:47, 26.93s/it]\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[44], line 223\u001B[0m\n\u001B[0;32m 221\u001B[0m best_val_accuracy \u001B[38;5;241m=\u001B[39m \u001B[38;5;241m0\u001B[39m\n\u001B[0;32m 222\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m epoch \u001B[38;5;129;01min\u001B[39;00m tqdm(\u001B[38;5;28mrange\u001B[39m(num_epochs)):\n\u001B[1;32m--> 223\u001B[0m train_loss, train_acc \u001B[38;5;241m=\u001B[39m train_by_day(model, X_train_processed, y_train_processed, criterion, optimizer, device)\n\u001B[0;32m 224\u001B[0m val_loss, val_acc \u001B[38;5;241m=\u001B[39m evaluate_by_day(model, X_val_processed, y_val_processed, criterion, device)\n\u001B[0;32m 226\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mEpoch \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mepoch\u001B[38;5;250m \u001B[39m\u001B[38;5;241m+\u001B[39m\u001B[38;5;250m \u001B[39m\u001B[38;5;241m1\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m/\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mnum_epochs\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m: \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m 227\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mTrain Loss: \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mtrain_loss\u001B[38;5;132;01m:\u001B[39;00m\u001B[38;5;124m.4f\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m, Train Acc: \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mtrain_acc\u001B[38;5;132;01m:\u001B[39;00m\u001B[38;5;124m.4f\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m, \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m 228\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mVal Loss: \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mval_loss\u001B[38;5;132;01m:\u001B[39;00m\u001B[38;5;124m.4f\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m, Val Acc: \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mval_acc\u001B[38;5;132;01m:\u001B[39;00m\u001B[38;5;124m.4f\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m\"\u001B[39m)\n", + "Cell \u001B[1;32mIn[44], line 132\u001B[0m, in \u001B[0;36mtrain_by_day\u001B[1;34m(model, X_train, y_train, criterion, optimizer, device)\u001B[0m\n\u001B[0;32m 129\u001B[0m X_batch \u001B[38;5;241m=\u001B[39m X_batch\u001B[38;5;241m.\u001B[39munsqueeze(\u001B[38;5;241m0\u001B[39m) \u001B[38;5;66;03m# 形状变为 (1, num_stocks, num_features)\u001B[39;00m\n\u001B[0;32m 131\u001B[0m \u001B[38;5;66;03m# 前向传播\u001B[39;00m\n\u001B[1;32m--> 132\u001B[0m outputs \u001B[38;5;241m=\u001B[39m model(X_batch) \u001B[38;5;66;03m# (batch_size, num_stocks, num_classes)\u001B[39;00m\n\u001B[0;32m 133\u001B[0m loss \u001B[38;5;241m=\u001B[39m criterion(outputs\u001B[38;5;241m.\u001B[39mview(\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m, outputs\u001B[38;5;241m.\u001B[39msize(\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m)), y_batch\u001B[38;5;241m.\u001B[39mview(\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m))\n\u001B[0;32m 135\u001B[0m \u001B[38;5;66;03m# 反向传播\u001B[39;00m\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1739\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m 1737\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[0;32m 1738\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m-> 1739\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1750\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m 1745\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[0;32m 1746\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[0;32m 1747\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[0;32m 1748\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[0;32m 1749\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[1;32m-> 1750\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[0;32m 1752\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[0;32m 1753\u001B[0m called_always_called_hooks \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mset\u001B[39m()\n", + "Cell \u001B[1;32mIn[44], line 54\u001B[0m, in \u001B[0;36mStockPredictionModel.forward\u001B[1;34m(self, x)\u001B[0m\n\u001B[0;32m 50\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, x):\n\u001B[0;32m 51\u001B[0m \u001B[38;5;66;03m# x: (batch_size, num_stocks, input_dim)\u001B[39;00m\n\u001B[0;32m 52\u001B[0m \n\u001B[0;32m 53\u001B[0m \u001B[38;5;66;03m# 输入全连接层处理\u001B[39;00m\n\u001B[1;32m---> 54\u001B[0m x \u001B[38;5;241m=\u001B[39m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mfc_input(x))\n\u001B[0;32m 56\u001B[0m \u001B[38;5;66;03m# Transformer处理\u001B[39;00m\n\u001B[0;32m 57\u001B[0m transformer_out \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtransformer(x, x) \u001B[38;5;66;03m# Self-attention\u001B[39;00m\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1739\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m 1737\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[0;32m 1738\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m-> 1739\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1750\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m 1745\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[0;32m 1746\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[0;32m 1747\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[0;32m 1748\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[0;32m 1749\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[1;32m-> 1750\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[0;32m 1752\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[0;32m 1753\u001B[0m called_always_called_hooks \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mset\u001B[39m()\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\container.py:250\u001B[0m, in \u001B[0;36mSequential.forward\u001B[1;34m(self, input)\u001B[0m\n\u001B[0;32m 248\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m):\n\u001B[0;32m 249\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m module \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m:\n\u001B[1;32m--> 250\u001B[0m \u001B[38;5;28minput\u001B[39m \u001B[38;5;241m=\u001B[39m module(\u001B[38;5;28minput\u001B[39m)\n\u001B[0;32m 251\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28minput\u001B[39m\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1739\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m 1737\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[0;32m 1738\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m-> 1739\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\module.py:1750\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m 1745\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[0;32m 1746\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[0;32m 1747\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[0;32m 1748\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[0;32m 1749\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[1;32m-> 1750\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[0;32m 1752\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[0;32m 1753\u001B[0m called_always_called_hooks \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mset\u001B[39m()\n", + "File \u001B[1;32mE:\\Python\\anaconda\\envs\\new_trader\\Lib\\site-packages\\torch\\nn\\modules\\linear.py:125\u001B[0m, in \u001B[0;36mLinear.forward\u001B[1;34m(self, input)\u001B[0m\n\u001B[0;32m 124\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m: Tensor) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Tensor:\n\u001B[1;32m--> 125\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m F\u001B[38;5;241m.\u001B[39mlinear(\u001B[38;5;28minput\u001B[39m, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mweight, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mbias)\n", + "\u001B[1;31mKeyboardInterrupt\u001B[0m: " + ] + } + ], + "execution_count": 44 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-19T15:57:09.420051500Z", + "start_time": "2025-03-19T15:47:37.553874Z" + } + }, + "cell_type": "code", + "source": [ + "def preprocess_test_data(data, cat_columns, feature_columns, label_encoders, scaler):\n", + " \"\"\"对测试数据进行预处理\"\"\"\n", + " numeric_cols = [col for col in feature_columns if col not in cat_columns]\n", + "\n", + " # 处理分类特征\n", + " X_cat = np.array([label_encoders[col].transform(data[col]) for col in cat_columns]).T\n", + "\n", + " # 处理数值特征\n", + " X_num = scaler.transform(data[numeric_cols])\n", + "\n", + " # 合并特征\n", + " X_processed = np.hstack([X_num, X_cat])\n", + "\n", + " # 保留原始 ts_code 和 trade_date\n", + " processed_data = data[['ts_code', 'trade_date']].copy()\n", + " processed_data['features'] = list(X_processed)\n", + "\n", + " return processed_data\n", + "\n", + "\n", + "def predict_and_save(model, test_data, cat_columns, feature_columns, label_encoders, scaler, output_path):\n", + " # 预处理测试数据\n", + " processed_data = preprocess_test_data(test_data, cat_columns, feature_columns, label_encoders, scaler)\n", + "\n", + " # 按天分组\n", + " grouped_data = processed_data.groupby('trade_date')\n", + "\n", + " # 存储预测结果\n", + " results = []\n", + "\n", + " model.eval()\n", + " with torch.no_grad():\n", + " for date, group in grouped_data:\n", + " # 准备输入数据\n", + " X_batch = np.stack(group['features'].values) # 形状 (num_stocks, num_features)\n", + "\n", + " X_batch = torch.tensor(X_batch, dtype=torch.float32).to(device)\n", + "\n", + " if X_batch.dim() == 2:\n", + " X_batch = X_batch.unsqueeze(0) # 形状变为 (1, num_stocks, num_features)\n", + "\n", + " # 预测\n", + " outputs = model(X_batch)\n", + " probs = torch.softmax(outputs, dim=-1).cpu().numpy() # 转换为概率\n", + "\n", + " # 取最后一列作为 score(假设最后一列是目标类别)\n", + " scores = probs[0, :, -1] # 形状 (num_stocks,)\n", + "\n", + " # 收集结果\n", + " for i in range(len(group)):\n", + " results.append({\n", + " 'trade_date': date,\n", + " 'score': scores[i],\n", + " 'ts_code': group['ts_code'].values[i],\n", + " })\n", + " # 保存为 DataFrame\n", + " result_df = pd.DataFrame(results)\n", + " result_df = result_df.loc[result_df.groupby('trade_date')['score'].idxmax()]\n", + " result_df.to_csv(output_path, index=False)\n", + " print(f\"预测结果已保存至 {output_path}\")\n", + "\n", + "\n", + "predict_and_save(\n", + " model=model,\n", + " test_data=test_data,\n", + " cat_columns=cat_columns,\n", + " feature_columns=feature_columns_new,\n", + " label_encoders=label_encoders,\n", + " scaler=scaler,\n", + " output_path=\"predictions_test.tsv\"\n", + ")" + ], + "id": "5d1522a7538db91b", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "预测结果已保存至 predictions_test.tsv\n" + ] + } + ], + "execution_count": 38 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/Transformer.ipynb b/code/train/Transformer.ipynb new file mode 100644 index 0000000..9118ecf --- /dev/null +++ b/code/train/Transformer.ipynb @@ -0,0 +1,1362 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "79a7758178bafdd3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:54.782179Z", + "start_time": "2025-03-01T04:00:54.471051Z" + } + }, + "source": [ + "%load_ext autoreload\n", + "# %autoreload 2\n", + "\n", + "import pandas as pd\n", + " \n", + "\n", + " \n", + "pd.set_option('display.max_columns', None)\n" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload module is not an IPython extension.\n" + ] + } + ], + "execution_count": 1 + }, + { + "cell_type": "code", + "id": "a79cafb06a7e0e43", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-03-01T04:01:45.158165Z", + "start_time": "2025-03-01T04:00:54.784691Z" + } + }, + "source": [ + "\n", + "from utils.utils import read_and_merge_h5_data\n", + "\n", + "print('daily data')\n", + "df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df, join='inner')\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)\n", + "print(df.info())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "daily data\n", + "daily basic\n", + "inner merge on ['ts_code', 'trade_date']\n", + "stk limit\n", + "left merge on ['ts_code', 'trade_date']\n", + "money flow\n", + "left merge on ['ts_code', 'trade_date']\n", + "\n", + "RangeIndex: 8350183 entries, 0 to 8350182\n", + "Data columns (total 21 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 turnover_rate float64 \n", + " 8 pe_ttm float64 \n", + " 9 circ_mv float64 \n", + " 10 volume_ratio float64 \n", + " 11 is_st bool \n", + " 12 up_limit float64 \n", + " 13 down_limit float64 \n", + " 14 buy_sm_vol float64 \n", + " 15 sell_sm_vol float64 \n", + " 16 buy_lg_vol float64 \n", + " 17 sell_lg_vol float64 \n", + " 18 buy_elg_vol float64 \n", + " 19 sell_elg_vol float64 \n", + " 20 net_mf_vol float64 \n", + "dtypes: bool(1), datetime64[ns](1), float64(18), object(1)\n", + "memory usage: 1.3+ GB\n", + "None\n" + ] + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "id": "f7a55c19-b7dc-4d2f-a478-cffab11690df", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:01:49.907736Z", + "start_time": "2025-03-01T04:01:45.533679Z" + } + }, + "source": [ + "print('industry')\n", + "df = read_and_merge_h5_data('../../data/industry_data.h5', key='industry_data',\n", + " columns=['ts_code', 'l2_code'],\n", + " df=df, on=['ts_code'], join='left')\n" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "industry\n", + "left merge on ['ts_code']\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "id": "4077d4449d406c86", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:01:50.070194Z", + "start_time": "2025-03-01T04:01:49.936309Z" + } + }, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "def calculate_indicators(df):\n", + " \"\"\"\n", + " 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。\n", + " \"\"\"\n", + " df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100\n", + " # df['5_day_ma'] = df['close'].rolling(window=5).mean()\n", + " delta = df['close'].diff()\n", + " gain = delta.where(delta > 0, 0)\n", + " loss = -delta.where(delta < 0, 0)\n", + " avg_gain = gain.rolling(window=14).mean()\n", + " avg_loss = loss.rolling(window=14).mean()\n", + " rs = avg_gain / avg_loss\n", + " df['RSI'] = 100 - (100 / (1 + rs))\n", + "\n", + " # 计算MACD\n", + " ema12 = df['close'].ewm(span=12, adjust=False).mean()\n", + " ema26 = df['close'].ewm(span=26, adjust=False).mean()\n", + " df['MACD'] = ema12 - ema26\n", + " df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean()\n", + " df['MACD_hist'] = df['MACD'] - df['Signal_line']\n", + "\n", + " return df\n", + "\n", + "def generate_index_indicators(h5_filename):\n", + " df = pd.read_hdf(h5_filename, key='index_data')\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n", + " df = df.sort_values('trade_date')\n", + "\n", + " # 计算每个ts_code的相关指标\n", + " df_indicators = []\n", + " for ts_code in df['ts_code'].unique():\n", + " df_index = df[df['ts_code'] == ts_code].copy()\n", + " df_index = calculate_indicators(df_index)\n", + " df_indicators.append(df_index)\n", + "\n", + " # 合并所有指数的结果\n", + " df_all_indicators = pd.concat(df_indicators, ignore_index=True)\n", + "\n", + " # 保留trade_date列,并将同一天的数据按ts_code合并成一行\n", + " df_final = df_all_indicators.pivot_table(\n", + " index='trade_date',\n", + " columns='ts_code',\n", + " values=['daily_return', 'RSI', 'MACD', 'Signal_line', 'MACD_hist'],\n", + " aggfunc='last'\n", + " )\n", + "\n", + " df_final.columns = [f\"{col[1]}_{col[0]}\" for col in df_final.columns]\n", + " df_final = df_final.reset_index()\n", + "\n", + " return df_final\n", + "\n", + "\n", + "# 使用函数\n", + "h5_filename = '../../data/index_data.h5'\n", + "index_data = generate_index_indicators(h5_filename)\n", + "index_data = index_data.dropna()\n" + ], + "outputs": [], + "execution_count": 4 + }, + { + "cell_type": "code", + "id": "c4e9e1d31da6dba6", + "metadata": { + "jupyter": { + "source_hidden": true + }, + "ExecuteTime": { + "end_time": "2025-03-01T04:12:27.210806Z", + "start_time": "2025-03-01T04:12:26.858559Z" + } + }, + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "def get_technical_factor(df):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " # 计算 up 和 down\n", + " df['log_close'] = np.log(df['close'])\n", + "\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " # 计算 ATR\n", + " df['atr_14'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14), index=x.index)\n", + " )\n", + " df['atr_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + "\n", + " # 计算 OBV 及其均线\n", + " df['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " df['maobv_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n", + "\n", + " # 计算 RSI\n", + " df['rsi_3'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n", + " )\n", + " df['rsi_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['rsi_9'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n", + " )\n", + "\n", + " # 计算 return_10 和 return_20\n", + " df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n", + " df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # 计算 avg_close_5\n", + " df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n", + "\n", + " # 计算标准差指标\n", + " df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n", + " df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n", + " df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n", + " df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n", + " df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n", + "\n", + " # 计算比值指标\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算标准差差值\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_act_factor(df, cat=True):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + " # 计算 EMA 指标\n", + " df['ema_5'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n", + " )\n", + " df['ema_13'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n", + " )\n", + " df['ema_20'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n", + " )\n", + " df['ema_60'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n", + " )\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = grouped['ema_5'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n", + " )\n", + " df['act_factor2'] = grouped['ema_13'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n", + " )\n", + " df['act_factor3'] = grouped['ema_20'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n", + " )\n", + " df['act_factor4'] = grouped['ema_60'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n", + " )\n", + "\n", + " if cat:\n", + " df['cat_af1'] = df['act_factor1'] > 0\n", + " df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n", + " df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n", + " df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(df['act_factor1']**2 + df['act_factor2']**2)\n", + "\n", + " # 根据 trade_date 截面计算排名\n", + " df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True)\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_money_flow_factor(df):\n", + " # 计算资金流相关因子(字段名称见 tushare 数据说明)\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + " return df\n", + "\n", + "\n", + "def get_alpha_factor(df):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code')\n", + "\n", + " # alpha_022: 当前 close 与 5 日前 close 差值\n", + " df['alpha_022'] = grouped['close'].transform(lambda x: x - x.shift(5))\n", + "\n", + " # alpha_003: (close - open) / (high - low)\n", + " df['alpha_003'] = np.where(df['high'] != df['low'],\n", + " (df['close'] - df['open']) / (df['high'] - df['low']),\n", + " 0)\n", + "\n", + " # alpha_007: 计算过去5日 close 与 vol 的相关性,并按 trade_date 排名\n", + " df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n", + " df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n", + "\n", + " # alpha_013: 计算过去5日 close 之和 - 20日 close 之和,并按 trade_date 排名\n", + " df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n", + " df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n", + "\n", + " return df\n", + "\n" + ], + "outputs": [], + "execution_count": 2 + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a735bc02ceb4d872", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.633429700Z", + "start_time": "2025-02-27T16:36:47.161749Z" + } + }, + "outputs": [], + "source": [ + "def read_industry_data(h5_filename):\n", + " # 读取 H5 文件中所有的行业数据\n", + " industry_data = pd.read_hdf(h5_filename, key='sw_daily', columns=[\n", + " 'ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'pe', 'pb', 'vol'\n", + " ]) # 假设 H5 文件的键是 'industry_data'\n", + " industry_data = industry_data.sort_values(by=['ts_code', 'trade_date'])\n", + " industry_data = industry_data.reindex()\n", + " industry_data['trade_date'] = pd.to_datetime(industry_data['trade_date'], format='%Y%m%d')\n", + "\n", + " grouped = industry_data.groupby('ts_code', group_keys=False)\n", + " industry_data['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " industry_data['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " industry_data['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " industry_data = get_act_factor(industry_data, cat=False)\n", + " # industry_data = industry_data.sort_values(by=['trade_date', 'ts_code'])\n", + "\n", + " # 计算每天每个 ts_code 的因子和当天所有 ts_code 的中位数的偏差\n", + " factor_columns = ['obv', 'return_5', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4'] # 因子列\n", + "\n", + " for factor in factor_columns:\n", + " if factor in industry_data.columns:\n", + " # 计算每天每个 ts_code 的因子值与当天所有 ts_code 的中位数的偏差\n", + " industry_data[f'{factor}_deviation'] = industry_data.groupby('trade_date')[factor].transform(lambda x: x - x.median())\n", + "\n", + " industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform(lambda x: x.rank(pct=True))\n", + " industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol'])\n", + "\n", + "\n", + " industry_data = industry_data.rename(\n", + " columns={col: f'industry_{col}' for col in industry_data.columns if col not in ['ts_code', 'trade_date']})\n", + "\n", + " industry_data = industry_data.rename(columns={'ts_code': 'cat_l2_code'})\n", + " return industry_data\n", + "\n", + "industry_df = read_industry_data('../../data/sw_daily.h5')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "53f86ddc0677a6d7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.633429700Z", + "start_time": "2025-02-27T16:36:56.276375Z" + }, + "scrolled": true + }, + "outputs": [], + "source": [ + "origin_columns = df.columns.tolist()\n", + "origin_columns = [col for col in origin_columns if col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'l2_code']]\n", + "origin_columns = [col for col in origin_columns if col not in index_data.columns]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "dbe2fd8021b9417f", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.633429700Z", + "start_time": "2025-02-27T16:36:56.417914Z" + }, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 5567976 entries, 1962 to 5567975\n", + "Data columns (total 72 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 turnover_rate float64 \n", + " 8 pe_ttm float64 \n", + " 9 circ_mv float64 \n", + " 10 volume_ratio float64 \n", + " 11 is_st bool \n", + " 12 up_limit float64 \n", + " 13 down_limit float64 \n", + " 14 buy_sm_vol float64 \n", + " 15 sell_sm_vol float64 \n", + " 16 buy_lg_vol float64 \n", + " 17 sell_lg_vol float64 \n", + " 18 buy_elg_vol float64 \n", + " 19 sell_elg_vol float64 \n", + " 20 net_mf_vol float64 \n", + " 21 cat_l2_code object \n", + " 22 log_close float64 \n", + " 23 up float64 \n", + " 24 down float64 \n", + " 25 atr_14 float64 \n", + " 26 atr_6 float64 \n", + " 27 obv float64 \n", + " 28 maobv_6 float64 \n", + " 29 obv-maobv_6 float64 \n", + " 30 rsi_3 float64 \n", + " 31 rsi_6 float64 \n", + " 32 rsi_9 float64 \n", + " 33 return_5 float64 \n", + " 34 return_10 float64 \n", + " 35 return_20 float64 \n", + " 36 avg_close_5 float64 \n", + " 37 std_return_5 float64 \n", + " 38 std_return_15 float64 \n", + " 39 std_return_25 float64 \n", + " 40 std_return_90 float64 \n", + " 41 std_return_90_2 float64 \n", + " 42 std_return_5 / std_return_90 float64 \n", + " 43 std_return_5 / std_return_25 float64 \n", + " 44 std_return_90 - std_return_90_2 float64 \n", + " 45 ema_5 float64 \n", + " 46 ema_13 float64 \n", + " 47 ema_20 float64 \n", + " 48 ema_60 float64 \n", + " 49 act_factor1 float64 \n", + " 50 act_factor2 float64 \n", + " 51 act_factor3 float64 \n", + " 52 act_factor4 float64 \n", + " 53 cat_af1 bool \n", + " 54 cat_af2 bool \n", + " 55 cat_af3 bool \n", + " 56 cat_af4 bool \n", + " 57 act_factor5 float64 \n", + " 58 act_factor6 float64 \n", + " 59 rank_act_factor1 float64 \n", + " 60 rank_act_factor2 float64 \n", + " 61 rank_act_factor3 float64 \n", + " 62 active_buy_volume_large float64 \n", + " 63 active_buy_volume_big float64 \n", + " 64 active_buy_volume_small float64 \n", + " 65 buy_lg_vol_minus_sell_lg_vol float64 \n", + " 66 buy_elg_vol_minus_sell_elg_vol float64 \n", + " 67 log(circ_mv) float64 \n", + " 68 alpha_022 float64 \n", + " 69 alpha_003 float64 \n", + " 70 alpha_007 float64 \n", + " 71 alpha_013 float64 \n", + "dtypes: bool(5), datetime64[ns](1), float64(64), object(2)\n", + "memory usage: 2.8+ GB\n", + "None\n" + ] + } + ], + "source": [ + "def filter_data(df):\n", + " # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1'))\n", + " df = df[~df['is_st']]\n", + " df = df[~df['ts_code'].str.endswith('BJ')]\n", + " df = df[~df['ts_code'].str.startswith('30')]\n", + " df = df[~df['ts_code'].str.startswith('68')]\n", + " df = df[~df['ts_code'].str.startswith('8')]\n", + " df = df.reset_index(drop=True)\n", + " return df\n", + "\n", + "\n", + "df = filter_data(df)\n", + "df = get_technical_factor(df)\n", + "df = get_act_factor(df)\n", + "df = get_money_flow_factor(df)\n", + "df = get_alpha_factor(df)\n", + "# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\n", + "df = df.rename(columns={'l2_code': 'cat_l2_code'})\n", + "# df = df.merge(index_data, on='trade_date', how='left')\n", + "\n", + "print(df.info())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d345bcc43b15579e", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.648343Z", + "start_time": "2025-02-27T16:38:24.536432Z" + } + }, + "outputs": [], + "source": [ + "def create_deviation_within_dates(df, feature_columns):\n", + " groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组\n", + " new_columns = {}\n", + " ret_feature_columns = feature_columns[:]\n", + "\n", + " # 自动选择所有数值型特征\n", + " num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col]\n", + " num_features = [col for col in feature_columns if 'cat' not in col and 'industry' not in col]\n", + "\n", + " # 遍历所有数值型特征\n", + " for feature in num_features:\n", + " if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差\n", + " continue\n", + "\n", + " # grouped_median = df.groupby(['trade_date', groupby_col])[feature].transform('median')\n", + " # deviation_col_name = f'deviation_median_{feature}'\n", + " # new_columns[deviation_col_name] = df[feature] - grouped_median\n", + " # ret_feature_columns.append(deviation_col_name)\n", + "\n", + " grouped_mean = df.groupby(['trade_date', groupby_col])[feature].transform('mean')\n", + " deviation_col_name = f'deviation_mean_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " # 将新计算的偏差特征与原始 DataFrame 合并\n", + " df = pd.concat([df, pd.DataFrame(new_columns)], axis=1)\n", + "\n", + " # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']:\n", + " # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}']\n", + "\n", + " return df, ret_feature_columns\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "5f3d9aece75318cd", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.648343Z", + "start_time": "2025-02-27T16:38:24.876179Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed 124442 outliers.\n" + ] + } + ], + "source": [ + "def get_qcuts(series, quantiles):\n", + " q = pd.qcut(series, q=quantiles, labels=False, duplicates='drop')\n", + " return q[-1] # 返回窗口最后一个元素的分位数标签\n", + "\n", + "\n", + "import pandas as pd\n", + "\n", + "\n", + "def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99):\n", + " if not (0 <= lower_percentile < upper_percentile <= 1):\n", + " raise ValueError(\"Percentile values must satisfy 0 <= lower_percentile < upper_percentile <= 1.\")\n", + "\n", + " # Calculate lower and upper bounds based on percentiles\n", + " lower_bound = label.quantile(lower_percentile)\n", + " upper_bound = label.quantile(upper_percentile)\n", + "\n", + " # Filter out values outside the bounds\n", + " filtered_label = label[(label >= lower_bound) & (label <= upper_bound)]\n", + "\n", + " # Print the number of removed outliers\n", + " print(f\"Removed {len(label) - len(filtered_label)} outliers.\")\n", + " return filtered_label\n", + "\n", + "\n", + "def calculate_risk_adjusted_target(df, days=5):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n", + " df['future_return'] = (df['future_close'] - df['close']) / df['close']\n", + "\n", + " df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(\n", + " level=0, drop=True)\n", + " df['sharpe_ratio'] = df['future_return'] * df['future_volatility']\n", + " df['sharpe_ratio'].replace([np.inf, -np.inf], np.nan, inplace=True)\n", + "\n", + " return df['sharpe_ratio']\n", + "\n", + "\n", + "future_close = df.groupby('ts_code')['close'].shift(-4)\n", + "future_return = (future_close - df['close']) / df['close']\n", + "df['label'] = future_return\n", + "df['label'] = remove_outliers_label_percentile(df['label'])\n", + "\n", + "# df = df.apply(lambda x: x.astype('float32') if x.dtype in ['float64', 'float32'] else x)\n", + "df = df.sort_values(by=['trade_date', 'ts_code'])\n", + "train_data = df[(df['trade_date'] <= '2023-01-01') & (df['trade_date'] >= '2016-01-01')]\n", + "test_data = df[(df['trade_date'] >= '2023-01-01') & (df['trade_date'] <= '2025-02-26')]\n", + "\n", + "train_data = train_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "test_data = test_data.groupby('trade_date', group_keys=False).apply(lambda x: x.nlargest(1000, 'return_20'))\n", + "\n", + "train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "train_data = train_data.merge(index_data, on='trade_date', how='left')\n", + "test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "test_data = test_data.merge(index_data, on='trade_date', how='left')\n", + "\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "93d47ef451968346", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.648343Z", + "start_time": "2025-02-27T16:38:53.216704Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['turnover_rate', 'pe_ttm', 'volume_ratio', 'cat_l2_code', 'log_close', 'up', 'down', 'atr_14', 'atr_6', 'obv', 'maobv_6', 'obv-maobv_6', 'rsi_3', 'rsi_6', 'rsi_9', 'return_5', 'return_10', 'return_20', 'avg_close_5', 'std_return_5', 'std_return_15', 'std_return_25', 'std_return_90', 'std_return_90_2', 'std_return_5 / std_return_90', 'std_return_5 / std_return_25', 'std_return_90 - std_return_90_2', 'ema_5', 'ema_13', 'ema_20', 'ema_60', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'cat_af1', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol', 'buy_elg_vol_minus_sell_elg_vol', 'log(circ_mv)', 'alpha_022', 'alpha_003', 'alpha_007', 'alpha_013', 'industry_obv', 'industry_return_5', 'industry_return_20', 'industry_ema_5', 'industry_ema_13', 'industry_ema_20', 'industry_ema_60', 'industry_act_factor1', 'industry_act_factor2', 'industry_act_factor3', 'industry_act_factor4', 'industry_act_factor5', 'industry_act_factor6', 'industry_rank_act_factor1', 'industry_rank_act_factor2', 'industry_rank_act_factor3', 'industry_obv_deviation', 'industry_return_5_deviation', 'industry_return_20_deviation', 'industry_act_factor1_deviation', 'industry_act_factor2_deviation', 'industry_act_factor3_deviation', 'industry_act_factor4_deviation', 'industry_return_5_percentile', '000852.SH_MACD', '000905.SH_MACD', '399006.SZ_MACD', '000852.SH_MACD_hist', '000905.SH_MACD_hist', '399006.SZ_MACD_hist', '000852.SH_RSI', '000905.SH_RSI', '399006.SZ_RSI', '000852.SH_Signal_line', '000905.SH_Signal_line', '399006.SZ_Signal_line', '000852.SH_daily_return', '000905.SH_daily_return', '399006.SZ_daily_return']\n" + ] + } + ], + "source": [ + "feature_columns = [col for col in train_data.columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "feature_columns = [col for col in feature_columns if not col.startswith('_')]\n", + "print(feature_columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "572576eea818c865", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.648343Z", + "start_time": "2025-02-27T16:38:53.484283Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "feature_columns size: 221\n", + "feature_columns size: 221\n", + "1136428\n", + "最小日期: 2017-04-06\n", + "最大日期: 2022-12-30\n", + "408601\n", + "最小日期: 2023-01-03\n", + "最大日期: 2025-02-26\n" + ] + } + ], + "source": [ + "feature_columns_new = feature_columns[:]\n", + "train_data, feature_columns_new = create_deviation_within_dates(train_data, feature_columns)\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "test_data, feature_columns_new = create_deviation_within_dates(test_data, feature_columns)\n", + "print(f'feature_columns size: {len(feature_columns_new)}')\n", + "\n", + "train_data = train_data.dropna(subset=feature_columns_new)\n", + "train_data = train_data.dropna(subset=['label'])\n", + "train_data = train_data.reset_index(drop=True)\n", + "\n", + "# print(test_data.tail())\n", + "test_data = test_data.dropna(subset=feature_columns_new)\n", + "# test_data = test_data.dropna(subset=['label'])\n", + "test_data = test_data.reset_index(drop=True)\n", + "\n", + "print(len(train_data))\n", + "print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "print(len(test_data))\n", + "print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2d7e37432f551aea", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.648343Z", + "start_time": "2025-02-27T16:39:44.144179Z" + } + }, + "outputs": [], + "source": [ + "cat_columns = [col for col in df.columns if col.startswith('cat')]\n", + "for col in cat_columns:\n", + " train_data[col] = train_data[col].astype('category')\n", + " test_data[col] = test_data[col].astype('category')" + ] + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "\n", + "class MultiTaskNNTransformerModel(nn.Module):\n", + " def __init__(self, input_dim, hidden_dim_nn, hidden_dim_transformer, num_heads, num_layers,\n", + " output_dim, task_type=\"regression\", num_classes=None):\n", + " super(MultiTaskNNTransformerModel, self).__init__()\n", + "\n", + " # 参数检查\n", + " if task_type not in [\"regression\", \"classification\", \"ranking\"]:\n", + " raise ValueError(\"task_type must be 'regression', 'classification', or 'ranking'\")\n", + " if task_type == \"classification\" and num_classes is None:\n", + " raise ValueError(\"num_classes must be specified for classification tasks\")\n", + "\n", + " # 3层全连接神经网络\n", + " self.fc1 = nn.Linear(input_dim, hidden_dim_nn)\n", + " self.fc2 = nn.Linear(hidden_dim_nn, hidden_dim_nn)\n", + " self.fc3 = nn.Linear(hidden_dim_nn, hidden_dim_transformer)\n", + " self.relu = nn.ReLU()\n", + "\n", + " # Transformer层\n", + " self.transformer = nn.Transformer(\n", + " d_model=hidden_dim_transformer, # Transformer的输入维度\n", + " nhead=num_heads, # 多头注意力机制的头数\n", + " num_encoder_layers=num_layers, # 编码器层数\n", + " num_decoder_layers=num_layers, # 解码器层数\n", + " dim_feedforward=hidden_dim_transformer * 2 # 前馈网络的隐藏层维度\n", + " )\n", + "\n", + " # 输出层\n", + " if task_type == \"classification\":\n", + " self.output_layer = nn.Linear(hidden_dim_transformer, num_classes) # 分类任务\n", + " else:\n", + " self.output_layer = nn.Linear(hidden_dim_transformer, output_dim) # 回归或排序任务\n", + "\n", + " # 激活函数(用于分类任务的softmax或排序任务的sigmoid)\n", + " self.task_type = task_type\n", + " if task_type == \"classification\":\n", + " self.activation = nn.Softmax(dim=1) # 分类任务使用Softmax\n", + " elif task_type == \"ranking\":\n", + " self.activation = nn.Sigmoid() # 排序任务使用Sigmoid\n", + " else:\n", + " self.activation = None # 回归任务不需要激活函数\n", + "\n", + " def forward(self, x):\n", + " \"\"\"\n", + " 前向传播函数。\n", + "\n", + " :param x: 输入数据 (batch_size, input_dim)\n", + " :return: 模型的输出 (batch_size, output_dim)\n", + " \"\"\"\n", + " # Step 1: 通过3层全连接神经网络提取特征\n", + " x = self.relu(self.fc1(x)) # 第一层\n", + " x = self.relu(self.fc2(x)) # 第二层\n", + " x = self.relu(self.fc3(x)) # 第三层\n", + "\n", + " # Step 2: 添加序列维度 (batch_size, seq_len=1, hidden_dim_transformer)\n", + " x = x.unsqueeze(1)\n", + "\n", + " # Step 3: 通过Transformer处理\n", + " transformer_output = self.transformer(x, x).squeeze(1) # 移除序列维度\n", + "\n", + " # Step 4: 通过输出层得到最终预测\n", + " output = self.output_layer(transformer_output)\n", + "\n", + " # Step 5: 根据任务类型应用激活函数\n", + " if self.activation is not None:\n", + " output = self.activation(output)\n", + "\n", + " return output" + ], + "id": "d8a5eba1e446b79a" + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "8f134d435f71e9e2", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.668543Z", + "start_time": "2025-02-27T16:39:44.618725Z" + }, + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "\n", + "# 自定义Dataset类\n", + "class TradeDateDataset(Dataset):\n", + " def __init__(self, data_df, feature_columns, label_column, scaler=None, one_hot_encoder=None):\n", + " self.data = []\n", + "\n", + " # 按trade_date分组\n", + " grouped = data_df.groupby('trade_date')\n", + " for trade_date, group in grouped:\n", + " X = group[feature_columns].values\n", + " y = group[label_column].values\n", + "\n", + " # 标准化数值型特征\n", + " if scaler is not None:\n", + " numeric_columns = group[feature_columns].select_dtypes(include=['float64', 'int64']).columns\n", + " X[:, [feature_columns.index(col) for col in numeric_columns]] = scaler.transform(\n", + " group[numeric_columns]\n", + " )\n", + "\n", + " # 对类别型特征进行One-Hot编码\n", + " if one_hot_encoder is not None:\n", + " categorical_columns = group[feature_columns].select_dtypes(include=['object', 'category']).columns\n", + " X_categorical = one_hot_encoder.transform(group[categorical_columns]).toarray()\n", + " X = np.hstack([X, X_categorical]) # 将One-Hot编码与数值型特征拼接\n", + "\n", + " self.data.append((X, y))\n", + "\n", + " def __len__(self):\n", + " return len(self.data)\n", + "\n", + " def __getitem__(self, idx):\n", + " return self.data[idx]\n", + "\n", + "def train_transformer_model(train_data_df, test_data_df, feature_columns, label_column,\n", + " output_dim=1, task='regression',\n", + " hidden_dim=64, num_heads=4, num_layers=2,\n", + " dropout=0.1, learning_rate=0.001, num_epochs=10, batch_size=32):\n", + " # 数据预处理\n", + " train_data_df = train_data_df.dropna(subset=[label_column])\n", + " test_data_df = test_data_df.dropna(subset=[label_column])\n", + "\n", + " # 标准化数值型特征\n", + " scaler = StandardScaler()\n", + " numeric_columns = train_data_df[feature_columns].select_dtypes(include=['float64', 'int64']).columns\n", + " scaler.fit(train_data_df[numeric_columns])\n", + "\n", + " # 对类别型特征进行One-Hot编码\n", + " one_hot_encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')\n", + " categorical_columns = train_data_df[feature_columns].select_dtypes(include=['object', 'category']).columns\n", + " one_hot_encoder.fit(train_data_df[categorical_columns])\n", + "\n", + " # 创建Dataset\n", + " train_dataset = TradeDateDataset(train_data_df, feature_columns, label_column, scaler, one_hot_encoder)\n", + " test_dataset = TradeDateDataset(test_data_df, feature_columns, label_column, scaler, one_hot_encoder)\n", + "\n", + " # 创建DataLoader\n", + " train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n", + " test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n", + "\n", + " # 初始化模型、损失函数和优化器\n", + " input_dim = len(numeric_columns) + len(one_hot_encoder.get_feature_names_out())\n", + " model = TransformerModel(input_dim, hidden_dim, output_dim, num_heads, num_layers, dropout)\n", + "\n", + " if task == 'classification':\n", + " criterion = nn.CrossEntropyLoss()\n", + " elif task == 'regression':\n", + " criterion = nn.MSELoss()\n", + " else:\n", + " raise ValueError(\"Unsupported task type. Choose 'classification' or 'regression'.\")\n", + "\n", + " optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n", + "\n", + " # 训练循环\n", + " train_losses, val_losses = [], []\n", + " for epoch in range(num_epochs):\n", + " model.train()\n", + " running_loss = 0.0\n", + "\n", + " for X_batch, y_batch in train_loader:\n", + " X_batch = torch.tensor(X_batch, dtype=torch.float32)\n", + " if task == 'classification':\n", + " y_batch = torch.tensor(y_batch, dtype=torch.long)\n", + " elif task == 'regression':\n", + " y_batch = torch.tensor(y_batch, dtype=torch.float32).unsqueeze(1)\n", + "\n", + " # 前向传播\n", + " output = model(X_batch)\n", + "\n", + " # 计算损失\n", + " loss = criterion(output, y_batch)\n", + "\n", + " # 反向传播\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " running_loss += loss.item()\n", + "\n", + " train_losses.append(running_loss / len(train_loader))\n", + " print(f\"Epoch {epoch+1}/{num_epochs}, Loss: {train_losses[-1]:.4f}\")\n", + "\n", + " # 测试阶段\n", + " model.eval()\n", + " val_loss = 0.0\n", + " with torch.no_grad():\n", + " for X_batch, y_batch in test_loader:\n", + " X_batch = torch.tensor(X_batch, dtype=torch.float32)\n", + " if task == 'classification':\n", + " y_batch = torch.tensor(y_batch, dtype=torch.long)\n", + " elif task == 'regression':\n", + " y_batch = torch.tensor(y_batch, dtype=torch.float32).unsqueeze(1)\n", + "\n", + " output = model(X_batch)\n", + " loss = criterion(output, y_batch)\n", + " val_loss += loss.item()\n", + "\n", + " val_losses.append(val_loss / len(test_loader))\n", + " print(f\"Validation Loss: {val_losses[-1]:.4f}\")\n", + "\n", + " # 可视化损失曲线\n", + " plt.plot(train_losses, label=\"Training Loss\")\n", + " plt.plot(val_losses, label=\"Validation Loss\")\n", + " plt.legend()\n", + " plt.show()\n", + "\n", + " return model, scaler, one_hot_encoder" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "4a4542e1ed6afe7d", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.668543Z", + "start_time": "2025-02-27T16:39:44.838044Z" + } + }, + "outputs": [], + "source": [ + "light_params = {\n", + " # 'objective': 'regression',\n", + " # 'metric': 'l2',\n", + " 'objective': 'quantile', # 分位回归\n", + " 'metric': 'quantile', # 使用 quantile 作为评估指标\n", + " 'alpha': 0.75, # 90% 分位数\n", + " 'learning_rate': 0.05,\n", + " 'is_unbalance': True,\n", + " 'num_leaves': 1024,\n", + " 'min_data_in_leaf': 128,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " 'feature_fraction': 0.7,\n", + " 'bagging_fraction': 0.7,\n", + " 'bagging_freq': 5,\n", + " 'lambda_l1': 1,\n", + " 'lambda_l2': 1,\n", + " # 'boosting_type': 'dart',\n", + " 'verbosity': -1,\n", + " 'seed': 17\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "beeb098799ecfa6a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.668543Z", + "start_time": "2025-02-27T16:39:45.091206Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 1136428\n", + "categorical_feature: [3, 35, 36, 37, 38]\n", + "Training until validation scores don't improve for 50 rounds\n", + "Early stopping, best iteration is:\n", + "[31]\ttrain's quantile: 0.014632\tvalid's quantile: 0.0152371\n", + "Evaluated only: quantile\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHFCAYAAADi7703AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABvFElEQVR4nO3deVxU9f7H8dcwbLJvyqIgIO67oLlkaKam5W0xWy2t7HfNuqW2d5f2tJuVdUttcWnPulbXSlNMRStXFHNfUVxABERAFAY4vz9GRhEkQHRY3s/H4zxgznzPOZ/PDDAfvud7vsdkGIaBiIiIiJTLwd4BiIiIiNRmKpZEREREKqBiSURERKQCKpZEREREKqBiSURERKQCKpZEREREKqBiSURERKQCKpZEREREKqBiSURERKQCKpZE6qA5c+ZgMpkwmUwsX768zPOGYRAVFYXJZKJfv37VOsa0adOYM2dOlbZZvnz5BWOqKZfqGJcj9gvZtm0bzz//PPv3778k+3/++ecxmUzV2taer4tIbaFiSaQO8/T0ZObMmWXWx8fHs3fvXjw9Pau97+oUS926dWPVqlV069at2se1F3vGvm3bNl544YVLViyNGTOGVatWVWvbuvyeitQUFUsiddhtt93GvHnzyM7OLrV+5syZ9OrVi7CwsMsSh8ViobCwEC8vL3r27ImXl9dlOW5NqIux5+XlVal9s2bN6NmzZ7WOVZdeF5FLRcWSSB12xx13APDll1/a1p04cYJ58+Zx3333lbtNQUEBL7/8Mm3atMHFxYXGjRtz7733cuzYMVub8PBwtm7dSnx8vO10X3h4OHD2tMynn37KY489RtOmTXFxcWHPnj0XPGWzZs0ahg0bhr+/P66urrRo0YLx48f/aX47duzg2muvxc3NjYCAAMaOHUtOTk6ZduHh4YwePbrM+n79+pU6DVnV2EePHo2Hhwd79uxh6NCheHh4EBoaymOPPUZ+fn6pYx06dIhbbrkFT09PfHx8uOuuu1i3bh0mk6nCHro5c+YwYsQIAPr37297vUu26devHx06dGDFihX07t0bNzc323s7d+5cBg0aRHBwMI0aNaJt27Y8/fTTnDx5stQxyjsNFx4ezvXXX8/PP/9Mt27daNSoEW3atGHWrFml2tnrdRGpTVQsidRhXl5e3HLLLaU+4L788kscHBy47bbbyrQvLi7mhhtuYPLkydx555389NNPTJ48mbi4OPr168epU6cA+O6774iMjKRr166sWrWKVatW8d1335Xa1zPPPENycjIzZszghx9+oEmTJuXGuGjRIvr27UtycjJvvvkmCxcu5B//+AdHjx6tMLejR48SGxvLli1bmDZtGp9++im5ubk8/PDDVX2Zyqhs7GDtefrLX/7CgAED+N///sd9993HW2+9xWuvvWZrc/LkSfr378+yZct47bXX+PrrrwkMDCz3PTjfddddx6uvvgrAe++9Z3u9r7vuOlublJQURo4cyZ133smCBQsYN24cALt372bo0KHMnDmTn3/+mfHjx/P1118zbNiwSr0OmzZt4rHHHmPChAn873//o1OnTtx///2sWLHiT7e91K+LSK1iiEidM3v2bAMw1q1bZyxbtswAjC1bthiGYRjdu3c3Ro8ebRiGYbRv396IjY21bffll18agDFv3rxS+1u3bp0BGNOmTbOtO3/bEiXHu+qqqy743LJly2zrWrRoYbRo0cI4depUlXJ86qmnDJPJZCQmJpZaP3DgwDLHaN68uTFq1Kgy+4iNjS2VQ1VjHzVqlAEYX3/9dam2Q4cONVq3bm17/N577xmAsXDhwlLt/vrXvxqAMXv27Apz/eabb8oc+9wcAOOXX36pcB/FxcWGxWIx4uPjDcDYtGmT7bnnnnvOOP/PffPmzQ1XV1fjwIEDtnWnTp0y/Pz8jL/+9a+2dfZ8XURqC/UsidRxsbGxtGjRglmzZrF582bWrVt3wVNwP/74Iz4+PgwbNozCwkLb0qVLF4KCgqp0xdPw4cP/tM2uXbvYu3cv999/P66urpXeN8CyZcto3749nTt3LrX+zjvvrNJ+ylOZ2EuYTKYyPTWdOnXiwIEDtsfx8fF4enpy7bXXlmpXcpr0Yvn6+nL11VeXWb9v3z7uvPNOgoKCMJvNODk5ERsbC8D27dv/dL9dunQpNa7N1dWVVq1alcrtQmrD6yJyuTjaOwARuTgmk4l7772Xd955h9OnT9OqVSv69u1bbtujR4+SlZWFs7Nzuc+np6dX+rjBwcF/2qZkHFSzZs0qvd8SGRkZRERElFkfFBRU5X2drzKxl3BzcytT6Lm4uHD69Gnb44yMDAIDA8tsW9666igv3tzcXPr27Yurqysvv/wyrVq1ws3NjYMHD3LzzTfbTqlWxN/fv8w6FxeXSm1bG14XkctFxZJIPTB69Gj+9a9/MWPGDF555ZULtgsICMDf35+ff/653OerMtVAZebtady4MWAd5FtV/v7+pKamlllf3jpXV9cyA4vBWvwFBASUWV/dOYcuxN/fn7Vr15ZZX16s1VFevEuXLuXIkSMsX77c1psEkJWVVSPHrAmX+nURuVx0Gk6kHmjatClPPPEEw4YNY9SoURdsd/3115ORkUFRURExMTFlltatW9vaVraHoSKtWrWynSIsr5ipSP/+/dm6dSubNm0qtf6LL74o0zY8PJw//vij1Lpdu3axc+fOqgddDbGxseTk5LBw4cJS67/66qtKbe/i4gJQpde7pIAq2bbE+++/X+l9XGoX+7qI1BbqWRKpJyZPnvynbW6//XY+//xzhg4dyqOPPkqPHj1wcnLi0KFDLFu2jBtuuIGbbroJgI4dO/LVV18xd+5cIiMjcXV1pWPHjlWO67333mPYsGH07NmTCRMmEBYWRnJyMosWLeLzzz+/4Hbjx49n1qxZXHfddbz88ssEBgby+eefs2PHjjJt7777bkaOHMm4ceMYPnw4Bw4c4N///retZ+tSGzVqFG+99RYjR47k5ZdfJioqioULF7Jo0SIAHBwq/r+0Q4cOAHzwwQd4enri6upKREREuafJSvTu3RtfX1/Gjh3Lc889h5OTE59//nmZ4tKeLvZ1Eakt9JMq0oCYzWbmz5/Ps88+y7fffstNN93EjTfeyOTJk8sUQy+88AKxsbE88MAD9OjRo9KXo59v8ODBrFixguDgYB555BGuvfZaXnzxxT8dtxIUFER8fDzt2rXjwQcfZOTIkbi6uvLuu++WaXvnnXfy73//m0WLFnH99dczffp0pk+fTqtWraoVc1W5u7uzdOlS+vXrx5NPPsnw4cNJTk5m2rRpAPj4+FS4fUREBFOnTmXTpk3069eP7t2788MPP1S4jb+/Pz/99BNubm6MHDmS++67Dw8PD+bOnVtTaV20i31dRGoLk2EYhr2DEBGpj1599VX+8Y9/kJycXK1B7vWVXhepa3QaTkSkBpT0eLVp0waLxcLSpUt55513GDlyZIMuCPS6SH2gYklEpAa4ubnx1ltvsX//fvLz8wkLC+Opp57iH//4h71Dsyu9LlIf6DSciIiISAU0wFtERESkAiqWRERERCqgYklERESkAhrgXU3F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UCNXz13+6+9ERERELgN3p5rZj4olERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgIolERERkQqoWBIRERGpgN2LpWnTphEREYGrqyvR0dGsXLmywvbx8fFER0fj6upKZGQkM2bMKPX81q1bGT58OOHh4ZhMJqZOnVpmH9OnT6dTp054eXnh5eVFr169WLhwYU2mJSIiIvWEXYuluXPnMn78eP7+97+zceNG+vbty5AhQ0hOTi63fVJSEkOHDqVv375s3LiRZ599lkceeYR58+bZ2uTl5REZGcnkyZMJCgoqdz/NmjVj8uTJrF+/nvXr13P11Vdzww03sHXr1kuSp4iIiNRddi2W3nzzTe6//37GjBlD27ZtmTp1KqGhoUyfPr3c9jNmzCAsLIypU6fStm1bxowZw3333ceUKVNsbbp3787rr7/O7bffjouLS7n7GTZsGEOHDqVVq1a0atWKV155BQ8PD1avXn1J8hQREZG6y9FeBy4oKCAhIYGnn3661PpBgwbx+++/l7vNqlWrGDRoUKl1gwcPZubMmVgsFpycnKocR1FREd988w0nT56kV69eF2yXn59Pfn6+7XF2djYAFosFi8VS5ePWRSV5NpR8SzTEvJVzw9AQc4aGmbdyLru+KuxWLKWnp1NUVERgYGCp9YGBgaSmppa7TWpqarntCwsLSU9PJzg4uNLH37x5M7169eL06dN4eHjw3Xff0a5duwu2nzRpEi+88EKZ9cuWLcPNza3Sx60P4uLi7B2CXTTEvJVzw9AQc4aGmbdytg7XqSq7FUslTCZTqceGYZRZ92fty1v/Z1q3bk1iYiJZWVnMmzePUaNGER8ff8GC6ZlnnmHixIm2x9nZ2YSGhtK/f3/8/f2rdOy6ymKxEBcXx8CBA6vVi1dXNcS8lbNyrs8aYt7K+WzOJWeGqsJuxVJA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kPOLpfqYd8m8Mk5OTkZISIhx8803G1u3brU9Xx9zNgzD+OGHH4wOHToYLi4uRps2bYwPPvig1PP1Me9FixYZgLFz584yz9XHfLOzs41HH33UCAsLM1xdXY3IyEjj73//u5Gfn29rUxN5mwzDMKrb/SUiIiJS32nMkoiIiEgFVCyJiIiIVEDFkoiIiEgFVCyJiIiIVEDFkoiIiEgFVCyJiIiIVEDFkoiIiEgFVCyJiFRSeHg4U6dOtXcYInKZqVgSkVpp9OjR3HjjjQD069eP8ePHX7Zjz5kzBx8fnzLr161bx//93/9dtjhEpHZwtHcAIiKXS0FBAc7OztXevnHjxjUYjYjUFepZEpFabfTo0cTHx/P2229jMpkwmUzs378fgG3btjF06FA8PDwIDAzk7rvvJj093bZtv379ePjhh5k4cSIBAQEMHDgQgDfffJOOHTvi7u5OaGgo48aNIzc3F4Dly5dz7733cuLECdvxnn/+eaDsabjk5GRuuOEGPDw88PLy4tZbb+Xo0aO2559//nm6dOnCp59+Snh4ON7e3tx+++3k5OTY2vz3v/+lY8eONGrUCH9/f6655hpOnjx5iV5NEakOFUsiUqu9/fbb9OrViwceeICUlBRSUlIIDQ0lJSWF2NhYunTpwvr16/n55585evQot956a6ntP/74YxwdHfntt994//33AXBwcOCdd95hy5YtfPzxxyxdupQnn3wSgN69ezN16lS8vLxsx3v88cfLxGUYBjfeeCOZmZnEx8cTFxfH3r17ue2220q127t3L99//z0//vgjP/74I/Hx8UyePBmAlJQU7rjjDu677z62b9/O8uXLufnmm9EtO0VqF52GE5FazdvbG2dnZ9zc3AgKCrKtnz59Ot26dePVV1+1rZs1axahoaHs2rWLVq1aARAVFcW///3vUvs8d/xTREQEL730Eg8++CDTpk3D2dkZb29vTCZTqeOdb8mSJfzxxx8kJSURGhoKwKeffkr79u1Zt24d3bt3B6C4uJg5c+bg6ekJwN13380vv/zCK6+8QkpKCoWFhdx88800b94cgI4dO17EqyUil4J6lkSkTkpISGDZsmV4eHjYljZt2gDW3pwSMTExZbZdtmwZAwcOpGnTpnh6enLPPfeQkZFRpdNf27dvJzQ01FYoAbRr1w4fHx+2b99uWxceHm4rlACCg4NJS0sDoHPnzgwYMICOHTsyYsQIPvzwQ44fP175F0FELgsVSyJSJxUXFzNs2DASExNLLbt37+aqq66ytXN3dy+13YEDBxg6dCgdOnRg3rx5JCQk8N577wFgsVgqfXzDMDCZTH+63snJqdTzJpOJ4uJiAMxmM3FxcSxcuJB27drxn//8h9atW5OUlFTpOETk0lOxJCK1nrOzM0VFRaXWdevWja1btxIeHk5UVFSp5fwC6Vzr16+nsLCQN954g549e9KqVSuOHDnyp8c7X7t27UhOTubgwYO2ddu2bePEiRO0bdu20rmZTCb69OnDCy+8wMaNG3F2dua7776r9PYicumpWBKRWi88PJw1a9awf/9+0tPTKS4u5qGHHiIzM5M77riDtWvXsm/fPhYvXsx9991XYaHTokULCgsL+c9//sO+ffv49NNPmTFjRpnj5ebm8ssvv5Cenk5eXl6Z/VxzzTV06tSJu+66iw0bNrB27VruueceYmNjyz31V541a9bw6quvsn79epKTk/n22285duxYlYotEbn0VCyJSK33+OOPYzabadeuHY0bNyY5OZmQkBB+++03ioqKGDx4MB06dODRRx/F29sbB4cL/2nr0qULb775Jq+99hodOnTg888/Z9KkSaXa9O7dm7Fjx3LbbbfRuHHjMgPEwdoj9P333+Pr68tVV13FNddcQ2RkJHPnzq10Xl5eXqxYsYKhQ4fSqlUr/vGPf/DGG28wZMiQyr84InLJmQxdoyoiIiJyQepZEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCqhYEhEREamAiiURERGRCvw/j4nwo2mmCrYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAHFCAYAAADv3Q81AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1RUR/vA8e/SmyC9KAIq2Cs2NBELoIjYYokaxNjim2KPPWqMomKPlVhQEyN5DWpioigKithAhbyCLfYGKhFBUanz+8PD/bkCAkZRkvmcsyfZO3PvnXlY3IfZ2RmVEEIgSZIkSZIkSRIAGm+7AZIkSZIkSZL0LpEJsiRJkiRJkiQ9RybIkiRJkiRJkvQcmSBLkiRJkiRJ0nNkgixJkiRJkiRJz5EJsiRJkiRJkiQ9RybIkiRJkiRJkvQcmSBLkiRJkiRJ0nNkgixJkiRJkiRJz5EJsiRJ0j/Ihg0bUKlUhT7GjRv3Ru555swZZsyYwdWrV9/I9f+Oq1evolKp2LBhw9tuyivbtWsXM2bMeNvNkKR/Fa233QBJkiTp9QsODqZmzZpqx+zs7N7Ivc6cOcPXX39NmzZtcHR0fCP3eFW2trYcPXqUatWqve2mvLJdu3axYsUKmSRLUhmSCbIkSdI/UN26dWnSpMnbbsbfkp2djUqlQkvr1d+qdHV1adGixWtsVdl5/PgxBgYGb7sZkvSvJKdYSJIk/Qv99NNPuLm5YWhoiJGRER06dCAuLk6tzokTJ/jwww9xdHREX18fR0dH+vbty7Vr15Q6GzZsoFevXgC0bdtWmc6RP6XB0dGRgQMHFrh/mzZtaNOmjfL8wIEDqFQqvv/+e8aOHUulSpXQ1dXl4sWLAOzbt4/27dtjbGyMgYEBrVq1Yv/+/cX2s7ApFjNmzEClUvG///2PXr16YWJigpmZGWPGjCEnJ4fz58/TsWNHKlSogKOjI4GBgWrXzG/rDz/8wJgxY7CxsUFfXx93d/cCMQT49ddfcXNzw8DAgAoVKuDp6cnRo0fV6uS36dSpU/Ts2RNTU1OqVavGwIEDWbFiBYDadJn86SwrVqygdevWWFlZYWhoSL169QgMDCQ7O7tAvOvWrUtsbCzvv/8+BgYGVK1alblz55KXl6dW98GDB4wdO5aqVauiq6uLlZUVnTp14ty5c0qdrKwsZs2aRc2aNdHV1cXS0pKPP/6Ye/fuFfszkaTyQCbIkiRJ/0C5ubnk5OSoPfIFBATQt29fateuzX//+1++//57Hj58yPvvv8+ZM2eUelevXqVGjRosWbKEPXv2MG/ePJKSkmjatCkpKSkA+Pj4EBAQADxL1o4ePcrRo0fx8fF5pXZPmjSJ69evs3r1anbu3ImVlRU//PADXl5eGBsbs3HjRv773/9iZmZGhw4dSpQkF6V37940aNCA0NBQhg4dyuLFixk9ejTdunXDx8eH7du3065dOyZMmMC2bdsKnD958mQuX77M2rVrWbt2Lbdv36ZNmzZcvnxZqfPjjz/StWtXjI2N2bJlC+vWrSM1NZU2bdoQHR1d4Jo9evSgevXqbN26ldWrV/PVV1/Rs2dPACW2R48exdbWFoBLly7Rr18/vv/+e3777TcGDx7M/Pnz+eSTTwpcOzk5mf79+/PRRx/x66+/4u3tzaRJk/jhhx+UOg8fPuS9994jKCiIjz/+mJ07d7J69WpcXFxISkoCIC8vj65duzJ37lz69evH77//zty5cwkPD6dNmzY8efLklX8mkvTOEJIkSdI/RnBwsAAKfWRnZ4vr168LLS0t8cUXX6id9/DhQ2FjYyN69+5d5LVzcnLEo0ePhKGhoVi6dKlyfOvWrQIQkZGRBc5xcHAQ/v7+BY67u7sLd3d35XlkZKQAROvWrdXqZWRkCDMzM+Hr66t2PDc3VzRo0EA0a9bsJdEQ4sqVKwIQwcHByrHp06cLQCxcuFCtbsOGDQUgtm3bphzLzs4WlpaWokePHgXa2rhxY5GXl6ccv3r1qtDW1hZDhgxR2mhnZyfq1asncnNzlXoPHz4UVlZWomXLlgXaNG3atAJ9+Oyzz0RJ3q5zc3NFdna22LRpk9DU1BT3799Xytzd3QUgjh8/rnZO7dq1RYcOHZTnM2fOFIAIDw8v8j5btmwRgAgNDVU7HhsbKwCxcuXKYtsqSe86OYIsSZL0D7Rp0yZiY2PVHlpaWuzZs4ecnBwGDBigNrqsp6eHu7s7Bw4cUK7x6NEjJkyYQPXq1dHS0kJLSwsjIyMyMjI4e/bsG2n3Bx98oPb8yJEj3L9/H39/f7X25uXl0bFjR2JjY8nIyHile3Xu3Fntea1atVCpVHh7eyvHtLS0qF69utq0knz9+vVDpVIpzx0cHGjZsiWRkZEAnD9/ntu3b+Pn54eGxv+/3RoZGfHBBx9w7NgxHj9+/NL+FycuLo4uXbpgbm6OpqYm2traDBgwgNzcXC5cuKBW18bGhmbNmqkdq1+/vlrfdu/ejYuLCx4eHkXe87fffqNixYr4+vqq/UwaNmyIjY2N2mtIksor+SU9SZKkf6BatWoV+iW9O3fuANC0adNCz3s+kevXrx/79+/nq6++omnTphgbG6NSqejUqdMb+xg9f+rAi+3Nn2ZQmPv372NoaFjqe5mZmak919HRwcDAAD09vQLH09PTC5xvY2NT6LE//vgDgL/++gso2Cd4tqJIXl4eqampal/EK6xuUa5fv877779PjRo1WLp0KY6Ojujp6RETE8Nnn31W4Gdkbm5e4Bq6urpq9e7du0eVKlVeet87d+7w4MEDdHR0Ci3Pn34jSeWZTJAlSZL+RSwsLAD4+eefcXBwKLJeWloav/32G9OnT2fixInK8czMTO7fv1/i++np6ZGZmVngeEpKitKW5z0/Ivt8e5ctW1bkahTW1tYlbs/rlJycXOix/EQ0/7/5c3efd/v2bTQ0NDA1NVU7/mL/X2bHjh1kZGSwbds2tZ9lfHx8ia/xIktLS27evPnSOhYWFpibmxMWFlZoeYUKFV75/pL0rpAJsiRJ0r9Ihw4d0NLS4tKlSy/9OF+lUiGEQFdXV+342rVryc3NVTuWX6ewUWVHR0f+97//qR27cOEC58+fLzRBflGrVq2oWLEiZ86c4fPPPy+2flnasmULY8aMUZLaa9euceTIEQYMGABAjRo1qFSpEj/++CPjxo1T6mVkZBAaGqqsbFGc5+Orr6+vHM+/3vM/IyEEa9aseeU+eXt7M23aNCIiImjXrl2hdTp37kxISAi5ubk0b978le8lSe8ymSBLkiT9izg6OjJz5kymTJnC5cuX6dixI6ampty5c4eYmBgMDQ35+uuvMTY2pnXr1syfPx8LCwscHR05ePAg69ato2LFimrXrFu3LgDfffcdFSpUQE9PDycnJ8zNzfHz8+Ojjz7i008/5YMPPuDatWsEBgZiaWlZovYaGRmxbNky/P39uX//Pj179sTKyop79+7xxx9/cO/ePVatWvW6w1Qid+/epXv37gwdOpS0tDSmT5+Onp4ekyZNAp5NVwkMDKR///507tyZTz75hMzMTObPn8+DBw+YO3duie5Tr149AObNm4e3tzeamprUr18fT09PdHR06Nu3L+PHj+fp06esWrWK1NTUV+7TqFGj+Omnn+jatSsTJ06kWbNmPHnyhIMHD9K5c2fatm3Lhx9+yObNm+nUqRMjR46kWbNmaGtrc/PmTSIjI+natSvdu3d/5TZI0jvhbX9LUJIkSXp98lexiI2NfWm9HTt2iLZt2wpjY2Ohq6srHBwcRM+ePcW+ffuUOjdv3hQffPCBMDU1FRUqVBAdO3YUCQkJha5MsWTJEuHk5CQ0NTXVVo3Iy8sTgYGBomrVqkJPT080adJEREREFLmKxdatWwtt78GDB4WPj48wMzMT2traolKlSsLHx6fI+vletorFvXv31Or6+/sLQ0PDAtdwd3cXderUKdDW77//XowYMUJYWloKXV1d8f7774sTJ04UOH/Hjh2iefPmQk9PTxgaGor27duLw4cPq9Upqk1CCJGZmSmGDBkiLC0thUqlEoC4cuWKEEKInTt3igYNGgg9PT1RqVIl8eWXX4rdu3cXWFXkxT4832cHBwe1Y6mpqWLkyJGiSpUqQltbW1hZWQkfHx9x7tw5pU52drZYsGCBcm8jIyNRs2ZN8cknn4g///yzwH0kqbxRCSHEW8vOJUmSJKmcOXDgAG3btmXr1q0v/fKgJEnll1zmTZIkSZIkSZKeIxNkSZIkSZIkSXqOnGIhSZIkSZIkSc+RI8iSJEmSJEmS9ByZIEuSJEmSJEnSc2SCLEmSJEmSJEnPkRuFSFIp5eXlcfv2bSpUqFCqbWElSZIkSXp7hBA8fPgQOzs7NDRePkYsE2RJKqXbt29jb2//tpshSZIkSdIruHHjBpUrV35pHZkgS1IpVahQAYArV65gZmb2llvzz5Wdnc3evXvx8vJCW1v7bTfnH0vGuWzIOJcNGeeyUV7jnJ6ejr29vfI+/jIyQZakUsqfVlGhQgWMjY3fcmv+ubKzszEwMMDY2Lhc/QNc3sg4lw0Z57Ih41w2ynucSzI9Un5JT5IkSZIkSZKeIxNkSZIkSZIkSXqOTJAlSZIkSZIk6TkyQZYkSZIkSZKk58gEWZIkSZIkSZKeIxNkSZIkSZIkSXqOTJAlSZIkSZIk6TkyQZYkSZIkSZKk58gEWZIkSZIkSZKeIxNkSZIkSZIk6ZXMmDEDlUql9rCxsVHKhRDMmDEDOzs79PX1adOmDYmJiWrX+O6772jTpg3GxsaoVCoePHhQ5P0yMzNp2LAhKpWK+Pj4N9QrmSBLf5NKpWLHjh1vuxlFunr16hv/JZIkSZKkf7M6deqQlJSkPE6fPq2UBQYGsmjRIpYvX05sbCw2NjZ4enry8OFDpc7jx4/p2LEjkydPLvZe48ePx87O7o3043kyQZYUM2bMoGHDhq98/tWrVxk8eDBOTk7o6+tTrVo1pk+fTlZW1utrpCRJkiRJ7xQtLS1sbGyUh6WlJfBs9HjJkiVMmTKFHj16ULduXTZu3Mjjx4/58ccflfNHjRrFxIkTadGixUvvs3v3bvbu3cuCBQveaH9AJsjSa3Tu3Dny8vIICgoiMTGRxYsXs3r16hL9RShJkiRJUvn0559/Ymdnh5OTEx9++CGXL18G4MqVKyQnJ+Pl5aXU1dXVxd3dnSNHjpTqHnfu3GHo0KF8//33GBgYvNb2F0brjd9BKlN5eXnMnz+fNWvWcOPGDaytrfnkk0+YMmUKEyZMYPv27dy8eRMbGxv69+/PtGnT0NbWZsOGDXz99dfAs2kTAMHBwQwcOLDE9+7YsSMdO3ZUnletWpXz58+zatWqEv+1l5iYyPjx4zl06BBCCBo2bMiGDRuoVq0aeXl5zJo1i++++4579+5Rq1Yt5s6dq3bPmJgYPvnkE86ePUvdunWZMmVKgXucOXOGcePGERUVhaGhIV5eXixevBgLC4sS9xWg+Zz95GgZluocqeR0NQWBzaDujD1k5qrednP+sWScy4aMc9mQcS4b+XEGaN68OZs2bcLFxYU7d+4wa9YsWrZsSWJiIsnJyQBYW1urnW9tbc21a9dKfD8hBAMHDmT48OE0adKEq1evvq6uFEkmyP8wkyZNYs2aNSxevJj33nuPpKQkzp07B0CFChXYsGEDdnZ2nD59mqFDh1KhQgXGjx9Pnz59SEhIICwsjH379gFgYmLyt9uTlpaGmZlZiereunWL1q1b06ZNGyIiIjA2Nubw4cPk5OQAsHTpUhYuXEhQUBCNGjVi/fr1dOnShcTERJydncnIyKBz5860a9eOH374gStXrjBy5Ei1eyQlJeHu7s7QoUNZtGgRT548YcKECfTu3ZuIiIhC25WZmUlmZqbyPD09HQBdDYGmpniVsEgloKsh1P4rvRkyzmVDxrlsyDiXjfz4Zmdn4+HhoRyvWbMmTZo0oWbNmqxfv57mzZsDkJOTQ3Z2tlIvNzdXOf95+e/32dnZamXLly8nLS2NcePGqZW9WK84pakrE+R/kIcPH7J06VKWL1+Ov78/ANWqVeO9994DYOrUqUpdR0dHxo4dy08//cT48ePR19fHyMhImUf0Oly6dIlly5axcOHCEtVfsWIFJiYmhISEoK2tDYCLi4tSvmDBAiZMmMCHH34IwLx584iMjGTJkiWsWLGCzZs3k5uby/r16zEwMKBOnTrcvHmT//znP8o1Vq1aRePGjQkICFCOrV+/Hnt7ey5cuKB2v3xz5sxRRtefN7VRHgYGuSULhvTKvmmS97ab8K8g41w2ZJzLhoxz2QgPDy/0uI2NjTLQBRAaGkrVqlWV8oSEBAwNDdm1a5faeflf7tu7dy9GRkbK8ZCQEE6cOIGhofqnti1atMDd3b3AYFhRHj9+XKJ6IBPkf5SzZ8+SmZlJ+/btCy3/+eefWbJkCRcvXuTRo0fk5OQoL97X7fbt23Ts2JFevXoxZMiQEp0THx/P+++/ryTHz0tPT+f27du0atVK7XirVq34448/gGf9b9CggdrcJDc3N7X6J0+eJDIyUu0XL9+lS5cKTZAnTZrEmDFj1Npib29P27ZtMTc3L1HfpNLLzs4mPDwcT0/PQl8T0ush41w2ZJzLhoxz2XhZnDMzM/nss8/o2rUrH3/8MTNmzODp06d06tQJgKysLPz9/QkICFCO5ctPgL28vKhYsaJyvG7dusqnt/Ds02AfHx9+/PFHmjVrRuXKlUvU7uevURyZIP+D6OvrF1l27NgxPvzwQ77++ms6dOigjNSWdHS3NG7fvk3btm1xc3Pju+++K/F5L2t/vvz50fmEEMoxIYr/SC0vLw9fX1/mzZtXoMzW1rbQc3R1ddHV1S1wXFtbW/4DXAZknMuGjHPZkHEuGzLOZUNbW5tJkybh6+tLlSpVuHv3LrNmzSI9PZ1Bgwaho6PDqFGjmDNnDjVr1sTZ2ZmAgAAMDAzw8/NTfkbJyckkJycrc4vPnTtHhQoVqFKlCmZmZlSrVk3tvqampgDUqFEDJyenUrW3pGSC/A/i7OyMvr4++/fvLzBqe/jwYRwcHNS+tPbiBHkdHR1lXtCrunXrFm3btsXV1ZXg4GA0NEq+UEr9+vXZuHEj2dnZBV7ExsbG2NnZER0dTevWrZXjR44coVmzZ98UqF27Nt9//z1PnjxRku1jx46pXadx48aEhobi6OiIlpZ8+UuSJEnS33Hz5k369u1LSkoKlpaWtGjRgmPHjuHg4AA8W7f4yZMnfPrpp6SmptK8eXP27t1LhQoVlGusXr1abSpj/vt8aRcLeK2E9I8yY8YMYWpqKjZu3CguXrwojh49KtauXSt27NghtLS0xJYtW8TFixfF0qVLhZmZmTAxMVHO3bx5szA0NBRxcXHi3r174unTp8XeDxDbt28XQghx69YtUb16ddGuXTtx8+ZNkZSUpDxKIiUlRZibm4sePXqI2NhYceHCBbFp0yZx7tw5IYQQixcvFsbGxiIkJEScO3dOTJgwQWhra4sLFy4IIYR4+PChsLCwEH379hWJiYni999/F9WrVxeAiIuLU9poaWkpevbsKY4fPy4uXbok9uzZIz7++GORk5NTonampaUJQKSkpJSovvRqsrKyxI4dO0RWVtbbbso/moxz2ZBxLhsyzmWjvMY5//07LS2t2LpyHeR/mK+++oqxY8cybdo0atWqRZ8+fbh79y5du3Zl9OjRfP755zRs2JAjR47w1VdfqZ37wQcf0LFjR9q2bYulpSVbtmwp1b337t3LxYsXiYiIoHLlytja2iqPkjA3NyciIoJHjx7h7u6Oq6sra9asUUaTR4wYwdixYxk7diz16tUjLCyMX3/9FWdnZwCMjIzYuXMnZ86coVGjRkyZMqXAVAo7OzsOHz5Mbm4uHTp0oG7duowcORITE5NSjXZLkiRJkvTPpRKiBBM3JUlSpKenY2JiQkpKivyS3huUnZ3Nrl276NSpk5xL+AbJOJcNGeeyIeNcNsprnPPfv9PS0opdpEAOmUmSJEmSJEnSc2SCLBVp8+bNGBkZFfqoU6dOqa83fPjwIq83fPjwN9ADSZIkSZKk0pNf45eK1KVLF2UXnBe9ykcqM2fOZNy4cYWWvan1mCVJkiRJkkpLJshSkSpUqKC2DMvfZWVlhZWV1Wu7niRJkiRJ0psgp1hIkiRJkiRJ0nNkgiwpDhw4gEql4sGDB2V636tXr6JSqYiPjy+27ott3LBhg9p2lJL0d0VFReHr64udnR0qlYodO3aolc+YMYOaNWtiaGiIqakpHh4eHD9+XK1OZmYmX3zxBRYWFhgaGtKlSxdu3ryplOe/jgt7xMbGlkU3JUmSpJcoFwnyypUrcXJyQk9PD1dXVw4dOqSUCSGYMWMGdnZ26Ovr06ZNGxITE9XOL+7NCuDChQt07doVCwsLjI2NadWqFZGRkWp1CnszW716tVJ+4MABunbtiq2tLYaGhjRs2JDNmzcX27/IyEjatm2LmZkZBgYGODs74+/vT05OjnLdohJXR0dHlixZUuw9AOLi4ujcuTNWVlbo6enh6OhInz59SElJAaBly5YkJSVhYmJSouu9C/r06cOFCxfedjOkf5CMjAwaNGjA8uXLCy13cXFh+fLlnD59mujoaBwdHfHy8uLevXtKnVGjRrF9+3ZCQkKIjo7m0aNHdO7cWdmpMv937fnHkCFDcHR0pEmTJmXST0mSJKlo73yC/NNPPzFq1CimTJlCXFwc77//Pt7e3ly/fh2AwMBAFi1axPLly4mNjcXGxgZPT08ePnyoXKO4NysAHx8fcnJyiIiI4OTJkzRs2JDOnTuTnJys1p7g4GC1NzV/f3+l7MiRI9SvX5/Q0FD+97//MWjQIAYMGMDOnTuL7F9iYiLe3t40bdqUqKgoTp8+zbJly9DW1iYvL+91hZG7d+/i4eGBhYUFe/bs4ezZs6xfvx5bW1seP34MPNtq2sbGBpVK9dru+6bp6+vLec3Sa+Xt7c2sWbPo0aNHoeX9+vXDw8ODqlWrUqdOHRYtWkR6ejr/+9//AEhLS2PdunUsXLgQDw8PGjVqxA8//MDp06fZt28f8P+/a/kPc3Nzfv31VwYNGlSufv8kSZL+sd70tn5/V7NmzcTw4cPVjtWsWVNMnDhR5OXlCRsbGzF37lyl7OnTp8LExESsXr1aCCHEgwcPhLa2tggJCVHq3Lp1S2hoaIiwsDAhhBD37t0TgIiKilLqpKenC0Ds27dPOcZz2yqXVKdOncTHH39cZPnixYuFo6PjS68RGRkpAJGamlqgzMHBQSxevLjYdmzfvl1oaWmJ7OzsUt3nu+++E5UrVxb6+vqiW7duYuHChWrbU0+fPl00aNBAbNq0STg4OAhjY2PRp08fkZ6ertTZvXu3aNWqlTAxMRFmZmbCx8dHXLx4USm/cuWK2nbQL/NiG4ODg0vdnry8PDFv3jzh5OQk9PT0RP369cXWrVuLvXc+udV02XgXtjIt7nc+MzNTzJ8/X5iYmIh79+4JIYTYv3+/AMT9+/fV6tavX19Mmzat0Ov8/PPPQkNDQ1y/fv21tb2k3oU4/xvIOJcNGeeyUV7jXJqtpt/pVSyysrI4efIkEydOVDvu5eXFkSNHuHLlCsnJyXh5eSllurq6uLu7c+TIET755BNOnjxJdna2Wh07Ozvq1q3LkSNH6NChA+bm5tSqVYtNmzbRuHFjdHV1CQoKwtraGldXV7V7f/755wwZMgQnJycGDx7MsGHDXrpFcVpaGrVq1Sqy3MbGhqSkJKKiomjdunVpQ1RiNjY25OTksH37dnr27FmiUarDhw8zfPhw5s2bR5cuXdi3b1+B7akBLl26xI4dO/jtt99ITU2ld+/ezJ07l9mzZwPPPrIeM2YM9erVIyMjg2nTptG9e3fi4+PfyPbOxbVn6tSpbNu2jVWrVuHs7ExUVBQfffQRlpaWuLu7F7heZmYmmZmZyvP09HQAWs/bR4624Wtvv/SMrobgmybgOjOMzLyyGVVNmNGhwLGcnByys7PVjv3+++989NFHPH78GFtbW3bv3o2JiQnZ2dncvHkTHR0djIyM1M6zsrLi9u3bBa4FsHbtWry8vLCxsSm0/E3Kv19Z3/ffRsa5bMg4l43yGufStPedTpBTUlLIzc3F2tpa7bi1tTXJycnK9IfCyq9duwZAcnIyOjo6mJqaFnoNeDa3ODw8nK5du1KhQgU0NDSwtrYmLCxM7Qtg33zzDe3bt0dfX5/9+/czduxYUlJSmDp1aqHt//nnn4mNjSUoKKjIPvbq1Ys9e/bg7u6OjY0NLVq0oH379gwYMKDA2sCVK1cucH7+9IjitGjRgsmTJ9OvXz+GDx9Os2bNaNeuHQMGDCgQv3zLli3D29tbWbvYxcWFI0eO8Ntvv6nVy8vLY8OGDcqScH5+fuzfv19JSD/44AO1+uvWrcPKyoozZ85Qt27dErW/NF7WnoyMDBYtWkRERARubm4AVK1alejoaIKCggpNkOfMmcPXX39d4PjURnkYGOQWOC69Xt80eX1TjYqza9euAsdOnjxZYN3vzMxMFixYQHp6Onv37qVbt24EBgZSsWJF4uPjycvLK3Cte/fuoampWeB4SkoKe/fuZdy4cYXev6yEh4e/tXv/m8g4lw0Z57JR3uJc0pwJ3vEEOd+Lo51CCLVjxZUX5vk6Qgg+/fRTrKysOHToEPr6+qxdu5bOnTsTGxuLra0tgFoi3LBhQ+DZ5heFJcgHDhxg4MCBrFmz5qW7zmlqahIcHMysWbOIiIjg2LFjzJ49m3nz5hETE6PcG+DQoUMF1iVu06bNS/v5vNmzZzNmzBjlPqtXryYgIICoqCjq1atXoP758+fp3r272rFmzZoVSJAdHR3V2mVra8vdu3eV55cuXeKrr77i2LFjpKSkKHOrr1+//kYS5Je158yZMzx9+hRPT0+1c7KysmjUqFGh15s0aRJjxoxRnqenp2Nvb8+sOA1ytDVfe/ulZ56NIOfx1QmNtzqC7OrqSqdOnYo8Z/To0dSuXZsbN27Qr18/9PX1Wbx4MW5ubmp/mH/11Vc0adKkwLVmz56Nubk506dPf6UNeP6u7OxswsPD8fT0fCv3/7eQcS4bMs5lo7zGOf8T4JJ4pxNkCwsLNDU1C3xR7u7du1hbW2NjYwM8GyV+PpHML4dnUwuysrJITU1Ve7O6e/cuLVu2BCAiIkL5OD5/1HblypWEh4ezcePGAlM88rVo0YL09HTu3LmjNgp78OBBfH19WbRoEQMGDChRXytVqoSfnx9+fn7MmjULFxcXVq9erTZy6eTkVGBJMy2t0v0Izc3N6dWrF7169WLOnDk0atSIBQsWsHHjxgJ1C/tDQwhRoN6LvxwqlUrtC4a+vr7Y29uzZs0a7OzsyMvLo27dumRlZZWq7SX1svbk//f333+nUqVKavV0dXULvZ6urm6hZVETPDA3N38dTZYKkZ2dza5duzg5reNb/QdYS0ur2PsLIcjJyUFbW5vmzZujra3NgQMH6N27NwBJSUkkJiYyf/58tWsJIdi0aRMDBgzAwMDgjfajONra2uXqja68knEuGzLOZaO8xbk0bX2nV7HQ0dHB1dW1wBB+eHg4LVu2xMnJCRsbG7XyrKwsDh48qCS/rq6uaGtrq9VJSkoiISFBqZM/5P7ifFgNDY2XriQRFxeHnp6eWtJ64MABfHx8mDt3LsOGDXulfpuammJra0tGRsYrnV9SOjo6VKtWrcj71KxZk5iYGLVjJ06cKNU9/vrrL86ePcvUqVNp3749tWrVIjU19ZXb/HfVrl0bXV1drl+/TvXq1dUe9vb2b61d0rvj0aNHxMfHK+tyX7lyhfj4eK5fv05GRgaTJ0/m2LFjXLt2jVOnTjFkyBBu3rxJr169ADAxMWHw4MGMHTuW/fv3ExcXx0cffUS9evXw8PBQu1dERARXrlxh8ODBZd1NSZIk6SXe6RFkgDFjxuDn50eTJk1wc3Pju+++4/r16wwfPhyVSsWoUaMICAjA2dkZZ2dnAgICMDAwoF+/foD6m5W5uTlmZmaMGzdO7c0q/6NQf39/pk2bhr6+PmvWrOHKlSv4+PgAsHPnTpKTk3Fzc0NfX5/IyEimTJnCsGHDlNHF/OR45MiRfPDBB8rIt46ODmZmZgDExMQwYMAA9u/fT6VKlQgKCiI+Pp7u3btTrVo1nj59yqZNm0hMTGTZsmWvLY6//fYbISEhfPjhh7i4uCCEYOfOnezatYvg4OBCz/niiy9o3bo1ixYtwtfXl4iICHbv3l2qZahMTU0xNzfnu+++w9bWluvXrxc5Il8WKlSowLhx4xg9ejR5eXm89957pKenc+TIEYyMjNSW7ZP+nU6cOEHbtm2V5/nTa/z9/Vm9ejXnzp1j48aNpKSkYG5uTtOmTTl06JDaVKrFixejpaVF7969efLkCe3bt2fDhg1oaqpPyVm3bh0tW7Z86Rd5JUmSpLL3zifIffr04a+//mLmzJkkJSVRt25ddu3ahYODAwDjx4/nyZMnfPrpp6SmptK8eXP27t2rNge1uDcrCwsLwsLCmDJlCu3atSM7O5s6derwyy+/0KBBA+DZsPzKlSsZM2YMeXl5VK1alZkzZ/LZZ58p99mwYQOPHz9mzpw5zJkzRznu7u7OgQMHgGej1efPn1e+SdmsWTOio6MZPnw4t2/fxsjIiDp16rBjx45CvzD2qmrXro2BgQFjx47lxo0b6Orq4uzszNq1a/Hz8yv0nFatWinTPKZOnUqHDh0YPXp0kRsoFEZDQ4OQkBBGjBhB3bp1qVGjBt9++22p5k6/bt988w1WVlbMmTOHy5cvU7FiRRo3bszkyZPfWpukd0ebNm0KnUqUb9u2bcVeQ09Pj2XLlhX7R+6PP/5Y6vZJkiRJb55KvOydQJJeMHToUM6dO6e2m+G/TXp6OiYmJsoIovRm5M9B7tSpU7ma41beyDiXDRnnsiHjXDbKa5zz37/T0tIKrBT2ond+BFl6uxYsWICnpyeGhobs3r2bjRs3snLlyrfdLEmSJEmSpDfmnf6SnlRymzdvxsjIqNDHy5aZK05MTAyenp7Uq1eP1atX8+233zJkyJDX2HJ1w4cPL7Ifw4cPf2P3lSRJkiRJyidHkP8hunTpQvPmzQst+zsff/z3v/995XNfxcyZM5WNSV5U3MchkiRJkiRJr4NMkP8hKlSoUGATkfLIysoKKyurt90MSZIkSZL+xeQUC0mSJEmSJEl6jkyQJUn6V4iKisLX1xc7OztUKhU7duxQK9+2bRsdOnTAwsIClUqlbBTyvEuXLtG9e3csLS0xNjamd+/e3LlzRym/evUqgwcPxsnJCX19fapVq8b06dPf2K6RkiRJ0pshE2RJkv4VMjIyaNCgQZHreGdkZNCqVSvmzp1bZLmXlxcqlYqIiAgOHz5MVlYWvr6+yo6b586dIy8vj6CgIBITE1m8eDGrV6+Wa2xLkiSVMzJBLoFVq1ZRv359jI2NMTY2xs3Njd27dyvld+7cYeDAgdjZ2WFgYEDHjh35888/1a5R3MgTQGpqKn5+fpiYmGBiYoKfnx8PHjxQq3P9+nV8fX0xNDTEwsKCESNGFBidEkKwYMECXFxc0NXVxd7enoCAgJf2MTIykrZt22JmZoaBgQHOzs74+/uTk5MDgKOjIyqVqsjHtWvXio1jmzZtUKlUhSYgnTp1QqVSMWPGjAJlP/74I5qamkWuYpGens6UKVOoWbMmenp62NjY4OHhwbZt25QNH/LvrVKp0NXVpVKlSvj6+pZo0wfpn8Hb25tZs2bRo0ePQsv9/PyYNm1age2g8x0+fJirV6+yYcMG6tWrR7169QgODiY2NpaIiAgAOnbsSHBwMF5eXlStWpUuXbowbtw4+TqTJEkqZ2SCXAKVK1dm7ty5nDhxghMnTtCuXTu6du1KYmIiQgi6devG5cuX+eWXX4iLi8PBwQEPDw8yMjKAko08AfTr14/4+HjCwsIICwsjPj5ebZe73NxcfHx8yMjIIDo6mpCQEEJDQxk7dqxae0eOHMnatWtZsGAB586dY+fOnTRr1qzI/iUmJuLt7U3Tpk2Jiori9OnTLFu2DG1tbaV9sbGxJCUlqT3Onj2LnZ0dvr6+VKlSpUSxtLe3L7C19e3bt4mIiMDW1rbQc9avX8/48eMJCQnh8ePHamUPHjygZcuWbNq0iUmTJnHq1CmioqLo06cP48ePJy0tTak7dOhQkpKSuHjxIqGhodSuXZsPP/yQYcOGlajt0r9bZmam8gdWPj09PTQ0NIiOji7yvLS0NGWreUmSJKl8kKtYlICvr6/a89mzZ7Nq1SqOHTuGtrY2x44dIyEhQVlveOXKlVhZWbFlyxaGDBmijDzFxcUpS5UFBwdjZmZGREQEHh4enD17lrCwMI4dO6Ys17ZmzRrc3Nw4f/48NWrUYO/evZw5c4YbN25gZ2cHwMKFCxk4cCCzZ8/G2NiYs2fPsmrVKhISEqhRo0aJ+hceHo6trS2BgYHKsWrVqtGxY0fluaWlpdo5eXl5DBw4EBMTE3744QdUKlWJ7tW5c2f++9//cvjwYVq1agU826Lby8uL69evF6h/9epVjhw5QmhoKJGRkfz8888MGDBAKZ88eTJXr17lwoULSkwAXFxc6Nu3L3p6esoxAwMDbGxsgGeJeosWLahZsyaDBg2id+/eRY4cFqX5nP3kaBmW6hyp5HQ1BYHNoO6MPWTmluz1VZirc31eS3tatGiBoaEhEyZMICAgACEEEyZMIC8vj6SkpELPuXTpEsuWLWPhwoWvpQ2SJElS2ZAJcinl5uaydetWMjIycHNzIzMzE0AtEdPU1ERHR4fo6GiGDBlS7MiTh4cHR48excTERG0t4xYtWmBiYsKRI0eoUaMGR48epW7dumqJYIcOHcjMzOTkyZO0bduWnTt3UrVqVX777Tc6duyIEAIPDw8CAwOLHMWysbEhKSmJqKgoWrduXaI4TJw4kePHjxMTE1Oq9Yl1dHTo378/wcHBaglyYGBgodMr1q9fj4+PDyYmJnz00UesW7dOSZDz8vIICQmhf//+ajHJZ2RkVGx7/P39GTt2LNu2bSsyQc7MzFR+zvBsSgeAroZAU1Pu1P6m6GoItf++quzs7EKP5+TkFFqWfyw7O1utvGLFimzZsoUvvviCb7/9Fg0NDfr06UOjRo1QqVQFrnX79m06duzIBx98gL+/f5HteNue76/05sg4lw0Z57JRXuNcmvbKBLmETp8+jZubG0+fPsXIyIjt27dTu3ZtsrOzcXBwYNKkSQQFBWFoaMiiRYtITk5WRpVKMvKUnJxc6Pq/VlZWJCcnK3Wsra3Vyk1NTdHR0VHqXL58mWvXrrF161Y2bdpEbm4uo0ePpmfPnso8yRf16tWLPXv24O7ujo2NDS1atKB9+/YMGDCg0OR3y5YtLFq0iN9//x1nZ+dSx3Lw4MG89957LF26lJMnT5KWloaPj0+BBDkvL48NGzawbNkyAD788EPGjBnDxYsXqV69OikpKaSmplKzZs1StyGfhoYGLi4uXL16tcg6c+bM4euvvy5wfGqjPAwMcl/53lLJfNMkr/hKL7Fr165Cj588ebLQTXTyvxsQHR3N7du3C5QvWrSI9PR0NDQ0MDIyYuDAgdSvX1/tPvfv32fq1Km4uLjg6+tbZBveJeHh4W+7Cf8KMs5lQ8a5bJS3OL84TfNlZIJcQjVq1CA+Pp4HDx4QGhqKv78/Bw8epHbt2oSGhjJ48GDMzMzQ1NTEw8MDb29v5VxLS0u2bt3Kf/7zH2XkqW/fvjRu3BhNTU2lXmHTFIQQaseLq5OXl0dmZiabNm3CxcUFgHXr1uHq6qpM1XiRpqYmwcHBzJo1i4iICI4dO8bs2bOZN28eMTExanOD4+LiGDx4MHPnzqVDhw6vEEmoX78+zs7O/Pzzz0RGRuLn51doorJ3714yMjKUWFpYWODl5cX69euVPzSKiklpvBjjF02aNIkxY8Yoz9PT07G3t2dWnAY52ppFnif9Pboagm+a5PHVCQ0y8179Z5wwo/DXqaurK506dSpwPP+Ppffee4+GDRu+9NqRkZGkpaUxbtw45Xfr1q1beHp68t5777Fx40a13/F3UXZ2NuHh4Xh6ev6tXTell5NxLhsyzmWjvMY5/xPgkpAJcgnp6OhQvXp1AJo0aUJsbCxLly4lKCgIV1dX4uPjSUtLIysrC0tLS5o3b06TJk2U8728vLh06RIpKSloaWlRsWJFbGxscHJyAp5Nc3hxVQuAe/fuKaPGNjY2HD9+XK08NTWV7OxspY6trS1aWlpKcgxQq1Yt4NkKGC+bl1ypUiX8/Pzw8/Nj1qxZuLi4sHr1amX09N69e3Tr1o0ePXoUuR10SQ0aNIgVK1Zw5swZYmJiCq2zfv167t+/j4GBgXIsLy+PuLg4vvnmGywtLTE1NeXs2bOv3I7c3Fz+/PNPmjZtWmQdXV1dtekx+aImeGBubv7K95ZeLjs7m127dnFyWsfX8g/wo0ePuHjxovL8xo0bJCYmYmZmRpUqVbh//z7Xr19XRo0vX76MtrY2NjY2ytz14OBgatWqhaWlJUePHmXkyJGMHj2aunXrAs+mVXh6elKlShUWLVqktgpN/jXeVdra2uXqja68knEuGzLOZaO8xbk0bZWrWLwiIYTavFQAExMTLC0t+fPPPzlx4gRdu3YtcJ6FhQUVK1YkIiKCu3fv0qVLFwDc3NxIS0tTSxaPHz9OWloaLVu2VOokJCSofSFo79696Orq4urqCkCrVq3Iycnh0qVLSp0LFy4A4ODgUOL+mZqaYmtrq6zEkZ2dTc+ePbGysmLt2rUlvk5R+vXrx+nTp6lbty61a9cuUP7XX3/xyy+/EBISQnx8vNrj0aNH7N69W5kDunnz5kI/Cs/IyFCWqSvKxo0bSU1N5YMPPvjbfZLebSdOnKBRo0Y0atQIgDFjxtCoUSOmTZsGwK+//kqjRo3w8Xn2pb4PP/yQRo0asXr1auUa58+fp1u3btSqVYuZM2cyZcoUFixYoJTv3buXixcvEhERQeXKlbG1tVUekiRJUjkipGJNmjRJREVFiStXroj//e9/YvLkyUJDQ0Ps3btXCCHEf//7XxEZGSkuXbokduzYIRwcHESPHj3UrrF+/Xpx9OhRcfHiRfH9998LMzMzMWbMGLU6HTt2FPXr1xdHjx4VR48eFfXq1ROdO3dWynNyckTdunVF+/btxalTp8S+fftE5cqVxeeff67Uyc3NFY0bNxatW7cWp06dEidOnBDNmzcXnp6eSp3jx4+LGjVqiJs3bwohhFi9erUYPny42LNnj7h48aJISEgQ48ePFxoaGuLAgQNCCCE+/fRTYWJiImJjY0VSUlKBR2ZmZrFxdHd3FyNHjlSep6amikePHinPGzRoIKZPny6EEGLx4sXC1tZW5ObmFrhOv379RLdu3YQQQty/f1/UrFlTVK5cWWzcuFEkJiaKCxcuiHXr1onq1auL1NRU5d5Dhw4VSUlJ4saNG+LYsWNi/PjxQltbW/znP/8ptu3PS0tLE4BISUkp1XlS6WRlZYkdO3aIrKyst92UfzQZ57Ih41w2ZJzLRnmNc/77d1paWrF15RSLErhz5w5+fn4kJSVhYmJC/fr1CQsLw9PTE4CkpCTGjBnDnTt3sLW1ZcCAAXz11Vdq1zh//jyTJk3i/v37ODo6MmXKFEaPHq1WZ/PmzYwYMQIvLy8AunTporbrl6amJr///juffvoprVq1Ql9fn379+qmNYGloaLBz506++OILWrdujaGhId7e3mrLTD1+/Jjz588r3+Zs1qwZ0dHRDB8+nNu3b2NkZESdOnXYsWMH7u7uwLOl64AipyJERkbSpk2bUsW1YsWKRZatX7+e7t27o6FR8EOODz74gD59+nDnzh2sra05duwYc+fOZdasWVy7dg1TU1Pq1avH/PnzMTExUc5bs2YNa9asQUdHB3Nzc1xdXfnpp5/o3r17qdotSZIkSdI/m0oIIdepkqRSSE9Px8TEhJSUFDkH+Q3Kn4PcqVOncjXHrbyRcS4bMs5lQ8a5bJTXOOe/f6elpRW7RK2cgyxJkiRJkiRJz5EJsvRaHDp0CCMjoyIfkiRJkiRJ5YWcgyy9Fk2aNCE+Pv5tN0OSJEmSJOlvkwmy9Fro6+sr60RLkiRJkiSVZ3KKhSRJkiRJkiQ9RybIUrlx4MABVCqV2u5kL5oxY0ax2wNL/x5RUVH4+vpiZ2eHSqVix44dauXbtm2jQ4cOWFhYoFKpCp0m1KZNG1Qqldrjww8/VKtz6tQpPD09qVixIubm5gwbNoxHjx69wZ5JkiRJb1K5SJBXrlyJk5MTenp6uLq6cujQIaVMCMGMGTOws7NDX1+fNm3akJiYqHZ+ZmYmX3zxBRYWFhgaGtKlSxdu3rypVufChQt07doVCwsLjI2NadWqFZGRkWp1XnyTVKlUartsHThwgK5du2Jra4uhoSENGzZk8+bNxfYvMjKStm3bYmZmhoGBAc7Ozvj7+yu7wL0sMXR0dGTJkiXF3iO/rkqlIiQkpEBZnTp1UKlUbNiwoUBZQEAAmpqazJ07t9DrJicn88UXX1C1alV0dXWxt7fH19eX/fv3F7i3SqVCX18fR0dHevfuTURERInaXlLjxo1Tu+/LyGT6ny8jI4MGDRqorSf+YnmrVq2KfG3nGzp0KElJScojKChIKbt9+zYeHh5Ur16d48ePExYWRmJiIgMHDnydXZEkSZLK0DufIP/000+MGjWKKVOmEBcXx/vvv4+3tzfXr18HIDAwkEWLFrF8+XJiY2OxsbHB09OThw8fKtcYNWoU27dvJyQkhOjoaB49ekTnzp3Jzc1V6vj4+JCTk0NERAQnT56kYcOGdO7cmeTkZLX2BAcHq71R+vv7K2VHjhyhfv36hIaG8r///Y9BgwYxYMAAdu7cWWT/EhMT8fb2pmnTpkRFRXH69GmWLVuGtrY2eXl5ryuMCnt7e4KDg9WOHTt2jOTkZAwNDQs9Jzg4mPHjx7N+/foCZVevXsXV1ZWIiAgCAwM5ffo0YWFhtG3bls8++0yt7syZM0lKSuL8+fNs2rSJihUr4uHhwezZs19b/4yMjOTaxJLC29ubWbNm0aNHj0LL/fz8mDZtGh4eHi+9joGBATY2Nsrj+Q1ofvvtN7S1tVmxYgU1atSgadOmrFixgtDQUC5evPha+yNJkiSVkTe9rd/f1axZMzF8+HC1YzVr1hQTJ04UeXl5wsbGRsydO1cpe/r0qTAxMRGrV68WQgjx4MEDoa2tLUJCQpQ6t27dEhoaGiIsLEwIIcS9e/cEIKKiopQ66enpAhD79u1TjgFi+/btpWp/p06dxMcff1xk+eLFi4Wjo+NLrxEZGSkAZdvk5zk4OIjFixeXqC0ODg5i4sSJQldXV1y/fl05PnToUPHFF18IExMTERwcrHbOgQMHRKVKlURWVpaws7MTBw8eVCv39vYWlSpVUtsyOt/z7S2qndOmTRMaGhri3LlzxbY/Pw779u0Trq6uQl9fX7i5uamdO336dNGgQQO1c5o2bSoMDAyEiYmJaNmypbh69aoIDg4WgNrjxb4XRW41XTZe91amL/v9vXLligBEXFxcgTJ3d3dhYWEhzM3NRe3atcXYsWNFenq6Uv7tt9+KypUrq51z7ty5Ur2m3qbyumVseSPjXDZknMtGeY3zP2ar6aysLE6ePMnEiRPVjnt5eXHkyBGuXLlCcnKysjUzgK6uLu7u7hw5coRPPvmEkydPkp2drVbHzs6OunXrcuTIETp06IC5uTm1atVi06ZNNG7cGF1dXYKCgrC2tsbV1VXt3p9//jlDhgzBycmJwYMHM2zYsEK3Q86XlpZGrVq1iiy3sbEhKSmJqKgoWrduXdoQlZq1tTUdOnRg48aNTJ06lcePH/PTTz9x8OBBNm3aVKD+unXr6Nu3L9ra2vTt25d169Yp7bx//z5hYWHMnj270NHnl20lnW/kyJF88803/PLLL4wfP75EfZgyZQoLFy7E0tKS4cOHM2jQIA4fPlygXk5ODt26dWPo0KFs2bKFrKwsYmJiUKlU9OnTh4SEBMLCwti3bx+A2qhgSTSfs58crcJH3aW/T1dTENgM6s7YQ2auqlTnXp3r89ra0b9/f5ycnLCxsSEhIYFJkybxxx9/EB4eDkC7du0YM2YM8+fPZ+TIkWRkZDB58mTg2Tb0kiRJUvnzTifIKSkp5ObmYm1trXbc2tqa5ORkZfpDYeXXrl0Dns2P1dHRwdTUtNBrwLO5xeHh4XTt2pUKFSqgoaGBtbU1YWFhakneN998Q/v27dHX12f//v2MHTuWlJQUpk6dWmj7f/75Z2JjY9XmK76oV69e7NmzB3d3d2xsbGjRogXt27dnwIABBbZBrFy5coHzHz9+XOS1izJo0CDGjh3LlClT+Pnnn6lWrVqhc3HT09MJDQ3lyJEjAHz00Ue0atWKZcuWYWxszMWLFxFCULNmzVK3IZ+ZmRlWVlZcvXq1xOfMnj0bd3d3ACZOnIiPjw9Pnz5FT0+vQPvT0tLo3Lkz1apVA1D7Y8XIyAgtLS1sbGxeer/MzEwyMzPVrgugqyHQ1JQ7tb8puhpC7b+lkZ2dXejxnJycQsvyj2VnZxcof34ucY0aNXBycqJFixbExMTQqFEjXFxcWLduHePHj2fSpEloamry+eefK/8uFdWWd8XzfZfeHBnnsiHjXDbKa5xL0953OkHOp1Kpjx4JIdSOFVdemOfrCCH49NNPsbKy4tChQ+jr67N27Vo6d+5MbGwstra2AGqJcH5COXPmzEIT5AMHDjBw4EDWrFlDnTp1imyHpqYmwcHBzJo1i4iICI4dO8bs2bOZN28eMTExyr3h2W51FSpUUDu/TZs2L+1nYXx8fPjkk0+Iiopi/fr1DBo0qNB6P/74I1WrVqVBgwbAsz5XrVqVkJAQhg0bhhDPEpfiYl2ckvy8nle/fn3l//Pjc/fuXapUqaJWz8zMjIEDB9KhQwc8PT3x8PCgd+/eajEtiTlz5vD1118XOD61UR4GBrmFnCG9Tt80Kf1c/F27dhV6/OTJk2hraxc4fufOHQCio6O5ffv2S68thEBLS4utW7cqI8QmJiYEBQXx4MEDdHV1UalULFmyhNTU1CLb8q7JHxGX3iwZ57Ih41w2ylucSzOo+E4nyBYWFmhqahb4otzdu3extrZWRv6Sk5PVkp78cng2hSErK4vU1FS1UeS7d+/SsmVLACIiIvjtt99ITU1VRm1XrlxJeHg4GzduLDDFI1+LFi1IT0/nzp07aqPYBw8exNfXl0WLFjFgwIAS9bVSpUr4+fnh5+fHrFmzcHFxYfXq1WqJmZOTU4FpC1papf8Ramlp4efnx/Tp0zl+/Djbt28vtN769etJTExUu0deXh7r1q1j2LBhODs7o1KpOHv2LN26dSt1OwD++usv7t27h5OTU4nPeT7ByU+si/pCY3BwMCNGjCAsLIyffvqJqVOnEh4eTosWLUp8v0mTJjFmzBjleXp6Ovb29rRt21Z+IfANys7OJjw8HE9Pz0KT2lfh6upKp06dChzP/wTjvffeK3Zlk4SEBHJycvD29ub9998vtM6GDRvQ09Pjyy+/LNFUo7fpTcRZKkjGuWzIOJeN8hrn/E+AS+KdTpB1dHRwdXUlPDyc7t27K8fzp0PkzwsMDw+nUaNGwLN5ywcPHmTevHnAszdEbW1twsPD6d27N/BsXmBCQgKBgYHA//9F8eJcYg0NjZeuJBEXF4eenp7aG+CBAwfo3Lkz8+bNY9iwYa/Ub1NTU2xtbcnIyHil80ti0KBBLFiwgD59+hSYfgJw+vRpTpw4wYEDBzAzM1OOP3jwgNatW5OQkEDdunXp0KEDK1asYMSIEQXmIT948KDY5GDp0qVoaGi8coJdEo0aNaJRo0ZMmjQJNzc3fvzxR1q0aIGOjo7aSiZF0dXVRVdXt8BxbW3tcvUPQ3n1d+L86NEjtZUkbty4QWJiImZmZlSpUoX79+9z/fp1ZdT48uXLaGtrK6tVXLp0ic2bN9OpUycsLCw4c+YMY8eOpVGjRri7u6OpqQnA8uXLadmyJUZGRoSHh/Pll18yd+5cLC0t/34Ayoh8PZcNGeeyIeNcNspbnEvT1nc6QQYYM2YMfn5+NGnSBDc3N7777juuX7/O8OHDUalUjBo1ioCAAJydnXF2diYgIAADAwP69esHPPvoc/DgwYwdOxZzc3PMzMwYN24c9erVU5Z2cnNzw9TUFH9/f6ZNm4a+vj5r1qzhypUr+Pg8+7LPzp07SU5Oxs3NDX19fSIjI5kyZQrDhg1TkqcDBw7g4+PDyJEj+eCDD5SRbx0dHSXJjImJYcCAAezfv59KlSoRFBREfHw83bt3p1q1ajx9+pRNmzaRmJjIsmXL3lhca9WqRUpKCgYGBoWWr1u3jmbNmhX6xUE3NzfWrVvH4sWLWblyJS1btqRZs2bMnDmT+vXrk5OTQ3h4OKtWreLs2bPKeQ8fPiQ5OZns7GyuXLnCDz/8wNq1a5kzZ84b2ab6ypUrfPfdd3Tp0gU7OzvOnz/PhQsXlFF9R0dHrly5Qnx8PJUrV6ZChQqFJsJS+XXixAnatm2rPM//JMDf358NGzbw66+/8vHHHyvl+RuATJ8+nRkzZqCjo8P+/ftZunQpjx49wt7eHh8fH6ZPn64kx/Ds93r69Ok8evSImjVrEhQUhJ+fXxn1UpIkSXrt3uBqGq/NihUrhIODg9DR0RGNGzdWW2osLy9PTJ8+XdjY2AhdXV3RunVrcfr0abXznzx5Ij7//HNhZmYm9PX1RefOndWWORNCiNjYWOHl5SXMzMxEhQoVRIsWLcSuXbuU8t27d4uGDRsKIyMjYWBgIOrWrSuWLFkisrOzlTr+/v4Flg4DhLu7u1Inf6myK1euCCGEOHXqlPjoo4+Ek5OT0NXVFebm5qJ169bi119/LXDO61jm7WV185d5y8zMFObm5iIwMLDQegsXLhQWFhYiMzNTCCHE7du3xWeffab8jCpVqiS6dOkiIiMj1e6dHw8dHR1RpUoV0bt3bxEREVGitgtReBzi4uLU4vn8Mm/JycmiW7duwtbWVujo6AgHBwcxbdo0kZubK4R4tiTgBx98ICpWrCiXeXsHlddlhMobGeeyIeNcNmScy0Z5jXNplnlTCSHk1/AlqRTS09MxMTEhJSVFzkF+g7Kzs9m1axedOnUqVx/hlTcyzmVDxrlsyDiXjfIa5/z377S0tAIrhb3ond9JT5IkSZIkSZLKkkyQ/yE2b96MkZFRoY+XLTP3Lhk+fHiRfRg+fPjbbp4kSZIkSf8S7/yX9KSS6dKlC82bNy+0rLx8/DFz5kzGjRtXaFlxH4VIkiRJkiS9LjJB/oeoUKFCgU1EyhsrKyusrKzedjMkSZIkSfqXk1MsJEmSJEmSJOk5MkGWJKlcioqKwtfXFzs7O1QqFTt27FArF0IwY8YM7Ozs0NfXp02bNiQmJqrVadOmDSqVSu2RvxZyvlOnTuHp6UnFihUxNzdn2LBhPHr06E13T5IkSXqLZIIsAc+22lWpVMTHx5f5vQtLbgrzYhsPHDiASqXiwYMHb7R90rspIyODBg0asHz58kLLAwMDWbRoEcuXLyc2NhYbGxs8PT15+PChWr2hQ4eSlJSkPIKCgpSy27dv4+HhQfXq1Tl+/DhhYWEkJiYycODAN9k1SZIk6S175xPkVatWUb9+fYyNjTE2NsbNzY3du3cr5Xfu3GHgwIHY2dlhYGBAx44d+fPPP9WucenSJbp3746lpSXGxsb07t2bO3fuqNVJTU3Fz88PExMTTExM8PPzK5B4Xb9+HV9fXwwNDbGwsGDEiBFkZWWp1RFCsGDBAlxcXNDV1cXe3p6AgICX9jEyMpK2bdtiZmaGgYEBzs7O+Pv7k5OTAzzb8e3FUa7nH9euXSs2jpcvX6Zv377Y2dmhp6dH5cqV6dq1KxcuXADA3t6epKQk6tatW+y13hUtW7YkKSkJExOTt90U6S3w9vZm1qxZ9OjRo0CZEIIlS5YwZcoUevToQd26ddm4cSOPHz/mxx9/VKtrYGCgbC1tY2Oj9nr67bff0NbWZsWKFdSoUYOmTZuyYsUKQkND1bawliRJkv5Z3vkEuXLlysydO5cTJ05w4sQJ2rVrR9euXUlMTEQIQbdu3bh8+TK//PILcXFxODg44OHhQUZGBvBslMnLywuVSkVERASHDx8mKysLX19f8vLylPv069eP+Ph4wsLCCAsLIz4+Xm2r2NzcXHx8fMjIyCA6OpqQkBBCQ0MZO3asWntHjhzJ2rVrWbBgAefOnWPnzp00a9asyP4lJibi7e1N06ZNiYqK4vTp0yxbtgxtbW2lfbGxsWojXElJSZw9exY7Ozt8fX2pUqXKS2OYlZWFp6cn6enpbNu2jfPnz/PTTz9Rt25d0tLSANDU1MTGxgYtrfLzvU0dHR1sbGxQqVRvuynSO+bKlSskJyfj5eWlHNPV1cXd3Z0jR46o1d28eTMWFhbUqVOHcePGqY0wZ2ZmoqOjg4bG//9Tqa+vD0B0dPQb7oUkSZL0trzz2ZCvr6/a89mzZ7Nq1SqOHTuGtrY2x44dIyEhQVnrd+XKlVhZWbFlyxaGDBnC4cOHuXr1KnFxccpSYcHBwZiZmREREYGHhwdnz54lLCyMY8eOKUulrVmzBjc3N86fP0+NGjXYu3cvZ86c4caNG9jZ2QGwcOFCBg4cyOzZszE2Nubs2bOsWrWKhIQEatSoUaL+hYeHY2trS2BgoHKsWrVqdOzYUXluaWmpdk5eXh4DBw7ExMSEH374odgE8cyZM1y+fJmIiAgcHBwAcHBwoFWrVkqdq1ev4uTkRFxcHA0bNgTg119/ZezYsdy8eZMWLVowcOBABg4cSGpqKhUrVmTDhg2MGjWKn376iVGjRnHjxg3ee+89goODsbW1BZ4l95MnTyYuLo7s7GwaNmzI4sWLady4cYni8zIHDhygbdu2pWoPPPv5BwYGcuXKFRwdHRkxYgSffvppqe/ffM5+crQM/3Y/pMLpagoCm0HdGXvIzP3/1/jVuT7FnpucnAyAtbW12nFra2u1T1z69++Pk5MTNjY2JCQkMGnSJP744w/Cw8MBaNeuHWPGjGH+/PmMHDmSjIwMJk+eDEBSUtLf7qMkSZL0bnrnE+Tn5ebmsnXrVjIyMnBzcyMzMxMAPT09pY6mpiY6OjpER0czZMgQMjMzUalU6OrqKnX09PTQ0NAgOjoaDw8Pjh49iomJido6wi1atMDExIQjR45Qo0YNjh49St26dZXkGKBDhw5kZmZy8uRJ2rZty86dO6latSq//fYbHTt2RAiBh4cHgYGBmJmZFdonGxsbkpKSiIqKonXr1iWKw8SJEzl+/DgxMTElWh/Y0tISDQ0Nfv75Z0aNGoWmpmax51y9epWePXsycuRIhgwZQlxcXKFrFD9+/JgFCxbw/fffo6GhwUcffcS4cePYvHkzAA8fPsTf359vv/0WePZHRadOnfjzzz/fyLJ0xbVnzZo1TJ8+neXLl9OoUSPi4uIYOnQohoaG+Pv7F3rNzMxM5bUGz7aqBNDVEGhqyp3a3xRdDaH233zZ2dmF1s/JyVHK8qcnPX8Mnv0b8vw1np9LXKNGDZycnGjRogUxMTE0atQIFxcX1q1bx/jx45k0aRKampp8/vnnSuJdVFvKk/w+/BP68i6TcS4bMs5lo7zGuTTtLRcJ8unTp3Fzc+Pp06cYGRmxfft2ateuTXZ2Ng4ODkyaNImgoCAMDQ1ZtGgRycnJyuhOixYtMDQ0ZMKECQQEBCCEYMKECeTl5Sl1kpOTC11/18rKShmJSk5OLjAaZWpqio6OjlLn8uXLXLt2ja1bt7Jp0yZyc3MZPXo0PXv2JCIiotC+9erViz179uDu7o6NjQ0tWrSgffv2DBgwoNDkd8uWLSxatIjff/8dZ2fnEsWvUqVKfPvtt4wfP56vv/6aJk2a0LZtW/r370/VqlULPWf16tXUqFGD+fPnA8+Sh4SEBGbPnq1WLzs7m9WrV1OtWjUAPv/8c2bOnKmUt2vXTq1+UFAQpqamHDx4kM6dO5eo/aVRXHu++eYbFi5cqMxbdXJy4syZMwQFBRWZIM+ZM4evv/66wPGpjfIwMMh97X2Q1H3TJE/t+a5duwqtd/LkSWVTnPzfydDQULXXeEJCAoaGhkVeQwiBlpYWW7duVf59MDExISgoiAcPHqCrq4tKpWLJkiWkpqYWeZ3yKH/UXHqzZJzLhoxz2ShvcX78+HGJ65aLBLlGjRrEx8fz4MEDQkND8ff35+DBg9SuXZvQ0FAGDx6MmZkZmpqaeHh44O3trZxraWnJ1q1b+c9//sO3336LhoYGffv2pXHjxmojqYVNUxBCqB0vrk5eXh6ZmZls2rQJFxcXANatW4erq6syVeNFmpqaBAcHM2vWLCIiIjh27BizZ89m3rx5xMTEqE0NiIuLY/DgwcydO5cOHTqUKoafffYZAwYMIDIykuPHj7N161YCAgL49ddf8fT0LFD//PnzNG3aVO1YYXOpDQwMlGQUwNbWlrt37yrP7969y7Rp04iIiODOnTvk5uby+PFjrl+/Xqr2l9TL2nPv3j1u3LjB4MGDGTp0qFInJyfnpV/0mzRpEmPGjFGep6enY29vz6w4DXK0ix+Nl16NrobgmyZ5fHVCg8y8///dS5hR+Gvf1dWVTp06Af+/xNvTp0+VY1lZWfj7+xMQEKAce1FCQgI5OTl4e3vz/vvvF1pnw4YN6Onp8eWXX1KxYsW/0cN3Q3Z2NuHh4Xh6epabXTfLIxnnsiHjXDbKa5zzPwEuiXKRIOvo6FC9enUAmjRpQmxsLEuXLiUoKAhXV1fi4+NJS0sjKysLS0tLmjdvTpMmTZTzvby8uHTpEikpKWhpaVGxYkVsbGxwcnICnk1zeHFVC3iWUOWPGtvY2HD8+HG18tTUVLKzs5U6tra2aGlpKckxQK1atYBnK2C8bF5ypUqV8PPzw8/Pj1mzZuHi4sLq1auVkct79+7RrVs3evToUeR2zMWpUKECXbp0oUuXLsyaNYsOHTowa9asQhPkF/84yD/2ohd/MVQqlVq9gQMHcu/ePZYsWYKDgwO6urq4ubkVWP3jdXlZe/K/9LhmzZoC23K/bNqJrq6u2hSdfFETPDA3N/+7TZaKkJ2dza5duzg5rWOh/wA/evRIbSWJGzdukJiYiJmZGVWqVGHUqFHMmTOHmjVr4uzsTEBAAAYGBvj5+aGtrc2lS5fYvHkznTp1wsLCgjNnzjB27FgaNWqEu7u78ppYvnw5LVu2xMjIiPDwcL788kvmzp1b4LsB5Z22tna5eqMrr2Scy4aMc9kob3EuTVvLRYL8IiGE2pxQQBkB/PPPPzlx4gTffPNNgfMsLCwAiIiI4O7du3Tp0gUANzc30tLSiImJUUZJjx8/TlpaGi1btlTqzJ49m6SkJGVUd+/evejq6uLq6gpAq1atyMnJ4dKlS8ooZv4yavlfjisJU1NTbG1tlZU4srOz6dmzJ1ZWVqxdu7bE13kZlUpFzZo1C3yjP1/NmjULfHx84sSJUt/n0KFDrFy5Uhmxu3HjBikpKaVv8GtgbW1NpUqVuHz5Mv37938rbZBenxMnTtC2bVvlef4ov7+/Pxs2bGD8+PE8efKETz/9lNTUVJo3b87evXuVue86Ojrs37+fpUuX8ujRI+zt7fHx8WH69OlqfzDFxMQwffp0Hj16RM2aNQkKClJb4UaSJEn653nnE+TJkyfj7e2Nvb09Dx8+JCQkhAMHDhAWFgbA1q1bsbS0pEqVKpw+fZqRI0fSrVs3teWdgoODqVWrFpaWlhw9epSRI0cyevRoZUS3Vq1adOzYkaFDhyqbBAwbNozOnTsrdby8vKhduzZ+fn7Mnz+f+/fvM27cOIYOHarMFfbw8KBx48YMGjSIJUuWkJeXx2effYanp6cyqhwTE8OAAQPYv38/lSpVIigoiPj4eLp37061atV4+vQpmzZtIjExkWXLlgEwatQo/vjjD/bt21fophhmZmbo6OgUGcP4+HimT5+On58ftWvXRkdHh4MHD7J+/XomTJhQ6DmffPIJixYtYsKECQwePJj4+Hg2bNgAFD7VpCjVq1fn+++/p0mTJqSnp/Pll18qy2S9DTNmzGDEiBEYGxvj7e1NZmYmJ06cIDU1VW0ahfTua9OmTaGfauRTqVTMmDGDGTNmFFpub2/PwYMHi73Ppk2bXrWJkiRJUjn1zifId+7cwc/PT9kQon79+oSFhSnTApKSkhgzZgx37tzB1taWAQMG8NVXX6ld4/z580yaNIn79+/j6OjIlClTGD16tFqdzZs3M2LECCWx7tKli9oOXZqamvz+++98+umntGrVCn19ffr168eCBQuUOhoaGuzcuZMvvviC1q1bY2hoiLe3NwsXLlTqPH78mPPnzyvfpGzWrBnR0dEMHz6c27dvY2RkRJ06ddixYwfu7u7As6XrgAJzgvNFRkbSpk2bImNYuXJlHB0d+frrr5Xd6PKfvxiHfE5OTvz888+MHTuWpUuX4ubmxpQpU/jPf/5T6HSDoqxfv55hw4bRqFEjqlSpQkBAwCtPEXkdhgwZgoGBAfPnz2f8+PEYGhpSr149Ro0a9dbaJEmSJEnSu0UlXjYEI0nPmT17NqtXr+bGjRtvuylvVXp6OiYmJqSkpMg5yG9Q/hzkTp06las5buWNjHPZkHEuGzLOZaO8xjn//TstLa3YZXLf+RFk6e1ZuXIlTZs2xdzcnMOHDzN//nw+//zzt90sSZIkSZKkN+qd32paKt6hQ4cwMjIq8vGq/vzzT7p27Urt2rX55ptvGDt2bJHzOV+HgICAIvvw/NJ9kiRJkiRJb5IcQf4HaNKkCfHx8a/9uosXL2bx4sWv/bpFGT58OL179y607G1+sU+SJEmSpH8XmSD/A+jr6yvrRJdnZmZmRW7JLUmSJEmSVFbkFAtJkiRJkiRJeo5MkCVJKleioqLw9fXFzs4OlUrFjh071Mrzt5m2s7NDX1+fNm3akJiYqFbnk08+oVq1aujr62NpaUnXrl05d+6cWp0LFy7QtWtXLCwsMDY2plWrVkRGRr7p7kmSJEnvAJkgS+VC/vrNL5trvWHDBipWrFhmbZLejoyMDBo0aKC2TvnzAgMDWbRoEcuXLyc2NhYbGxs8PT15+PChUsfV1ZXg4GDOnj3Lnj17EELg5eVFbm6uUsfHx4ecnBwiIiI4efIkDRs2pHPnziQnJ7/xPkqSJElv1zufIK9atYr69etjbGyMsbExbm5u7N69Wym/c+cOAwcOxM7ODgMDAzp27Miff/6pdo1Lly7RvXt3LC0tMTY2pnfv3ty5c0etTmpqKn5+fpiYmGBiYoKfn1+BXeuuX7+Or68vhoaGWFhYMGLECLKystTqCCFYsGABLi4u6OrqYm9vT0BAwEv7GBkZSdu2bTEzM8PAwABnZ2f8/f3JyckBwNHREZVKVeTj2rVrxcaxTZs2qFQq5s6dW6CsU6dOyq5jL/rxxx/R1NRk+PDhhV43PT2dKVOmULNmTfT09LCxscHDw4Nt27Ypu5zl31ulUqGrq0ulSpXw9fVl27Ztxba7NPr06aNs7V0cmUyXX97e3syaNYsePXoUKBNCsGTJEqZMmUKPHj2oW7cuGzdu5PHjx/z4449KvWHDhtG6dWscHR1p3Lgxs2bN4saNG1y9ehWAlJQULl68yMSJE6lfvz7Ozs7MnTuXx48fFxiNliRJkv553vkEuXLlysydO5cTJ05w4sQJ2rVrR9euXUlMTEQIQbdu3bh8+TK//PILcXFxODg44OHhQUZGBvBstMnLywuVSkVERASHDx8mKysLX19f8vLylPv069eP+Ph4wsLCCAsLIz4+Hj8/P6U8NzcXHx8fMjIyiI6OJiQkhNDQUMaOHavW3pEjR7J27VoWLFjAuXPn2LlzJ82aNSuyf4mJiXh7e9O0aVOioqI4ffo0y5YtQ1tbW2lfbGwsSUlJao+zZ89iZ2eHr68vVapUKVEs7e3tCQ4OVjt2+/ZtIiIisLW1LfSc9evXM378eEJCQnj8+LFa2YMHD2jZsiWbNm1i0qRJnDp1iqioKPr06cP48eNJS0tT6g4dOpSkpCQuXrxIaGgotWvX5sMPP2TYsGElantJ6OvrY2Vl9dquJ5U/V65cITk5WW2reV1dXdzd3Tly5Eih52RkZBAcHIyTkxP29vYAmJubU6tWLTZt2kRGRgY5OTkEBQVhbW2Nq6trmfRFkiRJenve+VUsfH191Z7Pnj2bVatWcezYMbS1tTl27BgJCQnUqVMHeLa5hZWVFVu2bGHIkCEcPnyYq1evEhcXp+yaEhwcjJmZGREREXh4eHD27FnCwsI4duwYzZs3B2DNmjW4ublx/vx5atSowd69ezlz5gw3btzAzs4OgIULFzJw4EBmz56NsbExZ8+eZdWqVSQkJFCjRo0S9S88PBxbW1sCAwOVY9WqVaNjx47Kc0tLS7Vz8vLyGDhwICYmJvzwww+oVKoS3atz587897//5fDhw7Rq1Qp4NpLq5eXF9evXC9S/evUqR44cITQ0lMjISH7++WcGDBiglE+ePJmrV69y4cIFJSYALi4u9O3bFz09PeWYgYEBNjY2wLNEvUWLFtSsWZNBgwbRu3dvPDw8StSHy5cvM3r0aI4fP46zszOrV6/Gzc1N6cuoUaOUkf8//viDUaNGceLECVQqFc7OzgQFBfHo0SM+/vhjACV206dPL/Uaz83n7CdHy7BU50glp6spCGwGdWfsITNXxdW5PsWekz/9wdraWu24tbV1gU9aVq5cyfjx48nIyKBmzZqEh4ejo6MDPHtdhIeH07VrVypUqICGhgbW1taEhYXJTx4kSZL+Bd75BPl5ubm5bN26lYyMDNzc3MjMzARQS8Q0NTXR0dEhOjqaIUOGkJmZqXy0n09PTw8NDQ2io6Px8PDg6NGjmJiYKMkxQIsWLTAxMeHIkSPUqFGDo0ePUrduXbVEsEOHDmRmZnLy5Enatm3Lzp07qVq1Kr/99hsdO3ZECIGHhweBgYFFLl9mY2NDUlISUVFRtG7dukRxmDhxIsePHycmJqbYrRKfp6OjQ//+/QkODlZLkAMDAwtNDtevX4+Pjw8mJiZ89NFHrFu3TkmQ8/LyCAkJoX///moxyVeSDUr8/f0ZO3Ys27ZtK3GCPGXKFBYsWICzszNTpkyhb9++XLx4ES2tgi/l/v3706hRI1atWoWmpibx8fFoa2vTsmVLlixZwrRp0zh//nyx7c3MzFRea/BsWgmAroZAU1Pu1P6m6GoItf9mZ2cXWi8nJ0cpy5+W9PwxQJlb/Pyx3r1706ZNG5KTk1m0aBG9evXi4MGD6OnpIYRg+PDhWFpaEhkZib6+PuvXr6dz584cOXKkyE9cyqP8mBQVX+n1kHEuGzLOZaO8xrk07S0XCfLp06dxc3Pj6dOnGBkZsX37dmrXrk12djYODg5MmjSJoKAgDA0NWbRoEcnJySQlJQHPEl1DQ0MmTJhAQEAAQggmTJhAXl6eUic5ObnQj+atrKyUEank5OQCo1Kmpqbo6OgodS5fvsy1a9fYunUrmzZtIjc3l9GjR9OzZ08iIiIK7VuvXr3Ys2cP7u7u2NjY0KJFC9q3b8+AAQMKTX63bNnCokWL+P3333F2di51LAcPHsx7773H0qVLOXnyJGlpafj4+BRIkPPy8tiwYQPLli0D4MMPP2TMmDFcvHiR6tWrk5KSQmpqKjVr1ix1G/JpaGjg4uKizPssiXHjxuHj82wk8euvv6ZOnTpcvHix0HZcv36dL7/8Uil7Pl4mJiaoVCplVPtl5syZw9dff13g+NRGeRgY5BZyhvQ6fdPk2VSjXbt2FVp+8uRJtLW1gf8fQQ4NDaVq1apKnYSEBAwNDYu8xsCBA/noo4+YMWMGrVu35o8//mDXrl388MMPPHjwgAcPHuDt7c2vv/7K1KlT+eCDD15nF98J4eHhb7sJ/woyzmVDxrlslLc4vzhV9GXKRYJco0YN4uPjefDgAaGhofj7+3Pw4EFq165NaGgogwcPxszMDE1NTTw8PNS2Jba0tGTr1q385z//4dtvv0VDQ4O+ffvSuHFjNDU1lXqFTVMQQqgdL65OXl4emZmZbNq0CRcXFwDWrVuHq6urMlXjRZqamgQHBzNr1iwiIiI4duwYs2fPZt68ecTExKiNVMXFxTF48GDmzp1Lhw4dXiGSKF84+vnnn4mMjMTPz09JLp63d+9eMjIylFhaWFjg5eXF+vXrlT80iopJabwY45K0P19+bO7evVtogjxmzBiGDBnC999/j4eHB7169aJatWqlbuOkSZMYM2aM8jw9PR17e3vatm2Lubl5qa8nlUx2djbh4eF4enoW+hrN5+rqSqdOnYD/X+Lt6dOnyrGsrCz8/f0JCAhQjr0oKysLDQ0NateuTadOnZT5/x07dlT7dMHIyAhnZ+cir1MelTTO0t8j41w2ZJzLRnmNc/4nwCVRLhJkHR0dZae4Jk2aEBsby9KlSwkKCsLV1ZX4+HjS0tLIysrC0tKS5s2b06RJE+V8Ly8vLl26REpKClpaWlSsWBEbGxucnJyAZ9McXlzVAuDevXvKqLGNjQ3Hjx9XK09NTSU7O1upY2tri5aWlpIcA9SqVQt4Npr5snnJlSpVws/PDz8/P2bNmoWLiwurV69WRi7v3btHt27d6NGjB+PGjSt1DJ83aNAgVqxYwZkzZ4iJiSm0zvr167l//z4GBgbKsby8POLi4vjmm2+wtLTE1NSUs2fPvnI7cnNz+fPPP2natGmJz3n+F/H5P0wKM2PGDPr168fvv//O7t27mT59OiEhIXTv3r1U7dTV1VWbovN8W8rTPwzl1YtxfvToERcvXlSe37hxg8TERMzMzKhSpQqjRo1izpw51KxZE2dnZwICAjAwMFD+GLx8+TI//fQTXl5eWFpacuvWLebNm4e+vj6+vr5oa2vz/vvvY2pqypAhQ5g2bRr6+vqsWbOGq1ev0qVLl3/kz12+nsuGjHPZkHEuG+UtzqVp6zu/ikVhhBBqc0Lh2UfmlpaW/Pnnn5w4cYKuXbsWOM/CwoKKFSsSERHB3bt36dKlCwBubm6kpaWpJYvHjx8nLS2Nli1bKnUSEhKUaRnwbJRVV1dX+VZ7q1atyMnJ4dKlS0qd/GXHHBwcStw/U1NTbG1tlZU4srOz6dmzJ1ZWVqxdu7bE1ylKv379OH36NHXr1qV27doFyv/66y9++eUXQkJCiI+PV3s8evSI3bt3o6GhQZ8+fdi8eTO3b98ucI38b/6/zMaNG0lNTX2jH1e7uLgwevRo9u7dS48ePZRVPHR0dNTWvJXKjxMnTtCoUSMaNWoEPPukoFGjRkybNg2A8ePHM2rUKD799FOaNGnCrVu32Lt3LxUqVACefQfh0KFDdOrUierVq9O7d28MDQ05cuSIMtXKwsKCsLAwHj16RLt27WjSpAnR0dH88ssvNGjQ4O10XJIkSSoz7/wI8uTJk/H29sbe3p6HDx8SEhLCgQMHCAsLA2Dr1q1YWlpSpUoVTp8+zciRI+nWrZvaMk/BwcHUqlULS0tLjh49ysiRIxk9erQyolurVi06duzI0KFDCQoKAp6tk9q5c2eljpeXF7Vr18bPz4/58+dz//59xo0bx9ChQ5W5wh4eHjRu3JhBgwaxZMkS8vLy+Oyzz/D09FRGlWNiYhgwYAD79++nUqVKBAUFER8fT/fu3alWrRpPnz5l06ZNJCYmKvN/R40axR9//MG+ffsKrM0MYGZmpnz7viRMTU1JSkoq8i+p77//HnNzc3r16oWGhvrfUJ07d2bdunV07tyZgIAADhw4QPPmzZk9ezZNmjRBW1ubQ4cOMWfOHGJjY5Vv/D9+/Jjk5GRycnK4desW27ZtY/HixfznP/+hbdu2JW57ST158oQvv/ySnj174uTkxM2bN4mNjVWScUdHRx49esT+/ftp0KABBgYGaqPl0rurTZs2yhSfwuSv6V3UqiR2dnZFzkV+XpMmTdizZ8+rNlOSJEkqz8Q7btCgQcLBwUHo6OgIS0tL0b59e7F3716lfOnSpaJy5cpCW1tbVKlSRUydOlVkZmaqXWPChAnC2tpaaGtrC2dnZ7Fw4UKRl5enVuevv/4S/fv3FxUqVBAVKlQQ/fv3F6mpqWp1rl27Jnx8fIS+vr4wMzMTn3/+uXj69KlanVu3bokePXoIIyMjYW1tLQYOHCj++usvpTwyMlIA4sqVK0IIIU6dOiU++ugj4eTkJHR1dYW5ublo3bq1+PXXX5VzgJc+IiMji42ju7u7GDlyZJHlDRo0ENOnTxdCCFGvXj3x6aefFlovNDRUaGlpieTkZCGEEA8ePBATJ04Uzs7OQkdHR1hbWwsPDw+xfft2Jcbu7u5KW3V0dIStra3o3Lmz2LZtW7HtznflyhUBiLi4OOVYamqqWv+Dg4OFiYmJEEKIzMxM8eGHHwp7e3uho6Mj7OzsxOeffy6ePHminD98+HBhbm4uAKXvJZGWliYAkZKSUuJzpNLLysoSO3bsEFlZWW+7Kf9oMs5lQ8a5bMg4l43yGuf89++0tLRi66qEeMlQjCRJBaSnp2NiYkJKSor8kt4blJ2dza5du+jUqVO5muNW3sg4lw0Z57Ih41w2ymuc89+/09LSil0mt1zOQZYkSZIkSZKkN0UmyP8Ahw4dwsjIqMhHeRAQEFBk+59ftk+SJEmSJOlNe+e/pCcVr0mTJsTHx7/tZvwtw4cPp3fv3oWW6evrl3FrJEmSJEn6N5MJ8j+Avr6+sk50eWVmZlbkdtySJEmSJEllSU6xkCRJkiRJkqTnyARZkqR3xsOHDxk1ahQODg4YGxszYcIETpw4oZTPmDGDmjVrYmhoiKmpKR4eHgV2uExOTsbPzw8bGxsMDQ1p3LgxP//8c1l3RZIkSSrHZIJcxlatWkX9+vUxNjbG2NgYNzc3du/erZTfuXOHgQMHYmdnh4GBAR07duTPP/9Uu8alS5fo3r07lpaWGBsb07t37wJbZaempuLn54eJiQkmJib4+fkV2GTk+vXr+Pr6YmhoiIWFBSNGjCArK0utjhCCBQsW4OLigq6uLvb29gQEBLy0j5GRkbRt2xYzMzMMDAxwdnbG399f2VnP0dERlUpV5OPatWvFxrFNmzZKfR0dHapVq8akSZMK7LBYXFsOHDiASqUqdAMWqewNGTKE8PBwvv/+e06dOkXDhg3p2LEjt27dAp7tjLh8+XJOnz5NdHQ0jo6OeHl5ce/ePeUafn5+nD9/nl9//ZXTp0/To0cP+vTpQ1xc3NvqliRJklTOyAS5jFWuXJm5c+dy4sQJTpw4Qbt27ejatSuJiYkIIejWrRuXL1/ml19+IS4uDgcHBzw8PJRtpzMyMvDy8kKlUhEREcHhw4fJysrC19eXvLw85T79+vUjPj6esLAwwsLCiI+Px8/PTynPzc3Fx8eHjIwMoqOjCQkJITQ0lLFjx6q1d+TIkaxdu5YFCxZw7tw5du7cSbNmzYrsX2JiIt7e3jRt2pSoqChOnz7NsmXL0NbWVtoXGxtLUlKS2uPs2bPY2dnh6+tLlSpVShTLoUOHkpSUxMWLFwkMDGTFihVqu6eVpC3Su+PJkyeEhoYSGBhI69atqV69On379sXR0ZFVq1YBz17XHh4eVK1alTp16rBo0SLS09P53//+p1zn6NGjfPHFFzRr1oyqVasydepUKlasyKlTp95W1yRJkqTy5g1vWiKVgKmpqVi7dq04f/68AERCQoJSlpOTI8zMzMSaNWuEEELs2bNHaGhoqO0Cc//+fQGI8PBwIYQQZ86cEYA4duyYUufo0aMCEOfOnRNCCLFr1y6hoaEhbt26pdTZsmWL0NXVVa595swZoaWlpZxTEosXLxaOjo6l6n9ubq7o0KGDqFWrVol2txGi8J0Be/ToIRo3blyqtuTvbPjirokvI3fSezPS09MFIPbt2yeE+P+dmpo3by7c3d0L1M/MzBTz588XJiYm4t69e8rxDh06CB8fH/HXX3+J3NxcsWXLFmFoaCguXrxYVl0pV8rrjljljYxz2ZBxLhvlNc6l2UlPrmLxFuXm5rJ161YyMjJwc3NTpgfo6ekpdTQ1NdHR0SE6OpohQ4aQmZmJSqVCV1dXqaOnp4eGhgbR0dF4eHhw9OhRTExMaN68uVKnRYsWmJiYcOTIEWrUqMHRo0epW7cudnZ2Sp0OHTqQmZnJyZMnadu2LTt37qRq1ar89ttvdOzYESEEHh4eBAYGFrnihI2NDUlJSURFRdG6desSxWHixIkcP36cmJiYYne2Kcoff/zB4cOHcXR0/FttKUxmZqba1I309HQAWs/bR4624StfV/p/CTM6oKenR4sWLZg5cybVq1fHzMyMAwcOEBMTQ/Xq1cnOzgbg999/56OPPuLx48fY2tqye/duTExMlPIffviB/v37Y25ujpaWFgYGBmzdupUqVaoodaT/lx8TGZs3S8a5bMg4l43yGufStFcmyG/B6dOncXNz4+nTpxgZGbF9+3Zq165NdnY2Dg4OTJo0iaCgIAwNDVm0aBHJyckkJSUBzxJdQ0NDJkyYQEBAAEIIJkyYQF5enlInOTkZKyurAve1srIiOTlZqWNtba1Wbmpqio6OjlLn8uXLXLt2ja1bt7Jp0yZyc3MZPXo0PXv2JCIiotC+9erViz179uDu7o6NjQ0tWrSgffv2DBgwoNDkd8uWLSxatIjff/8dZ2fnUsVx5cqVrF27luzsbLKystDQ0GDFihWv3JaizJkzh6+//rrA8amN8jAwyC1Vm6XC7dq1CwB/f3+WL1+Oo6MjGhoaVKtWjdatW3Pp0iWlTmZmJgsWLCA9PZ29e/fSrVs3AgMDqVixIgDfffcdV65c4euvv8bY2Jjjx4/Ts2dPAgIC1P6AktSFh4e/7Sb8K8g4lw0Z57JR3uL8+PHjEteVCfJbUKNGDeLj43nw4AGhoaH4+/tz8OBBateuTWhoKIMHD8bMzAxNTU08PDzUdpKztLRk69at/Oc//+Hbb79FQ0ODvn370rhxYzQ1NZV6KpWqwH2FEGrHi6uTl5dHZmYmmzZtwsXFBYB169bh6urK+fPnqVGjRoHzNTU1CQ4OZtasWURERHDs2DFmz57NvHnziImJwdbWVqkbFxfH4MGDmTt3Lh06dCh1HPv378+UKVNIT09n3rx5GBsb88EHH7xSW15m0qRJjBkzRnmenp6Ovb09s+I0yNHWfMmZUkklzPj/n//gwYPJyMjgr7/+IiEhge+//x4DAwM6depU4LzRo0dTu3Ztbty4Qb9+/ZREOi4ujjp16gDw2Wef0bFjRxITE/n000/LrE/lRXZ2NuHh4Xh6eqKtrf22m/OPJeNcNmScy0Z5jXP+J8AlIRPkt0BHR0fZ2KNJkybExsaydOlSgoKCcHV1JT4+nrS0NLKysrC0tKR58+Y0adJEOd/Ly4tLly6RkpKClpYWFStWxMbGBicnJ+DZ1IIXV7UAuHfvnjJqbGNjU2B5rNTUVLKzs5U6tra2aGlpKckxQK1atYBnK2AUliDnq1SpEn5+fvj5+TFr1ixcXFxYvXq1MhJ77949unXrRo8ePRg3blypYwhgYmKixPGHH36gTp06rFu3jsGDB5eqLcXR1dVVm9KSL2qCB+bm5q/UdunlKlasiKGhIceOHWPfvn0EBgYW+Y+wEIKcnBy0tbWVj890dXXV6mtpPfunrjz9Q17WtLW1ZXzKgIxz2ZBxLhvlLc6laatcxeIdIIQosDyZiYkJlpaW/Pnnn5w4cYKuXbsWOM/CwoKKFSsSERHB3bt36dKlCwBubm6kpaURExOj1D1+/DhpaWm0bNlSqZOQkKBMywDYu3cvurq6uLq6AtCqVStycnK4dOmSUufChQsAODg4lLh/pqam2NraKitxZGdn07NnT6ysrFi7dm2Jr/My2traTJ48malTp770I5QX2yK9W/bs2UNYWBhXrlxh3759TJ06FRcXFz7++GMyMjKYPHkyx44d49q1a5w6dYohQ4Zw8+ZNevXqBUDNmjWpXr06n3zyCTExMVy6dImFCxcSHh5Ot27d3m7nJEmSpHJDjiCXscmTJ+Pt7Y29vT0PHz4kJCSEAwcOEBYWBsDWrVuxtLSkSpUqnD59mpEjR9KtWze8vLyUawQHB1OrVi0sLS05evQoI0eOZPTo0cqIbq1atejYsSNDhw4lKCgIgGHDhtG5c2eljpeXF7Vr18bPz4/58+dz//59xo0bx9ChQ5X5uR4eHjRu3JhBgwaxZMkS8vLy+Oyzz/D09FRGlWNiYhgwYAD79++nUqVKBAUFER8fT/fu3alWrRpPnz5l06ZNJCYmsmzZMgBGjRrFH3/8wb59+wpdf9jMzAwdHZ1Sx7Zfv35MnjyZlStXMm7cuBK1RXq3pKWlMWnSJG7evImZmRmNGzdm48aNaGtrk5uby7lz59i4cSMpKSmYm5vTtGlTDh06pEyn0NbWZteuXUycOBFfX18ePXpE9erV2bhxY6FTNCRJkiSpUG90PQ2pgEGDBgkHBweho6MjLC0tRfv27cXevXuV8qVLl4rKlSsLbW1tUaVKFTF16lSRmZmpdo0JEyYIa2troa2tLZydncXChQtFXl6eWp2//vpL9O/fX1SoUEFUqFBB9O/fv8BSZteuXRM+Pj5CX19fmJmZic8//1w8ffpUrc6tW7dEjx49hJGRkbC2thYDBw4Uf/31l1Kev0zalStXhBBCnDp1Snz00UfCyclJ6OrqCnNzc9G6dWvx66+/KucAL31ERkYWG8fClnkTQojZs2cLS0tL8fDhwxK1RS7z9u4qr8sIlTcyzmVDxrlsyDiXjfIa59Is86YSQoi3k5pLUvmUnp6OiYmJMoopvRnZ2dns2rWLTp06las5buWNjHPZkHEuGzLOZaO8xjn//TstLa3Y1azkHGRJkiRJkiRJeo5MkKV3zqFDhzAyMiryIUmSJEmS9CbJL+lJ75wmTZoQHx//tpshSZIkSdK/lEyQpXeOvr6+sr6xJEmSJElSWZNTLCRJkiRJkiTpOTJBliTpnfHw4UNGjRqFg4MDxsbGTJgwgRMnTijlM2bMoGbNmhgaGmJqaoqHh0eBHSHbtGmDSqVSe3z44Ydl3RVJkiSpHJMJsiRJ74whQ4YQHh7O999/z6lTp2jYsCEdO3bk1q1bALi4uLB8+XJOnz5NdHQ0jo6OeHl5ce/ePbXrDB06lKSkJOWRv2GOJEmSJJWETJBLaOXKlTg5OaGnp4erqyuHDh1SyoQQzJgxAzs7O/T19WnTpg2JiYlq52dmZvLFF19gYWGBoaEhXbp04ebNm2p1Tp06haenJxUrVsTc3Jxhw4bx6NEjtTrXr1/H19cXQ0NDLCwsGDFiBFlZWUr51atXC4yeqVQqZae+okRGRtK2bVvMzMwwMDDA2dkZf39/cnJyADhw4AAqlarQne8cHR1ZsmRJScKIo6MjKpWKkJCQAmV16tRBpVKxYcOGAmUBAQFoamoyd+7cQq+bnJzMF198QdWqVdHV1cXe3h5fX1/2799f4N4qlQp9fX0cHR3p3bs3ERERJWq79GY9efKE0NBQAgMDad26NdWrV6dv3744OjqyatUq4NluiR4eHlStWpU6deqwaNEi0tPT+d///qd2LQMDA2xsbJSHiYnJ2+iSJEmSVE7JBLkEfvrpJ0aNGsWUKVOIi4vj/fffx9vbm+vXrwMQGBjIokWLWL58ObGxsdjY2ODp6cnDhw+Va4waNYrt27cTEhJCdHQ0jx49onPnzuTm5gJw+/ZtPDw8qF69OsePHycsLIzExEQGDhyoXCM3NxcfHx8yMjKIjo4mJCSE0NBQxo4dW6DN+/btUxtBa9euXZH9S0xMxNvbm6ZNmxIVFcXp06dZtmwZ2tra5OXlvaYo/j97e3uCg4PVjh07dozk5GQMDQ0LPSc4OJjx48ezfv36AmVXr17F1dWViIgIAgMDOX36NGFhYbRt25bPPvtMre7MmTNJSkri/PnzbNq0iYoVK+Lh4cHs2bNfXwelV5KTk0Nubi56enpqx/X19YmOji5QPysri++++w4TExMaNGigVrZ582YsLCyoU6cO48aNU/tdlCRJkqTiyFUsSmDRokUMHjyYIUOGALBkyRL27NnDqlWrCAgIYMmSJUyZMoUePXoAsHHjRqytrfnxxx/55JNPSEtLY926dXz//fd4eHgA8MMPP2Bvb8++ffvo0KEDv/32G9ra2qxYsQINjWd/t6xYsYJGjRpx8eJFqlevzt69ezlz5gw3btzAzs4OgIULFzJw4EBmz56ttiuMubk5NjY2JepfeHg4tra2BAYGKseqVatGx44d/37wCtG/f38WL17MjRs3sLe3B2D9+vX079+fTZs2Fah/8OBBnjx5wsyZM9m0aRNRUVG0bt1aKf/0009RqVTExMSoJdh16tRh0KBBateqUKGCEpcqVarQunVrbG1tmTZtGj179qRGjRol7kfzOfvJ0So8oZdK5+pcHypUqICbmxvffPMNtWrVwszMjAMHDhATE4Ozs7NS97fffuPDDz/k8ePH2NraEh4ejoWFhVLev39/nJycsLGxISEhgUmTJvHHH38QHh7+NromSZIklUMyQS5GVlYWJ0+eZOLEiWrHvby8OHLkCFeuXCE5ORkvLy+lTFdXF3d3d44cOcInn3zCyZMnyc7OVqtjZ2dH3bp1OXLkCB06dCAzMxMdHR0lOYZnI2cA0dHRVK9enaNHj1K3bl0lOQaUc0+ePEnbtm2V4126dOHp06c4OzszevRoevbsWWQfbWxsSEpKKpB4vinW1tZ06NCBjRs3MnXqVB4/fsxPP/3EwYMHC02Q161bR9++fdHW1qZv376sW7dOaef9+/cJCwtj9uzZhY4+V6xYsdj2jBw5km+++YZffvmF8ePHFyjPzMwkMzNTeZ6eng6AroZAU1Pu1P46ZGdnA8/+UBo2bBiVKlVCU1OTqlWr0rt3b/744w+lznvvvUdsbCx//fUX69ato3fv3kRHR2NlZQWg9qlLjRo1cHJyokWLFsTExNCoUaMy79u7Lj+u+f+V3gwZ57Ih41w2ymucS9NemSAXIyUlhdzcXKytrdWOW1tbk5ycTHJysvL8xfJr164Bz+bH6ujoYGpqWug1ANq1a8eYMWOYP38+I0eOJCMjg8mTJwOQlJSkXOfF+5iamqKjo6Ncx8jIiEWLFtGqVSs0NDT49ddf6dOnDxs3buSjjz4qtI+9evViz549uLu7Y2NjQ4sWLWjfvj0DBgwosFd55cqVC5z/+PHjIqJXtEGDBjF27FimTJnCzz//TLVq1WjYsGGBeunp6YSGhnLkyBEAPvroI1q1asWyZcswNjbm4sWLCCGoWbNmqduQz8zMDCsrK65evVpo+Zw5c/j6668LHJ/aKA8Dg9xXvq/0/3bt2qX8/9ixY/nss894/PgxZmZmzJ8/H0NDQ7U6+bp168aePXuYOHFikX8ECiHQ0tJi69atyu+SVJAcYS8bMs5lQ8a5bJS3OJcmX5EJcgmpVCq150IItWPFlRfm+Tp16tRh48aNjBkzhkmTJqGpqcmIESOwtrZGU1OzyPu8eB0LCwtGjx6tlDVp0oTU1FQCAwOLTJA1NTUJDg5m1qxZREREcOzYMWbPns28efOIiYnB1tZWqXvo0CEqVKigdn6bNm1e2s/C+Pj48MknnxAVFcX69esLTIXI9+OPP1K1alVljmnDhg2pWrUqISEhDBs2DCGejeAWF+vivOznNWnSJMaMGaM8T09Px97enllxGuRoaxZ6jlQ6CTM6FDiWnZ3N9u3bSUhIYM6cOXTq1KnQcw0MDHB0dCyyPCEhgZycHLy9vXn//fdfa7v/CbKzswkPD8fT0xNtbe233Zx/LBnnsiHjXDbKa5zzPwEuCZkgF8PCwgJNTU1lhDbf3bt3sba2VuazJicnqyWS+eXwbApDVlYWqampaqPId+/epWXLlsrzfv360a9fP+7cuYOhoSEqlYpFixbh5OSkXOfFNV9TU1PJzs4uMLL8vBYtWrB27dpi+1qpUiX8/Pzw8/Nj1qxZuLi4sHr1arXRUycnpwLTFrS0Sv8y0tLSws/Pj+nTp3P8+HG2b99eaL3169eTmJiodo+8vDzWrVvHsGHDcHZ2RqVScfbsWbp161bqdgD89ddf3Lt3T4nzi3R1ddHV1S1wPGqCB+bm5q90T6lwe/bsQQhBjRo1OHfuHFOnTsXFxYUhQ4aQlZXF7Nmz6dKlC7a2tvz111+sXLmSmzdv8uGHH6Ktrc2lS5fYvHkznTp1wsLCgjNnzjB27FgaNWqEu7u72h+bkjptbe1y9UZXXsk4lw0Z57JR3uJcmrbKVSyKoaOjg6ura4GPEcLDw2nZsqXyZaDny7Oysjh48KCS/Lq6uqKtra1WJykpiYSEBLUEOZ+1tTVGRkb89NNP6Onp4enpCYCbmxsJCQlqHxPv3bsXXV1dXF1di+xDXFycWvJeEqamptja2pKRkVGq80pj0KBBHDx4kK5duxaYfgJw+vRpTpw4wYEDB4iPj1ceUVFRxMbGkpCQgJmZGR06dGDFihWFtrWwZeletHTpUjQ0NF45wZZen7S0ND777DNq1qzJoEGDqF27Nrt27UJbWxtNTU3OnTvHBx98gIuLC507d+bevXscOnSIOnXqAM9+X/fv30+HDh2oUaMGI0aMwMvLi3379snkWJIkSSoxOYJcAmPGjMHPz48mTZrg5ubGd999x/Xr1xk+fDgqlYpRo0YREBCAs7Mzzs7OBAQEYGBgQL9+/QAwMTFh8ODBjB07FnNzc8zMzBg3bhz16tVTVrUAWL58OS1btsTIyIjw8HC+/PJL5s6dq4zYenl5Ubt2bfz8/Jg/fz73799n3LhxDB06VJkrvHHjRrS1tWnUqBEaGhrs3LmTb7/9lnnz5in3iYmJYcCAAezfv59KlSoRFBREfHw83bt3p1q1ajx9+pRNmzaRmJjIsmXL3lhca9WqRUpKCgYGBoWWr1u3jmbNmhX6xUE3NzfWrVvH4sWLWblyJS1btqRZs2bMnDmT+vXrk5OTQ3h4OKtWreLs2bPKeQ8fPiQ5OZns7GyuXLnCDz/8wNq1a5kzZw7Vq1d/Y32VSqZ379707t0bePYR3q5du5Q1jPX09Ni2bdtLz7e3t+fgwYNvvJ2SJEnSP5tMkEugT58+/PXXX8oaunXr1mXXrl04ODgAMH78eJ48ecKnn35KamoqzZs3Z+/evWpzdRcvXoyWlha9e/fmyZMntG/fng0bNqiNasXExDB9+nQePXpEzZo1CQoKws/PTynX1NTk999/59NPP6VVq1bo6+vTr18/FixYoNbeWbNmce3aNTQ1NXFxcWH9+vVq848fP37M+fPnlW9zNmvWjOjoaIYPH87t27cxMjKiTp067NixA3d39zcS03xFTVHIysrihx9+YMKECYWWf/DBB8yZM4d58+bh5OTEqVOnmD17NmPHjiUpKQlLS0tcXV2VDSbyTZs2jWnTpqGjo6N8IXH//v1qK4BIkiRJkvTvphL533KSJKlE0tPTMTExISUlRc5BfoPyR5A7depUrua4lTcyzmVDxrlsyDiXjfIa5/z377S0tAKrdL1IzkGWJEmSJEmSpOfIBFl6bTZv3oyRkVGhj/wvUUmSJEmSJL3r5Bxk6bXp0qULzZs3L7SsPH0EI0mSJEnSv5tMkKXXpkKFCgU2EZEkSZIkSSpv5BQLSZIkSZIkSXqOTJAlxYEDB1CpVCXaXON1unr1KiqVivj4+GLrvtjGDRs2FNjZTyqfHj58yKhRo3BwcEBfX5/WrVvz559/KuXbtm2jQ4cOWFhYFPl6uXTpEt27d8fS0hJjY2N69+7NnTt3yrAXkiRJ0j9BuUiQV65ciZOTE3p6eri6unLo0CGlTAjBjBkzsLOzQ19fnzZt2pCYmKh2fmZmJl988QUWFhYYGhrSpUsXbt68qVbn1KlTeHp6UrFiRczNzRk2bBiPHj1Sq3P9+nV8fX0xNDTEwsKCESNGkJWVpZTnJ3ovPsLCwl7av8jISNq2bYuZmRkGBgY4Ozvj7+9PTk4O8PLE1dHRkSVLlpQkjMTFxdG5c2esrKzQ09PD0dGRPn36kJKSAkDLli1JSkpSNmYoD/r06cOFCxfedjOk12DIkCGEh4fz/fffc/r0aTw8PJg+fTq3bt0CICMjg1atWjF37txCz8/IyMDLywuVSkVERASHDx8mKysLX19f8vLyyrIrkiRJUjn3zifIP/30E6NGjWLKlCnExcXx/vvv4+3tzfXr1wEIDAxk0aJFLF++nNjYWGxsbPD09OThw4fKNUaNGsX27dsJCQkhOjqaR48e0blzZ3JzcwG4ffs2Hh4eVK9enePHjxMWFkZiYiIDBw5UrpGbm4uPjw8ZGRlER0cTEhJCaGgoY8eOLdDmffv2kZSUpDzatWtXZP8SExPx9vamadOmREVFcfr0aZYtW4a2tvZrfVO/e/cuHh4eWFhYsGfPHs6ePcv69euxtbXl8ePHAMrmGSqV6rXd903T19fHysrqbTdD+puePHlCaGgogYGBtG7dmurVqzNt2jSsrKwICgoCwM/Pj2nTpqntPvm8w4cPc/XqVTZs2EC9evWoV68ewcHBxMbGEhERUZbdkSRJkso78Y5r1qyZGD58uNqxmjVriokTJ4q8vDxhY2Mj5s6dq5Q9ffpUmJiYiNWrVwshhHjw4IHQ1tYWISEhSp1bt24JDQ0NERYWJoQQIigoSFhZWYnc3FylTlxcnADEn3/+KYQQYteuXUJDQ0PcunVLqbNlyxahq6sr0tLShBBCXLlyRQAiLi6uxP1bvHixcHR0fGmdyMhIAYjU1NQCZQ4ODmLx4sXF3mf79u1CS0tLZGdnl+o+3333nahcubLQ19cX3bp1EwsXLhQmJiZK+fTp00WDBg3Epk2bhIODgzA2NhZ9+vQR6enpSp3du3eLVq1aCRMTE2FmZiZ8fHzExYsXlfLSxO3FNgYHB5e6PXl5eWLevHnCyclJ6Onpifr164utW7cWe+98aWlpAhApKSklPkd6ufT0dAGIffv2KceysrJEjRo1ROvWrdXqFvV6+fXXX4WmpqZ4+vSpcuzx48dC4//Yu/O4mrP/geOv26pNWqjQVChLMZKlMLKVkX2fQTH2MZYQhsxYRpElxr6nBpOZMYwlEVnHElm+aQxjBplRmkgh6laf3x8efX6uW5ThJs7z8biPmfs553M+57xL99zzOZ9ztLSk6dOnv8nql2k5OTnSjh07pJycnNKuyjtNxFkzRJw1o6zGueDzu6Df9iJv9SoWOTk5xMfH8+WXX6oc9/b25sSJE1y/fp2UlBS8vb3lNH19fTw9PTlx4gTDhw8nPj4epVKpkqdy5cq4uLhw4sQJ2rVrR3Z2Nnp6emhp/f+AuoGBAQDHjx+nRo0anDx5EhcXFypXriznKTg3Pj5eZavizp078+TJExwdHRk3bhw9e/Ysso3W1tYkJydz9OhRWrRo8erBeglra2tyc3PZvn07PXv2LNYo8a+//sqIESMICQmhc+fOHDhwgK+++kot359//smOHTvYvXs36enp9O7dm7lz5xIUFAQ8vfU9fvx46taty6NHj/j666/p1q0bFy5cUIn56/Ky+kybNo2ff/6ZlStX4ujoyNGjR+nfvz8VK1Ys0dbaTeYcJFfH6LXX/31zY24HTExM8PDw4JtvvqF27dpYWVmxefNmrl69Wuw7Ke7u7hgZGTF58mSCg4ORJInJkyeTn59PcnLyG26FIAiC8C55bR3k+/fvv/aHpdLS0sjLy8PKykrluJWVFSkpKaSkpMjvn0+/efMmACkpKejp6WFmZlZoGQCtW7dm/PjxzJ8/n7Fjx/Lo0SOmTp0KIH+wpqSkqF3HzMwMPT09uRxjY2NCQ0Np1qwZWlpa7Ny5kz59+hAeHk7//v0LbWOvXr3Yt28fnp6eWFtb4+7uTps2bfDz81PbBrFq1apq5xdMj3gZd3d3pk6dSt++fRkxYgSNGzemdevW+Pn5qbWrwNKlS2nfvj0BAQEAODk5ceLECXbv3q2SLz8/n40bN8pLvPn6+nLw4EG5Q9qjRw+V/OvXr6dSpUr89ttvuLi4FKv+JfGi+jx69IjQ0FBiY2Px8PAAoFq1ahw/fpzVq1cX2kHOzs4mOztbfp+ZmQmAvpaEtrbYqf2/UiqVAGzYsIFhw4ZRpUoVtLW1qV+/Pi1atODOnTtynmfzK5VKleMVKlTg+++/Z/To0SxZsgQtLS369OmDq6srCoVCJa/w/56Np/DmiDhrhoizZpTVOJekvq/UQQ4JCZEf8ALo3bs327Ztw9ramqioKD788MNXKbZIz492SpKkcuxl6YV5No+zszPh4eGMHz+eKVOmoK2tzZgxY7CyskJbW7vI6zxfjqWlJePGjZPTGjZsSHp6OvPmzSuyg6ytrU1YWBizZ88mNjaWU6dOERQUREhICHFxcdjY2Mh5jx07prbOcMuWLV/YzmcFBQUxfvx4+TqrVq0iODiYo0ePUrduXbX8V65coVu3birHGjdurNZBtre3V6mXjY0Nqamp8vs///yTr776ilOnTpGWliaPCCYlJb2RDvKL6vPbb7/x5MkTvLy8VM7JycnB1dW10PLmzJnDzJkz1Y5Pc83H0DDvNdb8/RQVFSX//4QJE/jiiy/IysrC3Nyc+fPnY2RkpJKnYFWK48ePc/v2bbXyQkNDyczMREtLC2NjYwYOHEi9evVUyhDUxcTElHYV3gsizpoh4qwZZS3OxR1UhFfsIK9evZpNmzYBT4MTExPD3r17+eGHH5g4cSL79+9/lWLVWFpaoq2tLY/QFkhNTcXKygpra2vg6ejusx3JgnR4OrUgJyeH9PR0lVHk1NRUmjZtKr/v27cvffv25c6dOxgZGaFQKAgNDcXBwUEu5/Tp0yr1SE9PR6lUFjkCC09HbtetW/fStlapUgVfX198fX2ZPXs2Tk5OrFq1SqVj5uDgoDZKr6NTsh+hhYUFvXr1olevXsyZMwdXV1cWLFhAeHi4Wt7CvmhIkvqI6fO75CkUCpXb4p06dcLW1pa1a9dSuXJl8vPzcXFxUVkB5HV6UX0K/rtnzx6qVKmikk9fX7/Q8qZMmcL48ePl95mZmdja2tKqVSssLCxeZ9WFZ6SmpnL+/HlCQkLw8fGRj9+4cQOA5s2bU79+/ReWcejQITIyMggICKBmzZpvsLZll1KpJCYmBi8vL7Hj5Rsk4qwZIs6aUVbjXHAHuDheqYOcnJyMra0tALt376Z37954e3tjb29f5FbDr0JPTw83NzdiYmJURjJjYmLo0qULDg4OWFtbExMTI4/+5eTkcOTIEUJCQgBwc3NDV1eXmJgYevfuLdf/0qVLzJs3T+2aBZ3dDRs2UK5cOXmk0cPDg6CgIJKTk+XO+P79+9HX18fNza3INpw/f16l814cZmZm2NjY8OjRoxKdV1J6enpUr169yOvUqlWLuLg4lWNnz54t0TXu3r3L5cuXWb16NR999BHwdOSvtNSpUwd9fX2SkpKKPd9YX1+/0M6zrq5umfrD8Lbbt28fkiRRs2ZNrl27RkBAAFWqVGHQoEHo6upy7949kpKS5FHjv/76C11dXaytreUvy2FhYdSuXZuKFSty8uRJxo4dy7hx497InYp3jfh91gwRZ80QcdaMshbnktT1lTrIZmZm3Lp1C1tbW6Kjo5k9ezbwdHSxYOm012X8+PH4+vrSsGFDPDw8WLNmDUlJSYwYMQKFQoG/vz/BwcE4Ojri6OhIcHAwhoaG9O3bFwBTU1MGDx7MhAkTsLCwwNzcnICAAOrWrauyXNSyZcto2rQpxsbGxMTEMHHiRObOnSuP2Hp7e1OnTh18fX2ZP38+9+7dIyAggKFDh8pzhcPDw9HV1cXV1RUtLS127drFkiVL5M46QFxcHH5+fhw8eJAqVaqwevVqLly4QLdu3ahevTpPnjwhIiKCxMREli5d+triuHv3biIjI/nkk09wcnJCkiR27dpFVFQUYWFhhZ4zevRoWrRoQWhoKJ06dSI2Npa9e/eWaBk4MzMzLCwsWLNmDTY2NiQlJak9dKlJJiYmBAQEMG7cOPLz82nevDmZmZmcOHECY2NjBgwYUGp1e99lZGQwZcoU/v77b8zNzenWrRvNmzeX/6Dt3LmTzz77TM7/ySefADB9+nRmzJgBPJ0WNGXKFO7du4e9vT2BgYEq054EQRAEoTheqYPcvXt3+vbti6OjI3fv3qV9+/YAXLhwgRo1arzWCvbp04e7d+8ya9YskpOTcXFxISoqCjs7OwAmTZrE48ePGTlyJOnp6TRp0oT9+/erzEFdtGgROjo69O7dm8ePH9OmTRs2btyoMr84Li6O6dOn8/DhQ2rVqsXq1avx9fWV07W1tdmzZw8jR46kWbNmGBgY0LdvXxYsWKBS39mzZ3Pz5k20tbVxcnJiw4YNKvOPs7KyuHLlijxRvHHjxhw/fpwRI0Zw+/ZtjI2NcXZ2ZseOHSVaUeFl6tSpg6GhIRMmTODWrVvo6+vj6OjIunXrVNr5rGbNmsnTPKZNm0a7du0YN24cy5YtK/Z1tbS0iIyMZMyYMbi4uFCzZk2WLFlSornTr9s333xDpUqVmDNnDn/99RcVKlSgQYMG8oOZQuno3bu3fJcHnt7Ce3be8MCBA1XWJi/M3Llzi9xIRBAEQRCKSyEVNqn0JZRKJd9++y23bt1i4MCB8vSGxYsXY2xszJAhQ157RYW3w9ChQ/n9999VdjN832RmZmJqakpaWpqYg/wGFXSQfXx8ytQtvLJGxFkzRJw1Q8RZM8pqnAs+vzMyMtRWCnveK40g6+rqykt/Pcvf3/9VihPeYgsWLMDLywsjIyP27t1LeHg4K1asKO1qCYIgCIIgvDGvvEvDd999R/PmzalcubK85vDixYv55ZdfXlvlhOLbvHkzxsbGhb6cnZ1fudy4uDi8vLyoW7cuq1atYsmSJW/0DsGIESOKbMeIESPe2HUFQRAEQRAKvNII8sqVK/n666/x9/cnKChIfjCvQoUKLF68mC5durzWSgov17lz5yJXEPkvtz9++OGHVz73VcyaNavQuxPAS2+HCIIgCIIgvA6v1EFeunQpa9eupWvXrioPxDRs2LDIzo3wZpmYmKhtIlIWVapUiUqVKpV2NQRBEARBeI+90hSL69evF7rrmL6+/htfu1cQBEEQBEEQ3qRX6iA7ODhw4cIFteN79+6lTp06/7VOgiC8Y3Jzc5k2bRoODg4YGBhQrVo1Zs2apbLj4owZM6hVqxZGRkaYmZnx8ccfc/XqVTn93r17jB49mpo1a2JoaMgHH3zAmDFjyMjIKI0mCYIgCO+wV+ogT5w4kS+++IKtW7ciSRJxcXEEBQUxdepUJk6c+LrrKAgAHD58GIVCwf3794vMM2PGjJduPyxoXkhICKtWrWLZsmVcvnyZefPmMX/+fJXNcJycnFi2bBkJCQkcP34cOzs7ZsyYwb///gvA7du3uX37NgsWLCAhIYGNGzcSHR3N4MGDS6tZgiAIwrtKekVr1qyRPvjgA0mhUEgKhUKqWrWqtG7dulct7oWWL18u2dvbS/r6+lKDBg2ko0ePymn5+fnS9OnTJRsbG6lcuXKSp6endOnSJZXznzx5Io0aNUqysLCQDA0NpU6dOkm3bt1SyRMfHy+1bdtWMjU1lczNzaWhQ4dKDx48UMlz8+ZNqWPHjpKhoaFkYWEhjR49WsrOzpbTr1+/LgFqr717976wfbGxsVLLli0lMzMzycDAQKpRo4bk5+cnKZVKSZIk6dChQxIgpaenq51rZ2cnLVq0qDhhlOzs7CRA+v7779XS6tSpIwFSWFiYWlpQUJCkpaUlzZkzp9Byk5OTpVGjRkkODg6Snp6eVLVqValjx47SgQMH1K4NSOXKlZPs7OykXr16SQcPHixW3SXpxXEo8ODBAyktLa1Y5U2fPl368MMPi339AhkZGRJQ7OsIktShQwdp0KBBKse6d+8u9e/fv8hz0tLSJECKjo4uMs8PP/wg6enpyf9WhJLLycmRduzYIeXk5JR2Vd5pIs6aIeKsGWU1zgWf3xkZGS/NW+IR5NzcXMLDw+nUqRM3b94kNTWVlJQUbt269UZGcrZu3Yq/vz+BgYGcP3+ejz76iPbt25OUlATAvHnzCA0NZdmyZZw5cwZra2u8vLx48OCBXIa/vz/bt28nMjKS48eP8/DhQzp27CivvnH79m3atm1LjRo1OH36NNHR0SQmJqrs2pWXl0eHDh149OgRx48fJzIykm3btjFhwgS1Oh84cIDk5GT51bp16yLbl5iYSPv27WnUqBFHjx4lISGBpUuXoqurq3L7+XWxtbVV21r61KlTpKSkYGRkVOg5YWFhTJo0iQ0bNqil3bhxAzc3N2JjY5k3bx4JCQlER0fTqlUrvvjiC5W8BbshXrlyhYiICCpUqEDbtm0JCgp6be0zNjYWm3e8hZo3b87BgwflKRMXL17k+PHj+Pj4FJo/JyeHdevWYWhoSL169Yost2Cxdx2dV3reWBAEQRAKVeJPFR0dHT7//HMuX74MgKWl5Wuv1LNCQ0MZPHiwvPbu4sWL2bdvHytXriQ4OJjFixcTGBhI9+7dAQgPD8fKyootW7YwfPhwMjIyWL9+Pd999x1t27YFYNOmTdja2nLgwAHatWvH7t270dXVZfny5WhpPf3OsHz5clxdXbl27Ro1atRg//79/Pbbb9y6dYvKlSsDsHDhQgYOHEhQUJDKEmQWFhZYW1sXq30xMTHY2Ngwb948+Vj16tX5+OOP/3vwCtGvXz8WLVrErVu3sLW1BWDDhg3069ePiIgItfxHjhzh8ePHzJo1i4iICI4ePUqLFi3k9JEjR6JQKIiLi1PpYDs7OzNo0CCVskxMTOS4fPDBB7Ro0QIbGxu+/vprevbsSc2aNYvVhvj4eCZPnsxvv/1G/fr1CQsLk8+dMWMGO3bskOfIHz58mEmTJpGYmIiuri7Ozs5s2bKFQ4cOMXPmTAAUCgXw9IvAy7YyflaTOQfJ1Sn8S4Xw/27M7cDkyZPJyMigVq1aaGtrk5eXR1BQEJ9++qlK3t27d/PJJ5+QlZWFjY0NM2fOLPJvzN27d/nmm28YPny4JpohCIIgvEdeadilSZMmnD9/Hjs7u9ddHxU5OTnEx8fz5Zdfqhz39vbmxIkTXL9+nZSUFLy9veU0fX19PD09OXHiBMOHDyc+Ph6lUqmSp3Llyri4uHDixAnatWtHdnY2enp6cucYwMDAAIDjx49To0YNTp48iYuLi9w5BuRz4+PjadWqlXy8c+fOPHnyBEdHR8aNG0fPnj2LbKO1tTXJyclqHc83xcrKinbt2hEeHs60adPIyspi69atHDlypNAO8vr16/n000/R1dXl008/Zf369XI97927R3R0NEFBQYWOPleoUOGl9Rk7dizffPMNv/zyC5MmTSpWGwIDA1m4cCEVK1ZkxIgRDBo0iF9//VUtX25uLl27dmXo0KF8//335OTkEBcXh0KhoE+fPly6dIno6GgOHDgAgKmpaaHXy87OJjs7W36fmZkJgL6WhLZ2iXdqf+8olUq2bt3Kpk2biIiIoE6dOly8eJGAgAAqVaqEn5+fnLd58+acOXOGu3fvsnbtWubPn0/Pnj2pUqWKSpmZmZn4+PhQu3Ztpk6dilKp1HSz3hkFsRMxfLNEnDVDxFkzymqcS1LfV+ogjxw5kgkTJvD333/j5uam1jl60S3RkkhLSyMvLw8rKyuV41ZWVqSkpJCSkiK/fz69YHe/lJQU9PT0MDMzK7QMgNatWzN+/Hjmz5/P2LFjefToEVOnTgUgOTlZLuf565iZmaGnpyeXY2xsTGhoKM2aNUNLS4udO3fSp08fwsPD6d+/f6Ft7NWrF/v27cPT0xNra2vc3d1p06YNfn5+ahtjVK1aVe38rKysIqJXtEGDBjFhwgQCAwP56aefqF69eqEPtmVmZrJt2zZOnDgBQP/+/WnWrBlLly6lfPnyXLt2DUmSqFWrVonrUMDc3JxKlSpx48aNYp8TFBSEp6cnAF9++SUdOnTgyZMnlCtXTq3+GRkZdOzYkerVqwNQu3ZtOd3Y2BgdHZ2XjvbPmTNHHm1+1jTXfAwN84pd7/dVVFQU/v7+9OjRAxMTE27duoW5uTkff/wx06dPL3KEuHv37sTExPDVV1+pfMl8/PgxM2bMQF9fn8GDBxMTE6OpprzTRBw1Q8RZM0ScNaOsxbkkfaZX6iD36dMHgDFjxsjHFAoFkiShUCjkub2vS8Et8AIF1yluemGezePs7Ex4eDjjx49nypQpaGtrM2bMGKysrNDW1i7yOs+XY2lpybhx4+S0hg0bkp6ezrx584rsIGtraxMWFsbs2bOJjY3l1KlTBAUFERISQlxcHDY2NnLeY8eOqW0G0rJlyxe2szAdOnRg+PDhHD16lA0bNqhNhSiwZcsWqlWrxocffghA/fr1qVatGpGRkQwbNgxJejp6+rJYv0xxfl7PevYLWEF8UlNT+eCDD1TymZubM3DgQNq1a4eXlxdt27ald+/eKjEtjilTpjB+/Hj5fWZmJra2tsw+r0WurvYLzhQALs1ohyRJ1K1bV2XOcUJCAnFxcUXOQ1YqlUiSxAcffCDnyczMpEOHDlhZWbFz504MDQ010oZ3mVKpJCYmBi8vr/+066bwYiLOmiHirBllNc4Fd4CL45U6yNevX3+V00rM0tISbW1teYS2QGpqKlZWVvLIX0pKikqnpyAdnk5hyMnJIT09XWUUOTU1laZNm8rv+/btS9++fblz5w5GRkYoFApCQ0NxcHCQyzl9+rRKPdLT01EqlWojy89yd3dn3bp1L21rlSpV8PX1xdfXl9mzZ+Pk5MSqVatURi4dHBzUpi28ysNJOjo6+Pr6Mn36dE6fPs327dsLzbdhwwYSExNVrpGfn8/69esZNmwYjo6OKBQKLl++TNeuXUtcD3g6j/Tff/+V41wcz/5jLOhYF/VAY1hYGGPGjCE6OpqtW7cybdo0YmJicHd3L/b19PX10dfXVzt+dHJb8UBgMXXq1Im5c+fi4OCAs7Mz58+f59tvv2XQoEHo6ury6NEjgoKC6Ny5MzY2Nty9e5dly5Zx9+5devXqha6uLg8ePKBDhw5kZWWxefNmHj9+zOPHjwGoWLGiypdZoeR0dXXL1AddWSXirBkizppR1uJckrq+0jrIdnZ2L3y9Lnp6eri5uakN4cfExNC0aVMcHBywtrZWSc/JyeHIkSNy59fNzQ1dXV2VPMnJyVy6dEmlg1zAysoKY2Njtm7dSrly5fDy8gLAw8ODS5cuyVMuAPbv34++vj5ubm5FtuH8+fMlHrE0MzPDxsbmje5KOGjQII4cOUKXLl3Upp/A09G9s2fPcvjwYS5cuCC/jh49ypkzZ7h06RLm5ua0a9eO5cuXF1rXF61XXODbb79FS0vrlTvYxeHq6sqUKVM4ceIELi4ubNmyBXj6+/W673YIhVu6dCk9e/Zk5MiR1K5dm4CAAIYPH84333wDPL2T8vvvv9OjRw+cnJzo2LEj//77L8HBwTg7OwNPH848ffo0CQkJ1KhRAxsbG/l169at0myeIAiC8I55pRHkwh7metazD938V+PHj8fX15eGDRvi4eHBmjVrSEpKYsSIESgUCvz9/QkODsbR0RFHR0eCg4MxNDSkb9++wNMHrwYPHsyECROwsLDA3NycgIAA6tatK69qAbBs2TKaNm2KsbExMTExTJw4kblz58ojtt7e3tSpUwdfX1/mz5/PvXv3CAgIYOjQofJc4fDwcHR1dXF1dUVLS4tdu3axZMkSQkJC5OvExcXh5+fHwYMHqVKlCqtXr+bChQt069aN6tWr8+TJEyIiIkhMTFTZROF1q127NmlpaUXeol6/fj2NGzcu9MFBDw8P1q9fz6JFi1ixYgVNmzalcePGzJo1i3r16pGbm0tMTAwrV66UVzsBePDgASkpKSiVSq5fv86mTZtYt24dc+bMoUaNGq+9jdevX2fNmjV07tyZypUrc+XKFa5evSr/ftrb23P9+nUuXLhA1apVMTExKXSkWPjvTExMWLx4MYsXLy40vVy5cvz8888qx5RKJVFRUfL7li1bytN6BEEQBOFNeqUO8tixY1XeK5VKsrKy0NPTw9DQ8LV2kPv06cPdu3flNXRdXFyIioqSR6onTZrE48ePGTlyJOnp6TRp0oT9+/erzNVdtGgROjo69O7dm8ePH9OmTRs2btyocks2Li6O6dOn8/DhQ2rVqsXq1avx9fWV07W1tdmzZw8jR46kWbNmGBgY0LdvXxYsWKBS39mzZ3Pz5k20tbVxcnJiw4YNKvOPs7KyuHLlivwkZePGjTl+/DgjRozg9u3bGBsb4+zszI4dO+QH0d6UoqYH5OTksGnTJiZPnlxoeo8ePZgzZw4hISE4ODhw7tw5goKCmDBhAsnJyVSsWBE3NzdWrlypct7XX3/N119/jZ6envxA4sGDB1VWAHmdDA0N+f333wkPD+fu3bvY2NgwatQoeVmwHj168PPPP9OqVSvu379f4mXeBEEQBEF4Nymk1zQk88cff/D5558zceJE2rVr9zqKFIS3UmZmJqampqSlpYk5yG9QwQiyj49PmZrjVtaIOGuGiLNmiDhrRlmNc8Hnd8EmUy/ySnOQC+Po6MjcuXPVRpcFQRAEQRAEoSx5bR1keDoN4fbt26+zSKGYNm/ejLGxcaGvgoec3nYjRowosg0jRowo7eoJgiAIgvCeeKU5yDt37lR5L0kSycnJLFu2jGbNmr2Wigkl07lzZ5o0aVJoWlm5/TFr1iwCAgIKTXvZrRBBEARBEITX5ZU6yM8vyaVQKKhYsSKtW7dm4cKFr6NeQgmZmJiobSJS1lSqVIlKlSqVdjUEQRAEQXjPvVIHuahNGQRBEARBEAShrHulOcizZs0qdD/rx48fM2vWrP9cKUEQ3g25ublMmzYNBwcHDAwMqFatGrNmzVL5ki1JEjNmzKBy5coYGBjQsmVLEhMTVcpJSUnB19cXa2trjIyMaNCgAT/99JOmmyMIgiC8J16pgzxz5kwePnyodjwrK0tla2RBEN5vISEhrFq1imXLlnH58mXmzZvH/PnzVTbBmTdvHqGhoSxbtowzZ85gbW2Nl5cXDx48kPP4+vpy5coVdu7cSUJCAt27d6dPnz6cP3++NJolCIIgvONeqYMsSRIKhULt+MWLFzE3N//PlXrXrVixAgcHB8qVK4ebmxvHjh2T04ozmpadnc3o0aOxtLTEyMiIzp078/fff6vkOXfuHF5eXlSoUAELCwuGDRum9qUmKSmJTp06YWRkhKWlJWPGjCEnJ0dOv3HjBgqFQu0VHR39wvYdOnSIVq1aYW5ujqGhIY6OjgwYMIDc3FwADh8+jEKhKHQrant7+yJ3Wyssb0GdDAwMqFWrFvPnz1fbbW3btm00adIEU1NTTExMcHZ2ZsKECXL6xo0b5R0Thdfr5MmTdOnShQ4dOmBvb0/Pnj3x9vbm7NmzwNPf98WLFxMYGEj37t1xcXEhPDycrKwsIiMjVcoZPXo0jRs3plq1akybNo0KFSpw7ty50mqaIAiC8A4rUQfZzMwMc3NzFAoFTk5OmJubyy9TU1O8vLzo3bv3m6rrO2Hr1q34+/sTGBjI+fPn+eijj2jfvj1JSUlA8UbT/P392b59O5GRkRw/fpyHDx/SsWNH8vLyALh9+zZt27alRo0anD59mujoaBITE1V2icvLy6NDhw48evSI48ePExkZybZt21Q6jgUOHDhAcnKy/GrdunWR7UtMTKR9+/Y0atSIo0ePkpCQwNKlS9HV1X0jc9cLdli8fPkyAQEBTJ06lTVr1qjU/ZNPPqFnz57ExcURHx9PUFCQyhcB4c1p3rw5Bw8e5OrVq8DTL9HHjx/Hx8cHeLodeEpKCt7e3vI5+vr6eHp6cvLkSZVytm7dyr1798jPzycyMpLs7Gxatmyp0fYIgiAI74cSPaS3ePFiJEli0KBBzJw5E1NTUzlNT08Pe3t7PDw8Xnsl3yWhoaEMHjyYIUOGAE9jum/fPlauXElwcLDKaBpAeHg4VlZWbNmyheHDh5ORkcH69ev57rvvaNu2LQCbNm3C1taWAwcO0K5dO3bv3o2uri7Lly9HS+vpd6Dly5fj6urKtWvXqFGjBvv37+e3337j1q1bVK5cGYCFCxcycOBAgoKCVJZVs7CwwNrauljti4mJwcbGhnnz5snHqlevzscff/zfg1cIExMTuW5Dhgxh5cqV7N+/X95Oevfu3TRv3pyJEyfK5zg5OamtxPIqmsw5SK6O0X8u5111Y24HJk+eTEZGBrVq1UJbW5u8vDyCgoL49NNPgadziwGsrKxUzrWysuLGjRvy+61bt9KnTx8sLCzQ0dHB0NCQ7du3U716dY21RxAEQXh/lKiDPGDAAAAcHBxo2rRpmVlf922Rk5NDfHw8X375pcpxb29vTpw48cLRtBMnTjB8+HDi4+NRKpUqeSpXroyLiwsnTpygXbt2ZGdno6enJ3eOAQwMDAA4fvw4NWrU4OTJk7i4uMidY0A+Nz4+nlatWsnHO3fuzJMnT3B0dGTcuHH07NmzyDZaW1uTnJzM0aNHadGixasHq4QkSeLIkSNcvnwZR0dHlfps2bKFS5cu4eLi8kplZ2dnk52dLb/PzMwEQF9LQlv7tezU/k5SKpVs3bqVTZs2ERERQZ06dbh48SIBAQFUqlQJPz8/edpNbm4uSqVSPjcvL0+eKqNUKpk6dSr37t0jOjoaCwsLdu7cSa9evYiNjaVu3bql0r53RUHcn42/8PqJOGuGiLNmlNU4l6S+r7TMm6enp/z/jx8/Vrug2NShcGlpaeTl5RU6WpaSkvLC0bSbN28CT0fc9PT0MDMzK7QMgNatWzN+/Hjmz5/P2LFjefToEVOnTgUgOTlZLuf565iZmaGnpyeXY2xsTGhoKM2aNUNLS4udO3fSp08fwsPD6d+/f6Ft7NWrF/v27cPT0xNra2vc3d1p06YNfn5+ar8XVatWVTu/sNVRXmTy5MlMmzaNnJwclEol5cqVY8yYMXL66NGjOXbsGHXr1sXOzg53d3e8vb3p168f+vr6xbrGnDlzCn34dJprPoaGeSWq7/skKioKf39/evTogYmJCbdu3cLc3JyPP/6Y6dOnY2lpKf+ubdu2jWrVqsnnXrp0CSOjp6PzERERrFixgiVLlvDkyRP++ecf3NzcsLOzY+rUqXz++eel0r53TUxMTGlX4b0g4qwZIs6aUdbiXJI+xit1kLOyspg0aRI//PADd+/eVUsvmAsrFO75Bxyff+jxZemFeTaPs7Mz4eHhjB8/nilTpqCtrc2YMWOwsrJCW1u7yOs8X46lpSXjxo2T0xo2bEh6ejrz5s0rsoOsra1NWFgYs2fPJjY2llOnThEUFERISAhxcXHY2NjIeY8dO6a2uUlJ55ROnDiRgQMH8u+//xIYGEjr1q1p2rSpnG5kZMSePXv4888/OXToEKdOnWLChAl8++23nDx5EkNDw5deY8qUKYwfP15+n5mZia2tLa1atcLCwqJE9X3fSJJE3bp15TnHAAkJCcTFxeHj4yM/lPrkyRM5T05ODgMGDOCbb74BoEGDBsDTL+a1a9eWy1m+fDlVq1ZVKVsoOaVSSUxMDF5eXuKu4Bsk4qwZIs6aUVbjXHAHuDheqYM8ceJEDh06xIoVK/Dz82P58uX8888/rF69mrlz575Kke8FS0tLtLW15VGzAqmpqVhZWclzaVNSUlQ6kgXp8HTKQE5ODunp6SqjyKmpqSodw759+9K3b1/u3LmDkZERCoWC0NBQHBwc5HJOnz6tUo/09HSUSqXayPKz3N3dWbdu3UvbWqVKFXx9ffH19WX27Nk4OTmxatUqlZFYBwcHtdUjdHRK9itpaWlJjRo1qFGjBtu2baNGjRq4u7vL87MLVK9enerVqzNkyBACAwNxcnJi69atfPbZZy+9hr6+fqGjzbq6umXqD0Np6NSpE3PnzsXBwQFnZ2fOnz/Pt99+y6BBg+TY+fv7M2fOHGrVqoWjoyPBwcEYGhrSr18/jh07houLCzVq1GDUqFEsWLAACwsLduzYwYEDB+T59sJ/J36fNUPEWTNEnDWjrMW5JHV9pWXedu3axYoVK+jZsyc6Ojp89NFHTJs2jeDgYDZv3vwqRb4X9PT0cHNzU7slERMTQ9OmTXFwcMDa2lolPScnhyNHjsidXzc3N3R1dVXyJCcnc+nSJZUOcgErKyuMjY3ZunUr5cqVw8vLCwAPDw8uXbokT7kA2L9/P/r6+ri5uRXZhvPnz6t03ovDzMwMGxsbHj16VKLzSsrMzIzRo0cTEBCgttTbs+zt7TE0NHzj9RFg6dKl9OzZk5EjR1K7dm0CAgIYPny4PDoMMGnSJPz9/Rk5ciQNGzbkn3/+Yf/+/fLdBV1dXaKioqhYsSKdOnWiXr16REREEB4eLkaPBUEQhDfilUaQ7927J49Eli9fnnv37gFPl2IS8wFfbPz48fj6+tKwYUM8PDxYs2YNSUlJjBgxAoVCgb+/P8HBwTg6OqqMpvXt2xcAU1NTBg8ezIQJE7CwsMDc3JyAgADq1q2rMmq6bNkymjZtirGxMTExMUycOJG5c+fKI7be3t7UqVMHX19f5s+fz7179wgICGDo0KHyXOHw8HB0dXVxdXVFS0uLXbt2sWTJEkJCQuTrxMXF4efnx8GDB6lSpQqrV6/mwoULdOvWjerVq/PkyRMiIiJITExU2RziTfniiy8ICQlh27Zt9OzZkxkzZpCVlYWPjw92dnbcv3+fJUuWoFQq5S8LwptjYmLC4sWLX7i2tUKhYMaMGcyYMUPl+LPPNjg6OrJt27Y3VEtBEARBUPVKHeRq1apx48YN7OzsqFOnDj/88AONGzdm165dYsOFl+jTpw93796V1+91cXEhKioKOzs74Olo2uPHjxk5ciTp6ek0adJEZTQNYNGiRejo6NC7d28eP35MmzZt2Lhxo8r84ri4OKZPn87Dhw+pVasWq1evxtfXV07X1tZmz549jBw5kmbNmmFgYEDfvn1ZsGCBSn1nz57NzZs30dbWxsnJiQ0bNqjMP87KyuLKlStyZ6Zx48YcP36cESNGcPv2bYyNjXF2dmbHjh0qD3e+KRUrVsTX15cZM2bQvXt3PD09Wb58OX5+fty5cwczMzNcXV3Zv38/NWvWfOP1EQRBEASh7FFIL7oXXYRFixbJD34dOnSIDh06kJeXR25uLqGhoYwdO/ZN1FUQ3gqZmZmYmpqSlpYmHtJ7g5RKJVFRUfj4+JSpOW5ljYizZog4a4aIs2aU1TgXfH5nZGS8dMW1VxpBfnZlg1atWvH7779z9uxZqlevzocffvgqRQqCIAiCIAjCW+GVOsjPevLkCR988AEffPDB66iPIACwefNmeTe859nZ2ZGYmKjhGgmCIAiC8L54pQ5yXl4ewcHBrFq1ijt37nD16lWqVavGV199hb29PYMHD37d9RTeM507d6ZJkyaFppWl2zmCIAiCIJQ9r9RBDgoKIjw8nHnz5jF06FD5eN26dVm0aJHoIAv/mYmJidomIoIgCIIgCJrwSusgR0REsGbNGvr166eyckK9evX4/fffX1vlBEEQBEEQBEHTXqmD/M8//1CjRg214/n5+SprlwqC8H6yt7dHoVCovb744gsAHj58yKhRo6hatSoGBgbUrl2blStXyuffuHEDPT09unbtip6enkoZP/74Y2k1SxAEQXhPvFIH2dnZmWPHjqkd//HHH3F1df3PlXrXrVixAgcHB8qVK4ebm5tKLCVJYsaMGVSuXBkDAwNatmyp9kBadnY2o0ePxtLSEiMjIzp37szff/+tkufq1at06dIFS0tLypcvT7NmzTh06JBKnsI6MKtWrZLTDx8+TJcuXbCxscHIyIj69esXa6fEQ4cO0apVK8zNzTE0NMTR0ZEBAwaQm5srl6tQKLh//77aufb29i/cVOL5vAX1NjAwoFatWsyfP19tF71t27bRpEkTTE1NMTExwdnZmQkTJsjpGzduFOt3v2ZnzpwhOTlZfhXs/NirVy/g6Uo40dHRbNq0icuXLzNu3DhGjx7NL7/8AoCtrS1JSUmEhYWRlJREcnIyM2fOxMjIiPbt25dauwRBEIT3wyt1kKdPn86oUaMICQkhPz+fn3/+maFDhxIcHMzXX3/9uuv4Ttm6dSv+/v4EBgZy/vx5PvroI9q3b09SUhIA8+bNIzQ0lGXLlnHmzBmsra3x8vLiwYMHchn+/v5s376dyMhIjh8/zsOHD+nYsSN5eXlyng4dOpCbm0tsbCzx8fHUr1+fjh07kpKSolKfsLAwlY7MgAED5LQTJ05Qr149tm3bxv/+9z8GDRqEn58fu3btKrJ9iYmJtG/fnkaNGnH06FESEhJYunQpurq65Ofnv64wygo2XLl8+TIBAQFMnTqVNWvWyOkHDhzgk08+oWfPnsTFxREfH09QUBA5OTmvvS7C/6tYsSLW1tbya/fu3VSvXl3eLObkyZMMGDCAli1bYm9vz7Bhw/jwww85e/Ys8HQjG2tra8zMzOQytm/fTp8+fTA2Ni7NpgmCIAjvA6kE/vzzTyk/P1+SJEmKjo6WWrRoIRkZGUkGBgZSs2bNpH379pWkuPdS48aNpREjRqgcq1WrlvTll19K+fn5krW1tTR37lw57cmTJ5Kpqam0atUqSZIk6f79+5Kurq4UGRkp5/nnn38kLS0tKTo6WpIkSfr3338lQDp69KicJzMzUwKkAwcOyMcAafv27SWqv4+Pj/TZZ58Vmb5o0SLJ3t7+hWUcOnRIAqT09HS1NDs7O2nRokXFqktheRs0aCB1795dfj927FipZcuWLywnLCxMMjU1LdY1JUmSMjIyJEBKS0sr9jnvs+zsbMnCwkIKCgqSjw0fPlxq2LCh9Pfff0v5+flSbGysZGxsLB07dkzOk5OTI+3YsUPKycmRzp49KwHSr7/+WhpNeKc9G2fhzRFx1gwRZ80oq3Eu+PzOyMh4ad4SrWLh6OhIcnIylSpVol27dmzYsIFr165hbW392jvu76KcnBzi4+P58ssvVY57e3tz4sQJrl+/TkpKCt7e3nKavr4+np6enDhxguHDhxMfH49SqVTJU7lyZVxcXDhx4gTt2rXDwsKC2rVrExERQYMGDdDX12f16tVYWVnh5uamcu1Ro0YxZMgQHBwcGDx4MMOGDUNLq+gbCxkZGdSuXbvIdGtra5KTkzl69CgtWrQoaYhemSRJHDlyhMuXL+Po6KhSny1btnDp0iVcXFxeqezs7Gyys7Pl95mZmQC0CDlArq7Rf6v4O+jSjHYq73/66Sfu379Pv3795GcUFi5cyIgRI6hatSo6OjpoaWmxatUqmjRpIud59r9r166lVq1aNGrUSDzn8Jo9H2/hzRBx1gwRZ80oq3EuSX1L1EGWnpvbuXfvXubMmVOSIt5raWlp5OXlYWVlpXLcysqKlJQUefpDYek3b94EICUlBT09PczMzAotA57OLY6JiaFLly6YmJigpaWFlZUV0dHRKnNtv/nmG9q0aYOBgQEHDx5kwoQJpKWlMW3atELr/9NPP3HmzBlWr15dZBt79erFvn378PT0xNraGnd3d9q0aYOfn5/ato5Vq1ZVOz8rK6vIsgszefJkpk2bRk5ODkqlknLlyjFmzBg5ffTo0Rw7doy6detiZ2eHu7s73t7e9OvXD319/WJdY86cOcycOVPt+DTXfAwN8wo54/0WFRWl8n7+/Pm4urpy4cIFLly4AMCOHTuIjY1l6tSpVKpUicTEREaOHMmtW7fUduPcvXs33333Hb1791YrW3h9CuaJC2+WiLNmiDhrRlmLc0n6GP9pJ73nO8xC8SgUCpX3kiSpHHtZemGezSNJEiNHjqRSpUocO3YMAwMD1q1bR8eOHTlz5gw2NjYAKh3h+vXrA0/n9BbWQT58+DADBw5k7dq1ODs7F1kPbW1twsLCmD17NrGxsZw6dYqgoCBCQkKIi4uTrw1w7NgxtbWOW7Zs+cJ2Pm/ixIkMHDiQf//9l8DAQFq3bk3Tpk3ldCMjI/bs2cOff/7JoUOHOHXqFBMmTODbb7/l5MmTGBoavvQaU6ZMYfz48fL7zMxMbG1tmX1ei1xd7Rec+X56dgT55s2b/O9//+OHH37Ax8cHgMePH9OrVy9+/PFH+RhAbm4uv/76K1OmTAGeftOPiYkhMzMTpVJJUFAQFStW1Gxj3gMFcfby8hKb8LxBIs6aIeKsGWU1zgV3gIujRB3kghUDnj8mFI+lpSXa2tpqD8qlpqZiZWUlT1VJSUlR6UgWpMPTKQM5OTmkp6erjCKnpqbKHcPY2Fh2795Nenq6PGq7YsUKYmJiCA8PV5viUcDd3Z3MzEzu3LmjMop95MgROnXqRGhoKH5+fsVqa5UqVfD19cXX15fZs2fj5OTEqlWrVEZiHRwc1FaP0NEp2Xc2S0tLatSoQY0aNdi2bRs1atTA3d2dtm3bquSrXr061atXZ8iQIQQGBuLk5MTWrVv57LPPXnoNfX39Qkebj05ui4WFRYnq+77ZtGkTlSpVokuXLvLP9vHjxyiVSvT09FT+sOrq6iJJktof2++++47OnTtTuXJljdb9faOrq1umPujKKhFnzRBx1oyyFueS1LXEUywGDhwodxaePHnCiBEjMDJSnYf5888/l6TY94aenh5ubm7ExMTQrVs3+XjBdAgHBwesra2JiYmRl8vLycnhyJEjhISEAODm5oauri4xMTH07t0bgOTkZC5dusS8efOA/7+F8PxcYi0trReuJHH+/HnKlSun0mk9fPgwHTt2JCQkhGHDhr1Su83MzLCxseHRo0evdH5JrjN69GgCAgI4f/58kV/e7O3tMTQ0fOP1ed/l5+cTFhbGgAEDVL74lC9fHk9PTyZOnIiBgQF2dnYcOXKEiIgIQkNDVcpITk7m2LFjYmqFIAiCoFEl6iA/uwQYQP/+/V9rZd4H48ePx9fXl4YNG+Lh4cGaNWtISkpixIgRKBQK/P39CQ4OxtHREUdHR4KDgzE0NKRv374AmJqaMnjwYCZMmICFhQXm5uYEBARQt25dedTUw8MDMzMzBgwYwNdff42BgQFr167l+vXrdOjQAYBdu3aRkpKCh4cHBgYGHDp0iMDAQIYNGyZ/ATp8+DAdOnRg7Nix9OjRQx751tPTw9zcHIC4uDj8/Pw4ePAgVapUYfXq1Vy4cIFu3bpRvXp1njx5QkREBImJiSxduvSNx/eLL74gJCSEbdu20bNnT2bMmEFWVhY+Pj7Y2dlx//59lixZglKpxMvL643X53124MABkpKSGDRokFpaZGQkU6ZMoV+/fty7dw87OzuCgoIYMWKEWhlVqlRReShVEARBEN64N7eYhlCU5cuXS3Z2dpKenp7UoEED6ciRI3Jafn6+NH36dMna2lrS19eXWrRoISUkJKic//jxY2nUqFGSubm5ZGBgIHXs2FFKSkpSyXPmzBnJ29tbMjc3l0xMTCR3d3cpKipKTt+7d69Uv359ydjYWDI0NJRcXFykxYsXS0qlUs4zYMAACVB7eXp6ynkKlmy7fv26JEmSdO7cOal///6Sg4ODpK+vL1lYWEgtWrSQdu7cqXbOm1jmTZIkaejQoZKzs7OUl5cnxcbGSj169JBsbW0lPT09ycrKSvr4449VlhMTy7y9ncrqMkJljYizZog4a4aIs2aU1TiXZJk3hSSJJ+0EoSQyMzMxNTUlLS1NzEF+g5RKJVFRUfj4+JSpOW5ljYizZog4a4aIs2aU1TgXfH5nZGSoraz1vFfaSU8QBEEQBEEQ3lWigyy8lTZv3oyxsXGhrxctMycIgiAIgvBf/ad1kAXhTencuTNNmjQpNK0s3c4RBEEQBKHsER1k4a1kYmKitomIIAiCIAiCJogpFoIgCIIgCILwDNFBFgShRP755x/69++PhYUFhoaG1K9fn/j4eDm9YMfN51/z58+X86SkpODr64u1tTVGRkY0aNCAn376qTSaIwiCIAhqxBQLQRCKLT09nWbNmtGqVSv27t1LpUqV+PPPP1V2X0xOTlY5Z+/evQwePJgePXrIx3x9fcnIyGDnzp1YWlqyZcsW+vTpw9mzZ+VdJAVBEAShtIgR5GJasWIFDg4OlCtXDjc3N44dOyanSZLEjBkzqFy5MgYGBrRs2ZLExESV87Ozsxk9ejSWlpYYGRnRuXNn/v77b5U8V69epUuXLlhaWlK+fHmaNWvGoUOHVPIUNjK3atUqOf3w4cN06dIFGxsbjIyMqF+/Pps3b35p+w4dOkSrVq0wNzfH0NAQR0dHBgwYQG5urlyuQqHg/v37aufa29uzePHil16jIK9CoSAyMlItzdnZGYVCwcaNG9XSgoOD0dbWZu7cuYWWm5KSwujRo6lWrRr6+vrY2trSqVMnDh48qHZthUKBgYEB9vb29O7dm9jY2GLVXYCQkBBsbW0JCwujcePG2Nvb06ZNG6pXry7nsba2Vnn98ssvtGrVimrVqsl5Tp48yejRo2ncuDHVqlVj2rRpVKhQgXPnzpVGswRBEARBheggF8PWrVvx9/cnMDCQ8+fP89FHH9G+fXuSkpIAmDdvHqGhoSxbtowzZ85gbW2Nl5cXDx48kMvw9/dn+/btREZGcvz4cR4+fEjHjh3Jy8uT83To0IHc3FxiY2OJj4+nfv36dOzYUd7iuUBYWBjJycny69ktwE+cOEG9evXYtm0b//vf/xg0aBB+fn7s2rWryPYlJibSvn17GjVqxNGjR0lISGDp0qXo6uqSn5//usIoK+hgPevUqVOkpKRgZGRU6DlhYWFMmjSJDRs2qKXduHEDNzc3YmNjmTdvHgkJCURHR9OqVSu++OILlbyzZs0iOTmZK1euEBERQYUKFWjbti1BQUGvr4HvsJ07d9KwYUN69epFpUqVcHV1Ze3atUXmv3PnDnv27GHw4MEqx5s3b87WrVu5d+8e+fn5REZGkp2dTcuWLd9wCwRBEATh5cQUi2IIDQ1l8ODBDBkyBIDFixezb98+Vq5cSXBwMIsXLyYwMJDu3bsDEB4ejpWVFVu2bGH48OFkZGSwfv16vvvuO9q2bQvApk2bsLW15cCBA7Rr1460tDSuXbvGhg0bqFevHgBz585lxYoVJCYmYm1tLdenQoUKKu+fNXXqVJX3Y8aMYd++fWzfvp1OnToVek5MTAw2NjbMmzdPPla9enU+/vjjV4zYi/Xr149FixZx69YtbG1tAdiwYQP9+vUjIiJCLf+RI0d4/Pgxs2bNIiIigqNHj9KiRQs5feTIkSgUCuLi4lQ62M7OzgwaNEilLBMTEzl2H3zwAS1atMDGxoavv/6anj17UrNmzWK3o8mcg+TqFN6hfxfdmNuBv/76i5UrVzJ+/HimTp1KXFwcY8aMQV9fHz8/P7VzwsPDMTExkf9tFNi6dSt9+vTBwsICHR0dDA0N2b59u8pItCAIgiCUFtFBfomcnBzi4+P58ssvVY57e3tz4sQJrl+/TkpKCt7e3nKavr4+np6enDhxguHDhxMfH49SqVTJU7lyZVxcXDhx4gTt2rXDwsKC2rVrExERQYMGDdDX12f16tVYWVnh5uamcu1Ro0YxZMgQHBwcGDx4MMOGDUNLq+ibARkZGdSuXbvIdGtra5KTk9U6nm+KlZUV7dq1Izw8nGnTppGVlcXWrVs5cuRIoR3k9evX8+mnn6Krq8unn37K+vXr5Xreu3eP6OhogoKCCh19fnZubFHGjh3LN998wy+//MKkSZPU0rOzs8nOzpbfZ2ZmAqCvJaGt/f7s1K5UKsnPz8fNzY2ZM2cC4OLiQkJCAitWrODTTz9VO6fgZ6etrY1SqZSPT506Vf7ZWVhYsHPnTnr16kVsbCx169aVr/fsf4U3Q8RZM0ScNUPEWTPKapxLUl/RQX6JtLQ08vLysLKyUjluZWVFSkqKPP2hsPSbN28CT+fH6unpYWZmVmgZ8HRucUxMDF26dMHExAQtLS2srKyIjo5W6eR98803tGnTBgMDAw4ePMiECRNIS0tj2rRphdb/p59+4syZM6xevbrINvbq1Yt9+/bh6emJtbU17u7utGnTBj8/P7W9yqtWrap2flZWVpFlF2XQoEFMmDCBwMBAfvrpJ6pXr079+vXV8mVmZrJt2zZOnDgBQP/+/WnWrBlLly6lfPnyXLt2DUmSqFWrVonrUMDc3JxKlSpx48aNQtPnzJkjdwifNc01H0PDvELOeDdFRUVRoUIFjI2NiYqKko/n5ubyxx9/qByDp1N3rl69yueff66SlpyczIoVK1iyZAlPnjzhn3/+wc3NDTs7O6ZOncrnn3+uUk5MTMybbZgAiDhrioizZog4a0ZZi3NJ+iuig1xMCoVC5b0kSSrHXpZemGfzSJLEyJEjqVSpEseOHcPAwIB169bRsWNHzpw5g42NDYBKR7igQzlr1qxCO8iHDx9m4MCBrF279oXbM2traxMWFsbs2bOJjY3l1KlTBAUFERISQlxcnHxtgGPHjqlt4PEq80Y7dOjA8OHDOXr0KBs2bFCbClFgy5YtVKtWjQ8//BB42uZq1aoRGRnJsGHDkKSnI7gvi/XLvOjnNWXKFMaPHy+/z8zMxNbWltnntcjV1f5P1y1LLs1oR+vWrfn777/x8fGRj8fGxuLk5KRyDGDbtm00aNBAbR54QkICAJ6enip3NpYvX07VqlXlcpRKJTExMXh5eYndE98gEWfNEHHWDBFnzSircS64A1wcooP8EpaWlmhra6s9KJeamoqVlZU8nzUlJUWlI1mQDk+nMOTk5JCenq4yipyamkrTpk2Bp52M3bt3k56eLo/arlixgpiYGMLDw9WmeBRwd3cnMzOTO3fuqIxiHzlyhE6dOhEaGlro3NDCVKlSBV9fX3x9fZk9ezZOTk6sWrVKZfTUwcFBbdqCjk7Jf410dHTw9fVl+vTpnD59mu3btxeab8OGDSQmJqpcIz8/n/Xr1zNs2DAcHR1RKBRcvnyZrl27lrgeAHfv3uXff//FwcGh0HR9fX309fXVjh+d3BYLC4tXumZZNWHCBJo2bcr8+fPp3bs3cXFxrFu3jjVr1qj8kSwY+V+4cKHaH8+6detSo0YNRo0axYIFC7CwsGDHjh0cOHCA3bt3q+XX1dUtU3+AyyoRZ80QcdYMEWfNKGtxLkldxSoWL6Gnp4ebm5vabYSYmBiaNm2Kg4MD1tbWKuk5OTkcOXJE7vy6ubmhq6urkic5OZlLly7JeQqG/Z+fS6ylpfXClSTOnz9PuXLlVDqthw8fpkOHDsydO5dhw4a9UrvNzMywsbHh0aNHr3R+cQwaNIgjR47QpUsXtekn8HSk8ezZsxw+fJgLFy7Ir6NHj3LmzBkuXbqEubk57dq1Y/ny5YXWtbBl6Z737bffoqWl9cod7PdJo0aN2L59O99//z0uLi588803LF68mH79+qnki4yMRJKkQucl6+rqEhUVRcWKFenUqRP16tUjIiKC8PBwtVFoQRAEQSgNYgS5GMaPH4+vry8NGzbEw8ODNWvWkJSUxIgRI1AoFPj7+xMcHIyjoyOOjo4EBwdjaGhI3759ATA1NWXw4MFMmDABCwsLzM3NCQgIoG7duvKqFh4eHpiZmTFgwAC+/vprDAwMWLt2LdevX6dDhw4A7Nq1i5SUFDw8PDAwMODQoUMEBgYybNgweYSzoHM8duxYevToIY986+npYW5uDkBcXBx+fn4cPHiQKlWqsHr1ai5cuEC3bt2oXr06T548ISIigsTERJYuXfrG4lq7dm3S0tIwNDQsNH39+vU0bty40AcHPTw8WL9+PYsWLWLFihU0bdqUxo0bM2vWLOrVq0dubi4xMTGsXLmSy5cvy+c9ePCAlJQUlEol169fZ9OmTaxbt445c+ZQo0aNN9bWd0nHjh3p2LHjC/MMGzbshV/OHB0d2bZt2+uumiAIgiC8FqKDXAx9+vTh7t278hq6Li4uREVFYWdnB8CkSZN4/PgxI0eOJD09nSZNmrB//36VubqLFi1CR0eH3r178/jxY9q0acPGjRvR1n46h9XS0pLo6GgCAwNp3bo1SqUSZ2dnfvnlF3n+ra6uLitWrGD8+PHk5+dTrVo1Zs2apTLHc+PGjWRlZTFnzhzmzJkjH/f09OTw4cPA09HqK1euyE9zNm7cmOPHjzNixAhu376NsbExzs7O7NixA09Pzzca26KmKOTk5LBp0yYmT55caHqPHj2YM2cOISEhODg4cO7cOYKCgpgwYQLJyclUrFgRNzc3Vq5cqXLe119/zddff42enp78QOLBgwdp1arVa2+bIAiCIAhlk0IqeMpJEIRiyczMxNTUlLS0tPduDrImKZVKoqKi8PHxKVNz3MoaEWfNEHHWDBFnzSircS74/M7IyFBbpet5Yg6yIAiCIAiCIDxDdJCF12bz5s0YGxsX+nrRMnOCIAiCIAhvEzEHWXhtOnfuTJMmTQpNK0u3YARBEARBeL+JDrLw2piYmKhtIiIIgiAIglDWiCkWgiAIgiAIgvAM0UF+hykUCnbs2FHs/DNmzJC3rwYYOHCg2DzjPfXPP//Qv39/LCwsMDQ0pH79+sTHx8vpkiQxY8YMKleujIGBAS1btiQxMVGljDVr1tCyZUvKly+PQqEo1qYtgiAIgvA2KPUO8ooVK3BwcKBcuXK4ublx7NgxOa04H8LZ2dmMHj0aS0tLjIyM6Ny5M3///bdKnqtXr9KlSxcsLS0pX748zZo149ChQyp5FAqF2mvVqlVy+uHDh+nSpQs2NjYYGRlRv359Nm/e/NL2HTp0iFatWmFubo6hoSGOjo4MGDCA3NxcudyiOg/29vYsXrz4pdd4XQICAjh48KDGrlccz3fahTcvPT2dZs2aoaury969e/ntt99YuHChym6N8+bNIzQ0lGXLlnHmzBmsra3x8vLiwYMHcp6srCw+/vhjpk6dWgqtEARBEIRXV6od5K1bt+Lv709gYCDnz5/no48+on379iQlJQHF+xD29/dn+/btREZGcvz4cR4+fEjHjh3Jy8uT83To0IHc3FxiY2OJj4+nfv36dOzYUd5lrkBYWBjJycnya8CAAXLaiRMnqFevHtu2beN///sfgwYNws/Pj127dhXZvsTERNq3b0+jRo04evQoCQkJLF26FF1d3RduH11ajI2NNbaub8EmJZoiSZL8pUR4sZCQEGxtbQkLC6Nx48bY29vTpk0bqlevDjyN5eLFiwkMDKR79+64uLgQHh5OVlYWW7Zskcvx9/fnyy+/xN3dvbSaIgiCIAivRipFjRs3lkaMGKFyrFatWtKXX34p5efnS9bW1tLcuXPltCdPnkimpqbSqlWrJEmSpPv370u6urpSZGSknOeff/6RtLS0pOjoaEmSJOnff/+VAOno0aNynszMTAmQDhw4IB8DpO3bt5eo/j4+PtJnn31WZPqiRYske3v7F5Zx6NAhCZDS09PV0uzs7KRFixYVqy5Xr16VPvroI0lfX1+qXbu2tH//frU2TZo0SXJ0dJQMDAwkBwcHadq0aVJOTo6cPn36dOnDDz+U3w8YMEDq0qWLJEmSFB4eLpmbm0tPnjxRuW737t0lX1/fl9avoOz169dLDg4OkkKhkPLz86X79+9LQ4cOlSpWrCiZmJhIrVq1ki5cuCBJkiSFhYVJgMorLCxMun79ugRI58+fl8tPT0+XAOnQoUOSJP1/XKOjoyU3NzdJV1dXio2NlTw9PaXRo0dLEydOlMzMzCQrKytp+vTpxYpxgYyMDAmQ0tLSSnReWVG7dm3J399f6tmzp1SxYkWpfv360po1a+T0P//8UwKkc+fOqZzXuXNnyc/PT628F/2Ov0hOTo60Y8cOld9R4fUTcdYMEWfNEHHWjLIa54LP74yMjJfmLbVVLHJycoiPj+fLL79UOe7t7c2JEye4fv06KSkpeHt7y2n6+vp4enpy4sQJhg8fTnx8PEqlUiVP5cqVcXFx4cSJE7Rr1w4LCwtq165NREQEDRo0QF9fn9WrV2NlZYWbm5vKtUeNGsWQIUNwcHBg8ODBDBs2DC2togfZMzIyqF27dpHp1tbWJCcnc/ToUVq0aFHSEBVbfn4+3bt3x9LSklOnTpGZmYm/v79aPhMTEzZu3EjlypVJSEhg6NChmJiYMGnSpJdeo1evXowZM4adO3fSq1cvANLS0ti9ezfR0dHFque1a9f44Ycf2LZtm7zFdocOHTA3NycqKgpTU1NWr15NmzZtuHr1Kn369OHSpUtER0dz4MABAExNTblz504xI/N0G/AFCxZQrVo1eYpAeHg448eP5/Tp05w8eZKBAwfSrFkzvLy8il0uQJM5B8nVMSrROW+7G3M78Ndff7Fy5UrGjx/P1KlTiYuLY8yYMejr6+Pn5yffebGyslI518rKips3b5ZGtQVBEAThtSq1DnJaWhp5eXmFfsimpKQU60M4JSUFPT09zMzMCi0Dns4tjomJoUuXLpiYmKClpYWVlRXR0dEqcyq/+eYb2rRpg4GBAQcPHmTChAmkpaUxbdq0Quv/008/cebMGVavXl1kG3v16sW+ffvw9PTE2toad3d32rRpg5+fn9oWh1WrVlU7Pysrq8iyn3XgwAEuX77MjRs35HKCg4Np3769Sr5n22Jvb8+ECRPYunVrsTrIBgYG9O3bl7CwMLmDvHnzZqpWrUrLli2LVc+cnBy+++47KlasCEBsbCwJCQmkpqair68PwIIFC9ixYwc//fQTw4YNw9jYGB0dHaytrYt1jefNmjVLreNbr149pk+fDoCjoyPLli3j4MGDRXaQs7Ozyc7Olt9nZmYCoK8loa39bu3UrlQqyc/Px83NjZkzZwLg4uJCQkICK1as4NNPP5WnquTm5qpMlSmY1vT89JmC/EqlskRTawryano6zvtGxFkzRJw1Q8RZM8pqnEtS31JfB1mhUKi8lyRJ5djL0gvzbB5Jkhg5ciSVKlXi2LFjGBgYsG7dOjp27MiZM2ewsbEBVDuPBQ+FzZo1q9AO8uHDhxk4cCBr16594Q5x2trahIWFMXv2bGJjYzl16hRBQUGEhIQQFxcnXxvg2LFjamsIF7fjefnyZT744AOVTraHh4davp9++onFixdz7do1Hj58SG5u7kv3In/W0KFDadSoEf/88w9VqlQhLCyMgQMHvvTnUcDOzk7uHAPEx8fz8OFDtXnPjx8/5s8//yx2vV6kYcOGasfq1aun8t7GxobU1NQiy5gzZ47cWXzWNNd8DA3zCjmj7IqKiqJChQoYGxsTFRUlH8/NzeWPP/4gKipK/vK5bds2qlWrJue5dOkSRkZGKucBJCQkALB//36MjY1LXKeYmJhXaYpQQiLOmiHirBkizppR1uJc3IFHKMUOsqWlJdra2moPyqWmpmJlZSWPGKakpKh0JAvS4ekUhpycHNLT01VGkVNTU2natCnwdJRy9+7dpKeny53BFStWEBMTQ3h4uNoUjwLu7u5kZmZy584dlVHsI0eO0KlTJ0JDQ/Hz8ytWW6tUqYKvry++vr7Mnj0bJycnVq1apdLpcnBwUBnRBtDRKd6PR5LURzGf77SeOnWKTz75hJkzZ9KuXTtMTU2JjIxk4cKFxboGgKurKx9++CERERG0a9eOhISEFz6k+DwjI9XpCPn5+djY2HD48GG1vM/H4lkF016ebXdR3wqfvyao7+qnUChe+NDklClTGD9+vPw+MzMTW1tbWrVqpbGHGjWpdevW/P333/j4+MjHYmNjcXJywsfHR15d5smTJ3KenJwcBgwYQHBwsMp58P8/A29v7xf+XJ+nVCqJiYnBy8tL7MT4Bok4a4aIs2aIOGtGWY1zwR3g4ii1DrKenh5ubm7ExMTQrVs3+XjBdAgHBwesra2JiYnB1dUVePohfOTIEUJCQgBwc3NDV1eXmJgYevfuDUBycjKXLl1i3rx5wP9/W3h+LrGWltYLO0Xnz5+nXLlyKh/ohw8fpmPHjoSEhDBs2LBXareZmRk2NjY8evTolc4vTJ06dUhKSuL27dtUrlwZgJMnT6rk+fXXX7GzsyMwMFA+9irzRYcMGcKiRYv4559/aNu2Lba2tq9c7wYNGpCSkoKOjg729vaF5tHT01NZkQSQR6GTk5Pl340LFy68cj1eRl9fX54C8ixdXd0y9YehuCZMmEDTpk2ZP38+vXv3Ji4ujnXr1rFmzRq5vf7+/syZM4datWrh6OhIcHAwhoaG+Pr6ynkKpkrduHEDgN9//x0TExM++OADzM3Ni12fdzXObxsRZ80QcdYMEWfNKGtxLkldS3WKxfjx4/H19aVhw4Z4eHiwZs0akpKSGDFiBAqFAn9/f4KDg3F0dFT5EO7bty/w9IGtwYMHM2HCBCwsLDA3NycgIIC6devStm1b4OlUAzMzMwYMGMDXX3+NgYEBa9eu5fr163To0AGAXbt2kZKSgoeHBwYGBhw6dIjAwECGDRsmd4wOHz5Mhw4dGDt2LD169JBHvvX09OQP+7i4OPz8/Dh48CBVqlRh9erVXLhwgW7dulG9enWePHlCREQEiYmJLF269LXFsW3bttSsWRM/Pz8WLlxIZmamSkcYoEaNGiQlJREZGUmjRo3Ys2cP27dvL/G1+vXrR0BAAGvXriUiIuI/19vDw4OuXbsSEhJCzZo1uX37NlFRUXTt2pWGDRtib2/P9evXuXDhAlWrVsXExAQDAwPc3d2ZO3cu9vb2L5wrLpRco0aN2L59O1OmTGHWrFk4ODiwePFi+vXrJ+eZNGkSjx8/ZuTIkaSnp9OkSRP279+vMk3o+bskBQ+qFkzNEQRBEIS31ptcTqM4li9fLtnZ2Ul6enpSgwYNpCNHjshp+fn50vTp0yVra2tJX19fatGihZSQkKBy/uPHj6VRo0ZJ5ubmkoGBgdSxY0cpKSlJJc+ZM2ckb29vydzcXDIxMZHc3d2lqKgoOX3v3r1S/fr1JWNjY8nQ0FBycXGRFi9eLCmVSjnPgAED1JYcAyRPT085T8FyVtevX5ckSZLOnTsn9e/fX3JwcJD09fUlCwsLqUWLFtLOnTvVzvmvy7xduXJFat68uaSnpyc5OTlJ0dHRasu8TZw4UbKwsJCMjY2lPn36SIsWLZJMTU3l9Bct8/YsX1/fQpd8e5Hnyy6QmZkpjR49WqpcubKkq6sr2draSv369ZN/hk+ePJF69OghVahQQV7mTZIk6bfffpPc3d0lAwMDqX79+vKyds8v8/Z8XD09PaWxY8eqHOvSpYs0YMCAYrflXV/m7W1RVpcRKmtEnDVDxFkzRJw1o6zGuSTLvCkkqZAJrILwAl5eXtSuXZslS5aUdlVKRWZmJqampqSlpb2Tc5DfFkqlkqioKHx8fMrULbyyRsRZM0ScNUPEWTPKapwLPr8zMjJeukhBqa9iIZQd9+7dY//+/cTGxrJs2bLSro4gCIIgCMIbUapbTQvFs3nzZoyNjQt9vWiZudetQYMGDB8+XJ4v/CxnZ+ci67h582aN1VEQBEEQBOG/EiPIZUDnzp1p0qRJoWmavLVRsBpBYaKioopcau35zV4EQRAEQRDeZqKDXAaYmJiobSLytrGzsyvtKgiCIAiCILwWYoqFIAiCIAiCIDxDdJAFQWDGjBkoFAqVV8FulgUuX75M586dMTU1xcTEBHd3d5KSkuT0li1bqpXxySefaLopgiAIgvCfiQ7yO0yhULBjx45i558xYwb169eX3w8cOJCuXbu+9noJbydnZ2eSk5PlV0JCgpz2559/0rx5c2rVqsXhw4e5ePEiX331FeXKlVMpY+jQoSplrF69WtPNEARBEIT/rNQ7yCtWrMDBwYFy5crh5ubGsWPH5DRJkpgxYwaVK1fGwMCAli1bkpiYqHJ+dnY2o0ePxtLSEiMjIzp37szff/+tkufcuXN4eXlRoUIFLCwsGDZsGA8fPlTJk5SURKdOnTAyMsLS0pIxY8aQk5Mjp9+4cUNtdEyhUBAdHf3C9h06dIhWrVphbm6OoaEhjo6ODBgwgNzcXODpDn0KhYL79++rnWtvb8/ixYuLE8bXIiAggIMHD2rsesXxfKddeHN0dHSwtraWXwVbegMEBgbi4+PDvHnzcHV1pVq1anTo0IFKlSqplGFoaKhShqmpqaabIQiCIAj/Wal2kLdu3Yq/vz+BgYGcP3+ejz76iPbt28u3befNm0doaCjLli3jzJkzWFtb4+XlxYMHD+Qy/P392b59O5GRkRw/fpyHDx/SsWNH8vLyALh9+zZt27alRo0anD59mujoaBITE1W2us3Ly6NDhw48evSI48ePExkZybZt25gwYYJanQ8cOKAyQta6desi25eYmEj79u1p1KgRR48eJSEhgaVLl6Krq0t+fv5riuLrY2xsrLGNL4pa8eJNkSRJ/lIiFO6PP/6gcuXKODg48Mknn/DXX38BkJ+fz549e3BycqJdu3ZUqlSJJk2aFHp3YvPmzVhaWuLs7ExAQIDKv1VBEARBKCtKdRWL0NBQBg8ezJAhQwBYvHgx+/btY+XKlQQHB7N48WICAwPp3r07AOHh4VhZWbFlyxaGDx9ORkYG69ev57vvvqNt27YAbNq0CVtbWw4cOEC7du3YvXs3urq6LF++HC2tp98Hli9fjqurK9euXaNGjRrs37+f3377jVu3blG5cmUAFi5cyMCBAwkKClLZbcXCwkJtbmZRYmJisLGxYd68efKx6tWr8/HHH//34D3njz/+YPDgwcTFxVGtWjW+/fZbtTyTJ09m+/bt/P3331hbW9OvXz++/vpream4GTNmsGPHDi5cuKB2bkREBOPGjeP27dvo6+vLx3v06IGRkREREREvrF9B2WPGjGH27NncuHGDvLw8MjMzmThxIjt27ODJkyc0bNiQRYsW8eGHH7Jx40ZmzpwJPJ0uAhAWFkbLli1xcHDg/Pnz8ujy/fv3MTMz49ChQ7Rs2ZLDhw/TqlUroqOjCQwM5H//+x/79u1j5syZ1KtXj3LlyrFu3Tr09PQYMWIEM2bMKHHMm8w5SK6OUYnPe9vcmNuBJk2aEBERgZOTE3fu3GH27Nk0bdqUxMRElEolDx8+ZO7cucyePZuQkBCio6Pp3r07hw4dwtPTE4B+/frh4OCAtbU1ly5dYsqUKVy8eJGYmJhSbqEgCIIglEypdZBzcnKIj4/nyy+/VDnu7e3NiRMnuH79OikpKXh7e8tp+vr6eHp6cuLECYYPH058fDxKpVIlT+XKlXFxceHEiRO0a9eO7Oxs9PT05M4xgIGBAQDHjx+nRo0anDx5EhcXF7lzDMjnxsfH06pVK/l4586defLkCY6OjowbN46ePXsW2UZra2uSk5M5evQoLVq0ePVgvUR+fj7du3fH0tKSU6dOkZmZib+/v1o+ExMTNm7cSOXKlUlISGDo0KGYmJgwadKkl16jV69ejBkzhp07d9KrVy8A0tLS2L1790unmRS4du0aP/zwA9u2bUNbWxuADh06YG5uTlRUFKampqxevZo2bdpw9epV+vTpw6VLl4iOjubAgQMAmJqacufOnWJGBiZNmsSCBQuoVq0aFSpUAJ5+0Ro/fjynT5/m5MmTDBw4kGbNmuHl5VVoGdnZ2WRnZ8vvMzMzAdDXktDWLvs7tSuVSvkLJkCtWrVo2LAhtWrVYsOGDfTu3RuATp06MWrUKODpfOXjx4+zYsUKmjZtCqByV6ZmzZo4ODjg7u5OXFwcrq6ur1SvZ/8rvBkizpoh4qwZIs6aUVbjXJL6lloHOS0tjby8PLVNJKysrEhJSSElJUV+/3z6zZs3AUhJSUFPTw8zM7NCywBo3bo148ePZ/78+YwdO5ZHjx4xdepUAJKTk+Vynr+OmZkZenp6cjnGxsaEhobSrFkztLS02LlzJ3369CE8PJz+/fsX2sZevXqxb98+PD09sba2xt3dnTZt2uDn56e2B3jVqlXVzs/KyioieqoOHDjA5cuXuXHjhlxOcHAw7du3V8k3bdo0+f/t7e2ZMGECW7duLVYH2cDAgL59+xIWFiZ3kDdv3kzVqlVp2bJlseqZk5PDd999J89tjY2NJSEhgdTUVHlUesGCBezYsYOffvqJYcOGYWxsLM+NfRWzZs1S6/jWq1eP6dOnA+Do6MiyZcs4ePBgkR3kOXPmyCPZz5rmmo+hYd4r1ettEhUVVehxa2trYmNjcXBwQFtbG21tbZW8enp6/O9//yvyfEmS0NHR4ccff5T/rb0KMQKtGSLOmiHirBkizppR1uJc3H4VvAUbhRTcOi8gSZLKsZelF+bZPM7OzvKI4ZQpU9DW1mbMmDFYWVnJo5iFXef5ciwtLRk3bpyc1rBhQ9LT05k3b16RHWRtbW3CwsKYPXs2sbGxnDp1iqCgIEJCQoiLi8PGxkbOe+zYMbXNQIrb8bx8+TIffPCBSifbw8NDLd9PP/3E4sWLuXbtGg8fPiQ3N1eto/4iQ4cOpVGjRvzzzz9UqVKFsLAwBg4c+NKfRwE7OzuVB7/i4+N5+PCh2rznx48f8+effxa7Xi/SsGFDtWP16tVTeW9jY0NqamqRZUyZMoXx48fL7zMzM7G1tWX2eS1ydbWLPK+suDSjndqx7OxsvvjiC7p06UKXLl1o1KgRAD4+PnKeDRs28OGHH6ocUyn30iVyc3Np3749H330UYnrpVQqiYmJwcvLS6M7Rr5vRJw1Q8RZM0ScNaOsxrngDnBxlFoH2dLSEm1tbXmEtkBqaipWVlbyiGFKSopKR7IgHZ6OcOXk5JCenq4yipyamirf9gXo27cvffv25c6dOxgZGaFQKAgNDcXBwUEu5/Tp0yr1SE9PR6lUvnCbZHd3d9atW/fStlapUgVfX198fX2ZPXs2Tk5OrFq1SmVU0sHBQZ4CUEBHp3g/HklSv83/fKf11KlTfPLJJ8ycOZN27dphampKZGQkCxcuLNY1AFxdXfnwww+JiIigXbt2JCQksGvXrmKfb2SkOl83Pz8fGxsbDh8+rJb3+Vg8q2C6zLPtLuq2yfPXBPXtuRUKxQsfmtTX11eZd13g6OS2Gnuo8U0LCAigU6dOfPDBB6SmpjJ79mwyMzMZNGgQurq6TJo0iT59+tCyZUt5bveePXs4fPgwurq6/Pnnn2zevBkfHx8sLS357bffmDBhAq6urnh6eqp8GS0pXV3dMvUHuKwScdYMEWfNEHHWjLIW55LUtdRWsdDT08PNzU1teD4mJoamTZvKD/s8m56Tk8ORI0fkzq+bmxu6uroqeZKTk7l06ZJKB7mAlZUVxsbGbN26lXLlysm31D08PLh06ZLKbeD9+/ejr6+Pm5tbkW04f/68Sue9OMzMzLCxseHRo0clOu9F6tSpQ1JSErdv35aPnTx5UiXPr7/+ip2dHYGBgTRs2BBHR0d5qkpJDBkyhLCwMDZs2EDbtm2xtbV95Xo3aNCAlJQUdHR0qFGjhsrL0tISePp7UrAiSYGCUehnf16FPVgoFN/ff//Np59+Ss2aNenevTt6enqcOnVK3kK8W7durFq1innz5lG3bl3WrVvHtm3baN68OfD053Tw4EHatWtHzZo1GTNmDN7e3hw4cOA/dY4FQRAEoTSU6hSL8ePH4+vrS8OGDfHw8GDNmjUkJSUxYsQIFAoF/v7+BAcH4+joiKOjI8HBwRgaGtK3b1/g6QNbgwcPZsKECVhYWGBubk5AQAB169ZVeeho2bJlNG3aFGNjY2JiYpg4cSJz586VRym9vb2pU6cOvr6+zJ8/n3v37hEQEMDQoUPlKQjh4eHo6uri6uqKlpYWu3btYsmSJYSEhMjXiYuLw8/Pj4MHD1KlShVWr17NhQsX6NatG9WrV+fJkydERESQmJjI0qVLX1sc27ZtS82aNfHz82PhwoVkZmYSGBiokqdGjRokJSURGRlJo0aN2LNnD9u3by/xtfr160dAQABr16596coVxam3h4cHXbt2JSQkhJo1a3L79m2ioqLo2rUrDRs2xN7enuvXr3PhwgWqVq2KiYkJBgYGuLu7M3fuXOzt7UlLS1OZXy2UXGRk5EvzDBo0iEGDBhWaZmtry5EjR153tQRBEAShVJRqB7lPnz7cvXuXWbNmkZycjIuLC1FRUfKo1aRJk3j8+DEjR44kPT2dJk2asH//fpW5uosWLUJHR4fevXvz+PFj2rRpw8aNG1VGreLi4pg+fToPHz6kVq1arF69Gl9fXzldW1ubPXv2MHLkSJo1ayY/kLZgwQKV+s6ePZubN2+ira2Nk5MTGzZsUJl/nJWVxZUrV+Tb/Y0bN+b48eOMGDGC27dvY2xsjLOzMzt27JCXxnodtLS02L59O4MHD6Zx48bY29uzZMkSleXkunTpwrhx4xg1ahTZ2dl06NCBr776qsTLm5UvX54ePXqwZ8+e/7zLnkKhICoqisDAQAYNGsS///6LtbU1LVq0kKe29OjRg59//plWrVpx//59ed7zhg0bGDRoEA0bNqRmzZrMmzdPZTUTQRAEQRCEV6WQCpvAKggv4OXlRe3atVmyZElpV6VUZGZmYmpqSlpa2jszB/ltpFQqiYqKwsfHp0zNcStrRJw1Q8RZM0ScNaOsxrng8zsjI+OlixSU+ioWQtlx79499u/fT2xsLMuWLSvt6giCIAiCILwRpbrVtFA8mzdvxtjYuNCXs7OzxurRoEEDhg8fLs8Xfpazs3ORddy8ebPG6igIgiAIgvBfiRHkMqBz5840adKk0DRN3tq4ceNGkWlRUVFFLrX2oqXyBEEQBEEQ3jaig1wGmJiYqG0i8rYpeLBSEARBEAShrBNTLARBEARBEAThGaKDLAjviTlz5sjrixdm+PDhKBQKFi9erHI8JSUFX19frK2tMTIyokGDBvz0009vvsKCIAiCUEpEB/kdZW9vr9bReZGNGzeqbO88Y8YM6tev/9rrJZSOM2fOsGbNGurVq1do+o4dOzh9+jSVK1dWS/P19eXKlSvs3LmThIQEunfvTp8+fTh//vybrrYgCIIglIpS7SCvXLmSevXqUb58ecqXL4+Hhwd79+6V0+/cucPAgQOpXLkyhoaGfPzxx/zxxx8qZfz5559069aNihUrUr58eXr37s2dO3dU8qSnp+Pr64upqSmmpqb4+vpy//59lTxJSUl06tQJIyMjLC0tGTNmDDk5OSp5JEliwYIFODk5oa+vj62tLcHBwS9s46FDh2jVqhXm5uYYGhri6OjIgAEDyM3NBZ52ZBUKRZGvV9kO+lX06dOHq1evauRaxfV8p114NQ8fPqRfv36sXbsWMzMztfR//vmHUaNGsXnz5kIf+jx58iSjR4+mcePGVKtWjWnTplGhQgXOnTunieoLgiAIgsaVage5atWqzJ07l7Nnz3L27Flat25Nly5dSExMRJIkunbtyl9//cUvv/zC+fPnsbOzo23btjx69AiAR48e4e3tjUKhIDY2ll9//ZWcnBw6depEfn6+fJ2+ffty4cIFoqOjiY6O5sKFCyo76eXl5dGhQwcePXrE8ePHiYyMZNu2bUyYMEGlvmPHjmXdunUsWLCA33//nV27dtG4ceMi25eYmEj79u1p1KgRR48eJSEhgaVLl6KrqyvX78yZMyQnJ6u8Ll++TOXKlenUqRMffPDB6wx5kQwMDKhUqZJGrpWXl6fy89GEolbYeB988cUXdOjQQWX79QL5+fn4+voyceLEIpcMbN68OVu3buXevXvk5+cTGRlJdnY2LVu2fMM1FwRBEITSUaqrWHTq1EnlfVBQECtXruTUqVPo6upy6tQpLl26JH9wr1ixgkqVKvH9998zZMgQfv31V27cuMH58+flHVHCwsIwNzcnNjaWtm3bcvnyZaKjozl16pS8VNratWvx8PDgypUr1KxZk/379/Pbb79x69Yt+RbzwoULGThwIEFBQZQvX57Lly+zcuVKLl26pLYGcFFiYmKwsbFh3rx58rHq1aurbAFdsWJFlXPy8/MZOHAgpqambNq0CYVC8dLrpKamMnjwYA4cOIC1tTWzZ89WyxMaGkpYWBh//fUX5ubmdOrUiXnz5mFsbAw8Ha319/dXG1kHOHr0KG3atOHWrVtYW1vLxydMmMCZM2c4evToC+tXUPamTZuYNGkSV69e5Y8//qBKlSpMmzaNzZs3c//+fVxcXAgJCaFly5YcPnyYzz77DECOwfTp05kxYwYKhYLt27erbHVdoUIFFi9ezMCBA7lx4wYODg5s3bqVFStWcOrUKVauXMmRI0e4f/8+zZs3Z+HCheTk5PDJJ5+wePHiV1our8mcg+TqGJX4PE24MbcDAJGRkZw7d44zZ84Umi8kJAQdHR3GjBlTZFlbt26lT58+WFhYoKOjg6GhIdu3b6d69epvpO6CIAiCUNremmXe8vLy+PHHH3n06BEeHh5kZ2cDUK5cOTmPtrY2enp6HD9+nCFDhpCdnY1CoUBfX1/OU65cObS0tDh+/Dht27bl5MmTmJqaqqwj7O7ujqmpKSdOnKBmzZqcPHkSFxcXlfmX7dq1Izs7m/j4eFq1asWuXbuoVq0au3fv5uOPP0aSJNq2bcu8efMwNzcvtE3W1tYkJydz9OhRWrRoUaw4fPnll5w+fZq4uLiXboNYYODAgdy6dYvY2Fj09PQYM2YMqampKnm0tLRYsmQJ9vb2XL9+nZEjRzJp0iRWrFjx0vJbtGhBtWrV+O6775g4cSIAubm5bNq0iblz5xarjllZWcyZM4d169ZhYWFBpUqV+Oyzz7hx4waRkZFUrlyZ7du38/HHH5OQkEDTpk1ZvHgxX3/9NVeuXAGQO/PFNXnyZBYuXEhYWBj6+vocOXKEQ4cOYWNjw6FDh7h27Rp9+vShfv36DB06tMhysrOz5d9HeLpVJYC+loS29tu5U7tSqeTWrVuMHTuWPXv2oK2tjVKpRJIk8vPzUSqVnDt3jm+//ZbTp0/LU37g6b/FZ0fcp06dyr1794iOjsbCwoKdO3fSq1cvYmNjqVu37httw7P/Fd4MEWfNEHHWDBFnzSircS5JfUu9g5yQkICHhwdPnjzB2NiY7du3U6dOHZRKJXZ2dkyZMoXVq1djZGREaGgoKSkpJCcnA087ukZGRkyePJng4GAkSWLy5Mnk5+fLeVJSUgqdOlCpUiVSUlLkPM9vZmFmZoaenp6c56+//uLmzZv8+OOPREREkJeXx7hx4+jZsyexsbGFtq1Xr17s27cPT09PrK2tcXd3p02bNvj5+RXa+f3+++8JDQ1lz549ODo6Fit+V69eZe/evSoj5OvXr6d27doq+Z5ducDBwYFvvvmGzz//vFgdZIDBgwcTFhYmd5D37NlDVlYWvXv3Ltb5SqWSFStW8OGHHwJP545///33/P333/IXk4CAAKKjowkLCyM4OBhTU1MUCoXKqHVJ+Pv70717d5VjZmZmLFu2DG1tbWrVqkWHDh04ePDgCzvIc+bMYebMmWrHp7nmY2iY90p1e9OioqI4deoUqampKl8O8/PzOXbsGMuXL8fPz4/U1FSqVaumkj5p0iRCQkJYu3YtycnJrFixgiVLlvDkyRP++ecf3NzcsLOzY+rUqXz++edvvC0xMTFv/BqCiLOmiDhrhoizZpS1OGdlZRU7b6l3kGvWrMmFCxe4f/8+27ZtY8CAARw5coQ6deqwbds2Bg8ejLm5Odra2rRt25b27dvL51asWJEff/yRzz//nCVLlqClpcWnn35KgwYN0NbWlvMVNk1BkiSV4y/Lk5+fT3Z2NhERETg5OQFPO6Jubm7yVI3naWtrExYWxuzZs4mNjeXUqVMEBQUREhJCXFwcNjY2ct7z588zePBg5s6dS7t27Yodv8uXL6Ojo0PDhg3lY7Vq1VJ7uO3QoUMEBwfz22+/kZmZSW5uLk+ePOHRo0cYGb18msDAgQOZNm0ap06dwt3dnQ0bNtC7d+9inQugp6ensoLCuXPnkCRJjmWB7OxsLCwsilXmyzwbkwLOzs4qvxs2NjYkJCS8sJwpU6Ywfvx4+X1mZia2tra0atXqtdX1Tfjoo4/UvsAMHTqUmjVrEhAQgI2NjdrUio4dO9K3b18GDBhAzZo15dh4enqqfOlavnw5VatWxcfH543VX6lUEhMTg5eXl0Z3jHzfiDhrhoizZog4a0ZZjXPBHeDiKPUOsp6eHjVq1ACedmjOnDnDt99+y+rVq3Fzc+PChQtkZGSQk5NDxYoVadKkiUrHx9vbmz///JO0tDR0dHSoUKEC1tbWODg4AE+nOTy/qgXAv//+K48aW1tbc/r0aZX09PR0lEqlnMfGxgYdHR2VDl1BhyEpKemF85KrVKmCr68vvr6+zJ49GycnJ1atWiWPSv7777907dqV7t27ExAQUKL4SdLTW/wvmqt88+ZNfHx8GDFiBN988w3m5uYcP36cwYMHF/t2Q6VKlejUqRNhYWFUq1aNqKgoDh8+XOx6GhgYqNQxPz8fbW1t4uPjVTqs8PKpFAqFQm53gcLaUVjn/fl/yAqF4qUPDOrr66tM43m2rLf5D4O5ubna9B9jY2MqVqyIq6srgNrovK6uLlWqVMHFxQWAunXrUqNGDUaNGsWCBQuwsLBgx44dHDhwgN27d2uk/W97nN8VIs6aIeKsGSLOmlHW4lySur516yBLkqQy3xPA1NSUihUr8scff3D27Fm6dOmidp6lpSUVKlQgNjaW1NRUOnfuDICHhwcZGRnExcXJeU+fPk1GRgZNmzaV81y6dEmelgGwf/9+9PX1cXNzA6BZs2bk5uby559/ynkKlkUryTbLZmZm2NjYyCtxKJVKevbsSaVKlVi3bl2xyylQu3ZtcnNzOXv2rHzsypUrKg/bnT17ltzcXBYuXIi7uztOTk7cvn27xNcaMmQIkZGRrF69murVq9OsWbMSl1HA1dWVvLw8UlNTqVGjhsqroNOmp6dHXp76FIaKFSuq/Kz++OOPEt02EYpPV1eXqKgoKlasSKdOnahXrx4RERGEh4e/0dFjQRAEQShNpTqCPHXqVNq3b4+trS0PHjwgMjKSw4cPEx0dDcCPP/5IxYoV+eCDD0hISGDs2LF07doVb29vuYywsDBq165NxYoVOXnyJGPHjmXcuHHyiG7t2rX5+OOPGTp0KKtXrwZg2LBhdOzYUc7j7e1NnTp18PX1Zf78+dy7d4+AgACGDh0qzxVu27YtDRo0YNCgQSxevJj8/Hy++OILvLy85FHluLg4/Pz8OHjwIFWqVGH16tVcuHCBbt26Ub16dZ48eUJERASJiYksXboUeDpP9uLFixw4cKDQFSTMzc3R09MrMoY1a9aU27dmzRp0dHTw9/fHwMBAzlO9enVyc3NZunQpnTp14tdff2XVqlUl/nm1a9cOU1NTZs+ezaxZs0p8/rOcnJzo168ffn5+LFy4EFdXV9LS0uQHv3x8fLC3t+fhw4ccPHiQDz/8EENDQwwNDWndujXLli3D3d2d/Px8Jk+eXKa+wZaml43637hxQ+2Yo6Mj27ZtezMVEgRBEIS3UKmOIN+5cwdfX19q1qxJmzZtOH36NNHR0Xh5eQGQnJyMr68vtWrVYsyYMfj6+vL999+rlHHlyhW6du1K7dq1mTVrFoGBgSxYsEAlz+bNm6lbty7e3t54e3tTr149vvvuOzldW1ubPXv2UK5cOZo1a0bv3r3p2rWrSjlaWlrs2rULS0tLWrRoQYcOHahduzaRkZFynqysLK5cuSLf7m/cuDEPHz5kxIgRODs74+npyalTp9ixYweenp7A06XrMjIyaNSoETY2NmqvEydOvDSOYWFh2Nra4unpSffu3Rk2bJjKg4n169cnNDSUkJAQXFxc2Lx5M3PmzCnuj0klBgMHDiQvLw8/P78Sn19Yvf38/JgwYQI1a9akc+fOnD59GltbWwCaNm3KiBEj6NOnDxUrVpSXy1u4cCG2tra0aNGCvn37EhAQgKGh4X+ujyAIgiAIAoBCen4ypyC8wNChQ7lz5w47d+4s7aqUmszMTExNTUlLS3urH9Ir65RKJVFRUfj4+Ig7BG+QiLNmiDhrhoizZpTVOBd8fmdkZLx0Kd1Sf0hPKBsyMjI4c+YMmzdv5pdffint6giCIAiCILwxb91DeoKqY8eOYWxsXORLU7p06ULnzp0ZPny4PAWmQPv27YusX3BwsMbqKAiCIAiC8DqIEeS3XMOGDblw4UJpV+OFD3etW7eOx48fF5pW1C6DgiAIgiAIbyvRQX7LGRgYyOtEv62qVKlS2lUQBEEQBEF4bcQUC0EQBEEQBEF4huggl3EtW7bE39//tZfbokULtmzZUqy8GzduVNvauiwICAhQ22q5LFm5ciX16tWjfPnylC9fHg8PD/bu3SunDxw4EIVCofJyd3dXKWPNmjW0bNmS8uXLo1AoCl2LWxAEQRDeN6KDLKjZvXs3KSkpfPLJJ8XK36dPH3lXwbJk0qRJhIWFcf369dKuyiupWrUqc+fO5ezZs5w9e5bWrVvTpUsXEhMT5Twff/wxycnJ8isqKkqljKysLD7++GOmTp2q6eoLgiAIwltLzEEW1CxZsoTPPvsMLa3ifX8yMDBQ2bnveUql8q1cJ7FSpUp4e3uzatUqQkJCSrs6JdapUyeV90FBQaxcuZJTp07h7OwMgL6+vrx1d2EK7j68bIc9QRAEQXifiBHkd0h6ejp+fn6YmZlhaGhI+/bt+eOPP1TyrF27FltbWwwNDenWrRuhoaEq0yPS0tI4cOAAnTt3Vjnv/v37DBs2DCsrK8qVK4eLiwu7d+8G1KdYzJgxg/r167NhwwaqVauGvr4+kiS9sIwXKSh/9+7d1KxZE0NDQ3r27MmjR48IDw/H3t4eMzMzRo8eTV5eHgBTpkxRm04AUK9ePaZPny6/79y5s9rujGVRXl4ekZGRPHr0CA8PD/n44cOHqVSpEk5OTgwdOpTU1NRSrKUgCIIglA1iBPkdMnDgQP744w927txJ+fLlmTx5Mj4+Pvz222/o6ury66+/MmLECEJCQujcuTMHDhzgq6++Uinj+PHjGBoaUrt2bflYfn4+7du358GDB2zatInq1avz22+/oa2tXWRdrl27xg8//MC2bdvQ1tZ+pTKelZWVxZIlS4iMjOTBgwd0796d7t27U6FCBaKiovjrr7/o0aMHzZs3p0+fPvTr14+5c+fy559/Ur16dQASExNJSEjgp59+kstt3Lgxt27d4ubNm9jZ2RV67ezsbLKzs+X3mZmZALQIOUCurlGx6v+6XZrRDoCEhARatGjBkydPMDY25scff8TR0RGlUomXlxfdunXjgw8+4MaNG8yYMYNWrVpx+vRp9PX1VcrLzc0Fno72F2yVXtoK6vG21OddJeKsGSLOmiHirBllNc4lqa/oIL8jCjrGv/76K02bNgVg8+bN2NrasmPHDnr16sXSpUtp3749AQEBADg5OXHixAmVUdwbN25gZWWlMr3iwIEDxMXFcfnyZZycnACoVq3aC+uTk5PDd999R8WKFQHYv39/ict4llKpZOXKlXJnt2fPnnz33XfcuXMHY2Nj6tSpQ6tWrTh06BB9+vTBxcWFevXqsWXLFvlLwObNm2nUqJF8ffj/Jepu3LhRZAd5zpw5zJw5U+34NNd8DA3zit2G16lgLrFSqWTBggU8evSIkydP4uvrS1BQELa2tvJGMklJSWhpaeHv78+wYcOYPXu2yigzPO1ow9OfkyY3oCmOmJiY0q7Ce0HEWTNEnDVDxFkzylqcs7Kyip1XdJDfEZcvX0ZHR4cmTZrIxywsLKhZsyaXL18G4MqVK3Tr1k3lvMaNG6t0kB8/fky5cuVU8ly4cIGqVauqdCxfxs7OTu4cv2oZzzI0NJQ7xwBWVlbY29urdOasrKxUphD069ePDRs28NVXXyFJEt9//73aih8Fc6df9I9mypQpjB8/Xn6fmZmJra0ts89rkatbvBHw161gBPlZY8aM4eOPP+bixYsMHz680POCg4MpX748Pj4+KseNjJ6OhHt7e781K5IolUpiYmLw8vJ6K+ewvytEnDVDxFkzRJw1o6zGueAOcHGIDvI7QpKkIo8rFAq1/y/qPEtLS9LT01WOvegBvKIUdLj+SxnPev4foEKhKPRYfn6+/L5v3758+eWXnDt3jsePH3Pr1i21lTnu3bsHoNKZf56+vr7alASAo5PbYmFhUeK2vGlFPRR59+5dbt26RdWqVdXSdXSe/inQ1dV96/7YvY11eheJOGuGiLNmiDhrRlmLc0nqKh7Se0fUqVOH3NxcTp8+LR+7e/cuV69elecT16pVi7i4OJXzzp49q/Le1dWVlJQUlU5yvXr1+Pvvv//TUm6vo4ySqlq1Ki1atGDz5s1s3ryZtm3bYmVlpZLn0qVL6Orqyqs+lCVTp07l2LFj3Lhxg4SEBAIDAzl8+DD9+vXj4cOHBAQEcPLkSW7cuMHhw4fp1KkTlpaWKncRUlJSuHDhAteuXQOeTrW4cOGC/MVBEARBEN5HooP8jnB0dKRLly4MHTqU48ePc/HiRfr370+VKlXo0qULAKNHjyYqKorQ0FD++OMPVq9ezd69e1VGlV1dXalYsSK//vqrfMzT05MWLVrQo0cPYmJiuH79Onv37iU6OrrY9XsdZbyKfv36ERkZyY8//kj//v3V0o8dO8ZHH330n0e4S8OdO3fw9fWlZs2atGnThtOnTxMdHY2Xlxfa2tokJCTQpUsXnJycGDBgAE5OTpw8eRITExO5jFWrVuHq6srQoUOBpxvEuLq6snPnztJqliAIgiCUOtFBfoeEhYXh5uZGx44d8fDwQJIkoqKi5FsKzZo1Y9WqVYSGhvLhhx8SHR3NuHHjVOYca2trM2jQIDZv3qxS9rZt22jUqBGffvopderUYdKkSfKSasX1OsooqV69enH37l2ysrLo2rWrWvr3338vdw7LmvXr13Pjxg2ys7NJTU3lwIEDeHl5AU+ntOzbt4/U1FRycnK4efMmGzduxNbWVqWMGTNmIEmS2mvgwIGl0CJBEARBeDsopKImrwrvhaFDh/L7779z7Ngx+didO3dwdnYmPj6+yJUd3gV79uxh4sSJ/O9//5Pn4BZHZmYmpqampKWlvZVzkN8VSqWSqKgofHx8ytQct7JGxFkzRJw1Q8RZM8pqnAs+vzMyMihfvvwL84oR5PfMggULuHjxIteuXWPp0qWEh4czYMAAlTxWVlasX7+epKSkUqqlZjx69IiwsLASdY4FQRAEQXj3iZ7BeyYuLo558+bx4MEDqlWrxpIlSxgyZIhavoJ5y5rQvn17lRHsZ02dOpWpU6e+kev27t37jZQrCIIgCELZJjrI75kffvihtKugZt26dTx+/LjQNHNzcw3XRhAEQRCE953oIAulrmA3O0EQBEEQhLeBmIMsCIIgCIIgCM8QHWRBKENWrlxJvXr1KF++POXLl8fDgDe4SQAAMPVJREFUw4O9e/fK6T///DPt2rXD0tIShULBhQsX1MpISUnB19cXa2trjIyMaNCgAT/99JMGWyEIgiAIbzfRQS5jWrZsib+//yuff+PGjSI7TmXdxo0bqVChQmlX442qWrUqc+fO5ezZs5w9e5bWrVvTpUsXEhMTgacrczRr1oy5c+cWWYavry9Xrlxh586dJCQk0L17d/r06cP58+c11QxBEARBeKuJOchlzM8///xWrTm4ceNG/P39uX//fmlX5b3QqVMnlfdBQUGsXLmSU6dO4ezsjK+vL/D0i1BRTp48ycqVK2ncuDEA06ZNY9GiRZw7dw5XV9c3VndBEARBKCvECHIZY25urrJVcFmRk5NT2lV45+Tl5REZGcmjR4/w8PAo9nnNmzdn69at3Lt3j/z8fCIjI8nOzqZly5ZvrrKCIAiCUIaIEeQypmXLltSvX5/Fixdjb2/PsGHDuHbtGj/++CNmZmZMmzaNYcOGyfnj4uIYPnw4ly9fxsXFhcDAQJXyChsB3rFjB926daNgk8WLFy/i7+/P2bNnUSgUODo6snr1ah4+fMhnn30GgEKhAGD69OnMmDEDe3t7hgwZwrVr19i+fTtdu3bl1q1b1KlTh2XLlsnXunv3LpUrV2bv3r20bt36hW1PT09n7Nix7Nq1i+zsbDw9PVmyZAmOjo4q+Xbs2MGkSZNISkrio48+YsOGDdja2nLlyhVq1arF5cuXqVWrlpw/NDSUJUuWcP36dbkdxdFkzkFydYyKnf+/ujG3AwAJCQl4eHjw5MkTjI2N2b59O3Xq1Cl2OVu3bqVPnz5YWFigo6ODoaEh27dvp3r16m+q6oIgCIJQpogOchm3cOFCvvnmG6ZOncpPP/3E559/TosWLahVqxaPHj2iY8eOtG7dmk2bNnH9+nXGjh1b4mv069cPV1dXVq5ciba2NhcuXEBXV5emTZuyePFivv76a65cuQKAsbGxfN78+fP56quvmDZtGvC0sz5q1CgWLlyIvr4+AJs3b6Zy5cq0atXqpfUYOHAgf/zxBzt37qR8+fJMnjwZHx8ffvvtN3naSVZWFkFBQYSHh6Onp8fIkSP55JNP+PXXX6lZsyZubm5s3ryZb775Ri53y5Yt9O3bt8jOcXZ2NtnZ2fL7zMxMAPS1JLS1NbdTu1KpBKBatWqcOXOGjIwMfv75ZwYMGMCBAwdUOskFeZVKpfz/BaZOncq9e/eIjo7GwsKCnTt30qtXL2JjY6lbt67G2vMyz7ZBeHNEnDVDxFkzRJw1o6zGuST1FR3kMs7Hx4eRI0cCMHnyZBYtWsThw4epVasWmzdvJi8vjw0bNmBoaIizszN///03n3/+eYmukZSUxMSJE+VR12dHbE1NTVEoFFhbW6ud17p1awICAuT3tra2jB49ml9++UXexS4sLIyBAwe+dOS2oGP866+/0rRpU+Bp59rW1pYdO3bQq1cv4Okv/7Jly2jSpAkA4eHh1K5dm7i4OBo3bky/fv1YtmyZ3EG+evUq8fHxREREFHntOXPmMHPmTLXj01zzMTTMe2G9X6eoqCi1Y82aNWPfvn1MmjRJ/j0AuHPnDgDHjx/n9u3b8vHk5GRWrFjBkiVLePLkCf/88w9ubm7Y2dkxderUEv9uaEJMTExpV+G9IOKsGSLOmiHirBllLc5ZWVnFzis6yGVcvXr15P8v6KimpqYCcPnyZT788EMMDQ3lPCWZq1pg/PjxDBkyhO+++462bdvSq1evYt2Ob9iwocp7fX19+vfvz4YNG+jduzcXLlzg4sWL7Nix46VlXb58GR0dHbnjC2BhYUHNmjW5fPmyfExHR0flurVq1aJChQpcvnyZxo0b88knnzBx4kROnTqFu7s7mzdvpn79+i+cojBlyhTGjx8vv8/MzMTW1pbZ57XI1dV+ad1fl0sz2hV6/Ntvv8XKygofHx/5WMFDes2bN6d+/fry8YSEBAA8PT2pXbu2fHz58uVUrVpVpYzSplQqiYmJwcvL6616MPVdI+KsGSLOmiHirBllNc4Fd4CLQ3SQy7jnfzEVCgX5+fkA8hziF9HS0lLL9/wtiBkzZtC3b1/27NnD3r17mT59OpGRkXTr1u2FZRsZqc/PHTJkCPXr1+fvv/9mw4YNtGnTBjs7u5fWs6i2SJKkNvpc2Gh0wTEbGxtatWrFli1bcHd35/vvv2f48OEvvLa+vr48JeRZRye3xcLC4qV1f52mTp1K+/btsbW15cGDB0RGRnLkyBGio6PR1dXl3r17JCUlyaPGf/31F7q6ulhbW2NtbU3dunWpUaMGo0aNYsGCBVhYWLBjxw4OHDjA7t2738o/dLq6um9lvd41Is6aIeKsGSLOmlHW4lySuopVLN5hderU4eLFizx+/Fg+durUKZU8FStW5MGDBzx69Eg+VtgayU5OTowbN479+/fTvXt3wsLCANDT0yMvr/jTDOrWrUvDhg1Zu3YtW7ZsYdCgQcVuS25uLqdPn5aP3b17l6tXr6qMhObm5nL27Fn5/ZUrV7h//77KQ3n9+vVj69atnDx5kj///JNPPvmk2PUvbXfu3MHX15eaNWvSpk0bTp8+TXR0NF5eXgDs3LkTV1dXOnR4+kDfJ598gqurK6tWrQKe/nGIioqiYsWKdOrUiXr16hEREUF4ePhbNXosCIIgCKVJdJDfYX379kVLS4vBgwfz22+/ERUVxYIFC1TyNGnSBENDQ6ZOncq1a9fYsmULGzdulNMfP37MqFGjOHz4MDdv3uTXX3/lzJkzcqfU3t6ehw8fcvDgQdLS0oo1v2fIkCHMnTuXvLy8l45CF3B0dKRLly4MHTqU48ePc/HiRfr370+VKlXo0qWLnE9XV5fRo0dz+vRpzp07x2effYa7u7u85i9A9+7dyczM5PPPP6dVq1ZUqVKlWHV4G6xfv54bN26QnZ1NamoqBw4ckDvH8PRBRkmS1F4zZsyQ8zg6OrJt2zbu3LnDo0ePuHjxorx+siAIgiAIooP8TjM2NmbXrl389ttvuLq6EhgYSEhIiEoec3NzNm3aRFRUFHXr1uX7779X6Uxpa2tz9+5d/Pz8cHJyonfv3rRv315+aK1p06aMGDGCPn36ULFiRebNm/fSen366afo6OjQt29fypUrV+z2hIWF4ebmRseOHfHw8ECSJKKiolRumRgaGjJ58mT69u2Lh4cHBgYGREZGqpRTvnx5OnXqxMWLF/m/9u4+Lud7/wP466quru4joiLCUHQj+qEYYUR02HbYMHKGLZbbnw0ZMkbb+WnYcXPc1bFx+m0Ts7PWEaohN2VloTV3Cackowjp5v37w/r+unSzcnOlvJ6Px/V4dH2+n+vzfX/f3b2v7/X5fr5jx46t8f6JiIjoxaCSmkxUJXqKLl++DAcHByQmJqJr1651HU6t5efnw9LSErm5uTqfg/wiKSoqQlRUFHx9fevVHLf6hnnWDeZZN5hn3aiveS77/52XlwcLC4tq+/IiPdKZoqIiZGVlYd68eejZs2e9LI6JiIio4eMUC9KZw4cPo3Xr1jhx4oRy0ViZgwcPwszMrMoHERERka7wDDLpjLe3d5XLtXl4eFS6egYRERGRrrFApueCsbExXnrppboOg4iIiIhTLIiIiIiIymOB/Dtvb2/MnDnzsV+fkZEBlUrFaQL0TK1fvx6urq6wsLCAhYUFPD098cMPPyjbIyMj4ePjg6ZNm1b681j2c1rZ4+uvv9bx0RARET2fWCD/LjIyEkuXLq3rMBTh4eFo1KhRXYdRLQcHB6xataquwwAAxMXFYfjw4bC1tYWpqSm6dOmC7du3V+gXHx+Pbt26wcjICG3btq1wseDzrmXLlggJCUFSUhKSkpLQv39/DB8+HKdPnwYAFBQUoFevXggJCan09fb29sjKytJ6LFmyBKamphgyZIguD4WIiOi5xTnIv7OysqrrEB7LgwcPYGho+NyP+az3l5CQAFdXV8ydOxfNmzfH999/j/Hjxys3BQGAixcvwtfXF5MnT8aXX36Jw4cPY+rUqbC2tsbrr7/+NA7lmSs7ljIff/wx1q9fj6NHj6Jz587KHfEyMjIqfb2+vj5sbGy02nbt2oU33niDq4UQERH9jmeQf1d+ioWDgwOWL1+Ot99+G+bm5mjVqhU2btyo1f/48eNwd3eHkZERPDw8kJycrLW9sjPAu3fvhkqlUp6fPHkS/fr1g7m5OSwsLNCtWzckJSUhLi4Of/nLX5CXl6d8/F12dzsHBwcsW7YMEyZMgKWlJSZPnoz+/fsjMDBQa183btyARqPBgQMH/vDYKxsTeFh09unTB8bGxrC3t8f06dNRUFCg5OvSpUuYNWuWEiMABAcHo0uXLlrjr1q1Cg4ODsrzCRMmYMSIEVixYgXs7OzQoUMH5aP/yMhI9OvXDyYmJnBzc8ORI0f+MH4ACAoKwtKlS+Hl5YV27dph+vTpGDx4MHbt2qX02bBhA1q1aoVVq1bByckJkyZNwttvv13h9tv1RUlJCSIiIlBQUABPT8/HGuPEiRNISUnBxIkTn3J0RERE9RfPIFdh5cqVWLp0KYKCgvDNN99gypQp6NOnDxwdHVFQUIBhw4ahf//++PLLL3Hx4kXMmDGj1vsYO3Ys3N3dsX79eujr6yMlJQVqtRpeXl5YtWoVFi1ahPT0dADQOrv317/+FQsXLsSHH34I4GGxHhgYiJUrV0Kj0QAAtm/fDjs7O/Tr169GsTw6ZmpqKnx8fLB06VJs2bIF169fR2BgIAIDAxEWFobIyEi4ubnhnXfeUQrq2ti/fz8sLCwQExOjtfTbggUL8D//8z9o3749FixYgNGjR+PcuXMwMKj9j2peXh6cnJyU50eOHMGgQYO0+vj4+GDLli0oKiqq9d2AeqzYj2ID01rH9bgyQoYCePi98fT0xP3792FmZoZdu3ahU6dOjzXmli1b4OTkBC8vr6cZKhERUb3GArkKvr6+mDp1KgBg7ty5+OyzzxAXFwdHR0ds374dJSUl2Lp1K0xMTNC5c2dcuXIFU6ZMqdU+MjMz8f7778PR0REA0L59e2WbpaUlVCpVhY/DAaB///6YM2eO8tze3h7Tpk3Dt99+i1GjRgEAwsLCMGHCBK0z1tV5dMzx48djzJgxyln19u3bY82aNejbty/Wr18PKysr6Ovrw9zcvNIY/4ipqSk2b96sTK0omxIwZ84cDB36sBBcsmQJOnfujHPnzik5qqlvvvkGiYmJ+Pvf/660ZWdno3nz5lr9mjdvjuLiYuTm5sLW1rbSsQoLC1FYWKg8z8/PBwBo9AT6+rq7U3tRUREAoG3btkhMTEReXh4iIyPh7++Pffv2aRXJZX2LioqUrx9179497NixA0FBQVX2qUvlj4GeHeZZN5hn3WCedaO+5rk28bJAroKrq6vydVmhmpOTAwBIS0uDm5sbTExMlD6P8xH37NmzMWnSJHzxxRd45ZVXMHLkSLRr1+4PX+fh4aH1XKPR4K233sLWrVsxatQopKSk4OTJk9i9e3eNY3l0zBMnTuDcuXNaF7qJCEpLS3Hx4kWtM7OPw8XFpdJ5x+XzXlaw5uTk1KpAjouLw4QJE7Bp0yZ07txZa9ujbxjKzl5X90ZixYoVWLJkSYX2D91LYWJSUuO4nlRUVFSFtl69euHf//43PvjgA+UNHQBcu3YNAHDo0CH85z//qXS82NhYFBQUwMbGptKxnxcxMTF1HcILgXnWDeZZN5hn3ahveb57926N+7JArsKjH7erVCqUlpYCQJV3gytPT0+vQr9H37kEBwdjzJgx+P777/HDDz9g8eLFiIiIwKuvvlrt2KamFT/WnzRpErp06YIrV65g69atGDBgAFq3bv2HcVY1ZmlpKd59911Mnz69Qt9WrVpVOU5Njruy/ZUpn/eyorUs7zURHx8PPz8/hIaGYvz48VrbbGxskJ2drdWWk5MDAwMDNGnSpMox58+fj9mzZyvP8/PzYW9vj379+lX7Ol1ZvXo1mjdvDl9fX6Wt7Ix87969K8wJLxMaGgo/Pz+MHj1aB1HWXlFREWJiYjBw4MBaT3+hmmOedYN51g3mWTfqa57LPgGuCRbIj6FTp0744osvcO/ePRgbGwMAjh49qtXH2toat2/fRkFBgVIMVrZGcocOHdChQwfMmjULo0ePRlhYGF599VUYGhqipKTmZyddXFzg4eGBTZs2YceOHfj8888f/wABdO3aFadPn6727naVxWhtbY3s7GyIiFLg6mpt6Li4OAwbNgyffPIJ3nnnnQrbPT098d1332m17d27Fx4eHtX+gms0GmVud3lqtVrnfxiCgoIwZMgQ2Nvb4/bt24iIiEB8fDyio6OhVqvx22+/ITMzUzlrfOHCBajVatjY2GhNhTl37hwOHjyIqKio5/6PW13k+UXEPOsG86wbzLNu1Lc81yZWrmLxGMaMGQM9PT1MnDgRZ86cQVRUVIWVEHr06AETExMEBQXh3Llz2LFjB8LDw5Xt9+7dQ2BgIOLi4nDp0iUcPnwYiYmJytQFBwcH3LlzB/v370dubm6NPhaYNGkSQkJCUFJS8odnof/I3LlzceTIEbz33ntISUnB2bNnsWfPHkybNk3p4+DggB9//BFXr15Fbm4ugIerW1y/fh2ffvopzp8/j7Vr12rdyOJZiYuLw9ChQzF9+nS8/vrryM7ORnZ2Nn777TelT0BAAC5duoTZs2cjLS0NW7duxZYtW7TmXj/vrl27hnHjxqFjx44YMGAAjh07hujoaAwcOBAAsGfPHri7uyvzuN988024u7tXWO9569ataNGiRYWLFomIiIgF8mMxMzPDd999hzNnzsDd3R0LFizAJ598otXHysoKX375JaKiouDi4oJ//vOfylJtwMP1aG/cuIHx48ejQ4cOGDVqFIYMGaLMdfXy8kJAQADeeOMNWFtb49NPP/3DuEaPHg0DAwOMGTMGRkZGT3SMrq6uiI+Px9mzZ/Hyyy/D3d0dCxcu1LqQ7aOPPkJGRgbatWsHa2trAICTkxPWrVuHtWvXws3NDcePH9dJARoeHo67d+9ixYoVsLW1VR6vvfaa0qdNmzaIiopCXFwcunTpgqVLl2LNmjX1Zg1k4OGqExkZGSgsLEROTg727dunFMfAwyX0RKTCo/zPHgAsX74cly9fhp4e/wQQERE9SiU1mVBL9cLly5fh4OCAxMREdO3ata7DabDy8/NhaWmJ3Nzc52IOckNVVFSEqKgo+Pr61quP8Oob5lk3mGfdYJ51o77muez/d15eHiwsLKrtyznIDUBRURGysrIwb9489OzZk8UxERER0RPg56sNwOHDh9G6dWucOHGiwlzTgwcPwszMrMpHfTFkyJAqj2H58uV1HR4RERE1IDyD3AB4e3tXufSch4eHzlaReJY2b96Me/fuVbrNyspKx9EQERFRQ8YCuYEzNjaudqm2+qJFixZ1HQIRERG9IDjFgoiIiIioHBbIRPXE+vXr4erqCgsLC1hYWMDT01NrjenIyEj4+PigadOmUKlUlU6teffdd9GuXTsYGxvD2toaw4cPxy+//KLDoyAiInr+sUCmpyo7OxsDBw6EqakpGjVqVNfhNCgtW7ZESEgIkpKSkJSUhP79+2P48OE4ffo0AKCgoAC9evVCSEhIlWN069YNYWFhSEtLw7///W+ICAYNGlSruzYSERE1dCyQqUrBwcHo0qVLrV7z2WefISsrCykpKfj111+fShze3t6YOXPmUxmrPBHBkCFDoFKpsHv37qc+/tPm5+cHX19f5fbkH3/8MczMzJTbnI8bNw6LFi3CK6+8UuUY77zzDvr06QMHBwd07doVy5Ytw+XLl5GRkaGjoyAiInr+8SI9eqrOnz+Pbt26oX379nUdSgUPHjyAoaGh8nzVqlVQqVR1GNHjKykpwddff42CggJ4eno+1hgFBQUICwtDmzZtYG9v/5QjJCIiqr9YIDdw0dHRWLZsGU6dOgV9fX14enpi9erVaNeuHQDgypUrmDNnDvbu3YvCwkI4OTlh7dq1SEtLU257XVZEhoWFYcKECVXuy8HBAZcuXQIAbNu2Df7+/ggPD0doaCjCwsJw4cIFWFlZwc/PD59++qnWOsyHDx9GUFAQEhMTodFo0L17d0RERGDWrFmIj49HfHw8Vq9eDQC4ePEiHBwcEB8fj/fffx8nT56ElZUV/P39sWzZMhgYPPyx9vb2hrOzMwwNDbFt2zZ07twZ8fHxAICTJ08iNDQUiYmJWrfPro0eK/aj2MD0sV5bWxkhQwEAqamp8PT0xP3792FmZoZdu3ahU6dOtRpr3bp1+OCDD1BQUABHR0fExMRovXEgIiJ60bFAbuAKCgowe/ZsuLi4oKCgAIsWLcKrr76KlJQU3L17F3379kWLFi2wZ88e2NjY4KeffkJpaSneeOMNnDp1CtHR0di3bx8AwNLSstp9JSYmYvz48bCwsMDq1athbGwMANDT08OaNWvg4OCAixcvYurUqfjggw+wbt06AEBKSgoGDBiAt99+G2vWrIGBgQFiY2NRUlKC1atX49dff4WzszM++ugjAIC1tTWuXr0KX19fTJgwAdu2bcMvv/yCyZMnw8jICMHBwUpM//jHPzBlyhQcPnxYWSv67t27GD16NP72t7/BxsbmD3NYWFiIwsJC5Xl+fj4AQKMn0NfXzZ3ai4qKAABt27ZFYmIi8vLyEBkZCX9/f+zbt0+rSC7rW1RUpHxd3qhRo+Dt7Y3s7GyEhoZi5MiRiI+Ph5GRkU6OpabKHwc9O8yzbjDPusE860Z9zXNt4lVJVXeYoAbp+vXraNasGVJTU5GQkIA5c+YgIyOj0pttBAcHY/fu3bW60ciIESPQqFEjhIeHV9nn66+/xpQpU5CbmwsAGDNmDDIzM3Ho0KFK+3t7e6NLly5YtWqV0rZgwQLs3LkTaWlpyhnudevWYe7cucjLy4Oenh68vb2Rl5eH5ORkrfHeffddlJSUYPPmzQAeniHftWsXRowYUen+g4ODlbPp5e3YsQMmJiZVHqcuLFq0CDY2Npg6darSdu3aNbz77rsIDQ1F27Ztq319UVER3nrrLbz33nvo06fPsw6XiIiozty9exdjxoxBXl4eLCwsqu3LM8gN3Pnz57Fw4UIcPXoUubm5KC0tBQBkZmYiJSUF7u7uz/xOdLGxsVi+fDnOnDmD/Px8FBcX4/79+ygoKICpqSlSUlIwcuTIWo2ZlpYGT09PrTnEvXr1wp07d3DlyhW0atUKwMM7CZa3Z88eHDhwoELRXJ358+dj9uzZyvP8/HzY29tjWbIeitX6tYr7cZ0K9qm0ffXq1WjevDl8fX2VtrIL7nr37v2HF1k+ePAAenp66NSpk9YYz4OioiLExMRg4MCBUKvVdR1Og8U86wbzrBvMs27U1zyXfQJcEyyQGzg/Pz/Y29tj06ZNsLOzQ2lpKZydnfHgwQNlCsSzdOnSJfj6+iIgIABLly6FlZUVDh06hIkTJyofdTxOHCJS4QK7sg9DyrebmmrPET5w4ADOnz9fYQm6119/HS+//DLi4uIq7Euj0UCj0VRo/3HuK2jSpEmtY39cQUFBGDJkCOzt7XH79m1EREQgPj4e0dHRUKvV+O2335CZmYn//Oc/AIALFy5ArVbDxsYGNjY2uHDhAv73f/8XgwYNUqapfPLJJzA2Noafn99z+0dOrVY/t7E1JMyzbjDPusE860Z9y3NtYuUybw3YjRs3kJaWhg8//BADBgyAk5MTbt68qWx3dXVFSkoKfvvtt0pfb2ho+MTr4yYlJaG4uBgrV65Ez5490aFDB6WAKx/H/v37qxyjsjg6deqEhIQElJ8hlJCQAHNz82pvSz1v3jz8/PPPSElJUR7Aw+XpwsLCHuMIdefatWsYN24cOnbsiAEDBuDYsWOIjo7GwIEDATw8O+7u7o6hQx9e0Pfmm2/C3d0dGzZsAAAYGRnh4MGD8PX1xUsvvYRRo0bB1NQUCQkJaNasWZ0dFxER0fOGZ5AbsMaNG6NJkybYuHEjbG1tkZmZiXnz5inbR48ejeXLl2PEiBFYsWIFbG1tkZycDDs7O3h6eioX1aWkpKBly5YwNzev9Exqddq1a4fi4mJ8/vnn8PPzw+HDh5WCrcz8+fPh4uKCqVOnIiAgAIaGhoiNjcXIkSPRtGlTODg44NixY8jIyICZmRmsrKwwdepUrFq1CtOmTUNgYCDS09OxePFizJ49G3p6Vb/vKzub+qhWrVqhTZs2tTo2XduyZUu12ydMmFDtKiN2dnaIiop6ylERERE1PDyD3IDp6ekhIiICJ06cgLOzM2bNmoW//vWvynZDQ0Ps3bsXzZo1g6+vL1xcXBASEgJ9/Yfzal9//XUMHjwY/fr1g7W1Nf75z3/WOoYuXbogNDQUn3zyCZydnbF9+3asWLFCq0+HDh2wd+9enDx5Et27d4enpye+/fZbZbm2OXPmQF9fH506dYK1tTUyMzPRokULREVF4fjx43Bzc0NAQAAmTpyIDz/88AkyRkRERMRVLIhqLT8/H5aWlsjNzdXpHOQXTVFREaKiouDr61uv5rjVN8yzbjDPusE860Z9zXPZ/++arGLBM8hEREREROWwQKYa2759O8zMzCp9dO7cua7DIyIiInoqeJEe1dif/vQn9OjRo9Jt9ekjFiIiIqLqsECmGjM3N4e5uXldh0FERET0THGKBRERERFROSyQiYiIiIjKYYFMRERERFQOC2QiIiIionJYIBMRERERlcMCmYiIiIioHC7zRlRLZXdnv337Ntd/foaKiopw9+5d5OfnM8/PEPOsG8yzbjDPulFf85yfnw/g//+PV4cFMlEt3bhxAwDQpk2bOo6EiIiIauv27duwtLSstg8LZKJasrKyAgBkZmb+4S8YPb78/HzY29vj8uXLsLCwqOtwGizmWTeYZ91gnnWjvuZZRHD79m3Y2dn9YV8WyES1pKf3cOq+paVlvfrDUF9ZWFgwzzrAPOsG86wbzLNu1Mc81/TEFi/SIyIiIiIqhwUyEREREVE5LJCJakmj0WDx4sXQaDR1HUqDxjzrBvOsG8yzbjDPuvEi5FklNVnrgoiIiIjoBcEzyERERERE5bBAJiIiIiIqhwUyEREREVE5LJCJiIiIiMphgUxUC+vWrUObNm1gZGSEbt264eDBg3Ud0nPtxx9/hJ+fH+zs7KBSqbB7926t7SKC4OBg2NnZwdjYGN7e3jh9+rRWn8LCQkybNg1NmzaFqakp/vSnP+HKlStafW7evIlx48bB0tISlpaWGDduHG7duvWMj+75sGLFCvzXf/0XzM3N0axZM4wYMQLp6elafZjnJ7d+/Xq4uroqN0bw9PTEDz/8oGxnjp+NFStWQKVSYebMmUobc/3kgoODoVKptB42NjbKduYYgBBRjURERIharZZNmzbJmTNnZMaMGWJqaiqXLl2q69CeW1FRUbJgwQLZuXOnAJBdu3ZpbQ8JCRFzc3PZuXOnpKamyhtvvCG2traSn5+v9AkICJAWLVpITEyM/PTTT9KvXz9xc3OT4uJipc/gwYPF2dlZEhISJCEhQZydnWXYsGG6Osw65ePjI2FhYXLq1ClJSUmRoUOHSqtWreTOnTtKH+b5ye3Zs0e+//57SU9Pl/T0dAkKChK1Wi2nTp0SEeb4WTh+/Lg4ODiIq6urzJgxQ2lnrp/c4sWLpXPnzpKVlaU8cnJylO3MsQgLZKIa6t69uwQEBGi1OTo6yrx58+ooovrl0QK5tLRUbGxsJCQkRGm7f/++WFpayoYNG0RE5NatW6JWqyUiIkLpc/XqVdHT05Po6GgRETlz5owAkKNHjyp9jhw5IgDkl19+ecZH9fzJyckRABIfHy8izPOz1LhxY9m8eTNz/Azcvn1b2rdvLzExMdK3b1+lQGaun47FixeLm5tbpduY44c4xYKoBh48eIATJ05g0KBBWu2DBg1CQkJCHUVVv128eBHZ2dlaOdVoNOjbt6+S0xMnTqCoqEirj52dHZydnZU+R44cgaWlJXr06KH06dmzJywtLV/I701eXh4AwMrKCgDz/CyUlJQgIiICBQUF8PT0ZI6fgffeew9Dhw7FK6+8otXOXD89Z8+ehZ2dHdq0aYM333wTFy5cAMAclzGo6wCI6oPc3FyUlJSgefPmWu3NmzdHdnZ2HUVVv5XlrbKcXrp0SeljaGiIxo0bV+hT9vrs7Gw0a9aswvjNmjV74b43IoLZs2ejd+/ecHZ2BsA8P02pqanw9PTE/fv3YWZmhl27dqFTp07KP3vm+OmIiIjATz/9hMTExArb+PP8dPTo0QPbtm1Dhw4dcO3aNSxbtgxeXl44ffo0c/w7FshEtaBSqbSei0iFNqqdx8npo30q6/8ifm8CAwPx888/49ChQxW2Mc9PrmPHjkhJScGtW7ewc+dO+Pv7Iz4+XtnOHD+5y5cvY8aMGdi7dy+MjIyq7MdcP5khQ4YoX7u4uMDT0xPt2rXDP/7xD/Ts2RMAc8wpFkQ10LRpU+jr61d415uTk1PhXTbVTNkV09Xl1MbGBg8ePMDNmzer7XPt2rUK41+/fv2F+t5MmzYNe/bsQWxsLFq2bKm0M89Pj6GhIV566SV4eHhgxYoVcHNzw+rVq5njp+jEiRPIyclBt27dYGBgAAMDA8THx2PNmjUwMDBQ8sBcP12mpqZwcXHB2bNn+fP8OxbIRDVgaGiIbt26ISYmRqs9JiYGXl5edRRV/damTRvY2Nho5fTBgweIj49XctqtWzeo1WqtPllZWTh16pTSx9PTE3l5eTh+/LjS59ixY8jLy3shvjcigsDAQERGRuLAgQNo06aN1nbm+dkRERQWFjLHT9GAAQOQmpqKlJQU5eHh4YGxY8ciJSUFbdu2Za6fgcLCQqSlpcHW1pY/z2V0fFEgUb1Vtszbli1b5MyZMzJz5kwxNTWVjIyMug7tuXX79m1JTk6W5ORkASChoaGSnJysLI0XEhIilpaWEhkZKampqTJ69OhKlxJq2bKl7Nu3T3766Sfp379/pUsJubq6ypEjR+TIkSPi4uJSb5YSelJTpkwRS0tLiYuL01qy6e7du0of5vnJzZ8/X3788Ue5ePGi/PzzzxIUFCR6enqyd+9eEWGOn6Xyq1iIMNdPw3//939LXFycXLhwQY4ePSrDhg0Tc3Nz5f8Zc8xl3ohqZe3atdK6dWsxNDSUrl27KktpUeViY2MFQIWHv7+/iDxcTmjx4sViY2MjGo1G+vTpI6mpqVpj3Lt3TwIDA8XKykqMjY1l2LBhkpmZqdXnxo0bMnbsWDE3Nxdzc3MZO3as3Lx5U0dHWbcqyy8ACQsLU/owz0/u7bffVn73ra2tZcCAAUpxLMIcP0uPFsjM9ZMrW9dYrVaLnZ2dvPbaa3L69GllO3MsohIRqZtz10REREREzx/OQSYiIiIiKocFMhERERFROSyQiYiIiIjKYYFMRERERFQOC2QiIiIionJYIBMRERERlcMCmYiIiIioHBbIRET0QvD29sbMmTPrOgwiqgdYIBMRESZMmACVSlXhce7cuacyfnh4OBo1avRUxnpckZGRWLp0aZ3GUJ24uDioVCrcunWrrkMheuEZ1HUARET0fBg8eDDCwsK02qytresomqoVFRVBrVbX+nVWVlbPIJqno6ioqK5DIKJyeAaZiIgAABqNBjY2NloPfX19AMB3332Hbt26wcjICG3btsWSJUtQXFysvDY0NBQuLi4wNTWFvb09pk6dijt37gB4eGb0L3/5C/Ly8pQz08HBwQAAlUqF3bt3a8XRqFEjhIeHAwAyMjKgUqnw1VdfwdvbG0ZGRvjyyy8BAGFhYXBycoKRkREcHR2xbt26ao/v0SkWDg4OWLZsGcaPHw8zMzO0bt0a3377La5fv47hw4fDzMwMLi4uSEpKUl5TdiZ89+7d6NChA4yMjDBw4EBcvnxZa1/r169Hu3btYGhoiI4dO+KLL77Q2q5SqbBhwwYMHz4cpqammDRpEvr16wcAaNy4MVQqFSZMmAAAiI6ORu/evdGoUSM0adIEw4YNw/nz55WxynIUGRmJfv36wcTEBG5ubjhy5IjWPg8fPoy+ffvCxMQEjRs3ho+PD27evAkAEBF8+umnaNu2LYyNjeHm5oZvvvmm2nwSNWhCREQvPH9/fxk+fHil26Kjo8XCwkLCw8Pl/PnzsnfvXnFwcJDg4GClz2effSYHDhyQCxcuyP79+6Vjx44yZcoUEREpLCyUVatWiYWFhWRlZUlWVpbcvn1bREQAyK5du7T2Z2lpKWFhYSIicvHiRQEgDg4OsnPnTrlw4YJcvXpVNm7cKLa2tkrbzp07xcrKSsLDw6s8xr59+8qMGTOU561btxYrKyvZsGGD/PrrrzJlyhQxNzeXwYMHy1dffSXp6ekyYsQIcXJyktLSUhERCQsLE7VaLR4eHpKQkCBJSUnSvXt38fLyUsaNjIwUtVota9eulfT0dFm5cqXo6+vLgQMHlD4ApFmzZrJlyxY5f/68ZGRkyM6dOwWApKenS1ZWlty6dUtERL755hvZuXOn/Prrr5KcnCx+fn7i4uIiJSUlWjlydHSUf/3rX5Keni5//vOfpXXr1lJUVCQiIsnJyaLRaGTKlCmSkpIip06dks8//1yuX78uIiJBQUHi6Ogo0dHRcv78eQkLCxONRiNxcXFV5pOoIWOBTERE4u/vL/r6+mJqaqo8/vznP4uIyMsvvyzLly/X6v/FF1+Ira1tleN99dVX0qRJE+V5WFiYWFpaVuhX0wJ51apVWn3s7e1lx44dWm1Lly4VT0/PKmOqrEB+6623lOdZWVkCQBYuXKi0HTlyRABIVlaWchwA5OjRo0qftLQ0ASDHjh0TEREvLy+ZPHmy1r5Hjhwpvr6+Wsc9c+ZMrT6xsbECQG7evFnlMYiI5OTkCABJTU0Vkf/P0ebNm5U+p0+fFgCSlpYmIiKjR4+WXr16VTrenTt3xMjISBISErTaJ06cKKNHj642FqKGinOQiYgIANCvXz+sX79eeW5qagoAOHHiBBITE/Hxxx8r20pKSnD//n3cvXsXJiYmiI2NxfLly3HmzBnk5+ejuLgY9+/fR0FBgTLOk/Dw8FC+vn79Oi5fvoyJEydi8uTJSntxcTEsLS1rNa6rq6vydfPmzQEALi4uFdpycnJgY2MDADAwMNCKx9HREY0aNUJaWhq6d++OtLQ0vPPOO1r76dWrF1avXl3lMVXn/PnzWLhwIY4ePYrc3FyUlpYCADIzM+Hs7Fzpsdja2ipxOzo6IiUlBSNHjqx0/DNnzuD+/fsYOHCgVvuDBw/g7u5eoxiJGhoWyEREBOBhQfzSSy9VaC8tLcWSJUvw2muvVdhmZGSES5cuwdfXFwEBAVi6dCmsrKxw6NAhTJw48Q8vPlOpVBARrbbKXlO+yC4rEDdt2oQePXpo9SubM11T5S/2U6lUVbaV7fPR9qraHt0uIhXaavrGwc/PD/b29ti0aRPs7OxQWloKZ2dnPHjw4A+PpSxuY2PjKscv6/P999+jRYsWWts0Gk2NYiRqaFggExFRtbp27Yr09PRKi2cASEpKQnFxMVauXAk9vYfXfn/11VdafQwNDVFSUlLhtdbW1sjKylKenz17Fnfv3q02nubNm6NFixa4cOECxo4dW9vDeWLFxcVISkpC9+7dAQDp6em4desWHB0dAQBOTk44dOgQxo8fr7wmISEBTk5O1Y5raGgIAFp5unHjBtLS0vD3v/8dL7/8MgDg0KFDtY7Z1dUV+/fvx5IlSyps69SpEzQaDTIzM9G3b99aj03UELFAJiKiai1atAjDhg2Dvb09Ro4cCT09Pfz8889ITU3FsmXL0K5dOxQXF+Pzzz+Hn58fDh8+jA0bNmiN4eDggDt37mD//v1wc3ODiYkJTExM0L9/f/ztb39Dz549UVpairlz59ZoCbfg4GBMnz4dFhYWGDJkCAoLC5GUlISbN29i9uzZzyoVAB6eqZ02bRrWrFkDtVqNwMBA9OzZUymY33//fYwaNQpdu3bFgAED8N133yEyMhL79u2rdtzWrVtDpVLhX//6F3x9fWFsbIzGjRujSZMm2LhxI2xtbZGZmYl58+bVOub58+fDxcUFU6dORUBAAAwNDREbG4uRI0eiadOmmDNnDmbNmoXS0lL07t0b+fn5SEhIgJmZGfz9/R8rT0T1Wl1PgiYiorpX3SoWIg9XsvDy8hJjY2OxsLCQ7t27y8aNG5XtoaGhYmtrK8bGxuLj4yPbtm2rcMFZQECANGnSRADI4sWLRUTk6tWrMmjQIDE1NZX27dtLVFRUpRfpJScnV4hp+/bt0qVLFzE0NJTGjRtLnz59JDIysspjqOwivc8++0yrDx65aPDR/ZddbLhz505p27atGBoaSv/+/SUjI0NrnHXr1knbtm1FrVZLhw4dZNu2bdXup8xHH30kNjY2olKpxN/fX0REYmJixMnJSTQajbi6ukpcXJzW6yvL0c2bNwWAxMbGKm1xcXHi5eUlGo1GGjVqJD4+Psr3p7S0VFavXi0dO3YUtVot1tbW4uPjI/Hx8VXmk6ghU4k8MvmLiIiIKhUeHo6ZM2fybndEDRxvFEJEREREVA4LZCIiIiKicjjFgoiIiIioHJ5BJiIiIiIqhwUyEREREVE5LJCJiIiIiMphgUxEREREVA4LZCIiIiKiclggExERERGVwwKZiIiIiKgcFshEREREROWwQCYiIiIiKuf/ANwpfOkdKiWEAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "evals = {}\n", + "model = train_light_model(train_data, test_data, light_params, feature_columns_new,\n", + " [lgb.log_evaluation(period=500),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=500, use_optuna=False,\n", + " print_feature_importance=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "63235069-dc59-48fb-961a-e80373e41a61", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.668543Z", + "start_time": "2025-02-27T16:41:14.573661Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 1136428\n" + ] + } + ], + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "catboost_params = {\n", + " 'loss_function': 'MAE', # 90% 分位回归\n", + " 'iterations': 5000, # 训练轮数\n", + " 'learning_rate': 0.05, # 学习率,较低以防止过拟合\n", + " 'depth': 10, # 树的深度,防止过拟合\n", + " # 'l1_leaf_reg': 10.0, # l1 正则化,提高泛化能力\n", + " # 'bagging_temperature': 1, # 降低过拟合\n", + " # 'subsample': 0.8, # 每轮随机 80% 的样本,减少过拟合\n", + " 'colsample_bylevel': 0.8, # 每层 80% 特征子集,防止过拟合\n", + " 'random_seed': 42, # 固定随机种子,保证可复现\n", + " 'verbose': 500, # 每 100 轮打印一次信息\n", + " 'early_stopping_rounds': 100, # 早停,防止过拟合\n", + " # 'task_type': 'GPU'\n", + "}\n", + "\n", + "# model = train_catboost(train_data, test_data, feature_columns_new, catboost_params)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "465944b1d463e4b1", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.668543Z", + "start_time": "2025-02-27T16:41:14.863552Z" + } + }, + "outputs": [], + "source": [ + "from tqdm import tqdm\n", + "\n", + "def incremental_training(test_data: pd.DataFrame,\n", + " model,\n", + " days: int,\n", + " back_days: int,\n", + " feature_columns: list,\n", + " params: dict,\n", + " model_type: str = 'lightgbm'):\n", + " if model_type not in ['lightgbm', 'catboost']:\n", + " raise ValueError(\"model_type must be either 'lightgbm' or 'catboost'\")\n", + "\n", + " test_data = test_data.sort_values(by='trade_date')\n", + " scores = []\n", + " unique_trade_dates = sorted(test_data['trade_date'].unique())\n", + "\n", + " new_model = None\n", + " for i in tqdm(range(0, len(unique_trade_dates), days)):\n", + " # Get the current window of trade dates\n", + " current_dates = unique_trade_dates[i:i + days]\n", + " window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + " window_data = window_data.sort_values(by=['ts_code', 'trade_date'])\n", + " X = window_data[feature_columns]\n", + "\n", + " if new_model is not None:\n", + " window_scores = new_model.predict(X, prediction_type='RawFormulaVal')\n", + " else:\n", + " window_scores = model.predict(X, prediction_type='RawFormulaVal')\n", + " scores.extend(window_scores)\n", + "\n", + " # # Prepare data for incremental training\n", + " # current_dates = unique_trade_dates[max(0, i - back_days):i + days]\n", + " # window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + " # X_train = window_data[feature_columns]\n", + " window_data = window_data.dropna(subset=['label'])\n", + " X_train = window_data[feature_columns]\n", + " y_train = window_data['label'] # Assuming 'label' is what you're predicting\n", + " # Incrementally train the model\n", + " if len(y_train.unique()) > 1:\n", + " if model_type == 'lightgbm':\n", + " categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=categorical_feature)\n", + " new_model = lgb.train(params,\n", + " train_set=train_data,\n", + " num_boost_round=100,\n", + " init_model=model,\n", + " keep_training_booster=True)\n", + " elif model_type == 'catboost':\n", + " from catboost import Pool\n", + " train_data = Pool(data=X_train, label=y_train, cat_features=[col for col in feature_columns if col.startswith('cat')])\n", + " # model.set_params(**params)\n", + " model.fit(train_data, init_model=model)\n", + " else:\n", + " print(current_dates)\n", + "\n", + " # Add the scores as a new 'score' column to the test_data\n", + " test_data['score'] = scores\n", + " return test_data" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "e3ac761d8f0b5d31", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.672656900Z", + "start_time": "2025-02-27T16:41:15.107891Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████| 104/104 [00:51<00:00, 2.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Timestamp('2025-02-25 00:00:00'), Timestamp('2025-02-26 00:00:00')]\n" + ] + } + ], + "source": [ + "\n", + "predictions_test = incremental_training(test_data, model, 5, 0, feature_columns_new, light_params, model_type='lightgbm')\n", + "predictions_test = predictions_test.loc[predictions_test.groupby('trade_date')['score'].idxmax()]\n", + "predictions_test[['trade_date', 'score', 'ts_code']].to_csv('predictions_test.tsv', index=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "b427ce41-9739-4e9e-bea8-5f2551fec5d7", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.672656900Z", + "start_time": "2025-02-27T16:42:45.229233Z" + }, + "jupyter": { + "source_hidden": true + } + }, + "outputs": [], + "source": [ + "import joblib\n", + "import lightgbm as lgb\n", + "import pandas as pd\n", + "\n", + "# 假设你已经训练好了一个 LightGBM 模型\n", + "# model = lgb.train(params, train_data, ...)\n", + "\n", + "def save_model_with_info(model, params, feature_columns, train_data, info, save_path):\n", + " \"\"\"\n", + " 保存 LightGBM 模型及其相关信息。\n", + " \n", + " 参数:\n", + " model: 训练好的 LightGBM 模型 (lgb.Booster)。\n", + " params: 模型的参数 (dict)。\n", + " feature_columns: 特征列名列表 (list)。\n", + " train_data: 训练数据 (pd.DataFrame),包含 'trade_date' 列。\n", + " info: 额外信息 (str 或 dict)。\n", + " save_path: 保存路径 (str)。\n", + " \"\"\"\n", + " # 提取训练数据的 trade_date 的最大值和最小值\n", + " if 'trade_date' not in train_data.columns:\n", + " raise ValueError(\"训练数据中必须包含 'trade_date' 列。\")\n", + " \n", + " trade_date_min = train_data['trade_date'].min()\n", + " trade_date_max = train_data['trade_date'].max()\n", + " \n", + " # 构建保存的信息字典\n", + " model_info = {\n", + " 'model': model, # 保存模型本身\n", + " 'params': params, # 模型参数\n", + " 'feature_columns': feature_columns, # 特征列名\n", + " 'trade_date_range': {\n", + " 'min': trade_date_min,\n", + " 'max': trade_date_max\n", + " }, # trade_date 的范围\n", + " 'info': info # 额外信息\n", + " }\n", + " \n", + " # 使用 joblib 保存模型及相关信息\n", + " joblib.dump(model_info, save_path)\n", + " print(f\"模型及相关信息已成功保存到 {save_path}\")\n", + "\n", + " \n", + "\n", + "# info = \"Update Regression + 滚动new model + 5days\"\n", + " \n", + "# # 保存模型及相关信息\n", + "# save_path = \"../model/lightgbm_model_UpdateRegression_2025-2-25.pkl\"\n", + "# save_model_with_info(model, light_params, feature_columns, train_data, info, save_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f9a2b7b-11fe-4eb5-aa11-c4066fe418a1", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-01T04:00:27.672656900Z", + "start_time": "2025-02-27T16:42:45.450227Z" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/UpdateRank.ipynb b/code/train/UpdateRank.ipynb new file mode 100644 index 0000000..9e634e9 --- /dev/null +++ b/code/train/UpdateRank.ipynb @@ -0,0 +1,1570 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "79a7758178bafdd3", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:10:25.019821Z", + "start_time": "2025-03-26T15:10:25.015412Z" + } + }, + "source": [ + "# %load_ext autoreload\n", + "# %autoreload 2\n", + "\n", + "import pandas as pd\n", + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "pd.set_option('display.max_columns', None)\n" + ], + "outputs": [], + "execution_count": 66 + }, + { + "cell_type": "code", + "id": "a79cafb06a7e0e43", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:11:40.164945Z", + "start_time": "2025-03-26T15:10:25.138896Z" + } + }, + "source": [ + "from utils.utils import read_and_merge_h5_data\n", + "\n", + "print('daily data')\n", + "df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol', 'pct_chg'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df, join='inner')\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)\n", + "print('cyq perf')\n", + "df = read_and_merge_h5_data('../../data/cyq_perf.h5', key='cyq_perf',\n", + " columns=['ts_code', 'trade_date', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct',\n", + " 'cost_50pct',\n", + " 'cost_85pct', 'cost_95pct', 'weight_avg', 'winner_rate'],\n", + " df=df)\n", + "print(df.info())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "daily data\n", + "daily basic\n", + "inner merge on ['ts_code', 'trade_date']\n", + "stk limit\n", + "left merge on ['ts_code', 'trade_date']\n", + "money flow\n", + "left merge on ['ts_code', 'trade_date']\n", + "cyq perf\n", + "left merge on ['ts_code', 'trade_date']\n", + "\n", + "RangeIndex: 8450470 entries, 0 to 8450469\n", + "Data columns (total 31 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 pct_chg float64 \n", + " 8 turnover_rate float64 \n", + " 9 pe_ttm float64 \n", + " 10 circ_mv float64 \n", + " 11 volume_ratio float64 \n", + " 12 is_st bool \n", + " 13 up_limit float64 \n", + " 14 down_limit float64 \n", + " 15 buy_sm_vol float64 \n", + " 16 sell_sm_vol float64 \n", + " 17 buy_lg_vol float64 \n", + " 18 sell_lg_vol float64 \n", + " 19 buy_elg_vol float64 \n", + " 20 sell_elg_vol float64 \n", + " 21 net_mf_vol float64 \n", + " 22 his_low float64 \n", + " 23 his_high float64 \n", + " 24 cost_5pct float64 \n", + " 25 cost_15pct float64 \n", + " 26 cost_50pct float64 \n", + " 27 cost_85pct float64 \n", + " 28 cost_95pct float64 \n", + " 29 weight_avg float64 \n", + " 30 winner_rate float64 \n", + "dtypes: bool(1), datetime64[ns](1), float64(28), object(1)\n", + "memory usage: 1.9+ GB\n", + "None\n" + ] + } + ], + "execution_count": 67 + }, + { + "cell_type": "code", + "id": "cac01788dac10678", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:11:55.524829Z", + "start_time": "2025-03-26T15:11:41.366630Z" + } + }, + "source": [ + "print('industry')\n", + "industry_df = read_and_merge_h5_data('../../data/industry_data.h5', key='industry_data',\n", + " columns=['ts_code', 'l2_code', 'in_date'],\n", + " df=None, on=['ts_code'], join='left')\n", + "\n", + "\n", + "def merge_with_industry_data(df, industry_df):\n", + " # 确保日期字段是 datetime 类型\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'])\n", + " industry_df['in_date'] = pd.to_datetime(industry_df['in_date'])\n", + "\n", + " # 对 industry_df 按 ts_code 和 in_date 排序\n", + " industry_df_sorted = industry_df.sort_values(['in_date', 'ts_code'])\n", + "\n", + " # 对原始 df 按 ts_code 和 trade_date 排序\n", + " df_sorted = df.sort_values(['trade_date', 'ts_code'])\n", + "\n", + " # 使用 merge_asof 进行向后合并\n", + " merged = pd.merge_asof(\n", + " df_sorted,\n", + " industry_df_sorted,\n", + " by='ts_code', # 按 ts_code 分组\n", + " left_on='trade_date',\n", + " right_on='in_date',\n", + " direction='backward'\n", + " )\n", + "\n", + " # 获取每个 ts_code 的最早 in_date 记录\n", + " min_in_date_per_ts = (industry_df_sorted\n", + " .groupby('ts_code')\n", + " .first()\n", + " .reset_index()[['ts_code', 'l2_code']])\n", + "\n", + " # 填充未匹配到的记录(trade_date 早于所有 in_date 的情况)\n", + " merged['l2_code'] = merged['l2_code'].fillna(\n", + " merged['ts_code'].map(min_in_date_per_ts.set_index('ts_code')['l2_code'])\n", + " )\n", + "\n", + " # 保留需要的列并重置索引\n", + " result = merged.reset_index(drop=True)\n", + " return result\n", + "\n", + "\n", + "# 使用示例\n", + "df = merge_with_industry_data(df, industry_df)\n", + "# print(mdf[mdf['ts_code'] == '600751.SH'][['ts_code', 'trade_date', 'l2_code']])" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "industry\n" + ] + } + ], + "execution_count": 68 + }, + { + "cell_type": "code", + "id": "c4e9e1d31da6dba6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:11:55.794514Z", + "start_time": "2025-03-26T15:11:55.600258Z" + } + }, + "source": [ + "def calculate_indicators(df):\n", + " \"\"\"\n", + " 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。\n", + " \"\"\"\n", + " df = df.sort_values('trade_date')\n", + " df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100\n", + " # df['5_day_ma'] = df['close'].rolling(window=5).mean()\n", + " delta = df['close'].diff()\n", + " gain = delta.where(delta > 0, 0)\n", + " loss = -delta.where(delta < 0, 0)\n", + " avg_gain = gain.rolling(window=14).mean()\n", + " avg_loss = loss.rolling(window=14).mean()\n", + " rs = avg_gain / avg_loss\n", + " df['RSI'] = 100 - (100 / (1 + rs))\n", + "\n", + " # 计算MACD\n", + " ema12 = df['close'].ewm(span=12, adjust=False).mean()\n", + " ema26 = df['close'].ewm(span=26, adjust=False).mean()\n", + " df['MACD'] = ema12 - ema26\n", + " df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean()\n", + " df['MACD_hist'] = df['MACD'] - df['Signal_line']\n", + "\n", + " # 4. 情绪因子1:市场上涨比例(Up Ratio)\n", + " df['up_ratio'] = df['daily_return'].apply(lambda x: 1 if x > 0 else 0)\n", + " df['up_ratio_20d'] = df['up_ratio'].rolling(window=20).mean() # 过去20天上涨比例\n", + "\n", + " # 5. 情绪因子2:成交量变化率(Volume Change Rate)\n", + " df['volume_mean'] = df['vol'].rolling(window=20).mean() # 过去20天的平均成交量\n", + " df['volume_change_rate'] = (df['vol'] - df['volume_mean']) / df['volume_mean'] * 100 # 成交量变化率\n", + "\n", + " # 6. 情绪因子3:波动率(Volatility)\n", + " df['volatility'] = df['daily_return'].rolling(window=20).std() # 过去20天的日收益率标准差\n", + "\n", + " # 7. 情绪因子4:成交额变化率(Amount Change Rate)\n", + " df['amount_mean'] = df['amount'].rolling(window=20).mean() # 过去20天的平均成交额\n", + " df['amount_change_rate'] = (df['amount'] - df['amount_mean']) / df['amount_mean'] * 100 # 成交额变化率\n", + "\n", + " return df\n", + "\n", + "\n", + "def generate_index_indicators(h5_filename):\n", + " df = pd.read_hdf(h5_filename, key='index_data')\n", + " df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')\n", + " df = df.sort_values('trade_date')\n", + "\n", + " # 计算每个ts_code的相关指标\n", + " df_indicators = []\n", + " for ts_code in df['ts_code'].unique():\n", + " df_index = df[df['ts_code'] == ts_code].copy()\n", + " df_index = calculate_indicators(df_index)\n", + " df_indicators.append(df_index)\n", + "\n", + " # 合并所有指数的结果\n", + " df_all_indicators = pd.concat(df_indicators, ignore_index=True)\n", + "\n", + " # 保留trade_date列,并将同一天的数据按ts_code合并成一行\n", + " df_final = df_all_indicators.pivot_table(\n", + " index='trade_date',\n", + " columns='ts_code',\n", + " values=['daily_return', 'RSI', 'MACD', 'Signal_line',\n", + " 'MACD_hist', 'up_ratio_20d', 'volume_change_rate', 'volatility',\n", + " 'amount_change_rate', 'amount_mean'],\n", + " aggfunc='last'\n", + " )\n", + "\n", + " df_final.columns = [f\"{col[1]}_{col[0]}\" for col in df_final.columns]\n", + " df_final = df_final.reset_index()\n", + "\n", + " return df_final\n", + "\n", + "\n", + "# 使用函数\n", + "h5_filename = '../../data/index_data.h5'\n", + "index_data = generate_index_indicators(h5_filename)\n", + "index_data = index_data.dropna()\n" + ], + "outputs": [], + "execution_count": 69 + }, + { + "cell_type": "code", + "id": "a735bc02ceb4d872", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:11:56.026392Z", + "start_time": "2025-03-26T15:11:55.984754Z" + } + }, + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "\n", + "def get_rolling_factor(df):\n", + " old_columns = df.columns.tolist()[:]\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " # df[\"gap_next_open\"] = (df[\"open\"].shift(-1) - df[\"close\"]) / df[\"close\"]\n", + "\n", + " df['return_skew'] = grouped['pct_chg'].rolling(window=5).skew().reset_index(0, drop=True)\n", + " df['return_kurtosis'] = grouped['pct_chg'].rolling(window=5).kurt().reset_index(0, drop=True)\n", + "\n", + " # 因子 1:短期成交量变化率\n", + " df['volume_change_rate'] = (\n", + " grouped['vol'].rolling(window=2).mean() /\n", + " grouped['vol'].rolling(window=10).mean() - 1\n", + " ).reset_index(level=0, drop=True) # 确保索引对齐\n", + "\n", + " # 因子 2:成交量突破信号\n", + " max_volume = grouped['vol'].rolling(window=5).max().reset_index(level=0, drop=True) # 确保索引对齐\n", + " df['cat_volume_breakout'] = (df['vol'] > max_volume)\n", + "\n", + " # 因子 3:换手率均线偏离度\n", + " mean_turnover = grouped['turnover_rate'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + " std_turnover = grouped['turnover_rate'].rolling(window=3).std().reset_index(level=0, drop=True)\n", + " df['turnover_deviation'] = (df['turnover_rate'] - mean_turnover) / std_turnover\n", + "\n", + " # 因子 4:换手率激增信号\n", + " df['cat_turnover_spike'] = (df['turnover_rate'] > mean_turnover + 2 * std_turnover)\n", + "\n", + " # 因子 5:量比均值\n", + " df['avg_volume_ratio'] = grouped['volume_ratio'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + "\n", + " # 因子 6:量比突破信号\n", + " max_volume_ratio = grouped['volume_ratio'].rolling(window=5).max().reset_index(level=0, drop=True)\n", + " df['cat_volume_ratio_breakout'] = (df['volume_ratio'] > max_volume_ratio)\n", + "\n", + " df['vol_spike'] = grouped.apply(\n", + " lambda x: pd.Series(x['vol'].rolling(20).mean(), index=x.index)\n", + " )\n", + " df['vol_std_5'] = df['vol'].pct_change().rolling(5).std()\n", + "\n", + " # 计算 ATR\n", + " df['atr_14'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14),\n", + " index=x.index)\n", + " )\n", + " df['atr_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6),\n", + " index=x.index)\n", + " )\n", + "\n", + " # 计算 OBV 及其均线\n", + " df['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " df['maobv_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n", + " )\n", + "\n", + " df['rsi_3'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n", + " )\n", + " df['rsi_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['rsi_9'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n", + " )\n", + "\n", + " # 计算 return_10 和 return_20\n", + " df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n", + " df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n", + "\n", + " # 计算标准差指标\n", + " df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n", + " df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n", + " df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n", + " df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n", + " df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n", + "\n", + " # 计算 EMA 指标\n", + " df['_ema_5'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n", + " )\n", + " df['_ema_13'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n", + " )\n", + " df['_ema_20'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n", + " )\n", + " df['_ema_60'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n", + " )\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = grouped['_ema_5'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n", + " )\n", + " df['act_factor2'] = grouped['_ema_13'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n", + " )\n", + " df['act_factor3'] = grouped['_ema_20'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n", + " )\n", + " df['act_factor4'] = grouped['_ema_60'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n", + " )\n", + "\n", + " # 根据 trade_date 截面计算排名\n", + " df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True)\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + "\n", + " def rolling_covariance(x, y, window):\n", + " return x.rolling(window).cov(y)\n", + "\n", + " def delta(series, period):\n", + " return series.diff(period)\n", + "\n", + " def rank(series):\n", + " return series.rank(pct=True)\n", + "\n", + " def stddev(series, window):\n", + " return series.rolling(window).std()\n", + "\n", + " window_high_volume = 5\n", + " window_close_stddev = 20\n", + " period_delta = 5\n", + " df['cov'] = rolling_covariance(df['high'], df['vol'], window_high_volume)\n", + " df['delta_cov'] = delta(df['cov'], period_delta)\n", + " df['_rank_stddev'] = rank(stddev(df['close'], window_close_stddev))\n", + " df['alpha_22_improved'] = -1 * df['delta_cov'] * df['_rank_stddev']\n", + "\n", + " df['alpha_003'] = np.where(df['high'] != df['low'],\n", + " (df['close'] - df['open']) / (df['high'] - df['low']),\n", + " 0)\n", + "\n", + " df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n", + " df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n", + "\n", + " df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n", + " df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n", + "\n", + " df['cat_up_limit'] = (df['close'] == df['up_limit']) # 是否涨停(1表示涨停,0表示未涨停)\n", + " df['cat_down_limit'] = (df['close'] == df['down_limit']) # 是否跌停(1表示跌停,0表示未跌停)\n", + " df['up_limit_count_10d'] = grouped['cat_up_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + " df['down_limit_count_10d'] = grouped['cat_down_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + "\n", + " # 3. 最近连续涨跌停天数\n", + " def calculate_consecutive_limits(series):\n", + " \"\"\"\n", + " 计算连续涨停/跌停天数。\n", + " \"\"\"\n", + " consecutive_up = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " consecutive_down = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " return consecutive_up, consecutive_down\n", + "\n", + " # 连续涨停天数\n", + " df['consecutive_up_limit'] = grouped['cat_up_limit'].apply(\n", + " lambda x: calculate_consecutive_limits(x)[0]\n", + " ).reset_index(level=0, drop=True)\n", + "\n", + " df['vol_break'] = np.where((df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2), 1, 0)\n", + "\n", + " df['weight_roc5'] = grouped['weight_avg'].apply(lambda x: x.pct_change(5))\n", + "\n", + " def rolling_corr(group):\n", + " roc_close = group['close'].pct_change()\n", + " roc_weight = group['weight_avg'].pct_change()\n", + " return roc_close.rolling(10).corr(roc_weight)\n", + "\n", + " df['price_cost_divergence'] = grouped.apply(rolling_corr)\n", + "\n", + " df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct'])\n", + "\n", + " # 16. 筹码稳定性指数 (20日波动率)\n", + " df['weight_std20'] = grouped['weight_avg'].apply(lambda x: x.rolling(20).std())\n", + " df['cost_stability'] = df['weight_std20'] / grouped['weight_avg'].transform(lambda x: x.rolling(20).mean())\n", + "\n", + " # 17. 成本区间突破标记\n", + " df['high_cost_break_days'] = grouped.apply(lambda g: g['close'].gt(g['cost_95pct']).rolling(5).sum())\n", + "\n", + " # 20. 筹码-流动性风险\n", + " df['liquidity_risk'] = (df['cost_95pct'] - df['cost_5pct']) * (\n", + " 1 / grouped['vol'].transform(lambda x: x.rolling(10).mean()))\n", + "\n", + " # 7. 市值波动率因子\n", + " df['turnover_std'] = grouped['turnover_rate'].rolling(window=20).std().reset_index(level=0, drop=True)\n", + " df['mv_volatility'] = grouped.apply(lambda x: x['turnover_std'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " # 8. 市值成长性因子\n", + " df['volume_growth'] = grouped['vol'].pct_change(periods=20).reset_index(level=0, drop=True)\n", + " df['mv_growth'] = grouped.apply(lambda x: x['volume_growth'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " df.drop(columns=['weight_std20'], inplace=True, errors='ignore')\n", + " new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns]\n", + "\n", + " return df, new_columns\n", + "\n", + "\n", + "def get_simple_factor(df):\n", + " old_columns = df.columns.tolist()[:]\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " alpha = 0.5\n", + " df['momentum_factor'] = df['volume_change_rate'] + alpha * df['turnover_deviation']\n", + " df['resonance_factor'] = df['volume_ratio'] * df['pct_chg']\n", + " df['log_close'] = np.log(df['close'])\n", + "\n", + " df['cat_vol_spike'] = df['vol'] > 2 * df['vol_spike']\n", + "\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n", + "\n", + " # 计算比值指标\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算标准差差值\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + "\n", + " df['cat_af1'] = df['act_factor1'] > 0\n", + " df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n", + " df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n", + " df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(\n", + " df['act_factor1'] ** 2 + df['act_factor2'] ** 2)\n", + "\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + "\n", + " df['ctrl_strength'] = (df['cost_85pct'] - df['cost_15pct']) / (df['his_high'] - df['his_low'])\n", + "\n", + " df['low_cost_dev'] = (df['close'] - df['cost_5pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['asymmetry'] = (df['cost_95pct'] - df['cost_50pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['lock_factor'] = df['turnover_rate'] * (\n", + " 1 - (df['cost_95pct'] - df['cost_5pct']) / (df['his_high'] - df['his_low']))\n", + "\n", + " df['cat_vol_break'] = (df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2)\n", + "\n", + " df['cost_atr_adj'] = (df['cost_95pct'] - df['cost_5pct']) / df['atr_14']\n", + "\n", + " # 12. 小盘股筹码集中度\n", + " df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct'])\n", + "\n", + " df['cat_golden_resonance'] = ((df['close'] > df['weight_avg']) &\n", + " (df['volume_ratio'] > 1.5) &\n", + " (df['winner_rate'] > 0.7))\n", + "\n", + " df['mv_turnover_ratio'] = df['turnover_rate'] / df['circ_mv']\n", + "\n", + " df['mv_adjusted_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " df['mv_weighted_turnover'] = df['turnover_rate'] * (1 / df['circ_mv'])\n", + "\n", + " df['nonlinear_mv_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " df['mv_volume_ratio'] = df['volume_ratio'] / df['circ_mv']\n", + "\n", + " df['mv_momentum'] = df['turnover_rate'] * df['volume_ratio'] / df['circ_mv']\n", + "\n", + " drop_columns = [col for col in df.columns if col.startswith('_')]\n", + " df.drop(columns=drop_columns, inplace=True, errors='ignore')\n", + "\n", + " new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns]\n", + " return df, new_columns\n" + ], + "outputs": [], + "execution_count": 70 + }, + { + "cell_type": "code", + "id": "53f86ddc0677a6d7", + "metadata": { + "scrolled": true, + "ExecuteTime": { + "end_time": "2025-03-26T15:12:02.787850Z", + "start_time": "2025-03-26T15:11:56.035514Z" + } + }, + "source": [ + "from utils.factor import get_act_factor\n", + "\n", + "\n", + "def read_industry_data(h5_filename):\n", + " # 读取 H5 文件中所有的行业数据\n", + " industry_data = pd.read_hdf(h5_filename, key='sw_daily', columns=[\n", + " 'ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'pe', 'pb', 'vol'\n", + " ]) # 假设 H5 文件的键是 'industry_data'\n", + " industry_data = industry_data.sort_values(by=['ts_code', 'trade_date'])\n", + " industry_data = industry_data.reindex()\n", + " industry_data['trade_date'] = pd.to_datetime(industry_data['trade_date'], format='%Y%m%d')\n", + "\n", + " grouped = industry_data.groupby('ts_code', group_keys=False)\n", + " industry_data['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " industry_data['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " industry_data['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " industry_data = get_act_factor(industry_data, cat=False)\n", + " industry_data = industry_data.sort_values(by=['trade_date', 'ts_code'])\n", + "\n", + " # # 计算每天每个 ts_code 的因子和当天所有 ts_code 的中位数的偏差\n", + " # factor_columns = ['obv', 'return_5', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4'] # 因子列\n", + " #\n", + " # for factor in factor_columns:\n", + " # if factor in industry_data.columns:\n", + " # # 计算每天每个 ts_code 的因子值与当天所有 ts_code 的中位数的偏差\n", + " # industry_data[f'{factor}_deviation'] = industry_data.groupby('trade_date')[factor].transform(\n", + " # lambda x: x - x.mean())\n", + "\n", + " industry_data['return_5_percentile'] = industry_data.groupby('trade_date')['return_5'].transform(\n", + " lambda x: x.rank(pct=True))\n", + " industry_data['return_20_percentile'] = industry_data.groupby('trade_date')['return_20'].transform(\n", + " lambda x: x.rank(pct=True))\n", + " industry_data = industry_data.drop(columns=['open', 'close', 'high', 'low', 'pe', 'pb', 'vol'])\n", + "\n", + " industry_data = industry_data.rename(\n", + " columns={col: f'industry_{col}' for col in industry_data.columns if col not in ['ts_code', 'trade_date']})\n", + "\n", + " industry_data = industry_data.rename(columns={'ts_code': 'cat_l2_code'})\n", + " return industry_data\n", + "\n", + "\n", + "industry_df = read_industry_data('../../data/sw_daily.h5')\n" + ], + "outputs": [], + "execution_count": 71 + }, + { + "cell_type": "code", + "id": "dbe2fd8021b9417f", + "metadata": { + "scrolled": true, + "ExecuteTime": { + "end_time": "2025-03-26T15:12:02.870181Z", + "start_time": "2025-03-26T15:12:02.865559Z" + } + }, + "source": [ + "origin_columns = df.columns.tolist()\n", + "origin_columns = [col for col in origin_columns if\n", + " col not in ['turnover_rate', 'pe_ttm', 'volume_ratio', 'vol', 'pct_chg', 'l2_code', 'winner_rate']]\n", + "origin_columns = [col for col in origin_columns if col not in index_data.columns]\n", + "origin_columns = [col for col in origin_columns if 'cyq' not in col]\n", + "print(origin_columns)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['ts_code', 'open', 'close', 'high', 'low', 'circ_mv', 'is_st', 'up_limit', 'down_limit', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol', 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol', 'his_low', 'his_high', 'cost_5pct', 'cost_15pct', 'cost_50pct', 'cost_85pct', 'cost_95pct', 'weight_avg', 'in_date']\n" + ] + } + ], + "execution_count": 72 + }, + { + "cell_type": "code", + "id": "92d84ce15a562ec6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:14:41.756942Z", + "start_time": "2025-03-26T15:12:03.028028Z" + } + }, + "source": [ + "def filter_data(df):\n", + " # df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor1'))\n", + " df = df[~df['is_st']]\n", + " df = df[~df['ts_code'].str.endswith('BJ')]\n", + " df = df[~df['ts_code'].str.startswith('30')]\n", + " df = df[~df['ts_code'].str.startswith('68')]\n", + " df = df[~df['ts_code'].str.startswith('8')]\n", + " df = df[df['trade_date'] >= '20180101']\n", + " df = df.reset_index(drop=True)\n", + " return df\n", + "\n", + "\n", + "df = filter_data(df)\n", + "# df = get_technical_factor(df)\n", + "# df = get_act_factor(df)\n", + "# df = get_money_flow_factor(df)\n", + "# df = get_alpha_factor(df)\n", + "# df = get_limit_factor(df)\n", + "# df = get_cyp_perf_factor(df)\n", + "# df = get_mv_factors(df)\n", + "df, _ = get_rolling_factor(df)\n", + "df, _ = get_simple_factor(df)\n", + "# df = df.merge(industry_df, on=['l2_code', 'trade_date'], how='left')\n", + "df = df.rename(columns={'l2_code': 'cat_l2_code'})\n", + "# df = df.merge(index_data, on='trade_date', how='left')\n", + "\n", + "print(df.info())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Index: 5102787 entries, 0 to 5102786\n", + "Columns: 122 entries, ts_code to mv_momentum\n", + "dtypes: bool(13), datetime64[ns](2), float64(103), int32(1), int64(1), object(2)\n", + "memory usage: 4.2+ GB\n", + "None\n" + ] + } + ], + "execution_count": 73 + }, + { + "cell_type": "code", + "id": "f4f16d63ad18d1bc", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:14:42.493112Z", + "start_time": "2025-03-26T15:14:42.475598Z" + } + }, + "source": [ + "from scipy.stats import ks_2samp, wasserstein_distance\n", + "from sklearn.metrics import roc_auc_score\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "\n", + "def remove_shifted_features(train_data, test_data, feature_columns, ks_threshold=0.1, wasserstein_threshold=0.15,\n", + " importance_threshold=0.05):\n", + " dropped_features = []\n", + "\n", + " # **统计数据漂移**\n", + " numeric_columns = train_data.select_dtypes(include=['float64', 'int64']).columns\n", + " numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + " for feature in numeric_columns:\n", + " ks_stat, p_value = ks_2samp(train_data[feature], test_data[feature])\n", + " wasserstein_dist = wasserstein_distance(train_data[feature], test_data[feature])\n", + "\n", + " if p_value < ks_threshold or wasserstein_dist > wasserstein_threshold:\n", + " dropped_features.append(feature)\n", + "\n", + " print(f\"检测到 {len(dropped_features)} 个可能漂移的特征: {dropped_features}\")\n", + "\n", + " # **应用阈值进行最终筛选**\n", + " filtered_features = [f for f in feature_columns if f not in dropped_features]\n", + "\n", + " return filtered_features, dropped_features\n", + "\n" + ], + "outputs": [], + "execution_count": 74 + }, + { + "cell_type": "code", + "id": "9d807cb2cde5d92c", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:14:42.825272Z", + "start_time": "2025-03-26T15:14:42.814210Z" + } + }, + "source": [ + "def create_deviation_within_dates(df, feature_columns):\n", + " groupby_col = 'cat_l2_code' # 使用 trade_date 进行分组\n", + " new_columns = {}\n", + " ret_feature_columns = feature_columns[:]\n", + "\n", + " # 自动选择所有数值型特征\n", + " num_features = [col for col in feature_columns if 'cat' not in col and 'index' not in col]\n", + "\n", + " # num_features = ['vol', 'pct_chg', 'turnover_rate', 'volume_ratio', 'cat_vol_spike', 'obv', 'maobv_6', 'return_5', 'return_10', 'return_20', 'std_return_5', 'std_return_15', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'alpha_022', 'alpha_003', 'alpha_007', 'alpha_013']\n", + " num_features = [col for col in num_features if 'cat' not in col and 'industry' not in col]\n", + " num_features = [col for col in num_features if 'limit' not in col]\n", + " num_features = [col for col in num_features if 'cyq' not in col]\n", + "\n", + " # 遍历所有数值型特征\n", + " for feature in num_features:\n", + " if feature == 'trade_date': # 不需要对 'trade_date' 计算偏差\n", + " continue\n", + "\n", + " # grouped_mean = df.groupby(['trade_date'])[feature].transform('mean')\n", + " # deviation_col_name = f'deviation_mean_{feature}'\n", + " # new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " # ret_feature_columns.append(deviation_col_name)\n", + "\n", + " grouped_mean = df.groupby(['trade_date', groupby_col])[feature].transform('mean')\n", + " deviation_col_name = f'deviation_mean_{feature}'\n", + " new_columns[deviation_col_name] = df[feature] - grouped_mean\n", + " ret_feature_columns.append(deviation_col_name)\n", + "\n", + " # 将新计算的偏差特征与原始 DataFrame 合并\n", + " df = pd.concat([df, pd.DataFrame(new_columns)], axis=1)\n", + "\n", + " # for feature in ['obv', 'return_20', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4']:\n", + " # df[f'deviation_industry_{feature}'] = df[feature] - df[f'industry_{feature}']\n", + "\n", + " return df, ret_feature_columns\n" + ], + "outputs": [], + "execution_count": 75 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:14:44.049228Z", + "start_time": "2025-03-26T15:14:43.001080Z" + } + }, + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "\n", + "\n", + "def remove_outliers_label_percentile(label: pd.Series, lower_percentile: float = 0.01, upper_percentile: float = 0.99,\n", + " log=True):\n", + " if not (0 <= lower_percentile < upper_percentile <= 1):\n", + " raise ValueError(\"Percentile values must satisfy 0 <= lower_percentile < upper_percentile <= 1.\")\n", + "\n", + " # Calculate lower and upper bounds based on percentiles\n", + " lower_bound = label.quantile(lower_percentile)\n", + " upper_bound = label.quantile(upper_percentile)\n", + "\n", + " # Filter out values outside the bounds\n", + " filtered_label = label[(label >= lower_bound) & (label <= upper_bound)]\n", + "\n", + " # Print the number of removed outliers\n", + " if log:\n", + " print(f\"Removed {len(label) - len(filtered_label)} outliers.\")\n", + " return filtered_label\n", + "\n", + "\n", + "def calculate_risk_adjusted_target(df, days=5):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " df['future_close'] = df.groupby('ts_code')['close'].shift(-days)\n", + " df['future_open'] = df.groupby('ts_code')['open'].shift(-1)\n", + " df['future_return'] = (df['future_close'] - df['future_open']) / df['future_open']\n", + "\n", + " df['future_volatility'] = df.groupby('ts_code')['future_return'].rolling(days, min_periods=1).std().reset_index(\n", + " level=0, drop=True)\n", + " sharpe_ratio = df['future_return'] * df['future_volatility']\n", + " sharpe_ratio.replace([np.inf, -np.inf], np.nan, inplace=True)\n", + "\n", + " return sharpe_ratio\n", + "\n", + "\n", + "def calculate_score(df, days=5, lambda_param=1.0):\n", + " def calculate_max_drawdown(prices):\n", + " peak = prices.iloc[0] # 初始化峰值\n", + " max_drawdown = 0 # 初始化最大回撤\n", + "\n", + " for price in prices:\n", + " if price > peak:\n", + " peak = price # 更新峰值\n", + " else:\n", + " drawdown = (peak - price) / peak # 计算当前回撤\n", + " max_drawdown = max(max_drawdown, drawdown) # 更新最大回撤\n", + "\n", + " return max_drawdown\n", + "\n", + " def compute_stock_score(stock_df):\n", + " stock_df = stock_df.sort_values(by=['trade_date'])\n", + " future_return = stock_df['future_return']\n", + " volatility = stock_df['close'].pct_change().rolling(days).std().shift(-days)\n", + " max_drawdown = stock_df['close'].rolling(days).apply(calculate_max_drawdown, raw=False).shift(-days)\n", + " score = future_return - lambda_param * max_drawdown\n", + "\n", + " return score\n", + "\n", + " scores = df.groupby('ts_code').apply(lambda x: compute_stock_score(x))\n", + " scores = scores.reset_index(level=0, drop=True)\n", + "\n", + " return scores\n", + "\n", + "\n", + "def remove_highly_correlated_features(df, feature_columns, threshold=0.9):\n", + " numeric_features = df[feature_columns].select_dtypes(include=[np.number]).columns.tolist()\n", + " if not numeric_features:\n", + " raise ValueError(\"No numeric features found in the provided data.\")\n", + "\n", + " corr_matrix = df[numeric_features].corr().abs()\n", + " upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))\n", + " to_drop = [column for column in upper.columns if any(upper[column] > threshold)]\n", + " remaining_features = [col for col in feature_columns if col not in to_drop\n", + " or 'act' in col or 'af' in col]\n", + " return remaining_features\n", + "\n", + "\n", + "import pandas as pd\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "\n", + "def cross_sectional_standardization(df, features):\n", + " df_sorted = df.sort_values(by='trade_date') # 按时间排序\n", + " df_standardized = df_sorted.copy()\n", + "\n", + " for date in df_sorted['trade_date'].unique():\n", + " # 获取当前时间点的数据\n", + " current_data = df_standardized[df_standardized['trade_date'] == date]\n", + "\n", + " # 只对指定特征进行标准化\n", + " scaler = StandardScaler()\n", + " standardized_values = scaler.fit_transform(current_data[features])\n", + "\n", + " # 将标准化结果重新赋值回去\n", + " df_standardized.loc[df_standardized['trade_date'] == date, features] = standardized_values\n", + "\n", + " return df_standardized\n", + "\n", + "\n", + "import gc\n", + "\n", + "gc.collect()" + ], + "id": "7ba833ee11a2f4cc", + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 76 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:14:44.297918Z", + "start_time": "2025-03-26T15:14:44.058234Z" + } + }, + "cell_type": "code", + "source": "print(df[['ts_code', 'trade_date', 'act_factor1']].head())", + "id": "8491afd6ea37782", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date act_factor1\n", + "0 000001.SZ 2018-01-02 NaN\n", + "2536 000001.SZ 2018-01-03 NaN\n", + "5079 000001.SZ 2018-01-04 NaN\n", + "7623 000001.SZ 2018-01-05 NaN\n", + "10167 000001.SZ 2018-01-08 NaN\n" + ] + } + ], + "execution_count": 77 + }, + { + "cell_type": "code", + "id": "097356cb-1cd8-4947-b870-9414abfdb3d8", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:17:54.377205Z", + "start_time": "2025-03-26T15:14:44.467603Z" + } + }, + "source": [ + "days = 2\n", + "validation_days = 120\n", + "\n", + "import gc\n", + "\n", + "gc.collect()\n", + "\n", + "# df['future_return'] = df.groupby('ts_code', group_keys=False)['close'].apply(lambda x: x.shift(-days) / x - 1)\n", + "df['future_return'] = (df.groupby('ts_code')['close'].shift(-days) - df.groupby('ts_code')['open'].shift(-1)) / \\\n", + " df.groupby('ts_code')['open'].shift(-1)\n", + "df['future_volatility'] = (\n", + " df.groupby('ts_code')['future_return']\n", + " .transform(lambda x: x.rolling(days).std())\n", + ")\n", + "\n", + "df['future_score'] = (\n", + " 0.7 * df['future_return'] +\n", + " 0.3 * df['future_volatility']\n", + ")\n", + "\n", + "filter_index = df['future_return'].between(df['future_return'].quantile(0.01), df['future_return'].quantile(0.99))\n", + "filter_index = df['future_volatility'].between(df['future_volatility'].quantile(0.01),\n", + " df['future_volatility'].quantile(0.99)) | filter_index\n", + "\n", + "# df['label'] = df.groupby('trade_date', group_keys=False)['future_volatility'].transform(\n", + "# lambda x: pd.qcut(x, q=30, labels=False, duplicates='drop')\n", + "# )\n", + "\n", + "df['label'] = df.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + " lambda x: pd.qcut(x, q=50, labels=False, duplicates='drop')\n", + ")\n", + "\n", + "\n", + "# df['1_score'] = df.groupby('ts_code', group_keys=False)['future_score'].shift(days)\n", + "# df['2_score'] = df.groupby('ts_code', group_keys=False)['future_score'].shift(1 + days)\n", + "# df['3_score'] = df.groupby('ts_code', group_keys=False)['future_score'].shift(3 + days - 1)\n", + "\n", + "def symmetric_log_transform(values):\n", + " return np.sign(values) * np.log1p(np.abs(values))\n", + "\n", + "\n", + "train_data = df[filter_index & (df['trade_date'] <= '2023-01-01') & (df['trade_date'] >= '2000-01-01')]\n", + "test_data = df[filter_index & (df['trade_date'] >= '2023-01-01')]\n", + "\n", + "\n", + "def select_pre_zt_stocks_dynamic(stock_df):\n", + " # 排序数据\n", + " stock_df = stock_df.sort_values(by=['trade_date', 'ts_code'])\n", + "\n", + " # avg_vol_3 = stock_df.groupby('ts_code')['vol'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + " # avg_vol_5 = stock_df.groupby('ts_code')['vol'].rolling(window=5).mean().shift(3).reset_index(level=0, drop=True)\n", + "\n", + " # stock_df = stock_df[\n", + " # (stock_df['cat_up_limit'] == 1) |\n", + " # (stock_df['vol'] > vol_spike_multiplier * stock_df['vol_spike'])\n", + " # ]\n", + " # cd1 = stock_df[\"close\"] > stock_df[\"close\"].shift(1)\n", + "\n", + " # cd2 = stock_df[\"close\"] > stock_df[\"close\"].rolling(window=10).mean()\n", + " #\n", + " # cd3 = (avg_vol_3 > avg_vol_5 * 2)\n", + " #\n", + " # cd4 = stock_df['gap_next_open'] < 0\n", + "\n", + " # stock_df = stock_df[(cd2 & cd4) | cd3]\n", + " stock_df = stock_df.groupby('trade_date', group_keys=False).apply(\n", + " lambda x: x.nlargest(1000, 'return_20')\n", + " )\n", + "\n", + " return stock_df\n", + "\n", + "\n", + "# train_data = select_pre_zt_stocks_dynamic(train_data)\n", + "# test_data = select_pre_zt_stocks_dynamic(test_data)\n", + "\n", + "train_data, _ = get_simple_factor(train_data)\n", + "test_data, _ = get_simple_factor(test_data)\n", + "\n", + "# train_data['label'] = train_data.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + "# lambda x: pd.qcut(x, q=50, labels=False, duplicates='drop')\n", + "# )\n", + "# test_data['label'] = test_data.groupby('trade_date', group_keys=False)['future_score'].transform(\n", + "# lambda x: pd.qcut(x, q=50, labels=False, duplicates='drop')\n", + "# )\n", + "\n", + "industry_df = industry_df.sort_values(by=['trade_date'])\n", + "index_data = index_data.sort_values(by=['trade_date'])\n", + "\n", + "train_data = train_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "# train_data = train_data.merge(index_data, on='trade_date', how='left')\n", + "test_data = test_data.merge(industry_df, on=['cat_l2_code', 'trade_date'], how='left')\n", + "# test_data = test_data.merge(index_data, on='trade_date', how='left')\n", + "\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan), test_data.replace([np.inf, -np.inf], np.nan)\n", + "\n", + "# feature_columns_new = feature_columns[:]\n", + "# train_data, _ = create_deviation_within_dates(train_data, feature_columns)\n", + "# test_data, _ = create_deviation_within_dates(test_data, feature_columns)\n", + "\n", + "feature_columns = [col for col in train_data.columns if col in train_data.columns]\n", + "feature_columns = [col for col in feature_columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'label' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if 'gen' not in col]\n", + "feature_columns = [col for col in feature_columns if 'cat_l2_code' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "feature_columns = [col for col in feature_columns if not col.startswith('_')]\n", + "print(f'feature_columns size: {len(feature_columns)}')\n", + "\n", + "feature_columns, _ = remove_shifted_features(train_data[train_data['label'] == train_data['label'].max()],\n", + " test_data[test_data['label'] == test_data['label'].max()],\n", + " feature_columns)\n", + "\n", + "feature_columns = remove_highly_correlated_features(train_data[train_data['label'] == train_data['label'].max()],\n", + " feature_columns)\n", + "keep_columns = [col for col in train_data.columns if\n", + " col in feature_columns or col in ['ts_code', 'trade_date', 'label', 'future_return',\n", + " 'future_score', 'future_volatility']]\n", + "# train_data = train_data[keep_columns]\n", + "print(f'feature_columns: {feature_columns}')\n", + "\n", + "train_data = train_data.dropna(subset=feature_columns)\n", + "train_data = train_data.dropna(subset=['label'])\n", + "train_data = train_data.reset_index(drop=True)\n", + "\n", + "# print(test_data.tail())\n", + "test_data = test_data.dropna(subset=feature_columns)\n", + "# test_data = test_data.dropna(subset=['label'])\n", + "test_data = test_data.reset_index(drop=True)\n", + "\n", + "print(len(train_data))\n", + "print(f\"最小日期: {train_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {train_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "print(len(test_data))\n", + "print(f\"最小日期: {test_data['trade_date'].min().strftime('%Y-%m-%d')}\")\n", + "print(f\"最大日期: {test_data['trade_date'].max().strftime('%Y-%m-%d')}\")\n", + "\n", + "cat_columns = [col for col in feature_columns if col.startswith('cat')]\n", + "for col in cat_columns:\n", + " train_data[col] = train_data[col].astype('category')\n", + " test_data[col] = test_data[col].astype('category')\n", + "\n", + "\n", + "\n", + "# feature_columns_new.remove('cat_l2_code')" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "feature_columns size: 112\n", + "检测到 18 个可能漂移的特征: ['vol', 'pct_chg', 'turnover_rate', 'vol_std_5', 'obv', 'log(circ_mv)', 'cov', 'delta_cov', 'alpha_22_improved', 'alpha_003', 'up_limit_count_10d', 'log_close', 'up', 'down', 'mv_turnover_ratio', 'mv_adjusted_volume', 'mv_weighted_turnover', 'nonlinear_mv_volume']\n", + "feature_columns: ['pe_ttm', 'volume_ratio', 'winner_rate', 'return_skew', 'return_kurtosis', 'volume_change_rate', 'cat_volume_breakout', 'turnover_deviation', 'cat_turnover_spike', 'avg_volume_ratio', 'cat_volume_ratio_breakout', 'vol_spike', 'atr_14', 'maobv_6', 'rsi_3', 'return_5', 'return_10', 'return_20', 'std_return_5', 'std_return_15', 'std_return_90', 'std_return_90_2', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'alpha_007', 'alpha_013', 'cat_up_limit', 'cat_down_limit', 'down_limit_count_10d', 'consecutive_up_limit', 'vol_break', 'weight_roc5', 'smallcap_concentration', 'cost_stability', 'high_cost_break_days', 'liquidity_risk', 'turnover_std', 'mv_volatility', 'volume_growth', 'mv_growth', 'momentum_factor', 'resonance_factor', 'cat_vol_spike', 'obv-maobv_6', 'std_return_5 / std_return_90', 'std_return_5 / std_return_25', 'std_return_90 - std_return_90_2', 'cat_af1', 'cat_af2', 'cat_af3', 'cat_af4', 'act_factor5', 'act_factor6', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'buy_lg_vol_minus_sell_lg_vol', 'buy_elg_vol_minus_sell_elg_vol', 'ctrl_strength', 'low_cost_dev', 'asymmetry', 'lock_factor', 'cat_vol_break', 'cost_atr_adj', 'cat_golden_resonance', 'mv_volume_ratio', 'mv_momentum', 'industry_obv', 'industry_return_5', 'industry_return_20', 'industry__ema_5', 'industry_act_factor1', 'industry_act_factor2', 'industry_act_factor3', 'industry_act_factor4', 'industry_act_factor5', 'industry_act_factor6', 'industry_rank_act_factor1', 'industry_rank_act_factor2', 'industry_rank_act_factor3', 'industry_return_5_percentile', 'industry_return_20_percentile']\n", + "2543987\n", + "最小日期: 2018-06-04\n", + "最大日期: 2022-12-30\n", + "1234512\n", + "最小日期: 2023-01-03\n", + "最大日期: 2025-03-19\n" + ] + } + ], + "execution_count": 78 + }, + { + "cell_type": "code", + "id": "8f134d435f71e9e2", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:17:54.732350Z", + "start_time": "2025-03-26T15:17:54.705934Z" + } + }, + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "import lightgbm as lgb\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.decomposition import PCA\n", + "\n", + "\n", + "def train_light_model(train_data_df, params, feature_columns, callbacks, evals,\n", + " print_feature_importance=True, num_boost_round=100,\n", + " validation_days=180, use_pca=False, split_date=None,\n", + " label_column='label'): # 新增参数:validation_days\n", + " # 确保数据按时间排序\n", + " train_data_df = train_data_df.sort_values(by='trade_date')\n", + "\n", + " numeric_columns = train_data_df.select_dtypes(include=['float64', 'int64']).columns\n", + " numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + " # X_train.loc[:, numeric_columns] = scaler.fit_transform(X_train[numeric_columns])\n", + " # X_val.loc[:, numeric_columns] = scaler.transform(X_val[numeric_columns])\n", + " train_data_df = cross_sectional_standardization(train_data_df, numeric_columns)\n", + "\n", + " # 去除标签为空的样本\n", + " train_data_df = train_data_df.dropna(subset=[label_column])\n", + " print('原始训练集大小: ', len(train_data_df))\n", + "\n", + " # 按时间顺序划分训练集和验证集\n", + " if split_date is None:\n", + " all_dates = train_data_df['trade_date'].unique() # 获取所有唯一的 trade_date\n", + " split_date = all_dates[-validation_days] # 划分点为倒数第 validation_days 天\n", + " train_data_split = train_data_df[train_data_df['trade_date'] < split_date] # 训练集\n", + " val_data_split = train_data_df[train_data_df['trade_date'] >= split_date] # 验证集\n", + "\n", + " # 打印划分结果\n", + " print(f\"划分后的训练集大小: {len(train_data_split)}, 验证集大小: {len(val_data_split)}\")\n", + "\n", + " # 提取特征和标签\n", + " X_train = train_data_split[feature_columns]\n", + " y_train = train_data_split[label_column]\n", + "\n", + " X_val = val_data_split[feature_columns]\n", + " y_val = val_data_split[label_column]\n", + "\n", + " # 标准化数值特征\n", + " scaler = StandardScaler()\n", + "\n", + " # 计算每个 trade_date 内的样本数(LTR 需要 group 信息)\n", + " train_groups = train_data_split.groupby('trade_date').size().tolist()\n", + " val_groups = val_data_split.groupby('trade_date').size().tolist()\n", + "\n", + " # 处理类别特征\n", + " categorical_feature = [col for col in feature_columns if 'cat' in col]\n", + "\n", + " pca = None\n", + " if use_pca:\n", + " pca = PCA(n_components=0.95) # 或指定 n_components=固定值(如 10)\n", + " numeric_features = [col for col in feature_columns if col not in categorical_feature]\n", + " numeric_pca = pca.fit_transform(X_train[numeric_features])\n", + " X_train = pd.concat([pd.DataFrame(numeric_pca, index=X_train.index), X_train[categorical_feature]], axis=1)\n", + "\n", + " numeric_pca = pca.transform(X_val[numeric_features])\n", + " X_val = pd.concat([pd.DataFrame(numeric_pca, index=X_val.index), X_val[categorical_feature]], axis=1)\n", + "\n", + " # 计算权重(基于时间)\n", + " # trade_date = train_data_split['trade_date'] # 交易日期\n", + " # weights = (trade_date - trade_date.min()).dt.days / (trade_date.max() - trade_date.min()).days + 1\n", + " # weights = train_data_split.groupby('trade_date')['std_return_5'].transform(\n", + " # lambda x: x / x.mean()\n", + " # )\n", + " ud = sorted(train_data_split[\"trade_date\"].unique().tolist())\n", + " date_weights = {date: weight * weight for date, weight in zip(ud, np.linspace(1, 10, len(ud)))}\n", + " params['weight'] = train_data_split[\"trade_date\"].map(date_weights).tolist()\n", + "\n", + " print('feature_columns size: ', len(X_train.columns.tolist()))\n", + "\n", + " train_dataset = lgb.Dataset(\n", + " X_train, label=y_train, group=train_groups,\n", + " categorical_feature=categorical_feature\n", + " )\n", + "\n", + " # weights = val_data_split.groupby('trade_date')['std_return_5'].transform(\n", + " # lambda x: x / x.mean()\n", + " # )\n", + " val_dataset = lgb.Dataset(\n", + " X_val, label=y_val, group=val_groups,\n", + " categorical_feature=categorical_feature\n", + " )\n", + "\n", + " # 训练模型\n", + " # 显式创建 LGBMRanker 模型\n", + " model = lgb.train(\n", + " params, train_dataset, num_boost_round=num_boost_round,\n", + " valid_sets=[train_dataset, val_dataset], valid_names=['train', 'valid'],\n", + " callbacks=callbacks\n", + " )\n", + "\n", + " # 打印特征重要性(如果需要)\n", + " if print_feature_importance:\n", + " lgb.plot_metric(evals)\n", + " lgb.plot_importance(model, importance_type='split', max_num_features=20)\n", + " plt.show()\n", + "\n", + " return model, scaler, pca\n" + ], + "outputs": [], + "execution_count": 79 + }, + { + "cell_type": "code", + "id": "beeb098799ecfa6a", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:21:10.639294Z", + "start_time": "2025-03-26T15:17:54.865846Z" + } + }, + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "if 'gen_volatility' in feature_columns:\n", + " feature_columns.remove('gen_volatility')\n", + "\n", + "label_gain = list(range(len(train_data['label'].unique())))\n", + "label_gain = [gain * gain for gain in label_gain]\n", + "light_params = {\n", + " 'label_gain': label_gain,\n", + " 'objective': 'lambdarank',\n", + " 'metric': 'lambdarank',\n", + " 'learning_rate': 0.03,\n", + " 'num_leaves': 1024,\n", + " 'min_data_in_leaf': 512,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " 'feature_fraction': 0.7,\n", + " 'bagging_fraction': 1,\n", + " 'bagging_freq': 5,\n", + " 'lambda_l1': 0.15,\n", + " 'lambda_l2': 0.15,\n", + " # 'boosting': 'dart',\n", + " 'verbosity': -1,\n", + " 'extra_trees': True,\n", + " 'max_position': 5,\n", + " 'ndcg_at': 1,\n", + " 'seed': 7\n", + "}\n", + "evals = {}\n", + "\n", + "gc.collect()\n", + "\n", + "use_pca = False\n", + "feature_contri = [2 if feat.startswith('act_factor') else 1 for feat in feature_columns]\n", + "light_params['feature_contri'] = feature_contri\n", + "print(f'feature_contri: {feature_contri}')\n", + "model, scaler, pca = train_light_model(train_data.copy().dropna(subset=['label']),\n", + " light_params, feature_columns,\n", + " [lgb.log_evaluation(period=100),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=1000, validation_days=validation_days,\n", + " print_feature_importance=True, use_pca=use_pca)\n", + "\n", + "print('train data size: ', len(train_data))" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 2543987\n", + "feature_contri: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "原始训练集大小: 2543987\n", + "划分后的训练集大小: 2262535, 验证集大小: 281452\n", + "feature_columns size: 87\n", + "Training until validation scores don't improve for 50 rounds\n", + "Early stopping, best iteration is:\n", + "[18]\ttrain's ndcg@1: 0.649301\tvalid's ndcg@1: 0.586988\n", + "Evaluated only: ndcg@1\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAewZJREFUeJzt3Xd4lFXax/HvpPdCKr33TigCKqIggqJYURAFFRVh1WV5Xbuiq7gWRFHBVRHXFcWKBUEBKaL03juEllBCOmkzz/vHIYGYQApJJpn8Ptc1V2aeecqZk2TmnnPuc47NsiwLERERERfh5uwCiIiIiJQlBTciIiLiUhTciIiIiEtRcCMiIiIuRcGNiIiIuBQFNyIiIuJSFNyIiIiIS1FwIyIiIi5FwY2IiIi4FAU3IsL06dOx2Wzs37+/3K7x/PPPY7PZqsx5nW3//v3YbDamT59equNtNhvPP/98mZZJpKpQcCNSgXKDCJvNxtKlSws8b1kWdevWxWazcd1115XqGu+9916pPxClZGbMmMGkSZOcXQwR+QsFNyJO4OPjw4wZMwpsX7x4MYcOHcLb27vU5y5NcDNs2DBOnz5N/fr1S31dZ3n66ac5ffq0U65dnsFN/fr1OX36NMOGDSvV8adPn+bpp58u41KJVA0KbkScYMCAAXz11Vfk5OTk2z5jxgxiYmKIjo6ukHKkpaUB4O7ujo+PT5Xq3sktu4eHBz4+Pk4uTdEyMjJwOBzF3t9ms+Hj44O7u3uprufj44OHh0epjhWp6hTciDjBHXfcwcmTJ5k3b17etqysLL7++muGDBlS6DEOh4NJkybRunVrfHx8iIqK4oEHHuDUqVN5+zRo0IAtW7awePHivO6vK664AjjbJbZ48WIeeughIiMjqVOnTr7n/ppzM2fOHHr16kVgYCBBQUF06dKl0Banv1q6dCldunTBx8eHxo0b8/777xfY50I5JX/NF8nNq9m6dStDhgwhNDSUSy+9NN9zfz1+zJgxzJo1izZt2uDt7U3r1q2ZO3dugWstWrSIzp075ytrcfJ4rrjiCmbPns2BAwfy6rpBgwZ557TZbHzxxRc8/fTT1K5dGz8/P5KTk0lISGDcuHG0bduWgIAAgoKC6N+/Pxs2bCiyfoYPH05AQACHDx9m0KBBBAQEEBERwbhx47Db7cWqw927dzN8+HBCQkIIDg5mxIgRpKen5zv29OnTPPzww4SHhxMYGMj111/P4cOHlccjVYbCehEnaNCgAd27d+fzzz+nf//+gAkkkpKSuP3223n77bcLHPPAAw8wffp0RowYwcMPP8y+fft45513WLduHX/88Qeenp5MmjSJv/3tbwQEBPDUU08BEBUVle88Dz30EBERETz77LN5rR+FmT59Ovfccw+tW7fmiSeeICQkhHXr1jF37tzzBmAAmzZt4uqrryYiIoLnn3+enJwcnnvuuQLlKI1bb72Vpk2b8vLLL2NZ1gX3Xbp0Kd9++y0PPfQQgYGBvP3229x8883ExsYSFhYGwLp167jmmmuoWbMm48ePx26388ILLxAREVFkWZ566imSkpI4dOgQb775JgABAQH59nnxxRfx8vJi3LhxZGZm4uXlxdatW5k1axa33norDRs2JD4+nvfff59evXqxdetWatWqdcHr2u12+vXrR7du3Xj99deZP38+b7zxBo0bN2bUqFFFlvu2226jYcOGTJgwgbVr1/Lhhx8SGRnJv//977x9hg8fzpdffsmwYcO45JJLWLx4Mddee22R5xapNCwRqTAff/yxBVirVq2y3nnnHSswMNBKT0+3LMuybr31Vqt3796WZVlW/fr1rWuvvTbvuN9//90CrM8++yzf+ebOnVtge+vWra1evXqd99qXXnqplZOTU+hz+/btsyzLshITE63AwECrW7du1unTp/Pt63A4LvgaBw0aZPn4+FgHDhzI27Z161bL3d3dOvctZ9++fRZgffzxxwXOAVjPPfdc3uPnnnvOAqw77rijwL65z/31eC8vL2v37t152zZs2GAB1uTJk/O2DRw40PLz87MOHz6ct23Xrl2Wh4dHgXMW5tprr7Xq169fYPvChQstwGrUqFHe7zdXRkaGZbfb823bt2+f5e3tbb3wwgv5tv21fu6++24LyLefZVlWx44drZiYmAJ1UFgd3nPPPfn2u/HGG62wsLC8x2vWrLEA69FHH8233/DhwwucU6SyUreUiJPcdtttnD59mp9++omUlBR++umn87aIfPXVVwQHB9O3b19OnDiRd4uJiSEgIICFCxcW+7ojR44sMo9j3rx5pKSk8PjjjxfIZ7lQd43dbueXX35h0KBB1KtXL297y5Yt6devX7HLeD4PPvhgsfft06cPjRs3znvcrl07goKC2Lt3b15Z58+fz6BBg/K1ljRp0iSvNe1i3X333fj6+ubb5u3tjZubW14ZTp48SUBAAM2bN2ft2rXFOu9f6+Gyyy7Le12lOfbkyZMkJycD5HXdPfTQQ/n2+9vf/las84tUBuqWEnGSiIgI+vTpw4wZM0hPT8dut3PLLbcUuu+uXbtISkoiMjKy0OePHTtW7Os2bNiwyH327NkDQJs2bYp9XoDjx49z+vRpmjZtWuC55s2b8/PPP5fofH9VnLLnOje4yhUaGpqXo3Ts2DFOnz5NkyZNCuxX2LbSKKy8DoeDt956i/fee499+/bly5XJ7S67EB8fnwLdZue+rqL8tV5CQ0MBOHXqFEFBQRw4cAA3N7cCZS+rOhGpCApuRJxoyJAhjBw5kri4OPr3709ISEih+zkcDiIjI/nss88Kfb44OSK5/tqS4CznawH6a2LsuUpS9vO1TllF5OqUpcLK+/LLL/PMM89wzz338OKLL1KjRg3c3Nx49NFHizWaqrSjp4o6viLrRaS8KbgRcaIbb7yRBx54gOXLlzNz5szz7te4cWPmz59Pz549i/yAL4vh3LndOZs3by7RN/aIiAh8fX3ZtWtXged27NiR73Fui0FiYmK+7QcOHChhaUsnMjISHx8fdu/eXeC5wrYVpjR1/fXXX9O7d28++uijfNsTExMJDw8v8fnKWv369XE4HOzbty9fC1xx60SkMlDOjYgTBQQEMGXKFJ5//nkGDhx43v1uu+027HY7L774YoHncnJy8gUI/v7+BQKGkrr66qsJDAxkwoQJZGRk5HvuQt/w3d3d6devH7NmzSI2NjZv+7Zt2/jll1/y7RsUFER4eDhLlizJt/299967qLIXl7u7O3369GHWrFkcOXIkb/vu3buZM2dOsc7h7+9PUlJSia/71zr86quvOHz4cInOU15yc6P++nuYPHmyM4ojUipquRFxsrvvvrvIfXr16sUDDzzAhAkTWL9+PVdffTWenp7s2rWLr776irfeeisvXycmJoYpU6bwr3/9iyZNmhAZGcmVV15ZojIFBQXx5ptvct9999GlS5e8uWU2bNhAeno6n3zyyXmPHT9+PHPnzuWyyy7joYceIicnh8mTJ9O6dWs2btyYb9/77ruPV155hfvuu4/OnTuzZMkSdu7cWaKyXoznn3+eX3/9lZ49ezJq1CjsdjvvvPMObdq0Yf369UUeHxMTw8yZMxk7dixdunQhICDggkEqwHXXXccLL7zAiBEj6NGjB5s2beKzzz6jUaNGZfSqLk5MTAw333wzkyZN4uTJk3lDwXN/L1VpokepvhTciFQRU6dOJSYmhvfff58nn3wSDw8PGjRowJ133knPnj3z9nv22Wc5cOAAr776KikpKfTq1avEwQ3AvffeS2RkJK+88govvvginp6etGjRgr///e8XPK5du3b88ssvjB07lmeffZY6deowfvx4jh49WiC4efbZZzl+/Dhff/01X375Jf3792fOnDnnTZwuazExMcyZM4dx48bxzDPPULduXV544QW2bdvG9u3bizz+oYceYv369Xz88ce8+eab1K9fv8jg5sknnyQtLY0ZM2Ywc+ZMOnXqxOzZs3n88cfL6mVdtP/+979ER0fz+eef891339GnTx9mzpxJ8+bNq8Rs0CI2S1lkIiL5DBo0iC1bthSaO1RdrV+/no4dO/K///2PoUOHOrs4IheknBsRqdb+uujmrl27+Pnnn/OWraiOCluIdNKkSbi5uXH55Zc7oUQiJaNuKRGp1ho1asTw4cNp1KgRBw4cYMqUKXh5efHYY485u2hO8+qrr7JmzRp69+6Nh4cHc+bMYc6cOdx///3UrVvX2cUTKZK6pUSkWhsxYgQLFy4kLi4Ob29vunfvzssvv0ynTp2cXTSnmTdvHuPHj2fr1q2kpqZSr149hg0bxlNPPaWVxqVKUHAjIiIiLkU5NyIiIuJSFNyIiIiIS6l2nacOh4MjR44QGBioyahERESqCMuySElJoVatWri5XbhtptoFN0eOHFG2v4iISBV18OBB6tSpc8F9ql1wExgYCMC+ffuoUaOGk0tTOWVnZ/Prr7/mTfEvBamOiqY6KprqqGiqo6JVlzpKTk6mbt26eZ/jF1LtgpvcrqjAwECCgoKcXJrKKTs7Gz8/P4KCglz6H+ViqI6KpjoqmuqoaKqjolW3OipOSokSikVERMSlKLgRERERl6LgRkRERFxKtcu5KS673U52drazi+EU2dnZeHh4kJGRgd1uL9U5PD09cXd3L+OSiYiIFE3BzV9YlkVcXByJiYnOLorTWJZFdHQ0Bw8evKi5gEJCQoiOjtZ8QiIiUqGcHty8++67vPbaa8TFxdG+fXsmT55M165dz7v/pEmTmDJlCrGxsYSHh3PLLbcwYcIE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1wf0nl2AszOaK9IXX3xheXt7W9OnT7e2bt1q3X///VZISIgVFxfn7KI5RUpKirVu3Tpr3bp1FmBNnDjRWrdunXXgwAHLsizrlVdesUJCQqzvv//e2rhxo3XDDTdYDRs2tE6fPu3kkleMUaNGWcHBwdaiRYuso0eP5t3S09Pz9nnwwQetevXqWb/99pu1evVqq3v37lb37t2dWOqK9fjjj1uLFy+29u3bZ23cuNF6/PHHLZvNZv3666+WZal+zufc0VKWpXr6xz/+YS1atMjat2+f9ccff1h9+vSxwsPDrWPHjlmWpfqxLMtauXKl5eHhYb300kvWrl27rM8++8zy8/Oz/ve//+XtU93fs89VrYIby7KsyZMnW/Xq1bO8vLysrl27WsuXL3d2kZxm4cKFFlDgdvfdd1uWZYYWPvPMM1ZUVJTl7e1tXXXVVdaOHTucW+gKVFjdANbHH3+ct8/p06ethx56yAoNDbX8/PysG2+80Tp69KjzCl3B7rnnHqt+/fqWl5eXFRERYV111VV5gY1lqX7O56/BTXWvp8GDB1s1a9a0vLy8rNq1a1uDBw+2du/enfd8da+fXD/++KPVpk0by9vb22rRooX1n//8J9/z1f09+1w2y7Is57QZiYiIiJS9apNzIyIiItWDghsRERFxKQpuRERExKUouBERERGXouBGREREXIqCGxEREXEpCm5ERETEpSi4EZFqoUGDBkyaNMnZxRCRCqDgRkTK3PDhwxk0aBAAV1xxBY8++miFXXv69OmEhIQU2L5q1Sruv//+CiuHiDiPh7MLICJSHFlZWXh5eZX6+IiIiDIsjYhUZmq5EZFyM3z4cBYvXsxbb72FzWbDZrOxf/9+ADZv3kz//v0JCAggKiqKYcOGceLEibxjr7jiCsaMGcOjjz5KeHg4/fr1A2DixIm0bdsWf39/6taty0MPPURqaioAixYtYsSIESQlJeVd7/nnnwcKdkvFxsZyww03EBAQQFBQELfddhvx8fF5zz///PN06NCBTz/9lAYNGhAcHMztt99OSkpK3j5ff/01bdu2xdfXl7CwMPr06UNaWlo51aaIFJeCGxEpN2+99Rbdu3dn5MiRHD16lKNHj1K3bl0SExO58sor6dixI6tXr2bu3LnEx8dz22235Tv+k08+wcvLiz/++IOpU6cC4Obmxttvv82WLVv45JNP+O2333jssccA6NGjB5MmTSIoKCjveuPGjStQLofDwQ033EBCQgKLFy9m3rx57N27l8GDB+fbb8+ePcyaNYuffvqJn376icWLF/PKK68AcPToUe644w7uuecetm3bxqJFi7jpppvQcn0izqduKREpN8HBwXh5eeHn50d0dHTe9nfeeYeOHTvy8ssv522bNm0adevWZefOnTRr1gyApk2b8uqrr+Y757n5Ow0aNOBf//oXDz74IO+99x5eXl4EBwdjs9nyXe+vFixYwKZNm9i3bx9169YF4L///S+tW7dm1apVdOnSBTBB0PTp0wkMDARg2LBhLFiwgJdeeomjR4+Sk5PDTTfdRP369QFo27btRdSWiJQVtdyISIXbsGEDCxcuJCAgIO/WokULwLSW5IqJiSlw7Pz587nqqquoXbs2gYGBDBs2jJMnT5Kenl7s62/bto26devmBTYArVq1IiQkhG3btuVta9CgQV5gA1CzZk2OHTsGQPv27bnqqqto27Ytt956Kx988AGnTp0qfiWISLlRcCMiFS41NZWBAweyfv36fLddu3Zx+eWX5+3n7++f77j9+/dz3XXX0a5dO7755hvWrFnDu+++C5iE47Lm6emZ77HNZsPhcADg7u7OvHnzmDNnDq1atWLy5Mk0b96cffv2lXk5RKRkFNyISLny8vLCbrfn29apUye2bNlCgwYNaNKkSb7bXwOac61ZswaHw8Ebb7zBJZdcQrNmzThy5EiR1/urli1bcvDgQQ4ePJi3bevWrSQmJtKqVativzabzUbPnj0ZP34869atw8vLi++++67Yx4tI+VBwIyLlqkGDBqxYsYL9+/dz4sQJHA4Ho0ePJiEhgTvuuINVq1axZ88efvnlF0aMGHHBwKRJkyZkZ2czefJk9u7dy6effpqXaHzu9VJTU1mwYAEnTpwotLuqT58+tG3blqFDh7J27VpWrlzJXXfdRa9evejcuXOxXteKFSt4+eWXWb16NbGxsXz77bccP36cli1blqyCRKTMKbgRkXI1btw43N3dadWqFREREcTGxlKrVi3++OMP7HY7V199NW3btuXRRx8lJCQEN7fzvy21b9+eiRMn8u9//5s2bdrw2WefMWHChHz79OjRgwcffJDBgwcTERFRICEZTIvL999/T2hoKJdffjl9+vShUaNGzJw5s9ivKygoiCVLljBgwACaNWvG008/zRtvvEH//v2LXzkiUi5slsYtioiIiAtRy42IiIi4FAU3IiIi4lIU3IiIiIhLUXAjIiIiLkXBjYiIiLgUBTciIiLiUhTciIiIiEtRcCMiIiIuRcGNiIiIuBQFNyIiIuJSFNyIiIiIS1FwIyIiIi7l/wGZhpzPsnMuWQAAAABJRU5ErkJggg==" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 2543987\n" + ] + } + ], + "execution_count": 80 + }, + { + "cell_type": "code", + "id": "63235069-dc59-48fb-961a-e80373e41a61", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:21:10.902087Z", + "start_time": "2025-03-26T15:21:10.893389Z" + } + }, + "source": [ + "print('train data size: ', len(train_data))\n", + "\n", + "catboost_params = {\n", + " 'loss_function': 'QuerySoftMax', # 排序损失函数\n", + " 'custom_metric': ['NDCG', 'AverageGain:top=10'],\n", + " 'iterations': 5000, # 训练轮数\n", + " 'learning_rate': 0.05, # 学习率\n", + " 'depth': 10, # 树的深度,防止过拟合\n", + " # 'l2_leaf_reg': 10.0, # L2 正则化,提高泛化能力\n", + " # 'bagging_temperature': 1, # 降低过拟合\n", + " # 'subsample': 0.8, # 每轮随机 80% 样本\n", + " # 'colsample_bylevel': 0.8, # 每层 80% 特征\n", + " 'random_seed': 42, # 固定随机种子\n", + " 'verbose': 100, # 每 100 轮打印一次信息\n", + " 'early_stopping_rounds': 100, # 早停,防止过拟合\n", + " 'has_time': True, # 让模型知道数据有时间顺序\n", + " # 'task_type':\"GPU\",\n", + "}\n", + "\n", + "# model = train_catboost(train_data, test_data, feature_columns_new, catboost_params, plot=True)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 2543987\n" + ] + } + ], + "execution_count": 81 + }, + { + "cell_type": "code", + "id": "5d1522a7538db91b", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:21:10.967045Z", + "start_time": "2025-03-26T15:21:10.950621Z" + } + }, + "source": [ + "from tqdm import tqdm\n", + "\n", + "\n", + "def incremental_training(test_data: pd.DataFrame,\n", + " model,\n", + " scaler,\n", + " days: int,\n", + " back_days: int,\n", + " feature_columns: list,\n", + " params: dict,\n", + " model_type: str = 'lightgbm',\n", + " times=10\n", + " ):\n", + " if model_type not in ['lightgbm', 'catboost']:\n", + " raise ValueError(\"model_type must be either 'lightgbm' or 'catboost'\")\n", + "\n", + " test_data = test_data.sort_values(by='trade_date')\n", + " scores = []\n", + " unique_trade_dates = sorted(test_data['trade_date'].unique())\n", + "\n", + " new_model = None\n", + " current_times = 0\n", + " for i in tqdm(range(0, len(unique_trade_dates))):\n", + " # Get the current window of trade dates\n", + " current_dates = [unique_trade_dates[i]]\n", + " window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + " X = window_data[feature_columns]\n", + "\n", + " if new_model is not None:\n", + " window_scores = new_model.predict(X, prediction_type='RawFormulaVal')\n", + " else:\n", + " window_scores = model.predict(X, prediction_type='RawFormulaVal')\n", + " scores.extend(window_scores)\n", + " current_times += 1\n", + "\n", + " if current_times % times == 0:\n", + " current_dates = unique_trade_dates[max(0, i - days - back_days):i + 1 - back_days]\n", + " window_data = test_data[test_data['trade_date'].isin(current_dates)]\n", + " X_train = window_data[feature_columns]\n", + " y_train = window_data['label'] # Assuming 'label' is what you're predicting\n", + "\n", + " # Incrementally train the model\n", + " if len(y_train.unique()) > 1:\n", + " if model_type == 'lightgbm':\n", + " categorical_feature = [i for i, col in enumerate(feature_columns) if col.startswith('cat')]\n", + " train_groups = window_data.groupby('trade_date').size().tolist()\n", + " train_data = lgb.Dataset(X_train, label=y_train, group=train_groups,\n", + " categorical_feature=categorical_feature)\n", + " new_model = lgb.train(params,\n", + " train_set=train_data,\n", + " num_boost_round=24,\n", + " init_model=model,\n", + " keep_training_booster=True)\n", + " # print(f\"Number of trees: {model.num_trees()}\")\n", + " elif model_type == 'catboost':\n", + " from catboost import Pool\n", + " train_data = Pool(data=X_train, label=y_train,\n", + " cat_features=[col for col in feature_columns if col.startswith('cat')])\n", + " # model.set_params(**params)\n", + " model.fit(train_data, init_model=model)\n", + " # else:\n", + " # print(current_dates)\n", + "\n", + " # Add the scores as a new 'score' column to the test_data\n", + " test_data['score'] = scores\n", + " return test_data" + ], + "outputs": [], + "execution_count": 82 + }, + { + "cell_type": "code", + "id": "bbcc55a58ee063d6", + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-26T15:42:15.991756Z", + "start_time": "2025-03-26T15:36:18.479450Z" + } + }, + "source": [ + "numeric_columns = test_data.select_dtypes(include=['float64', 'int64']).columns\n", + "numeric_columns = [col for col in numeric_columns if col in feature_columns]\n", + "td = cross_sectional_standardization(test_data, numeric_columns)\n", + "predictions_test = incremental_training(td, model, scaler, 180, days, feature_columns, light_params,\n", + " model_type='lightgbm', times=20)\n", + "predictions_test = predictions_test.loc[predictions_test.groupby('trade_date')['score'].idxmax()]\n", + "predictions_test[['trade_date', 'score', 'ts_code']].to_csv('predictions_test.tsv', index=False)" + ], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 533/533 [05:13<00:00, 1.70it/s]\n" + ] + } + ], + "execution_count": 86 + }, + { + "cell_type": "code", + "id": "020c3e3b-388b-42aa-a089-895057230122", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [], + "ExecuteTime": { + "end_time": "2025-03-26T15:34:41.558604Z", + "start_time": "2025-03-26T15:34:40.969894Z" + } + }, + "source": "print(df[['ts_code', 'trade_date', 'act_factor1']].head())\n", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ts_code trade_date act_factor1\n", + "0 000001.SZ 2018-01-02 NaN\n", + "2536 000001.SZ 2018-01-03 NaN\n", + "5079 000001.SZ 2018-01-04 NaN\n", + "7623 000001.SZ 2018-01-05 NaN\n", + "10167 000001.SZ 2018-01-08 NaN\n" + ] + } + ], + "execution_count": 84 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/V1-copy.ipynb b/code/train/V1-copy.ipynb new file mode 100644 index 0000000..e0d0446 --- /dev/null +++ b/code/train/V1-copy.ipynb @@ -0,0 +1,896 @@ +{ + "cells": [ + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:52:54.170824Z", + "start_time": "2025-02-09T14:52:53.544850Z" + } + }, + "cell_type": "code", + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from utils.utils import read_and_merge_h5_data" + ], + "id": "79a7758178bafdd3", + "outputs": [], + "execution_count": 1 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:53:36.873700Z", + "start_time": "2025-02-09T14:52:54.170824Z" + } + }, + "cell_type": "code", + "source": [ + "print('daily data')\n", + "df = read_and_merge_h5_data('../../data/daily_data.h5', key='daily_data',\n", + " columns=['ts_code', 'trade_date', 'open', 'close', 'high', 'low', 'vol'],\n", + " df=None)\n", + "\n", + "print('daily basic')\n", + "df = read_and_merge_h5_data('../../data/daily_basic.h5', key='daily_basic_with_st',\n", + " columns=['ts_code', 'trade_date', 'turnover_rate', 'pe_ttm', 'circ_mv', 'volume_ratio',\n", + " 'is_st'], df=df)\n", + "\n", + "print('stk limit')\n", + "df = read_and_merge_h5_data('../../data/stk_limit.h5', key='stk_limit',\n", + " columns=['ts_code', 'trade_date', 'pre_close', 'up_limit', 'down_limit'],\n", + " df=df)\n", + "print('money flow')\n", + "df = read_and_merge_h5_data('../../data/money_flow.h5', key='money_flow',\n", + " columns=['ts_code', 'trade_date', 'buy_sm_vol', 'sell_sm_vol', 'buy_lg_vol', 'sell_lg_vol',\n", + " 'buy_elg_vol', 'sell_elg_vol', 'net_mf_vol'],\n", + " df=df)" + ], + "id": "a79cafb06a7e0e43", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "daily data\n", + "daily basic\n", + "stk limit\n", + "money flow\n" + ] + } + ], + "execution_count": 2 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:53:37.426404Z", + "start_time": "2025-02-09T14:53:36.955552Z" + } + }, + "cell_type": "code", + "source": "origin_columns = df.columns.tolist()", + "id": "c4e9e1d31da6dba6", + "outputs": [], + "execution_count": 3 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:53:38.164112Z", + "start_time": "2025-02-09T14:53:38.070007Z" + } + }, + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import talib\n", + "\n", + "\n", + "def get_technical_factor(df):\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " df['atr_14'] = talib.ATR(df['high'], df['low'], df['close'], timeperiod=14)\n", + " df['atr_6'] = talib.ATR(df['high'], df['low'], df['close'], timeperiod=6)\n", + "\n", + " df['obv'] = talib.OBV(df['close'], df['vol'])\n", + " df['maobv_6'] = talib.SMA(df['obv'], timeperiod=6)\n", + " df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n", + "\n", + " df['rsi_3'] = talib.RSI(df['close'], timeperiod=3)\n", + " df['rsi_6'] = talib.RSI(df['close'], timeperiod=6)\n", + " df['rsi_9'] = talib.RSI(df['close'], timeperiod=9)\n", + "\n", + " df['return_10'] = df['close'] / df['close'].shift(10) - 1\n", + " df['return_20'] = df['close'] / df['close'].shift(20) - 1\n", + "\n", + " # # 计算 _rank_return_10 和 _rank_return_20\n", + " # df['_rank_return_10'] = df['return_10'].rank(pct=True)\n", + " # df['_rank_return_20'] = df['return_20'].rank(pct=True)\n", + "\n", + " # 计算 avg_close_5\n", + " df['avg_close_5'] = df['close'].rolling(window=5).mean() / df['close']\n", + "\n", + " # 计算 std_return_5, std_return_15, std_return_25, std_return_252, std_return_2522\n", + " df['std_return_5'] = df['close'].pct_change().shift(-1).rolling(window=5).std()\n", + " df['std_return_15'] = df['close'].pct_change().shift(-1).rolling(window=15).std()\n", + " df['std_return_25'] = df['close'].pct_change().shift(-1).rolling(window=25).std()\n", + " df['std_return_90'] = df['close'].pct_change().shift(-1).rolling(window=90).std()\n", + " df['std_return_90_2'] = df['close'].shift(10).pct_change().shift(-1).rolling(window=90).std()\n", + "\n", + " # 计算 std_return_5 / std_return_252 和 std_return_5 / std_return_25\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算 std_return_252 - std_return_2522\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + " return df\n", + "\n", + "\n", + "def get_act_factor(df):\n", + " # 计算 m_ta_ema(close, 5), m_ta_ema(close, 13), m_ta_ema(close, 20), m_ta_ema(close, 60)\n", + " df['ema_5'] = talib.EMA(df['close'], timeperiod=5)\n", + " df['ema_13'] = talib.EMA(df['close'], timeperiod=13)\n", + " df['ema_20'] = talib.EMA(df['close'], timeperiod=20)\n", + " df['ema_60'] = talib.EMA(df['close'], timeperiod=60)\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = np.arctan((df['ema_5'] / df['ema_5'].shift(1) - 1) * 100) * 57.3 / 50\n", + " df['act_factor2'] = np.arctan((df['ema_13'] / df['ema_13'].shift(1) - 1) * 100) * 57.3 / 40\n", + " df['act_factor3'] = np.arctan((df['ema_20'] / df['ema_20'].shift(1) - 1) * 100) * 57.3 / 21\n", + " df['act_factor4'] = np.arctan((df['ema_60'] / df['ema_60'].shift(1) - 1) * 100) * 57.3 / 10\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(\n", + " df['act_factor1'] ** 2 + df['act_factor2'] ** 2)\n", + "\n", + " # 根据 'trade_date' 进行分组,在每个组内分别计算 'act_factor1', 'act_factor2', 'act_factor3' 的排名\n", + " df['rank_act_factor1'] = df.groupby('trade_date')['act_factor1'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor2'] = df.groupby('trade_date')['act_factor2'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor3'] = df.groupby('trade_date')['act_factor3'].rank(ascending=False, pct=True)\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_money_flow_factor(df):\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol - sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol - sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " # # 你还提到了一些其他字段:\n", + " # df['net_active_buy_volume_main'] = df['net_mf_vol'] / df['buy_sm_vol']\n", + " # df['netflow_amount_main'] = df['net_mf_vol'] / df['buy_sm_vol'] # 这里假设 'net_mf_vol' 是主流资金流\n", + "\n", + " # df['active_sell_volume_large'] = df['sell_lg_vol'] / df['sell_sm_vol']\n", + " # df['active_sell_volume_big'] = df['sell_elg_vol'] / df['sell_sm_vol']\n", + " # df['active_sell_volume_small'] = df['sell_sm_vol'] / df['sell_sm_vol']\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_alpha_factor(df):\n", + " df['alpha_022'] = df['close'] - df['close'].shift(5)\n", + "\n", + " # alpha_003: (close - open) / (high - low)\n", + " df['alpha_003'] = (df['close'] - df['open']) / (df['high'] - df['low'])\n", + "\n", + " # alpha_007: rank(correlation(close, volume, 5))\n", + " df['alpha_007'] = df['close'].rolling(5).corr(df['vol']).rank(axis=1)\n", + "\n", + " # alpha_013: rank(sum(close, 5) - sum(close, 20))\n", + " df['alpha_013'] = (df['close'].rolling(5).sum() - df['close'].rolling(20).sum()).rank(axis=1)\n", + " return df\n", + "\n", + "\n", + "def get_future_data(df):\n", + " df['future_return1'] = (df['close'].shift(-1) - df['close']) / df['close']\n", + " df['future_return2'] = (df['open'].shift(-2) - df['open'].shift(-1)) / df['open'].shift(-1)\n", + " df['future_return3'] = (df['close'].shift(-2) - df['close'].shift(-1)) / df['close'].shift(-1)\n", + " df['future_return4'] = (df['close'].shift(-2) - df['open'].shift(-1)) / df['open'].shift(-1)\n", + " df['future_return5'] = (df['close'].shift(-5) - df['open'].shift(-1)) / df['open'].shift(-1)\n", + " df['future_return6'] = (df['close'].shift(-10) - df['open'].shift(-1)) / df['open'].shift(-1)\n", + " df['future_return7'] = (df['close'].shift(-20) - df['open'].shift(-1)) / df['open'].shift(-1)\n", + " df['future_close1'] = (df['close'].shift(-1) - df['close']) / df['close']\n", + " df['future_close2'] = (df['close'].shift(-2) - df['close']) / df['close']\n", + " df['future_close3'] = (df['close'].shift(-3) - df['close']) / df['close']\n", + " df['future_close4'] = (df['close'].shift(-4) - df['close']) / df['close']\n", + " df['future_close5'] = (df['close'].shift(-5) - df['close']) / df['close']\n", + " df['future_af11'] = df['act_factor1'].shift(-1)\n", + " df['future_af12'] = df['act_factor1'].shift(-2)\n", + " df['future_af13'] = df['act_factor1'].shift(-3)\n", + " df['future_af14'] = df['act_factor1'].shift(-4)\n", + " df['future_af15'] = df['act_factor1'].shift(-5)\n", + " df['future_af21'] = df['act_factor2'].shift(-1)\n", + " df['future_af22'] = df['act_factor2'].shift(-2)\n", + " df['future_af23'] = df['act_factor2'].shift(-3)\n", + " df['future_af24'] = df['act_factor2'].shift(-4)\n", + " df['future_af25'] = df['act_factor2'].shift(-5)\n", + " df['future_af31'] = df['act_factor3'].shift(-1)\n", + " df['future_af32'] = df['act_factor3'].shift(-2)\n", + " df['future_af33'] = df['act_factor3'].shift(-3)\n", + " df['future_af34'] = df['act_factor3'].shift(-4)\n", + " df['future_af35'] = df['act_factor3'].shift(-5)\n", + "\n", + " return df\n" + ], + "id": "a735bc02ceb4d872", + "outputs": [], + "execution_count": 4 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:53:49.153376Z", + "start_time": "2025-02-09T14:53:38.164112Z" + } + }, + "cell_type": "code", + "source": [ + "df = get_technical_factor(df)\n", + "df = get_act_factor(df)\n", + "df = get_money_flow_factor(df)\n", + "df = get_future_data(df)\n", + "# df = df.drop(columns=origin_columns)\n", + "\n", + "print(df.info())" + ], + "id": "53f86ddc0677a6d7", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 8364308 entries, 0 to 8364307\n", + "Data columns (total 83 columns):\n", + " # Column Dtype \n", + "--- ------ ----- \n", + " 0 ts_code object \n", + " 1 trade_date datetime64[ns]\n", + " 2 open float64 \n", + " 3 close float64 \n", + " 4 high float64 \n", + " 5 low float64 \n", + " 6 vol float64 \n", + " 7 is_st object \n", + " 8 up_limit float64 \n", + " 9 down_limit float64 \n", + " 10 buy_sm_vol float64 \n", + " 11 sell_sm_vol float64 \n", + " 12 buy_lg_vol float64 \n", + " 13 sell_lg_vol float64 \n", + " 14 buy_elg_vol float64 \n", + " 15 sell_elg_vol float64 \n", + " 16 net_mf_vol float64 \n", + " 17 up float64 \n", + " 18 down float64 \n", + " 19 atr_14 float64 \n", + " 20 atr_6 float64 \n", + " 21 obv float64 \n", + " 22 maobv_6 float64 \n", + " 23 obv-maobv_6 float64 \n", + " 24 rsi_3 float64 \n", + " 25 rsi_6 float64 \n", + " 26 rsi_9 float64 \n", + " 27 return_10 float64 \n", + " 28 return_20 float64 \n", + " 29 avg_close_5 float64 \n", + " 30 std_return_5 float64 \n", + " 31 std_return_15 float64 \n", + " 32 std_return_25 float64 \n", + " 33 std_return_90 float64 \n", + " 34 std_return_90_2 float64 \n", + " 35 std_return_5 / std_return_90 float64 \n", + " 36 std_return_5 / std_return_25 float64 \n", + " 37 std_return_90 - std_return_90_2 float64 \n", + " 38 ema_5 float64 \n", + " 39 ema_13 float64 \n", + " 40 ema_20 float64 \n", + " 41 ema_60 float64 \n", + " 42 act_factor1 float64 \n", + " 43 act_factor2 float64 \n", + " 44 act_factor3 float64 \n", + " 45 act_factor4 float64 \n", + " 46 act_factor5 float64 \n", + " 47 act_factor6 float64 \n", + " 48 rank_act_factor1 float64 \n", + " 49 rank_act_factor2 float64 \n", + " 50 rank_act_factor3 float64 \n", + " 51 active_buy_volume_large float64 \n", + " 52 active_buy_volume_big float64 \n", + " 53 active_buy_volume_small float64 \n", + " 54 buy_lg_vol - sell_lg_vol float64 \n", + " 55 buy_elg_vol - sell_elg_vol float64 \n", + " 56 future_return1 float64 \n", + " 57 future_return2 float64 \n", + " 58 future_return3 float64 \n", + " 59 future_return4 float64 \n", + " 60 future_return5 float64 \n", + " 61 future_return6 float64 \n", + " 62 future_return7 float64 \n", + " 63 future_close1 float64 \n", + " 64 future_close2 float64 \n", + " 65 future_close3 float64 \n", + " 66 future_close4 float64 \n", + " 67 future_close5 float64 \n", + " 68 future_af11 float64 \n", + " 69 future_af12 float64 \n", + " 70 future_af13 float64 \n", + " 71 future_af14 float64 \n", + " 72 future_af15 float64 \n", + " 73 future_af21 float64 \n", + " 74 future_af22 float64 \n", + " 75 future_af23 float64 \n", + " 76 future_af24 float64 \n", + " 77 future_af25 float64 \n", + " 78 future_af31 float64 \n", + " 79 future_af32 float64 \n", + " 80 future_af33 float64 \n", + " 81 future_af34 float64 \n", + " 82 future_af35 float64 \n", + "dtypes: datetime64[ns](1), float64(80), object(2)\n", + "memory usage: 5.2+ GB\n", + "None\n" + ] + } + ], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:55:28.712343Z", + "start_time": "2025-02-09T14:53:49.279168Z" + } + }, + "cell_type": "code", + "source": [ + "def filter_data(df):\n", + " df = df.groupby('trade_date').apply(lambda x: x.nlargest(1000, 'act_factor3'))\n", + " df = df[df['is_st'] == False]\n", + " df = df[df['is_st'] == False]\n", + " df = df[~df['ts_code'].str.startswith('30')]\n", + " df = df[~df['ts_code'].str.startswith('68')]\n", + " df = df[~df['ts_code'].str.startswith('8')]\n", + " df = df.reset_index(drop=True)\n", + " return df\n", + "\n", + "\n", + "df = filter_data(df)\n", + "print(df.info())" + ], + "id": "dbe2fd8021b9417f", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 1136157 entries, 0 to 1136156\n", + "Data columns (total 83 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 ts_code 1136157 non-null object \n", + " 1 trade_date 1136157 non-null datetime64[ns]\n", + " 2 open 1136157 non-null float64 \n", + " 3 close 1136157 non-null float64 \n", + " 4 high 1136157 non-null float64 \n", + " 5 low 1136157 non-null float64 \n", + " 6 vol 1136157 non-null float64 \n", + " 7 is_st 1136157 non-null object \n", + " 8 up_limit 1135878 non-null float64 \n", + " 9 down_limit 1135878 non-null float64 \n", + " 10 buy_sm_vol 1135663 non-null float64 \n", + " 11 sell_sm_vol 1135663 non-null float64 \n", + " 12 buy_lg_vol 1135663 non-null float64 \n", + " 13 sell_lg_vol 1135663 non-null float64 \n", + " 14 buy_elg_vol 1135663 non-null float64 \n", + " 15 sell_elg_vol 1135663 non-null float64 \n", + " 16 net_mf_vol 1135663 non-null float64 \n", + " 17 up 1136157 non-null float64 \n", + " 18 down 1136157 non-null float64 \n", + " 19 atr_14 1136157 non-null float64 \n", + " 20 atr_6 1136157 non-null float64 \n", + " 21 obv 1136157 non-null float64 \n", + " 22 maobv_6 1136157 non-null float64 \n", + " 23 obv-maobv_6 1136157 non-null float64 \n", + " 24 rsi_3 1136157 non-null float64 \n", + " 25 rsi_6 1136157 non-null float64 \n", + " 26 rsi_9 1136157 non-null float64 \n", + " 27 return_10 1136157 non-null float64 \n", + " 28 return_20 1136157 non-null float64 \n", + " 29 avg_close_5 1136157 non-null float64 \n", + " 30 std_return_5 1136157 non-null float64 \n", + " 31 std_return_15 1136157 non-null float64 \n", + " 32 std_return_25 1136157 non-null float64 \n", + " 33 std_return_90 1136131 non-null float64 \n", + " 34 std_return_90_2 1136129 non-null float64 \n", + " 35 std_return_5 / std_return_90 1136131 non-null float64 \n", + " 36 std_return_5 / std_return_25 1136157 non-null float64 \n", + " 37 std_return_90 - std_return_90_2 1136129 non-null float64 \n", + " 38 ema_5 1136157 non-null float64 \n", + " 39 ema_13 1136157 non-null float64 \n", + " 40 ema_20 1136157 non-null float64 \n", + " 41 ema_60 1136153 non-null float64 \n", + " 42 act_factor1 1136157 non-null float64 \n", + " 43 act_factor2 1136157 non-null float64 \n", + " 44 act_factor3 1136157 non-null float64 \n", + " 45 act_factor4 1136152 non-null float64 \n", + " 46 act_factor5 1136152 non-null float64 \n", + " 47 act_factor6 1136157 non-null float64 \n", + " 48 rank_act_factor1 1136157 non-null float64 \n", + " 49 rank_act_factor2 1136157 non-null float64 \n", + " 50 rank_act_factor3 1136157 non-null float64 \n", + " 51 active_buy_volume_large 1135659 non-null float64 \n", + " 52 active_buy_volume_big 1135636 non-null float64 \n", + " 53 active_buy_volume_small 1135663 non-null float64 \n", + " 54 buy_lg_vol - sell_lg_vol 1135660 non-null float64 \n", + " 55 buy_elg_vol - sell_elg_vol 1135640 non-null float64 \n", + " 56 future_return1 1136157 non-null float64 \n", + " 57 future_return2 1136157 non-null float64 \n", + " 58 future_return3 1136157 non-null float64 \n", + " 59 future_return4 1136157 non-null float64 \n", + " 60 future_return5 1136157 non-null float64 \n", + " 61 future_return6 1136157 non-null float64 \n", + " 62 future_return7 1136157 non-null float64 \n", + " 63 future_close1 1136157 non-null float64 \n", + " 64 future_close2 1136157 non-null float64 \n", + " 65 future_close3 1136157 non-null float64 \n", + " 66 future_close4 1136157 non-null float64 \n", + " 67 future_close5 1136157 non-null float64 \n", + " 68 future_af11 1136157 non-null float64 \n", + " 69 future_af12 1136157 non-null float64 \n", + " 70 future_af13 1136157 non-null float64 \n", + " 71 future_af14 1136157 non-null float64 \n", + " 72 future_af15 1136157 non-null float64 \n", + " 73 future_af21 1136157 non-null float64 \n", + " 74 future_af22 1136157 non-null float64 \n", + " 75 future_af23 1136157 non-null float64 \n", + " 76 future_af24 1136157 non-null float64 \n", + " 77 future_af25 1136157 non-null float64 \n", + " 78 future_af31 1136157 non-null float64 \n", + " 79 future_af32 1136157 non-null float64 \n", + " 80 future_af33 1136157 non-null float64 \n", + " 81 future_af34 1136157 non-null float64 \n", + " 82 future_af35 1136157 non-null float64 \n", + "dtypes: datetime64[ns](1), float64(80), object(2)\n", + "memory usage: 719.5+ MB\n", + "None\n" + ] + } + ], + "execution_count": 6 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T15:00:45.828404Z", + "start_time": "2025-02-09T15:00:45.294830Z" + } + }, + "cell_type": "code", + "source": [ + "def remove_outliers_iqr(series, lower_quantile=0.05, upper_quantile=0.95, threshold=1.5):\n", + " Q1 = series.quantile(lower_quantile)\n", + " Q3 = series.quantile(upper_quantile)\n", + " IQR = Q3 - Q1\n", + " lower_bound = Q1 - threshold * IQR\n", + " upper_bound = Q3 + threshold * IQR\n", + " # 过滤掉低于下边界或高于上边界的极值\n", + " return (series >= lower_bound) & (series <= upper_bound)\n", + "\n", + "\n", + "def neutralize_labels(labels, features, feature_columns, z_threshold=3, method='regression'):\n", + " labels_no_outliers = remove_outliers_iqr(labels)\n", + " return labels_no_outliers\n", + "\n", + "\n", + "train_data = df[df['trade_date'] <= '2023-01-01']\n", + "test_data = df[df['trade_date'] >= '2023-01-01']\n", + "\n", + "feature_columns = [col for col in df.columns if col not in ['trade_date',\n", + " 'ts_code',\n", + " 'label']]\n", + "feature_columns = [col for col in feature_columns if 'future' not in col]\n", + "feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "feature_columns = [col for col in feature_columns if col not in origin_columns]\n", + "\n", + "# for column in [column for column in train_data.columns if 'future' in column]:\n", + "# label_index = neutralize_labels(train_data[column], train_data, feature_columns, z_threshold=3, method='regression')\n", + "# train_data = train_data[label_index]\n", + "# label_index = neutralize_labels(test_data[column], test_data, feature_columns, z_threshold=3, method='regression')\n", + "# test_data = test_data[label_index]\n", + "\n", + "print(len(train_data))\n", + "print(len(test_data))" + ], + "id": "5f3d9aece75318cd", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['up', 'down', 'atr_14', 'atr_6', 'obv', 'maobv_6', 'obv-maobv_6', 'rsi_3', 'rsi_6', 'rsi_9', 'return_10', 'return_20', 'avg_close_5', 'std_return_5', 'std_return_15', 'std_return_25', 'std_return_90', 'std_return_90_2', 'std_return_5 / std_return_90', 'std_return_5 / std_return_25', 'std_return_90 - std_return_90_2', 'ema_5', 'ema_13', 'ema_20', 'ema_60', 'act_factor1', 'act_factor2', 'act_factor3', 'act_factor4', 'act_factor5', 'act_factor6', 'rank_act_factor1', 'rank_act_factor2', 'rank_act_factor3', 'active_buy_volume_large', 'active_buy_volume_big', 'active_buy_volume_small', 'buy_lg_vol - sell_lg_vol', 'buy_elg_vol - sell_elg_vol']\n" + ] + } + ], + "execution_count": 19 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:56:05.319915Z", + "start_time": "2025-02-09T14:56:03.355725Z" + } + }, + "cell_type": "code", + "source": [ + "def get_qcuts(series, quantiles):\n", + " q = pd.qcut(series, q=quantiles, labels=False, duplicates='drop')\n", + " return q[-1] # 返回窗口最后一个元素的分位数标签\n", + "\n", + "\n", + "window = 5\n", + "quantiles = 20\n", + "\n", + "\n", + "def get_label(df):\n", + " labels = df['future_af13'] - df['act_factor1']\n", + " # labels = df['future_close3']\n", + " return labels\n", + "\n", + "\n", + "train_data['label'], test_data['label'] = get_label(train_data), get_label(test_data)\n", + "\n", + "train_data, test_data = train_data.dropna(subset=['label']), test_data.dropna(subset=['label'])\n", + "train_data, test_data = train_data.replace([np.inf, -np.inf], np.nan).dropna(), test_data.replace([np.inf, -np.inf],\n", + " np.nan).dropna()\n", + "train_data, test_data = train_data.reset_index(drop=True), test_data.reset_index(drop=True)\n", + "\n", + "print(len(train_data))\n", + "print(len(test_data))" + ], + "id": "f4f16d63ad18d1bc", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "875004\n", + "最小日期: 2017-01-03\n", + "最大日期: 2022-12-30\n", + "260581\n", + "最小日期: 2023-01-03\n", + "最大日期: 2025-01-27\n" + ] + } + ], + "execution_count": 13 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:56:05.480695Z", + "start_time": "2025-02-09T14:56:05.367238Z" + } + }, + "cell_type": "code", + "source": [ + "import lightgbm as lgb\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import optuna\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.metrics import mean_absolute_error\n", + "import os\n", + "import json\n", + "import pickle\n", + "import hashlib\n", + "\n", + "\n", + "def objective(trial, X, y, num_boost_round, params):\n", + " # 参数网格\n", + " X, y = X.reset_index(drop=True), y.reset_index(drop=True)\n", + " param_grid = {\n", + " \"n_estimators\": trial.suggest_categorical(\"n_estimators\", [10000]),\n", + " \"learning_rate\": trial.suggest_float(\"learning_rate\", 0.01, 0.3),\n", + " \"num_leaves\": trial.suggest_int(\"num_leaves\", 20, 3000, step=25),\n", + " \"max_depth\": trial.suggest_int(\"max_depth\", 3, 16),\n", + " \"min_data_in_leaf\": trial.suggest_int(\"min_data_in_leaf\", 200, 10000, step=100),\n", + " \"lambda_l1\": trial.suggest_int(\"lambda_l1\", 0, 100, step=5),\n", + " \"lambda_l2\": trial.suggest_int(\"lambda_l2\", 0, 100, step=5),\n", + " \"min_gain_to_split\": trial.suggest_float(\"min_gain_to_split\", 0, 15),\n", + " \"bagging_fraction\": trial.suggest_float(\"bagging_fraction\", 0.2, 0.95, step=0.1),\n", + " \"bagging_freq\": trial.suggest_categorical(\"bagging_freq\", [1]),\n", + " \"feature_fraction\": trial.suggest_float(\"feature_fraction\", 0.2, 0.95, step=0.1),\n", + " \"random_state\": 1,\n", + " \"objective\": 'regression',\n", + " 'verbosity': -1\n", + " }\n", + " # 5折交叉验证\n", + " cv = KFold(n_splits=5, shuffle=False)\n", + "\n", + " cv_scores = np.empty(5)\n", + " for idx, (train_idx, test_idx) in enumerate(cv.split(X, y)):\n", + " X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]\n", + " y_train, y_test = y[train_idx], y[test_idx]\n", + "\n", + " # LGBM建模\n", + " model = lgb.LGBMRegressor(**param_grid, num_boost_round=num_boost_round)\n", + " model.fit(\n", + " X_train,\n", + " y_train,\n", + " eval_set=[(X_test, y_test)],\n", + " eval_metric=\"l2\",\n", + " callbacks=[\n", + " # LightGBMPruningCallback(trial, \"l2\"),\n", + " lgb.early_stopping(50, first_metric_only=True),\n", + " lgb.log_evaluation(period=-1)\n", + " ],\n", + " )\n", + " # 模型预测\n", + " preds = model.predict(X_test)\n", + " # 优化指标logloss最小\n", + " cv_scores[idx] = mean_absolute_error(y_test, preds)\n", + "\n", + " return np.mean(cv_scores)\n", + "\n", + "def generate_key(params, feature_columns, num_boost_round):\n", + " key_data = {\n", + " \"params\": params,\n", + " \"feature_columns\": feature_columns,\n", + " \"num_boost_round\": num_boost_round\n", + " }\n", + " # 转换成排序后的 JSON 字符串,再生成 md5 hash\n", + " key_str = json.dumps(key_data, sort_keys=True)\n", + " return hashlib.md5(key_str.encode('utf-8')).hexdigest()\n", + "\n", + "def train_light_model(df, params, feature_columns, callbacks, evals,\n", + " print_feature_importance=True, num_boost_round=100,\n", + " use_optuna=False):\n", + " cache_file = 'light_model.pkl'\n", + " cache_key = generate_key(params, feature_columns, num_boost_round)\n", + "\n", + " # 检查缓存文件是否存在\n", + " if os.path.exists(cache_file):\n", + " try:\n", + " with open(cache_file, 'rb') as f:\n", + " cache_data = pickle.load(f)\n", + " if cache_data.get('key') == cache_key:\n", + " print(\"加载缓存模型...\")\n", + " return cache_data.get('model')\n", + " else:\n", + " print(\"缓存模型的参数与当前参数不匹配,重新训练模型。\")\n", + " except Exception as e:\n", + " print(f\"加载缓存失败: {e},重新训练模型。\")\n", + " else:\n", + " print(\"未发现缓存模型,开始训练新模型。\")\n", + " # 确保数据按照 date 和 label 排序\n", + " df_sorted = df.sort_values(by=['trade_date', 'label'], ascending=[True, False]) # 按日期升序、标签降序排序\n", + " df_sorted = df_sorted.sort_values(by='trade_date')\n", + " unique_dates = df_sorted['trade_date'].unique()\n", + " val_date_count = int(len(unique_dates) * 0.1)\n", + " val_dates = unique_dates[-val_date_count:]\n", + " val_indices = df_sorted[df_sorted['trade_date'].isin(val_dates)].index\n", + " train_indices = df_sorted[~df_sorted['trade_date'].isin(val_dates)].index\n", + "\n", + " # 获取训练集和验证集的样本\n", + " train_df = df_sorted.iloc[train_indices]\n", + " val_df = df_sorted.iloc[val_indices]\n", + "\n", + " X_train = train_df[feature_columns]\n", + " y_train = train_df['label']\n", + "\n", + " X_val = val_df[feature_columns]\n", + " y_val = val_df['label']\n", + "\n", + " train_data = lgb.Dataset(X_train, label=y_train)\n", + " val_data = lgb.Dataset(X_val, label=y_val)\n", + " if use_optuna:\n", + " # study = optuna.create_study(direction='minimize' if classify else 'maximize')\n", + " study = optuna.create_study(direction='minimize')\n", + " study.optimize(lambda trial: objective(trial, X_train, y_train, num_boost_round, params), n_trials=20)\n", + "\n", + " print(f\"Best parameters: {study.best_trial.params}\")\n", + " print(f\"Best score: {study.best_trial.value}\")\n", + "\n", + " params.update(study.best_trial.params)\n", + " model = lgb.train(\n", + " params, train_data, num_boost_round=num_boost_round,\n", + " valid_sets=[train_data, val_data], valid_names=['train', 'valid'],\n", + " callbacks=callbacks\n", + " )\n", + "\n", + " # 打印特征重要性(如果需要)\n", + " if print_feature_importance:\n", + " lgb.plot_metric(evals)\n", + " lgb.plot_tree(model, figsize=(20, 8))\n", + " lgb.plot_importance(model, importance_type='split', max_num_features=20)\n", + " plt.show()\n", + " # with open(cache_file, 'wb') as f:\n", + " # pickle.dump({'key': cache_key,\n", + " # 'model': model,\n", + " # 'feature_columns': feature_columns}, f)\n", + " # print(\"模型训练完成并已保存缓存。\")\n", + " return model\n", + "\n", + "\n", + "from catboost import CatBoostRegressor\n", + "import pandas as pd\n", + "\n", + "\n", + "def train_catboost(df, num_boost_round, params=None):\n", + " \"\"\"\n", + " 训练 CatBoost 排序模型\n", + " - df: 包含因子、date、instrument 和 label 的 DataFrame\n", + " - num_boost_round: 训练的轮数\n", + " - print_feature_importance: 是否打印特征重要性\n", + " - plot: 是否绘制特征重要性图\n", + " - split_date: 用于划分训练集和验证集的日期(比如 '2020-01-01')\n", + "\n", + " 返回训练好的模型\n", + " \"\"\"\n", + " df_sorted = df.sort_values(by=['date', 'label'], ascending=[True, False])\n", + "\n", + " # 提取特征和标签\n", + " feature_columns = [col for col in df.columns if col not in ['date',\n", + " 'instrument',\n", + " 'label']]\n", + " feature_columns = [col for col in feature_columns if 'future' not in col]\n", + " feature_columns = [col for col in feature_columns if 'score' not in col]\n", + "\n", + " df_sorted = df_sorted.sort_values(by='date')\n", + " unique_dates = df_sorted['date'].unique()\n", + " val_date_count = int(len(unique_dates) * 0.1)\n", + " val_dates = unique_dates[-val_date_count:]\n", + " val_indices = df_sorted[df_sorted['date'].isin(val_dates)].index\n", + " train_indices = df_sorted[~df_sorted['date'].isin(val_dates)].index\n", + "\n", + " # 获取训练集和验证集的样本\n", + " train_df = df_sorted.iloc[train_indices].sort_values(by=['date', 'label'], ascending=[True, False])\n", + " val_df = df_sorted.iloc[val_indices].sort_values(by=['date', 'label'], ascending=[True, False])\n", + "\n", + " X_train = train_df[feature_columns]\n", + " y_train = train_df['label']\n", + "\n", + " X_val = val_df[feature_columns]\n", + " y_val = val_df['label']\n", + "\n", + " model = CatBoostRegressor(**params, iterations=num_boost_round)\n", + " model.fit(X_train,\n", + " y_train,\n", + " eval_set=(X_val, y_val))\n", + "\n", + " return model" + ], + "id": "8f134d435f71e9e2", + "outputs": [], + "execution_count": 14 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:56:05.576927Z", + "start_time": "2025-02-09T14:56:05.480695Z" + } + }, + "cell_type": "code", + "source": [ + "light_params = {\n", + " 'objective': 'regression',\n", + " 'metric': 'l2',\n", + " 'learning_rate': 0.05,\n", + " 'is_unbalance': True,\n", + " 'num_leaves': 2048,\n", + " 'min_data_in_leaf': 16,\n", + " 'max_depth': 32,\n", + " 'max_bin': 1024,\n", + " 'nthread': 2,\n", + " 'feature_fraction': 0.7,\n", + " 'bagging_fraction': 0.7,\n", + " 'bagging_freq': 5,\n", + " 'lambda_l1': 80,\n", + " 'lambda_l2': 65,\n", + " 'verbosity': -1\n", + "}" + ], + "id": "4a4542e1ed6afe7d", + "outputs": [], + "execution_count": 15 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:57:25.341222Z", + "start_time": "2025-02-09T14:56:05.640256Z" + } + }, + "cell_type": "code", + "source": [ + "print('train data size: ', len(train_data))\n", + "df = train_data\n", + "\n", + "evals = {}\n", + "light_model = train_light_model(train_data, light_params, feature_columns,\n", + " [lgb.log_evaluation(period=500),\n", + " lgb.callback.record_evaluation(evals),\n", + " lgb.early_stopping(50, first_metric_only=True)\n", + " ], evals,\n", + " num_boost_round=1000, use_optuna=False,\n", + " print_feature_importance=False)" + ], + "id": "beeb098799ecfa6a", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train data size: 875004\n", + "未发现缓存模型,开始训练新模型。\n", + "Training until validation scores don't improve for 50 rounds\n", + "Early stopping, best iteration is:\n", + "[378]\ttrain's l2: 0.435049\tvalid's l2: 0.589178\n", + "Evaluated only: l2\n" + ] + } + ], + "execution_count": 16 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:57:27.394697Z", + "start_time": "2025-02-09T14:57:25.373274Z" + } + }, + "cell_type": "code", + "source": [ + "test_data['score'] = light_model.predict(test_data[feature_columns])\n", + "predictions = test_data.loc[test_data.groupby('trade_date')['score'].idxmax()]" + ], + "id": "5bb96ca8492e74d", + "outputs": [], + "execution_count": 17 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-02-09T14:57:27.489570Z", + "start_time": "2025-02-09T14:57:27.397368Z" + } + }, + "cell_type": "code", + "source": "predictions[['trade_date', 'score', 'ts_code']].to_csv('predictions.csv', index=False)", + "id": "5d1522a7538db91b", + "outputs": [], + "execution_count": 18 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/best_model.pth b/code/train/best_model.pth new file mode 100644 index 0000000..69fa32d Binary files /dev/null and b/code/train/best_model.pth differ diff --git a/code/train/catboost_info/catboost_training.json b/code/train/catboost_info/catboost_training.json new file mode 100644 index 0000000..b4e25f8 --- /dev/null +++ b/code/train/catboost_info/catboost_training.json @@ -0,0 +1,5004 @@ +{ +"meta":{"test_sets":["test"],"test_metrics":[{"best_value":"Min","name":"Logloss"}],"learn_metrics":[{"best_value":"Min","name":"Logloss"}],"launch_mode":"Train","parameters":"","iteration_count":5000,"learn_sets":["learn"],"name":"experiment"}, +"iterations":[ +{"learn":[0.6863319056],"iteration":0,"passed_time":0.009045906858,"remaining_time":45.22048838,"test":[0.6861052887]}, +{"learn":[0.6746464163],"iteration":1,"passed_time":0.01726818031,"remaining_time":43.1531826,"test":[0.6743600161]}, +{"learn":[0.6714135204],"iteration":2,"passed_time":0.03751901195,"remaining_time":62.49416756,"test":[0.6710211431]}, +{"learn":[0.6654025119],"iteration":3,"passed_time":0.04790668852,"remaining_time":59.83545396,"test":[0.6648334068]}, +{"learn":[0.6550456697],"iteration":4,"passed_time":0.05639761763,"remaining_time":56.34122001,"test":[0.6541856344]}, +{"learn":[0.6495618046],"iteration":5,"passed_time":0.06656880896,"remaining_time":55.40743866,"test":[0.6488011302]}, +{"learn":[0.6443816251],"iteration":6,"passed_time":0.07787554353,"remaining_time":55.54751269,"test":[0.6434835621]}, +{"learn":[0.6393367482],"iteration":7,"passed_time":0.08895888724,"remaining_time":55.51034564,"test":[0.6384988858]}, +{"learn":[0.6367666558],"iteration":8,"passed_time":0.102197345,"remaining_time":56.67410545,"test":[0.6359470921]}, +{"learn":[0.6282967176],"iteration":9,"passed_time":0.1102894093,"remaining_time":55.03441524,"test":[0.6275708523]}, +{"learn":[0.6203324055],"iteration":10,"passed_time":0.1188073071,"remaining_time":53.88451412,"test":[0.6193913675]}, +{"learn":[0.6181289413],"iteration":11,"passed_time":0.1306591505,"remaining_time":54.31065356,"test":[0.6171219209]}, +{"learn":[0.6140690906],"iteration":12,"passed_time":0.1403750633,"remaining_time":53.85003389,"test":[0.613084422]}, +{"learn":[0.6101612317],"iteration":13,"passed_time":0.1536624638,"remaining_time":54.72578891,"test":[0.6092213262]}, +{"learn":[0.6033519383],"iteration":14,"passed_time":0.1606154474,"remaining_time":53.37786701,"test":[0.6024870154]}, +{"learn":[0.5970112566],"iteration":15,"passed_time":0.1685976469,"remaining_time":52.518167,"test":[0.5959876065]}, +{"learn":[0.5936951526],"iteration":16,"passed_time":0.1817380558,"remaining_time":53.27063131,"test":[0.592715908]}, +{"learn":[0.5919957051],"iteration":17,"passed_time":0.1927152696,"remaining_time":53.33930405,"test":[0.5909668695]}, +{"learn":[0.5863674776],"iteration":18,"passed_time":0.2010480976,"remaining_time":52.70634601,"test":[0.585207929]}, +{"learn":[0.5848179955],"iteration":19,"passed_time":0.213677116,"remaining_time":53.20560189,"test":[0.5836811562]}, +{"learn":[0.5819472573],"iteration":20,"passed_time":0.2259615588,"remaining_time":53.57440957,"test":[0.5808259152]}, +{"learn":[0.5791733171],"iteration":21,"passed_time":0.2398580824,"remaining_time":54.27334245,"test":[0.5781049635]}, +{"learn":[0.5764731078],"iteration":22,"passed_time":0.2494760858,"remaining_time":53.98445561,"test":[0.5754473715]}, +{"learn":[0.5757696538],"iteration":23,"passed_time":0.2644498185,"remaining_time":54.82926236,"test":[0.5747250825]}, +{"learn":[0.5732078465],"iteration":24,"passed_time":0.2758456111,"remaining_time":54.89327662,"test":[0.5721040878]}, +{"learn":[0.5706889545],"iteration":25,"passed_time":0.2887502146,"remaining_time":55.24013721,"test":[0.569590143]}, +{"learn":[0.5694201506],"iteration":26,"passed_time":0.3054317045,"remaining_time":56.25599505,"test":[0.5682790198]}, +{"learn":[0.5670772711],"iteration":27,"passed_time":0.3166576308,"remaining_time":56.22934787,"test":[0.5659677904]}, +{"learn":[0.5648007912],"iteration":28,"passed_time":0.3264353887,"remaining_time":55.95552819,"test":[0.5636375471]}, +{"learn":[0.5625560805],"iteration":29,"passed_time":0.3377864993,"remaining_time":55.95996338,"test":[0.5614650772]}, +{"learn":[0.5603164363],"iteration":30,"passed_time":0.3483265771,"remaining_time":55.83337941,"test":[0.5593268801]}, +{"learn":[0.5592399169],"iteration":31,"passed_time":0.3596423589,"remaining_time":55.83447622,"test":[0.5582264592]}, +{"learn":[0.5571749738],"iteration":32,"passed_time":0.3712376656,"remaining_time":55.87689349,"test":[0.5562307768]}, +{"learn":[0.5551205808],"iteration":33,"passed_time":0.3805667424,"remaining_time":55.58513068,"test":[0.5542727048]}, +{"learn":[0.5532485183],"iteration":34,"passed_time":0.393262766,"remaining_time":55.78713238,"test":[0.5524353322]}, +{"learn":[0.5529965099],"iteration":35,"passed_time":0.4090690755,"remaining_time":56.4060803,"test":[0.5521891651]}, +{"learn":[0.551144713],"iteration":36,"passed_time":0.4184817117,"remaining_time":56.13310095,"test":[0.5503484547]}, +{"learn":[0.5493430436],"iteration":37,"passed_time":0.4284407689,"remaining_time":55.94534461,"test":[0.5486041846]}, +{"learn":[0.5475753489],"iteration":38,"passed_time":0.4374942984,"remaining_time":55.65151832,"test":[0.5468421523]}, +{"learn":[0.5458887165],"iteration":39,"passed_time":0.449741565,"remaining_time":55.76795406,"test":[0.5452386683]}, +{"learn":[0.5442331381],"iteration":40,"passed_time":0.4585131827,"remaining_time":55.45772861,"test":[0.5435912557]}, +{"learn":[0.5438234754],"iteration":41,"passed_time":0.4833268369,"remaining_time":57.05558231,"test":[0.5431712814]}, +{"learn":[0.5423470685],"iteration":42,"passed_time":0.5076181967,"remaining_time":58.51775352,"test":[0.5416659067]}, +{"learn":[0.5408106398],"iteration":43,"passed_time":0.5178368247,"remaining_time":58.32725689,"test":[0.5402145338]}, +{"learn":[0.5404284548],"iteration":44,"passed_time":0.5391230816,"remaining_time":59.36344155,"test":[0.5398402167]}, +{"learn":[0.5390064074],"iteration":45,"passed_time":0.5555773138,"remaining_time":59.83326115,"test":[0.5384712173]}, +{"learn":[0.5376043275],"iteration":46,"passed_time":0.565772384,"remaining_time":59.62277911,"test":[0.5371311263]}, +{"learn":[0.5369070128],"iteration":47,"passed_time":0.578892919,"remaining_time":59.72245281,"test":[0.5364143805]}, +{"learn":[0.5355806904],"iteration":48,"passed_time":0.5914974143,"remaining_time":59.7653816,"test":[0.5351482588]}, +{"learn":[0.5342982967],"iteration":49,"passed_time":0.6061481352,"remaining_time":60.00866538,"test":[0.5339118798]}, +{"learn":[0.5336524208],"iteration":50,"passed_time":0.6196813782,"remaining_time":60.13339492,"test":[0.5332699378]}, +{"learn":[0.5324246845],"iteration":51,"passed_time":0.6297194824,"remaining_time":59.92023075,"test":[0.5320975146]}, +{"learn":[0.532112535],"iteration":52,"passed_time":0.6556950563,"remaining_time":61.20232912,"test":[0.5317879281]}, +{"learn":[0.5315086208],"iteration":53,"passed_time":0.6711941261,"remaining_time":61.47641015,"test":[0.5312035643]}, +{"learn":[0.5303441846],"iteration":54,"passed_time":0.6813798614,"remaining_time":61.2622439,"test":[0.5300915205]}, +{"learn":[0.529215988],"iteration":55,"passed_time":0.704510059,"remaining_time":62.19817378,"test":[0.5290267433]}, +{"learn":[0.5286510553],"iteration":56,"passed_time":0.7193165897,"remaining_time":62.37862987,"test":[0.5284817781]}, +{"learn":[0.5276323524],"iteration":57,"passed_time":0.7358391638,"remaining_time":62.69857151,"test":[0.5274432865]}, +{"learn":[0.5258330076],"iteration":58,"passed_time":0.7556930191,"remaining_time":63.28608826,"test":[0.5256061523]}, +{"learn":[0.5253324478],"iteration":59,"passed_time":0.7704990239,"remaining_time":63.43775297,"test":[0.5251191228]}, +{"learn":[0.524365601],"iteration":60,"passed_time":0.7810764163,"remaining_time":63.24158066,"test":[0.5242018671]}, +{"learn":[0.5238870354],"iteration":61,"passed_time":0.8021233766,"remaining_time":63.8852457,"test":[0.5237296791]}, +{"learn":[0.5229702565],"iteration":62,"passed_time":0.8141561855,"remaining_time":63.80141409,"test":[0.5228649351]}, +{"learn":[0.5220944855],"iteration":63,"passed_time":0.8284241083,"remaining_time":63.89220935,"test":[0.5220193837]}, +{"learn":[0.5212760542],"iteration":64,"passed_time":0.8651045422,"remaining_time":65.6813987,"test":[0.5211784814]}, +{"learn":[0.5204511856],"iteration":65,"passed_time":0.8781953625,"remaining_time":65.65175634,"test":[0.5204109525]}, +{"learn":[0.5196508742],"iteration":66,"passed_time":0.8937646668,"remaining_time":65.80509106,"test":[0.5196581459]}, +{"learn":[0.5188702918],"iteration":67,"passed_time":0.9114889757,"remaining_time":66.10975924,"test":[0.51892334]}, +{"learn":[0.518487332],"iteration":68,"passed_time":0.9242062569,"remaining_time":66.04726164,"test":[0.5185553409]}, +{"learn":[0.5182865836],"iteration":69,"passed_time":0.9416504378,"remaining_time":66.31909512,"test":[0.5183632352]}, +{"learn":[0.5179097035],"iteration":70,"passed_time":0.9580501611,"remaining_time":66.51027104,"test":[0.5179789045]}, +{"learn":[0.517207084],"iteration":71,"passed_time":0.9721569374,"remaining_time":66.53874149,"test":[0.5172910074]}, +{"learn":[0.5170208195],"iteration":72,"passed_time":0.987561747,"remaining_time":66.6536538,"test":[0.5170997957]}, +{"learn":[0.5163317899],"iteration":73,"passed_time":1.000610455,"remaining_time":66.60820409,"test":[0.5164391379]}, +{"learn":[0.5161491613],"iteration":74,"passed_time":1.020258048,"remaining_time":66.99694515,"test":[0.5162684898]}, +{"learn":[0.5154723507],"iteration":75,"passed_time":1.037319128,"remaining_time":67.20736033,"test":[0.5156210046]}, +{"learn":[0.5153072458],"iteration":76,"passed_time":1.072078123,"remaining_time":68.54338441,"test":[0.5154632312]}, +{"learn":[0.5146507603],"iteration":77,"passed_time":1.083482231,"remaining_time":68.37050695,"test":[0.5148310048]}, +{"learn":[0.5140464289],"iteration":78,"passed_time":1.095494906,"remaining_time":68.23962575,"test":[0.5142572505]}, +{"learn":[0.5134396537],"iteration":79,"passed_time":1.10454925,"remaining_time":67.92977889,"test":[0.5136657341]}, +{"learn":[0.5128630384],"iteration":80,"passed_time":1.117967476,"remaining_time":67.89237054,"test":[0.5131060465]}, +{"learn":[0.5127128348],"iteration":81,"passed_time":1.137916239,"remaining_time":68.24722031,"test":[0.5129601344]}, +{"learn":[0.5121799693],"iteration":82,"passed_time":1.152363105,"remaining_time":68.26710105,"test":[0.5124644026]}, +{"learn":[0.511661707],"iteration":83,"passed_time":1.164848011,"remaining_time":68.17134315,"test":[0.5119830356]}, +{"learn":[0.5113931881],"iteration":84,"passed_time":1.178292041,"remaining_time":68.13300447,"test":[0.5117207752]}, +{"learn":[0.5108606206],"iteration":85,"passed_time":1.193347105,"remaining_time":68.18729851,"test":[0.5112189637]}, +{"learn":[0.5107277619],"iteration":86,"passed_time":1.216152922,"remaining_time":68.67769319,"test":[0.5110930787]}, +{"learn":[0.5105955588],"iteration":87,"passed_time":1.248343882,"remaining_time":69.68028576,"test":[0.5109636771]}, +{"learn":[0.5103445041],"iteration":88,"passed_time":1.262043362,"remaining_time":69.63926913,"test":[0.5107209074]}, +{"learn":[0.5101026285],"iteration":89,"passed_time":1.279721902,"remaining_time":69.8159393,"test":[0.5104983436]}, +{"learn":[0.5095970023],"iteration":90,"passed_time":1.288428576,"remaining_time":69.50435032,"test":[0.510032891]}, +{"learn":[0.5091182579],"iteration":91,"passed_time":1.298691839,"remaining_time":69.28238638,"test":[0.5095928896]}, +{"learn":[0.5088828195],"iteration":92,"passed_time":1.313548386,"remaining_time":69.30733258,"test":[0.5093747366]}, +{"learn":[0.5086695542],"iteration":93,"passed_time":1.335021383,"remaining_time":69.6767543,"test":[0.5091772069]}, +{"learn":[0.5082198968],"iteration":94,"passed_time":1.351552127,"remaining_time":69.78277034,"test":[0.5087631334]}, +{"learn":[0.5081071248],"iteration":95,"passed_time":1.377802863,"remaining_time":70.38276292,"test":[0.5086563219]}, +{"learn":[0.5080476394],"iteration":96,"passed_time":1.405369662,"remaining_time":71.0363655,"test":[0.5085980882]}, +{"learn":[0.5076298109],"iteration":97,"passed_time":1.416399593,"remaining_time":70.84888578,"test":[0.5082021346]}, +{"learn":[0.5074109426],"iteration":98,"passed_time":1.430380276,"remaining_time":70.81104781,"test":[0.5079899421]}, +{"learn":[0.5072070352],"iteration":99,"passed_time":1.448655296,"remaining_time":70.98410949,"test":[0.5077845445]}, +{"learn":[0.5071077934],"iteration":100,"passed_time":1.477146557,"remaining_time":71.64892062,"test":[0.5076948395]}, +{"learn":[0.5066896073],"iteration":101,"passed_time":1.48756307,"remaining_time":71.43219528,"test":[0.507296919]}, +{"learn":[0.506310641],"iteration":102,"passed_time":1.504692222,"remaining_time":71.53861951,"test":[0.506916701]}, +{"learn":[0.5059526556],"iteration":103,"passed_time":1.515434835,"remaining_time":71.34200916,"test":[0.5065873853]}, +{"learn":[0.5055950277],"iteration":104,"passed_time":1.53536511,"remaining_time":71.57725919,"test":[0.5062502019]}, +{"learn":[0.505503475],"iteration":105,"passed_time":1.549360808,"remaining_time":71.53369617,"test":[0.5061634772]}, +{"learn":[0.5053069585],"iteration":106,"passed_time":1.560333264,"remaining_time":71.35243608,"test":[0.5059745901]}, +{"learn":[0.5052574867],"iteration":107,"passed_time":1.583090759,"remaining_time":71.7081481,"test":[0.5059302442]}, +{"learn":[0.5051662916],"iteration":108,"passed_time":1.599433254,"remaining_time":71.76906464,"test":[0.5058471554]}, +{"learn":[0.5050759905],"iteration":109,"passed_time":1.616156714,"remaining_time":71.8455121,"test":[0.5057612651]}, +{"learn":[0.5047369594],"iteration":110,"passed_time":1.631663127,"remaining_time":71.86667594,"test":[0.5054527515]}, +{"learn":[0.5044177169],"iteration":111,"passed_time":1.650895527,"remaining_time":72.04979765,"test":[0.505156278]}, +{"learn":[0.5042372341],"iteration":112,"passed_time":1.663643344,"remaining_time":71.94889401,"test":[0.5049940938]}, +{"learn":[0.5040756459],"iteration":113,"passed_time":1.675907244,"remaining_time":71.82879642,"test":[0.5048360223]}, +{"learn":[0.5039881463],"iteration":114,"passed_time":1.697758008,"remaining_time":72.11780756,"test":[0.5047534699]}, +{"learn":[0.5039064283],"iteration":115,"passed_time":1.71623529,"remaining_time":72.25942375,"test":[0.5046803946]}, +{"learn":[0.5036249752],"iteration":116,"passed_time":1.728637874,"remaining_time":72.14477553,"test":[0.5044246907]}, +{"learn":[0.5035439129],"iteration":117,"passed_time":1.745435873,"remaining_time":72.21371129,"test":[0.5043525095]}, +{"learn":[0.5032693144],"iteration":118,"passed_time":1.755604622,"remaining_time":72.00929547,"test":[0.5040934081]}, +{"learn":[0.5031213757],"iteration":119,"passed_time":1.772291714,"remaining_time":72.07319637,"test":[0.5039513106]}, +{"learn":[0.5030503269],"iteration":120,"passed_time":1.793423068,"remaining_time":72.31496819,"test":[0.5038821693]}, +{"learn":[0.5028955933],"iteration":121,"passed_time":1.806237263,"remaining_time":72.21988009,"test":[0.5037341709]}, +{"learn":[0.5027516481],"iteration":122,"passed_time":1.833837509,"remaining_time":72.71240269,"test":[0.5035891529]}, +{"learn":[0.5026203987],"iteration":123,"passed_time":1.850145429,"remaining_time":72.75249282,"test":[0.5034659501]}, +{"learn":[0.5024843809],"iteration":124,"passed_time":1.87013637,"remaining_time":72.93531844,"test":[0.5033391114]}, +{"learn":[0.5024173257],"iteration":125,"passed_time":1.901347199,"remaining_time":73.54893849,"test":[0.503279924]}, +{"learn":[0.50234884],"iteration":126,"passed_time":1.916607155,"remaining_time":73.54036744,"test":[0.5032169219]}, +{"learn":[0.5022772548],"iteration":127,"passed_time":1.93178506,"remaining_time":73.52856886,"test":[0.5031536814]}, +{"learn":[0.5021438596],"iteration":128,"passed_time":1.94671592,"remaining_time":73.5073895,"test":[0.5030316707]}, +{"learn":[0.5020679233],"iteration":129,"passed_time":1.972920905,"remaining_time":73.90865237,"test":[0.502961218]}, +{"learn":[0.5020014045],"iteration":130,"passed_time":1.999951489,"remaining_time":74.33407482,"test":[0.5028993484]}, +{"learn":[0.5018748043],"iteration":131,"passed_time":2.015853265,"remaining_time":74.34222494,"test":[0.50278604]}, +{"learn":[0.5017527936],"iteration":132,"passed_time":2.036945453,"remaining_time":74.53995126,"test":[0.5026774999]}, +{"learn":[0.5016272662],"iteration":133,"passed_time":2.052325156,"remaining_time":74.52697171,"test":[0.5025590059]}, +{"learn":[0.5015503166],"iteration":134,"passed_time":2.067939693,"remaining_time":74.52241931,"test":[0.5024892089]}, +{"learn":[0.5014282463],"iteration":135,"passed_time":2.098940981,"remaining_time":75.06800683,"test":[0.5023759601]}, +{"learn":[0.5011702179],"iteration":136,"passed_time":2.107697238,"remaining_time":74.81555964,"test":[0.5021478531]}, +{"learn":[0.5011679529],"iteration":137,"passed_time":2.146208144,"remaining_time":75.61495649,"test":[0.502145767]}, +{"learn":[0.5009546875],"iteration":138,"passed_time":2.156720435,"remaining_time":75.42315131,"test":[0.5019521711]}, +{"learn":[0.5008937119],"iteration":139,"passed_time":2.183761389,"remaining_time":75.80771679,"test":[0.5018984077]}, +{"learn":[0.5007730722],"iteration":140,"passed_time":2.21333197,"remaining_time":76.27361731,"test":[0.5017865298]}, +{"learn":[0.5007432102],"iteration":141,"passed_time":2.23550653,"remaining_time":76.47951214,"test":[0.5017575023]}, +{"learn":[0.5006886124],"iteration":142,"passed_time":2.253643794,"remaining_time":76.54509025,"test":[0.5017072556]}, +{"learn":[0.5006811618],"iteration":143,"passed_time":2.288310069,"remaining_time":77.16690064,"test":[0.5017002223]}, +{"learn":[0.5006771683],"iteration":144,"passed_time":2.325001214,"remaining_time":77.84745445,"test":[0.5016967652]}, +{"learn":[0.5006639957],"iteration":145,"passed_time":2.359681722,"remaining_time":78.45133614,"test":[0.5016850827]}, +{"learn":[0.5004658698],"iteration":146,"passed_time":2.370863828,"remaining_time":78.27076299,"test":[0.5015010832]}, +{"learn":[0.5003433823],"iteration":147,"passed_time":2.383565925,"remaining_time":78.14230991,"test":[0.5013890861]}, +{"learn":[0.5002898574],"iteration":148,"passed_time":2.421212153,"remaining_time":78.82751783,"test":[0.5013409255]}, +{"learn":[0.5001757741],"iteration":149,"passed_time":2.435108508,"remaining_time":78.73517509,"test":[0.5012378691]}, +{"learn":[0.5000739098],"iteration":150,"passed_time":2.448730862,"remaining_time":78.6350725,"test":[0.5011476277]}, +{"learn":[0.5000602007],"iteration":151,"passed_time":2.48155769,"remaining_time":79.14862947,"test":[0.5011351107]}, +{"learn":[0.4999499619],"iteration":152,"passed_time":2.502420042,"remaining_time":79.27601271,"test":[0.5010340213]}, +{"learn":[0.4998520017],"iteration":153,"passed_time":2.515082986,"remaining_time":79.14345551,"test":[0.5009437202]}, +{"learn":[0.4997453988],"iteration":154,"passed_time":2.530150053,"remaining_time":79.08759358,"test":[0.5008438825]}, +{"learn":[0.499689579],"iteration":155,"passed_time":2.545728475,"remaining_time":79.0481329,"test":[0.5007910131]}, +{"learn":[0.4995792211],"iteration":156,"passed_time":2.572308665,"remaining_time":79.34834945,"test":[0.5006897449]}, +{"learn":[0.4995249212],"iteration":157,"passed_time":2.587603192,"remaining_time":79.29857376,"test":[0.5006380676]}, +{"learn":[0.4994656742],"iteration":158,"passed_time":2.603341082,"remaining_time":79.26273069,"test":[0.5005837082]}, +{"learn":[0.4994621874],"iteration":159,"passed_time":2.640339329,"remaining_time":79.87026471,"test":[0.5005804896]}, +{"learn":[0.499378264],"iteration":160,"passed_time":2.657797671,"remaining_time":79.88250268,"test":[0.5005035996]}, +{"learn":[0.4993743599],"iteration":161,"passed_time":2.694376018,"remaining_time":80.46537763,"test":[0.5005005597]}, +{"learn":[0.4993709029],"iteration":162,"passed_time":2.730727755,"remaining_time":81.03392731,"test":[0.5004976391]}, +{"learn":[0.4993678034],"iteration":163,"passed_time":2.767238338,"remaining_time":81.59978415,"test":[0.5004948377]}, +{"learn":[0.49927786],"iteration":164,"passed_time":2.78105378,"remaining_time":81.49330318,"test":[0.5004137158]}, +{"learn":[0.4992254377],"iteration":165,"passed_time":2.798318553,"remaining_time":81.48838485,"test":[0.5003654956]}, +{"learn":[0.4992223681],"iteration":166,"passed_time":2.836742751,"remaining_time":82.09567493,"test":[0.5003629326]}, +{"learn":[0.4992173315],"iteration":167,"passed_time":2.872402024,"remaining_time":82.61575346,"test":[0.5003586411]}, +{"learn":[0.4992145301],"iteration":168,"passed_time":2.908982323,"remaining_time":83.15558343,"test":[0.5003558993]}, +{"learn":[0.4992130996],"iteration":169,"passed_time":2.947848471,"remaining_time":83.75357715,"test":[0.5003545284]}, +{"learn":[0.4991566838],"iteration":170,"passed_time":2.96266033,"remaining_time":83.66483469,"test":[0.500302732]}, +{"learn":[0.4991008044],"iteration":171,"passed_time":2.990313294,"remaining_time":83.93739874,"test":[0.5002501607]}, +{"learn":[0.4990954698],"iteration":172,"passed_time":3.024789542,"remaining_time":84.39687352,"test":[0.5002449751]}, +{"learn":[0.49907434],"iteration":173,"passed_time":3.056779756,"remaining_time":84.78171899,"test":[0.5002244115]}, +{"learn":[0.4990627171],"iteration":174,"passed_time":3.08981889,"remaining_time":85.19072081,"test":[0.5002135038]}, +{"learn":[0.4990564586],"iteration":175,"passed_time":3.123389278,"remaining_time":85.60926067,"test":[0.5002083182]}, +{"learn":[0.4990507961],"iteration":176,"passed_time":3.157790922,"remaining_time":86.04534247,"test":[0.500203371]}, +{"learn":[0.49904418],"iteration":177,"passed_time":3.193960139,"remaining_time":86.5240213,"test":[0.5001974702]}, +{"learn":[0.4990413488],"iteration":178,"passed_time":3.230941166,"remaining_time":87.01881208,"test":[0.500195086]}, +{"learn":[0.4990353287],"iteration":179,"passed_time":3.266560894,"remaining_time":87.47124172,"test":[0.5001891851]}, +{"learn":[0.4990299047],"iteration":180,"passed_time":3.301264659,"remaining_time":87.89389167,"test":[0.5001838803]}, +{"learn":[0.4989496471],"iteration":181,"passed_time":3.332687357,"remaining_time":88.22465762,"test":[0.5001099706]}, +{"learn":[0.4989442529],"iteration":182,"passed_time":3.369755686,"remaining_time":88.70007179,"test":[0.5001051426]}, +{"learn":[0.4989383222],"iteration":183,"passed_time":3.40545162,"remaining_time":89.13399458,"test":[0.5000992417]}, +{"learn":[0.4989352526],"iteration":184,"passed_time":3.442609756,"remaining_time":89.60089716,"test":[0.5000965595]}, +{"learn":[0.4989276828],"iteration":185,"passed_time":3.478488028,"remaining_time":90.02925466,"test":[0.5000902414]}, +{"learn":[0.4989216329],"iteration":186,"passed_time":3.51470251,"remaining_time":90.46130043,"test":[0.500085175]}, +{"learn":[0.4989200832],"iteration":187,"passed_time":3.553722171,"remaining_time":90.96016536,"test":[0.5000839829]}, +{"learn":[0.4988994004],"iteration":188,"passed_time":3.587129916,"remaining_time":91.31048692,"test":[0.5000645518]}, +{"learn":[0.4988967182],"iteration":189,"passed_time":3.624164625,"remaining_time":91.74858868,"test":[0.500062108]}, +{"learn":[0.4988905789],"iteration":190,"passed_time":3.659872972,"remaining_time":92.14832002,"test":[0.5000562668]}, +{"learn":[0.4987948836],"iteration":191,"passed_time":3.681049683,"remaining_time":92.17961914,"test":[0.4999675751]}, +{"learn":[0.4987855257],"iteration":192,"passed_time":3.714294,"remaining_time":92.51093915,"test":[0.4999595881]}, +{"learn":[0.498783678],"iteration":193,"passed_time":3.751676681,"remaining_time":92.94102128,"test":[0.4999580979]}, +{"learn":[0.4987823667],"iteration":194,"passed_time":3.790123374,"remaining_time":93.39252723,"test":[0.4999566972]}, +{"learn":[0.4987795652],"iteration":195,"passed_time":3.825726134,"remaining_time":93.76932831,"test":[0.499954313]}, +{"learn":[0.4987739624],"iteration":196,"passed_time":3.86092174,"remaining_time":94.13201584,"test":[0.4999490678]}, +{"learn":[0.4987724723],"iteration":197,"passed_time":3.899571292,"remaining_time":94.57445124,"test":[0.4999477267]}, +{"learn":[0.4987698497],"iteration":198,"passed_time":3.935901988,"remaining_time":94.95610775,"test":[0.4999453127]}, +{"learn":[0.4987647535],"iteration":199,"passed_time":3.973961909,"remaining_time":95.37508582,"test":[0.4999409914]}, +{"learn":[0.4987556638],"iteration":200,"passed_time":4.006701093,"remaining_time":95.66248032,"test":[0.499932915]}, +{"learn":[0.4987495245],"iteration":201,"passed_time":4.04196641,"remaining_time":96.00670711,"test":[0.4999271035]}, +{"learn":[0.4987429382],"iteration":202,"passed_time":4.076557807,"remaining_time":96.33126994,"test":[0.4999213219]}, +{"learn":[0.4987189771],"iteration":203,"passed_time":4.109945899,"remaining_time":96.62402222,"test":[0.4998993576]}, +{"learn":[0.4987161757],"iteration":204,"passed_time":4.145878974,"remaining_time":96.9731204,"test":[0.499897182]}, +{"learn":[0.4987033309],"iteration":205,"passed_time":4.179290359,"remaining_time":97.25979604,"test":[0.4998852313]}, +{"learn":[0.4986981453],"iteration":206,"passed_time":4.214404408,"remaining_time":97.58280351,"test":[0.4998806417]}, +{"learn":[0.4986965062],"iteration":207,"passed_time":4.252050622,"remaining_time":97.96070471,"test":[0.4998791814]}, +{"learn":[0.4986910524],"iteration":208,"passed_time":4.286967573,"remaining_time":98.27206527,"test":[0.4998748303]}, +{"learn":[0.4986521603],"iteration":209,"passed_time":4.317347051,"remaining_time":98.47663035,"test":[0.4998385012]}, +{"learn":[0.4986418785],"iteration":210,"passed_time":4.350223995,"remaining_time":98.73565267,"test":[0.4998287559]}, +{"learn":[0.4986402394],"iteration":211,"passed_time":4.387755491,"remaining_time":99.09704383,"test":[0.4998273254]}, +{"learn":[0.4985870423],"iteration":212,"passed_time":4.418424973,"remaining_time":99.3004711,"test":[0.4997788072]}, +{"learn":[0.4985841514],"iteration":213,"passed_time":4.453719631,"remaining_time":99.60515025,"test":[0.4997758568]}, +{"learn":[0.4985826017],"iteration":214,"passed_time":4.492278308,"remaining_time":99.97931026,"test":[0.4997746349]}, +{"learn":[0.4985793831],"iteration":215,"passed_time":4.529106829,"remaining_time":100.311329,"test":[0.4997720421]}, +{"learn":[0.4985767307],"iteration":216,"passed_time":4.565081314,"remaining_time":100.6211241,"test":[0.4997698963]}, +{"learn":[0.4985714258],"iteration":217,"passed_time":4.601161475,"remaining_time":100.930065,"test":[0.4997651577]}, +{"learn":[0.498565972],"iteration":218,"passed_time":4.63510174,"remaining_time":101.1891389,"test":[0.4997605682]}, +{"learn":[0.4985425176],"iteration":219,"passed_time":4.667554659,"remaining_time":101.4132331,"test":[0.4997393191]}, +{"learn":[0.4985390903],"iteration":220,"passed_time":4.704907166,"remaining_time":101.7409563,"test":[0.4997361005]}, +{"learn":[0.49853763],"iteration":221,"passed_time":4.74281666,"remaining_time":102.0773784,"test":[0.4997347892]}, +{"learn":[0.4985321762],"iteration":222,"passed_time":4.7774803,"remaining_time":102.3409121,"test":[0.4997301996]}, +{"learn":[0.4985293748],"iteration":223,"passed_time":4.813866905,"remaining_time":102.6385194,"test":[0.4997277558]}, +{"learn":[0.4985060694],"iteration":224,"passed_time":4.846966657,"remaining_time":102.8634035,"test":[0.4997065962]}, +{"learn":[0.498416871],"iteration":225,"passed_time":4.880190962,"remaining_time":103.0886356,"test":[0.499627024]}, +{"learn":[0.4984138014],"iteration":226,"passed_time":4.918414666,"remaining_time":103.4167101,"test":[0.4996247888]}, +{"learn":[0.4984113576],"iteration":227,"passed_time":4.954553798,"remaining_time":103.6979418,"test":[0.4996222556]}, +{"learn":[0.4983705284],"iteration":228,"passed_time":4.985881338,"remaining_time":103.8761566,"test":[0.4995842577]}, +{"learn":[0.4983645381],"iteration":229,"passed_time":5.019896845,"remaining_time":104.1082954,"test":[0.4995788634]}, +{"learn":[0.4983524384],"iteration":230,"passed_time":5.052814724,"remaining_time":104.3154693,"test":[0.4995679856]}, +{"learn":[0.4983429911],"iteration":231,"passed_time":5.0881889,"remaining_time":104.5710546,"test":[0.4995595813]}, +{"learn":[0.4983403387],"iteration":232,"passed_time":5.124788893,"remaining_time":104.8492217,"test":[0.4995572866]}, +{"learn":[0.49833712],"iteration":233,"passed_time":5.160309294,"remaining_time":105.1027098,"test":[0.4995544553]}, +{"learn":[0.4982506039],"iteration":234,"passed_time":5.191337243,"remaining_time":105.2626466,"test":[0.4994786084]}, +{"learn":[0.4982476237],"iteration":235,"passed_time":5.227241985,"remaining_time":105.5194102,"test":[0.4994761944]}, +{"learn":[0.4982452991],"iteration":236,"passed_time":5.263578454,"remaining_time":105.7823805,"test":[0.4994740189]}, +{"learn":[0.4982439282],"iteration":237,"passed_time":5.302586248,"remaining_time":106.0962845,"test":[0.4994728864]}, +{"learn":[0.4982410075],"iteration":238,"passed_time":5.338808553,"remaining_time":106.3517469,"test":[0.4994704128]}, +{"learn":[0.4982385041],"iteration":239,"passed_time":5.375106121,"remaining_time":106.6062714,"test":[0.4994683266]}, +{"learn":[0.4982292654],"iteration":240,"passed_time":5.408219516,"remaining_time":106.7955049,"test":[0.4994595349]}, +{"learn":[0.4982266726],"iteration":241,"passed_time":5.445065199,"remaining_time":107.0562819,"test":[0.499457121]}, +{"learn":[0.4982198181],"iteration":242,"passed_time":5.479509424,"remaining_time":107.2675981,"test":[0.4994512499]}, +{"learn":[0.4982087614],"iteration":243,"passed_time":5.51438563,"remaining_time":107.4853199,"test":[0.4994410575]}, +{"learn":[0.4981828632],"iteration":244,"passed_time":5.546310659,"remaining_time":107.6437028,"test":[0.4994173051]}, +{"learn":[0.4981814923],"iteration":245,"passed_time":5.585416146,"remaining_time":107.9393023,"test":[0.4994161428]}, +{"learn":[0.4981699886],"iteration":246,"passed_time":5.618382423,"remaining_time":108.1140553,"test":[0.4994054139]}, +{"learn":[0.498164952],"iteration":247,"passed_time":5.653337925,"remaining_time":108.3252493,"test":[0.4994009138]}, +{"learn":[0.4981603327],"iteration":248,"passed_time":5.689302719,"remaining_time":108.5537238,"test":[0.4993968607]}, +{"learn":[0.4981560709],"iteration":249,"passed_time":5.724574459,"remaining_time":108.7669147,"test":[0.4993925393]}, +{"learn":[0.498153806],"iteration":250,"passed_time":5.761170311,"remaining_time":109.0031785,"test":[0.4993904532]}, +{"learn":[0.4981445076],"iteration":251,"passed_time":5.795075579,"remaining_time":109.1865827,"test":[0.4993819297]}, +{"learn":[0.4981399181],"iteration":252,"passed_time":5.830009086,"remaining_time":109.3875618,"test":[0.4993779064]}, +{"learn":[0.4981348517],"iteration":253,"passed_time":5.865629118,"remaining_time":109.599511,"test":[0.4993733764]}, +{"learn":[0.4981333616],"iteration":254,"passed_time":5.903284245,"remaining_time":109.8473872,"test":[0.4993721545]}, +{"learn":[0.4981164934],"iteration":255,"passed_time":5.936048854,"remaining_time":110.0024053,"test":[0.4993561507]}, +{"learn":[0.4981142881],"iteration":256,"passed_time":5.974295499,"remaining_time":110.2571344,"test":[0.4993542434]}, +{"learn":[0.4981113376],"iteration":257,"passed_time":6.010099323,"remaining_time":110.4646938,"test":[0.4993516804]}, +{"learn":[0.4981052282],"iteration":258,"passed_time":6.045621792,"remaining_time":110.6652236,"test":[0.4993463457]}, +{"learn":[0.4981036188],"iteration":259,"passed_time":6.084180034,"remaining_time":110.9192822,"test":[0.4993448258]}, +{"learn":[0.4980181458],"iteration":260,"passed_time":6.116280088,"remaining_time":111.0538365,"test":[0.4992679954]}, +{"learn":[0.4980132582],"iteration":261,"passed_time":6.151895261,"remaining_time":111.2506861,"test":[0.4992632569]}, +{"learn":[0.4980118873],"iteration":262,"passed_time":6.191518527,"remaining_time":111.5179592,"test":[0.4992621244]}, +{"learn":[0.4980103972],"iteration":263,"passed_time":6.229740598,"remaining_time":111.7577707,"test":[0.4992607535]}, +{"learn":[0.498000622],"iteration":264,"passed_time":6.2649494,"remaining_time":111.941643,"test":[0.499252379]}, +{"learn":[0.4979993703],"iteration":265,"passed_time":6.302956707,"remaining_time":112.1736731,"test":[0.4992510677]}, +{"learn":[0.4979943337],"iteration":266,"passed_time":6.337184062,"remaining_time":112.3366748,"test":[0.4992465974]}, +{"learn":[0.4979897442],"iteration":267,"passed_time":6.373615495,"remaining_time":112.5371214,"test":[0.4992427231]}, +{"learn":[0.4979805651],"iteration":268,"passed_time":6.408915193,"remaining_time":112.7159025,"test":[0.4992345572]}, +{"learn":[0.4979773464],"iteration":269,"passed_time":6.445893943,"remaining_time":112.9225124,"test":[0.4992324711]}, +{"learn":[0.4979729655],"iteration":270,"passed_time":6.482568097,"remaining_time":113.1220093,"test":[0.4992279411]}, +{"learn":[0.4979685547],"iteration":271,"passed_time":6.51855948,"remaining_time":113.3079015,"test":[0.4992239774]}, +{"learn":[0.497967303],"iteration":272,"passed_time":6.557398949,"remaining_time":113.5414829,"test":[0.4992228151]}, +{"learn":[0.4979647698],"iteration":273,"passed_time":6.593261028,"remaining_time":113.7217212,"test":[0.4992203713]}, +{"learn":[0.4979621472],"iteration":274,"passed_time":6.630857291,"remaining_time":113.9301844,"test":[0.4992178679]}, +{"learn":[0.4979391697],"iteration":275,"passed_time":6.663513819,"remaining_time":114.0523162,"test":[0.4991967083]}, +{"learn":[0.4979370537],"iteration":276,"passed_time":6.700641252,"remaining_time":114.2495619,"test":[0.4991943539]}, +{"learn":[0.4979355338],"iteration":277,"passed_time":6.739106149,"remaining_time":114.467839,"test":[0.4991930426]}, +{"learn":[0.497930825],"iteration":278,"passed_time":6.776072879,"remaining_time":114.658925,"test":[0.4991889895]}, +{"learn":[0.4979284706],"iteration":279,"passed_time":6.814523232,"remaining_time":114.8733916,"test":[0.4991869629]}, +{"learn":[0.4979247453],"iteration":280,"passed_time":6.849510267,"remaining_time":115.0278966,"test":[0.4991835059]}, +{"learn":[0.4979223015],"iteration":281,"passed_time":6.886876703,"remaining_time":115.2208663,"test":[0.4991813303]}, +{"learn":[0.4979187551],"iteration":282,"passed_time":6.923665612,"remaining_time":115.402582,"test":[0.4991786779]}, +{"learn":[0.497915745],"iteration":283,"passed_time":6.960018705,"remaining_time":115.5755219,"test":[0.4991762341]}, +{"learn":[0.4979142549],"iteration":284,"passed_time":6.998193247,"remaining_time":115.7771269,"test":[0.4991749824]}, +{"learn":[0.4979132118],"iteration":285,"passed_time":7.036606712,"remaining_time":115.9809932,"test":[0.4991737605]}, +{"learn":[0.4978962543],"iteration":286,"passed_time":7.069627355,"remaining_time":116.0946123,"test":[0.4991573096]}, +{"learn":[0.4978929463],"iteration":287,"passed_time":7.105887378,"remaining_time":116.2602129,"test":[0.4991545976]}, +{"learn":[0.4978915455],"iteration":288,"passed_time":7.144845089,"remaining_time":116.4683917,"test":[0.4991534949]}, +{"learn":[0.4978891018],"iteration":289,"passed_time":7.181417032,"remaining_time":116.636118,"test":[0.4991511704]}, +{"learn":[0.4978877309],"iteration":290,"passed_time":7.22084058,"remaining_time":116.8485852,"test":[0.4991500081]}, +{"learn":[0.4978789392],"iteration":291,"passed_time":7.256043613,"remaining_time":116.9912785,"test":[0.4991423489]}, +{"learn":[0.4978763464],"iteration":292,"passed_time":7.292532483,"remaining_time":117.1534143,"test":[0.4991398753]}, +{"learn":[0.4978751841],"iteration":293,"passed_time":7.332028006,"remaining_time":117.3623258,"test":[0.4991387726]}, +{"learn":[0.4978739026],"iteration":294,"passed_time":7.370533922,"remaining_time":117.5537698,"test":[0.4991375507]}, +{"learn":[0.4978711906],"iteration":295,"passed_time":7.407551491,"remaining_time":117.7200075,"test":[0.4991350473]}, +{"learn":[0.4978683295],"iteration":296,"passed_time":7.445621178,"remaining_time":117.9015367,"test":[0.4991327227]}, +{"learn":[0.4978625479],"iteration":297,"passed_time":7.482276849,"remaining_time":118.059281,"test":[0.4991277159]}, +{"learn":[0.4978570941],"iteration":298,"passed_time":7.517534443,"remaining_time":118.1937439,"test":[0.4991225601]}, +{"learn":[0.4978522661],"iteration":299,"passed_time":7.554435857,"remaining_time":118.3528284,"test":[0.4991184474]}, +{"learn":[0.4978494051],"iteration":300,"passed_time":7.590800205,"remaining_time":118.5022265,"test":[0.4991159738]}, +{"learn":[0.4978402558],"iteration":301,"passed_time":7.62515081,"remaining_time":118.6190679,"test":[0.4991076888]}, +{"learn":[0.4978379014],"iteration":302,"passed_time":7.663128074,"remaining_time":118.7911306,"test":[0.499105692]}, +{"learn":[0.4978331926],"iteration":303,"passed_time":7.69964266,"remaining_time":118.9392169,"test":[0.4991015197]}, +{"learn":[0.4978306594],"iteration":304,"passed_time":7.737825245,"remaining_time":119.1117689,"test":[0.4990993143]}, +{"learn":[0.4978264573],"iteration":305,"passed_time":7.773416122,"remaining_time":119.2431872,"test":[0.499095291]}, +{"learn":[0.4978251162],"iteration":306,"passed_time":7.812773059,"remaining_time":119.4310878,"test":[0.4990941287]}, +{"learn":[0.4978226426],"iteration":307,"passed_time":7.849398718,"remaining_time":119.5759051,"test":[0.4990918041]}, +{"learn":[0.4978186193],"iteration":308,"passed_time":7.886052784,"remaining_time":119.7199793,"test":[0.499088049]}, +{"learn":[0.4978170099],"iteration":309,"passed_time":7.925026742,"remaining_time":119.8979852,"test":[0.4990868271]}, +{"learn":[0.4978140297],"iteration":310,"passed_time":7.962422353,"remaining_time":120.0507987,"test":[0.499084592]}, +{"learn":[0.4978126886],"iteration":311,"passed_time":8.000145493,"remaining_time":120.2073143,"test":[0.4990833403]}, +{"learn":[0.4978096488],"iteration":312,"passed_time":8.037875726,"remaining_time":120.362695,"test":[0.4990808667]}, +{"learn":[0.4978074434],"iteration":313,"passed_time":8.075470746,"remaining_time":120.5148278,"test":[0.4990787805]}, +{"learn":[0.4978048208],"iteration":314,"passed_time":8.112473092,"remaining_time":120.6569411,"test":[0.4990763069]}, +{"learn":[0.4977385106],"iteration":315,"passed_time":8.1430228,"remaining_time":120.7022747,"test":[0.4990148247]}, +{"learn":[0.4977359774],"iteration":316,"passed_time":8.179590399,"remaining_time":120.836031,"test":[0.4990127088]}, +{"learn":[0.4977345171],"iteration":317,"passed_time":8.217375398,"remaining_time":120.9866403,"test":[0.4990114869]}, +{"learn":[0.4977296892],"iteration":318,"passed_time":8.253232624,"remaining_time":121.1077803,"test":[0.4990074934]}, +{"learn":[0.4977250996],"iteration":319,"passed_time":8.289320916,"remaining_time":121.2313184,"test":[0.4990032912]}, +{"learn":[0.4977225664],"iteration":320,"passed_time":8.325403663,"remaining_time":121.3537811,"test":[0.4990012945]}, +{"learn":[0.4977184835],"iteration":321,"passed_time":8.362449827,"remaining_time":121.4892556,"test":[0.4989974202]}, +{"learn":[0.4977139535],"iteration":322,"passed_time":8.398368625,"remaining_time":121.6073376,"test":[0.4989938737]}, +{"learn":[0.4977083209],"iteration":323,"passed_time":8.434379719,"remaining_time":121.7258011,"test":[0.4989887477]}, +{"learn":[0.4977059069],"iteration":324,"passed_time":8.471523769,"remaining_time":121.8596111,"test":[0.4989868106]}, +{"learn":[0.4977038207],"iteration":325,"passed_time":8.508674782,"remaining_time":121.9924722,"test":[0.4989845158]}, +{"learn":[0.4976999166],"iteration":326,"passed_time":8.545865025,"remaining_time":122.124854,"test":[0.4989807905]}, +{"learn":[0.4976964],"iteration":327,"passed_time":8.581805337,"remaining_time":122.238398,"test":[0.4989782573]}, +{"learn":[0.4976922574],"iteration":328,"passed_time":8.617731236,"remaining_time":122.3508286,"test":[0.498974383]}, +{"learn":[0.497689605],"iteration":329,"passed_time":8.654483233,"remaining_time":122.4740506,"test":[0.4989721776]}, +{"learn":[0.4976846877],"iteration":330,"passed_time":8.691069419,"remaining_time":122.5939671,"test":[0.4989679457]}, +{"learn":[0.4976831975],"iteration":331,"passed_time":8.730442175,"remaining_time":122.7521207,"test":[0.4989667536]}, +{"learn":[0.4976820949],"iteration":332,"passed_time":8.769187315,"remaining_time":122.9002919,"test":[0.4989656509]}, +{"learn":[0.4976716938],"iteration":333,"passed_time":8.803522804,"remaining_time":122.9857407,"test":[0.498956144]}, +{"learn":[0.4976611736],"iteration":334,"passed_time":8.837380982,"remaining_time":123.0638277,"test":[0.4989466668]}, +{"learn":[0.4976597729],"iteration":335,"passed_time":8.876499604,"remaining_time":123.2142683,"test":[0.4989455046]}, +{"learn":[0.4976548257],"iteration":336,"passed_time":8.911600981,"remaining_time":123.3079981,"test":[0.4989413918]}, +{"learn":[0.4976505938],"iteration":337,"passed_time":8.94756698,"remaining_time":123.4128913,"test":[0.4989376963]}, +{"learn":[0.4976464215],"iteration":338,"passed_time":8.983377349,"remaining_time":123.5148136,"test":[0.4989337326]}, +{"learn":[0.4976360503],"iteration":339,"passed_time":9.016216029,"remaining_time":123.5751962,"test":[0.4989241959]}, +{"learn":[0.4976272884],"iteration":340,"passed_time":9.050651287,"remaining_time":123.6568456,"test":[0.4989164771]}, +{"learn":[0.49761951],"iteration":341,"passed_time":9.085503971,"remaining_time":123.7435015,"test":[0.4989092649]}, +{"learn":[0.4976182583],"iteration":342,"passed_time":9.12434932,"remaining_time":123.8836583,"test":[0.4989081026]}, +{"learn":[0.4976137283],"iteration":343,"passed_time":9.161699303,"remaining_time":124.0025347,"test":[0.4989043774]}, +{"learn":[0.497612417],"iteration":344,"passed_time":9.198761921,"remaining_time":124.1166282,"test":[0.4989031555]}, +{"learn":[0.4976034763],"iteration":345,"passed_time":9.231967587,"remaining_time":124.1779686,"test":[0.4988955559]}, +{"learn":[0.4976022246],"iteration":346,"passed_time":9.271164719,"remaining_time":124.319105,"test":[0.4988943936]}, +{"learn":[0.4975981715],"iteration":347,"passed_time":9.306120241,"remaining_time":124.4025039,"test":[0.4988905491]}, +{"learn":[0.4975936416],"iteration":348,"passed_time":9.341116722,"remaining_time":124.4857704,"test":[0.4988864662]}, +{"learn":[0.497589201],"iteration":349,"passed_time":9.377648654,"remaining_time":124.5887607,"test":[0.4988827409]}, +{"learn":[0.4975849691],"iteration":350,"passed_time":9.412603757,"remaining_time":124.6700708,"test":[0.4988789262]}, +{"learn":[0.4975761178],"iteration":351,"passed_time":9.445662171,"remaining_time":124.7256755,"test":[0.4988708497]}, +{"learn":[0.4975735548],"iteration":352,"passed_time":9.482776872,"remaining_time":124.834176,"test":[0.4988683762]}, +{"learn":[0.4975696805],"iteration":353,"passed_time":9.51855012,"remaining_time":124.9242482,"test":[0.4988649191]}, +{"learn":[0.4975683096],"iteration":354,"passed_time":9.555534233,"remaining_time":125.029455,"test":[0.4988636972]}, +{"learn":[0.4975657764],"iteration":355,"passed_time":9.592857773,"remaining_time":125.1382907,"test":[0.4988614024]}, +{"learn":[0.497563273],"iteration":356,"passed_time":9.629203053,"remaining_time":125.2335848,"test":[0.498859197]}, +{"learn":[0.4975618127],"iteration":357,"passed_time":9.667437,"remaining_time":125.3526328,"test":[0.4988581242]}, +{"learn":[0.4975602928],"iteration":358,"passed_time":9.705787743,"remaining_time":125.4723145,"test":[0.4988570513]}, +{"learn":[0.4975578192],"iteration":359,"passed_time":9.741942872,"remaining_time":125.5628192,"test":[0.4988549055]}, +{"learn":[0.4975565079],"iteration":360,"passed_time":9.781258026,"remaining_time":125.6932299,"test":[0.4988535644]}, +{"learn":[0.4975538257],"iteration":361,"passed_time":9.818797372,"remaining_time":125.7999509,"test":[0.4988515974]}, +{"learn":[0.4975509646],"iteration":362,"passed_time":9.85644236,"remaining_time":125.9072265,"test":[0.4988491239]}, +{"learn":[0.4975486103],"iteration":363,"passed_time":9.893501676,"remaining_time":126.0062466,"test":[0.4988470377]}, +{"learn":[0.4975473288],"iteration":364,"passed_time":9.931547699,"remaining_time":126.1170509,"test":[0.4988458456]}, +{"learn":[0.4975451532],"iteration":365,"passed_time":9.96778512,"remaining_time":126.2041427,"test":[0.4988438488]}, +{"learn":[0.4975428584],"iteration":366,"passed_time":10.00559966,"remaining_time":126.3104721,"test":[0.4988417031]}, +{"learn":[0.4975414279],"iteration":367,"passed_time":10.0436578,"remaining_time":126.4190841,"test":[0.4988405408]}, +{"learn":[0.4975399676],"iteration":368,"passed_time":10.08242923,"remaining_time":126.535853,"test":[0.4988393785]}, +{"learn":[0.4975383285],"iteration":369,"passed_time":10.12003301,"remaining_time":126.6371698,"test":[0.4988375009]}, +{"learn":[0.4975370768],"iteration":370,"passed_time":10.15883726,"remaining_time":126.7527161,"test":[0.4988365473]}, +{"learn":[0.4975344542],"iteration":371,"passed_time":10.19636797,"remaining_time":126.8515886,"test":[0.4988344015]}, +{"learn":[0.4975331131],"iteration":372,"passed_time":10.23514726,"remaining_time":126.9652182,"test":[0.4988332988]}, +{"learn":[0.4975318018],"iteration":373,"passed_time":10.2730627,"remaining_time":127.0673477,"test":[0.4988320471]}, +{"learn":[0.4975302818],"iteration":374,"passed_time":10.31094303,"remaining_time":127.1682974,"test":[0.4988309444]}, +{"learn":[0.4975261095],"iteration":375,"passed_time":10.3481114,"remaining_time":127.259753,"test":[0.498827249]}, +{"learn":[0.4975240532],"iteration":376,"passed_time":10.38524838,"remaining_time":127.3501413,"test":[0.4988255204]}, +{"learn":[0.4975216988],"iteration":377,"passed_time":10.42297851,"remaining_time":127.4471076,"test":[0.4988234939]}, +{"learn":[0.4975175264],"iteration":378,"passed_time":10.45807753,"remaining_time":127.511283,"test":[0.4988195302]}, +{"learn":[0.4975149932],"iteration":379,"passed_time":10.49623273,"remaining_time":127.6120927,"test":[0.4988171162]}, +{"learn":[0.4975135627],"iteration":380,"passed_time":10.53484307,"remaining_time":127.7176907,"test":[0.4988160433]}, +{"learn":[0.4975121918],"iteration":381,"passed_time":10.57282569,"remaining_time":127.8149451,"test":[0.4988149108]}, +{"learn":[0.4975109401],"iteration":382,"passed_time":10.61166545,"remaining_time":127.9218261,"test":[0.4988137485]}, +{"learn":[0.4975097182],"iteration":383,"passed_time":10.65088341,"remaining_time":128.0324944,"test":[0.4988126756]}, +{"learn":[0.4975073639],"iteration":384,"passed_time":10.68851827,"remaining_time":128.1234073,"test":[0.4988107385]}, +{"learn":[0.4975056055],"iteration":385,"passed_time":10.72597485,"remaining_time":128.2115233,"test":[0.498809457]}, +{"learn":[0.497504026],"iteration":386,"passed_time":10.76466444,"remaining_time":128.3136876,"test":[0.4988085033]}, +{"learn":[0.4975024167],"iteration":387,"passed_time":10.80310724,"remaining_time":128.4121923,"test":[0.4988066555]}, +{"learn":[0.4974998537],"iteration":388,"passed_time":10.83924613,"remaining_time":128.4826835,"test":[0.4988045396]}, +{"learn":[0.4974974397],"iteration":389,"passed_time":10.87550702,"remaining_time":128.5540702,"test":[0.4988024236]}, +{"learn":[0.497496337],"iteration":390,"passed_time":10.91416433,"remaining_time":128.6531545,"test":[0.4988012911]}, +{"learn":[0.4974915388],"iteration":391,"passed_time":10.95023442,"remaining_time":128.721123,"test":[0.4987974764]}, +{"learn":[0.4974902275],"iteration":392,"passed_time":10.98949515,"remaining_time":128.8259647,"test":[0.4987963141]}, +{"learn":[0.497485936],"iteration":393,"passed_time":11.02503968,"remaining_time":128.8866314,"test":[0.4987925293]}, +{"learn":[0.497480363],"iteration":394,"passed_time":11.05922427,"remaining_time":128.9309564,"test":[0.4987873734]}, +{"learn":[0.4974758032],"iteration":395,"passed_time":11.09398212,"remaining_time":128.9815496,"test":[0.4987835886]}, +{"learn":[0.4974746409],"iteration":396,"passed_time":11.13185852,"remaining_time":129.067871,"test":[0.4987825157]}, +{"learn":[0.4974732998],"iteration":397,"passed_time":11.17165048,"remaining_time":129.1757173,"test":[0.498781264]}, +{"learn":[0.4974718097],"iteration":398,"passed_time":11.20992444,"remaining_time":129.2653192,"test":[0.4987802209]}, +{"learn":[0.4974568191],"iteration":399,"passed_time":11.24242312,"remaining_time":129.2878658,"test":[0.4987666608]}, +{"learn":[0.497455478],"iteration":400,"passed_time":11.27990837,"remaining_time":129.3673281,"test":[0.4987652899]}, +{"learn":[0.4974539581],"iteration":401,"passed_time":11.31797971,"remaining_time":129.4529122,"test":[0.498764217]}, +{"learn":[0.4974528554],"iteration":402,"passed_time":11.35639665,"remaining_time":129.5418248,"test":[0.4987631144]}, +{"learn":[0.4974519613],"iteration":403,"passed_time":11.39574085,"remaining_time":129.6406558,"test":[0.4987620415]}, +{"learn":[0.4974493983],"iteration":404,"passed_time":11.43377393,"remaining_time":129.7239289,"test":[0.4987598361]}, +{"learn":[0.4974472824],"iteration":405,"passed_time":11.47084197,"remaining_time":129.7956848,"test":[0.4987580778]}, +{"learn":[0.4974393252],"iteration":406,"passed_time":11.50737037,"remaining_time":129.860816,"test":[0.4987511338]}, +{"learn":[0.4974383119],"iteration":407,"passed_time":11.54684708,"remaining_time":129.9586319,"test":[0.4987498821]}, +{"learn":[0.4974360171],"iteration":408,"passed_time":11.58513501,"remaining_time":130.0424324,"test":[0.4987477364]}, +{"learn":[0.4974347654],"iteration":409,"passed_time":11.62459186,"remaining_time":130.1387235,"test":[0.4987466933]}, +{"learn":[0.4974320534],"iteration":410,"passed_time":11.66096403,"remaining_time":130.1999123,"test":[0.4987445475]}, +{"learn":[0.4974280897],"iteration":411,"passed_time":11.69776533,"remaining_time":130.2654062,"test":[0.498741001]}, +{"learn":[0.4974269572],"iteration":412,"passed_time":11.73756199,"remaining_time":130.3636727,"test":[0.4987399282]}, +{"learn":[0.4974259141],"iteration":413,"passed_time":11.77578556,"remaining_time":130.4438468,"test":[0.4987387063]}, +{"learn":[0.4974246028],"iteration":414,"passed_time":11.81384315,"remaining_time":130.5216165,"test":[0.498737842]}, +{"learn":[0.4974201623],"iteration":415,"passed_time":11.84984335,"remaining_time":130.5761585,"test":[0.4987341167]}, +{"learn":[0.4974155131],"iteration":416,"passed_time":11.88538523,"remaining_time":130.625229,"test":[0.4987301828]}, +{"learn":[0.4974106255],"iteration":417,"passed_time":11.91993493,"remaining_time":130.6630188,"test":[0.498725474]}, +{"learn":[0.497409195],"iteration":418,"passed_time":11.9591684,"remaining_time":130.7516716,"test":[0.4987241329]}, +{"learn":[0.497406632],"iteration":419,"passed_time":11.99763963,"remaining_time":130.8314036,"test":[0.4987221958]}, +{"learn":[0.4974044266],"iteration":420,"passed_time":12.03429901,"remaining_time":130.8908673,"test":[0.4987199904]}, +{"learn":[0.4973958138],"iteration":421,"passed_time":12.06772923,"remaining_time":130.9148446,"test":[0.4987118246]}, +{"learn":[0.4973920885],"iteration":422,"passed_time":12.10459878,"remaining_time":130.9757651,"test":[0.4987084569]}, +{"learn":[0.497388542],"iteration":423,"passed_time":12.14015106,"remaining_time":131.0220077,"test":[0.4987052979]}, +{"learn":[0.4973824325],"iteration":424,"passed_time":12.17669802,"remaining_time":131.0785728,"test":[0.4987004997]}, +{"learn":[0.4973801378],"iteration":425,"passed_time":12.21262063,"remaining_time":131.1279971,"test":[0.4986981453]}, +{"learn":[0.4973777536],"iteration":426,"passed_time":12.24978646,"remaining_time":131.1903361,"test":[0.4986962082]}, +{"learn":[0.4973765317],"iteration":427,"passed_time":12.28788241,"remaining_time":131.2621458,"test":[0.4986951651]}, +{"learn":[0.4973738495],"iteration":428,"passed_time":12.32541654,"remaining_time":131.3274569,"test":[0.4986928107]}, +{"learn":[0.4973726872],"iteration":429,"passed_time":12.3646098,"remaining_time":131.4099228,"test":[0.4986916782]}, +{"learn":[0.497362763],"iteration":430,"passed_time":12.40014736,"remaining_time":131.4530703,"test":[0.4986826779]}, +{"learn":[0.4973613325],"iteration":431,"passed_time":12.43990838,"remaining_time":131.5405127,"test":[0.4986816348]}, +{"learn":[0.4973602298],"iteration":432,"passed_time":12.47932861,"remaining_time":131.6237731,"test":[0.4986805023]}, +{"learn":[0.4973549846],"iteration":433,"passed_time":12.51451664,"remaining_time":131.6619424,"test":[0.4986760916]}, +{"learn":[0.4973506633],"iteration":434,"passed_time":12.54997948,"remaining_time":131.7026582,"test":[0.4986719789]}, +{"learn":[0.4973494116],"iteration":435,"passed_time":12.59011626,"remaining_time":131.791951,"test":[0.4986709358]}, +{"learn":[0.4973480705],"iteration":436,"passed_time":12.6287436,"remaining_time":131.8648903,"test":[0.4986697437]}, +{"learn":[0.4973446432],"iteration":437,"passed_time":12.66434235,"remaining_time":131.9057758,"test":[0.4986667337]}, +{"learn":[0.4973430935],"iteration":438,"passed_time":12.70314495,"remaining_time":131.9795994,"test":[0.4986655416]}, +{"learn":[0.4973414841],"iteration":439,"passed_time":12.74130461,"remaining_time":132.0462478,"test":[0.4986643495]}, +{"learn":[0.4973390404],"iteration":440,"passed_time":12.77782051,"remaining_time":132.0954279,"test":[0.4986623825]}, +{"learn":[0.4973380569],"iteration":441,"passed_time":12.81759467,"remaining_time":132.1778202,"test":[0.4986613394]}, +{"learn":[0.4973365966],"iteration":442,"passed_time":12.85566461,"remaining_time":132.2421301,"test":[0.4986601772]}, +{"learn":[0.497334421],"iteration":443,"passed_time":12.89210947,"remaining_time":132.2893035,"test":[0.4986582698]}, +{"learn":[0.4973272684],"iteration":444,"passed_time":12.92559047,"remaining_time":132.3057632,"test":[0.4986517729]}, +{"learn":[0.4973245862],"iteration":445,"passed_time":12.96265398,"remaining_time":132.358579,"test":[0.4986494185]}, +{"learn":[0.4973225597],"iteration":446,"passed_time":13.00007814,"remaining_time":132.4146662,"test":[0.4986475112]}, +{"learn":[0.4973195794],"iteration":447,"passed_time":13.03677378,"remaining_time":132.4629335,"test":[0.498645127]}, +{"learn":[0.4973141256],"iteration":448,"passed_time":13.07254237,"remaining_time":132.5014261,"test":[0.4986405076]}, +{"learn":[0.4973119202],"iteration":449,"passed_time":13.11036589,"remaining_time":132.5603662,"test":[0.4986385407]}, +{"learn":[0.4973096851],"iteration":450,"passed_time":13.1486546,"remaining_time":132.6235693,"test":[0.4986366333]}, +{"learn":[0.497308493],"iteration":451,"passed_time":13.18758548,"remaining_time":132.6927849,"test":[0.4986354412]}, +{"learn":[0.497305632],"iteration":452,"passed_time":13.22349479,"remaining_time":132.7311939,"test":[0.4986335041]}, +{"learn":[0.4973035458],"iteration":453,"passed_time":13.26042968,"remaining_time":132.7795447,"test":[0.4986312689]}, +{"learn":[0.4972983006],"iteration":454,"passed_time":13.29579139,"remaining_time":132.8118063,"test":[0.4986265005]}, +{"learn":[0.4972969595],"iteration":455,"passed_time":13.33348012,"remaining_time":132.8669598,"test":[0.4986251594]}, +{"learn":[0.4972957674],"iteration":456,"passed_time":13.37239027,"remaining_time":132.933849,"test":[0.4986242654]}, +{"learn":[0.4972942177],"iteration":457,"passed_time":13.41250426,"remaining_time":133.0122147,"test":[0.4986230137]}, +{"learn":[0.4972926083],"iteration":458,"passed_time":13.45059704,"remaining_time":133.0700679,"test":[0.4986217024]}, +{"learn":[0.4972915951],"iteration":459,"passed_time":13.4881762,"remaining_time":133.1224347,"test":[0.4986205401]}, +{"learn":[0.4972889427],"iteration":460,"passed_time":13.52538878,"remaining_time":133.1708019,"test":[0.4986182453]}, +{"learn":[0.4972865287],"iteration":461,"passed_time":13.56299261,"remaining_time":133.2226417,"test":[0.4986161889]}, +{"learn":[0.4972848895],"iteration":462,"passed_time":13.60257919,"remaining_time":133.2935243,"test":[0.4986150564]}, +{"learn":[0.4972766045],"iteration":463,"passed_time":13.63688832,"remaining_time":133.3123392,"test":[0.4986080827]}, +{"learn":[0.4972591403],"iteration":464,"passed_time":13.67044949,"remaining_time":133.3236311,"test":[0.4985929431]}, +{"learn":[0.4972555045],"iteration":465,"passed_time":13.70643389,"remaining_time":133.3583074,"test":[0.4985895159]}, +{"learn":[0.4972509447],"iteration":466,"passed_time":13.74248776,"remaining_time":133.3933555,"test":[0.4985854627]}, +{"learn":[0.4972469512],"iteration":467,"passed_time":13.77749384,"remaining_time":133.4179532,"test":[0.4985819461]}, +{"learn":[0.4972427789],"iteration":468,"passed_time":13.8145339,"remaining_time":133.4619469,"test":[0.4985782804]}, +{"learn":[0.4972386065],"iteration":469,"passed_time":13.84963438,"remaining_time":133.4869016,"test":[0.4985747935]}, +{"learn":[0.4972345534],"iteration":470,"passed_time":13.88493364,"remaining_time":133.5135126,"test":[0.4985710086]}, +{"learn":[0.4972304407],"iteration":471,"passed_time":13.92227237,"remaining_time":133.5594265,"test":[0.4985677006]}, +{"learn":[0.4972290996],"iteration":472,"passed_time":13.96089777,"remaining_time":133.6173028,"test":[0.4985665085]}, +{"learn":[0.4972264174],"iteration":473,"passed_time":13.99663479,"remaining_time":133.6471921,"test":[0.4985641541]}, +{"learn":[0.4972237948],"iteration":474,"passed_time":14.03412425,"remaining_time":133.6934995,"test":[0.4985620977]}, +{"learn":[0.4972216192],"iteration":475,"passed_time":14.07117027,"remaining_time":133.7352401,"test":[0.4985601904]}, +{"learn":[0.4972203377],"iteration":476,"passed_time":14.10985304,"remaining_time":133.7921704,"test":[0.4985592367]}, +{"learn":[0.4972183708],"iteration":477,"passed_time":14.14771574,"remaining_time":133.8409426,"test":[0.4985571803]}, +{"learn":[0.4972171787],"iteration":478,"passed_time":14.1887031,"remaining_time":133.9188449,"test":[0.498556018]}, +{"learn":[0.4972136918],"iteration":479,"passed_time":14.22514974,"remaining_time":133.9534934,"test":[0.4985528888]}, +{"learn":[0.4972099069],"iteration":480,"passed_time":14.26139987,"remaining_time":133.9860001,"test":[0.4985495509]}, +{"learn":[0.4972071949],"iteration":481,"passed_time":14.298954,"remaining_time":134.0304443,"test":[0.4985471668]}, +{"learn":[0.4972058538],"iteration":482,"passed_time":14.33744275,"remaining_time":134.0832896,"test":[0.4985461237]}, +{"learn":[0.4972004],"iteration":483,"passed_time":14.37232239,"remaining_time":134.1020825,"test":[0.4985415937]}, +{"learn":[0.4971989993],"iteration":484,"passed_time":14.41154567,"remaining_time":134.1610901,"test":[0.4985403718]}, +{"learn":[0.4971946779],"iteration":485,"passed_time":14.44846929,"remaining_time":134.1983341,"test":[0.4985368552]}, +{"learn":[0.4971900288],"iteration":486,"passed_time":14.48407254,"remaining_time":134.2230377,"test":[0.4985326828]}, +{"learn":[0.4971135262],"iteration":487,"passed_time":14.51536023,"remaining_time":134.2075929,"test":[0.4984646441]}, +{"learn":[0.4971098009],"iteration":488,"passed_time":14.55165309,"remaining_time":134.2382558,"test":[0.4984611275]}, +{"learn":[0.4971072975],"iteration":489,"passed_time":14.58952653,"remaining_time":134.2831932,"test":[0.4984591009]}, +{"learn":[0.4971035424],"iteration":490,"passed_time":14.62576129,"remaining_time":134.3127447,"test":[0.4984559717]}, +{"learn":[0.4970997277],"iteration":491,"passed_time":14.66090858,"remaining_time":134.3320648,"test":[0.498452306]}, +{"learn":[0.4970983568],"iteration":492,"passed_time":14.69891178,"remaining_time":134.3772726,"test":[0.4984512629]}, +{"learn":[0.4970969859],"iteration":493,"passed_time":14.73762507,"remaining_time":134.4286206,"test":[0.4984502794]}, +{"learn":[0.4970948998],"iteration":494,"passed_time":14.77565768,"remaining_time":134.4734098,"test":[0.4984483125]}, +{"learn":[0.497093052],"iteration":495,"passed_time":14.81242063,"remaining_time":134.5063357,"test":[0.4984467627]}, +{"learn":[0.4970890883],"iteration":496,"passed_time":14.84876619,"remaining_time":134.5351995,"test":[0.4984432461]}, +{"learn":[0.4970848564],"iteration":497,"passed_time":14.88478678,"remaining_time":134.5608636,"test":[0.4984398486]}, +{"learn":[0.4970828298],"iteration":498,"passed_time":14.92139448,"remaining_time":134.5915762,"test":[0.4984378817]}, +{"learn":[0.4970815185],"iteration":499,"passed_time":14.95852249,"remaining_time":134.6267024,"test":[0.4984368386]}, +{"learn":[0.497079492],"iteration":500,"passed_time":14.99559776,"remaining_time":134.6610665,"test":[0.498434961]}, +{"learn":[0.4970782403],"iteration":501,"passed_time":15.0338642,"remaining_time":134.7058191,"test":[0.4984339179]}, +{"learn":[0.4970763627],"iteration":502,"passed_time":15.07099074,"remaining_time":134.7400504,"test":[0.4984319808]}, +{"learn":[0.4970736209],"iteration":503,"passed_time":15.10849836,"remaining_time":134.7773981,"test":[0.4984297754]}, +{"learn":[0.4970710281],"iteration":504,"passed_time":15.14387441,"remaining_time":134.7954762,"test":[0.4984278383]}, +{"learn":[0.4970697764],"iteration":505,"passed_time":15.182288,"remaining_time":134.8403207,"test":[0.4984265866]}, +{"learn":[0.4970684353],"iteration":506,"passed_time":15.22010092,"remaining_time":134.8795137,"test":[0.4984256031]}, +{"learn":[0.4970662299],"iteration":507,"passed_time":15.25822682,"remaining_time":134.921171,"test":[0.4984232189]}, +{"learn":[0.497064859],"iteration":508,"passed_time":15.29676305,"remaining_time":134.9661353,"test":[0.498422295]}, +{"learn":[0.497059733],"iteration":509,"passed_time":15.332211,"remaining_time":134.9835831,"test":[0.4984172286]}, +{"learn":[0.4970581833],"iteration":510,"passed_time":15.3699084,"remaining_time":135.0205848,"test":[0.4984163048]}, +{"learn":[0.4970557991],"iteration":511,"passed_time":15.40674779,"remaining_time":135.0497736,"test":[0.4984140398]}, +{"learn":[0.4970534149],"iteration":512,"passed_time":15.44619179,"remaining_time":135.1014864,"test":[0.4984116854]}, +{"learn":[0.4970512394],"iteration":513,"passed_time":15.48429374,"remaining_time":135.1411317,"test":[0.4984098377]}, +{"learn":[0.4970489446],"iteration":514,"passed_time":15.52260428,"remaining_time":135.1822917,"test":[0.4984079601]}, +{"learn":[0.4970468882],"iteration":515,"passed_time":15.56067515,"remaining_time":135.2210608,"test":[0.4984059038]}, +{"learn":[0.4970454577],"iteration":516,"passed_time":15.59871973,"remaining_time":135.2593048,"test":[0.4984048905]}, +{"learn":[0.4970441464],"iteration":517,"passed_time":15.63830478,"remaining_time":135.3105831,"test":[0.4984037878]}, +{"learn":[0.4970402423],"iteration":518,"passed_time":15.67432616,"remaining_time":135.3307428,"test":[0.4984005692]}, +{"learn":[0.4970381561],"iteration":519,"passed_time":15.71162177,"remaining_time":135.3616645,"test":[0.4983986916]}, +{"learn":[0.4970223013],"iteration":520,"passed_time":15.74464663,"remaining_time":135.3556089,"test":[0.4983834924]}, +{"learn":[0.4970201853],"iteration":521,"passed_time":15.78201474,"remaining_time":135.3867088,"test":[0.4983815851]}, +{"learn":[0.4970159534],"iteration":522,"passed_time":15.81658648,"remaining_time":135.3936094,"test":[0.4983777406]}, +{"learn":[0.4970138077],"iteration":523,"passed_time":15.85453195,"remaining_time":135.4291699,"test":[0.4983759226]}, +{"learn":[0.4970123473],"iteration":524,"passed_time":15.89304576,"remaining_time":135.4692948,"test":[0.4983748199]}, +{"learn":[0.4970083836],"iteration":525,"passed_time":15.92849284,"remaining_time":135.4830361,"test":[0.4983704986]}, +{"learn":[0.4970069233],"iteration":526,"passed_time":15.96685071,"remaining_time":135.5212964,"test":[0.4983694853]}, +{"learn":[0.4970042709],"iteration":527,"passed_time":16.00227598,"remaining_time":135.5344284,"test":[0.4983673098]}, +{"learn":[0.4970028404],"iteration":528,"passed_time":16.04132768,"remaining_time":135.5780266,"test":[0.4983664157]}, +{"learn":[0.4970005456],"iteration":529,"passed_time":16.07927017,"remaining_time":135.6119578,"test":[0.4983643295]}, +{"learn":[0.4969983999],"iteration":530,"passed_time":16.11669088,"remaining_time":135.641227,"test":[0.498362452]}, +{"learn":[0.4969935421],"iteration":531,"passed_time":16.15138358,"remaining_time":135.6473343,"test":[0.4983580114]}, +{"learn":[0.4969899658],"iteration":532,"passed_time":16.18829009,"remaining_time":135.6718421,"test":[0.4983549418]}, +{"learn":[0.4969865683],"iteration":533,"passed_time":16.22419334,"remaining_time":135.6877293,"test":[0.4983516933]}, +{"learn":[0.4969844822],"iteration":534,"passed_time":16.26235288,"remaining_time":135.7222535,"test":[0.4983499648]}, +{"learn":[0.4969824556],"iteration":535,"passed_time":16.30092752,"remaining_time":135.7599635,"test":[0.4983482363]}, +{"learn":[0.4969784323],"iteration":536,"passed_time":16.33576537,"remaining_time":135.766333,"test":[0.4983449282]}, +{"learn":[0.4969773296],"iteration":537,"passed_time":16.37481959,"remaining_time":135.8075186,"test":[0.4983437659]}, +{"learn":[0.4969759885],"iteration":538,"passed_time":16.41431862,"remaining_time":135.8520879,"test":[0.4983427825]}, +{"learn":[0.4969747368],"iteration":539,"passed_time":16.45249609,"remaining_time":135.8854307,"test":[0.4983417692]}, +{"learn":[0.4969723526],"iteration":540,"passed_time":16.48844219,"remaining_time":135.9001178,"test":[0.4983396234]}, +{"learn":[0.4969712797],"iteration":541,"passed_time":16.52717177,"remaining_time":135.9375125,"test":[0.4983385803]}, +{"learn":[0.4969674054],"iteration":542,"passed_time":16.5620748,"remaining_time":135.943218,"test":[0.4983351531]}, +{"learn":[0.4969661537],"iteration":543,"passed_time":16.59982611,"remaining_time":135.972105,"test":[0.4983340802]}, +{"learn":[0.4969650213],"iteration":544,"passed_time":16.63704887,"remaining_time":135.996427,"test":[0.4983330073]}, +{"learn":[0.4969613258],"iteration":545,"passed_time":16.67367534,"remaining_time":136.0156592,"test":[0.4983298781]}, +{"learn":[0.4969600145],"iteration":546,"passed_time":16.71180831,"remaining_time":136.0469514,"test":[0.498328835]}, +{"learn":[0.496958733],"iteration":547,"passed_time":16.750509,"remaining_time":136.0826023,"test":[0.4983278217]}, +{"learn":[0.4969511036],"iteration":548,"passed_time":16.7838411,"remaining_time":136.0744567,"test":[0.4983213248]}, +{"learn":[0.4969498519],"iteration":549,"passed_time":16.82291211,"remaining_time":136.1126525,"test":[0.4983203115]}, +{"learn":[0.4969476167],"iteration":550,"passed_time":16.86043148,"remaining_time":136.1380393,"test":[0.4983184936]}, +{"learn":[0.4969454113],"iteration":551,"passed_time":16.89693328,"remaining_time":136.1549986,"test":[0.4983166756]}, +{"learn":[0.4969381992],"iteration":552,"passed_time":16.93137294,"remaining_time":136.1551817,"test":[0.4983097913]}, +{"learn":[0.4969371561],"iteration":553,"passed_time":16.96982457,"remaining_time":136.1874369,"test":[0.498308778]}, +{"learn":[0.4969214801],"iteration":554,"passed_time":17.00261775,"remaining_time":136.1741187,"test":[0.4982938172]}, +{"learn":[0.4969202284],"iteration":555,"passed_time":17.0417326,"remaining_time":136.2112584,"test":[0.4982928338]}, +{"learn":[0.4969150726],"iteration":556,"passed_time":17.07693793,"remaining_time":136.2169393,"test":[0.498288423]}, +{"learn":[0.496912748],"iteration":557,"passed_time":17.11454537,"remaining_time":136.241596,"test":[0.4982865455]}, +{"learn":[0.4969112877],"iteration":558,"passed_time":17.15341424,"remaining_time":136.2760512,"test":[0.4982855918]}, +{"learn":[0.4969099764],"iteration":559,"passed_time":17.19149966,"remaining_time":136.304033,"test":[0.4982844295]}, +{"learn":[0.4969089035],"iteration":560,"passed_time":17.23047678,"remaining_time":136.338835,"test":[0.4982834758]}, +{"learn":[0.4969015423],"iteration":561,"passed_time":17.26409006,"remaining_time":136.3310173,"test":[0.4982762637]}, +{"learn":[0.49689737],"iteration":562,"passed_time":17.30025469,"remaining_time":136.343215,"test":[0.4982726874]}, +{"learn":[0.4968960587],"iteration":563,"passed_time":17.33890868,"remaining_time":136.3748208,"test":[0.4982716145]}, +{"learn":[0.4968910519],"iteration":564,"passed_time":17.37329549,"remaining_time":136.3726823,"test":[0.4982674422]}, +{"learn":[0.4968889657],"iteration":565,"passed_time":17.41101457,"remaining_time":136.3965347,"test":[0.4982657435]}, +{"learn":[0.4968867008],"iteration":566,"passed_time":17.44802956,"remaining_time":136.414665,"test":[0.4982638063]}, +{"learn":[0.4968856577],"iteration":567,"passed_time":17.48637926,"remaining_time":136.4430156,"test":[0.498262793]}, +{"learn":[0.4968781475],"iteration":568,"passed_time":17.51959423,"remaining_time":136.4311459,"test":[0.4982565047]}, +{"learn":[0.4968771044],"iteration":569,"passed_time":17.55814907,"remaining_time":136.4607024,"test":[0.4982555511]}, +{"learn":[0.4968760315],"iteration":570,"passed_time":17.59607037,"remaining_time":136.4851062,"test":[0.4982544782]}, +{"learn":[0.4968734089],"iteration":571,"passed_time":17.63136462,"remaining_time":136.4889555,"test":[0.4982521834]}, +{"learn":[0.496868879],"iteration":572,"passed_time":17.6671391,"remaining_time":136.4963783,"test":[0.4982488753]}, +{"learn":[0.4968677763],"iteration":573,"passed_time":17.7051904,"remaining_time":136.5212068,"test":[0.4982478621]}, +{"learn":[0.4968658689],"iteration":574,"passed_time":17.74106059,"remaining_time":136.5290315,"test":[0.4982456269]}, +{"learn":[0.4968635146],"iteration":575,"passed_time":17.77762924,"remaining_time":136.542069,"test":[0.4982436599]}, +{"learn":[0.4968624119],"iteration":576,"passed_time":17.81522995,"remaining_time":136.5628459,"test":[0.4982427063]}, +{"learn":[0.4968605045],"iteration":577,"passed_time":17.85311503,"remaining_time":136.5855963,"test":[0.4982408585]}, +{"learn":[0.4968592528],"iteration":578,"passed_time":17.89160411,"remaining_time":136.6127492,"test":[0.498239875]}, +{"learn":[0.4968441132],"iteration":579,"passed_time":17.92477386,"remaining_time":136.5991387,"test":[0.4982262554]}, +{"learn":[0.4968422059],"iteration":580,"passed_time":17.96302758,"remaining_time":136.6241289,"test":[0.4982246759]}, +{"learn":[0.4968384806],"iteration":581,"passed_time":17.99901893,"remaining_time":136.6317279,"test":[0.4982214572]}, +{"learn":[0.4968369905],"iteration":582,"passed_time":18.03692885,"remaining_time":136.6537131,"test":[0.4982205333]}, +{"learn":[0.4968358878],"iteration":583,"passed_time":18.07517768,"remaining_time":136.6780559,"test":[0.4982196393]}, +{"learn":[0.4968336526],"iteration":584,"passed_time":18.11119588,"remaining_time":136.6853501,"test":[0.4982175233]}, +{"learn":[0.4968315367],"iteration":585,"passed_time":18.14969206,"remaining_time":136.7111617,"test":[0.498215765]}, +{"learn":[0.4968284074],"iteration":586,"passed_time":18.1858331,"remaining_time":136.7190485,"test":[0.4982127251]}, +{"learn":[0.4968273345],"iteration":587,"passed_time":18.2237633,"remaining_time":136.7402103,"test":[0.4982116523]}, +{"learn":[0.4968252484],"iteration":588,"passed_time":18.26159243,"remaining_time":136.7604146,"test":[0.4982100727]}, +{"learn":[0.4968226854],"iteration":589,"passed_time":18.29983449,"remaining_time":136.7835086,"test":[0.4982077481]}, +{"learn":[0.4968190793],"iteration":590,"passed_time":18.33499542,"remaining_time":136.7834091,"test":[0.4982050063]}, +{"learn":[0.4968172614],"iteration":591,"passed_time":18.37235639,"remaining_time":136.7995726,"test":[0.4982030692]}, +{"learn":[0.4968129102],"iteration":592,"passed_time":18.40998175,"remaining_time":136.8175203,"test":[0.4981997909]}, +{"learn":[0.4968093041],"iteration":593,"passed_time":18.44656218,"remaining_time":136.8275303,"test":[0.4981967213]}, +{"learn":[0.4968073074],"iteration":594,"passed_time":18.48342966,"remaining_time":136.8395087,"test":[0.4981947841]}, +{"learn":[0.4968060557],"iteration":595,"passed_time":18.52086685,"remaining_time":136.8555329,"test":[0.4981938305]}, +{"learn":[0.4968052212],"iteration":596,"passed_time":18.55971721,"remaining_time":136.8818004,"test":[0.498192847]}, +{"learn":[0.4968009893],"iteration":597,"passed_time":18.59483416,"remaining_time":136.8803678,"test":[0.4981894197]}, +{"learn":[0.4967991117],"iteration":598,"passed_time":18.63229709,"remaining_time":136.8960593,"test":[0.4981874826]}, +{"learn":[0.496797115],"iteration":599,"passed_time":18.6689501,"remaining_time":136.9056341,"test":[0.4981856348]}, +{"learn":[0.496794403],"iteration":600,"passed_time":18.70703212,"remaining_time":136.9255146,"test":[0.4981834593]}, +{"learn":[0.4967920486],"iteration":601,"passed_time":18.74396205,"remaining_time":136.9367859,"test":[0.4981814923]}, +{"learn":[0.4967907075],"iteration":602,"passed_time":18.78189135,"remaining_time":136.9551845,"test":[0.4981803598]}, +{"learn":[0.4967894558],"iteration":603,"passed_time":18.81990428,"remaining_time":136.9740053,"test":[0.4981794657]}, +{"learn":[0.496787012],"iteration":604,"passed_time":18.85636109,"remaining_time":136.9813338,"test":[0.4981774392]}, +{"learn":[0.496784598],"iteration":605,"passed_time":18.89253307,"remaining_time":136.9864527,"test":[0.4981752338]}, +{"learn":[0.4967812006],"iteration":606,"passed_time":18.92862129,"remaining_time":136.9908292,"test":[0.498172194]}, +{"learn":[0.4967786674],"iteration":607,"passed_time":18.96446083,"remaining_time":136.9932762,"test":[0.498170078]}, +{"learn":[0.4967749421],"iteration":608,"passed_time":18.99981469,"remaining_time":136.9920957,"test":[0.4981667402]}, +{"learn":[0.4967729453],"iteration":609,"passed_time":19.03613318,"remaining_time":136.9977453,"test":[0.4981648328]}, +{"learn":[0.4967650179],"iteration":610,"passed_time":19.06943104,"remaining_time":136.9815594,"test":[0.4981581571]}, +{"learn":[0.4967471067],"iteration":611,"passed_time":19.10111719,"remaining_time":136.9537618,"test":[0.4981392624]}, +{"learn":[0.4967451994],"iteration":612,"passed_time":19.13832618,"remaining_time":136.9654763,"test":[0.4981375637]}, +{"learn":[0.4967436198],"iteration":613,"passed_time":19.17681986,"remaining_time":136.9862083,"test":[0.4981364908]}, +{"learn":[0.4967412058],"iteration":614,"passed_time":19.21450277,"remaining_time":137.0009669,"test":[0.4981345239]}, +{"learn":[0.4967399243],"iteration":615,"passed_time":19.25339599,"remaining_time":137.0241688,"test":[0.4981335404]}, +{"learn":[0.4967388813],"iteration":616,"passed_time":19.29310577,"remaining_time":137.0529701,"test":[0.4981324675]}, +{"learn":[0.4967367653],"iteration":617,"passed_time":19.33172277,"remaining_time":137.0738013,"test":[0.498130739]}, +{"learn":[0.4967347387],"iteration":618,"passed_time":19.3697301,"remaining_time":137.0901253,"test":[0.4981286528]}, +{"learn":[0.4967337851],"iteration":619,"passed_time":19.4094663,"remaining_time":137.1184877,"test":[0.4981276991]}, +{"learn":[0.4967291061],"iteration":620,"passed_time":19.44555312,"remaining_time":137.1208972,"test":[0.4981238248]}, +{"learn":[0.4967270497],"iteration":621,"passed_time":19.48193491,"remaining_time":137.1252589,"test":[0.4981219771]}, +{"learn":[0.4967235927],"iteration":622,"passed_time":19.51851041,"remaining_time":137.1308508,"test":[0.4981188776]}, +{"learn":[0.4967215065],"iteration":623,"passed_time":19.55545016,"remaining_time":137.138862,"test":[0.4981171193]}, +{"learn":[0.496720225],"iteration":624,"passed_time":19.59367345,"remaining_time":137.1557142,"test":[0.4981161656]}, +{"learn":[0.4967189733],"iteration":625,"passed_time":19.63236792,"remaining_time":137.1756826,"test":[0.4981150927]}, +{"learn":[0.4967177216],"iteration":626,"passed_time":19.67039076,"remaining_time":137.1907796,"test":[0.4981141093]}, +{"learn":[0.496714503],"iteration":627,"passed_time":19.7068279,"remaining_time":137.1946681,"test":[0.49811098]}, +{"learn":[0.4967122976],"iteration":628,"passed_time":19.74309451,"remaining_time":137.1972434,"test":[0.4981093111]}, +{"learn":[0.4967109565],"iteration":629,"passed_time":19.78145036,"remaining_time":137.2141874,"test":[0.4981081488]}, +{"learn":[0.4967090193],"iteration":630,"passed_time":19.81870991,"remaining_time":137.2233654,"test":[0.4981065991]}, +{"learn":[0.4967059497],"iteration":631,"passed_time":19.85569871,"remaining_time":137.2305253,"test":[0.4981036188]}, +{"learn":[0.4967046682],"iteration":632,"passed_time":19.89426857,"remaining_time":137.2484532,"test":[0.4981026354]}, +{"learn":[0.4967005257],"iteration":633,"passed_time":19.93000798,"remaining_time":137.2467111,"test":[0.4980991187]}, +{"learn":[0.4966923896],"iteration":634,"passed_time":19.96453161,"remaining_time":137.2365047,"test":[0.4980925324]}, +{"learn":[0.4966901843],"iteration":635,"passed_time":20.00107003,"remaining_time":137.2400466,"test":[0.4980907442]}, +{"learn":[0.4966878895],"iteration":636,"passed_time":20.03808002,"remaining_time":137.2466925,"test":[0.4980887177]}, +{"learn":[0.4966870252],"iteration":637,"passed_time":20.07662189,"remaining_time":137.2636751,"test":[0.4980875852]}, +{"learn":[0.4966842238],"iteration":638,"passed_time":20.1125208,"remaining_time":137.2624463,"test":[0.4980856182]}, +{"learn":[0.4966825549],"iteration":639,"passed_time":20.1511367,"remaining_time":137.2796188,"test":[0.4980840685]}, +{"learn":[0.4966756109],"iteration":640,"passed_time":20.18575904,"remaining_time":137.2694597,"test":[0.4980777802]}, +{"learn":[0.4966745083],"iteration":641,"passed_time":20.2242902,"remaining_time":137.2857581,"test":[0.498076916]}, +{"learn":[0.4966721837],"iteration":642,"passed_time":20.26031241,"remaining_time":137.2848852,"test":[0.4980745616]}, +{"learn":[0.4966699485],"iteration":643,"passed_time":20.29543559,"remaining_time":137.2778221,"test":[0.498072684]}, +{"learn":[0.4966626767],"iteration":644,"passed_time":20.32940877,"remaining_time":137.2629073,"test":[0.4980656507]}, +{"learn":[0.4966589812],"iteration":645,"passed_time":20.36444004,"remaining_time":137.2550649,"test":[0.4980625215]}, +{"learn":[0.4966567759],"iteration":646,"passed_time":20.40022157,"remaining_time":137.2521862,"test":[0.4980608227]}, +{"learn":[0.4966556136],"iteration":647,"passed_time":20.43913371,"remaining_time":137.2702313,"test":[0.4980597498]}, +{"learn":[0.4966533188],"iteration":648,"passed_time":20.47640663,"remaining_time":137.2771113,"test":[0.4980576637]}, +{"learn":[0.4966519181],"iteration":649,"passed_time":20.51474408,"remaining_time":137.2909796,"test":[0.49805671]}, +{"learn":[0.49664861],"iteration":650,"passed_time":20.55247563,"remaining_time":137.3006398,"test":[0.4980537596]}, +{"learn":[0.4966032211],"iteration":651,"passed_time":20.58366138,"remaining_time":137.2665026,"test":[0.4980136754]}, +{"learn":[0.4966013734],"iteration":652,"passed_time":20.61948163,"remaining_time":137.2632261,"test":[0.4980117383]}, +{"learn":[0.4965992276],"iteration":653,"passed_time":20.65744802,"remaining_time":137.2741118,"test":[0.4980099502]}, +{"learn":[0.4965921942],"iteration":654,"passed_time":20.69247787,"remaining_time":137.2653685,"test":[0.4980041089]}, +{"learn":[0.4965906743],"iteration":655,"passed_time":20.7302538,"remaining_time":137.2747295,"test":[0.4980026784]}, +{"learn":[0.4965887372],"iteration":656,"passed_time":20.76705354,"remaining_time":137.2774939,"test":[0.4980010095]}, +{"learn":[0.4965868596],"iteration":657,"passed_time":20.80418264,"remaining_time":137.2823116,"test":[0.4979991319]}, +{"learn":[0.4965830747],"iteration":658,"passed_time":20.83867834,"remaining_time":137.269655,"test":[0.4979957047]}, +{"learn":[0.4965817336],"iteration":659,"passed_time":20.87662109,"remaining_time":137.2795993,"test":[0.4979946914]}, +{"learn":[0.4965795581],"iteration":660,"passed_time":20.91330085,"remaining_time":137.281108,"test":[0.497992486]}, +{"learn":[0.4965771739],"iteration":661,"passed_time":20.94954097,"remaining_time":137.2796205,"test":[0.4979908469]}, +{"learn":[0.4965750877],"iteration":662,"passed_time":20.98579826,"remaining_time":137.2781404,"test":[0.4979888799]}, +{"learn":[0.4965718989],"iteration":663,"passed_time":21.02034981,"remaining_time":137.2654168,"test":[0.4979860189]}, +{"learn":[0.4965698127],"iteration":664,"passed_time":21.05609242,"remaining_time":137.260392,"test":[0.4979841712]}, +{"learn":[0.4965673987],"iteration":665,"passed_time":21.09232803,"remaining_time":137.258483,"test":[0.4979823532]}, +{"learn":[0.4965637926],"iteration":666,"passed_time":21.12727557,"remaining_time":137.2481035,"test":[0.4979791942]}, +{"learn":[0.4965625409],"iteration":667,"passed_time":21.16440804,"remaining_time":137.2518198,"test":[0.4979780021]}, +{"learn":[0.4965589945],"iteration":668,"passed_time":21.19961304,"remaining_time":137.2429358,"test":[0.4979748132]}, +{"learn":[0.4965522889],"iteration":669,"passed_time":21.23402046,"remaining_time":137.2288188,"test":[0.4979690018]}, +{"learn":[0.49655062],"iteration":670,"passed_time":21.27251092,"remaining_time":137.2409832,"test":[0.4979680779]}, +{"learn":[0.4965470437],"iteration":671,"passed_time":21.30785284,"remaining_time":137.2327189,"test":[0.4979649785]}, +{"learn":[0.4965459112],"iteration":672,"passed_time":21.34714564,"remaining_time":137.2497759,"test":[0.497963995]}, +{"learn":[0.4965445701],"iteration":673,"passed_time":21.38605101,"remaining_time":137.2641791,"test":[0.4979628625]}, +{"learn":[0.4965382222],"iteration":674,"passed_time":21.42062681,"remaining_time":137.2506829,"test":[0.4979567828]}, +{"learn":[0.4965344672],"iteration":675,"passed_time":21.45657227,"remaining_time":137.2458853,"test":[0.497953743]}, +{"learn":[0.4965312783],"iteration":676,"passed_time":21.49125968,"remaining_time":137.2329624,"test":[0.497950733]}, +{"learn":[0.4965291623],"iteration":677,"passed_time":21.52884504,"remaining_time":137.2384487,"test":[0.4979491832]}, +{"learn":[0.4965280001],"iteration":678,"passed_time":21.56753561,"remaining_time":137.2508415,"test":[0.4979481998]}, +{"learn":[0.496524841],"iteration":679,"passed_time":21.60235641,"remaining_time":137.2384996,"test":[0.4979455175]}, +{"learn":[0.4965208475],"iteration":680,"passed_time":21.63660322,"remaining_time":137.2224513,"test":[0.4979419115]}, +{"learn":[0.496520013],"iteration":681,"passed_time":21.6745521,"remaining_time":137.2297888,"test":[0.4979411366]}, +{"learn":[0.49651897],"iteration":682,"passed_time":21.7112574,"remaining_time":137.2291335,"test":[0.4979400637]}, +{"learn":[0.4965176885],"iteration":683,"passed_time":21.75031111,"remaining_time":137.2431912,"test":[0.49793911]}, +{"learn":[0.4965128605],"iteration":684,"passed_time":21.78365996,"remaining_time":137.2211573,"test":[0.4979349973]}, +{"learn":[0.4965109829],"iteration":685,"passed_time":21.81931506,"remaining_time":137.2135936,"test":[0.4979332092]}, +{"learn":[0.4965090458],"iteration":686,"passed_time":21.85431928,"remaining_time":137.2018618,"test":[0.4979314509]}, +{"learn":[0.4965050821],"iteration":687,"passed_time":21.88865978,"remaining_time":137.1859026,"test":[0.497927964]}, +{"learn":[0.4965029065],"iteration":688,"passed_time":21.92406508,"remaining_time":137.1765523,"test":[0.4979260864]}, +{"learn":[0.4965007011],"iteration":689,"passed_time":21.95942046,"remaining_time":137.1668148,"test":[0.4979242387]}, +{"learn":[0.4964994494],"iteration":690,"passed_time":21.99714321,"remaining_time":137.1717657,"test":[0.497923136]}, +{"learn":[0.4964976315],"iteration":691,"passed_time":22.03535618,"remaining_time":137.1796451,"test":[0.4979216161]}, +{"learn":[0.4964951877],"iteration":692,"passed_time":22.07202564,"remaining_time":137.1777986,"test":[0.4979195001]}, +{"learn":[0.4964932804],"iteration":693,"passed_time":22.11041254,"remaining_time":137.1865078,"test":[0.4979175928]}, +{"learn":[0.4964923565],"iteration":694,"passed_time":22.14741122,"remaining_time":137.1864824,"test":[0.4979165497]}, +{"learn":[0.4964898829],"iteration":695,"passed_time":22.18386047,"remaining_time":137.1829532,"test":[0.4979145827]}, +{"learn":[0.4964877669],"iteration":696,"passed_time":22.22087115,"remaining_time":137.1827956,"test":[0.4979128542]}, +{"learn":[0.4964856808],"iteration":697,"passed_time":22.25899844,"remaining_time":137.1894145,"test":[0.4979109469]}, +{"learn":[0.4964824323],"iteration":698,"passed_time":22.29468085,"remaining_time":137.1808617,"test":[0.4979081156]}, +{"learn":[0.4964802567],"iteration":699,"passed_time":22.33051022,"remaining_time":137.1731342,"test":[0.4979062679]}, +{"learn":[0.4964765314],"iteration":700,"passed_time":22.36441052,"remaining_time":137.1534962,"test":[0.4979031088]}, +{"learn":[0.4964751307],"iteration":701,"passed_time":22.40384089,"remaining_time":137.1676754,"test":[0.4979019466]}, +{"learn":[0.4964739983],"iteration":702,"passed_time":22.44357102,"remaining_time":137.1835344,"test":[0.4979009035]}, +{"learn":[0.4964672927],"iteration":703,"passed_time":22.47803824,"remaining_time":137.1671197,"test":[0.4978951218]}, +{"learn":[0.496464998],"iteration":704,"passed_time":22.5146337,"remaining_time":137.1636195,"test":[0.4978931251]}, +{"learn":[0.4964613621],"iteration":705,"passed_time":22.54955674,"remaining_time":137.1498536,"test":[0.4978896382]}, +{"learn":[0.4964592759],"iteration":706,"passed_time":22.58639846,"remaining_time":137.1476783,"test":[0.4978880885]}, +{"learn":[0.4964561467],"iteration":707,"passed_time":22.6206227,"remaining_time":137.1295376,"test":[0.4978852871]}, +{"learn":[0.4964549546],"iteration":708,"passed_time":22.65843745,"remaining_time":137.133082,"test":[0.4978842142]}, +{"learn":[0.4964537923],"iteration":709,"passed_time":22.69519094,"remaining_time":137.1300974,"test":[0.4978832009]}, +{"learn":[0.4964507226],"iteration":710,"passed_time":22.73290744,"remaining_time":137.132827,"test":[0.4978803995]}, +{"learn":[0.4964488451],"iteration":711,"passed_time":22.77050554,"remaining_time":137.13473,"test":[0.4978790584]}, +{"learn":[0.4964469377],"iteration":712,"passed_time":22.80682389,"remaining_time":137.1288275,"test":[0.4978771808]}, +{"learn":[0.4964455966],"iteration":713,"passed_time":22.84454121,"remaining_time":137.1312375,"test":[0.4978762272]}, +{"learn":[0.4964446132],"iteration":714,"passed_time":22.8818261,"remaining_time":137.1309438,"test":[0.4978754225]}, +{"learn":[0.4964427356],"iteration":715,"passed_time":22.91770054,"remaining_time":137.1221077,"test":[0.4978736642]}, +{"learn":[0.4964404706],"iteration":716,"passed_time":22.95400848,"remaining_time":137.1157857,"test":[0.497871876]}, +{"learn":[0.4964391295],"iteration":717,"passed_time":22.99260855,"remaining_time":137.1230499,"test":[0.4978709521]}, +{"learn":[0.4964351062],"iteration":718,"passed_time":23.02806193,"remaining_time":137.1114508,"test":[0.4978671076]}, +{"learn":[0.4964340631],"iteration":719,"passed_time":23.06659366,"remaining_time":137.1180845,"test":[0.4978662136]}, +{"learn":[0.4964324836],"iteration":720,"passed_time":23.10418476,"remaining_time":137.1190105,"test":[0.4978647533]}, +{"learn":[0.4964313511],"iteration":721,"passed_time":23.14240857,"remaining_time":137.1235788,"test":[0.4978637102]}, +{"learn":[0.4964300398],"iteration":722,"passed_time":23.18111581,"remaining_time":137.1308884,"test":[0.4978627267]}, +{"learn":[0.4964289968],"iteration":723,"passed_time":23.21925594,"remaining_time":137.1347216,"test":[0.4978618028]}, +{"learn":[0.4964278643],"iteration":724,"passed_time":23.25847675,"remaining_time":137.1448112,"test":[0.4978609088]}, +{"learn":[0.4964265232],"iteration":725,"passed_time":23.29687858,"remaining_time":137.1499436,"test":[0.4978597167]}, +{"learn":[0.4964254503],"iteration":726,"passed_time":23.33515671,"remaining_time":137.1542292,"test":[0.4978589716]}, +{"learn":[0.4964234237],"iteration":727,"passed_time":23.37127259,"remaining_time":137.1457095,"test":[0.4978569451]}, +{"learn":[0.4964213674],"iteration":728,"passed_time":23.40808543,"remaining_time":137.1411973,"test":[0.4978549483]}, +{"learn":[0.4964201455],"iteration":729,"passed_time":23.44626002,"remaining_time":137.144562,"test":[0.4978540244]}, +{"learn":[0.4964178209],"iteration":730,"passed_time":23.48136109,"remaining_time":137.1298639,"test":[0.4978522959]}, +{"learn":[0.4964164798],"iteration":731,"passed_time":23.51919862,"remaining_time":137.1310652,"test":[0.4978514018]}, +{"learn":[0.4964150493],"iteration":732,"passed_time":23.5579151,"remaining_time":137.1372766,"test":[0.4978503587]}, +{"learn":[0.4964139168],"iteration":733,"passed_time":23.59636513,"remaining_time":137.1418169,"test":[0.4978493753]}, +{"learn":[0.4964102213],"iteration":734,"passed_time":23.63148883,"remaining_time":137.1269386,"test":[0.497845948]}, +{"learn":[0.4964064662],"iteration":735,"passed_time":23.66728523,"remaining_time":137.1159025,"test":[0.4978429678]}, +{"learn":[0.4964055423],"iteration":736,"passed_time":23.70630644,"remaining_time":137.1234523,"test":[0.4978421631]}, +{"learn":[0.4964029793],"iteration":737,"passed_time":23.74342549,"remaining_time":137.1198908,"test":[0.4978401365]}, +{"learn":[0.4963958864],"iteration":738,"passed_time":23.7780644,"remaining_time":137.1019383,"test":[0.4978340867]}, +{"learn":[0.4963948731],"iteration":739,"passed_time":23.81585682,"remaining_time":137.1020947,"test":[0.4978331032]}, +{"learn":[0.4963923995],"iteration":740,"passed_time":23.85216734,"remaining_time":137.0936312,"test":[0.4978312853]}, +{"learn":[0.4963907902],"iteration":741,"passed_time":23.8883324,"remaining_time":137.0842579,"test":[0.4978298249]}, +{"learn":[0.4963876609],"iteration":742,"passed_time":23.92264402,"remaining_time":137.0641933,"test":[0.4978267851]}, +{"learn":[0.4963857238],"iteration":743,"passed_time":23.95861282,"remaining_time":137.0535701,"test":[0.497824997]}, +{"learn":[0.4963838164],"iteration":744,"passed_time":23.99569652,"remaining_time":137.0492466,"test":[0.4978233876]}, +{"learn":[0.4963805084],"iteration":745,"passed_time":24.03162003,"remaining_time":137.0382193,"test":[0.4978205862]}, +{"learn":[0.4963782732],"iteration":746,"passed_time":24.0681045,"remaining_time":137.0303192,"test":[0.4978189173]}, +{"learn":[0.4963758592],"iteration":747,"passed_time":24.10497363,"remaining_time":137.0245293,"test":[0.4978170696]}, +{"learn":[0.4963744287],"iteration":748,"passed_time":24.1414649,"remaining_time":137.0165117,"test":[0.4978152516]}, +{"learn":[0.496372581],"iteration":749,"passed_time":24.18021084,"remaining_time":137.0211948,"test":[0.4978137913]}, +{"learn":[0.4963703756],"iteration":750,"passed_time":24.21722827,"remaining_time":137.0159826,"test":[0.497812033]}, +{"learn":[0.4963684682],"iteration":751,"passed_time":24.25433081,"remaining_time":137.0111666,"test":[0.497810215]}, +{"learn":[0.4963673358],"iteration":752,"passed_time":24.29350662,"remaining_time":137.0179583,"test":[0.4978093209]}, +{"learn":[0.4963656966],"iteration":753,"passed_time":24.33103295,"remaining_time":137.0153394,"test":[0.4978075328]}, +{"learn":[0.4963592295],"iteration":754,"passed_time":24.36413832,"remaining_time":136.9877711,"test":[0.4978019002]}, +{"learn":[0.4963556532],"iteration":755,"passed_time":24.40085978,"remaining_time":136.9804879,"test":[0.4977988603]}, +{"learn":[0.4963524048],"iteration":756,"passed_time":24.4363259,"remaining_time":136.9660909,"test":[0.4977960589]}, +{"learn":[0.4963504378],"iteration":757,"passed_time":24.47518519,"remaining_time":136.9706274,"test":[0.4977943602]}, +{"learn":[0.4963465933],"iteration":758,"passed_time":24.51085755,"remaining_time":136.9572422,"test":[0.4977914992]}, +{"learn":[0.4963444774],"iteration":759,"passed_time":24.54958131,"remaining_time":136.960822,"test":[0.497789562]}, +{"learn":[0.4963429575],"iteration":760,"passed_time":24.58682689,"remaining_time":136.9560568,"test":[0.4977879825]}, +{"learn":[0.4963410203],"iteration":761,"passed_time":24.62295511,"remaining_time":136.9449918,"test":[0.4977864328]}, +{"learn":[0.4963345532],"iteration":762,"passed_time":24.65845722,"remaining_time":136.9303843,"test":[0.4977802339]}, +{"learn":[0.4963321094],"iteration":763,"passed_time":24.69542671,"remaining_time":136.923858,"test":[0.4977783861]}, +{"learn":[0.4963299636],"iteration":764,"passed_time":24.73268776,"remaining_time":136.9188662,"test":[0.497776449]}, +{"learn":[0.4963262384],"iteration":765,"passed_time":24.7675799,"remaining_time":136.9006962,"test":[0.4977731409]}, +{"learn":[0.4963251059],"iteration":766,"passed_time":24.80537496,"remaining_time":136.8985035,"test":[0.4977723959]}, +{"learn":[0.4963231687],"iteration":767,"passed_time":24.84234433,"remaining_time":136.8916682,"test":[0.4977709952]}, +{"learn":[0.4963210826],"iteration":768,"passed_time":24.87813082,"remaining_time":136.8782464,"test":[0.4977691772]}, +{"learn":[0.4963197414],"iteration":769,"passed_time":24.91570281,"remaining_time":136.8745752,"test":[0.4977680745]}, +{"learn":[0.4963186388],"iteration":770,"passed_time":24.9551282,"remaining_time":136.8809821,"test":[0.4977670315]}, +{"learn":[0.4963146155],"iteration":771,"passed_time":24.99121008,"remaining_time":136.8689589,"test":[0.4977637234]}, +{"learn":[0.4963117842],"iteration":772,"passed_time":25.02667542,"remaining_time":136.8535019,"test":[0.4977609518]}, +{"learn":[0.4963105921],"iteration":773,"passed_time":25.06585965,"remaining_time":136.8582983,"test":[0.4977602365]}, +{"learn":[0.4963069265],"iteration":774,"passed_time":25.10052706,"remaining_time":136.8383572,"test":[0.4977566901]}, +{"learn":[0.4963052277],"iteration":775,"passed_time":25.13804531,"remaining_time":136.8338961,"test":[0.4977549317]}, +{"learn":[0.4963023071],"iteration":776,"passed_time":25.17348776,"remaining_time":136.818068,"test":[0.4977521303]}, +{"learn":[0.4962999229],"iteration":777,"passed_time":25.21063467,"remaining_time":136.811439,"test":[0.4977506104]}, +{"learn":[0.4962977175],"iteration":778,"passed_time":25.24771332,"remaining_time":136.8043619,"test":[0.4977488818]}, +{"learn":[0.4962956016],"iteration":779,"passed_time":25.28371859,"remaining_time":136.7914006,"test":[0.4977471533]}, +{"learn":[0.496293277],"iteration":780,"passed_time":25.32004151,"remaining_time":136.7800962,"test":[0.4977453652]}, +{"learn":[0.4962912802],"iteration":781,"passed_time":25.35858378,"remaining_time":136.7806987,"test":[0.4977432194]}, +{"learn":[0.4962845747],"iteration":782,"passed_time":25.39348836,"remaining_time":136.7616097,"test":[0.4977370503]}, +{"learn":[0.4962836508],"iteration":783,"passed_time":25.43198629,"remaining_time":136.7618038,"test":[0.4977361563]}, +{"learn":[0.4962816541],"iteration":784,"passed_time":25.46939206,"remaining_time":136.7560351,"test":[0.4977343979]}, +{"learn":[0.496280462],"iteration":785,"passed_time":25.50780182,"remaining_time":136.7555686,"test":[0.4977335337]}, +{"learn":[0.4962787633],"iteration":786,"passed_time":25.54515793,"remaining_time":136.7493651,"test":[0.4977319243]}, +{"learn":[0.4962767367],"iteration":787,"passed_time":25.58207402,"remaining_time":136.7407307,"test":[0.4977301362]}, +{"learn":[0.4962737267],"iteration":788,"passed_time":25.6173676,"remaining_time":136.723365,"test":[0.4977275732]}, +{"learn":[0.4962717597],"iteration":789,"passed_time":25.65534204,"remaining_time":136.7202405,"test":[0.4977260235]}, +{"learn":[0.4962704186],"iteration":790,"passed_time":25.69274522,"remaining_time":136.7139882,"test":[0.4977251294]}, +{"learn":[0.4962668423],"iteration":791,"passed_time":25.72830408,"remaining_time":136.697858,"test":[0.4977215829]}, +{"learn":[0.4962651734],"iteration":792,"passed_time":25.76595318,"remaining_time":136.692768,"test":[0.4977201226]}, +{"learn":[0.4962640111],"iteration":793,"passed_time":25.80352082,"remaining_time":136.6871644,"test":[0.4977192583]}, +{"learn":[0.4962606733],"iteration":794,"passed_time":25.84051327,"remaining_time":136.6784381,"test":[0.4977165463]}, +{"learn":[0.4962553982],"iteration":795,"passed_time":25.87368726,"remaining_time":136.6494739,"test":[0.4977108839]}, +{"learn":[0.4962534611],"iteration":796,"passed_time":25.91135123,"remaining_time":136.6441772,"test":[0.4977093938]}, +{"learn":[0.4962523584],"iteration":797,"passed_time":25.9494681,"remaining_time":136.6411842,"test":[0.4977084997]}, +{"learn":[0.4962455635],"iteration":798,"passed_time":25.98304874,"remaining_time":136.6142525,"test":[0.4977028075]}, +{"learn":[0.4962434475],"iteration":799,"passed_time":26.01994972,"remaining_time":136.604736,"test":[0.4977010193]}, +{"learn":[0.4962414508],"iteration":800,"passed_time":26.05651357,"remaining_time":136.5933839,"test":[0.4976993504]}, +{"learn":[0.4962405567],"iteration":801,"passed_time":26.09493583,"remaining_time":136.5916965,"test":[0.4976984861]}, +{"learn":[0.4962382321],"iteration":802,"passed_time":26.12991163,"remaining_time":136.5719042,"test":[0.4976966384]}, +{"learn":[0.4962371294],"iteration":803,"passed_time":26.16761341,"remaining_time":136.5663008,"test":[0.4976958337]}, +{"learn":[0.4962332849],"iteration":804,"passed_time":26.20288058,"remaining_time":136.5479305,"test":[0.4976921084]}, +{"learn":[0.4962306623],"iteration":805,"passed_time":26.2403241,"remaining_time":136.5408428,"test":[0.4976902905]}, +{"learn":[0.4962208574],"iteration":806,"passed_time":26.27483983,"remaining_time":136.5184676,"test":[0.4976813796]}, +{"learn":[0.4962150161],"iteration":807,"passed_time":26.30996631,"remaining_time":136.4992312,"test":[0.4976755383]}, +{"learn":[0.4962138836],"iteration":808,"passed_time":26.34882182,"remaining_time":136.4992735,"test":[0.4976746741]}, +{"learn":[0.4962116782],"iteration":809,"passed_time":26.38649435,"remaining_time":136.4931004,"test":[0.4976729157]}, +{"learn":[0.4962096517],"iteration":810,"passed_time":26.42389675,"remaining_time":136.4854543,"test":[0.4976711574]}, +{"learn":[0.4962053303],"iteration":811,"passed_time":26.45999251,"remaining_time":136.4709959,"test":[0.4976674023]}, +{"learn":[0.4962041979],"iteration":812,"passed_time":26.49875296,"remaining_time":136.4702074,"test":[0.4976666274]}, +{"learn":[0.4962022309],"iteration":813,"passed_time":26.53421127,"remaining_time":136.4523444,"test":[0.4976649585]}, +{"learn":[0.4962001149],"iteration":814,"passed_time":26.57029154,"remaining_time":136.437632,"test":[0.4976633492]}, +{"learn":[0.4961970453],"iteration":815,"passed_time":26.6056659,"remaining_time":136.4192477,"test":[0.4976606074]}, +{"learn":[0.4961950485],"iteration":816,"passed_time":26.64241004,"remaining_time":136.407835,"test":[0.4976587]}, +{"learn":[0.496192873],"iteration":817,"passed_time":26.67892124,"remaining_time":136.3951695,"test":[0.4976570013]}, +{"learn":[0.4961912339],"iteration":818,"passed_time":26.71505016,"remaining_time":136.3804942,"test":[0.4976550939]}, +{"learn":[0.4961901908],"iteration":819,"passed_time":26.75320057,"remaining_time":136.3760712,"test":[0.4976542595]}, +{"learn":[0.4961892073],"iteration":820,"passed_time":26.79209568,"remaining_time":136.3753567,"test":[0.4976533952]}, +{"learn":[0.4961880152],"iteration":821,"passed_time":26.83012159,"remaining_time":136.3701314,"test":[0.4976524415]}, +{"learn":[0.4961859588],"iteration":822,"passed_time":26.86735153,"remaining_time":136.3607866,"test":[0.4976509812]}, +{"learn":[0.4961847667],"iteration":823,"passed_time":26.90640469,"remaining_time":136.3606141,"test":[0.4976501468]}, +{"learn":[0.4961834256],"iteration":824,"passed_time":26.9439866,"remaining_time":136.3529019,"test":[0.4976492229]}, +{"learn":[0.4961825018],"iteration":825,"passed_time":26.98202891,"remaining_time":136.3474439,"test":[0.4976484778]}, +{"learn":[0.4961809819],"iteration":826,"passed_time":27.01796044,"remaining_time":136.3312562,"test":[0.4976466599]}, +{"learn":[0.4961688821],"iteration":827,"passed_time":27.04958833,"remaining_time":136.2933364,"test":[0.4976359013]}, +{"learn":[0.4961669748],"iteration":828,"passed_time":27.08543924,"remaining_time":136.2766792,"test":[0.4976343217]}, +{"learn":[0.4961653654],"iteration":829,"passed_time":27.1223668,"remaining_time":136.265385,"test":[0.4976327124]}, +{"learn":[0.4961643224],"iteration":830,"passed_time":27.16207905,"remaining_time":136.2679995,"test":[0.4976318481]}, +{"learn":[0.4961604779],"iteration":831,"passed_time":27.19861738,"remaining_time":136.2546121,"test":[0.4976290169]}, +{"learn":[0.4961585705],"iteration":832,"passed_time":27.23455062,"remaining_time":136.2381422,"test":[0.4976273182]}, +{"learn":[0.4961576168],"iteration":833,"passed_time":27.27285733,"remaining_time":136.2334816,"test":[0.4976264539]}, +{"learn":[0.4961557989],"iteration":834,"passed_time":27.31033878,"remaining_time":136.224624,"test":[0.4976248148]}, +{"learn":[0.4961541598],"iteration":835,"passed_time":27.34681252,"remaining_time":136.2106786,"test":[0.4976231757]}, +{"learn":[0.4961531167],"iteration":836,"passed_time":27.3859726,"remaining_time":136.2100405,"test":[0.4976222816]}, +{"learn":[0.496149302],"iteration":837,"passed_time":27.4207568,"remaining_time":136.1875773,"test":[0.4976191822]}, +{"learn":[0.4961427455],"iteration":838,"passed_time":27.45427227,"remaining_time":136.1587925,"test":[0.4976130727]}, +{"learn":[0.4961416428],"iteration":839,"passed_time":27.49298952,"remaining_time":136.1557576,"test":[0.4976122382]}, +{"learn":[0.4961293642],"iteration":840,"passed_time":27.52726223,"remaining_time":136.1306583,"test":[0.4976009133]}, +{"learn":[0.4961275463],"iteration":841,"passed_time":27.56445233,"remaining_time":136.1199439,"test":[0.4975994828]}, +{"learn":[0.4961264734],"iteration":842,"passed_time":27.60178116,"remaining_time":136.1098509,"test":[0.4975984993]}, +{"learn":[0.496124119],"iteration":843,"passed_time":27.63819429,"remaining_time":136.0951842,"test":[0.4975966218]}, +{"learn":[0.496123225],"iteration":844,"passed_time":27.67736179,"remaining_time":136.0940098,"test":[0.4975957277]}, +{"learn":[0.4961203043],"iteration":845,"passed_time":27.71441437,"remaining_time":136.0823609,"test":[0.4975929561]}, +{"learn":[0.4961177115],"iteration":846,"passed_time":27.75116173,"remaining_time":136.0691555,"test":[0.4975912872]}, +{"learn":[0.4961167281],"iteration":847,"passed_time":27.78950267,"remaining_time":136.063697,"test":[0.4975903037]}, +{"learn":[0.496098191],"iteration":848,"passed_time":27.82206387,"remaining_time":136.0299024,"test":[0.4975734356]}, +{"learn":[0.4960957174],"iteration":849,"passed_time":27.85887967,"remaining_time":136.0168831,"test":[0.4975717071]}, +{"learn":[0.4960924094],"iteration":850,"passed_time":27.89504004,"remaining_time":136.0006123,"test":[0.4975690547]}, +{"learn":[0.4960864489],"iteration":851,"passed_time":27.92941745,"remaining_time":135.9756145,"test":[0.4975631538]}, +{"learn":[0.4960846012],"iteration":852,"passed_time":27.96635834,"remaining_time":135.9630575,"test":[0.4975614849]}, +{"learn":[0.4960834389],"iteration":853,"passed_time":28.00586549,"remaining_time":135.962902,"test":[0.49756071]}, +{"learn":[0.4960800712],"iteration":854,"passed_time":28.04164711,"remaining_time":135.9445933,"test":[0.4975579086]}, +{"learn":[0.4960781639],"iteration":855,"passed_time":28.07862411,"remaining_time":135.9320308,"test":[0.4975561204]}, +{"learn":[0.4960763757],"iteration":856,"passed_time":28.11419147,"remaining_time":135.9125966,"test":[0.4975544813]}, +{"learn":[0.4960745876],"iteration":857,"passed_time":28.15120667,"remaining_time":135.9001143,"test":[0.4975526634]}, +{"learn":[0.4960711901],"iteration":858,"passed_time":28.186301,"remaining_time":135.8783148,"test":[0.4975499514]}, +{"learn":[0.4960699086],"iteration":859,"passed_time":28.2247419,"remaining_time":135.8725947,"test":[0.4975489381]}, +{"learn":[0.4960665708],"iteration":860,"passed_time":28.26207138,"remaining_time":135.8614558,"test":[0.4975459281]}, +{"learn":[0.4960644846],"iteration":861,"passed_time":28.2975047,"remaining_time":135.8411537,"test":[0.4975442293]}, +{"learn":[0.4960561995],"iteration":862,"passed_time":28.33020533,"remaining_time":135.8077166,"test":[0.4975365999]}, +{"learn":[0.4960542624],"iteration":863,"passed_time":28.36710982,"remaining_time":135.7944053,"test":[0.4975349012]}, +{"learn":[0.4960505669],"iteration":864,"passed_time":28.40182056,"remaining_time":135.7705526,"test":[0.4975316229]}, +{"learn":[0.4960480635],"iteration":865,"passed_time":28.43722716,"remaining_time":135.7499966,"test":[0.497529656]}, +{"learn":[0.4960420732],"iteration":866,"passed_time":28.47145293,"remaining_time":135.7237773,"test":[0.4975244108]}, +{"learn":[0.4960412388],"iteration":867,"passed_time":28.51002193,"remaining_time":135.718215,"test":[0.4975235763]}, +{"learn":[0.496038497],"iteration":868,"passed_time":28.54532398,"remaining_time":135.6970464,"test":[0.4975210431]}, +{"learn":[0.4960375135],"iteration":869,"passed_time":28.5821467,"remaining_time":135.6830642,"test":[0.4975201192]}, +{"learn":[0.4960353379],"iteration":870,"passed_time":28.61812501,"remaining_time":135.6650266,"test":[0.4975183609]}, +{"learn":[0.496033222],"iteration":871,"passed_time":28.65483101,"remaining_time":135.6503927,"test":[0.4975165132]}, +{"learn":[0.4960297053],"iteration":872,"passed_time":28.69077862,"remaining_time":135.632123,"test":[0.4975138608]}, +{"learn":[0.4960276787],"iteration":873,"passed_time":28.7272856,"remaining_time":135.6164536,"test":[0.4975119832]}, +{"learn":[0.4960263674],"iteration":874,"passed_time":28.76560843,"remaining_time":135.6092969,"test":[0.4975111786]}, +{"learn":[0.4960246091],"iteration":875,"passed_time":28.80404209,"remaining_time":135.6025908,"test":[0.4975098076]}, +{"learn":[0.4960237746],"iteration":876,"passed_time":28.84114612,"remaining_time":135.5895615,"test":[0.4975090626]}, +{"learn":[0.4960228209],"iteration":877,"passed_time":28.87852447,"remaining_time":135.5777652,"test":[0.4975081983]}, +{"learn":[0.4960218077],"iteration":878,"passed_time":28.91725977,"remaining_time":135.5722725,"test":[0.4975073937]}, +{"learn":[0.4960195129],"iteration":879,"passed_time":28.95308956,"remaining_time":135.5531011,"test":[0.4975056651]}, +{"learn":[0.4960186784],"iteration":880,"passed_time":28.99099248,"remaining_time":135.5435846,"test":[0.4975047413]}, +{"learn":[0.4960145657],"iteration":881,"passed_time":29.02505487,"remaining_time":135.5160725,"test":[0.497501165]}, +{"learn":[0.4960136418],"iteration":882,"passed_time":29.06320017,"remaining_time":135.5075822,"test":[0.4975003603]}, +{"learn":[0.4960123007],"iteration":883,"passed_time":29.10081989,"remaining_time":135.4965777,"test":[0.4974994662]}, +{"learn":[0.4960099463],"iteration":884,"passed_time":29.13646011,"remaining_time":135.4763089,"test":[0.4974979761]}, +{"learn":[0.4960068767],"iteration":885,"passed_time":29.17109937,"remaining_time":135.4513576,"test":[0.4974949065]}, +{"learn":[0.496005923],"iteration":886,"passed_time":29.20985825,"remaining_time":135.445487,"test":[0.497494072]}, +{"learn":[0.4960039263],"iteration":887,"passed_time":29.24517201,"remaining_time":135.4235893,"test":[0.4974922243]}, +{"learn":[0.4960020785],"iteration":888,"passed_time":29.28238969,"remaining_time":135.4104657,"test":[0.4974905255]}, +{"learn":[0.496000946],"iteration":889,"passed_time":29.32108459,"remaining_time":135.4041097,"test":[0.4974895421]}, +{"learn":[0.4959970121],"iteration":890,"passed_time":29.35546332,"remaining_time":135.3777764,"test":[0.497485936]}, +{"learn":[0.4959936743],"iteration":891,"passed_time":29.39139603,"remaining_time":135.3585817,"test":[0.4974832538]}, +{"learn":[0.4959916775],"iteration":892,"passed_time":29.42856573,"remaining_time":135.3450386,"test":[0.4974817637]}, +{"learn":[0.4959899192],"iteration":893,"passed_time":29.46470564,"remaining_time":135.3267129,"test":[0.4974802735]}, +{"learn":[0.4959887271],"iteration":894,"passed_time":29.5025116,"remaining_time":135.315989,"test":[0.4974794093]}, +{"learn":[0.4959865217],"iteration":895,"passed_time":29.53923558,"remaining_time":135.3002487,"test":[0.4974775019]}, +{"learn":[0.495984823],"iteration":896,"passed_time":29.57581216,"remaining_time":135.2837874,"test":[0.4974759224]}, +{"learn":[0.4959839587],"iteration":897,"passed_time":29.61351191,"remaining_time":135.2724119,"test":[0.4974751177]}, +{"learn":[0.495982111],"iteration":898,"passed_time":29.65057286,"remaining_time":135.2580637,"test":[0.4974736276]}, +{"learn":[0.4959807997],"iteration":899,"passed_time":29.68886075,"remaining_time":135.2492545,"test":[0.497472674]}, +{"learn":[0.4959791904],"iteration":900,"passed_time":29.72624277,"remaining_time":135.2362587,"test":[0.4974713627]}, +{"learn":[0.4959775512],"iteration":901,"passed_time":29.76360864,"remaining_time":135.2231355,"test":[0.4974698427]}, +{"learn":[0.4959764783],"iteration":902,"passed_time":29.80176002,"remaining_time":135.2135225,"test":[0.4974688295]}, +{"learn":[0.4959750776],"iteration":903,"passed_time":29.84079552,"remaining_time":135.2078523,"test":[0.4974678162]}, +{"learn":[0.4959740047],"iteration":904,"passed_time":29.87922451,"remaining_time":135.199364,"test":[0.4974669221]}, +{"learn":[0.4959723656],"iteration":905,"passed_time":29.91517737,"remaining_time":135.1796205,"test":[0.4974653128]}, +{"learn":[0.4959712033],"iteration":906,"passed_time":29.95411129,"remaining_time":135.1732938,"test":[0.4974644485]}, +{"learn":[0.4959702795],"iteration":907,"passed_time":29.99207957,"remaining_time":135.1625436,"test":[0.4974635544]}, +{"learn":[0.4959681337],"iteration":908,"passed_time":30.02879293,"remaining_time":135.1460857,"test":[0.4974620345]}, +{"learn":[0.4959659581],"iteration":909,"passed_time":30.06517349,"remaining_time":135.1280874,"test":[0.4974602762]}, +{"learn":[0.4959640508],"iteration":910,"passed_time":30.10132015,"remaining_time":135.108999,"test":[0.4974586073]}, +{"learn":[0.4959614878],"iteration":911,"passed_time":30.13857563,"remaining_time":135.0948434,"test":[0.4974568787]}, +{"learn":[0.4959606533],"iteration":912,"passed_time":30.17760755,"remaining_time":135.0885893,"test":[0.4974560145]}, +{"learn":[0.4959598486],"iteration":913,"passed_time":30.21570594,"remaining_time":135.0780902,"test":[0.4974552098]}, +{"learn":[0.4959569578],"iteration":914,"passed_time":30.25222523,"remaining_time":135.0604809,"test":[0.497452468]}, +{"learn":[0.4959549611],"iteration":915,"passed_time":30.29109269,"remaining_time":135.0532997,"test":[0.4974507096]}, +{"learn":[0.4959527855],"iteration":916,"passed_time":30.32681481,"remaining_time":135.0320446,"test":[0.4974489811]}, +{"learn":[0.4959518616],"iteration":917,"passed_time":30.364221,"remaining_time":135.0182463,"test":[0.4974481466]}, +{"learn":[0.495948494],"iteration":918,"passed_time":30.39992761,"remaining_time":134.9968494,"test":[0.4974452558]}, +{"learn":[0.4959468548],"iteration":919,"passed_time":30.43588135,"remaining_time":134.9765173,"test":[0.4974436763]}, +{"learn":[0.4959458416],"iteration":920,"passed_time":30.47360407,"remaining_time":134.9639859,"test":[0.4974428418]}, +{"learn":[0.4959438746],"iteration":921,"passed_time":30.51101968,"remaining_time":134.9500415,"test":[0.4974410239]}, +{"learn":[0.495940954],"iteration":922,"passed_time":30.54629445,"remaining_time":134.9265899,"test":[0.4974384907]}, +{"learn":[0.4959399407],"iteration":923,"passed_time":30.58284476,"remaining_time":134.9087394,"test":[0.4974377456]}, +{"learn":[0.4959387784],"iteration":924,"passed_time":30.62083065,"remaining_time":134.8971729,"test":[0.497436941]}, +{"learn":[0.4959365134],"iteration":925,"passed_time":30.65797167,"remaining_time":134.8818321,"test":[0.4974353018]}, +{"learn":[0.4959349339],"iteration":926,"passed_time":30.69598155,"remaining_time":134.870262,"test":[0.4974337223]}, +{"learn":[0.4959337716],"iteration":927,"passed_time":30.73433514,"remaining_time":134.860143,"test":[0.4974328581]}, +{"learn":[0.495932967],"iteration":928,"passed_time":30.77373453,"remaining_time":134.854546,"test":[0.4974321428]}, +{"learn":[0.4959318345],"iteration":929,"passed_time":30.81177655,"remaining_time":134.8429361,"test":[0.4974312189]}, +{"learn":[0.4959288244],"iteration":930,"passed_time":30.84789523,"remaining_time":134.8228633,"test":[0.4974284771]}, +{"learn":[0.4959219401],"iteration":931,"passed_time":30.88270972,"remaining_time":134.7970634,"test":[0.4974224869]}, +{"learn":[0.4959191685],"iteration":932,"passed_time":30.9194159,"remaining_time":134.7794903,"test":[0.4974199537]}, +{"learn":[0.4959170525],"iteration":933,"passed_time":30.95525563,"remaining_time":134.7581043,"test":[0.4974182549]}, +{"learn":[0.4959149962],"iteration":934,"passed_time":30.99329001,"remaining_time":134.7462288,"test":[0.4974164072]}, +{"learn":[0.4959137743],"iteration":935,"passed_time":31.03224006,"remaining_time":134.7382731,"test":[0.4974155131]}, +{"learn":[0.495912761],"iteration":936,"passed_time":31.06963951,"remaining_time":134.7235276,"test":[0.4974147979]}, +{"learn":[0.4959110623],"iteration":937,"passed_time":31.10653409,"remaining_time":134.7065474,"test":[0.4974133673]}, +{"learn":[0.495908231],"iteration":938,"passed_time":31.14316184,"remaining_time":134.6883709,"test":[0.4974109832]}, +{"learn":[0.4959065323],"iteration":939,"passed_time":31.18092994,"remaining_time":134.6750804,"test":[0.4974094334]}, +{"learn":[0.4959042673],"iteration":940,"passed_time":31.21758706,"remaining_time":134.6569457,"test":[0.4974077943]}, +{"learn":[0.4958987837],"iteration":941,"passed_time":31.25241082,"remaining_time":134.6308738,"test":[0.4974028769]}, +{"learn":[0.4958972042],"iteration":942,"passed_time":31.28985847,"remaining_time":134.6160719,"test":[0.4974015954]}, +{"learn":[0.4958951478],"iteration":943,"passed_time":31.32656781,"remaining_time":134.5980498,"test":[0.4973999563]}, +{"learn":[0.4958943133],"iteration":944,"passed_time":31.36436008,"remaining_time":134.584635,"test":[0.497399241]}, +{"learn":[0.4958931809],"iteration":945,"passed_time":31.40218349,"remaining_time":134.5713022,"test":[0.497398347]}, +{"learn":[0.4958921676],"iteration":946,"passed_time":31.44047417,"remaining_time":134.5599174,"test":[0.4973973635]}, +{"learn":[0.4958901708],"iteration":947,"passed_time":31.47690109,"remaining_time":134.5405097,"test":[0.4973956946]}, +{"learn":[0.4958880847],"iteration":948,"passed_time":31.51374306,"remaining_time":134.5228379,"test":[0.4973939958]}, +{"learn":[0.4958856111],"iteration":949,"passed_time":31.54913983,"remaining_time":134.4989645,"test":[0.4973921481]}, +{"learn":[0.4958840315],"iteration":950,"passed_time":31.58498158,"remaining_time":134.4769615,"test":[0.4973904792]}, +{"learn":[0.4958831673],"iteration":951,"passed_time":31.62241716,"remaining_time":134.4617066,"test":[0.4973897043]}, +{"learn":[0.4958819752],"iteration":952,"passed_time":31.66108344,"remaining_time":134.4516314,"test":[0.497388691]}, +{"learn":[0.4958803361],"iteration":953,"passed_time":31.69632973,"remaining_time":134.4269917,"test":[0.4973872903]}, +{"learn":[0.495879144],"iteration":954,"passed_time":31.73431113,"remaining_time":134.4139147,"test":[0.4973863962]}, +{"learn":[0.4958727067],"iteration":955,"passed_time":31.76843626,"remaining_time":134.3844731,"test":[0.4973808232]}, +{"learn":[0.495871604],"iteration":956,"passed_time":31.80520123,"remaining_time":134.366174,"test":[0.4973793033]}, +{"learn":[0.4958682959],"iteration":957,"passed_time":31.84164487,"remaining_time":134.3464808,"test":[0.4973765019]}, +{"learn":[0.495867223],"iteration":958,"passed_time":31.87918164,"remaining_time":134.3313587,"test":[0.4973756674]}, +{"learn":[0.4958654647],"iteration":959,"passed_time":31.91638457,"remaining_time":134.3147851,"test":[0.4973739687]}, +{"learn":[0.495864362],"iteration":960,"passed_time":31.95331063,"remaining_time":134.2970048,"test":[0.4973731342]}, +{"learn":[0.4958624249],"iteration":961,"passed_time":31.99000438,"remaining_time":134.2782097,"test":[0.4973714355]}, +{"learn":[0.4958601301],"iteration":962,"passed_time":32.02694596,"remaining_time":134.2604162,"test":[0.4973697964]}, +{"learn":[0.495859087],"iteration":963,"passed_time":32.06513682,"remaining_time":134.2478135,"test":[0.4973687831]}, +{"learn":[0.4958569114],"iteration":964,"passed_time":32.1017306,"remaining_time":134.2284797,"test":[0.4973673228]}, +{"learn":[0.4958552425],"iteration":965,"passed_time":32.13969957,"remaining_time":134.2148531,"test":[0.497365624]}, +{"learn":[0.4958530073],"iteration":966,"passed_time":32.17574115,"remaining_time":134.1931376,"test":[0.4973638955]}, +{"learn":[0.4958520835],"iteration":967,"passed_time":32.21422989,"remaining_time":134.1815856,"test":[0.4973630908]}, +{"learn":[0.4958510702],"iteration":968,"passed_time":32.25409146,"remaining_time":134.175689,"test":[0.497362316]}, +{"learn":[0.4958499675],"iteration":969,"passed_time":32.29350519,"remaining_time":134.1678618,"test":[0.4973614815]}, +{"learn":[0.4958481794],"iteration":970,"passed_time":32.32974053,"remaining_time":134.1467812,"test":[0.4973598424]}, +{"learn":[0.4958473449],"iteration":971,"passed_time":32.36804767,"remaining_time":134.1342551,"test":[0.4973588887]}, +{"learn":[0.4958462124],"iteration":972,"passed_time":32.40710754,"remaining_time":134.1247914,"test":[0.4973582629]}, +{"learn":[0.4958444541],"iteration":973,"passed_time":32.44573314,"remaining_time":134.1134719,"test":[0.4973566237]}, +{"learn":[0.4958428149],"iteration":974,"passed_time":32.48096459,"remaining_time":134.0880846,"test":[0.497355223]}, +{"learn":[0.4958418315],"iteration":975,"passed_time":32.51909829,"remaining_time":134.0746429,"test":[0.4973543289]}, +{"learn":[0.4958395665],"iteration":976,"passed_time":32.55481735,"remaining_time":134.051208,"test":[0.4973527196]}, +{"learn":[0.4958376889],"iteration":977,"passed_time":32.59121461,"remaining_time":134.030537,"test":[0.4973510507]}, +{"learn":[0.4958365863],"iteration":978,"passed_time":32.62928918,"remaining_time":134.016723,"test":[0.497349948]}, +{"learn":[0.4958342915],"iteration":979,"passed_time":32.66447934,"remaining_time":133.9910275,"test":[0.4973483685]}, +{"learn":[0.4958331292],"iteration":980,"passed_time":32.7020949,"remaining_time":133.9752491,"test":[0.4973474744]}, +{"learn":[0.4958322351],"iteration":981,"passed_time":32.73969944,"remaining_time":133.9593812,"test":[0.4973466399]}, +{"learn":[0.4958314007],"iteration":982,"passed_time":32.77835862,"remaining_time":133.9477788,"test":[0.4973458055]}, +{"learn":[0.4958297317],"iteration":983,"passed_time":32.8162126,"remaining_time":133.9328352,"test":[0.4973442856]}, +{"learn":[0.4958274369],"iteration":984,"passed_time":32.8520843,"remaining_time":133.9097649,"test":[0.497342408]}, +{"learn":[0.49582547],"iteration":985,"passed_time":32.89000939,"remaining_time":133.8950281,"test":[0.4973410073]}, +{"learn":[0.4958236521],"iteration":986,"passed_time":32.92661748,"remaining_time":133.8748895,"test":[0.4973393682]}, +{"learn":[0.4958200162],"iteration":987,"passed_time":32.96193443,"remaining_time":133.8494746,"test":[0.4973358813]}, +{"learn":[0.49581793],"iteration":988,"passed_time":32.99966306,"remaining_time":133.8338206,"test":[0.497334123]}, +{"learn":[0.4958157246],"iteration":989,"passed_time":33.03738777,"remaining_time":133.818106,"test":[0.4973325435]}, +{"learn":[0.4958147114],"iteration":990,"passed_time":33.07566477,"remaining_time":133.8045813,"test":[0.4973317984]}, +{"learn":[0.4958136981],"iteration":991,"passed_time":33.11523189,"remaining_time":133.7962192,"test":[0.4973309043]}, +{"learn":[0.4958117907],"iteration":992,"passed_time":33.15199857,"remaining_time":133.7764937,"test":[0.497329295]}, +{"learn":[0.4958098238],"iteration":993,"passed_time":33.18734683,"remaining_time":133.7510175,"test":[0.4973275963]}, +{"learn":[0.4958088105],"iteration":994,"passed_time":33.22579166,"remaining_time":133.7379855,"test":[0.4973267618]}, +{"learn":[0.4958076482],"iteration":995,"passed_time":33.26387578,"remaining_time":133.7234524,"test":[0.4973258975]}, +{"learn":[0.4958061283],"iteration":996,"passed_time":33.29985548,"remaining_time":133.7004227,"test":[0.4973244074]}, +{"learn":[0.495804817],"iteration":997,"passed_time":33.33748041,"remaining_time":133.6839645,"test":[0.4973234835]}, +{"learn":[0.495802701],"iteration":998,"passed_time":33.37430334,"remaining_time":133.6642519,"test":[0.4973215464]}, +{"learn":[0.4958004658],"iteration":999,"passed_time":33.41062108,"remaining_time":133.6424843,"test":[0.4973199967]}, +{"learn":[0.4957986479],"iteration":1000,"passed_time":33.44790476,"remaining_time":133.6245466,"test":[0.4973185066]}, +{"learn":[0.4957975154],"iteration":1001,"passed_time":33.48598122,"remaining_time":133.6097335,"test":[0.4973175529]}, +{"learn":[0.4957967108],"iteration":1002,"passed_time":33.52414526,"remaining_time":133.5952229,"test":[0.4973167482]}, +{"learn":[0.4957925086],"iteration":1003,"passed_time":33.55802974,"remaining_time":133.5636323,"test":[0.4973129931]}, +{"learn":[0.4957893496],"iteration":1004,"passed_time":33.59458886,"remaining_time":133.5426692,"test":[0.4973101619]}, +{"learn":[0.4957865184],"iteration":1005,"passed_time":33.62995527,"remaining_time":133.5169397,"test":[0.4973075989]}, +{"learn":[0.4957851475],"iteration":1006,"passed_time":33.66697574,"remaining_time":133.4977499,"test":[0.4973062578]}, +{"learn":[0.4957731073],"iteration":1007,"passed_time":33.69863969,"remaining_time":133.4573111,"test":[0.4972954992]}, +{"learn":[0.4957664018],"iteration":1008,"passed_time":33.73337317,"remaining_time":133.429031,"test":[0.4972898367]}, +{"learn":[0.4957605009],"iteration":1009,"passed_time":33.76778049,"remaining_time":133.3994497,"test":[0.4972847703]}, +{"learn":[0.4957595175],"iteration":1010,"passed_time":33.806047,"remaining_time":133.3850856,"test":[0.4972839657]}, +{"learn":[0.4957582658],"iteration":1011,"passed_time":33.84384093,"remaining_time":133.3688119,"test":[0.4972828928]}, +{"learn":[0.4957564776],"iteration":1012,"passed_time":33.88050382,"remaining_time":133.3480442,"test":[0.4972814921]}, +{"learn":[0.4957555836],"iteration":1013,"passed_time":33.91870403,"remaining_time":133.3332882,"test":[0.4972806278]}, +{"learn":[0.4957549279],"iteration":1014,"passed_time":33.95740837,"remaining_time":133.3204654,"test":[0.4972798828]}, +{"learn":[0.4957519179],"iteration":1015,"passed_time":33.99479201,"remaining_time":133.3024127,"test":[0.49727729]}, +{"learn":[0.4957135027],"iteration":1016,"passed_time":34.02725646,"remaining_time":133.2650565,"test":[0.4972440008]}, +{"learn":[0.4957121914],"iteration":1017,"passed_time":34.06564241,"remaining_time":133.2508724,"test":[0.4972432259]}, +{"learn":[0.4957043534],"iteration":1018,"passed_time":34.1003302,"remaining_time":133.2221929,"test":[0.4972363714]}, +{"learn":[0.4957029825],"iteration":1019,"passed_time":34.13763281,"remaining_time":133.2037045,"test":[0.497234762]}, +{"learn":[0.4957010751],"iteration":1020,"passed_time":34.17339066,"remaining_time":133.1791591,"test":[0.4972333613]}, +{"learn":[0.4957002108],"iteration":1021,"passed_time":34.21167138,"remaining_time":133.1644117,"test":[0.4972324971]}, +{"learn":[0.4956986611],"iteration":1022,"passed_time":34.24723504,"remaining_time":133.1390555,"test":[0.4972309772]}, +{"learn":[0.4956964558],"iteration":1023,"passed_time":34.28310899,"remaining_time":133.1148841,"test":[0.4972294572]}, +{"learn":[0.4956942802],"iteration":1024,"passed_time":34.32270786,"remaining_time":133.1051353,"test":[0.4972276393]}, +{"learn":[0.4956900185],"iteration":1025,"passed_time":34.35707978,"remaining_time":133.0750829,"test":[0.4972239438]}, +{"learn":[0.4956879919],"iteration":1026,"passed_time":34.39472205,"remaining_time":133.0576735,"test":[0.4972224835]}, +{"learn":[0.4956850117],"iteration":1027,"passed_time":34.43104451,"remaining_time":133.0351253,"test":[0.4972199503]}, +{"learn":[0.4956833129],"iteration":1028,"passed_time":34.46790001,"remaining_time":133.0146073,"test":[0.49721849]}, +{"learn":[0.4956815546],"iteration":1029,"passed_time":34.50480698,"remaining_time":132.994256,"test":[0.4972168807]}, +{"learn":[0.4956806009],"iteration":1030,"passed_time":34.54227987,"remaining_time":132.9760512,"test":[0.497216076]}, +{"learn":[0.4956797665],"iteration":1031,"passed_time":34.58029619,"remaining_time":132.9598985,"test":[0.4972153309]}, +{"learn":[0.4956766372],"iteration":1032,"passed_time":34.61631202,"remaining_time":132.9360211,"test":[0.4972124699]}, +{"learn":[0.4956754451],"iteration":1033,"passed_time":34.65327463,"remaining_time":132.9157516,"test":[0.4972115758]}, +{"learn":[0.4956737762],"iteration":1034,"passed_time":34.69059312,"remaining_time":132.8968132,"test":[0.4972098175]}, +{"learn":[0.495671839],"iteration":1035,"passed_time":34.72763525,"remaining_time":132.876782,"test":[0.4972081784]}, +{"learn":[0.4956681137],"iteration":1036,"passed_time":34.7625609,"remaining_time":132.8486296,"test":[0.497205377]}, +{"learn":[0.4956619745],"iteration":1037,"passed_time":34.79615814,"remaining_time":132.8153936,"test":[0.4971998039]}, +{"learn":[0.4956602161],"iteration":1038,"passed_time":34.83268605,"remaining_time":132.7933296,"test":[0.4971982244]}, +{"learn":[0.495658279],"iteration":1039,"passed_time":34.86939927,"remaining_time":132.7719434,"test":[0.4971967045]}, +{"learn":[0.4956552093],"iteration":1040,"passed_time":34.90576285,"remaining_time":132.749198,"test":[0.4971942011]}, +{"learn":[0.4956536298],"iteration":1041,"passed_time":34.94428787,"remaining_time":132.7346367,"test":[0.4971928898]}, +{"learn":[0.4956526463],"iteration":1042,"passed_time":34.98382016,"remaining_time":132.7238508,"test":[0.4971921447]}, +{"learn":[0.4956517821],"iteration":1043,"passed_time":35.02281103,"remaining_time":132.7109583,"test":[0.4971912209]}, +{"learn":[0.4956509476],"iteration":1044,"passed_time":35.06191623,"remaining_time":132.6984485,"test":[0.4971905056]}, +{"learn":[0.4956473415],"iteration":1045,"passed_time":35.09843732,"remaining_time":132.6761196,"test":[0.4971872571]}, +{"learn":[0.4956440335],"iteration":1046,"passed_time":35.13398262,"remaining_time":132.6500796,"test":[0.4971842471]}, +{"learn":[0.4956431692],"iteration":1047,"passed_time":35.17251086,"remaining_time":132.63527,"test":[0.4971835021]}, +{"learn":[0.4956422155],"iteration":1048,"passed_time":35.21177212,"remaining_time":132.623176,"test":[0.497182757]}, +{"learn":[0.4956405764],"iteration":1049,"passed_time":35.24796798,"remaining_time":132.5994986,"test":[0.4971812967]}, +{"learn":[0.4956386393],"iteration":1050,"passed_time":35.28476753,"remaining_time":132.5780656,"test":[0.4971799258]}, +{"learn":[0.4956371789],"iteration":1051,"passed_time":35.32209604,"remaining_time":132.5585886,"test":[0.4971784357]}, +{"learn":[0.4956352716],"iteration":1052,"passed_time":35.35834833,"remaining_time":132.5350436,"test":[0.4971766773]}, +{"learn":[0.4956341093],"iteration":1053,"passed_time":35.39683934,"remaining_time":132.5198558,"test":[0.4971759621]}, +{"learn":[0.4956286555],"iteration":1054,"passed_time":35.43180057,"remaining_time":132.4914249,"test":[0.4971711043]}, +{"learn":[0.4956271654],"iteration":1055,"passed_time":35.47047941,"remaining_time":132.4768663,"test":[0.4971697036]}, +{"learn":[0.4956240957],"iteration":1056,"passed_time":35.50637495,"remaining_time":132.4518793,"test":[0.497167081]}, +{"learn":[0.4956210559],"iteration":1057,"passed_time":35.54275571,"remaining_time":132.4286796,"test":[0.4971647862]}, +{"learn":[0.4956199532],"iteration":1058,"passed_time":35.58119332,"remaining_time":132.4131094,"test":[0.4971639219]}, +{"learn":[0.4956181353],"iteration":1059,"passed_time":35.6186606,"remaining_time":132.3938894,"test":[0.4971624914]}, +{"learn":[0.4956165557],"iteration":1060,"passed_time":35.65450232,"remaining_time":132.3686,"test":[0.4971608225]}, +{"learn":[0.4956130093],"iteration":1061,"passed_time":35.68981517,"remaining_time":132.3413297,"test":[0.4971577529]}, +{"learn":[0.4956102078],"iteration":1062,"passed_time":35.72669179,"remaining_time":132.3198359,"test":[0.4971553985]}, +{"learn":[0.4956094032],"iteration":1063,"passed_time":35.76486227,"remaining_time":132.3030995,"test":[0.4971544746]}, +{"learn":[0.4956081217],"iteration":1064,"passed_time":35.80347563,"remaining_time":132.2879592,"test":[0.4971536997]}, +{"learn":[0.4956069892],"iteration":1065,"passed_time":35.84138501,"remaining_time":132.2701769,"test":[0.4971529249]}, +{"learn":[0.4956059461],"iteration":1066,"passed_time":35.87990693,"remaining_time":132.2546148,"test":[0.4971520308]}, +{"learn":[0.4956000154],"iteration":1067,"passed_time":35.91391434,"remaining_time":132.2223887,"test":[0.4971469048]}, +{"learn":[0.4955969756],"iteration":1068,"passed_time":35.95061768,"remaining_time":132.2000731,"test":[0.4971441928]}, +{"learn":[0.4955949193],"iteration":1069,"passed_time":35.98678835,"remaining_time":132.1757741,"test":[0.4971425537]}, +{"learn":[0.4955937868],"iteration":1070,"passed_time":36.02585657,"remaining_time":132.1620826,"test":[0.4971418682]}, +{"learn":[0.4955909257],"iteration":1071,"passed_time":36.06137191,"remaining_time":132.1353254,"test":[0.4971387688]}, +{"learn":[0.495586962],"iteration":1072,"passed_time":36.09827428,"remaining_time":132.1136282,"test":[0.4971354011]}, +{"learn":[0.4955849653],"iteration":1073,"passed_time":36.13497575,"remaining_time":132.0911684,"test":[0.497133911]}, +{"learn":[0.4955831175],"iteration":1074,"passed_time":36.1710288,"remaining_time":132.0663145,"test":[0.4971323613]}, +{"learn":[0.4955822235],"iteration":1075,"passed_time":36.22760743,"remaining_time":132.1162933,"test":[0.497131348]}, +{"learn":[0.495581091],"iteration":1076,"passed_time":36.26609831,"remaining_time":132.1001891,"test":[0.4971307221]}, +{"learn":[0.4955800181],"iteration":1077,"passed_time":36.30471531,"remaining_time":132.0845023,"test":[0.4971300367]}, +{"learn":[0.4955782896],"iteration":1078,"passed_time":36.34117849,"remaining_time":132.0609461,"test":[0.4971283082]}, +{"learn":[0.4955724781],"iteration":1079,"passed_time":36.37505249,"remaining_time":132.0279683,"test":[0.4971235994]}, +{"learn":[0.4955688124],"iteration":1080,"passed_time":36.40959901,"remaining_time":131.997427,"test":[0.4971205894]}, +{"learn":[0.4955671137],"iteration":1081,"passed_time":36.44729807,"remaining_time":131.9782937,"test":[0.4971192185]}, +{"learn":[0.4955662196],"iteration":1082,"passed_time":36.48539181,"remaining_time":131.9605538,"test":[0.4971184138]}, +{"learn":[0.49556315],"iteration":1083,"passed_time":36.52036453,"remaining_time":131.9315014,"test":[0.4971154932]}, +{"learn":[0.495560736],"iteration":1084,"passed_time":36.55617075,"remaining_time":131.9054456,"test":[0.4971130494]}, +{"learn":[0.4955597227],"iteration":1085,"passed_time":36.59454958,"remaining_time":131.8886437,"test":[0.4971123341]}, +{"learn":[0.4955540007],"iteration":1086,"passed_time":36.62969948,"remaining_time":131.8601785,"test":[0.4971072379]}, +{"learn":[0.4955532556],"iteration":1087,"passed_time":36.66795861,"remaining_time":131.8428806,"test":[0.4971063737]}, +{"learn":[0.4955497687],"iteration":1088,"passed_time":36.70408557,"remaining_time":131.8178867,"test":[0.4971035424]}, +{"learn":[0.4955476826],"iteration":1089,"passed_time":36.73994656,"remaining_time":131.7919184,"test":[0.4971020225]}, +{"learn":[0.4955446427],"iteration":1090,"passed_time":36.77657967,"remaining_time":131.7686984,"test":[0.4970998171]}, +{"learn":[0.495543242],"iteration":1091,"passed_time":36.8136333,"remaining_time":131.7469587,"test":[0.4970984462]}, +{"learn":[0.4955416625],"iteration":1092,"passed_time":36.85224201,"remaining_time":131.7307498,"test":[0.4970971349]}, +{"learn":[0.4955359703],"iteration":1093,"passed_time":36.88697344,"remaining_time":131.7006565,"test":[0.4970920685]}, +{"learn":[0.495532394],"iteration":1094,"passed_time":36.92218143,"remaining_time":131.6722543,"test":[0.4970891181]}, +{"learn":[0.4955292945],"iteration":1095,"passed_time":36.95881512,"remaining_time":131.6489181,"test":[0.4970862571]}, +{"learn":[0.4955274468],"iteration":1096,"passed_time":36.99560908,"remaining_time":131.6261278,"test":[0.4970848564]}, +{"learn":[0.4955239301],"iteration":1097,"passed_time":37.03139507,"remaining_time":131.59973,"test":[0.4970818463]}, +{"learn":[0.4955223506],"iteration":1098,"passed_time":37.06752606,"remaining_time":131.5745397,"test":[0.4970802668]}, +{"learn":[0.4955186551],"iteration":1099,"passed_time":37.10363989,"remaining_time":131.5492687,"test":[0.4970771376]}, +{"learn":[0.4955178207],"iteration":1100,"passed_time":37.14255574,"remaining_time":131.5339008,"test":[0.4970765415]}, +{"learn":[0.4955159133],"iteration":1101,"passed_time":37.17954613,"remaining_time":131.5116795,"test":[0.4970753792]}, +{"learn":[0.4955140954],"iteration":1102,"passed_time":37.2171471,"remaining_time":131.4915886,"test":[0.4970739487]}, +{"learn":[0.495512188],"iteration":1103,"passed_time":37.25480042,"remaining_time":131.4716507,"test":[0.4970725778]}, +{"learn":[0.4955106085],"iteration":1104,"passed_time":37.29236404,"remaining_time":131.4513646,"test":[0.4970709983]}, +{"learn":[0.4955096846],"iteration":1105,"passed_time":37.33009557,"remaining_time":131.4316385,"test":[0.4970701042]}, +{"learn":[0.4955081349],"iteration":1106,"passed_time":37.36781063,"remaining_time":131.4118218,"test":[0.4970688227]}, +{"learn":[0.4955069428],"iteration":1107,"passed_time":37.40723928,"remaining_time":131.3979921,"test":[0.4970681075]}, +{"learn":[0.4955054527],"iteration":1108,"passed_time":37.44468739,"remaining_time":131.3771674,"test":[0.4970667366]}, +{"learn":[0.4955043798],"iteration":1109,"passed_time":37.48375554,"remaining_time":131.3619901,"test":[0.4970659617]}, +{"learn":[0.4955033069],"iteration":1110,"passed_time":37.52186531,"remaining_time":131.3434151,"test":[0.4970650974]}, +{"learn":[0.4955007439],"iteration":1111,"passed_time":37.55833004,"remaining_time":131.3190532,"test":[0.4970625046]}, +{"learn":[0.4954987174],"iteration":1112,"passed_time":37.59641678,"remaining_time":131.3003343,"test":[0.4970610443]}, +{"learn":[0.4954957967],"iteration":1113,"passed_time":37.63168736,"remaining_time":131.2717568,"test":[0.4970586601]}, +{"learn":[0.4954930847],"iteration":1114,"passed_time":37.66817956,"remaining_time":131.2474239,"test":[0.4970561269]}, +{"learn":[0.4954912966],"iteration":1115,"passed_time":37.70514538,"remaining_time":131.2247174,"test":[0.4970548752]}, +{"learn":[0.4954855447],"iteration":1116,"passed_time":37.73948127,"remaining_time":131.1928431,"test":[0.497049332]}, +{"learn":[0.4954844719],"iteration":1117,"passed_time":37.77773554,"remaining_time":131.1745701,"test":[0.4970486466]}, +{"learn":[0.4954826539],"iteration":1118,"passed_time":37.81454205,"remaining_time":131.1512401,"test":[0.4970470372]}, +{"learn":[0.4954814618],"iteration":1119,"passed_time":37.85342799,"remaining_time":131.1350898,"test":[0.4970461134]}, +{"learn":[0.4954795843],"iteration":1120,"passed_time":37.89045704,"remaining_time":131.1124736,"test":[0.4970446531]}, +{"learn":[0.4954787796],"iteration":1121,"passed_time":37.9301774,"remaining_time":131.0991336,"test":[0.497043908]}, +{"learn":[0.4954770511],"iteration":1122,"passed_time":37.96752147,"remaining_time":131.077543,"test":[0.4970424477]}, +{"learn":[0.495476157],"iteration":1123,"passed_time":38.00672208,"remaining_time":131.0623263,"test":[0.4970417026]}, +{"learn":[0.4954736536],"iteration":1124,"passed_time":38.04254326,"remaining_time":131.0354268,"test":[0.4970394078]}, +{"learn":[0.4954710012],"iteration":1125,"passed_time":38.07879477,"remaining_time":131.009992,"test":[0.4970369343]}, +{"learn":[0.4954697793],"iteration":1126,"passed_time":38.11781002,"remaining_time":130.9940357,"test":[0.4970361594]}, +{"learn":[0.4954687958],"iteration":1127,"passed_time":38.15614496,"remaining_time":130.9757033,"test":[0.4970354143]}, +{"learn":[0.4954660838],"iteration":1128,"passed_time":38.19294038,"remaining_time":130.9520569,"test":[0.4970330003]}, +{"learn":[0.4954642063],"iteration":1129,"passed_time":38.22883285,"remaining_time":130.9252948,"test":[0.4970315102]}, +{"learn":[0.4954581564],"iteration":1130,"passed_time":38.26458439,"remaining_time":130.8980345,"test":[0.4970264438]}, +{"learn":[0.4954545801],"iteration":1131,"passed_time":38.29983844,"remaining_time":130.8690593,"test":[0.497023702]}, +{"learn":[0.4954526728],"iteration":1132,"passed_time":38.33733357,"remaining_time":130.8477219,"test":[0.4970219139]}, +{"learn":[0.495450825],"iteration":1133,"passed_time":38.37383138,"remaining_time":130.822956,"test":[0.497020543]}, +{"learn":[0.495448262],"iteration":1134,"passed_time":38.41046851,"remaining_time":130.7986439,"test":[0.4970183972]}, +{"learn":[0.4954466527],"iteration":1135,"passed_time":38.44779904,"remaining_time":130.7766686,"test":[0.4970169667]}, +{"learn":[0.4954440301],"iteration":1136,"passed_time":38.48421825,"remaining_time":130.75157,"test":[0.4970147613]}, +{"learn":[0.4954431658],"iteration":1137,"passed_time":38.52283353,"remaining_time":130.7339043,"test":[0.4970139567]}, +{"learn":[0.49544254],"iteration":1138,"passed_time":38.5617649,"remaining_time":130.7172733,"test":[0.4970131818]}, +{"learn":[0.4954404538],"iteration":1139,"passed_time":38.59801734,"remaining_time":130.6915324,"test":[0.4970115725]}, +{"learn":[0.4954391425],"iteration":1140,"passed_time":38.63576292,"remaining_time":130.6708231,"test":[0.4970103208]}, +{"learn":[0.4954353278],"iteration":1141,"passed_time":38.67139484,"remaining_time":130.6429433,"test":[0.4970072213]}, +{"learn":[0.4954344338],"iteration":1142,"passed_time":38.71030753,"remaining_time":130.6261209,"test":[0.4970064167]}, +{"learn":[0.4954336589],"iteration":1143,"passed_time":38.74927459,"remaining_time":130.609443,"test":[0.4970058206]}, +{"learn":[0.4954326456],"iteration":1144,"passed_time":38.78818246,"remaining_time":130.592527,"test":[0.4970050458]}, +{"learn":[0.4954302912],"iteration":1145,"passed_time":38.82597905,"remaining_time":130.5718353,"test":[0.497003347]}, +{"learn":[0.4954285925],"iteration":1146,"passed_time":38.8628596,"remaining_time":130.5480367,"test":[0.4970019761]}, +{"learn":[0.4954270726],"iteration":1147,"passed_time":38.90075295,"remaining_time":130.5276135,"test":[0.4970006052]}, +{"learn":[0.4954263275],"iteration":1148,"passed_time":38.93960859,"remaining_time":130.5103853,"test":[0.4969999198]}, +{"learn":[0.4954254037],"iteration":1149,"passed_time":38.97794867,"remaining_time":130.4913934,"test":[0.4969993237]}, +{"learn":[0.4954239433],"iteration":1150,"passed_time":39.0155178,"remaining_time":130.4697898,"test":[0.4969978038]}, +{"learn":[0.4954225128],"iteration":1151,"passed_time":39.05199638,"remaining_time":130.4445157,"test":[0.4969964329]}, +{"learn":[0.4954211121],"iteration":1152,"passed_time":39.08908252,"remaining_time":130.4212493,"test":[0.4969951514]}, +{"learn":[0.4954178339],"iteration":1153,"passed_time":39.12514372,"remaining_time":130.3945431,"test":[0.4969924394]}, +{"learn":[0.4954146748],"iteration":1154,"passed_time":39.16082759,"remaining_time":130.3665646,"test":[0.496989489]}, +{"learn":[0.4954137212],"iteration":1155,"passed_time":39.19826692,"remaining_time":130.3444101,"test":[0.4969887439]}, +{"learn":[0.4954118436],"iteration":1156,"passed_time":39.23531531,"remaining_time":130.3209306,"test":[0.4969876114]}, +{"learn":[0.4954099959],"iteration":1157,"passed_time":39.27217896,"remaining_time":130.2968148,"test":[0.4969860021]}, +{"learn":[0.4954081481],"iteration":1158,"passed_time":39.30966125,"remaining_time":130.2747272,"test":[0.496984661]}, +{"learn":[0.4954065984],"iteration":1159,"passed_time":39.3460509,"remaining_time":130.2489961,"test":[0.4969832305]}, +{"learn":[0.4954039162],"iteration":1160,"passed_time":39.38194882,"remaining_time":130.2216206,"test":[0.4969810549]}, +{"learn":[0.4954017704],"iteration":1161,"passed_time":39.41824124,"remaining_time":130.1955335,"test":[0.4969794158]}, +{"learn":[0.495398969],"iteration":1162,"passed_time":39.45393818,"remaining_time":130.1674641,"test":[0.4969771806]}, +{"learn":[0.495396555],"iteration":1163,"passed_time":39.49069485,"remaining_time":130.1428741,"test":[0.4969750348]}, +{"learn":[0.4953955715],"iteration":1164,"passed_time":39.52946172,"remaining_time":130.1248804,"test":[0.4969742898]}, +{"learn":[0.4953945881],"iteration":1165,"passed_time":39.56795666,"remaining_time":130.105957,"test":[0.4969734553]}, +{"learn":[0.495391727],"iteration":1166,"passed_time":39.60451171,"remaining_time":130.0806284,"test":[0.4969706241]}, +{"learn":[0.4953883594],"iteration":1167,"passed_time":39.64020828,"remaining_time":130.0524641,"test":[0.4969678525]}, +{"learn":[0.4953866606],"iteration":1168,"passed_time":39.67666223,"remaining_time":130.026769,"test":[0.4969665412]}, +{"learn":[0.4953827863],"iteration":1169,"passed_time":39.71278706,"remaining_time":129.9999782,"test":[0.4969632033]}, +{"learn":[0.4953690475],"iteration":1170,"passed_time":39.74658241,"remaining_time":129.9655543,"test":[0.4969521765]}, +{"learn":[0.495367766],"iteration":1171,"passed_time":39.7825042,"remaining_time":129.9380769,"test":[0.4969508652]}, +{"learn":[0.4953668421],"iteration":1172,"passed_time":39.82110207,"remaining_time":129.919316,"test":[0.4969500903]}, +{"learn":[0.4953642195],"iteration":1173,"passed_time":39.85820762,"remaining_time":129.8956579,"test":[0.4969478551]}, +{"learn":[0.4953624314],"iteration":1174,"passed_time":39.8957067,"remaining_time":129.873258,"test":[0.4969464246]}, +{"learn":[0.4953596597],"iteration":1175,"passed_time":39.93133149,"remaining_time":129.8447378,"test":[0.4969439212]}, +{"learn":[0.4953586465],"iteration":1176,"passed_time":39.97018872,"remaining_time":129.8267047,"test":[0.4969430868]}, +{"learn":[0.4953578716],"iteration":1177,"passed_time":40.00914941,"remaining_time":129.808972,"test":[0.4969423417]}, +{"learn":[0.4953569179],"iteration":1178,"passed_time":40.0475466,"remaining_time":129.7893771,"test":[0.4969415668]}, +{"learn":[0.4953553384],"iteration":1179,"passed_time":40.08628499,"remaining_time":129.7708548,"test":[0.4969402257]}, +{"learn":[0.495352537],"iteration":1180,"passed_time":40.12255835,"remaining_time":129.7443271,"test":[0.4969378713]}, +{"learn":[0.4953513449],"iteration":1181,"passed_time":40.16183842,"remaining_time":129.727495,"test":[0.4969372157]}, +{"learn":[0.495349527],"iteration":1182,"passed_time":40.19759659,"remaining_time":129.6992613,"test":[0.4969355766]}, +{"learn":[0.4953468448],"iteration":1183,"passed_time":40.24391574,"remaining_time":129.7050528,"test":[0.496933252]}, +{"learn":[0.4953441029],"iteration":1184,"passed_time":40.27980848,"remaining_time":129.6771893,"test":[0.4969309274]}, +{"learn":[0.4953430301],"iteration":1185,"passed_time":40.31853227,"remaining_time":129.6584166,"test":[0.4969301525]}, +{"learn":[0.4953416293],"iteration":1186,"passed_time":40.35564698,"remaining_time":129.6344414,"test":[0.4969289008]}, +{"learn":[0.4953389173],"iteration":1187,"passed_time":40.39106261,"remaining_time":129.6049922,"test":[0.4969266657]}, +{"learn":[0.4953371888],"iteration":1188,"passed_time":40.42886833,"remaining_time":129.5831936,"test":[0.4969253544]}, +{"learn":[0.4953355497],"iteration":1189,"passed_time":40.46673896,"remaining_time":129.561576,"test":[0.4969240133]}, +{"learn":[0.4953346556],"iteration":1190,"passed_time":40.50492888,"remaining_time":129.5409522,"test":[0.4969231192]}, +{"learn":[0.4953330761],"iteration":1191,"passed_time":40.54120818,"remaining_time":129.5141953,"test":[0.4969215993]}, +{"learn":[0.4953309005],"iteration":1192,"passed_time":40.57770844,"remaining_time":129.4881274,"test":[0.4969200496]}, +{"learn":[0.4953283971],"iteration":1193,"passed_time":40.61436074,"remaining_time":129.4625268,"test":[0.4969178442]}, +{"learn":[0.4953253871],"iteration":1194,"passed_time":40.6508514,"remaining_time":129.4363929,"test":[0.496915311]}, +{"learn":[0.4953244334],"iteration":1195,"passed_time":40.68978588,"remaining_time":129.4180146,"test":[0.4969144765]}, +{"learn":[0.4953233605],"iteration":1196,"passed_time":40.72805138,"remaining_time":129.3974765,"test":[0.4969137613]}, +{"learn":[0.4953223472],"iteration":1197,"passed_time":40.76819851,"remaining_time":129.3828804,"test":[0.4969131056]}, +{"learn":[0.495321483],"iteration":1198,"passed_time":40.80576826,"remaining_time":129.360071,"test":[0.4969123308]}, +{"learn":[0.4953194266],"iteration":1199,"passed_time":40.84251296,"remaining_time":129.3346244,"test":[0.4969100062]}, +{"learn":[0.4953167146],"iteration":1200,"passed_time":40.87915985,"remaining_time":129.3088495,"test":[0.4969078008]}, +{"learn":[0.4953143006],"iteration":1201,"passed_time":40.91691922,"remaining_time":129.2865717,"test":[0.4969056848]}, +{"learn":[0.4953123933],"iteration":1202,"passed_time":40.95409309,"remaining_time":129.2624202,"test":[0.4969043139]}, +{"learn":[0.4953105753],"iteration":1203,"passed_time":40.99221006,"remaining_time":129.2412204,"test":[0.4969028834]}, +{"learn":[0.495308668],"iteration":1204,"passed_time":41.02856772,"remaining_time":129.2144519,"test":[0.4969013039]}, +{"learn":[0.4953077143],"iteration":1205,"passed_time":41.06637008,"remaining_time":129.1922124,"test":[0.496900529]}, +{"learn":[0.4953025287],"iteration":1206,"passed_time":41.10220114,"remaining_time":129.1637522,"test":[0.4968957011]}, +{"learn":[0.4953013664],"iteration":1207,"passed_time":41.14097771,"remaining_time":129.1445261,"test":[0.4968948666]}, +{"learn":[0.4952997273],"iteration":1208,"passed_time":41.17930537,"remaining_time":129.1238599,"test":[0.4968934659]}, +{"learn":[0.4952971345],"iteration":1209,"passed_time":41.21660976,"remaining_time":129.0999595,"test":[0.4968914095]}, +{"learn":[0.495295853],"iteration":1210,"passed_time":41.25534406,"remaining_time":129.0805109,"test":[0.4968900386]}, +{"learn":[0.4952950483],"iteration":1211,"passed_time":41.2947169,"remaining_time":129.0630261,"test":[0.4968892638]}, +{"learn":[0.4952918297],"iteration":1212,"passed_time":41.32946069,"remaining_time":129.0310533,"test":[0.4968870286]}, +{"learn":[0.4952902501],"iteration":1213,"passed_time":41.36571684,"remaining_time":129.0037924,"test":[0.4968856279]}, +{"learn":[0.4952888494],"iteration":1214,"passed_time":41.40365456,"remaining_time":128.9817552,"test":[0.4968842272]}, +{"learn":[0.4952868229],"iteration":1215,"passed_time":41.44079061,"remaining_time":128.9571971,"test":[0.496882588]}, +{"learn":[0.4952852136],"iteration":1216,"passed_time":41.47719045,"remaining_time":128.9303299,"test":[0.4968813661]}, +{"learn":[0.4952844387],"iteration":1217,"passed_time":41.51495874,"remaining_time":128.9076962,"test":[0.4968806509]}, +{"learn":[0.4952827102],"iteration":1218,"passed_time":41.55179259,"remaining_time":128.8821393,"test":[0.4968793098]}, +{"learn":[0.4952793425],"iteration":1219,"passed_time":41.58715784,"remaining_time":128.8520136,"test":[0.496876568]}, +{"learn":[0.4952784186],"iteration":1220,"passed_time":41.62503988,"remaining_time":128.8296689,"test":[0.4968757931]}, +{"learn":[0.4952734118],"iteration":1221,"passed_time":41.66084166,"remaining_time":128.8008673,"test":[0.4968712334]}, +{"learn":[0.495272488],"iteration":1222,"passed_time":41.69902271,"remaining_time":128.7794021,"test":[0.4968706075]}, +{"learn":[0.4952716237],"iteration":1223,"passed_time":41.73637977,"remaining_time":128.7553677,"test":[0.4968698028]}, +{"learn":[0.4952708786],"iteration":1224,"passed_time":41.77600434,"remaining_time":128.7382991,"test":[0.4968690578]}, +{"learn":[0.4952651566],"iteration":1225,"passed_time":41.81090041,"remaining_time":128.706638,"test":[0.4968642]}, +{"learn":[0.4952635771],"iteration":1226,"passed_time":41.84867132,"remaining_time":128.6838116,"test":[0.4968627993]}, +{"learn":[0.4952627128],"iteration":1227,"passed_time":41.88689999,"remaining_time":128.6623671,"test":[0.4968620542]}, +{"learn":[0.4952606266],"iteration":1228,"passed_time":41.923574,"remaining_time":128.6361249,"test":[0.4968605343]}, +{"learn":[0.4952596134],"iteration":1229,"passed_time":41.96314211,"remaining_time":128.6187364,"test":[0.4968597893]}, +{"learn":[0.4952573186],"iteration":1230,"passed_time":41.99889025,"remaining_time":128.589616,"test":[0.4968576733]}, +{"learn":[0.4952563947],"iteration":1231,"passed_time":42.03731709,"remaining_time":128.5686776,"test":[0.4968567494]}, +{"learn":[0.4952505237],"iteration":1232,"passed_time":42.07143699,"remaining_time":128.5345524,"test":[0.4968518022]}, +{"learn":[0.4952485567],"iteration":1233,"passed_time":42.10862402,"remaining_time":128.5097877,"test":[0.4968502823]}, +{"learn":[0.4952476328],"iteration":1234,"passed_time":42.14793398,"remaining_time":128.4914749,"test":[0.4968495373]}, +{"learn":[0.4952459341],"iteration":1235,"passed_time":42.18501076,"remaining_time":128.4663273,"test":[0.4968481962]}, +{"learn":[0.495244295],"iteration":1236,"passed_time":42.22188606,"remaining_time":128.4405475,"test":[0.4968467061]}, +{"learn":[0.4952429241],"iteration":1237,"passed_time":42.25801071,"remaining_time":128.4124687,"test":[0.4968455438]}, +{"learn":[0.4952420598],"iteration":1238,"passed_time":42.29714516,"remaining_time":128.3935133,"test":[0.4968447987]}, +{"learn":[0.4952402419],"iteration":1239,"passed_time":42.33475635,"remaining_time":128.3699063,"test":[0.4968433682]}, +{"learn":[0.4952395266],"iteration":1240,"passed_time":42.37362246,"remaining_time":128.350078,"test":[0.4968426827]}, +{"learn":[0.4952385133],"iteration":1241,"passed_time":42.41154358,"remaining_time":128.3273597,"test":[0.4968418781]}, +{"learn":[0.4952357119],"iteration":1242,"passed_time":42.44809249,"remaining_time":128.3004694,"test":[0.4968392853]}, +{"learn":[0.4952339536],"iteration":1243,"passed_time":42.48367396,"remaining_time":128.2706426,"test":[0.4968379144]}, +{"learn":[0.4952328807],"iteration":1244,"passed_time":42.52324368,"remaining_time":128.2528354,"test":[0.4968372587]}, +{"learn":[0.4952310329],"iteration":1245,"passed_time":42.55926909,"remaining_time":128.2243147,"test":[0.496835858]}, +{"learn":[0.4952280527],"iteration":1246,"passed_time":42.59398587,"remaining_time":128.1918436,"test":[0.4968329374]}, +{"learn":[0.4952218836],"iteration":1247,"passed_time":42.62903601,"remaining_time":128.1603711,"test":[0.4968279008]}, +{"learn":[0.4952202445],"iteration":1248,"passed_time":42.66593895,"remaining_time":128.1344572,"test":[0.4968266193]}, +{"learn":[0.4952189332],"iteration":1249,"passed_time":42.70289128,"remaining_time":128.1086738,"test":[0.4968255762]}, +{"learn":[0.495215953],"iteration":1250,"passed_time":42.73870365,"remaining_time":128.0794564,"test":[0.4968229238]}, +{"learn":[0.4952152079],"iteration":1251,"passed_time":42.77785545,"remaining_time":128.0602254,"test":[0.4968222085]}, +{"learn":[0.495213986],"iteration":1252,"passed_time":42.8140004,"remaining_time":128.0319709,"test":[0.4968210165]}, +{"learn":[0.4952099925],"iteration":1253,"passed_time":42.84912348,"remaining_time":128.0006512,"test":[0.4968175296]}, +{"learn":[0.4952083534],"iteration":1254,"passed_time":42.88725218,"remaining_time":127.9782944,"test":[0.4968159799]}, +{"learn":[0.4952071315],"iteration":1255,"passed_time":42.92513612,"remaining_time":127.9551828,"test":[0.496814907]}, +{"learn":[0.4952055818],"iteration":1256,"passed_time":42.96269046,"remaining_time":127.9310663,"test":[0.4968135361]}, +{"learn":[0.4952041214],"iteration":1257,"passed_time":43.00059219,"remaining_time":127.9079618,"test":[0.4968123142]}, +{"learn":[0.4952010816],"iteration":1258,"passed_time":43.03579225,"remaining_time":127.876806,"test":[0.4968099002]}, +{"learn":[0.4951998001],"iteration":1259,"passed_time":43.07299683,"remaining_time":127.8515938,"test":[0.4968086187]}, +{"learn":[0.4951990252],"iteration":1260,"passed_time":43.11184034,"remaining_time":127.8312221,"test":[0.4968079034]}, +{"learn":[0.4951872831],"iteration":1261,"passed_time":43.14497813,"remaining_time":127.793921,"test":[0.4967976812]}, +{"learn":[0.4951855546],"iteration":1262,"passed_time":43.18248322,"remaining_time":127.7695485,"test":[0.4967963699]}, +{"learn":[0.4951831704],"iteration":1263,"passed_time":43.21971864,"remaining_time":127.7443583,"test":[0.4967947606]}, +{"learn":[0.4951820081],"iteration":1264,"passed_time":43.25752198,"remaining_time":127.7208258,"test":[0.4967935685]}, +{"learn":[0.4951812333],"iteration":1265,"passed_time":43.29590749,"remaining_time":127.6989878,"test":[0.4967928235]}, +{"learn":[0.495180071],"iteration":1266,"passed_time":43.33404479,"remaining_time":127.6763924,"test":[0.4967916314]}, +{"learn":[0.4951788789],"iteration":1267,"passed_time":43.37257212,"remaining_time":127.6549205,"test":[0.4967909161]}, +{"learn":[0.495178253],"iteration":1268,"passed_time":43.41068211,"remaining_time":127.6321946,"test":[0.4967902605]}, +{"learn":[0.4951773292],"iteration":1269,"passed_time":43.45000074,"remaining_time":127.6129943,"test":[0.496789426]}, +{"learn":[0.4951764649],"iteration":1270,"passed_time":43.48920361,"remaining_time":127.5934227,"test":[0.4967887107]}, +{"learn":[0.495170713],"iteration":1271,"passed_time":43.52321345,"remaining_time":127.5586004,"test":[0.4967837338]}, +{"learn":[0.4951688653],"iteration":1272,"passed_time":43.55956706,"remaining_time":127.5306414,"test":[0.4967821542]}, +{"learn":[0.4951673454],"iteration":1273,"passed_time":43.59688081,"remaining_time":127.5054771,"test":[0.4967810515]}, +{"learn":[0.4951657659],"iteration":1274,"passed_time":43.63344634,"remaining_time":127.4781079,"test":[0.4967797998]}, +{"learn":[0.4951648122],"iteration":1275,"passed_time":43.67299945,"remaining_time":127.4594435,"test":[0.4967791144]}, +{"learn":[0.4951639181],"iteration":1276,"passed_time":43.71311733,"remaining_time":127.442393,"test":[0.4967782799]}, +{"learn":[0.4951609975],"iteration":1277,"passed_time":43.74922419,"remaining_time":127.4136248,"test":[0.4967759553]}, +{"learn":[0.4951581663],"iteration":1278,"passed_time":43.78641096,"remaining_time":127.3879868,"test":[0.4967734818]}, +{"learn":[0.4951567656],"iteration":1279,"passed_time":43.82365459,"remaining_time":127.3624962,"test":[0.4967722301]}, +{"learn":[0.4951534575],"iteration":1280,"passed_time":43.85917346,"remaining_time":127.3319798,"test":[0.4967693392]}, +{"learn":[0.4951506561],"iteration":1281,"passed_time":43.89505565,"remaining_time":127.3025093,"test":[0.4967670743]}, +{"learn":[0.4951497322],"iteration":1282,"passed_time":43.93306573,"remaining_time":127.2791936,"test":[0.496766359]}, +{"learn":[0.4951461261],"iteration":1283,"passed_time":43.96838215,"remaining_time":127.2480592,"test":[0.4967635576]}, +{"learn":[0.4951448446],"iteration":1284,"passed_time":44.00571246,"remaining_time":127.2227407,"test":[0.4967624251]}, +{"learn":[0.495141775],"iteration":1285,"passed_time":44.04197623,"remaining_time":127.1943233,"test":[0.4967598621]}, +{"learn":[0.4951397186],"iteration":1286,"passed_time":44.07790348,"remaining_time":127.1649228,"test":[0.4967585508]}, +{"learn":[0.4951379007],"iteration":1287,"passed_time":44.11394278,"remaining_time":127.1358351,"test":[0.4967570011]}, +{"learn":[0.4951370066],"iteration":1288,"passed_time":44.15206127,"remaining_time":127.1127225,"test":[0.4967561666]}, +{"learn":[0.4951364404],"iteration":1289,"passed_time":44.19050043,"remaining_time":127.090509,"test":[0.4967555706]}, +{"learn":[0.4951350099],"iteration":1290,"passed_time":44.22651172,"remaining_time":127.0612951,"test":[0.4967543487]}, +{"learn":[0.4951334005],"iteration":1291,"passed_time":44.26386466,"remaining_time":127.0359212,"test":[0.4967529182]}, +{"learn":[0.4951277977],"iteration":1292,"passed_time":44.29831706,"remaining_time":127.002213,"test":[0.4967482094]}, +{"learn":[0.4951266652],"iteration":1293,"passed_time":44.33617107,"remaining_time":126.9782457,"test":[0.4967470769]}, +{"learn":[0.4951257711],"iteration":1294,"passed_time":44.37466735,"remaining_time":126.9560946,"test":[0.4967465107]}, +{"learn":[0.4951243704],"iteration":1295,"passed_time":44.41121048,"remaining_time":126.9283361,"test":[0.4967450503]}, +{"learn":[0.4951214498],"iteration":1296,"passed_time":44.44712819,"remaining_time":126.8987785,"test":[0.4967424873]}, +{"learn":[0.4951205855],"iteration":1297,"passed_time":44.48622052,"remaining_time":126.8782653,"test":[0.4967419211]}, +{"learn":[0.4951196617],"iteration":1298,"passed_time":44.52413508,"remaining_time":126.8543679,"test":[0.4967412058]}, +{"learn":[0.49511841],"iteration":1299,"passed_time":44.561604,"remaining_time":126.8291806,"test":[0.4967403714]}, +{"learn":[0.4951170987],"iteration":1300,"passed_time":44.59959239,"remaining_time":126.8054514,"test":[0.4967391793]}, +{"learn":[0.4951152211],"iteration":1301,"passed_time":44.63755586,"remaining_time":126.7816295,"test":[0.4967377786]}, +{"learn":[0.49511388],"iteration":1302,"passed_time":44.6746063,"remaining_time":126.7551953,"test":[0.4967363779]}, +{"learn":[0.4951130456],"iteration":1303,"passed_time":44.71210234,"remaining_time":126.7300078,"test":[0.4967356328]}, +{"learn":[0.4951122111],"iteration":1304,"passed_time":44.74999752,"remaining_time":126.7059317,"test":[0.4967349176]}, +{"learn":[0.495111466],"iteration":1305,"passed_time":44.78871253,"remaining_time":126.6841532,"test":[0.4967343215]}, +{"learn":[0.4951105124],"iteration":1306,"passed_time":44.82768545,"remaining_time":126.6630776,"test":[0.4967336063]}, +{"learn":[0.4951089328],"iteration":1307,"passed_time":44.86361683,"remaining_time":126.6333894,"test":[0.4967323546]}, +{"learn":[0.4951053864],"iteration":1308,"passed_time":44.89995382,"remaining_time":126.6048354,"test":[0.4967294041]}, +{"learn":[0.4951027638],"iteration":1309,"passed_time":44.93698708,"remaining_time":126.5782308,"test":[0.4967272286]}, +{"learn":[0.4951011544],"iteration":1310,"passed_time":44.97409779,"remaining_time":126.5518282,"test":[0.4967257384]}, +{"learn":[0.49510032],"iteration":1311,"passed_time":45.01229661,"remaining_time":126.5284679,"test":[0.4967251424]}, +{"learn":[0.4950972801],"iteration":1312,"passed_time":45.04726774,"remaining_time":126.4960214,"test":[0.4967226688]}, +{"learn":[0.4950962669],"iteration":1313,"passed_time":45.08575396,"remaining_time":126.4734316,"test":[0.4967219535]}, +{"learn":[0.4950937337],"iteration":1314,"passed_time":45.12239009,"remaining_time":126.4456331,"test":[0.4967195992]}, +{"learn":[0.4950928992],"iteration":1315,"passed_time":45.15995759,"remaining_time":126.4204284,"test":[0.4967189137]}, +{"learn":[0.4950921541],"iteration":1316,"passed_time":45.19924629,"remaining_time":126.4000183,"test":[0.4967180792]}, +{"learn":[0.4950904554],"iteration":1317,"passed_time":45.23612943,"remaining_time":126.3728593,"test":[0.4967170958]}, +{"learn":[0.4950886971],"iteration":1318,"passed_time":45.27176718,"remaining_time":126.34221,"test":[0.4967155162]}, +{"learn":[0.4950872666],"iteration":1319,"passed_time":45.30954501,"remaining_time":126.3175194,"test":[0.4967139963]}, +{"learn":[0.4950823492],"iteration":1320,"passed_time":45.34581484,"remaining_time":126.2886092,"test":[0.4967100028]}, +{"learn":[0.495080412],"iteration":1321,"passed_time":45.38260596,"remaining_time":126.2611382,"test":[0.4967087213]}, +{"learn":[0.4950788921],"iteration":1322,"passed_time":45.4193404,"remaining_time":126.2334956,"test":[0.4967076484]}, +{"learn":[0.495077253],"iteration":1323,"passed_time":45.45658791,"remaining_time":126.2072637,"test":[0.4967062775]}, +{"learn":[0.4950743323],"iteration":1324,"passed_time":45.4916669,"remaining_time":126.1750006,"test":[0.4967037145]}, +{"learn":[0.4950734085],"iteration":1325,"passed_time":45.52932453,"remaining_time":126.1498781,"test":[0.4967029695]}, +{"learn":[0.4950707263],"iteration":1326,"passed_time":45.56547638,"remaining_time":126.1205687,"test":[0.4967008237]}, +{"learn":[0.4950676566],"iteration":1327,"passed_time":45.60140967,"remaining_time":126.0906448,"test":[0.4966982011]}, +{"learn":[0.4950662559],"iteration":1328,"passed_time":45.63683325,"remaining_time":126.0593039,"test":[0.496697158]}, +{"learn":[0.4950647658],"iteration":1329,"passed_time":45.67383237,"remaining_time":126.0323044,"test":[0.4966957871]}, +{"learn":[0.4950630969],"iteration":1330,"passed_time":45.71000329,"remaining_time":126.0030068,"test":[0.4966943566]}, +{"learn":[0.4950614875],"iteration":1331,"passed_time":45.7469967,"remaining_time":125.9759639,"test":[0.4966931645]}, +{"learn":[0.4950601166],"iteration":1332,"passed_time":45.78292225,"remaining_time":125.9459684,"test":[0.496691883]}, +{"learn":[0.4950589544],"iteration":1333,"passed_time":45.82125305,"remaining_time":125.922574,"test":[0.4966911379]}, +{"learn":[0.4950568682],"iteration":1334,"passed_time":45.85857159,"remaining_time":125.8963782,"test":[0.4966895882]}, +{"learn":[0.4950555569],"iteration":1335,"passed_time":45.89690284,"remaining_time":125.8729431,"test":[0.4966886047]}, +{"learn":[0.495054633],"iteration":1336,"passed_time":45.93562931,"remaining_time":125.8505686,"test":[0.4966877405]}, +{"learn":[0.4950532025],"iteration":1337,"passed_time":45.97093228,"remaining_time":125.8187997,"test":[0.4966865484]}, +{"learn":[0.4950513846],"iteration":1338,"passed_time":46.0077875,"remaining_time":125.7912696,"test":[0.4966850881]}, +{"learn":[0.4950490898],"iteration":1339,"passed_time":46.0447934,"remaining_time":125.7641372,"test":[0.4966829125]}, +{"learn":[0.4950440234],"iteration":1340,"passed_time":46.08018092,"remaining_time":125.7325742,"test":[0.4966787104]}, +{"learn":[0.4950432187],"iteration":1341,"passed_time":46.11892677,"remaining_time":125.7101596,"test":[0.4966779951]}, +{"learn":[0.4950405663],"iteration":1342,"passed_time":46.15530269,"remaining_time":125.6812673,"test":[0.4966757003]}, +{"learn":[0.4950397021],"iteration":1343,"passed_time":46.19442414,"remaining_time":125.6598323,"test":[0.4966749255]}, +{"learn":[0.4950378245],"iteration":1344,"passed_time":46.23358337,"remaining_time":125.6384738,"test":[0.4966733758]}, +{"learn":[0.495036543],"iteration":1345,"passed_time":46.27273297,"remaining_time":125.6170626,"test":[0.4966720645]}, +{"learn":[0.4950354701],"iteration":1346,"passed_time":46.31113462,"remaining_time":125.5935967,"test":[0.4966713194]}, +{"learn":[0.4950334436],"iteration":1347,"passed_time":46.34869839,"remaining_time":125.5678387,"test":[0.4966700081]}, +{"learn":[0.4950326687],"iteration":1348,"passed_time":46.38754797,"remaining_time":125.5455431,"test":[0.4966693226]}, +{"learn":[0.4950291818],"iteration":1349,"passed_time":46.42272361,"remaining_time":125.5132898,"test":[0.4966666106]}, +{"learn":[0.4950273341],"iteration":1350,"passed_time":46.4608681,"remaining_time":125.4890508,"test":[0.4966650609]}, +{"learn":[0.4950265592],"iteration":1351,"passed_time":46.49929346,"remaining_time":125.4655492,"test":[0.4966643457]}, +{"learn":[0.4950250393],"iteration":1352,"passed_time":46.53675747,"remaining_time":125.4394342,"test":[0.4966629748]}, +{"learn":[0.4950223273],"iteration":1353,"passed_time":46.57218065,"remaining_time":125.407807,"test":[0.4966607992]}, +{"learn":[0.495021314],"iteration":1354,"passed_time":46.60987697,"remaining_time":125.382289,"test":[0.4966600541]}, +{"learn":[0.4950195259],"iteration":1355,"passed_time":46.64618626,"remaining_time":125.3530256,"test":[0.4966587428]}, +{"learn":[0.4950185722],"iteration":1356,"passed_time":46.68487151,"remaining_time":125.3301304,"test":[0.4966580276]}, +{"learn":[0.4950171417],"iteration":1357,"passed_time":46.72168651,"remaining_time":125.3021961,"test":[0.4966567461]}, +{"learn":[0.4950150257],"iteration":1358,"passed_time":46.75817095,"remaining_time":125.2733631,"test":[0.4966551069]}, +{"learn":[0.4950140423],"iteration":1359,"passed_time":46.79628798,"remaining_time":125.2488884,"test":[0.4966543023]}, +{"learn":[0.4950109726],"iteration":1360,"passed_time":46.83185506,"remaining_time":125.2175757,"test":[0.496651173]}, +{"learn":[0.4950094229],"iteration":1361,"passed_time":46.86851007,"remaining_time":125.1891627,"test":[0.4966498915]}, +{"learn":[0.495008499],"iteration":1362,"passed_time":46.9078914,"remaining_time":125.1680125,"test":[0.4966492061]}, +{"learn":[0.4950030452],"iteration":1363,"passed_time":46.94194148,"remaining_time":125.1326241,"test":[0.4966439609]}, +{"learn":[0.4950010782],"iteration":1364,"passed_time":46.98005835,"remaining_time":125.1080675,"test":[0.4966427688]}, +{"learn":[0.4949994689],"iteration":1365,"passed_time":47.01672528,"remaining_time":125.0796337,"test":[0.4966415171]}, +{"learn":[0.4949979192],"iteration":1366,"passed_time":47.05358874,"remaining_time":125.0517102,"test":[0.496640176]}, +{"learn":[0.4949965185],"iteration":1367,"passed_time":47.09084027,"remaining_time":125.024804,"test":[0.4966391031]}, +{"learn":[0.4949935979],"iteration":1368,"passed_time":47.1253851,"remaining_time":124.9907037,"test":[0.4966365401]}, +{"learn":[0.4949920183],"iteration":1369,"passed_time":47.16272662,"remaining_time":124.9640129,"test":[0.496635199]}, +{"learn":[0.494989664],"iteration":1370,"passed_time":47.19992459,"remaining_time":124.9369266,"test":[0.496633083]}, +{"learn":[0.4949883825],"iteration":1371,"passed_time":47.23680142,"remaining_time":124.9089763,"test":[0.4966317419]}, +{"learn":[0.4949874288],"iteration":1372,"passed_time":47.2750119,"remaining_time":124.8845362,"test":[0.4966311161]}, +{"learn":[0.4949863559],"iteration":1373,"passed_time":47.31188949,"remaining_time":124.8565584,"test":[0.4966301624]}, +{"learn":[0.4949847764],"iteration":1374,"passed_time":47.34824237,"remaining_time":124.8271844,"test":[0.4966288511]}, +{"learn":[0.4949834949],"iteration":1375,"passed_time":47.38573037,"remaining_time":124.8007899,"test":[0.4966276888]}, +{"learn":[0.4949798292],"iteration":1376,"passed_time":47.42194438,"remaining_time":124.7710272,"test":[0.4966245894]}, +{"learn":[0.4949781901],"iteration":1377,"passed_time":47.45973229,"remaining_time":124.7453921,"test":[0.4966234271]}, +{"learn":[0.4949773258],"iteration":1378,"passed_time":47.49800908,"remaining_time":124.7210231,"test":[0.496622831]}, +{"learn":[0.4949761933],"iteration":1379,"passed_time":47.53827315,"remaining_time":124.7018469,"test":[0.4966221754]}, +{"learn":[0.494975329],"iteration":1380,"passed_time":47.57640785,"remaining_time":124.6770601,"test":[0.4966213707]}, +{"learn":[0.494974435],"iteration":1381,"passed_time":47.61551887,"remaining_time":124.6548099,"test":[0.4966207151]}, +{"learn":[0.494972766],"iteration":1382,"passed_time":47.65446386,"remaining_time":124.6321011,"test":[0.4966191653]}, +{"learn":[0.4949712461],"iteration":1383,"passed_time":47.69135851,"remaining_time":124.6040118,"test":[0.4966178242]}, +{"learn":[0.4949703223],"iteration":1384,"passed_time":47.72897826,"remaining_time":124.5778025,"test":[0.4966169004]}, +{"learn":[0.4949683851],"iteration":1385,"passed_time":47.76632674,"remaining_time":124.5508693,"test":[0.4966158573]}, +{"learn":[0.4949655241],"iteration":1386,"passed_time":47.80313841,"remaining_time":124.5225228,"test":[0.4966136221]}, +{"learn":[0.4949648386],"iteration":1387,"passed_time":47.84118929,"remaining_time":124.4973888,"test":[0.4966130261]}, +{"learn":[0.4949632591],"iteration":1388,"passed_time":47.87869242,"remaining_time":124.4708123,"test":[0.4966116552]}, +{"learn":[0.494961918],"iteration":1389,"passed_time":47.91620245,"remaining_time":124.444238,"test":[0.4966101948]}, +{"learn":[0.4949610835],"iteration":1390,"passed_time":47.95465846,"remaining_time":124.4201024,"test":[0.4966095094]}, +{"learn":[0.4949595338],"iteration":1391,"passed_time":47.99172134,"remaining_time":124.3923352,"test":[0.4966084663]}, +{"learn":[0.4949585503],"iteration":1392,"passed_time":48.02897369,"remaining_time":124.3650453,"test":[0.4966076318]}, +{"learn":[0.4949569708],"iteration":1393,"passed_time":48.06408704,"remaining_time":124.3322079,"test":[0.4966061715]}, +{"learn":[0.4949557191],"iteration":1394,"passed_time":48.10154266,"remaining_time":124.3054203,"test":[0.4966050987]}, +{"learn":[0.4949541098],"iteration":1395,"passed_time":48.13766511,"remaining_time":124.2751755,"test":[0.4966039662]}, +{"learn":[0.4949531859],"iteration":1396,"passed_time":48.17653611,"remaining_time":124.2520112,"test":[0.4966031913]}, +{"learn":[0.494951964],"iteration":1397,"passed_time":48.21340893,"remaining_time":124.2236759,"test":[0.4966019396]}, +{"learn":[0.4949499077],"iteration":1398,"passed_time":48.25020952,"remaining_time":124.1951426,"test":[0.4965998236]}, +{"learn":[0.4949489242],"iteration":1399,"passed_time":48.28863244,"remaining_time":124.1707691,"test":[0.4965991084]}, +{"learn":[0.4949460632],"iteration":1400,"passed_time":48.32452011,"remaining_time":124.1398629,"test":[0.496597052]}, +{"learn":[0.4949445731],"iteration":1401,"passed_time":48.36219939,"remaining_time":124.1135474,"test":[0.4965958301]}, +{"learn":[0.4949424571],"iteration":1402,"passed_time":48.398238,"remaining_time":124.0830093,"test":[0.4965942804]}, +{"learn":[0.4949398345],"iteration":1403,"passed_time":48.43397551,"remaining_time":124.0516923,"test":[0.4965920452]}, +{"learn":[0.4949391192],"iteration":1404,"passed_time":48.47340501,"remaining_time":124.0298157,"test":[0.496591479]}, +{"learn":[0.4949383444],"iteration":1405,"passed_time":48.5121692,"remaining_time":124.0062135,"test":[0.4965907637]}, +{"learn":[0.4949351257],"iteration":1406,"passed_time":48.54772333,"remaining_time":123.9743923,"test":[0.496588767]}, +{"learn":[0.4949335462],"iteration":1407,"passed_time":48.58556866,"remaining_time":123.948411,"test":[0.4965875153]}, +{"learn":[0.4949318773],"iteration":1408,"passed_time":48.62274122,"remaining_time":123.9206982,"test":[0.4965860848]}, +{"learn":[0.4949311024],"iteration":1409,"passed_time":48.66080791,"remaining_time":123.8952485,"test":[0.4965853695]}, +{"learn":[0.4949303275],"iteration":1410,"passed_time":48.69879779,"remaining_time":123.8695856,"test":[0.4965846543]}, +{"learn":[0.4949279732],"iteration":1411,"passed_time":48.73515461,"remaining_time":123.8397555,"test":[0.4965825085]}, +{"learn":[0.4949265725],"iteration":1412,"passed_time":48.77308438,"remaining_time":123.8139092,"test":[0.4965811376]}, +{"learn":[0.49492544],"iteration":1413,"passed_time":48.8110761,"remaining_time":123.7882029,"test":[0.4965800349]}, +{"learn":[0.4949240393],"iteration":1414,"passed_time":48.84914688,"remaining_time":123.7626796,"test":[0.4965787534]}, +{"learn":[0.4949232942],"iteration":1415,"passed_time":48.88751117,"remaining_time":123.7378814,"test":[0.4965780381]}, +{"learn":[0.4949225789],"iteration":1416,"passed_time":48.92519879,"remaining_time":123.711353,"test":[0.4965773825]}, +{"learn":[0.4949205226],"iteration":1417,"passed_time":48.96197438,"remaining_time":123.6825051,"test":[0.4965758626]}, +{"learn":[0.4949177212],"iteration":1418,"passed_time":48.99797081,"remaining_time":123.6516797,"test":[0.4965737764]}, +{"learn":[0.4949168569],"iteration":1419,"passed_time":49.03632811,"remaining_time":123.626799,"test":[0.496573091]}, +{"learn":[0.4949160224],"iteration":1420,"passed_time":49.07534588,"remaining_time":123.6035629,"test":[0.4965724055]}, +{"learn":[0.4949149793],"iteration":1421,"passed_time":49.11421489,"remaining_time":123.5799303,"test":[0.4965716903]}, +{"learn":[0.494913668],"iteration":1422,"passed_time":49.15183416,"remaining_time":123.5531348,"test":[0.496570677]}, +{"learn":[0.4949122375],"iteration":1423,"passed_time":49.18917133,"remaining_time":123.5256156,"test":[0.4965695743]}, +{"learn":[0.4949102706],"iteration":1424,"passed_time":49.2263523,"remaining_time":123.4976908,"test":[0.4965680842]}, +{"learn":[0.4949094063],"iteration":1425,"passed_time":49.26581867,"remaining_time":123.475481,"test":[0.4965673093]}, +{"learn":[0.4949083334],"iteration":1426,"passed_time":49.30422539,"remaining_time":123.4505938,"test":[0.4965665941]}, +{"learn":[0.4949058002],"iteration":1427,"passed_time":49.34158109,"remaining_time":123.4230586,"test":[0.4965645079]}, +{"learn":[0.4949050254],"iteration":1428,"passed_time":49.3809064,"remaining_time":123.4004316,"test":[0.4965638224]}, +{"learn":[0.4949021644],"iteration":1429,"passed_time":49.415656,"remaining_time":123.366358,"test":[0.4965612892]}, +{"learn":[0.4949012703],"iteration":1430,"passed_time":49.45329313,"remaining_time":123.3394851,"test":[0.4965606336]}, +{"learn":[0.4948995119],"iteration":1431,"passed_time":49.48943347,"remaining_time":123.3088678,"test":[0.4965592627]}, +{"learn":[0.4948987967],"iteration":1432,"passed_time":49.52853596,"remaining_time":123.285616,"test":[0.496558458]}, +{"learn":[0.4948980218],"iteration":1433,"passed_time":49.56660613,"remaining_time":123.2597751,"test":[0.4965578024]}, +{"learn":[0.4948956972],"iteration":1434,"passed_time":49.60195905,"remaining_time":123.2271666,"test":[0.4965556268]}, +{"learn":[0.4948951608],"iteration":1435,"passed_time":49.64048213,"remaining_time":123.2024222,"test":[0.4965550606]}, +{"learn":[0.4948935515],"iteration":1436,"passed_time":49.67809579,"remaining_time":123.1754038,"test":[0.4965537195]}, +{"learn":[0.4948903924],"iteration":1437,"passed_time":49.7142187,"remaining_time":123.144678,"test":[0.4965517823]}, +{"learn":[0.4948889321],"iteration":1438,"passed_time":49.75212975,"remaining_time":123.1183697,"test":[0.49655062]}, +{"learn":[0.4948880083],"iteration":1439,"passed_time":49.79149537,"remaining_time":123.0956413,"test":[0.4965499048]}, +{"learn":[0.4948871142],"iteration":1440,"passed_time":49.8297764,"remaining_time":123.0702111,"test":[0.4965493981]}, +{"learn":[0.4948851472],"iteration":1441,"passed_time":49.86615814,"remaining_time":123.0400767,"test":[0.4965477888]}, +{"learn":[0.4948818988],"iteration":1442,"passed_time":49.90185192,"remaining_time":123.0082379,"test":[0.4965449278]}, +{"learn":[0.4948811239],"iteration":1443,"passed_time":49.94058535,"remaining_time":122.9838792,"test":[0.4965442125]}, +{"learn":[0.4948794252],"iteration":1444,"passed_time":49.97763159,"remaining_time":122.9553497,"test":[0.496542931]}, +{"learn":[0.4948761767],"iteration":1445,"passed_time":50.01313143,"remaining_time":122.9230077,"test":[0.49654007]}, +{"learn":[0.494874776],"iteration":1446,"passed_time":50.05067062,"remaining_time":122.8956688,"test":[0.4965387885]}, +{"learn":[0.494873882],"iteration":1447,"passed_time":50.08886073,"remaining_time":122.8699125,"test":[0.4965381924]}, +{"learn":[0.4948731071],"iteration":1448,"passed_time":50.12694692,"remaining_time":122.8438844,"test":[0.4965375368]}, +{"learn":[0.494871915],"iteration":1449,"passed_time":50.16424993,"remaining_time":122.8159222,"test":[0.4965364043]}, +{"learn":[0.4948694116],"iteration":1450,"passed_time":50.19943108,"remaining_time":122.7827574,"test":[0.4965341393]}, +{"learn":[0.4948675937],"iteration":1451,"passed_time":50.23748164,"remaining_time":122.7566011,"test":[0.4965326492]}, +{"learn":[0.4948660141],"iteration":1452,"passed_time":50.2730915,"remaining_time":122.7244704,"test":[0.4965313677]}, +{"learn":[0.4948642856],"iteration":1453,"passed_time":50.30978423,"remaining_time":122.6949759,"test":[0.4965299074]}, +{"learn":[0.4948627359],"iteration":1454,"passed_time":50.34886373,"remaining_time":122.6712866,"test":[0.4965286259]}, +{"learn":[0.4948602027],"iteration":1455,"passed_time":50.38407179,"remaining_time":122.6381528,"test":[0.4965264205]}, +{"learn":[0.4948583251],"iteration":1456,"passed_time":50.42043434,"remaining_time":122.6078235,"test":[0.4965251092]}, +{"learn":[0.4948567158],"iteration":1457,"passed_time":50.45678096,"remaining_time":122.5774473,"test":[0.4965236787]}, +{"learn":[0.4948468512],"iteration":1458,"passed_time":50.4894329,"remaining_time":122.5380959,"test":[0.4965154533]}, +{"learn":[0.4948453611],"iteration":1459,"passed_time":50.52604689,"remaining_time":122.5083603,"test":[0.4965140824]}, +{"learn":[0.4948446757],"iteration":1460,"passed_time":50.56573287,"remaining_time":122.4860566,"test":[0.4965136055]}, +{"learn":[0.4948438114],"iteration":1461,"passed_time":50.604326,"remaining_time":122.4610844,"test":[0.4965128605]}, +{"learn":[0.4948419041],"iteration":1462,"passed_time":50.64360023,"remaining_time":122.4377403,"test":[0.4965114002]}, +{"learn":[0.4948412186],"iteration":1463,"passed_time":50.68256789,"remaining_time":122.4136339,"test":[0.4965106551]}, +{"learn":[0.4948394901],"iteration":1464,"passed_time":50.71888337,"remaining_time":122.3831077,"test":[0.496509314]}, +{"learn":[0.494838596],"iteration":1465,"passed_time":50.75756874,"remaining_time":122.3582864,"test":[0.4965086583]}, +{"learn":[0.4948370165],"iteration":1466,"passed_time":50.79417309,"remaining_time":122.3284346,"test":[0.496507198]}, +{"learn":[0.494836182],"iteration":1467,"passed_time":50.83255778,"remaining_time":122.302857,"test":[0.4965064232]}, +{"learn":[0.4948299831],"iteration":1468,"passed_time":50.86821352,"remaining_time":122.2707025,"test":[0.4965022508]}, +{"learn":[0.494827748],"iteration":1469,"passed_time":50.90500037,"remaining_time":122.2412594,"test":[0.4965002243]}, +{"learn":[0.4948264367],"iteration":1470,"passed_time":50.94368437,"remaining_time":122.2163577,"test":[0.496499211]}, +{"learn":[0.4948247379],"iteration":1471,"passed_time":50.98036219,"remaining_time":122.1866289,"test":[0.4964976911]}, +{"learn":[0.4948192841],"iteration":1472,"passed_time":51.015271,"remaining_time":122.152655,"test":[0.4964931611]}, +{"learn":[0.4948184496],"iteration":1473,"passed_time":51.05272706,"remaining_time":122.1247731,"test":[0.4964924757]}, +{"learn":[0.4948171383],"iteration":1474,"passed_time":51.08949704,"remaining_time":122.0952387,"test":[0.496491224]}, +{"learn":[0.4948156482],"iteration":1475,"passed_time":51.1254581,"remaining_time":122.0637631,"test":[0.4964899723]}, +{"learn":[0.4948132342],"iteration":1476,"passed_time":51.16196011,"remaining_time":122.0335717,"test":[0.4964877669]}, +{"learn":[0.4948119229],"iteration":1477,"passed_time":51.19997061,"remaining_time":122.0069665,"test":[0.4964865152]}, +{"learn":[0.4948098964],"iteration":1478,"passed_time":51.23502327,"remaining_time":121.9733042,"test":[0.4964852933]}, +{"learn":[0.4948079294],"iteration":1479,"passed_time":51.26996844,"remaining_time":121.9393844,"test":[0.4964839522]}, +{"learn":[0.4948070652],"iteration":1480,"passed_time":51.30900213,"remaining_time":121.9151779,"test":[0.4964831774]}, +{"learn":[0.4948059625],"iteration":1481,"passed_time":51.34804488,"remaining_time":121.8909729,"test":[0.4964826409]}, +{"learn":[0.4948045618],"iteration":1482,"passed_time":51.38498957,"remaining_time":121.8617723,"test":[0.4964816276]}, +{"learn":[0.4948018497],"iteration":1483,"passed_time":51.42092209,"remaining_time":121.8301631,"test":[0.4964788858]}, +{"learn":[0.4947979754],"iteration":1484,"passed_time":51.4564194,"remaining_time":121.797518,"test":[0.4964756672]}, +{"learn":[0.4947955615],"iteration":1485,"passed_time":51.49269042,"remaining_time":121.7666986,"test":[0.4964737002]}, +{"learn":[0.4947904355],"iteration":1486,"passed_time":51.52622835,"remaining_time":121.7294151,"test":[0.4964688126]}, +{"learn":[0.4947890347],"iteration":1487,"passed_time":51.56444119,"remaining_time":121.7031703,"test":[0.4964676206]}, +{"learn":[0.4947881705],"iteration":1488,"passed_time":51.60393678,"remaining_time":121.6799342,"test":[0.4964671139]}, +{"learn":[0.4947872764],"iteration":1489,"passed_time":51.64237745,"remaining_time":121.6541912,"test":[0.4964664285]}, +{"learn":[0.4947843856],"iteration":1490,"passed_time":51.67694886,"remaining_time":121.619325,"test":[0.4964640145]}, +{"learn":[0.494782061],"iteration":1491,"passed_time":51.71223289,"remaining_time":121.5861347,"test":[0.4964619879]}, +{"learn":[0.494779647],"iteration":1492,"passed_time":51.74816989,"remaining_time":121.5544754,"test":[0.496459872]}, +{"learn":[0.4947768754],"iteration":1493,"passed_time":51.78292579,"remaining_time":121.5200387,"test":[0.4964576666]}, +{"learn":[0.4947761303],"iteration":1494,"passed_time":51.82011587,"remaining_time":121.4913084,"test":[0.4964570705]}, +{"learn":[0.4947754449],"iteration":1495,"passed_time":51.85857314,"remaining_time":121.4655349,"test":[0.4964563255]}, +{"learn":[0.4947727627],"iteration":1496,"passed_time":51.89526456,"remaining_time":121.4356124,"test":[0.4964540605]}, +{"learn":[0.494771958],"iteration":1497,"passed_time":51.93444866,"remaining_time":121.4115082,"test":[0.4964534048]}, +{"learn":[0.4947707659],"iteration":1498,"passed_time":51.9727532,"remaining_time":121.3853295,"test":[0.4964528684]}, +{"learn":[0.4947690672],"iteration":1499,"passed_time":52.00976794,"remaining_time":121.3561252,"test":[0.4964516167]}, +{"learn":[0.4947678453],"iteration":1500,"passed_time":52.04664883,"remaining_time":121.3265984,"test":[0.4964506332]}, +{"learn":[0.4947662956],"iteration":1501,"passed_time":52.08268468,"remaining_time":121.2950939,"test":[0.4964495604]}, +{"learn":[0.4947647161],"iteration":1502,"passed_time":52.11993466,"remaining_time":121.2664082,"test":[0.4964485173]}, +{"learn":[0.494761408],"iteration":1503,"passed_time":52.15698914,"remaining_time":121.2372567,"test":[0.4964457755]}, +{"learn":[0.4947600669],"iteration":1504,"passed_time":52.19513688,"remaining_time":121.2106335,"test":[0.4964446132]}, +{"learn":[0.49475658],"iteration":1505,"passed_time":52.22916748,"remaining_time":121.174443,"test":[0.4964412455]}, +{"learn":[0.4947549707],"iteration":1506,"passed_time":52.26656846,"remaining_time":121.1460674,"test":[0.4964398746]}, +{"learn":[0.49475357],"iteration":1507,"passed_time":52.30333068,"remaining_time":121.1162008,"test":[0.4964386229]}, +{"learn":[0.4947527057],"iteration":1508,"passed_time":52.34162794,"remaining_time":121.0898762,"test":[0.4964380269]}, +{"learn":[0.4947509474],"iteration":1509,"passed_time":52.3783057,"remaining_time":121.0597926,"test":[0.4964364771]}, +{"learn":[0.4947502917],"iteration":1510,"passed_time":52.41597498,"remaining_time":121.0319899,"test":[0.4964358811]}, +{"learn":[0.4947495467],"iteration":1511,"passed_time":52.45430773,"remaining_time":121.0057046,"test":[0.496435136]}, +{"learn":[0.4947490102],"iteration":1512,"passed_time":52.49343052,"remaining_time":120.9812242,"test":[0.4964345102]}, +{"learn":[0.494745583],"iteration":1513,"passed_time":52.52880822,"remaining_time":120.9481014,"test":[0.4964321856]}, +{"learn":[0.4947440929],"iteration":1514,"passed_time":52.56509505,"remaining_time":120.9170668,"test":[0.4964308445]}, +{"learn":[0.4947427219],"iteration":1515,"passed_time":52.60114393,"remaining_time":120.8854785,"test":[0.4964297418]}, +{"learn":[0.4947295493],"iteration":1516,"passed_time":52.63363022,"remaining_time":120.8457047,"test":[0.4964182679]}, +{"learn":[0.4947187311],"iteration":1517,"passed_time":52.66817057,"remaining_time":120.8106521,"test":[0.496409059]}, +{"learn":[0.4947177774],"iteration":1518,"passed_time":52.70619336,"remaining_time":120.7835807,"test":[0.4964083437]}, +{"learn":[0.494715274],"iteration":1519,"passed_time":52.74327657,"remaining_time":120.7543437,"test":[0.4964061384]}, +{"learn":[0.4947143501],"iteration":1520,"passed_time":52.7830986,"remaining_time":120.731361,"test":[0.4964056019]}, +{"learn":[0.4947133965],"iteration":1521,"passed_time":52.82276116,"remaining_time":120.7079917,"test":[0.4964048867]}, +{"learn":[0.4947123832],"iteration":1522,"passed_time":52.86038627,"remaining_time":120.6799495,"test":[0.4964043204]}, +{"learn":[0.4947100288],"iteration":1523,"passed_time":52.89555596,"remaining_time":120.6462943,"test":[0.4964019064]}, +{"learn":[0.4947087473],"iteration":1524,"passed_time":52.93318004,"remaining_time":120.6182299,"test":[0.4964008038]}, +{"learn":[0.4947070784],"iteration":1525,"passed_time":52.96789025,"remaining_time":120.5835195,"test":[0.4963993434]}, +{"learn":[0.4947056181],"iteration":1526,"passed_time":53.00560739,"remaining_time":120.555648,"test":[0.4963980917]}, +{"learn":[0.4947032637],"iteration":1527,"passed_time":53.04108918,"remaining_time":120.5226843,"test":[0.4963960354]}, +{"learn":[0.494699896],"iteration":1528,"passed_time":53.07555246,"remaining_time":120.4874052,"test":[0.4963934128]}, +{"learn":[0.4946985251],"iteration":1529,"passed_time":53.11333829,"remaining_time":120.4596627,"test":[0.4963921611]}, +{"learn":[0.494697035],"iteration":1530,"passed_time":53.14997328,"remaining_time":120.4292994,"test":[0.4963911478]}, +{"learn":[0.4946960813],"iteration":1531,"passed_time":53.18806362,"remaining_time":120.4022224,"test":[0.496390522]}, +{"learn":[0.4946945912],"iteration":1532,"passed_time":53.22396543,"remaining_time":120.3701814,"test":[0.4963895087]}, +{"learn":[0.4946931309],"iteration":1533,"passed_time":53.26159552,"remaining_time":120.3420405,"test":[0.4963881378]}, +{"learn":[0.4946916706],"iteration":1534,"passed_time":53.29846571,"remaining_time":120.3121718,"test":[0.4963872735]}, +{"learn":[0.4946907169],"iteration":1535,"passed_time":53.33749955,"remaining_time":120.2871735,"test":[0.4963866477]}, +{"learn":[0.4946897632],"iteration":1536,"passed_time":53.37572219,"remaining_time":120.2603292,"test":[0.4963858728]}, +{"learn":[0.4946891076],"iteration":1537,"passed_time":53.41473218,"remaining_time":120.2352424,"test":[0.4963853364]}, +{"learn":[0.4946866638],"iteration":1538,"passed_time":53.45015659,"remaining_time":120.202074,"test":[0.4963829522]}, +{"learn":[0.4946850545],"iteration":1539,"passed_time":53.48589342,"remaining_time":120.1696047,"test":[0.4963817899]}, +{"learn":[0.4946840412],"iteration":1540,"passed_time":53.52354462,"remaining_time":120.1414282,"test":[0.496381164]}, +{"learn":[0.494682253],"iteration":1541,"passed_time":53.56075833,"remaining_time":120.1122583,"test":[0.4963797335]}, +{"learn":[0.4946800179],"iteration":1542,"passed_time":53.59776276,"remaining_time":120.0826091,"test":[0.4963778858]}, +{"learn":[0.4946778721],"iteration":1543,"passed_time":53.63305195,"remaining_time":120.0491111,"test":[0.496375889]}, +{"learn":[0.494676531],"iteration":1544,"passed_time":53.66983895,"remaining_time":120.0189602,"test":[0.4963746969]}, +{"learn":[0.4946736998],"iteration":1545,"passed_time":53.70589149,"remaining_time":119.9871599,"test":[0.4963725214]}, +{"learn":[0.4946729845],"iteration":1546,"passed_time":53.74473709,"remaining_time":119.9615884,"test":[0.4963717465]}, +{"learn":[0.494671256],"iteration":1547,"passed_time":53.78080399,"remaining_time":119.9298032,"test":[0.496370465]}, +{"learn":[0.4946699149],"iteration":1548,"passed_time":53.81954729,"remaining_time":119.9039753,"test":[0.4963694815]}, +{"learn":[0.4946690804],"iteration":1549,"passed_time":53.85829453,"remaining_time":119.8781394,"test":[0.4963689153]}, +{"learn":[0.494666577],"iteration":1550,"passed_time":53.89289682,"remaining_time":119.8430697,"test":[0.4963667099]}, +{"learn":[0.4946657426],"iteration":1551,"passed_time":53.93145231,"remaining_time":119.8167832,"test":[0.4963661139]}, +{"learn":[0.4946649081],"iteration":1552,"passed_time":53.97030033,"remaining_time":119.7911302,"test":[0.4963654284]}, +{"learn":[0.4946631796],"iteration":1553,"passed_time":54.00654188,"remaining_time":119.7596804,"test":[0.4963641171]}, +{"learn":[0.4946616],"iteration":1554,"passed_time":54.04294204,"remaining_time":119.7285758,"test":[0.4963628952]}, +{"learn":[0.4946592755],"iteration":1555,"passed_time":54.07774611,"remaining_time":119.6939316,"test":[0.4963604812]}, +{"learn":[0.4946577853],"iteration":1556,"passed_time":54.11435922,"remaining_time":119.6632876,"test":[0.4963591997]}, +{"learn":[0.4946569807],"iteration":1557,"passed_time":54.1520534,"remaining_time":119.6350243,"test":[0.4963585739]}, +{"learn":[0.4946557886],"iteration":1558,"passed_time":54.18763512,"remaining_time":119.6020862,"test":[0.4963574712]}, +{"learn":[0.4946509904],"iteration":1559,"passed_time":54.22269549,"remaining_time":119.5679952,"test":[0.4963536565]}, +{"learn":[0.4946485168],"iteration":1560,"passed_time":54.26447719,"remaining_time":119.5487105,"test":[0.4963518087]}, +{"learn":[0.4946455664],"iteration":1561,"passed_time":54.30150671,"remaining_time":119.5189373,"test":[0.4963492457]}, +{"learn":[0.4946447021],"iteration":1562,"passed_time":54.33915554,"remaining_time":119.4905167,"test":[0.4963486199]}, +{"learn":[0.4946434802],"iteration":1563,"passed_time":54.3774314,"remaining_time":119.4634618,"test":[0.4963474874]}, +{"learn":[0.4946421391],"iteration":1564,"passed_time":54.4148168,"remaining_time":119.4344381,"test":[0.4963463549]}, +{"learn":[0.4946411854],"iteration":1565,"passed_time":54.45248388,"remaining_time":119.4060215,"test":[0.4963456099]}, +{"learn":[0.494638533],"iteration":1566,"passed_time":54.48796999,"remaining_time":119.3728149,"test":[0.4963435535]}, +{"learn":[0.4946374304],"iteration":1567,"passed_time":54.52523939,"remaining_time":119.3435087,"test":[0.4963425104]}, +{"learn":[0.4946360594],"iteration":1568,"passed_time":54.56249271,"remaining_time":119.3141571,"test":[0.4963414673]}, +{"learn":[0.4946315891],"iteration":1569,"passed_time":54.59684553,"remaining_time":119.2784587,"test":[0.4963377122]}, +{"learn":[0.4946301884],"iteration":1570,"passed_time":54.6338076,"remaining_time":119.2484572,"test":[0.4963366394]}, +{"learn":[0.4946290261],"iteration":1571,"passed_time":54.67082696,"remaining_time":119.2185718,"test":[0.4963355665]}, +{"learn":[0.4946277148],"iteration":1572,"passed_time":54.7074437,"remaining_time":119.1878001,"test":[0.4963345532]}, +{"learn":[0.4946269697],"iteration":1573,"passed_time":54.7453209,"remaining_time":119.1597646,"test":[0.4963339572]}, +{"learn":[0.4946254498],"iteration":1574,"passed_time":54.78084878,"remaining_time":119.1266077,"test":[0.4963326459]}, +{"learn":[0.4946246154],"iteration":1575,"passed_time":54.81862087,"remaining_time":119.0983235,"test":[0.4963320796]}, +{"learn":[0.4946230656],"iteration":1576,"passed_time":54.8562395,"remaining_time":119.0696942,"test":[0.4963307981]}, +{"learn":[0.494622112],"iteration":1577,"passed_time":54.89382677,"remaining_time":119.0409855,"test":[0.4963296656]}, +{"learn":[0.4946195788],"iteration":1578,"passed_time":54.9303277,"remaining_time":119.009912,"test":[0.4963276987]}, +{"learn":[0.4946185655],"iteration":1579,"passed_time":54.96984309,"remaining_time":118.9853566,"test":[0.4963271622]}, +{"learn":[0.4946170456],"iteration":1580,"passed_time":55.00785785,"remaining_time":118.957537,"test":[0.4963260297]}, +{"learn":[0.4946122176],"iteration":1581,"passed_time":55.0427386,"remaining_time":118.9229333,"test":[0.4963216786]}, +{"learn":[0.4946062571],"iteration":1582,"passed_time":55.07707811,"remaining_time":118.887161,"test":[0.496316493]}, +{"learn":[0.4946057207],"iteration":1583,"passed_time":55.11537773,"remaining_time":118.8599308,"test":[0.4963158671]}, +{"learn":[0.4946044988],"iteration":1584,"passed_time":55.1516562,"remaining_time":118.8283318,"test":[0.4963148837]}, +{"learn":[0.4946036941],"iteration":1585,"passed_time":55.19027104,"remaining_time":118.8017562,"test":[0.4963141982]}, +{"learn":[0.4946012801],"iteration":1586,"passed_time":55.22701702,"remaining_time":118.7711462,"test":[0.4963120226]}, +{"learn":[0.4946005947],"iteration":1587,"passed_time":55.26639708,"remaining_time":118.7461882,"test":[0.4963113372]}, +{"learn":[0.4945990152],"iteration":1588,"passed_time":55.30240129,"remaining_time":118.7139653,"test":[0.4963100259]}, +{"learn":[0.4945981807],"iteration":1589,"passed_time":55.34041573,"remaining_time":118.6860488,"test":[0.4963094596]}, +{"learn":[0.4945954389],"iteration":1590,"passed_time":55.37608678,"remaining_time":118.6530986,"test":[0.4963073139]}, +{"learn":[0.4945938892],"iteration":1591,"passed_time":55.41259656,"remaining_time":118.6219404,"test":[0.4963059728]}, +{"learn":[0.4945921606],"iteration":1592,"passed_time":55.44911475,"remaining_time":118.5907934,"test":[0.4963047509]}, +{"learn":[0.4945913262],"iteration":1593,"passed_time":55.48842558,"remaining_time":118.565607,"test":[0.4963041846]}, +{"learn":[0.494589538],"iteration":1594,"passed_time":55.52416269,"remaining_time":118.5327736,"test":[0.4963026647]}, +{"learn":[0.494588942],"iteration":1595,"passed_time":55.56263228,"remaining_time":118.5057646,"test":[0.4963021283]}, +{"learn":[0.4945879883],"iteration":1596,"passed_time":55.60116048,"remaining_time":118.4788661,"test":[0.4963014726]}, +{"learn":[0.4945872432],"iteration":1597,"passed_time":55.63926596,"remaining_time":118.4510531,"test":[0.4963009064]}, +{"learn":[0.4945842034],"iteration":1598,"passed_time":55.67493486,"remaining_time":118.4180447,"test":[0.496298105]}, +{"learn":[0.4945818788],"iteration":1599,"passed_time":55.71138218,"remaining_time":118.3866871,"test":[0.4962962572]}, +{"learn":[0.4945811934],"iteration":1600,"passed_time":55.75002825,"remaining_time":118.3599913,"test":[0.4962956016]}, +{"learn":[0.4945797331],"iteration":1601,"passed_time":55.78660247,"remaining_time":118.3288859,"test":[0.4962945287]}, +{"learn":[0.4945790774],"iteration":1602,"passed_time":55.82516774,"remaining_time":118.301993,"test":[0.4962938432]}, +{"learn":[0.4945781535],"iteration":1603,"passed_time":55.86398722,"remaining_time":118.2756238,"test":[0.4962933664]}, +{"learn":[0.4945767826],"iteration":1604,"passed_time":55.90254061,"remaining_time":118.2486762,"test":[0.4962921445]}, +{"learn":[0.4945751137],"iteration":1605,"passed_time":55.9397855,"remaining_time":118.2189489,"test":[0.4962910418]}, +{"learn":[0.4945730275],"iteration":1606,"passed_time":55.97702182,"remaining_time":118.1891942,"test":[0.4962890749]}, +{"learn":[0.4945725209],"iteration":1607,"passed_time":56.01493387,"remaining_time":118.1608555,"test":[0.496288598]}, +{"learn":[0.4945704645],"iteration":1608,"passed_time":56.05175492,"remaining_time":118.1302057,"test":[0.4962866311]}, +{"learn":[0.4945679313],"iteration":1609,"passed_time":56.08890011,"remaining_time":118.1002307,"test":[0.4962849323]}, +{"learn":[0.4945668585],"iteration":1610,"passed_time":56.12602991,"remaining_time":118.0702144,"test":[0.4962837999]}, +{"learn":[0.4945648021],"iteration":1611,"passed_time":56.16351841,"remaining_time":118.0409432,"test":[0.4962824587]}, +{"learn":[0.4945638484],"iteration":1612,"passed_time":56.20120547,"remaining_time":118.0120787,"test":[0.4962813263]}, +{"learn":[0.4945621497],"iteration":1613,"passed_time":56.23781561,"remaining_time":117.980944,"test":[0.4962801342]}, +{"learn":[0.4945613152],"iteration":1614,"passed_time":56.27640153,"remaining_time":117.9539438,"test":[0.4962794189]}, +{"learn":[0.4945597357],"iteration":1615,"passed_time":56.31262129,"remaining_time":117.9219743,"test":[0.4962782566]}, +{"learn":[0.494558186],"iteration":1616,"passed_time":56.35036181,"remaining_time":117.8931812,"test":[0.4962768857]}, +{"learn":[0.4945563382],"iteration":1617,"passed_time":56.38691022,"remaining_time":117.8618853,"test":[0.4962753956]}, +{"learn":[0.4945552654],"iteration":1618,"passed_time":56.42369081,"remaining_time":117.8310677,"test":[0.4962745909]}, +{"learn":[0.4945544309],"iteration":1619,"passed_time":56.46202443,"remaining_time":117.8034831,"test":[0.4962740545]}, +{"learn":[0.4945522255],"iteration":1620,"passed_time":56.49702866,"remaining_time":117.768945,"test":[0.4962718789]}, +{"learn":[0.4945508844],"iteration":1621,"passed_time":56.53377727,"remaining_time":117.7380392,"test":[0.4962706868]}, +{"learn":[0.4945492751],"iteration":1622,"passed_time":56.56895733,"remaining_time":117.7038625,"test":[0.4962696736]}, +{"learn":[0.4945474274],"iteration":1623,"passed_time":56.60446373,"remaining_time":117.670363,"test":[0.4962687199]}, +{"learn":[0.4945461757],"iteration":1624,"passed_time":56.64008509,"remaining_time":117.6370998,"test":[0.496267498]}, +{"learn":[0.4945448942],"iteration":1625,"passed_time":56.67866087,"remaining_time":117.6099642,"test":[0.4962664847]}, +{"learn":[0.4945443279],"iteration":1626,"passed_time":56.71801673,"remaining_time":117.5844317,"test":[0.4962657396]}, +{"learn":[0.4945436723],"iteration":1627,"passed_time":56.75591282,"remaining_time":117.5558587,"test":[0.496265233]}, +{"learn":[0.4945413775],"iteration":1628,"passed_time":56.79053364,"remaining_time":117.5204966,"test":[0.4962632661]}, +{"learn":[0.4945406324],"iteration":1629,"passed_time":56.82849627,"remaining_time":117.4920444,"test":[0.4962626104]}, +{"learn":[0.4945396787],"iteration":1630,"passed_time":56.8662594,"remaining_time":117.4631685,"test":[0.4962619846]}, +{"learn":[0.4945360429],"iteration":1631,"passed_time":56.89858052,"remaining_time":117.423051,"test":[0.4962596004]}, +{"learn":[0.4945352382],"iteration":1632,"passed_time":56.93605159,"remaining_time":117.3935614,"test":[0.4962590043]}, +{"learn":[0.4945343739],"iteration":1633,"passed_time":56.97387588,"remaining_time":117.3647896,"test":[0.4962584679]}, +{"learn":[0.4945330328],"iteration":1634,"passed_time":57.00943984,"remaining_time":117.3313548,"test":[0.4962569778]}, +{"learn":[0.4945305592],"iteration":1635,"passed_time":57.04598284,"remaining_time":117.2999305,"test":[0.4962548916]}, +{"learn":[0.4945295758],"iteration":1636,"passed_time":57.08322468,"remaining_time":117.2699356,"test":[0.4962539081]}, +{"learn":[0.4945276088],"iteration":1637,"passed_time":57.11917403,"remaining_time":117.237279,"test":[0.4962525074]}, +{"learn":[0.4945267445],"iteration":1638,"passed_time":57.15526125,"remaining_time":117.2049012,"test":[0.4962519114]}, +{"learn":[0.4945252246],"iteration":1639,"passed_time":57.19128959,"remaining_time":117.1723982,"test":[0.4962507193]}, +{"learn":[0.4945229894],"iteration":1640,"passed_time":57.22664528,"remaining_time":117.138514,"test":[0.4962487225]}, +{"learn":[0.4945206053],"iteration":1641,"passed_time":57.26094274,"remaining_time":117.1024639,"test":[0.496246994]}, +{"learn":[0.4945180125],"iteration":1642,"passed_time":57.30761786,"remaining_time":117.0917061,"test":[0.496244878]}, +{"learn":[0.4945170886],"iteration":1643,"passed_time":57.34535822,"remaining_time":117.0626656,"test":[0.4962443118]}, +{"learn":[0.4945160753],"iteration":1644,"passed_time":57.38178772,"remaining_time":117.0309409,"test":[0.4962432985]}, +{"learn":[0.4945153005],"iteration":1645,"passed_time":57.41956778,"remaining_time":117.0019625,"test":[0.4962424938]}, +{"learn":[0.4945146448],"iteration":1646,"passed_time":57.4566767,"remaining_time":116.9716071,"test":[0.496241868]}, +{"learn":[0.4945133335],"iteration":1647,"passed_time":57.49293263,"remaining_time":116.9395086,"test":[0.4962407355]}, +{"learn":[0.4945105917],"iteration":1648,"passed_time":57.52815629,"remaining_time":116.9053073,"test":[0.4962384705]}, +{"learn":[0.4945097572],"iteration":1649,"passed_time":57.5653911,"remaining_time":116.875188,"test":[0.4962379341]}, +{"learn":[0.4945089824],"iteration":1650,"passed_time":57.60208291,"remaining_time":116.8439586,"test":[0.4962373678]}, +{"learn":[0.4945073134],"iteration":1651,"passed_time":57.63936712,"remaining_time":116.8139232,"test":[0.4962360267]}, +{"learn":[0.4945065386],"iteration":1652,"passed_time":57.67855077,"remaining_time":116.787725,"test":[0.4962353711]}, +{"learn":[0.4945050783],"iteration":1653,"passed_time":57.71648144,"remaining_time":116.7589764,"test":[0.4962341194]}, +{"learn":[0.4945039756],"iteration":1654,"passed_time":57.7530951,"remaining_time":116.7275547,"test":[0.4962333147]}, +{"learn":[0.4945025749],"iteration":1655,"passed_time":57.78854193,"remaining_time":116.6937707,"test":[0.4962321524]}, +{"learn":[0.4945018298],"iteration":1656,"passed_time":57.82522805,"remaining_time":116.6624848,"test":[0.496231467]}, +{"learn":[0.4945003099],"iteration":1657,"passed_time":57.85934402,"remaining_time":116.6260119,"test":[0.4962300961]}, +{"learn":[0.49449727],"iteration":1658,"passed_time":57.89305699,"remaining_time":116.5887302,"test":[0.4962281291]}, +{"learn":[0.4944954521],"iteration":1659,"passed_time":57.92809302,"remaining_time":116.5541149,"test":[0.4962266092]}, +{"learn":[0.494494707],"iteration":1660,"passed_time":57.96518152,"remaining_time":116.523625,"test":[0.4962260132]}, +{"learn":[0.494493515],"iteration":1661,"passed_time":58.00005255,"remaining_time":116.4886735,"test":[0.4962248509]}, +{"learn":[0.4944911904],"iteration":1662,"passed_time":58.03462621,"remaining_time":116.4531255,"test":[0.4962227051]}, +{"learn":[0.4944887466],"iteration":1663,"passed_time":58.0692976,"remaining_time":116.4177745,"test":[0.4962207381]}, +{"learn":[0.4944878227],"iteration":1664,"passed_time":58.10829601,"remaining_time":116.3910914,"test":[0.4962202017]}, +{"learn":[0.4944863326],"iteration":1665,"passed_time":58.14560991,"remaining_time":116.3610225,"test":[0.4962191288]}, +{"learn":[0.4944856471],"iteration":1666,"passed_time":58.18323216,"remaining_time":116.3315614,"test":[0.496218503]}, +{"learn":[0.4944849021],"iteration":1667,"passed_time":58.22131856,"remaining_time":116.3030176,"test":[0.4962177281]}, +{"learn":[0.4944835908],"iteration":1668,"passed_time":58.25716766,"remaining_time":116.2699973,"test":[0.4962167446]}, +{"learn":[0.4944824285],"iteration":1669,"passed_time":58.29429097,"remaining_time":116.2395143,"test":[0.4962158506]}, +{"learn":[0.4944814748],"iteration":1670,"passed_time":58.33186026,"remaining_time":116.2099119,"test":[0.4962151949]}, +{"learn":[0.4944762594],"iteration":1671,"passed_time":58.36498364,"remaining_time":116.1714507,"test":[0.4962106054]}, +{"learn":[0.4944756038],"iteration":1672,"passed_time":58.40215094,"remaining_time":116.1410378,"test":[0.4962100093]}, +{"learn":[0.4944734282],"iteration":1673,"passed_time":58.43917533,"remaining_time":116.1103328,"test":[0.4962079231]}, +{"learn":[0.4944725341],"iteration":1674,"passed_time":58.47690562,"remaining_time":116.0810216,"test":[0.4962072377]}, +{"learn":[0.4944709248],"iteration":1675,"passed_time":58.5143208,"remaining_time":116.0510754,"test":[0.4962061648]}, +{"learn":[0.4944701201],"iteration":1676,"passed_time":58.55116866,"remaining_time":116.0199961,"test":[0.496205688]}, +{"learn":[0.4944673783],"iteration":1677,"passed_time":58.58659595,"remaining_time":115.9860976,"test":[0.4962034528]}, +{"learn":[0.4944667525],"iteration":1678,"passed_time":58.624579,"remaining_time":115.9572525,"test":[0.4962029164]}, +{"learn":[0.4944659776],"iteration":1679,"passed_time":58.66116872,"remaining_time":115.9256429,"test":[0.4962022905]}, +{"learn":[0.4944635338],"iteration":1680,"passed_time":58.69530109,"remaining_time":115.8891757,"test":[0.4962002342]}, +{"learn":[0.4944623417],"iteration":1681,"passed_time":58.73114855,"remaining_time":115.8560945,"test":[0.4961991911]}, +{"learn":[0.4944610304],"iteration":1682,"passed_time":58.7663706,"remaining_time":115.8217773,"test":[0.4961982076]}, +{"learn":[0.4944603152],"iteration":1683,"passed_time":58.8028117,"remaining_time":115.7898596,"test":[0.4961975519]}, +{"learn":[0.4944577224],"iteration":1684,"passed_time":58.83712187,"remaining_time":115.7537442,"test":[0.4961954062]}, +{"learn":[0.4944565601],"iteration":1685,"passed_time":58.87301773,"remaining_time":115.7207478,"test":[0.4961942439]}, +{"learn":[0.4944550998],"iteration":1686,"passed_time":58.90876321,"remaining_time":115.6874526,"test":[0.4961931114]}, +{"learn":[0.494452805],"iteration":1687,"passed_time":58.94361678,"remaining_time":115.6524045,"test":[0.4961911146]}, +{"learn":[0.4944521195],"iteration":1688,"passed_time":58.98181417,"remaining_time":115.6239116,"test":[0.496190608]}, +{"learn":[0.4944506294],"iteration":1689,"passed_time":59.01819724,"remaining_time":115.5918538,"test":[0.4961895053]}, +{"learn":[0.4944490797],"iteration":1690,"passed_time":59.05418998,"remaining_time":115.559027,"test":[0.4961884324]}, +{"learn":[0.4944460399],"iteration":1691,"passed_time":59.08857999,"remaining_time":115.523063,"test":[0.4961862271]}, +{"learn":[0.494443298],"iteration":1692,"passed_time":59.12334364,"remaining_time":115.4878307,"test":[0.4961841409]}, +{"learn":[0.4944427318],"iteration":1693,"passed_time":59.160293,"remaining_time":115.4568646,"test":[0.4961836045]}, +{"learn":[0.4944400198],"iteration":1694,"passed_time":59.19368735,"remaining_time":115.4189597,"test":[0.4961812501]}, +{"learn":[0.4944384105],"iteration":1695,"passed_time":59.22764081,"remaining_time":115.3821493,"test":[0.4961799388]}, +{"learn":[0.494437427],"iteration":1696,"passed_time":59.26487134,"remaining_time":115.3517207,"test":[0.4961793427]}, +{"learn":[0.4944351918],"iteration":1697,"passed_time":59.30092244,"remaining_time":115.3189905,"test":[0.4961774354]}, +{"learn":[0.4944341189],"iteration":1698,"passed_time":59.33713523,"remaining_time":115.2865706,"test":[0.4961764817]}, +{"learn":[0.4944328374],"iteration":1699,"passed_time":59.3721541,"remaining_time":115.2518286,"test":[0.4961754088]}, +{"learn":[0.4944314367],"iteration":1700,"passed_time":59.40801949,"remaining_time":115.218728,"test":[0.4961742465]}, +{"learn":[0.4944299466],"iteration":1701,"passed_time":59.44275183,"remaining_time":115.1834286,"test":[0.4961731438]}, +{"learn":[0.4944285459],"iteration":1702,"passed_time":59.47936066,"remaining_time":115.1517628,"test":[0.4961720114]}, +{"learn":[0.494427175],"iteration":1703,"passed_time":59.51611568,"remaining_time":115.120374,"test":[0.4961709087]}, +{"learn":[0.4944255359],"iteration":1704,"passed_time":59.55183415,"remaining_time":115.0869757,"test":[0.4961694484]}, +{"learn":[0.4944228835],"iteration":1705,"passed_time":59.58725133,"remaining_time":115.0529929,"test":[0.4961676006]}, +{"learn":[0.4944219894],"iteration":1706,"passed_time":59.62415515,"remaining_time":115.0218763,"test":[0.496166945]}, +{"learn":[0.4944214231],"iteration":1707,"passed_time":59.66141176,"remaining_time":114.991433,"test":[0.4961663191]}, +{"learn":[0.4944196052],"iteration":1708,"passed_time":59.69726053,"remaining_time":114.9582706,"test":[0.4961649482]}, +{"learn":[0.4944190092],"iteration":1709,"passed_time":59.73411242,"remaining_time":114.927035,"test":[0.496164382]}, +{"learn":[0.4944178171],"iteration":1710,"passed_time":59.76998328,"remaining_time":114.8939071,"test":[0.4961633985]}, +{"learn":[0.4944157905],"iteration":1711,"passed_time":59.80560588,"remaining_time":114.8602991,"test":[0.4961613719]}, +{"learn":[0.4944141216],"iteration":1712,"passed_time":59.84189239,"remaining_time":114.8279628,"test":[0.49616015]}, +{"learn":[0.4944132871],"iteration":1713,"passed_time":59.87861111,"remaining_time":114.7964505,"test":[0.4961596136]}, +{"learn":[0.4944107837],"iteration":1714,"passed_time":59.91287494,"remaining_time":114.7602298,"test":[0.4961579149]}, +{"learn":[0.4944093532],"iteration":1715,"passed_time":59.94750959,"remaining_time":114.7247211,"test":[0.496156544]}, +{"learn":[0.4944085485],"iteration":1716,"passed_time":59.98408112,"remaining_time":114.6929169,"test":[0.4961560075]}, +{"learn":[0.4944072968],"iteration":1717,"passed_time":60.01930512,"remaining_time":114.6585328,"test":[0.496154875]}, +{"learn":[0.4944054491],"iteration":1718,"passed_time":60.05391917,"remaining_time":114.6229836,"test":[0.4961536829]}, +{"learn":[0.4944047935],"iteration":1719,"passed_time":60.09146291,"remaining_time":114.5930223,"test":[0.4961529975]}, +{"learn":[0.4944039888],"iteration":1720,"passed_time":60.12747849,"remaining_time":114.5601406,"test":[0.4961523418]}, +{"learn":[0.4944028563],"iteration":1721,"passed_time":60.16390234,"remaining_time":114.5280324,"test":[0.4961513285]}, +{"learn":[0.4944023199],"iteration":1722,"passed_time":60.20146464,"remaining_time":114.4980845,"test":[0.4961508815]}, +{"learn":[0.4944006211],"iteration":1723,"passed_time":60.23618384,"remaining_time":114.4627252,"test":[0.4961495106]}, +{"learn":[0.494398982],"iteration":1724,"passed_time":60.27142526,"remaining_time":114.4283581,"test":[0.4961481695]}, +{"learn":[0.494396866],"iteration":1725,"passed_time":60.30645575,"remaining_time":114.3935899,"test":[0.4961463814]}, +{"learn":[0.494396121],"iteration":1726,"passed_time":60.34515507,"remaining_time":114.3657745,"test":[0.4961456959]}, +{"learn":[0.4943946607],"iteration":1727,"passed_time":60.38034169,"remaining_time":114.3312951,"test":[0.4961445336]}, +{"learn":[0.4943930513],"iteration":1728,"passed_time":60.41572517,"remaining_time":114.2971874,"test":[0.4961434011]}, +{"learn":[0.4943916208],"iteration":1729,"passed_time":60.45053671,"remaining_time":114.2619971,"test":[0.4961421792]}, +{"learn":[0.4943900711],"iteration":1730,"passed_time":60.48691963,"remaining_time":114.2297749,"test":[0.4961409275]}, +{"learn":[0.4943871505],"iteration":1731,"passed_time":60.52350239,"remaining_time":114.1979248,"test":[0.4961385732]}, +{"learn":[0.494385869],"iteration":1732,"passed_time":60.56025212,"remaining_time":114.1663841,"test":[0.4961376493]}, +{"learn":[0.4943845577],"iteration":1733,"passed_time":60.5960772,"remaining_time":114.1330958,"test":[0.4961364572]}, +{"learn":[0.4943824119],"iteration":1734,"passed_time":60.63148032,"remaining_time":114.0990105,"test":[0.4961347585]}, +{"learn":[0.4943810708],"iteration":1735,"passed_time":60.66707596,"remaining_time":114.0652857,"test":[0.4961335068]}, +{"learn":[0.4943795211],"iteration":1736,"passed_time":60.70290133,"remaining_time":114.0319902,"test":[0.4961322253]}, +{"learn":[0.4943780012],"iteration":1737,"passed_time":60.73827621,"remaining_time":113.9978464,"test":[0.4961309438]}, +{"learn":[0.4943756766],"iteration":1738,"passed_time":60.77235185,"remaining_time":113.9612647,"test":[0.496129096]}, +{"learn":[0.4943744249],"iteration":1739,"passed_time":60.80791451,"remaining_time":113.927472,"test":[0.4961282914]}, +{"learn":[0.4943724877],"iteration":1740,"passed_time":60.84188784,"remaining_time":113.8907022,"test":[0.4961262946]}, +{"learn":[0.4943699843],"iteration":1741,"passed_time":60.87480116,"remaining_time":113.851953,"test":[0.4961243574]}, +{"learn":[0.4943683452],"iteration":1742,"passed_time":60.91031395,"remaining_time":113.818068,"test":[0.4961230461]}, +{"learn":[0.4943669147],"iteration":1743,"passed_time":60.94573569,"remaining_time":113.7840111,"test":[0.4961220031]}, +{"learn":[0.494365216],"iteration":1744,"passed_time":60.98130125,"remaining_time":113.750221,"test":[0.4961208706]}, +{"learn":[0.4943634278],"iteration":1745,"passed_time":61.0154472,"remaining_time":113.713783,"test":[0.4961196189]}, +{"learn":[0.4943605966],"iteration":1746,"passed_time":61.04907846,"remaining_time":113.6763894,"test":[0.4961174135]}, +{"learn":[0.4943598218],"iteration":1747,"passed_time":61.08598299,"remaining_time":113.6450896,"test":[0.4961166983]}, +{"learn":[0.4943583912],"iteration":1748,"passed_time":61.12135533,"remaining_time":113.6109355,"test":[0.4961155658]}, +{"learn":[0.4943577356],"iteration":1749,"passed_time":61.15825054,"remaining_time":113.5796081,"test":[0.4961148505]}, +{"learn":[0.494354964],"iteration":1750,"passed_time":61.19342926,"remaining_time":113.5450895,"test":[0.4961125259]}, +{"learn":[0.4943541891],"iteration":1751,"passed_time":61.23060732,"remaining_time":113.5142766,"test":[0.4961119001]}, +{"learn":[0.4943534739],"iteration":1752,"passed_time":61.26815118,"remaining_time":113.484134,"test":[0.4961113636]}, +{"learn":[0.4943514175],"iteration":1753,"passed_time":61.3025224,"remaining_time":113.4481116,"test":[0.4961093073]}, +{"learn":[0.4943500466],"iteration":1754,"passed_time":61.33853144,"remaining_time":113.4151194,"test":[0.4961082642]}, +{"learn":[0.4943457849],"iteration":1755,"passed_time":61.37257107,"remaining_time":113.3784855,"test":[0.4961050455]}, +{"learn":[0.4943445034],"iteration":1756,"passed_time":61.40780288,"remaining_time":113.3440551,"test":[0.4961040025]}, +{"learn":[0.4943434603],"iteration":1757,"passed_time":61.44477509,"remaining_time":113.3128332,"test":[0.4961032872]}, +{"learn":[0.4943382151],"iteration":1758,"passed_time":61.47730233,"remaining_time":113.2734149,"test":[0.4960995917]}, +{"learn":[0.4943358309],"iteration":1759,"passed_time":61.51011976,"remaining_time":113.2345386,"test":[0.4960975652]}, +{"learn":[0.4943352646],"iteration":1760,"passed_time":61.54705144,"remaining_time":113.2032366,"test":[0.4960970883]}, +{"learn":[0.4943335659],"iteration":1761,"passed_time":61.58311357,"remaining_time":113.1703302,"test":[0.4960958366]}, +{"learn":[0.4943330593],"iteration":1762,"passed_time":61.62172611,"remaining_time":113.1421029,"test":[0.4960953002]}, +{"learn":[0.4943318374],"iteration":1763,"passed_time":61.65861141,"remaining_time":113.1106953,"test":[0.4960942571]}, +{"learn":[0.4943309433],"iteration":1764,"passed_time":61.69551485,"remaining_time":113.0793147,"test":[0.4960933034]}, +{"learn":[0.4943298108],"iteration":1765,"passed_time":61.731597,"remaining_time":113.0464239,"test":[0.49609232]}, +{"learn":[0.4943290956],"iteration":1766,"passed_time":61.76893495,"remaining_time":113.0158272,"test":[0.4960917537]}, +{"learn":[0.4943266518],"iteration":1767,"passed_time":61.80353413,"remaining_time":112.9802162,"test":[0.4960896974]}, +{"learn":[0.4943258769],"iteration":1768,"passed_time":61.84169696,"remaining_time":112.9511153,"test":[0.4960892801]}, +{"learn":[0.494324506],"iteration":1769,"passed_time":61.87722046,"remaining_time":112.9171876,"test":[0.4960881178]}, +{"learn":[0.4943231649],"iteration":1770,"passed_time":61.91316146,"remaining_time":112.8840194,"test":[0.4960867767]}, +{"learn":[0.4943221516],"iteration":1771,"passed_time":61.94971536,"remaining_time":112.8519646,"test":[0.4960863297]}, +{"learn":[0.4943215854],"iteration":1772,"passed_time":61.98605436,"remaining_time":112.8195135,"test":[0.4960855846]}, +{"learn":[0.4943202443],"iteration":1773,"passed_time":62.02143431,"remaining_time":112.785314,"test":[0.4960842137]}, +{"learn":[0.494319529],"iteration":1774,"passed_time":62.05889584,"remaining_time":112.7548953,"test":[0.4960837071]}, +{"learn":[0.4943179495],"iteration":1775,"passed_time":62.09518867,"remaining_time":112.722347,"test":[0.4960825448]}, +{"learn":[0.4943164594],"iteration":1776,"passed_time":62.12970681,"remaining_time":112.6865757,"test":[0.4960815613]}, +{"learn":[0.4943155653],"iteration":1777,"passed_time":62.16802072,"remaining_time":112.6576843,"test":[0.4960808461]}, +{"learn":[0.4943144328],"iteration":1778,"passed_time":62.20284939,"remaining_time":112.6224721,"test":[0.4960797732]}, +{"learn":[0.4943120784],"iteration":1779,"passed_time":62.23805113,"remaining_time":112.5879352,"test":[0.4960782235]}, +{"learn":[0.4943111844],"iteration":1780,"passed_time":62.27519921,"remaining_time":112.5569154,"test":[0.4960774486]}, +{"learn":[0.4943098433],"iteration":1781,"passed_time":62.3113368,"remaining_time":112.5240639,"test":[0.4960763757]}, +{"learn":[0.4943090982],"iteration":1782,"passed_time":62.34868503,"remaining_time":112.493393,"test":[0.4960757499]}, +{"learn":[0.4943082041],"iteration":1783,"passed_time":62.3860677,"remaining_time":112.4627767,"test":[0.496075273]}, +{"learn":[0.4943074889],"iteration":1784,"passed_time":62.42334398,"remaining_time":112.4319613,"test":[0.4960745578]}, +{"learn":[0.4943060286],"iteration":1785,"passed_time":62.4582356,"remaining_time":112.3968473,"test":[0.4960733359]}, +{"learn":[0.4943046875],"iteration":1786,"passed_time":62.49502846,"remaining_time":112.3651519,"test":[0.4960722332]}, +{"learn":[0.494304002],"iteration":1787,"passed_time":62.53154858,"remaining_time":112.3329609,"test":[0.4960716669]}, +{"learn":[0.4943031973],"iteration":1788,"passed_time":62.56877924,"remaining_time":112.3020403,"test":[0.4960710411]}, +{"learn":[0.4943023927],"iteration":1789,"passed_time":62.6056225,"remaining_time":112.270418,"test":[0.4960704153]}, +{"learn":[0.4943012006],"iteration":1790,"passed_time":62.64111474,"remaining_time":112.2363692,"test":[0.4960692828]}, +{"learn":[0.4943003363],"iteration":1791,"passed_time":62.67984011,"remaining_time":112.2081066,"test":[0.4960686271]}, +{"learn":[0.4942997701],"iteration":1792,"passed_time":62.71895355,"remaining_time":112.1805265,"test":[0.4960680907]}, +{"learn":[0.4942980713],"iteration":1793,"passed_time":62.75698738,"remaining_time":112.1510042,"test":[0.4960667496]}, +{"learn":[0.4942975945],"iteration":1794,"passed_time":62.79368765,"remaining_time":112.1190913,"test":[0.4960662727]}, +{"learn":[0.4942967302],"iteration":1795,"passed_time":62.831354,"remaining_time":112.0888966,"test":[0.4960656469]}, +{"learn":[0.4942955382],"iteration":1796,"passed_time":62.86849346,"remaining_time":112.0577543,"test":[0.4960646634]}, +{"learn":[0.4942947633],"iteration":1797,"passed_time":62.90516863,"remaining_time":112.0257786,"test":[0.4960640078]}, +{"learn":[0.4942932732],"iteration":1798,"passed_time":62.94048088,"remaining_time":111.9913726,"test":[0.4960629945]}, +{"learn":[0.4942925281],"iteration":1799,"passed_time":62.97782065,"remaining_time":111.96057,"test":[0.4960623984]}, +{"learn":[0.4942916639],"iteration":1800,"passed_time":63.01524673,"remaining_time":111.9299135,"test":[0.4960617428]}, +{"learn":[0.4942911274],"iteration":1801,"passed_time":63.0533512,"remaining_time":111.9004535,"test":[0.4960610573]}, +{"learn":[0.4942900247],"iteration":1802,"passed_time":63.09138334,"remaining_time":111.8708555,"test":[0.4960604911]}, +{"learn":[0.4942882664],"iteration":1803,"passed_time":63.12887321,"remaining_time":111.8402876,"test":[0.4960592394]}, +{"learn":[0.4942871637],"iteration":1804,"passed_time":63.16630031,"remaining_time":111.8096008,"test":[0.4960583155]}, +{"learn":[0.4942842133],"iteration":1805,"passed_time":63.20173933,"remaining_time":111.7753906,"test":[0.4960559313]}, +{"learn":[0.4942815609],"iteration":1806,"passed_time":63.23772473,"remaining_time":111.7421445,"test":[0.4960533385]}, +{"learn":[0.4942794151],"iteration":1807,"passed_time":63.27294521,"remaining_time":111.7075449,"test":[0.49605161]}, +{"learn":[0.4942786104],"iteration":1808,"passed_time":63.31053879,"remaining_time":111.6771306,"test":[0.4960508649]}, +{"learn":[0.4942779548],"iteration":1809,"passed_time":63.3488343,"remaining_time":111.6479455,"test":[0.4960503583]}, +{"learn":[0.4942746169],"iteration":1810,"passed_time":63.3834044,"remaining_time":111.6121903,"test":[0.4960480933]}, +{"learn":[0.4942741699],"iteration":1811,"passed_time":63.42099301,"remaining_time":111.5817471,"test":[0.4960474973]}, +{"learn":[0.4942731268],"iteration":1812,"passed_time":63.45722994,"remaining_time":111.5489199,"test":[0.4960465138]}, +{"learn":[0.4942712791],"iteration":1813,"passed_time":63.49124939,"remaining_time":111.5121944,"test":[0.4960452919]}, +{"learn":[0.4942691333],"iteration":1814,"passed_time":63.52580946,"remaining_time":111.4764205,"test":[0.496043623]}, +{"learn":[0.4942683286],"iteration":1815,"passed_time":63.5625118,"remaining_time":111.444404,"test":[0.4960429375]}, +{"learn":[0.4942661829],"iteration":1816,"passed_time":63.59676728,"remaining_time":111.4080959,"test":[0.4960412984]}, +{"learn":[0.494265408],"iteration":1817,"passed_time":63.63440638,"remaining_time":111.3777124,"test":[0.4960408215]}, +{"learn":[0.4942642755],"iteration":1818,"passed_time":63.6695249,"remaining_time":111.342913,"test":[0.4960398083]}, +{"learn":[0.4942636497],"iteration":1819,"passed_time":63.70696929,"remaining_time":111.3121771,"test":[0.4960392718]}, +{"learn":[0.494262845],"iteration":1820,"passed_time":63.74507119,"remaining_time":111.2825817,"test":[0.4960385268]}, +{"learn":[0.4942581064],"iteration":1821,"passed_time":63.77811056,"remaining_time":111.2441467,"test":[0.4960343544]}, +{"learn":[0.4942571528],"iteration":1822,"passed_time":63.81450329,"remaining_time":111.2115617,"test":[0.4960336392]}, +{"learn":[0.4942549772],"iteration":1823,"passed_time":63.849648,"remaining_time":111.1767994,"test":[0.4960317914]}, +{"learn":[0.4942539937],"iteration":1824,"passed_time":63.88543176,"remaining_time":111.1431484,"test":[0.4960310166]}, +{"learn":[0.494252444],"iteration":1825,"passed_time":63.92102397,"remaining_time":111.1091621,"test":[0.4960299139]}, +{"learn":[0.4942512817],"iteration":1826,"passed_time":63.9566505,"remaining_time":111.0752337,"test":[0.496028841]}, +{"learn":[0.4942488677],"iteration":1827,"passed_time":63.99019894,"remaining_time":111.0376975,"test":[0.4960270231]}, +{"learn":[0.4942466623],"iteration":1828,"passed_time":64.02411388,"remaining_time":111.0008011,"test":[0.4960250263]}, +{"learn":[0.4942459173],"iteration":1829,"passed_time":64.06101334,"remaining_time":110.9690778,"test":[0.4960243707]}, +{"learn":[0.4942435033],"iteration":1830,"passed_time":64.09544153,"remaining_time":110.9330717,"test":[0.4960225825]}, +{"learn":[0.4942421026],"iteration":1831,"passed_time":64.13228949,"remaining_time":110.9012517,"test":[0.4960216289]}, +{"learn":[0.4942404337],"iteration":1832,"passed_time":64.16783401,"remaining_time":110.8671742,"test":[0.4960202281]}, +{"learn":[0.4942398078],"iteration":1833,"passed_time":64.20551045,"remaining_time":110.8367754,"test":[0.4960197513]}, +{"learn":[0.4942384667],"iteration":1834,"passed_time":64.24212869,"remaining_time":110.8045435,"test":[0.4960182612]}, +{"learn":[0.4942359931],"iteration":1835,"passed_time":64.27887694,"remaining_time":110.7725308,"test":[0.4960164433]}, +{"learn":[0.4942349202],"iteration":1836,"passed_time":64.3143965,"remaining_time":110.7383975,"test":[0.4960157876]}, +{"learn":[0.4942334897],"iteration":1837,"passed_time":64.35068739,"remaining_time":110.7055895,"test":[0.4960146551]}, +{"learn":[0.4942319102],"iteration":1838,"passed_time":64.38685392,"remaining_time":110.672564,"test":[0.496013612]}, +{"learn":[0.4942305393],"iteration":1839,"passed_time":64.42183183,"remaining_time":110.6374938,"test":[0.4960123603]}, +{"learn":[0.4942297644],"iteration":1840,"passed_time":64.45911547,"remaining_time":110.6063801,"test":[0.4960118537]}, +{"learn":[0.4942289896],"iteration":1841,"passed_time":64.4961788,"remaining_time":110.574882,"test":[0.4960113173]}, +{"learn":[0.4942269928],"iteration":1842,"passed_time":64.53190283,"remaining_time":110.5410837,"test":[0.4960094695]}, +{"learn":[0.4942255921],"iteration":1843,"passed_time":64.56875347,"remaining_time":110.5092115,"test":[0.4960085456]}, +{"learn":[0.4942249663],"iteration":1844,"passed_time":64.60543755,"remaining_time":110.477049,"test":[0.49600789]}, +{"learn":[0.494224251],"iteration":1845,"passed_time":64.6435248,"remaining_time":110.4472791,"test":[0.4960073833]}, +{"learn":[0.4942236252],"iteration":1846,"passed_time":64.6813675,"remaining_time":110.4170827,"test":[0.4960068767]}, +{"learn":[0.4942229993],"iteration":1847,"passed_time":64.71854586,"remaining_time":110.3857449,"test":[0.4960061615]}, +{"learn":[0.4942215688],"iteration":1848,"passed_time":64.75520993,"remaining_time":110.3535243,"test":[0.4960051184]}, +{"learn":[0.4942199893],"iteration":1849,"passed_time":64.79190681,"remaining_time":110.3213548,"test":[0.4960039859]}, +{"learn":[0.4942187376],"iteration":1850,"passed_time":64.82747704,"remaining_time":110.2872638,"test":[0.496002764]}, +{"learn":[0.4942176945],"iteration":1851,"passed_time":64.86449076,"remaining_time":110.2556247,"test":[0.4960021977]}, +{"learn":[0.4942165024],"iteration":1852,"passed_time":64.90001397,"remaining_time":110.2214484,"test":[0.4960009162]}, +{"learn":[0.4942158468],"iteration":1853,"passed_time":64.93748155,"remaining_time":110.1905701,"test":[0.4960003798]}, +{"learn":[0.4942150719],"iteration":1854,"passed_time":64.97412254,"remaining_time":110.1582832,"test":[0.4959997241]}, +{"learn":[0.4942137308],"iteration":1855,"passed_time":65.00899723,"remaining_time":110.1229996,"test":[0.4959985619]}, +{"learn":[0.4942117042],"iteration":1856,"passed_time":65.04490046,"remaining_time":110.0894573,"test":[0.4959972208]}, +{"learn":[0.4942100353],"iteration":1857,"passed_time":65.07969872,"remaining_time":110.0540438,"test":[0.4959958797]}, +{"learn":[0.494209022],"iteration":1858,"passed_time":65.1150569,"remaining_time":110.019577,"test":[0.495994926]}, +{"learn":[0.4942065484],"iteration":1859,"passed_time":65.15042281,"remaining_time":109.9851224,"test":[0.4959931378]}, +{"learn":[0.4942052371],"iteration":1860,"passed_time":65.18649632,"remaining_time":109.9518603,"test":[0.4959918563]}, +{"learn":[0.4942036874],"iteration":1861,"passed_time":65.22188046,"remaining_time":109.9174333,"test":[0.4959908729]}, +{"learn":[0.4942024059],"iteration":1862,"passed_time":65.2715952,"remaining_time":109.9071359,"test":[0.4959898]}, +{"learn":[0.4942013032],"iteration":1863,"passed_time":65.3082833,"remaining_time":109.8748801,"test":[0.4959888165]}, +{"learn":[0.4941985912],"iteration":1864,"passed_time":65.34248973,"remaining_time":109.8384479,"test":[0.4959870582]}, +{"learn":[0.4941978163],"iteration":1865,"passed_time":65.38029421,"remaining_time":109.8080611,"test":[0.4959864621]}, +{"learn":[0.4941958494],"iteration":1866,"passed_time":65.41643043,"remaining_time":109.7748669,"test":[0.495984674]}, +{"learn":[0.4941949255],"iteration":1867,"passed_time":65.45344177,"remaining_time":109.7431368,"test":[0.4959839289]}, +{"learn":[0.4941939718],"iteration":1868,"passed_time":65.48942445,"remaining_time":109.7096779,"test":[0.4959829454]}, +{"learn":[0.4941929884],"iteration":1869,"passed_time":65.52603426,"remaining_time":109.6772659,"test":[0.4959823494]}, +{"learn":[0.4941877432],"iteration":1870,"passed_time":65.5582598,"remaining_time":109.6375173,"test":[0.4959783559]}, +{"learn":[0.4941867299],"iteration":1871,"passed_time":65.59226293,"remaining_time":109.600747,"test":[0.495977432]}, +{"learn":[0.4941860742],"iteration":1872,"passed_time":65.62961986,"remaining_time":109.5695789,"test":[0.4959768658]}, +{"learn":[0.4941846139],"iteration":1873,"passed_time":65.66560774,"remaining_time":109.5361205,"test":[0.4959757929]}, +{"learn":[0.4941831238],"iteration":1874,"passed_time":65.70086235,"remaining_time":109.5014373,"test":[0.4959748988]}, +{"learn":[0.4941807694],"iteration":1875,"passed_time":65.73596718,"remaining_time":109.466504,"test":[0.4959729915]}, +{"learn":[0.4941791899],"iteration":1876,"passed_time":65.77198219,"remaining_time":109.4330849,"test":[0.4959720378]}, +{"learn":[0.4941774614],"iteration":1877,"passed_time":65.80803364,"remaining_time":109.3997237,"test":[0.4959709053]}, +{"learn":[0.4941764183],"iteration":1878,"passed_time":65.84542382,"remaining_time":109.3685832,"test":[0.4959703689]}, +{"learn":[0.4941755838],"iteration":1879,"passed_time":65.89411418,"remaining_time":109.3561895,"test":[0.4959694152]}, +{"learn":[0.4941742725],"iteration":1880,"passed_time":65.93127348,"remaining_time":109.3246369,"test":[0.4959683423]}, +{"learn":[0.4941731996],"iteration":1881,"passed_time":65.96653283,"remaining_time":109.2899306,"test":[0.4959675078]}, +{"learn":[0.4941716499],"iteration":1882,"passed_time":66.00064514,"remaining_time":109.253325,"test":[0.4959662263]}, +{"learn":[0.494170726],"iteration":1883,"passed_time":66.03779301,"remaining_time":109.2217426,"test":[0.4959655707]}, +{"learn":[0.49417013],"iteration":1884,"passed_time":66.074744,"remaining_time":109.1898289,"test":[0.4959650044]}, +{"learn":[0.4941685505],"iteration":1885,"passed_time":66.11082097,"remaining_time":109.1564669,"test":[0.495963872]}, +{"learn":[0.4941676862],"iteration":1886,"passed_time":66.14730051,"remaining_time":109.123766,"test":[0.4959631567]}, +{"learn":[0.4941670306],"iteration":1887,"passed_time":66.18383091,"remaining_time":109.091145,"test":[0.4959625905]}, +{"learn":[0.4941646464],"iteration":1888,"passed_time":66.21777352,"remaining_time":109.054258,"test":[0.4959605043]}, +{"learn":[0.4941617555],"iteration":1889,"passed_time":66.25164335,"remaining_time":109.0172544,"test":[0.4959582691]}, +{"learn":[0.494160176],"iteration":1890,"passed_time":66.28838798,"remaining_time":108.9849806,"test":[0.4959571068]}, +{"learn":[0.4941588647],"iteration":1891,"passed_time":66.32486727,"remaining_time":108.9522661,"test":[0.495956034]}, +{"learn":[0.494156719],"iteration":1892,"passed_time":66.35953318,"remaining_time":108.9165714,"test":[0.4959544246]}, +{"learn":[0.4941560633],"iteration":1893,"passed_time":66.39737021,"remaining_time":108.8860781,"test":[0.495953769]}, +{"learn":[0.494154901],"iteration":1894,"passed_time":66.43406911,"remaining_time":108.8537122,"test":[0.4959527259]}, +{"learn":[0.4941537089],"iteration":1895,"passed_time":66.47044481,"remaining_time":108.8208126,"test":[0.4959518616]}, +{"learn":[0.4941529043],"iteration":1896,"passed_time":66.50695066,"remaining_time":108.7881222,"test":[0.4959512954]}, +{"learn":[0.4941521294],"iteration":1897,"passed_time":66.54437987,"remaining_time":108.756937,"test":[0.4959507589]}, +{"learn":[0.4941513247],"iteration":1898,"passed_time":66.58107157,"remaining_time":108.7245408,"test":[0.4959502225]}, +{"learn":[0.4941503711],"iteration":1899,"passed_time":66.61822017,"remaining_time":108.6928855,"test":[0.495949239]}, +{"learn":[0.4941473908],"iteration":1900,"passed_time":66.65291891,"remaining_time":108.6572308,"test":[0.4959469144]}, +{"learn":[0.4941453643],"iteration":1901,"passed_time":66.68795798,"remaining_time":108.6221313,"test":[0.4959451263]}, +{"learn":[0.4941430397],"iteration":1902,"passed_time":66.72240839,"remaining_time":108.586074,"test":[0.495943219]}, +{"learn":[0.49414149],"iteration":1903,"passed_time":66.75737832,"remaining_time":108.5508631,"test":[0.4959421759]}, +{"learn":[0.4941408939],"iteration":1904,"passed_time":66.79526549,"remaining_time":108.520392,"test":[0.4959415202]}, +{"learn":[0.4941388376],"iteration":1905,"passed_time":66.8312289,"remaining_time":108.4867902,"test":[0.4959397619]}, +{"learn":[0.4941287942],"iteration":1906,"passed_time":66.86433181,"remaining_time":108.4485466,"test":[0.4959325497]}, +{"learn":[0.4941282279],"iteration":1907,"passed_time":66.90228922,"remaining_time":108.4181752,"test":[0.4959318941]}, +{"learn":[0.4941259332],"iteration":1908,"passed_time":66.93870884,"remaining_time":108.3853059,"test":[0.4959301655]}, +{"learn":[0.4941247113],"iteration":1909,"passed_time":66.97593201,"remaining_time":108.3537329,"test":[0.4959294801]}, +{"learn":[0.4941238172],"iteration":1910,"passed_time":67.01424438,"remaining_time":108.3239146,"test":[0.4959287946]}, +{"learn":[0.4941231615],"iteration":1911,"passed_time":67.05346768,"remaining_time":108.2955587,"test":[0.495928288]}, +{"learn":[0.4941220291],"iteration":1912,"passed_time":67.08876663,"remaining_time":108.2608586,"test":[0.4959274237]}, +{"learn":[0.494121135],"iteration":1913,"passed_time":67.12776823,"remaining_time":108.2321279,"test":[0.4959268575]}, +{"learn":[0.494119168],"iteration":1914,"passed_time":67.16435998,"remaining_time":108.1995042,"test":[0.4959251587]}, +{"learn":[0.494116754],"iteration":1915,"passed_time":67.19942602,"remaining_time":108.1644206,"test":[0.4959231024]}, +{"learn":[0.4941142506],"iteration":1916,"passed_time":67.23267553,"remaining_time":108.1264156,"test":[0.4959209864]}, +{"learn":[0.4941128499],"iteration":1917,"passed_time":67.2693253,"remaining_time":108.0938793,"test":[0.4959197943]}, +{"learn":[0.4941115088],"iteration":1918,"passed_time":67.30629538,"remaining_time":108.0618531,"test":[0.4959187512]}, +{"learn":[0.4941088564],"iteration":1919,"passed_time":67.34204476,"remaining_time":108.0278635,"test":[0.4959163671]}, +{"learn":[0.4941073663],"iteration":1920,"passed_time":67.37990413,"remaining_time":107.9972539,"test":[0.4959152346]}, +{"learn":[0.4941052205],"iteration":1921,"passed_time":67.41492454,"remaining_time":107.9620904,"test":[0.4959134464]}, +{"learn":[0.4941042371],"iteration":1922,"passed_time":67.45203714,"remaining_time":107.9302747,"test":[0.4959127014]}, +{"learn":[0.494095952],"iteration":1923,"passed_time":67.48374039,"remaining_time":107.8898053,"test":[0.495905519]}, +{"learn":[0.4940945811],"iteration":1924,"passed_time":67.51949277,"remaining_time":107.8558131,"test":[0.4959044461]}, +{"learn":[0.4940932996],"iteration":1925,"passed_time":67.55460448,"remaining_time":107.8207966,"test":[0.4959034329]}, +{"learn":[0.4940910942],"iteration":1926,"passed_time":67.59024602,"remaining_time":107.7866248,"test":[0.4959015851]}, +{"learn":[0.4940903194],"iteration":1927,"passed_time":67.62667196,"remaining_time":107.7537014,"test":[0.4959010189]}, +{"learn":[0.4940893657],"iteration":1928,"passed_time":67.66343334,"remaining_time":107.7213083,"test":[0.4959001546]}, +{"learn":[0.4940885908],"iteration":1929,"passed_time":67.69870625,"remaining_time":107.6865431,"test":[0.495899648]}, +{"learn":[0.494087965],"iteration":1930,"passed_time":67.73554399,"remaining_time":107.6542644,"test":[0.4958989625]}, +{"learn":[0.4940856106],"iteration":1931,"passed_time":67.77105148,"remaining_time":107.6198685,"test":[0.4958969658]}, +{"learn":[0.4940845377],"iteration":1932,"passed_time":67.80854217,"remaining_time":107.5886181,"test":[0.4958963995]}, +{"learn":[0.4940804548],"iteration":1933,"passed_time":67.84312742,"remaining_time":107.5527553,"test":[0.4958927338]}, +{"learn":[0.4940791137],"iteration":1934,"passed_time":67.87945855,"remaining_time":107.5196591,"test":[0.4958917205]}, +{"learn":[0.4940783389],"iteration":1935,"passed_time":67.91873984,"remaining_time":107.4912288,"test":[0.4958913927]}, +{"learn":[0.4940767891],"iteration":1936,"passed_time":67.95460946,"remaining_time":107.4573922,"test":[0.4958902602]}, +{"learn":[0.494075299],"iteration":1937,"passed_time":67.99167067,"remaining_time":107.4254363,"test":[0.4958891873]}, +{"learn":[0.4940723784],"iteration":1938,"passed_time":68.0258957,"remaining_time":107.3889978,"test":[0.4958868926]}, +{"learn":[0.4940643318],"iteration":1939,"passed_time":68.0584162,"remaining_time":107.349873,"test":[0.4958794122]}, +{"learn":[0.4940637059],"iteration":1940,"passed_time":68.09513609,"remaining_time":107.3173732,"test":[0.4958787267]}, +{"learn":[0.494062335],"iteration":1941,"passed_time":68.13055993,"remaining_time":107.2828281,"test":[0.4958778029]}, +{"learn":[0.4940606661],"iteration":1942,"passed_time":68.16585583,"remaining_time":107.2480809,"test":[0.4958765512]}, +{"learn":[0.4940600104],"iteration":1943,"passed_time":68.20208119,"remaining_time":107.2147943,"test":[0.4958759849]}, +{"learn":[0.494059176],"iteration":1944,"passed_time":68.2391658,"remaining_time":107.1828543,"test":[0.4958754783]}, +{"learn":[0.4940581329],"iteration":1945,"passed_time":68.27339878,"remaining_time":107.1464337,"test":[0.4958745544]}, +{"learn":[0.4940573282],"iteration":1946,"passed_time":68.31052943,"remaining_time":107.114559,"test":[0.4958740776]}, +{"learn":[0.494056613],"iteration":1947,"passed_time":68.34808847,"remaining_time":107.0833501,"test":[0.4958734517]}, +{"learn":[0.4940546758],"iteration":1948,"passed_time":68.38314191,"remaining_time":107.0482124,"test":[0.4958718126]}, +{"learn":[0.4940537817],"iteration":1949,"passed_time":68.42081835,"remaining_time":107.0171774,"test":[0.4958708887]}, +{"learn":[0.4940528877],"iteration":1950,"passed_time":68.45847488,"remaining_time":106.9861045,"test":[0.4958702331]}, +{"learn":[0.4940511591],"iteration":1951,"passed_time":68.49377941,"remaining_time":106.9513523,"test":[0.4958692198]}, +{"learn":[0.4940499968],"iteration":1952,"passed_time":68.53082224,"remaining_time":106.9193115,"test":[0.4958679979]}, +{"learn":[0.4940485961],"iteration":1953,"passed_time":68.56672162,"remaining_time":106.8854831,"test":[0.4958669548]}, +{"learn":[0.4940478511],"iteration":1954,"passed_time":68.60634124,"remaining_time":106.8574471,"test":[0.4958662396]}, +{"learn":[0.4940465994],"iteration":1955,"passed_time":68.64254741,"remaining_time":106.8240871,"test":[0.4958654349]}, +{"learn":[0.4940459735],"iteration":1956,"passed_time":68.68159329,"remaining_time":106.7951397,"test":[0.4958647793]}, +{"learn":[0.4940430231],"iteration":1957,"passed_time":68.71726023,"remaining_time":106.7609324,"test":[0.4958626037]}, +{"learn":[0.494042129],"iteration":1958,"passed_time":68.75439427,"remaining_time":106.729001,"test":[0.4958619182]}, +{"learn":[0.4940408475],"iteration":1959,"passed_time":68.79102091,"remaining_time":106.6962773,"test":[0.4958610242]}, +{"learn":[0.4940397747],"iteration":1960,"passed_time":68.8268639,"remaining_time":106.6623352,"test":[0.4958600109]}, +{"learn":[0.4940370924],"iteration":1961,"passed_time":68.86189512,"remaining_time":106.6271342,"test":[0.4958578353]}, +{"learn":[0.4940356023],"iteration":1962,"passed_time":68.89972485,"remaining_time":106.5962631,"test":[0.4958567326]}, +{"learn":[0.4940343804],"iteration":1963,"passed_time":68.93625167,"remaining_time":106.5633707,"test":[0.4958557193]}, +{"learn":[0.4940334864],"iteration":1964,"passed_time":68.97340606,"remaining_time":106.531444,"test":[0.4958552127]}, +{"learn":[0.4940326221],"iteration":1965,"passed_time":69.00896547,"remaining_time":106.4970505,"test":[0.4958542292]}, +{"learn":[0.4940314598],"iteration":1966,"passed_time":69.04476118,"remaining_time":106.4630202,"test":[0.4958532458]}, +{"learn":[0.494030834],"iteration":1967,"passed_time":69.08221517,"remaining_time":106.4315429,"test":[0.4958527093]}, +{"learn":[0.4940288372],"iteration":1968,"passed_time":69.11730697,"remaining_time":106.3964233,"test":[0.4958510106]}, +{"learn":[0.4940280325],"iteration":1969,"passed_time":69.15472168,"remaining_time":106.3648765,"test":[0.4958504741]}, +{"learn":[0.4940251417],"iteration":1970,"passed_time":69.18801953,"remaining_time":106.326997,"test":[0.4958482092]}, +{"learn":[0.4940237112],"iteration":1971,"passed_time":69.22398881,"remaining_time":106.2932242,"test":[0.4958471065]}, +{"learn":[0.494021178],"iteration":1972,"passed_time":69.25983477,"remaining_time":106.2592599,"test":[0.4958451991]}, +{"learn":[0.494019062],"iteration":1973,"passed_time":69.29757869,"remaining_time":106.2282032,"test":[0.495843411]}, +{"learn":[0.4940178401],"iteration":1974,"passed_time":69.33452295,"remaining_time":106.1959149,"test":[0.4958425765]}, +{"learn":[0.4940162904],"iteration":1975,"passed_time":69.37121008,"remaining_time":106.1632284,"test":[0.4958412056]}, +{"learn":[0.4940156646],"iteration":1976,"passed_time":69.40984817,"remaining_time":106.133521,"test":[0.495840699]}, +{"learn":[0.4940152771],"iteration":1977,"passed_time":69.44739626,"remaining_time":106.1021393,"test":[0.4958401923]}, +{"learn":[0.4940139062],"iteration":1978,"passed_time":69.48216939,"remaining_time":106.0665153,"test":[0.4958392089]}, +{"learn":[0.4940098233],"iteration":1979,"passed_time":69.51499492,"remaining_time":106.0279215,"test":[0.4958354538]}, +{"learn":[0.4940086014],"iteration":1980,"passed_time":69.55126912,"remaining_time":105.9945893,"test":[0.4958344107]}, +{"learn":[0.4940074093],"iteration":1981,"passed_time":69.58576156,"remaining_time":105.9585411,"test":[0.495833606]}, +{"learn":[0.4940052636],"iteration":1982,"passed_time":69.6200506,"remaining_time":105.9221849,"test":[0.4958317285]}, +{"learn":[0.4940043993],"iteration":1983,"passed_time":69.6569725,"remaining_time":105.8898332,"test":[0.4958311622]}, +{"learn":[0.4940033264],"iteration":1984,"passed_time":69.69296617,"remaining_time":105.856067,"test":[0.4958300894]}, +{"learn":[0.4940017171],"iteration":1985,"passed_time":69.72806883,"remaining_time":105.8209464,"test":[0.4958290761]}, +{"learn":[0.4940003164],"iteration":1986,"passed_time":69.76350706,"remaining_time":105.7863346,"test":[0.4958279734]}, +{"learn":[0.4939979918],"iteration":1987,"passed_time":69.79784456,"remaining_time":105.7500542,"test":[0.4958262449]}, +{"learn":[0.493995399],"iteration":1988,"passed_time":69.83194618,"remaining_time":105.7134188,"test":[0.4958238011]}, +{"learn":[0.4939942069],"iteration":1989,"passed_time":69.86859372,"remaining_time":105.6806367,"test":[0.4958229368]}, +{"learn":[0.4939920313],"iteration":1990,"passed_time":69.90364033,"remaining_time":105.6454313,"test":[0.4958214169]}, +{"learn":[0.4939906604],"iteration":1991,"passed_time":69.93987877,"remaining_time":105.6120258,"test":[0.4958204334]}, +{"learn":[0.4939894981],"iteration":1992,"passed_time":69.97520368,"remaining_time":105.5772391,"test":[0.4958193903]}, +{"learn":[0.4939886339],"iteration":1993,"passed_time":70.01194243,"remaining_time":105.5445832,"test":[0.4958187943]}, +{"learn":[0.4939868457],"iteration":1994,"passed_time":70.04860134,"remaining_time":105.511803,"test":[0.4958176916]}, +{"learn":[0.4939854748],"iteration":1995,"passed_time":70.08305423,"remaining_time":105.4756988,"test":[0.4958167677]}, +{"learn":[0.4939843423],"iteration":1996,"passed_time":70.11850419,"remaining_time":105.4410957,"test":[0.4958157842]}, +{"learn":[0.4939837165],"iteration":1997,"passed_time":70.15578055,"remaining_time":105.4092358,"test":[0.4958151584]}, +{"learn":[0.4939822264],"iteration":1998,"passed_time":70.1912958,"remaining_time":105.3747267,"test":[0.4958139663]}, +{"learn":[0.4939808853],"iteration":1999,"passed_time":70.22763754,"remaining_time":105.3414563,"test":[0.4958130722]}, +{"learn":[0.4939804382],"iteration":2000,"passed_time":70.2655115,"remaining_time":105.3104793,"test":[0.4958125358]}, +{"learn":[0.4939793654],"iteration":2001,"passed_time":70.30321882,"remaining_time":105.2792458,"test":[0.4958115523]}, +{"learn":[0.4939769216],"iteration":2002,"passed_time":70.33762697,"remaining_time":105.2430694,"test":[0.4958094363]}, +{"learn":[0.4939757891],"iteration":2003,"passed_time":70.37376168,"remaining_time":105.209476,"test":[0.4958083933]}, +{"learn":[0.4939752526],"iteration":2004,"passed_time":70.41064233,"remaining_time":105.1769944,"test":[0.4958078568]}, +{"learn":[0.4939729877],"iteration":2005,"passed_time":70.44584207,"remaining_time":105.1419996,"test":[0.4958061581]}, +{"learn":[0.4939706035],"iteration":2006,"passed_time":70.4801687,"remaining_time":105.1057025,"test":[0.4958044892]}, +{"learn":[0.4939686663],"iteration":2007,"passed_time":70.51720483,"remaining_time":105.0734447,"test":[0.4958030885]}, +{"learn":[0.493967504],"iteration":2008,"passed_time":70.55255433,"remaining_time":105.038671,"test":[0.4958020156]}, +{"learn":[0.4939657755],"iteration":2009,"passed_time":70.5876199,"remaining_time":105.0034744,"test":[0.4958006447]}, +{"learn":[0.4939647324],"iteration":2010,"passed_time":70.6244689,"remaining_time":104.9709287,"test":[0.4957998698]}, +{"learn":[0.4939639576],"iteration":2011,"passed_time":70.66275286,"remaining_time":104.9405097,"test":[0.4957993334]}, +{"learn":[0.4939588912],"iteration":2012,"passed_time":70.69654039,"remaining_time":104.9034109,"test":[0.495795012]}, +{"learn":[0.4939580865],"iteration":2013,"passed_time":70.7348072,"remaining_time":104.8729564,"test":[0.4957944756]}, +{"learn":[0.4939560301],"iteration":2014,"passed_time":70.77086825,"remaining_time":104.8392267,"test":[0.4957927172]}, +{"learn":[0.4939546592],"iteration":2015,"passed_time":70.80690938,"remaining_time":104.8054651,"test":[0.4957914059]}, +{"learn":[0.493952126],"iteration":2016,"passed_time":70.84319796,"remaining_time":104.7720672,"test":[0.4957891112]}, +{"learn":[0.4939515598],"iteration":2017,"passed_time":70.88198781,"remaining_time":104.7423626,"test":[0.4957886641]}, +{"learn":[0.4939497418],"iteration":2018,"passed_time":70.91982198,"remaining_time":104.7112379,"test":[0.4957875614]}, +{"learn":[0.493948967],"iteration":2019,"passed_time":70.95894929,"remaining_time":104.6820143,"test":[0.4957871442]}, +{"learn":[0.4939479835],"iteration":2020,"passed_time":70.9958721,"remaining_time":104.6495314,"test":[0.4957861607]}, +{"learn":[0.4939458675],"iteration":2021,"passed_time":71.03270989,"remaining_time":104.6169189,"test":[0.4957844322]}, +{"learn":[0.4939433045],"iteration":2022,"passed_time":71.06847148,"remaining_time":104.5827185,"test":[0.4957826739]}, +{"learn":[0.4939424999],"iteration":2023,"passed_time":71.10510006,"remaining_time":104.5497914,"test":[0.495782048]}, +{"learn":[0.4939412482],"iteration":2024,"passed_time":71.14086078,"remaining_time":104.5155856,"test":[0.4957811837]}, +{"learn":[0.4939399965],"iteration":2025,"passed_time":71.17539605,"remaining_time":104.4795794,"test":[0.4957799917]}, +{"learn":[0.493938864],"iteration":2026,"passed_time":71.21122374,"remaining_time":104.4454702,"test":[0.4957789784]}, +{"learn":[0.4939351685],"iteration":2027,"passed_time":71.24580987,"remaining_time":104.4095399,"test":[0.4957757895]}, +{"learn":[0.4939346321],"iteration":2028,"passed_time":71.28437182,"remaining_time":104.3794326,"test":[0.4957753723]}, +{"learn":[0.4939053364],"iteration":2029,"passed_time":71.317009,"remaining_time":104.3406486,"test":[0.4957508748]}, +{"learn":[0.4939045913],"iteration":2030,"passed_time":71.35510488,"remaining_time":104.3098505,"test":[0.4957503681]}, +{"learn":[0.4939030118],"iteration":2031,"passed_time":71.3921244,"remaining_time":104.277473,"test":[0.4957491761]}, +{"learn":[0.4939019985],"iteration":2032,"passed_time":71.43031457,"remaining_time":104.2467995,"test":[0.495748282]}, +{"learn":[0.4939007468],"iteration":2033,"passed_time":71.46853364,"remaining_time":104.2161607,"test":[0.4957473879]}, +{"learn":[0.493899823],"iteration":2034,"passed_time":71.50597444,"remaining_time":104.1843804,"test":[0.4957467919]}, +{"learn":[0.4938988395],"iteration":2035,"passed_time":71.54137874,"remaining_time":104.1496299,"test":[0.4957458084]}, +{"learn":[0.4938982732],"iteration":2036,"passed_time":71.57947075,"remaining_time":104.1187883,"test":[0.4957453614]}, +{"learn":[0.4938974984],"iteration":2037,"passed_time":71.61578125,"remaining_time":104.0853504,"test":[0.4957446163]}, +{"learn":[0.4938955016],"iteration":2038,"passed_time":71.65032891,"remaining_time":104.0493496,"test":[0.4957429176]}, +{"learn":[0.4938932665],"iteration":2039,"passed_time":71.68414048,"remaining_time":104.0122823,"test":[0.49574104]}, +{"learn":[0.4938921638],"iteration":2040,"passed_time":71.72049938,"remaining_time":103.9789112,"test":[0.4957401162]}, +{"learn":[0.4938906438],"iteration":2041,"passed_time":71.75538073,"remaining_time":103.9433968,"test":[0.4957389241]}, +{"learn":[0.4938892133],"iteration":2042,"passed_time":71.78978503,"remaining_time":103.9071925,"test":[0.4957379108]}, +{"learn":[0.493887902],"iteration":2043,"passed_time":71.82591883,"remaining_time":103.8734912,"test":[0.4957369273]}, +{"learn":[0.4938861437],"iteration":2044,"passed_time":71.86051025,"remaining_time":103.8375588,"test":[0.4957357948]}, +{"learn":[0.4938836105],"iteration":2045,"passed_time":71.89420996,"remaining_time":103.8003403,"test":[0.4957337385]}, +{"learn":[0.4938828058],"iteration":2046,"passed_time":71.93248666,"remaining_time":103.769728,"test":[0.495733202]}, +{"learn":[0.493881733],"iteration":2047,"passed_time":71.96762559,"remaining_time":103.7345853,"test":[0.4957321291]}, +{"learn":[0.4938808985],"iteration":2048,"passed_time":72.0116276,"remaining_time":103.7122074,"test":[0.4957312053]}, +{"learn":[0.4938795574],"iteration":2049,"passed_time":72.04649155,"remaining_time":103.6766586,"test":[0.495730341]}, +{"learn":[0.4938789017],"iteration":2050,"passed_time":72.08331485,"remaining_time":103.6439276,"test":[0.4957299238]}, +{"learn":[0.4938782461],"iteration":2051,"passed_time":72.12023472,"remaining_time":103.6113314,"test":[0.4957293873]}, +{"learn":[0.4938761301],"iteration":2052,"passed_time":72.15385125,"remaining_time":103.5739891,"test":[0.4957276588]}, +{"learn":[0.4938747592],"iteration":2053,"passed_time":72.18870781,"remaining_time":103.538429,"test":[0.4957267647]}, +{"learn":[0.4938740142],"iteration":2054,"passed_time":72.22519784,"remaining_time":103.5052105,"test":[0.4957262283]}, +{"learn":[0.4938733585],"iteration":2055,"passed_time":72.2623367,"remaining_time":103.4729179,"test":[0.4957255428]}, +{"learn":[0.4938727029],"iteration":2056,"passed_time":72.30064449,"remaining_time":103.442293,"test":[0.4957249766]}, +{"learn":[0.493869514],"iteration":2057,"passed_time":72.33537743,"remaining_time":103.4065502,"test":[0.4957227116]}, +{"learn":[0.4938681133],"iteration":2058,"passed_time":72.37329472,"remaining_time":103.3753569,"test":[0.4957214301]}, +{"learn":[0.493867398],"iteration":2059,"passed_time":72.41034441,"remaining_time":103.3429187,"test":[0.4957210725]}, +{"learn":[0.4938660271],"iteration":2060,"passed_time":72.44727557,"remaining_time":103.3103071,"test":[0.4957197314]}, +{"learn":[0.493863792],"iteration":2061,"passed_time":72.48340797,"remaining_time":103.2765532,"test":[0.495717973]}, +{"learn":[0.4938626893],"iteration":2062,"passed_time":72.5215269,"remaining_time":103.2456251,"test":[0.4957172578]}, +{"learn":[0.493861378],"iteration":2063,"passed_time":72.55765606,"remaining_time":103.2118596,"test":[0.4957163339]}, +{"learn":[0.4938601859],"iteration":2064,"passed_time":72.59311464,"remaining_time":103.1771387,"test":[0.4957152312]}, +{"learn":[0.4938589938],"iteration":2065,"passed_time":72.62875572,"remaining_time":103.1426763,"test":[0.4957142477]}, +{"learn":[0.4938574441],"iteration":2066,"passed_time":72.66408238,"remaining_time":103.1077666,"test":[0.4957131152]}, +{"learn":[0.49385655],"iteration":2067,"passed_time":72.70026078,"remaining_time":103.0740641,"test":[0.4957124]}, +{"learn":[0.4938480861],"iteration":2068,"passed_time":72.7325253,"remaining_time":103.0348147,"test":[0.4957054263]}, +{"learn":[0.4938461192],"iteration":2069,"passed_time":72.76714036,"remaining_time":102.9988992,"test":[0.4957037275]}, +{"learn":[0.4938447781],"iteration":2070,"passed_time":72.80148783,"remaining_time":102.9626064,"test":[0.4957028633]}, +{"learn":[0.4938434668],"iteration":2071,"passed_time":72.83834815,"remaining_time":102.9298665,"test":[0.4957018202]}, +{"learn":[0.4938412018],"iteration":2072,"passed_time":72.87322384,"remaining_time":102.8943204,"test":[0.4956999128]}, +{"learn":[0.4938401885],"iteration":2073,"passed_time":72.90866672,"remaining_time":102.8595751,"test":[0.4956987505]}, +{"learn":[0.4938389368],"iteration":2074,"passed_time":72.94477101,"remaining_time":102.8257615,"test":[0.4956980055]}, +{"learn":[0.4938375957],"iteration":2075,"passed_time":72.98144907,"remaining_time":102.7927539,"test":[0.495696873]}, +{"learn":[0.4938365526],"iteration":2076,"passed_time":73.01728026,"remaining_time":102.7585509,"test":[0.4956957405]}, +{"learn":[0.4938357778],"iteration":2077,"passed_time":73.05478033,"remaining_time":102.726693,"test":[0.4956951445]}, +{"learn":[0.4938342281],"iteration":2078,"passed_time":73.09012418,"remaining_time":102.6918002,"test":[0.4956939822]}, +{"learn":[0.4938335426],"iteration":2079,"passed_time":73.12797786,"remaining_time":102.6604305,"test":[0.4956934159]}, +{"learn":[0.4938323803],"iteration":2080,"passed_time":73.16301717,"remaining_time":102.6251067,"test":[0.4956923728]}, +{"learn":[0.493830324],"iteration":2081,"passed_time":73.19678256,"remaining_time":102.5879978,"test":[0.4956907635]}, +{"learn":[0.4938290425],"iteration":2082,"passed_time":73.23242902,"remaining_time":102.5535264,"test":[0.4956897204]}, +{"learn":[0.4938275523],"iteration":2083,"passed_time":73.26740323,"remaining_time":102.5181132,"test":[0.495688886]}, +{"learn":[0.4938252576],"iteration":2084,"passed_time":73.30138018,"remaining_time":102.4813061,"test":[0.4956873958]}, +{"learn":[0.4938240059],"iteration":2085,"passed_time":73.3393087,"remaining_time":102.4500218,"test":[0.495686323]}, +{"learn":[0.4938233204],"iteration":2086,"passed_time":73.37790797,"remaining_time":102.4196674,"test":[0.4956858163]}, +{"learn":[0.4938228436],"iteration":2087,"passed_time":73.41638918,"remaining_time":102.3891405,"test":[0.4956853097]}, +{"learn":[0.4938222177],"iteration":2088,"passed_time":73.45532097,"remaining_time":102.3592338,"test":[0.4956847732]}, +{"learn":[0.4938195355],"iteration":2089,"passed_time":73.48929801,"remaining_time":102.3224197,"test":[0.4956827467]}, +{"learn":[0.4938187905],"iteration":2090,"passed_time":73.52741651,"remaining_time":102.29137,"test":[0.4956823295]}, +{"learn":[0.4938168235],"iteration":2091,"passed_time":73.56448068,"remaining_time":102.2588479,"test":[0.4956807201]}, +{"learn":[0.4938147373],"iteration":2092,"passed_time":73.5989,"remaining_time":102.222648,"test":[0.4956788426]}, +{"learn":[0.4938139625],"iteration":2093,"passed_time":73.63619138,"remaining_time":102.1904356,"test":[0.4956783359]}, +{"learn":[0.4938108034],"iteration":2094,"passed_time":73.66976807,"remaining_time":102.1530674,"test":[0.49567622]}, +{"learn":[0.4938094921],"iteration":2095,"passed_time":73.7072755,"remaining_time":102.1211489,"test":[0.4956751173]}, +{"learn":[0.4938083],"iteration":2096,"passed_time":73.74454503,"remaining_time":102.0888957,"test":[0.4956743424]}, +{"learn":[0.4938068397],"iteration":2097,"passed_time":73.78105675,"remaining_time":102.0555895,"test":[0.4956733292]}, +{"learn":[0.4938063629],"iteration":2098,"passed_time":73.82007654,"remaining_time":102.0257466,"test":[0.4956727033]}, +{"learn":[0.493805588],"iteration":2099,"passed_time":73.85927924,"remaining_time":101.9961475,"test":[0.4956722861]}, +{"learn":[0.4938044257],"iteration":2100,"passed_time":73.89644525,"remaining_time":101.9637291,"test":[0.4956712728]}, +{"learn":[0.4938033529],"iteration":2101,"passed_time":73.93225979,"remaining_time":101.9294428,"test":[0.4956704979]}, +{"learn":[0.49380228],"iteration":2102,"passed_time":73.96758882,"remaining_time":101.8944864,"test":[0.4956696933]}, +{"learn":[0.4938016243],"iteration":2103,"passed_time":74.00494771,"remaining_time":101.8623235,"test":[0.4956691568]}, +{"learn":[0.4938010581],"iteration":2104,"passed_time":74.04206363,"remaining_time":101.8298215,"test":[0.49566868]}, +{"learn":[0.4937994488],"iteration":2105,"passed_time":74.07692453,"remaining_time":101.7942163,"test":[0.4956669515]}, +{"learn":[0.493797154],"iteration":2106,"passed_time":74.11060867,"remaining_time":101.7569961,"test":[0.4956654315]}, +{"learn":[0.4937957831],"iteration":2107,"passed_time":74.1461494,"remaining_time":101.7223264,"test":[0.4956642991]}, +{"learn":[0.4937940545],"iteration":2108,"passed_time":74.18160087,"remaining_time":101.6875335,"test":[0.495663107]}, +{"learn":[0.4937926538],"iteration":2109,"passed_time":74.21767853,"remaining_time":101.6535976,"test":[0.4956618553]}, +{"learn":[0.4937917001],"iteration":2110,"passed_time":74.25576716,"remaining_time":101.6224118,"test":[0.4956613486]}, +{"learn":[0.493789167],"iteration":2111,"passed_time":74.29155685,"remaining_time":101.5880758,"test":[0.4956592625]}, +{"learn":[0.4937882729],"iteration":2112,"passed_time":74.32804609,"remaining_time":101.5546943,"test":[0.4956582492]}, +{"learn":[0.4937876768],"iteration":2113,"passed_time":74.36698422,"remaining_time":101.524653,"test":[0.4956577127]}, +{"learn":[0.4937859483],"iteration":2114,"passed_time":74.40354484,"remaining_time":101.4913602,"test":[0.495656163]}, +{"learn":[0.4937842794],"iteration":2115,"passed_time":74.44008925,"remaining_time":101.4580422,"test":[0.4956549709]}, +{"learn":[0.4937830575],"iteration":2116,"passed_time":74.47782292,"remaining_time":101.4263408,"test":[0.4956540471]}, +{"learn":[0.4937810607],"iteration":2117,"passed_time":74.51308232,"remaining_time":101.3912669,"test":[0.4956525867]}, +{"learn":[0.4937796898],"iteration":2118,"passed_time":74.55098708,"remaining_time":101.3597894,"test":[0.4956518417]}, +{"learn":[0.4937774248],"iteration":2119,"passed_time":74.58602848,"remaining_time":101.3244161,"test":[0.4956502622]}, +{"learn":[0.4937765606],"iteration":2120,"passed_time":74.62434341,"remaining_time":101.2934864,"test":[0.4956496661]}, +{"learn":[0.4937751599],"iteration":2121,"passed_time":74.6599525,"remaining_time":101.25888,"test":[0.4956489211]}, +{"learn":[0.4937745042],"iteration":2122,"passed_time":74.69651951,"remaining_time":101.2255707,"test":[0.495648325]}, +{"learn":[0.4937736101],"iteration":2123,"passed_time":74.73118727,"remaining_time":101.1896867,"test":[0.4956475501]}, +{"learn":[0.4937723882],"iteration":2124,"passed_time":74.76644041,"remaining_time":101.1545958,"test":[0.4956463283]}, +{"learn":[0.4937707789],"iteration":2125,"passed_time":74.80082112,"remaining_time":101.1183254,"test":[0.4956455534]}, +{"learn":[0.4937703021],"iteration":2126,"passed_time":74.83742777,"remaining_time":101.0850635,"test":[0.4956450468]}, +{"learn":[0.4937697656],"iteration":2127,"passed_time":74.8750637,"remaining_time":101.0531875,"test":[0.4956445699]}, +{"learn":[0.4937655635],"iteration":2128,"passed_time":74.90710249,"remaining_time":101.0137582,"test":[0.495640785]}, +{"learn":[0.493763984],"iteration":2129,"passed_time":74.94251413,"remaining_time":100.9788805,"test":[0.4956400698]}, +{"learn":[0.4937628515],"iteration":2130,"passed_time":74.9782568,"remaining_time":100.944448,"test":[0.4956391757]}, +{"learn":[0.4937603183],"iteration":2131,"passed_time":75.01120702,"remaining_time":100.9062578,"test":[0.4956370299]}, +{"learn":[0.4937596031],"iteration":2132,"passed_time":75.04827728,"remaining_time":100.8736104,"test":[0.4956364637]}, +{"learn":[0.4937580235],"iteration":2133,"passed_time":75.08354549,"remaining_time":100.8385386,"test":[0.495635361]}, +{"learn":[0.4937572487],"iteration":2134,"passed_time":75.12094499,"remaining_time":100.8063266,"test":[0.4956349438]}, +{"learn":[0.4937557884],"iteration":2135,"passed_time":75.15661535,"remaining_time":100.7717914,"test":[0.4956336921]}, +{"learn":[0.4937551923],"iteration":2136,"passed_time":75.19290698,"remaining_time":100.7380874,"test":[0.4956333046]}, +{"learn":[0.4937524505],"iteration":2137,"passed_time":75.22585627,"remaining_time":100.6999068,"test":[0.4956310695]}, +{"learn":[0.49375102],"iteration":2138,"passed_time":75.26058945,"remaining_time":100.6641171,"test":[0.4956298476]}, +{"learn":[0.4937503941],"iteration":2139,"passed_time":75.29801626,"remaining_time":100.6319283,"test":[0.4956294005]}, +{"learn":[0.4937495299],"iteration":2140,"passed_time":75.33484592,"remaining_time":100.5989372,"test":[0.4956287747]}, +{"learn":[0.4937485166],"iteration":2141,"passed_time":75.36972382,"remaining_time":100.5633383,"test":[0.49562797]}, +{"learn":[0.4937479205],"iteration":2142,"passed_time":75.40690548,"remaining_time":100.5308115,"test":[0.4956275826]}, +{"learn":[0.4937465198],"iteration":2143,"passed_time":75.44264068,"remaining_time":100.4963534,"test":[0.4956265991]}, +{"learn":[0.4937452681],"iteration":2144,"passed_time":75.47860556,"remaining_time":100.4621999,"test":[0.4956258839]}, +{"learn":[0.4937434204],"iteration":2145,"passed_time":75.51255227,"remaining_time":100.4253608,"test":[0.4956242149]}, +{"learn":[0.4937423773],"iteration":2146,"passed_time":75.54787522,"remaining_time":100.390353,"test":[0.4956232315]}, +{"learn":[0.4937400825],"iteration":2147,"passed_time":75.58033992,"remaining_time":100.35155,"test":[0.4956210559]}, +{"learn":[0.4937393375],"iteration":2148,"passed_time":75.61762809,"remaining_time":100.319152,"test":[0.495620579]}, +{"learn":[0.4937387712],"iteration":2149,"passed_time":75.65491592,"remaining_time":100.286749,"test":[0.495620132]}, +{"learn":[0.4937375493],"iteration":2150,"passed_time":75.68964389,"remaining_time":100.2509509,"test":[0.4956190293]}, +{"learn":[0.4937355824],"iteration":2151,"passed_time":75.7239524,"remaining_time":100.2145987,"test":[0.4956174498]}, +{"learn":[0.4937348075],"iteration":2152,"passed_time":75.76040539,"remaining_time":100.1810841,"test":[0.4956170028]}, +{"learn":[0.4937342413],"iteration":2153,"passed_time":75.79722685,"remaining_time":100.1480537,"test":[0.4956164365]}, +{"learn":[0.4937334962],"iteration":2154,"passed_time":75.83401356,"remaining_time":100.1149738,"test":[0.4956159001]}, +{"learn":[0.4937321253],"iteration":2155,"passed_time":75.86963912,"remaining_time":100.0803588,"test":[0.4956150358]}, +{"learn":[0.4937315293],"iteration":2156,"passed_time":75.90775406,"remaining_time":100.049024,"test":[0.4956144994]}, +{"learn":[0.4937302776],"iteration":2157,"passed_time":75.94372612,"remaining_time":100.0148608,"test":[0.4956136649]}, +{"learn":[0.4937297113],"iteration":2158,"passed_time":75.98079456,"remaining_time":99.98213865,"test":[0.4956131583]}, +{"learn":[0.4937283404],"iteration":2159,"passed_time":76.01548547,"remaining_time":99.94628645,"test":[0.495612145]}, +{"learn":[0.4937274464],"iteration":2160,"passed_time":76.05726078,"remaining_time":99.91974241,"test":[0.4956113403]}, +{"learn":[0.4937266715],"iteration":2161,"passed_time":76.09605989,"remaining_time":99.88927751,"test":[0.4956108933]}, +{"learn":[0.4937253304],"iteration":2162,"passed_time":76.13291302,"remaining_time":99.85625253,"test":[0.4956099396]}, +{"learn":[0.4937239297],"iteration":2163,"passed_time":76.16870423,"remaining_time":99.82183234,"test":[0.495609284]}, +{"learn":[0.4937219329],"iteration":2164,"passed_time":76.20493101,"remaining_time":99.78798126,"test":[0.495607615]}, +{"learn":[0.4937196977],"iteration":2165,"passed_time":76.24143003,"remaining_time":99.75448416,"test":[0.4956058865]}, +{"learn":[0.4937179692],"iteration":2166,"passed_time":76.27852783,"remaining_time":99.72176711,"test":[0.4956042772]}, +{"learn":[0.4937171347],"iteration":2167,"passed_time":76.31775641,"remaining_time":99.6918294,"test":[0.4956038599]}, +{"learn":[0.4937159725],"iteration":2168,"passed_time":76.35464722,"remaining_time":99.65883184,"test":[0.4956029063]}, +{"learn":[0.4937145717],"iteration":2169,"passed_time":76.39171749,"remaining_time":99.62606474,"test":[0.4956016844]}, +{"learn":[0.4937132902],"iteration":2170,"passed_time":76.42817251,"remaining_time":99.59249196,"test":[0.4956007605]}, +{"learn":[0.4937112637],"iteration":2171,"passed_time":76.46437941,"remaining_time":99.55859345,"test":[0.4955992406]}, +{"learn":[0.4937104292],"iteration":2172,"passed_time":76.50140157,"remaining_time":99.52575345,"test":[0.4955987041]}, +{"learn":[0.4937091477],"iteration":2173,"passed_time":76.53760882,"remaining_time":99.49185029,"test":[0.4955976909]}, +{"learn":[0.4937078066],"iteration":2174,"passed_time":76.57402832,"remaining_time":99.45822069,"test":[0.4955965882]}, +{"learn":[0.4937067039],"iteration":2175,"passed_time":76.60929248,"remaining_time":99.42308914,"test":[0.4955957537]}, +{"learn":[0.4937061675],"iteration":2176,"passed_time":76.64702357,"remaining_time":99.39115642,"test":[0.4955952173]}, +{"learn":[0.4937052138],"iteration":2177,"passed_time":76.68323859,"remaining_time":99.35725405,"test":[0.4955943232]}, +{"learn":[0.4937039025],"iteration":2178,"passed_time":76.71846128,"remaining_time":99.32206483,"test":[0.4955933397]}, +{"learn":[0.4937032767],"iteration":2179,"passed_time":76.75502443,"remaining_time":99.28860958,"test":[0.4955929523]}, +{"learn":[0.4937003858],"iteration":2180,"passed_time":76.78909593,"remaining_time":99.25193096,"test":[0.4955908661]}, +{"learn":[0.4936994024],"iteration":2181,"passed_time":76.82470168,"remaining_time":99.21723618,"test":[0.4955899721]}, +{"learn":[0.4936987467],"iteration":2182,"passed_time":76.8631099,"remaining_time":99.18615693,"test":[0.4955894356]}, +{"learn":[0.4936977036],"iteration":2183,"passed_time":76.90100166,"remaining_time":99.15440507,"test":[0.4955884223]}, +{"learn":[0.4936964817],"iteration":2184,"passed_time":76.93762174,"remaining_time":99.12100924,"test":[0.4955874687]}, +{"learn":[0.493694634],"iteration":2185,"passed_time":76.97438539,"remaining_time":99.08779529,"test":[0.495586068]}, +{"learn":[0.4936935313],"iteration":2186,"passed_time":77.01105638,"remaining_time":99.0544589,"test":[0.4955851143]}, +{"learn":[0.493689359],"iteration":2187,"passed_time":77.04555745,"remaining_time":99.01833069,"test":[0.4955817168]}, +{"learn":[0.4936876305],"iteration":2188,"passed_time":77.08392939,"remaining_time":98.98717475,"test":[0.4955805545]}, +{"learn":[0.4936865874],"iteration":2189,"passed_time":77.12002109,"remaining_time":98.95308642,"test":[0.4955797201]}, +{"learn":[0.4936854847],"iteration":2190,"passed_time":77.15621071,"remaining_time":98.91912181,"test":[0.495578826]}, +{"learn":[0.4936844714],"iteration":2191,"passed_time":77.19375716,"remaining_time":98.88689329,"test":[0.4955777829]}, +{"learn":[0.4936837263],"iteration":2192,"passed_time":77.23307191,"remaining_time":98.85692333,"test":[0.4955773061]}, +{"learn":[0.4936826535],"iteration":2193,"passed_time":77.26979287,"remaining_time":98.82362752,"test":[0.495576412]}, +{"learn":[0.4936816104],"iteration":2194,"passed_time":77.30756862,"remaining_time":98.79167653,"test":[0.495575667]}, +{"learn":[0.493679703],"iteration":2195,"passed_time":77.34256517,"remaining_time":98.75617156,"test":[0.4955739384]}, +{"learn":[0.4936791666],"iteration":2196,"passed_time":77.38164236,"remaining_time":98.72587325,"test":[0.495573402]}, +{"learn":[0.4936785109],"iteration":2197,"passed_time":77.42019516,"remaining_time":98.69489847,"test":[0.4955728953]}, +{"learn":[0.4936776169],"iteration":2198,"passed_time":77.45537614,"remaining_time":98.6596219,"test":[0.4955722695]}, +{"learn":[0.4936765738],"iteration":2199,"passed_time":77.49017979,"remaining_time":98.62386518,"test":[0.4955714052]}, +{"learn":[0.4936756797],"iteration":2200,"passed_time":77.52880678,"remaining_time":98.59297145,"test":[0.4955707496]}, +{"learn":[0.4936732657],"iteration":2201,"passed_time":77.56533647,"remaining_time":98.55940574,"test":[0.4955690806]}, +{"learn":[0.4936726995],"iteration":2202,"passed_time":77.60340722,"remaining_time":98.52779391,"test":[0.4955686634]}, +{"learn":[0.4936700769],"iteration":2203,"passed_time":77.64083147,"remaining_time":98.49535608,"test":[0.4955663686]}, +{"learn":[0.493668706],"iteration":2204,"passed_time":77.67731049,"remaining_time":98.46171556,"test":[0.4955652957]}, +{"learn":[0.4936678417],"iteration":2205,"passed_time":77.71542353,"remaining_time":98.43014205,"test":[0.4955649083]}, +{"learn":[0.4936671563],"iteration":2206,"passed_time":77.75472603,"remaining_time":98.40006788,"test":[0.4955644613]}, +{"learn":[0.4936664112],"iteration":2207,"passed_time":77.79385263,"remaining_time":98.36976293,"test":[0.4955639248]}, +{"learn":[0.4936648913],"iteration":2208,"passed_time":77.83121533,"remaining_time":98.33722136,"test":[0.495563001]}, +{"learn":[0.4936631031],"iteration":2209,"passed_time":77.86725481,"remaining_time":98.30300494,"test":[0.4955617493]}, +{"learn":[0.4936618812],"iteration":2210,"passed_time":77.90340807,"remaining_time":98.26893039,"test":[0.4955606764]}, +{"learn":[0.4936587222],"iteration":2211,"passed_time":77.93678095,"remaining_time":98.23134959,"test":[0.4955572193]}, +{"learn":[0.4936578281],"iteration":2212,"passed_time":77.97321192,"remaining_time":98.19762387,"test":[0.4955562656]}, +{"learn":[0.4936541326],"iteration":2213,"passed_time":78.00700175,"remaining_time":98.16057221,"test":[0.4955530172]}, +{"learn":[0.4936530896],"iteration":2214,"passed_time":78.04396403,"remaining_time":98.12751234,"test":[0.4955519741]}, +{"learn":[0.4936517485],"iteration":2215,"passed_time":78.08246359,"remaining_time":98.09638025,"test":[0.49555108]}, +{"learn":[0.493650616],"iteration":2216,"passed_time":78.1189278,"remaining_time":98.06268654,"test":[0.495550335]}, +{"learn":[0.4936495133],"iteration":2217,"passed_time":78.15506358,"remaining_time":98.02857839,"test":[0.4955492919]}, +{"learn":[0.4936487682],"iteration":2218,"passed_time":78.19293798,"remaining_time":97.99664738,"test":[0.4955487257]}, +{"learn":[0.4936475165],"iteration":2219,"passed_time":78.22862856,"remaining_time":97.9619763,"test":[0.4955480402]}, +{"learn":[0.4936469205],"iteration":2220,"passed_time":78.2667158,"remaining_time":97.93030311,"test":[0.4955474144]}, +{"learn":[0.493646235],"iteration":2221,"passed_time":78.30551139,"remaining_time":97.89950974,"test":[0.4955469673]}, +{"learn":[0.4936445363],"iteration":2222,"passed_time":78.33984571,"remaining_time":97.8631361,"test":[0.495545358]}, +{"learn":[0.4936437912],"iteration":2223,"passed_time":78.37820258,"remaining_time":97.83178524,"test":[0.4955447918]}, +{"learn":[0.4936431356],"iteration":2224,"passed_time":78.41646513,"remaining_time":97.80031045,"test":[0.4955444341]}, +{"learn":[0.4936419435],"iteration":2225,"passed_time":78.45199948,"remaining_time":97.76542973,"test":[0.4955435699]}, +{"learn":[0.4936403938],"iteration":2226,"passed_time":78.48612275,"remaining_time":97.72879137,"test":[0.495542646]}, +{"learn":[0.4936390229],"iteration":2227,"passed_time":78.52120421,"remaining_time":97.69334743,"test":[0.4955416923]}, +{"learn":[0.4936357744],"iteration":2228,"passed_time":78.55653161,"remaining_time":97.65820955,"test":[0.4955395465]}, +{"learn":[0.49363494],"iteration":2229,"passed_time":78.5920735,"remaining_time":97.62333794,"test":[0.4955386525]}, +{"learn":[0.4936335988],"iteration":2230,"passed_time":78.626274,"remaining_time":97.58680085,"test":[0.4955377584]}, +{"learn":[0.4936320491],"iteration":2231,"passed_time":78.66134676,"remaining_time":97.55134759,"test":[0.4955365663]}, +{"learn":[0.4936315425],"iteration":2232,"passed_time":78.69845773,"remaining_time":97.51842031,"test":[0.4955360895]}, +{"learn":[0.4936292477],"iteration":2233,"passed_time":78.73262164,"remaining_time":97.4818404,"test":[0.4955343609]}, +{"learn":[0.4936271615],"iteration":2234,"passed_time":78.76552499,"remaining_time":97.44370318,"test":[0.495532692]}, +{"learn":[0.4936251648],"iteration":2235,"passed_time":78.80052606,"remaining_time":97.4081637,"test":[0.4955309337]}, +{"learn":[0.4936239727],"iteration":2236,"passed_time":78.8361357,"remaining_time":97.37337637,"test":[0.4955300694]}, +{"learn":[0.4936218269],"iteration":2237,"passed_time":78.8709077,"remaining_time":97.33755454,"test":[0.4955284601]}, +{"learn":[0.4936201878],"iteration":2238,"passed_time":78.90548223,"remaining_time":97.30149015,"test":[0.4955269998]}, +{"learn":[0.4936186381],"iteration":2239,"passed_time":78.94070161,"remaining_time":97.26622162,"test":[0.4955259269]}, +{"learn":[0.4936160751],"iteration":2240,"passed_time":78.97510459,"remaining_time":97.22994804,"test":[0.4955237215]}, +{"learn":[0.4936119922],"iteration":2241,"passed_time":79.00828062,"remaining_time":97.19216679,"test":[0.4955206817]}, +{"learn":[0.4936111279],"iteration":2242,"passed_time":79.04499676,"remaining_time":97.15874101,"test":[0.4955202346]}, +{"learn":[0.4936105915],"iteration":2243,"passed_time":79.0823353,"remaining_time":97.12607669,"test":[0.4955197876]}, +{"learn":[0.4936093696],"iteration":2244,"passed_time":79.11761433,"remaining_time":97.09088083,"test":[0.4955187445]}, +{"learn":[0.4936065085],"iteration":2245,"passed_time":79.15149447,"remaining_time":97.05396962,"test":[0.495516867]}, +{"learn":[0.4936057039],"iteration":2246,"passed_time":79.18807794,"remaining_time":97.0203732,"test":[0.4955161219]}, +{"learn":[0.4936043926],"iteration":2247,"passed_time":79.22379288,"remaining_time":96.98571085,"test":[0.4955150788]}, +{"learn":[0.4936031409],"iteration":2248,"passed_time":79.25832813,"remaining_time":96.94960457,"test":[0.4955143636]}, +{"learn":[0.4936014719],"iteration":2249,"passed_time":79.29433604,"remaining_time":96.91529961,"test":[0.4955127841]}, +{"learn":[0.4936008163],"iteration":2250,"passed_time":79.33152144,"remaining_time":96.88243112,"test":[0.4955122476]}, +{"learn":[0.4935997732],"iteration":2251,"passed_time":79.36709015,"remaining_time":96.84758603,"test":[0.4955115324]}, +{"learn":[0.4935986407],"iteration":2252,"passed_time":79.4021054,"remaining_time":96.81206549,"test":[0.4955103701]}, +{"learn":[0.4935978957],"iteration":2253,"passed_time":79.44027344,"remaining_time":96.78038636,"test":[0.4955098038]}, +{"learn":[0.4935970314],"iteration":2254,"passed_time":79.48148583,"remaining_time":96.75240736,"test":[0.4955091184]}, +{"learn":[0.4935959585],"iteration":2255,"passed_time":79.51726765,"remaining_time":96.71781137,"test":[0.4955082541]}, +{"learn":[0.4935953327],"iteration":2256,"passed_time":79.55723622,"remaining_time":96.68830259,"test":[0.4955078071]}, +{"learn":[0.4935942896],"iteration":2257,"passed_time":79.59450047,"remaining_time":96.65550057,"test":[0.4955071812]}, +{"learn":[0.4935921438],"iteration":2258,"passed_time":79.62865849,"remaining_time":96.61892559,"test":[0.4955053037]}, +{"learn":[0.4935915478],"iteration":2259,"passed_time":79.66576455,"remaining_time":96.58592694,"test":[0.4955049461]}, +{"learn":[0.4935903557],"iteration":2260,"passed_time":79.70159792,"remaining_time":96.55138288,"test":[0.4955039924]}, +{"learn":[0.4935891636],"iteration":2261,"passed_time":79.73770064,"remaining_time":96.51716372,"test":[0.4955031281]}, +{"learn":[0.493588657],"iteration":2262,"passed_time":79.7743837,"remaining_time":96.4836448,"test":[0.4955026215]}, +{"learn":[0.4935873456],"iteration":2263,"passed_time":79.80930203,"remaining_time":96.44799044,"test":[0.4955019956]}, +{"learn":[0.4935825177],"iteration":2264,"passed_time":79.84128916,"remaining_time":96.40879729,"test":[0.4954983895]}, +{"learn":[0.4935810872],"iteration":2265,"passed_time":79.87726974,"remaining_time":96.37442872,"test":[0.4954974061]}, +{"learn":[0.4935789414],"iteration":2266,"passed_time":79.91192415,"remaining_time":96.33845995,"test":[0.4954957371]}, +{"learn":[0.4935779877],"iteration":2267,"passed_time":79.9468236,"remaining_time":96.30278751,"test":[0.4954948431]}, +{"learn":[0.4935757227],"iteration":2268,"passed_time":79.9812527,"remaining_time":96.26654964,"test":[0.4954933828]}, +{"learn":[0.4935745605],"iteration":2269,"passed_time":80.01533726,"remaining_time":96.22989899,"test":[0.4954926675]}, +{"learn":[0.4935731299],"iteration":2270,"passed_time":80.05038019,"remaining_time":96.19440226,"test":[0.4954915052]}, +{"learn":[0.4935725935],"iteration":2271,"passed_time":80.08694635,"remaining_time":96.16073487,"test":[0.4954908794]}, +{"learn":[0.493564219],"iteration":2272,"passed_time":80.11920331,"remaining_time":96.12189504,"test":[0.4954845315]}, +{"learn":[0.4935635038],"iteration":2273,"passed_time":80.15688488,"remaining_time":96.08956384,"test":[0.4954839652]}, +{"learn":[0.4935624011],"iteration":2274,"passed_time":80.19229742,"remaining_time":96.05451009,"test":[0.4954831606]}, +{"learn":[0.4935611792],"iteration":2275,"passed_time":80.22770382,"remaining_time":96.01944868,"test":[0.4954820877]}, +{"learn":[0.4935604938],"iteration":2276,"passed_time":80.26570576,"remaining_time":95.98749091,"test":[0.4954816704]}, +{"learn":[0.4935598381],"iteration":2277,"passed_time":80.30339616,"remaining_time":95.95515555,"test":[0.495481134]}, +{"learn":[0.4935585864],"iteration":2278,"passed_time":80.34084693,"remaining_time":95.9225294,"test":[0.4954801505]}, +{"learn":[0.4935547419],"iteration":2279,"passed_time":80.37595005,"remaining_time":95.8870983,"test":[0.4954769319]}, +{"learn":[0.4935539671],"iteration":2280,"passed_time":80.41289431,"remaining_time":95.85386218,"test":[0.4954764252]}, +{"learn":[0.493553222],"iteration":2281,"passed_time":80.4509373,"remaining_time":95.82193146,"test":[0.495476008]}, +{"learn":[0.4935527452],"iteration":2282,"passed_time":80.48881657,"remaining_time":95.78980053,"test":[0.4954753822]}, +{"learn":[0.4935517915],"iteration":2283,"passed_time":80.52629533,"remaining_time":95.75718832,"test":[0.4954744881]}, +{"learn":[0.4935510166],"iteration":2284,"passed_time":80.57101419,"remaining_time":95.73317441,"test":[0.4954740112]}, +{"learn":[0.4935504206],"iteration":2285,"passed_time":80.60929262,"remaining_time":95.70149614,"test":[0.4954734748]}, +{"learn":[0.4935490795],"iteration":2286,"passed_time":80.6456201,"remaining_time":95.66749774,"test":[0.4954723721]}, +{"learn":[0.4935473211],"iteration":2287,"passed_time":80.68171071,"remaining_time":95.63321654,"test":[0.4954711502]}, +{"learn":[0.4935465463],"iteration":2288,"passed_time":80.7187392,"remaining_time":95.60004455,"test":[0.4954707628]}, +{"learn":[0.4935459204],"iteration":2289,"passed_time":80.7556354,"remaining_time":95.56671264,"test":[0.4954703456]}, +{"learn":[0.4935448475],"iteration":2290,"passed_time":80.7917555,"remaining_time":95.5324599,"test":[0.4954694515]}, +{"learn":[0.4935428806],"iteration":2291,"passed_time":80.82580746,"remaining_time":95.49576204,"test":[0.4954679018]}, +{"learn":[0.4935415097],"iteration":2292,"passed_time":80.86108553,"remaining_time":95.46051396,"test":[0.4954667693]}, +{"learn":[0.4935407348],"iteration":2293,"passed_time":80.89828609,"remaining_time":95.42753364,"test":[0.495466352]}, +{"learn":[0.4935401984],"iteration":2294,"passed_time":80.93488928,"remaining_time":95.39384553,"test":[0.4954658454]}, +{"learn":[0.4935391255],"iteration":2295,"passed_time":80.97056348,"remaining_time":95.35906082,"test":[0.49546516]}, +{"learn":[0.4935370095],"iteration":2296,"passed_time":81.0035804,"remaining_time":95.32114838,"test":[0.4954635506]}, +{"learn":[0.4935358472],"iteration":2297,"passed_time":81.038938,"remaining_time":95.28599238,"test":[0.4954623287]}, +{"learn":[0.493534983],"iteration":2298,"passed_time":81.07396878,"remaining_time":95.25045223,"test":[0.4954616135]}, +{"learn":[0.4935344465],"iteration":2299,"passed_time":81.11074048,"remaining_time":95.21695621,"test":[0.495460928]}, +{"learn":[0.4935327776],"iteration":2300,"passed_time":81.1460752,"remaining_time":95.18177183,"test":[0.4954601234]}, +{"learn":[0.4935313471],"iteration":2301,"passed_time":81.18143124,"remaining_time":95.14661229,"test":[0.4954590803]}, +{"learn":[0.4935301252],"iteration":2302,"passed_time":81.21710425,"remaining_time":95.11182378,"test":[0.4954581564]}, +{"learn":[0.4935291119],"iteration":2303,"passed_time":81.25336801,"remaining_time":95.07772576,"test":[0.4954572027]}, +{"learn":[0.4935282775],"iteration":2304,"passed_time":81.29059417,"remaining_time":95.04475111,"test":[0.4954566961]}, +{"learn":[0.4935269065],"iteration":2305,"passed_time":81.32617374,"remaining_time":95.00984911,"test":[0.495455653]}, +{"learn":[0.4935260423],"iteration":2306,"passed_time":81.36040284,"remaining_time":94.97337011,"test":[0.4954547589]}, +{"learn":[0.4935256847],"iteration":2307,"passed_time":81.39725863,"remaining_time":94.93995677,"test":[0.4954542523]}, +{"learn":[0.4935244628],"iteration":2308,"passed_time":81.43249448,"remaining_time":94.90465251,"test":[0.4954533284]}, +{"learn":[0.4935165353],"iteration":2309,"passed_time":81.46481417,"remaining_time":94.86595243,"test":[0.4954473084]}, +{"learn":[0.4935159095],"iteration":2310,"passed_time":81.50161937,"remaining_time":94.83247706,"test":[0.4954468017]}, +{"learn":[0.4935147174],"iteration":2311,"passed_time":81.53714422,"remaining_time":94.79751024,"test":[0.4954457884]}, +{"learn":[0.4935140915],"iteration":2312,"passed_time":81.57532263,"remaining_time":94.76562555,"test":[0.495445401]}, +{"learn":[0.4935136147],"iteration":2313,"passed_time":81.61332725,"remaining_time":94.7335337,"test":[0.4954448348]}, +{"learn":[0.4935124822],"iteration":2314,"passed_time":81.65069758,"remaining_time":94.70070108,"test":[0.4954439407]}, +{"learn":[0.493511767],"iteration":2315,"passed_time":81.68804011,"remaining_time":94.66783232,"test":[0.4954434937]}, +{"learn":[0.4935108133],"iteration":2316,"passed_time":81.72380414,"remaining_time":94.63313186,"test":[0.4954427188]}, +{"learn":[0.4935097106],"iteration":2317,"passed_time":81.76161932,"remaining_time":94.60080371,"test":[0.4954419141]}, +{"learn":[0.4935083695],"iteration":2318,"passed_time":81.79759086,"remaining_time":94.56633941,"test":[0.4954410797]}, +{"learn":[0.4935075648],"iteration":2319,"passed_time":81.83210204,"remaining_time":94.53018684,"test":[0.4954401856]}, +{"learn":[0.4935070284],"iteration":2320,"passed_time":81.87040091,"remaining_time":94.4984076,"test":[0.4954397684]}, +{"learn":[0.4935059555],"iteration":2321,"passed_time":81.90616683,"remaining_time":94.46370145,"test":[0.4954390531]}, +{"learn":[0.4935051509],"iteration":2322,"passed_time":81.94280123,"remaining_time":94.42999522,"test":[0.4954383677]}, +{"learn":[0.4935039886],"iteration":2323,"passed_time":81.97899469,"remaining_time":94.39577873,"test":[0.4954375928]}, +{"learn":[0.4935029455],"iteration":2324,"passed_time":82.01569505,"remaining_time":94.36214376,"test":[0.4954365497]}, +{"learn":[0.4935024984],"iteration":2325,"passed_time":82.05426739,"remaining_time":94.33065822,"test":[0.4954361921]}, +{"learn":[0.4934983857],"iteration":2326,"passed_time":82.08833398,"remaining_time":94.29399086,"test":[0.4954328244]}, +{"learn":[0.493496538],"iteration":2327,"passed_time":82.12456067,"remaining_time":94.25980502,"test":[0.4954313939]}, +{"learn":[0.4934945114],"iteration":2328,"passed_time":82.15962685,"remaining_time":94.22428653,"test":[0.4954296952]}, +{"learn":[0.4934932597],"iteration":2329,"passed_time":82.19517601,"remaining_time":94.18932187,"test":[0.4954289203]}, +{"learn":[0.4934924253],"iteration":2330,"passed_time":82.23165923,"remaining_time":94.1554262,"test":[0.4954285329]}, +{"learn":[0.4934916504],"iteration":2331,"passed_time":82.26847174,"remaining_time":94.12190506,"test":[0.4954280263]}, +{"learn":[0.4934906669],"iteration":2332,"passed_time":82.30375135,"remaining_time":94.08662873,"test":[0.4954272812]}, +{"learn":[0.4934898623],"iteration":2333,"passed_time":82.34024615,"remaining_time":94.05274046,"test":[0.4954268342]}, +{"learn":[0.4934889384],"iteration":2334,"passed_time":82.37676843,"remaining_time":94.01888132,"test":[0.4954260295]}, +{"learn":[0.4934869118],"iteration":2335,"passed_time":82.41107118,"remaining_time":93.9824887,"test":[0.4954246586]}, +{"learn":[0.4934856303],"iteration":2336,"passed_time":82.44786174,"remaining_time":93.94893274,"test":[0.4954236751]}, +{"learn":[0.4934845575],"iteration":2337,"passed_time":82.48326992,"remaining_time":93.91380005,"test":[0.4954228109]}, +{"learn":[0.4934831865],"iteration":2338,"passed_time":82.52025355,"remaining_time":93.88045947,"test":[0.4954219466]}, +{"learn":[0.4934822329],"iteration":2339,"passed_time":82.55546112,"remaining_time":93.84509683,"test":[0.4954210823]}, +{"learn":[0.493478746],"iteration":2340,"passed_time":82.59055607,"remaining_time":93.80960641,"test":[0.4954180127]}, +{"learn":[0.4934774943],"iteration":2341,"passed_time":82.62825884,"remaining_time":93.777076,"test":[0.4954172974]}, +{"learn":[0.4934763916],"iteration":2342,"passed_time":82.66547605,"remaining_time":93.74399055,"test":[0.4954162842]}, +{"learn":[0.4934745737],"iteration":2343,"passed_time":82.69994103,"remaining_time":93.70778301,"test":[0.4954149729]}, +{"learn":[0.4934739776],"iteration":2344,"passed_time":82.73684754,"remaining_time":93.67434125,"test":[0.4954143768]}, +{"learn":[0.4934727855],"iteration":2345,"passed_time":82.77314055,"remaining_time":93.64020248,"test":[0.4954134827]}, +{"learn":[0.4934717723],"iteration":2346,"passed_time":82.80951833,"remaining_time":93.60615771,"test":[0.4954126781]}, +{"learn":[0.49347061],"iteration":2347,"passed_time":82.84528476,"remaining_time":93.57142043,"test":[0.4954117542]}, +{"learn":[0.4934697457],"iteration":2348,"passed_time":82.88116035,"remaining_time":93.53680549,"test":[0.4954110091]}, +{"learn":[0.4934691795],"iteration":2349,"passed_time":82.91877139,"remaining_time":93.50414647,"test":[0.4954106515]}, +{"learn":[0.4934679278],"iteration":2350,"passed_time":82.95462657,"remaining_time":93.4695048,"test":[0.495409668]}, +{"learn":[0.4934673317],"iteration":2351,"passed_time":82.99178833,"remaining_time":93.43633312,"test":[0.4954091912]}, +{"learn":[0.4934661694],"iteration":2352,"passed_time":83.02826977,"remaining_time":93.40239273,"test":[0.4954085057]}, +{"learn":[0.4934657224],"iteration":2353,"passed_time":83.06681367,"remaining_time":93.37076847,"test":[0.4954079991]}, +{"learn":[0.4934630104],"iteration":2354,"passed_time":83.10288838,"remaining_time":93.33636508,"test":[0.4954059427]}, +{"learn":[0.4934621759],"iteration":2355,"passed_time":83.13877298,"remaining_time":93.30174693,"test":[0.4954052871]}, +{"learn":[0.4934614905],"iteration":2356,"passed_time":83.17857767,"remaining_time":93.27152346,"test":[0.4954048699]}, +{"learn":[0.4934610434],"iteration":2357,"passed_time":83.21737974,"remaining_time":93.24016848,"test":[0.4954043334]}, +{"learn":[0.493460209],"iteration":2358,"passed_time":83.25689147,"remaining_time":93.20960169,"test":[0.4954038268]}, +{"learn":[0.4934590765],"iteration":2359,"passed_time":83.29407609,"remaining_time":93.1764241,"test":[0.4954031115]}, +{"learn":[0.4934582122],"iteration":2360,"passed_time":83.33210793,"remaining_time":93.1441901,"test":[0.4954024857]}, +{"learn":[0.4934569307],"iteration":2361,"passed_time":83.36739699,"remaining_time":93.10888791,"test":[0.4954017704]}, +{"learn":[0.4934563645],"iteration":2362,"passed_time":83.40592437,"remaining_time":93.07719956,"test":[0.4954011148]}, +{"learn":[0.4934554108],"iteration":2363,"passed_time":83.44310517,"remaining_time":93.0440039,"test":[0.4954004293]}, +{"learn":[0.4934547551],"iteration":2364,"passed_time":83.48070622,"remaining_time":93.01127311,"test":[0.4953997439]}, +{"learn":[0.493453414],"iteration":2365,"passed_time":83.51740725,"remaining_time":92.97753622,"test":[0.4953990584]}, +{"learn":[0.4934524604],"iteration":2366,"passed_time":83.55254977,"remaining_time":92.94206317,"test":[0.4953981941]}, +{"learn":[0.4934519239],"iteration":2367,"passed_time":83.59167118,"remaining_time":92.9110129,"test":[0.4953976279]}, +{"learn":[0.4934511491],"iteration":2368,"passed_time":83.62834737,"remaining_time":92.87724016,"test":[0.4953970319]}, +{"learn":[0.4934500464],"iteration":2369,"passed_time":83.66425708,"remaining_time":92.8426144,"test":[0.4953961974]}, +{"learn":[0.4934490033],"iteration":2370,"passed_time":83.70032415,"remaining_time":92.80816204,"test":[0.4953953927]}, +{"learn":[0.4934478708],"iteration":2371,"passed_time":83.73622885,"remaining_time":92.77352842,"test":[0.4953944093]}, +{"learn":[0.4934469767],"iteration":2372,"passed_time":83.77118338,"remaining_time":92.73784186,"test":[0.4953934854]}, +{"learn":[0.4934452184],"iteration":2373,"passed_time":83.80585534,"remaining_time":92.70184335,"test":[0.4953921443]}, +{"learn":[0.4934445031],"iteration":2374,"passed_time":83.84245783,"remaining_time":92.66797971,"test":[0.4953915482]}, +{"learn":[0.493443311],"iteration":2375,"passed_time":83.87747617,"remaining_time":92.63236426,"test":[0.4953906244]}, +{"learn":[0.4934425958],"iteration":2376,"passed_time":83.91479733,"remaining_time":92.59929045,"test":[0.4953900581]}, +{"learn":[0.4934411951],"iteration":2377,"passed_time":83.9502702,"remaining_time":92.56417513,"test":[0.4953891044]}, +{"learn":[0.4934404202],"iteration":2378,"passed_time":83.98692013,"remaining_time":92.53035631,"test":[0.4953885978]}, +{"learn":[0.4934393175],"iteration":2379,"passed_time":84.022445,"remaining_time":92.4952966,"test":[0.4953877037]}, +{"learn":[0.4934367247],"iteration":2380,"passed_time":84.05613576,"remaining_time":92.45821904,"test":[0.4953862434]}, +{"learn":[0.4934356816],"iteration":2381,"passed_time":84.0927017,"remaining_time":92.42430439,"test":[0.4953852897]}, +{"learn":[0.4934340425],"iteration":2382,"passed_time":84.12734661,"remaining_time":92.38827784,"test":[0.49538374]}, +{"learn":[0.4934327908],"iteration":2383,"passed_time":84.16282027,"remaining_time":92.35316184,"test":[0.4953830248]}, +{"learn":[0.4934321054],"iteration":2384,"passed_time":84.20143432,"remaining_time":92.32148878,"test":[0.4953824287]}, +{"learn":[0.4934310325],"iteration":2385,"passed_time":84.23835627,"remaining_time":92.28795612,"test":[0.4953812664]}, +{"learn":[0.4934285887],"iteration":2386,"passed_time":84.27209854,"remaining_time":92.25093988,"test":[0.4953796869]}, +{"learn":[0.4934278734],"iteration":2387,"passed_time":84.30852624,"remaining_time":92.21686371,"test":[0.4953788226]}, +{"learn":[0.49342689],"iteration":2388,"passed_time":84.34670985,"remaining_time":92.18470465,"test":[0.4953781372]}, +{"learn":[0.4934261449],"iteration":2389,"passed_time":84.38406818,"remaining_time":92.1516393,"test":[0.4953776305]}, +{"learn":[0.4934254297],"iteration":2390,"passed_time":84.41962547,"remaining_time":92.11660513,"test":[0.4953767961]}, +{"learn":[0.4934242674],"iteration":2391,"passed_time":84.45654636,"remaining_time":92.08305723,"test":[0.4953758424]}, +{"learn":[0.4934230753],"iteration":2392,"passed_time":84.49374802,"remaining_time":92.0498124,"test":[0.4953749781]}, +{"learn":[0.493421913],"iteration":2393,"passed_time":84.53058236,"remaining_time":92.01616443,"test":[0.4953738457]}, +{"learn":[0.4934208401],"iteration":2394,"passed_time":84.5680251,"remaining_time":91.98317552,"test":[0.495373041]}, +{"learn":[0.4934201844],"iteration":2395,"passed_time":84.60499112,"remaining_time":91.94966481,"test":[0.4953725343]}, +{"learn":[0.4934192606],"iteration":2396,"passed_time":84.64218324,"remaining_time":91.91639673,"test":[0.4953719085]}, +{"learn":[0.4934180387],"iteration":2397,"passed_time":84.67767382,"remaining_time":91.88127909,"test":[0.4953711336]}, +{"learn":[0.4934169658],"iteration":2398,"passed_time":84.71411631,"remaining_time":91.84719322,"test":[0.4953704184]}, +{"learn":[0.4934160419],"iteration":2399,"passed_time":84.74970938,"remaining_time":91.81218516,"test":[0.4953696137]}, +{"learn":[0.4934146412],"iteration":2400,"passed_time":84.78496197,"remaining_time":91.77680806,"test":[0.4953685408]}, +{"learn":[0.4934133299],"iteration":2401,"passed_time":84.82059596,"remaining_time":91.74184359,"test":[0.4953677362]}, +{"learn":[0.4934122272],"iteration":2402,"passed_time":84.85754944,"remaining_time":91.70830458,"test":[0.4953666633]}, +{"learn":[0.4934114822],"iteration":2403,"passed_time":84.89510808,"remaining_time":91.67541622,"test":[0.4953663355]}, +{"learn":[0.4934103795],"iteration":2404,"passed_time":84.93319617,"remaining_time":91.64309525,"test":[0.4953654712]}, +{"learn":[0.493409247],"iteration":2405,"passed_time":84.97081718,"remaining_time":91.61026591,"test":[0.4953644877]}, +{"learn":[0.4934084721],"iteration":2406,"passed_time":85.00768762,"remaining_time":91.57662402,"test":[0.4953636235]}, +{"learn":[0.4934073396],"iteration":2407,"passed_time":85.04290969,"remaining_time":91.54120511,"test":[0.4953628784]}, +{"learn":[0.4934037634],"iteration":2408,"passed_time":85.0760844,"remaining_time":91.50358435,"test":[0.495360077]}, +{"learn":[0.4934025415],"iteration":2409,"passed_time":85.11215964,"remaining_time":91.46908443,"test":[0.4953592425]}, +{"learn":[0.4934013196],"iteration":2410,"passed_time":85.14872112,"remaining_time":91.43510534,"test":[0.4953581696]}, +{"learn":[0.4934006937],"iteration":2411,"passed_time":85.18576897,"remaining_time":91.40164598,"test":[0.4953577822]}, +{"learn":[0.4933999189],"iteration":2412,"passed_time":85.22232301,"remaining_time":91.36765421,"test":[0.495357216]}, +{"learn":[0.4933994718],"iteration":2413,"passed_time":85.2593977,"remaining_time":91.33421809,"test":[0.4953568285]}, +{"learn":[0.4933981307],"iteration":2414,"passed_time":85.29463083,"remaining_time":91.29880774,"test":[0.4953556662]}, +{"learn":[0.4933960148],"iteration":2415,"passed_time":85.32946021,"remaining_time":91.26296572,"test":[0.4953542655]}, +{"learn":[0.4933947035],"iteration":2416,"passed_time":85.36456521,"remaining_time":91.22741908,"test":[0.4953532821]}, +{"learn":[0.4933938988],"iteration":2417,"passed_time":85.39957161,"remaining_time":91.19176753,"test":[0.4953524178]}, +{"learn":[0.4933931537],"iteration":2418,"passed_time":85.43684237,"remaining_time":91.15853252,"test":[0.4953517323]}, +{"learn":[0.4933925279],"iteration":2419,"passed_time":85.47518073,"remaining_time":91.12643235,"test":[0.4953513449]}, +{"learn":[0.4933913358],"iteration":2420,"passed_time":85.51186466,"remaining_time":91.09256462,"test":[0.4953503614]}, +{"learn":[0.4933907696],"iteration":2421,"passed_time":85.54929193,"remaining_time":91.0594858,"test":[0.4953499144]}, +{"learn":[0.4933896073],"iteration":2422,"passed_time":85.58402047,"remaining_time":91.02353312,"test":[0.4953492289]}, +{"learn":[0.4933877595],"iteration":2423,"passed_time":85.61899265,"remaining_time":90.98784038,"test":[0.4953479176]}, +{"learn":[0.4933865078],"iteration":2424,"passed_time":85.6553278,"remaining_time":90.9535955,"test":[0.495347113]}, +{"learn":[0.4933852859],"iteration":2425,"passed_time":85.69072447,"remaining_time":90.91835317,"test":[0.4953461295]}, +{"learn":[0.4933841236],"iteration":2426,"passed_time":85.72699778,"remaining_time":90.88404009,"test":[0.495345444]}, +{"learn":[0.4933817991],"iteration":2427,"passed_time":85.76108517,"remaining_time":90.84740983,"test":[0.4953436559]}, +{"learn":[0.4933805772],"iteration":2428,"passed_time":85.79717902,"remaining_time":90.81290542,"test":[0.4953427618]}, +{"learn":[0.4933800407],"iteration":2429,"passed_time":85.8344692,"remaining_time":90.77966496,"test":[0.4953422552]}, +{"learn":[0.4933759578],"iteration":2430,"passed_time":85.86780444,"remaining_time":90.74224171,"test":[0.4953390663]}, +{"learn":[0.4933754512],"iteration":2431,"passed_time":85.90409386,"remaining_time":90.70794122,"test":[0.4953387087]}, +{"learn":[0.4933747955],"iteration":2432,"passed_time":85.94156602,"remaining_time":90.67488696,"test":[0.4953381425]}, +{"learn":[0.4933723517],"iteration":2433,"passed_time":85.97526505,"remaining_time":90.63785132,"test":[0.4953362351]}, +{"learn":[0.4933718451],"iteration":2434,"passed_time":86.01263963,"remaining_time":90.6046902,"test":[0.4953358477]}, +{"learn":[0.4933643051],"iteration":2435,"passed_time":86.04615192,"remaining_time":90.56746039,"test":[0.4953298276]}, +{"learn":[0.4933629044],"iteration":2436,"passed_time":86.08150491,"remaining_time":90.53216951,"test":[0.495328874]}, +{"learn":[0.4933622785],"iteration":2437,"passed_time":86.11810354,"remaining_time":90.49818756,"test":[0.4953284567]}, +{"learn":[0.4933612951],"iteration":2438,"passed_time":86.15488709,"remaining_time":90.46439763,"test":[0.4953279799]}, +{"learn":[0.4933604308],"iteration":2439,"passed_time":86.19223538,"remaining_time":90.43119778,"test":[0.495327354]}, +{"learn":[0.4933591791],"iteration":2440,"passed_time":86.22912197,"remaining_time":90.39751049,"test":[0.4953264302]}, +{"learn":[0.493358136],"iteration":2441,"passed_time":86.26695698,"remaining_time":90.36481407,"test":[0.4953255361]}, +{"learn":[0.4933564671],"iteration":2442,"passed_time":86.30232236,"remaining_time":90.32952856,"test":[0.4953243142]}, +{"learn":[0.4933559306],"iteration":2443,"passed_time":86.33941591,"remaining_time":90.29605035,"test":[0.4953237778]}, +{"learn":[0.4933536955],"iteration":2444,"passed_time":86.37385466,"remaining_time":90.25979496,"test":[0.4953220492]}, +{"learn":[0.4933526822],"iteration":2445,"passed_time":86.40940407,"remaining_time":90.22470073,"test":[0.4953212446]}, +{"learn":[0.4933508046],"iteration":2446,"passed_time":86.44414813,"remaining_time":90.18876591,"test":[0.495319367]}, +{"learn":[0.4933499404],"iteration":2447,"passed_time":86.47992009,"remaining_time":90.15390362,"test":[0.4953185624]}, +{"learn":[0.4933491357],"iteration":2448,"passed_time":86.51664053,"remaining_time":90.12002858,"test":[0.4953178769]}, +{"learn":[0.4933480032],"iteration":2449,"passed_time":86.5541851,"remaining_time":90.08700898,"test":[0.4953167444]}, +{"learn":[0.4933474966],"iteration":2450,"passed_time":86.59206083,"remaining_time":90.05433009,"test":[0.495316357]}, +{"learn":[0.4933469899],"iteration":2451,"passed_time":86.62945337,"remaining_time":90.02114485,"test":[0.4953157907]}, +{"learn":[0.4933460065],"iteration":2452,"passed_time":86.66637822,"remaining_time":89.98747058,"test":[0.4953150159]}, +{"learn":[0.4933449336],"iteration":2453,"passed_time":86.70257268,"remaining_time":89.95303587,"test":[0.495313943]}, +{"learn":[0.4933440395],"iteration":2454,"passed_time":86.73984693,"remaining_time":89.91971912,"test":[0.4953136152]}, +{"learn":[0.493342758],"iteration":2455,"passed_time":86.77632235,"remaining_time":89.88557169,"test":[0.4953128701]}, +{"learn":[0.4933415659],"iteration":2456,"passed_time":86.81136714,"remaining_time":89.84994165,"test":[0.4953122443]}, +{"learn":[0.4933392711],"iteration":2457,"passed_time":86.84671677,"remaining_time":89.81462735,"test":[0.4953105753]}, +{"learn":[0.493337632],"iteration":2458,"passed_time":86.88308467,"remaining_time":89.78036525,"test":[0.4953096515]}, +{"learn":[0.4933363207],"iteration":2459,"passed_time":86.91838269,"remaining_time":89.74499676,"test":[0.4953086382]}, +{"learn":[0.4933346816],"iteration":2460,"passed_time":86.95392851,"remaining_time":89.70988399,"test":[0.4953072673]}, +{"learn":[0.4933337279],"iteration":2461,"passed_time":86.98896747,"remaining_time":89.67424835,"test":[0.4953063434]}, +{"learn":[0.4933331319],"iteration":2462,"passed_time":87.02661391,"remaining_time":89.64129902,"test":[0.495305956]}, +{"learn":[0.4933320292],"iteration":2463,"passed_time":87.06176532,"remaining_time":89.60577794,"test":[0.4953053003]}, +{"learn":[0.4933283039],"iteration":2464,"passed_time":87.09495531,"remaining_time":89.56824004,"test":[0.4953022903]}, +{"learn":[0.4933272906],"iteration":2465,"passed_time":87.13112047,"remaining_time":89.53376289,"test":[0.495301426]}, +{"learn":[0.4933260389],"iteration":2466,"passed_time":87.16694578,"remaining_time":89.49893541,"test":[0.4953004127]}, +{"learn":[0.4933252641],"iteration":2467,"passed_time":87.20503439,"remaining_time":89.46642912,"test":[0.4952996677]}, +{"learn":[0.4933242508],"iteration":2468,"passed_time":87.24286993,"remaining_time":89.43365889,"test":[0.4952988034]}, +{"learn":[0.4933230289],"iteration":2469,"passed_time":87.27921,"remaining_time":89.39935275,"test":[0.4952979093]}, +{"learn":[0.4933212705],"iteration":2470,"passed_time":87.31579874,"remaining_time":89.36529948,"test":[0.4952964788]}, +{"learn":[0.4933203169],"iteration":2471,"passed_time":87.35330018,"remaining_time":89.33217753,"test":[0.4952957934]}, +{"learn":[0.4933189162],"iteration":2472,"passed_time":87.38984065,"remaining_time":89.29807008,"test":[0.4952948099]}, +{"learn":[0.4933178731],"iteration":2473,"passed_time":87.42572076,"remaining_time":89.26328644,"test":[0.4952939456]}, +{"learn":[0.493317277],"iteration":2474,"passed_time":87.46308264,"remaining_time":89.2300136,"test":[0.4952933794]}, +{"learn":[0.4933149823],"iteration":2475,"passed_time":87.49810786,"remaining_time":89.19435551,"test":[0.4952917403]}, +{"learn":[0.49331382],"iteration":2476,"passed_time":87.53277856,"remaining_time":89.15833682,"test":[0.4952909058]}, +{"learn":[0.4933128663],"iteration":2477,"passed_time":87.56700254,"remaining_time":89.12186458,"test":[0.4952900713]}, +{"learn":[0.4933120318],"iteration":2478,"passed_time":87.60403627,"remaining_time":89.08825149,"test":[0.4952896541]}, +{"learn":[0.4933108695],"iteration":2479,"passed_time":87.64112461,"remaining_time":89.05469113,"test":[0.4952888196]}, +{"learn":[0.49330929],"iteration":2480,"passed_time":87.67597288,"remaining_time":89.01885356,"test":[0.4952873593]}, +{"learn":[0.4933087536],"iteration":2481,"passed_time":87.71358254,"remaining_time":88.98581823,"test":[0.4952869719]}, +{"learn":[0.493307025],"iteration":2482,"passed_time":87.74817937,"remaining_time":88.94972512,"test":[0.4952856606]}, +{"learn":[0.4933048197],"iteration":2483,"passed_time":87.78273749,"remaining_time":88.91359401,"test":[0.4952837532]}, +{"learn":[0.4933027931],"iteration":2484,"passed_time":87.81566827,"remaining_time":88.87581719,"test":[0.4952822929]}, +{"learn":[0.4933022269],"iteration":2485,"passed_time":87.85329678,"remaining_time":88.84279489,"test":[0.4952818161]}, +{"learn":[0.4933016904],"iteration":2486,"passed_time":87.89135441,"remaining_time":88.8102025,"test":[0.4952814585]}, +{"learn":[0.4933010944],"iteration":2487,"passed_time":87.92919183,"remaining_time":88.77738339,"test":[0.4952810114]}, +{"learn":[0.4932997533],"iteration":2488,"passed_time":87.96540401,"remaining_time":88.74292064,"test":[0.495280177]}, +{"learn":[0.493298889],"iteration":2489,"passed_time":88.00348332,"remaining_time":88.71033861,"test":[0.4952794021]}, +{"learn":[0.4932970413],"iteration":2490,"passed_time":88.03919635,"remaining_time":88.67536878,"test":[0.4952778524]}, +{"learn":[0.4932959982],"iteration":2491,"passed_time":88.07687201,"remaining_time":88.6423736,"test":[0.4952771967]}, +{"learn":[0.4932946571],"iteration":2492,"passed_time":88.11146686,"remaining_time":88.60627655,"test":[0.4952758556]}, +{"learn":[0.4932928689],"iteration":2493,"passed_time":88.14750026,"remaining_time":88.57162616,"test":[0.4952745443]}, +{"learn":[0.4932915874],"iteration":2494,"passed_time":88.18363081,"remaining_time":88.53707222,"test":[0.4952735907]}, +{"learn":[0.4932897993],"iteration":2495,"passed_time":88.22069133,"remaining_time":88.50344995,"test":[0.4952723092]}, +{"learn":[0.4932891138],"iteration":2496,"passed_time":88.25781189,"remaining_time":88.46988512,"test":[0.4952716833]}, +{"learn":[0.4932877131],"iteration":2497,"passed_time":88.29515561,"remaining_time":88.43654097,"test":[0.49527067]}, +{"learn":[0.4932871469],"iteration":2498,"passed_time":88.33219169,"remaining_time":88.40288572,"test":[0.4952702528]}, +{"learn":[0.4932856568],"iteration":2499,"passed_time":88.36744821,"remaining_time":88.36744821,"test":[0.4952694183]}, +{"learn":[0.4932845243],"iteration":2500,"passed_time":88.40401,"remaining_time":88.33331507,"test":[0.4952687627]}, +{"learn":[0.4932838984],"iteration":2501,"passed_time":88.44285234,"remaining_time":88.30145689,"test":[0.4952683156]}, +{"learn":[0.4932832726],"iteration":2502,"passed_time":88.48084879,"remaining_time":88.26874927,"test":[0.4952679282]}, +{"learn":[0.4932821103],"iteration":2503,"passed_time":88.51796301,"remaining_time":88.23515802,"test":[0.4952670937]}, +{"learn":[0.4932812162],"iteration":2504,"passed_time":88.55376261,"remaining_time":88.20025457,"test":[0.4952663189]}, +{"learn":[0.4932800837],"iteration":2505,"passed_time":88.59047536,"remaining_time":88.16625919,"test":[0.4952656036]}, +{"learn":[0.4932790109],"iteration":2506,"passed_time":88.62946759,"remaining_time":88.1345284,"test":[0.4952646798]}, +{"learn":[0.4932751068],"iteration":2507,"passed_time":88.66317928,"remaining_time":88.09754496,"test":[0.4952614313]}, +{"learn":[0.4932743617],"iteration":2508,"passed_time":88.7009482,"remaining_time":88.06459225,"test":[0.4952608353]}, +{"learn":[0.4932731696],"iteration":2509,"passed_time":88.73757057,"remaining_time":88.0304983,"test":[0.495259971]}, +{"learn":[0.4932720073],"iteration":2510,"passed_time":88.77356819,"remaining_time":87.99578305,"test":[0.4952592855]}, +{"learn":[0.4932714113],"iteration":2511,"passed_time":88.81176762,"remaining_time":87.96324754,"test":[0.4952588683]}, +{"learn":[0.4932703086],"iteration":2512,"passed_time":88.84887568,"remaining_time":87.92962747,"test":[0.4952581232]}, +{"learn":[0.4932672985],"iteration":2513,"passed_time":88.88168251,"remaining_time":87.89175128,"test":[0.4952558881]}, +{"learn":[0.4932667621],"iteration":2514,"passed_time":88.918734,"remaining_time":87.85807315,"test":[0.4952554708]}, +{"learn":[0.4932647654],"iteration":2515,"passed_time":88.95423879,"remaining_time":87.82286532,"test":[0.4952539509]}, +{"learn":[0.4932637521],"iteration":2516,"passed_time":88.9914287,"remaining_time":87.78931961,"test":[0.4952530867]}, +{"learn":[0.493262262],"iteration":2517,"passed_time":89.02772091,"remaining_time":87.75488614,"test":[0.4952518648]}, +{"learn":[0.4932603248],"iteration":2518,"passed_time":89.06480218,"remaining_time":87.72122834,"test":[0.4952502554]}, +{"learn":[0.4932589241],"iteration":2519,"passed_time":89.10077974,"remaining_time":87.68648165,"test":[0.4952493614]}, +{"learn":[0.4932579704],"iteration":2520,"passed_time":89.13650122,"remaining_time":87.65148216,"test":[0.4952486759]}, +{"learn":[0.4932567485],"iteration":2521,"passed_time":89.17403701,"remaining_time":87.61826475,"test":[0.4952477818]}, +{"learn":[0.4932561823],"iteration":2522,"passed_time":89.21153113,"remaining_time":87.58500302,"test":[0.4952473646]}, +{"learn":[0.4932540663],"iteration":2523,"passed_time":89.24577889,"remaining_time":87.5485533,"test":[0.4952457851]}, +{"learn":[0.493252457],"iteration":2524,"passed_time":89.27982775,"remaining_time":87.51191037,"test":[0.495244444]}, +{"learn":[0.4932518609],"iteration":2525,"passed_time":89.31707911,"remaining_time":87.47840607,"test":[0.4952438479]}, +{"learn":[0.4932509073],"iteration":2526,"passed_time":89.35283709,"remaining_time":87.44343732,"test":[0.4952432519]}, +{"learn":[0.493247331],"iteration":2527,"passed_time":89.38598481,"remaining_time":87.40591553,"test":[0.4952402419]}, +{"learn":[0.4932466753],"iteration":2528,"passed_time":89.42318511,"remaining_time":87.37235682,"test":[0.495239765]}, +{"learn":[0.4932453342],"iteration":2529,"passed_time":89.45963167,"remaining_time":87.33805938,"test":[0.4952389008]}, +{"learn":[0.4932440527],"iteration":2530,"passed_time":89.49535069,"remaining_time":87.30305051,"test":[0.4952377981]}, +{"learn":[0.4932434865],"iteration":2531,"passed_time":89.53235876,"remaining_time":87.26929756,"test":[0.4952372616]}, +{"learn":[0.4932424136],"iteration":2532,"passed_time":89.56862246,"remaining_time":87.23481706,"test":[0.495236606]}, +{"learn":[0.4932409831],"iteration":2533,"passed_time":89.60449675,"remaining_time":87.19995619,"test":[0.4952356225]}, +{"learn":[0.4932403871],"iteration":2534,"passed_time":89.64307185,"remaining_time":87.16772076,"test":[0.4952352351]}, +{"learn":[0.4932394334],"iteration":2535,"passed_time":89.68002033,"remaining_time":87.13389988,"test":[0.4952345198]}, +{"learn":[0.4932390161],"iteration":2536,"passed_time":89.71906193,"remaining_time":87.1021086,"test":[0.4952341324]}, +{"learn":[0.4932376452],"iteration":2537,"passed_time":89.75454337,"remaining_time":87.06685807,"test":[0.4952330595]}, +{"learn":[0.4932371088],"iteration":2538,"passed_time":89.79159281,"remaining_time":87.03312718,"test":[0.4952326721]}, +{"learn":[0.4932362743],"iteration":2539,"passed_time":89.82868076,"remaining_time":86.99943097,"test":[0.4952318674]}, +{"learn":[0.4932350524],"iteration":2540,"passed_time":89.86556217,"remaining_time":86.96553222,"test":[0.4952308541]}, +{"learn":[0.4932334431],"iteration":2541,"passed_time":89.90115895,"remaining_time":86.93038895,"test":[0.4952294832]}, +{"learn":[0.4932324894],"iteration":2542,"passed_time":89.93652507,"remaining_time":86.89502245,"test":[0.4952288574]}, +{"learn":[0.4932319232],"iteration":2543,"passed_time":89.97447318,"remaining_time":86.86214863,"test":[0.4952283507]}, +{"learn":[0.4932312973],"iteration":2544,"passed_time":90.01255976,"remaining_time":86.82940441,"test":[0.4952279931]}, +{"learn":[0.4932300158],"iteration":2545,"passed_time":90.04738751,"remaining_time":86.79351491,"test":[0.4952269798]}, +{"learn":[0.4932289728],"iteration":2546,"passed_time":90.08241659,"remaining_time":86.75782014,"test":[0.4952263242]}, +{"learn":[0.4932281085],"iteration":2547,"passed_time":90.12068383,"remaining_time":86.72524205,"test":[0.4952256685]}, +{"learn":[0.4932269462],"iteration":2548,"passed_time":90.15724745,"remaining_time":86.69102138,"test":[0.4952249831]}, +{"learn":[0.4932251283],"iteration":2549,"passed_time":90.19181334,"remaining_time":86.65487948,"test":[0.4952233737]}, +{"learn":[0.493223966],"iteration":2550,"passed_time":90.2271376,"remaining_time":86.61946687,"test":[0.4952227181]}, +{"learn":[0.4932234295],"iteration":2551,"passed_time":90.26539193,"remaining_time":86.58686499,"test":[0.4952221518]}, +{"learn":[0.4932227739],"iteration":2552,"passed_time":90.30457058,"remaining_time":86.55514462,"test":[0.4952217942]}, +{"learn":[0.493221701],"iteration":2553,"passed_time":90.34055423,"remaining_time":86.52035851,"test":[0.4952210492]}, +{"learn":[0.4932212838],"iteration":2554,"passed_time":90.37770476,"remaining_time":86.48668811,"test":[0.4952206617]}, +{"learn":[0.493219734],"iteration":2555,"passed_time":90.41264801,"remaining_time":86.45090444,"test":[0.4952198869]}, +{"learn":[0.4932180055],"iteration":2556,"passed_time":90.44729341,"remaining_time":86.41483684,"test":[0.4952185756]}, +{"learn":[0.4932173201],"iteration":2557,"passed_time":90.48425832,"remaining_time":86.38098468,"test":[0.4952177411]}, +{"learn":[0.493216128],"iteration":2558,"passed_time":90.52036498,"remaining_time":86.34631142,"test":[0.4952171451]}, +{"learn":[0.4932149955],"iteration":2559,"passed_time":90.55607779,"remaining_time":86.31126164,"test":[0.495216102]}, +{"learn":[0.4932143994],"iteration":2560,"passed_time":90.59391739,"remaining_time":86.27823683,"test":[0.4952156251]}, +{"learn":[0.4932129391],"iteration":2561,"passed_time":90.62809766,"remaining_time":86.24172603,"test":[0.4952143436]}, +{"learn":[0.4932109126],"iteration":2562,"passed_time":90.66297051,"remaining_time":86.20587559,"test":[0.4952128833]}, +{"learn":[0.4932095715],"iteration":2563,"passed_time":90.69903884,"remaining_time":86.17116171,"test":[0.4952123469]}, +{"learn":[0.4932078429],"iteration":2564,"passed_time":90.73562256,"remaining_time":86.13693604,"test":[0.4952113336]}, +{"learn":[0.493206621],"iteration":2565,"passed_time":90.7707672,"remaining_time":86.10134348,"test":[0.4952105289]}, +{"learn":[0.4932060548],"iteration":2566,"passed_time":90.80813445,"remaining_time":86.06785785,"test":[0.4952100521]}, +{"learn":[0.4932055183],"iteration":2567,"passed_time":90.8454149,"remaining_time":86.03428701,"test":[0.4952096349]}, +{"learn":[0.4932049521],"iteration":2568,"passed_time":90.88255211,"remaining_time":86.00057772,"test":[0.4952092176]}, +{"learn":[0.4932038792],"iteration":2569,"passed_time":90.91708949,"remaining_time":85.96440757,"test":[0.4952085918]}, +{"learn":[0.4932031938],"iteration":2570,"passed_time":90.95346113,"remaining_time":85.92997164,"test":[0.4952080554]}, +{"learn":[0.493200601],"iteration":2571,"passed_time":90.98806202,"remaining_time":85.89386259,"test":[0.4952061182]}, +{"learn":[0.4932000347],"iteration":2572,"passed_time":91.02381135,"remaining_time":85.85883799,"test":[0.4952057606]}, +{"learn":[0.4931988724],"iteration":2573,"passed_time":91.06110894,"remaining_time":85.82527207,"test":[0.4952050155]}, +{"learn":[0.493198038],"iteration":2574,"passed_time":91.09712631,"remaining_time":85.79049759,"test":[0.4952042109]}, +{"learn":[0.4931970247],"iteration":2575,"passed_time":91.13335251,"remaining_time":85.75591867,"test":[0.4952032274]}, +{"learn":[0.493196071],"iteration":2576,"passed_time":91.16906223,"remaining_time":85.72085285,"test":[0.4952023929]}, +{"learn":[0.4931949087],"iteration":2577,"passed_time":91.20618356,"remaining_time":85.68711272,"test":[0.4952014988]}, +{"learn":[0.4931944319],"iteration":2578,"passed_time":91.24547285,"remaining_time":85.65540511,"test":[0.4952009922]}, +{"learn":[0.4931929418],"iteration":2579,"passed_time":91.28136434,"remaining_time":85.62050454,"test":[0.4951998895]}, +{"learn":[0.4931916901],"iteration":2580,"passed_time":91.31643626,"remaining_time":85.58483507,"test":[0.4951990849]}, +{"learn":[0.4931905874],"iteration":2581,"passed_time":91.35346757,"remaining_time":85.551001,"test":[0.495198161]}, +{"learn":[0.4931900509],"iteration":2582,"passed_time":91.39139624,"remaining_time":85.51800415,"test":[0.4951976543]}, +{"learn":[0.493188531],"iteration":2583,"passed_time":91.42688516,"remaining_time":85.48272234,"test":[0.4951964623]}, +{"learn":[0.4931875177],"iteration":2584,"passed_time":91.46311735,"remaining_time":85.44813477,"test":[0.4951955682]}, +{"learn":[0.4931868025],"iteration":2585,"passed_time":91.50070297,"remaining_time":85.41480934,"test":[0.4951950615]}, +{"learn":[0.493185968],"iteration":2586,"passed_time":91.53711564,"remaining_time":85.38038656,"test":[0.4951942569]}, +{"learn":[0.4931842395],"iteration":2587,"passed_time":91.57219398,"remaining_time":85.34471865,"test":[0.4951928562]}, +{"learn":[0.4931831368],"iteration":2588,"passed_time":91.60810504,"remaining_time":85.30982667,"test":[0.4951919919]}, +{"learn":[0.4931821533],"iteration":2589,"passed_time":91.64402479,"remaining_time":85.27494199,"test":[0.4951913661]}, +{"learn":[0.4931810208],"iteration":2590,"passed_time":91.67963074,"remaining_time":85.23976474,"test":[0.4951905018]}, +{"learn":[0.4931804248],"iteration":2591,"passed_time":91.71663627,"remaining_time":85.2058874,"test":[0.4951900249]}, +{"learn":[0.4931794115],"iteration":2592,"passed_time":91.75212031,"remaining_time":85.17059529,"test":[0.4951892799]}, +{"learn":[0.4931771465],"iteration":2593,"passed_time":91.78687206,"remaining_time":85.13462382,"test":[0.4951873725]}, +{"learn":[0.4931758352],"iteration":2594,"passed_time":91.82273488,"remaining_time":85.099683,"test":[0.4951864785]}, +{"learn":[0.493175269],"iteration":2595,"passed_time":91.8599573,"remaining_time":85.06600052,"test":[0.4951860612]}, +{"learn":[0.4931741365],"iteration":2596,"passed_time":91.89662204,"remaining_time":85.03179929,"test":[0.4951851374]}, +{"learn":[0.4931726166],"iteration":2597,"passed_time":91.93218616,"remaining_time":84.99657858,"test":[0.4951846009]}, +{"learn":[0.4931717821],"iteration":2598,"passed_time":91.96933129,"remaining_time":84.96281817,"test":[0.4951841837]}, +{"learn":[0.4931712457],"iteration":2599,"passed_time":92.00748534,"remaining_time":84.92998646,"test":[0.4951837963]}, +{"learn":[0.4931701728],"iteration":2600,"passed_time":92.04409262,"remaining_time":84.89572403,"test":[0.495182932]}, +{"learn":[0.4931692191],"iteration":2601,"passed_time":92.08103848,"remaining_time":84.86177182,"test":[0.4951820677]}, +{"learn":[0.4931682356],"iteration":2602,"passed_time":92.11845219,"remaining_time":84.82824814,"test":[0.4951812333]}, +{"learn":[0.4931670137],"iteration":2603,"passed_time":92.15605456,"remaining_time":84.79489505,"test":[0.4951803094]}, +{"learn":[0.4931660005],"iteration":2604,"passed_time":92.19234994,"remaining_time":84.76033709,"test":[0.4951796835]}, +{"learn":[0.4931638547],"iteration":2605,"passed_time":92.22719743,"remaining_time":84.72444768,"test":[0.4951778358]}, +{"learn":[0.493163199],"iteration":2606,"passed_time":92.26451665,"remaining_time":84.6908279,"test":[0.4951772994]}, +{"learn":[0.4931620666],"iteration":2607,"passed_time":92.30066866,"remaining_time":84.65613475,"test":[0.4951765841]}, +{"learn":[0.4931613513],"iteration":2608,"passed_time":92.33627611,"remaining_time":84.62094142,"test":[0.4951759583]}, +{"learn":[0.493160636],"iteration":2609,"passed_time":92.37373129,"remaining_time":84.58743976,"test":[0.4951756006]}, +{"learn":[0.4931584605],"iteration":2610,"passed_time":92.40849661,"remaining_time":84.55147392,"test":[0.4951740807]}, +{"learn":[0.4931574174],"iteration":2611,"passed_time":92.44382559,"remaining_time":84.51602432,"test":[0.4951731568]}, +{"learn":[0.4931555399],"iteration":2612,"passed_time":92.47998923,"remaining_time":84.48133728,"test":[0.4951715773]}, +{"learn":[0.4931550332],"iteration":2613,"passed_time":92.51739765,"remaining_time":84.44778531,"test":[0.4951711601]}, +{"learn":[0.4931539901],"iteration":2614,"passed_time":92.55291532,"remaining_time":84.41250594,"test":[0.4951703554]}, +{"learn":[0.4931531259],"iteration":2615,"passed_time":92.5896986,"remaining_time":84.37837977,"test":[0.495169521]}, +{"learn":[0.4931518444],"iteration":2616,"passed_time":92.62601037,"remaining_time":84.34382221,"test":[0.4951686269]}, +{"learn":[0.4931501456],"iteration":2617,"passed_time":92.66094816,"remaining_time":84.30801318,"test":[0.4951673156]}, +{"learn":[0.4931494602],"iteration":2618,"passed_time":92.6976707,"remaining_time":84.27382739,"test":[0.4951668685]}, +{"learn":[0.493146778],"iteration":2619,"passed_time":92.73162613,"remaining_time":84.23712602,"test":[0.4951649314]}, +{"learn":[0.4931445428],"iteration":2620,"passed_time":92.76620879,"remaining_time":84.20099607,"test":[0.4951631135]}, +{"learn":[0.4931434401],"iteration":2621,"passed_time":92.80189034,"remaining_time":84.16586393,"test":[0.4951623088]}, +{"learn":[0.4931428143],"iteration":2622,"passed_time":92.83914821,"remaining_time":84.13215985,"test":[0.4951618618]}, +{"learn":[0.493141503],"iteration":2623,"passed_time":92.87788819,"remaining_time":84.0997951,"test":[0.4951610869]}, +{"learn":[0.4931401619],"iteration":2624,"passed_time":92.91299933,"remaining_time":84.06414226,"test":[0.4951602524]}, +{"learn":[0.4931383439],"iteration":2625,"passed_time":92.94855593,"remaining_time":84.02889253,"test":[0.4951586729]}, +{"learn":[0.4931361385],"iteration":2626,"passed_time":92.98369738,"remaining_time":83.99326756,"test":[0.4951570636]}, +{"learn":[0.4931353637],"iteration":2627,"passed_time":93.021097,"remaining_time":83.95968116,"test":[0.4951566762]}, +{"learn":[0.4931349763],"iteration":2628,"passed_time":93.05904885,"remaining_time":83.92658989,"test":[0.4951562887]}, +{"learn":[0.4931336948],"iteration":2629,"passed_time":93.09678118,"remaining_time":83.89329711,"test":[0.4951552754]}, +{"learn":[0.4931330391],"iteration":2630,"passed_time":93.13435748,"remaining_time":83.85986046,"test":[0.4951549774]}, +{"learn":[0.4931325623],"iteration":2631,"passed_time":93.17110814,"remaining_time":83.82567784,"test":[0.4951545602]}, +{"learn":[0.4931313106],"iteration":2632,"passed_time":93.20733162,"remaining_time":83.79101934,"test":[0.4951537257]}, +{"learn":[0.4931307741],"iteration":2633,"passed_time":93.2442149,"remaining_time":83.75695234,"test":[0.4951533979]}, +{"learn":[0.4931296714],"iteration":2634,"passed_time":93.27965683,"remaining_time":83.72158953,"test":[0.4951526826]}, +{"learn":[0.4931283303],"iteration":2635,"passed_time":93.31703953,"remaining_time":83.68796717,"test":[0.4951517588]}, +{"learn":[0.4931274065],"iteration":2636,"passed_time":93.3523186,"remaining_time":83.65245691,"test":[0.4951511627]}, +{"learn":[0.4931269594],"iteration":2637,"passed_time":93.3916999,"remaining_time":83.62061985,"test":[0.4951508051]}, +{"learn":[0.4931244858],"iteration":2638,"passed_time":93.42725886,"remaining_time":83.58535739,"test":[0.4951485699]}, +{"learn":[0.4931229063],"iteration":2639,"passed_time":93.46254845,"remaining_time":83.54985391,"test":[0.4951473182]}, +{"learn":[0.4931216546],"iteration":2640,"passed_time":93.49660355,"remaining_time":83.51324793,"test":[0.4951465136]}, +{"learn":[0.4931189426],"iteration":2641,"passed_time":93.53049479,"remaining_time":83.47649762,"test":[0.4951445764]}, +{"learn":[0.4931172737],"iteration":2642,"passed_time":93.56458689,"remaining_time":83.4399286,"test":[0.4951431757]}, +{"learn":[0.4931162306],"iteration":2643,"passed_time":93.60141842,"remaining_time":83.4058025,"test":[0.4951421624]}, +{"learn":[0.4931155749],"iteration":2644,"passed_time":93.63952104,"remaining_time":83.37280607,"test":[0.4951418048]}, +{"learn":[0.4931146213],"iteration":2645,"passed_time":93.67545148,"remaining_time":83.33787331,"test":[0.4951408511]}, +{"learn":[0.493111194],"iteration":2646,"passed_time":93.71093209,"remaining_time":83.30253993,"test":[0.4951379305]}, +{"learn":[0.4931103893],"iteration":2647,"passed_time":93.76354224,"remaining_time":83.28242121,"test":[0.4951375133]}, +{"learn":[0.493109078],"iteration":2648,"passed_time":93.8017781,"remaining_time":83.24952069,"test":[0.4951364702]}, +{"learn":[0.4931083926],"iteration":2649,"passed_time":93.84006278,"remaining_time":83.21665944,"test":[0.4951360529]}, +{"learn":[0.4931077071],"iteration":2650,"passed_time":93.87753133,"remaining_time":83.18307095,"test":[0.4951356357]}, +{"learn":[0.4931069621],"iteration":2651,"passed_time":93.9134131,"remaining_time":83.14807464,"test":[0.4951349801]}, +{"learn":[0.4931063958],"iteration":2652,"passed_time":93.95088295,"remaining_time":83.11448258,"test":[0.495134533]}, +{"learn":[0.4931058296],"iteration":2653,"passed_time":93.98883273,"remaining_time":83.08131183,"test":[0.4951340562]}, +{"learn":[0.4931052335],"iteration":2654,"passed_time":94.02683884,"remaining_time":83.04818722,"test":[0.4951336092]}, +{"learn":[0.4931042501],"iteration":2655,"passed_time":94.06385981,"remaining_time":83.01418953,"test":[0.4951328045]}, +{"learn":[0.4931024917],"iteration":2656,"passed_time":94.10061237,"remaining_time":82.97995287,"test":[0.495131672]}, +{"learn":[0.4931006142],"iteration":2657,"passed_time":94.13643485,"remaining_time":82.94489482,"test":[0.4951303011]}, +{"learn":[0.4930996009],"iteration":2658,"passed_time":94.171588,"remaining_time":82.9092469,"test":[0.4951296753]}, +{"learn":[0.493098826],"iteration":2659,"passed_time":94.20919752,"remaining_time":82.87576022,"test":[0.495129109]}, +{"learn":[0.4930971273],"iteration":2660,"passed_time":94.244314,"remaining_time":82.84007908,"test":[0.4951278275]}, +{"learn":[0.4930960544],"iteration":2661,"passed_time":94.28017638,"remaining_time":82.80505348,"test":[0.4951272911]}, +{"learn":[0.4930954286],"iteration":2662,"passed_time":94.3186164,"remaining_time":82.77228935,"test":[0.4951269036]}, +{"learn":[0.4930948325],"iteration":2663,"passed_time":94.35746963,"remaining_time":82.73988328,"test":[0.4951264268]}, +{"learn":[0.4930943259],"iteration":2664,"passed_time":94.39522085,"remaining_time":82.70650683,"test":[0.4951259202]}, +{"learn":[0.4930934914],"iteration":2665,"passed_time":94.43199979,"remaining_time":82.67227589,"test":[0.4951252645]}, +{"learn":[0.493092806],"iteration":2666,"passed_time":94.46756421,"remaining_time":82.63698061,"test":[0.4951246685]}, +{"learn":[0.4930914053],"iteration":2667,"passed_time":94.50442437,"remaining_time":82.6028177,"test":[0.4951237446]}, +{"learn":[0.4930905112],"iteration":2668,"passed_time":94.54248138,"remaining_time":82.56969805,"test":[0.4951229101]}, +{"learn":[0.4930850872],"iteration":2669,"passed_time":94.57646869,"remaining_time":82.53302324,"test":[0.4951186782]}, +{"learn":[0.4930839249],"iteration":2670,"passed_time":94.61130611,"remaining_time":82.4970917,"test":[0.4951180225]}, +{"learn":[0.4930827626],"iteration":2671,"passed_time":94.64686078,"remaining_time":82.46178589,"test":[0.4951172179]}, +{"learn":[0.4930790373],"iteration":2672,"passed_time":94.68142487,"remaining_time":82.42561753,"test":[0.4951143569]}, +{"learn":[0.4930776962],"iteration":2673,"passed_time":94.71772279,"remaining_time":82.39095857,"test":[0.4951137608]}, +{"learn":[0.4930771001],"iteration":2674,"passed_time":94.75638159,"remaining_time":82.35835036,"test":[0.4951133436]}, +{"learn":[0.4930759677],"iteration":2675,"passed_time":94.79340125,"remaining_time":82.32431409,"test":[0.4951123303]}, +{"learn":[0.4930746266],"iteration":2676,"passed_time":94.83007191,"remaining_time":82.28997275,"test":[0.4951118237]}, +{"learn":[0.4930734941],"iteration":2677,"passed_time":94.866452,"remaining_time":82.25537772,"test":[0.495111019]}, +{"learn":[0.4930726298],"iteration":2678,"passed_time":94.90240541,"remaining_time":82.2204117,"test":[0.4951102441]}, +{"learn":[0.4930712589],"iteration":2679,"passed_time":94.93859845,"remaining_time":82.18565239,"test":[0.495109052]}, +{"learn":[0.4930703648],"iteration":2680,"passed_time":94.97628079,"remaining_time":82.15218021,"test":[0.4951082176]}, +{"learn":[0.4930694112],"iteration":2681,"passed_time":95.01277082,"remaining_time":82.1176744,"test":[0.4951075917]}, +{"learn":[0.4930676826],"iteration":2682,"passed_time":95.04911373,"remaining_time":82.08304007,"test":[0.4951063102]}, +{"learn":[0.4930666991],"iteration":2683,"passed_time":95.08669308,"remaining_time":82.04947137,"test":[0.4951053566]}, +{"learn":[0.4930657157],"iteration":2684,"passed_time":95.12268555,"remaining_time":82.01453149,"test":[0.4951045221]}, +{"learn":[0.4930636593],"iteration":2685,"passed_time":95.15828027,"remaining_time":81.97924815,"test":[0.49510333]}, +{"learn":[0.4930630633],"iteration":2686,"passed_time":95.19750063,"remaining_time":81.94708558,"test":[0.4951029724]}, +{"learn":[0.4930624374],"iteration":2687,"passed_time":95.23570617,"remaining_time":81.91404489,"test":[0.4951024955]}, +{"learn":[0.4930589207],"iteration":2688,"passed_time":95.26997881,"remaining_time":81.87762031,"test":[0.4950997239]}, +{"learn":[0.4930576988],"iteration":2689,"passed_time":95.30700663,"remaining_time":81.84356332,"test":[0.4950987404]}, +{"learn":[0.4930559107],"iteration":2690,"passed_time":95.34210087,"remaining_time":81.807845,"test":[0.4950975484]}, +{"learn":[0.4930540332],"iteration":2691,"passed_time":95.3768343,"remaining_time":81.77181782,"test":[0.4950959688]}, +{"learn":[0.4930534371],"iteration":2692,"passed_time":95.41554723,"remaining_time":81.73920069,"test":[0.495095343]}, +{"learn":[0.4930523642],"iteration":2693,"passed_time":95.45128884,"remaining_time":81.70403566,"test":[0.4950945979]}, +{"learn":[0.4930517682],"iteration":2694,"passed_time":95.48987415,"remaining_time":81.67130238,"test":[0.4950941211]}, +{"learn":[0.493044854],"iteration":2695,"passed_time":95.52322346,"remaining_time":81.63409008,"test":[0.495088399]}, +{"learn":[0.493044109],"iteration":2696,"passed_time":95.56064759,"remaining_time":81.60036018,"test":[0.4950879222]}, +{"learn":[0.4930429169],"iteration":2697,"passed_time":95.59782389,"remaining_time":81.56641608,"test":[0.4950869983]}, +{"learn":[0.4930422612],"iteration":2698,"passed_time":95.63386949,"remaining_time":81.53150563,"test":[0.4950862831]}, +{"learn":[0.4930415758],"iteration":2699,"passed_time":95.67250912,"remaining_time":81.49880406,"test":[0.4950858658]}, +{"learn":[0.4930409499],"iteration":2700,"passed_time":95.70951592,"remaining_time":81.46470829,"test":[0.4950851506]}, +{"learn":[0.4930399069],"iteration":2701,"passed_time":95.74730486,"remaining_time":81.43127556,"test":[0.4950842863]}, +{"learn":[0.4930382975],"iteration":2702,"passed_time":95.78341135,"remaining_time":81.39640986,"test":[0.4950829154]}, +{"learn":[0.4930378207],"iteration":2703,"passed_time":95.82124815,"remaining_time":81.36301248,"test":[0.495082528]}, +{"learn":[0.4930366584],"iteration":2704,"passed_time":95.85727416,"remaining_time":81.32807549,"test":[0.4950816637]}, +{"learn":[0.4930357345],"iteration":2705,"passed_time":95.89434228,"remaining_time":81.29402113,"test":[0.4950809783]}, +{"learn":[0.4930351087],"iteration":2706,"passed_time":95.93211312,"remaining_time":81.2605598,"test":[0.495080561]}, +{"learn":[0.4930341252],"iteration":2707,"passed_time":95.96899426,"remaining_time":81.22634226,"test":[0.4950799948]}, +{"learn":[0.4930323371],"iteration":2708,"passed_time":96.00571776,"remaining_time":81.19198944,"test":[0.4950785941]}, +{"learn":[0.4930314132],"iteration":2709,"passed_time":96.04403235,"remaining_time":81.15897936,"test":[0.4950781768]}, +{"learn":[0.4930309364],"iteration":2710,"passed_time":96.08234479,"remaining_time":81.12596357,"test":[0.4950776404]}, +{"learn":[0.4930299827],"iteration":2711,"passed_time":96.11931696,"remaining_time":81.09181313,"test":[0.4950769251]}, +{"learn":[0.4930285522],"iteration":2712,"passed_time":96.15510155,"remaining_time":81.05665951,"test":[0.4950760311]}, +{"learn":[0.4930281051],"iteration":2713,"passed_time":96.19353426,"remaining_time":81.02373593,"test":[0.4950756436]}, +{"learn":[0.493026913],"iteration":2714,"passed_time":96.22965183,"remaining_time":80.98885983,"test":[0.4950747198]}, +{"learn":[0.493025721],"iteration":2715,"passed_time":96.26567212,"remaining_time":80.953901,"test":[0.4950741237]}, +{"learn":[0.4930245587],"iteration":2716,"passed_time":96.30221377,"remaining_time":80.91937948,"test":[0.4950733489]}, +{"learn":[0.4930237838],"iteration":2717,"passed_time":96.33790872,"remaining_time":80.88414559,"test":[0.4950729018]}, +{"learn":[0.4930232176],"iteration":2718,"passed_time":96.37452861,"remaining_time":80.84968729,"test":[0.4950720972]}, +{"learn":[0.4930221447],"iteration":2719,"passed_time":96.40990223,"remaining_time":80.81418275,"test":[0.4950712329]}, +{"learn":[0.4930203565],"iteration":2720,"passed_time":96.44504754,"remaining_time":80.77848708,"test":[0.4950698918]}, +{"learn":[0.4930188366],"iteration":2721,"passed_time":96.48210663,"remaining_time":80.74439343,"test":[0.4950689679]}, +{"learn":[0.4930176147],"iteration":2722,"passed_time":96.51890207,"remaining_time":80.71007712,"test":[0.4950679547]}, +{"learn":[0.4930166014],"iteration":2723,"passed_time":96.55535945,"remaining_time":80.67547655,"test":[0.495067299]}, +{"learn":[0.4930155882],"iteration":2724,"passed_time":96.59159683,"remaining_time":80.64069093,"test":[0.4950664943]}, +{"learn":[0.4930149027],"iteration":2725,"passed_time":96.62962943,"remaining_time":80.60740181,"test":[0.4950661367]}, +{"learn":[0.4930139192],"iteration":2726,"passed_time":96.66660297,"remaining_time":80.57322646,"test":[0.4950653917]}, +{"learn":[0.4930131444],"iteration":2727,"passed_time":96.70486968,"remaining_time":80.54012607,"test":[0.495064885]}, +{"learn":[0.4930120417],"iteration":2728,"passed_time":96.74137442,"remaining_time":80.50555563,"test":[0.4950640505]}, +{"learn":[0.493011237],"iteration":2729,"passed_time":96.77760954,"remaining_time":80.47075958,"test":[0.4950634545]}, +{"learn":[0.4930101045],"iteration":2730,"passed_time":96.81830341,"remaining_time":80.43966695,"test":[0.4950625604]}, +{"learn":[0.493008972],"iteration":2731,"passed_time":96.85650497,"remaining_time":80.40649827,"test":[0.4950619346]}, +{"learn":[0.4930079588],"iteration":2732,"passed_time":96.89270155,"remaining_time":80.37166279,"test":[0.4950611895]}, +{"learn":[0.4930067369],"iteration":2733,"passed_time":96.92911652,"remaining_time":80.33700733,"test":[0.4950603551]}, +{"learn":[0.4930055746],"iteration":2734,"passed_time":96.9651909,"remaining_time":80.30206852,"test":[0.4950594312]}, +{"learn":[0.4930040845],"iteration":2735,"passed_time":96.99997023,"remaining_time":80.26605724,"test":[0.4950582689]}, +{"learn":[0.4930030414],"iteration":2736,"passed_time":97.03665014,"remaining_time":80.23161829,"test":[0.4950575536]}, +{"learn":[0.4930017599],"iteration":2737,"passed_time":97.07251162,"remaining_time":80.19650156,"test":[0.495056749]}, +{"learn":[0.4930009254],"iteration":2738,"passed_time":97.10812723,"remaining_time":80.16118133,"test":[0.4950561231]}, +{"learn":[0.4930002996],"iteration":2739,"passed_time":97.14582583,"remaining_time":80.12757897,"test":[0.4950556463]}, +{"learn":[0.4929994651],"iteration":2740,"passed_time":97.18244832,"remaining_time":80.09308674,"test":[0.4950549608]}, +{"learn":[0.4929988691],"iteration":2741,"passed_time":97.22081694,"remaining_time":80.06003087,"test":[0.4950546032]}, +{"learn":[0.4929978558],"iteration":2742,"passed_time":97.25712527,"remaining_time":80.02527588,"test":[0.4950538284]}, +{"learn":[0.4929972597],"iteration":2743,"passed_time":97.29560679,"remaining_time":79.99230646,"test":[0.4950532621]}, +{"learn":[0.4929965743],"iteration":2744,"passed_time":97.33358911,"remaining_time":79.95892293,"test":[0.4950529045]}, +{"learn":[0.4929956206],"iteration":2745,"passed_time":97.37006508,"remaining_time":79.9242996,"test":[0.4950521594]}, +{"learn":[0.4929948457],"iteration":2746,"passed_time":97.40738365,"remaining_time":79.89036598,"test":[0.4950515634]}, +{"learn":[0.4929936239],"iteration":2747,"passed_time":97.44394967,"remaining_time":79.85581319,"test":[0.4950508481]}, +{"learn":[0.4929925808],"iteration":2748,"passed_time":97.48061528,"remaining_time":79.82134049,"test":[0.4950499541]}, +{"learn":[0.4929921039],"iteration":2749,"passed_time":97.51889555,"remaining_time":79.78818727,"test":[0.4950494474]}, +{"learn":[0.4929915675],"iteration":2750,"passed_time":97.55729212,"remaining_time":79.7551254,"test":[0.4950490302]}, +{"learn":[0.4929905244],"iteration":2751,"passed_time":97.59285555,"remaining_time":79.71974538,"test":[0.4950484937]}, +{"learn":[0.4929893323],"iteration":2752,"passed_time":97.62889629,"remaining_time":79.6847548,"test":[0.4950478381]}, +{"learn":[0.4929887661],"iteration":2753,"passed_time":97.66722179,"remaining_time":79.65162677,"test":[0.4950473314]}, +{"learn":[0.4929875442],"iteration":2754,"passed_time":97.70427117,"remaining_time":79.61745509,"test":[0.4950465864]}, +{"learn":[0.4929861137],"iteration":2755,"passed_time":97.74030665,"remaining_time":79.58245578,"test":[0.4950452453]}, +{"learn":[0.4929856666],"iteration":2756,"passed_time":97.77954577,"remaining_time":79.55006208,"test":[0.495044679]}, +{"learn":[0.4929850408],"iteration":2757,"passed_time":97.82200702,"remaining_time":79.52028272,"test":[0.4950443512]}, +{"learn":[0.4929839977],"iteration":2758,"passed_time":97.85960117,"remaining_time":79.48654086,"test":[0.4950436658]}, +{"learn":[0.4929832228],"iteration":2759,"passed_time":97.89739451,"remaining_time":79.45295787,"test":[0.4950432187]}, +{"learn":[0.4929826566],"iteration":2760,"passed_time":97.94309193,"remaining_time":79.42578154,"test":[0.4950427121]}, +{"learn":[0.4929816135],"iteration":2761,"passed_time":97.98006547,"remaining_time":79.391523,"test":[0.495041967]}, +{"learn":[0.4929805108],"iteration":2762,"passed_time":98.01572648,"remaining_time":79.35619983,"test":[0.4950411624]}, +{"learn":[0.4929796168],"iteration":2763,"passed_time":98.0516987,"remaining_time":79.32112818,"test":[0.4950406557]}, +{"learn":[0.4929786631],"iteration":2764,"passed_time":98.08688687,"remaining_time":79.28542212,"test":[0.4950397319]}, +{"learn":[0.4929770836],"iteration":2765,"passed_time":98.121442,"remaining_time":79.24920514,"test":[0.4950386888]}, +{"learn":[0.4929764279],"iteration":2766,"passed_time":98.15862851,"remaining_time":79.21511292,"test":[0.4950381225]}, +{"learn":[0.4929754444],"iteration":2767,"passed_time":98.19492957,"remaining_time":79.18030448,"test":[0.4950373775]}, +{"learn":[0.4929742821],"iteration":2768,"passed_time":98.23255231,"remaining_time":79.14655984,"test":[0.4950366324]}, +{"learn":[0.4929733583],"iteration":2769,"passed_time":98.27075688,"remaining_time":79.11328081,"test":[0.4950359172]}, +{"learn":[0.492972345],"iteration":2770,"passed_time":98.30835277,"remaining_time":79.0795086,"test":[0.4950353509]}, +{"learn":[0.4929710635],"iteration":2771,"passed_time":98.34504432,"remaining_time":79.04500676,"test":[0.4950342184]}, +{"learn":[0.492967517],"iteration":2772,"passed_time":98.38024779,"remaining_time":79.00930827,"test":[0.495031566]}, +{"learn":[0.4929665335],"iteration":2773,"passed_time":98.41640442,"remaining_time":78.974375,"test":[0.4950309104]}, +{"learn":[0.4929652818],"iteration":2774,"passed_time":98.45276164,"remaining_time":78.93960168,"test":[0.4950300461]}, +{"learn":[0.492964507],"iteration":2775,"passed_time":98.49070775,"remaining_time":78.90610015,"test":[0.495029301]}, +{"learn":[0.4929634937],"iteration":2776,"passed_time":98.52725103,"remaining_time":78.87147247,"test":[0.4950283772]}, +{"learn":[0.4929628381],"iteration":2777,"passed_time":98.56508653,"remaining_time":78.83787699,"test":[0.4950279599]}, +{"learn":[0.4929623016],"iteration":2778,"passed_time":98.60280937,"remaining_time":78.80418841,"test":[0.4950276321]}, +{"learn":[0.4929611691],"iteration":2779,"passed_time":98.63916652,"remaining_time":78.76940636,"test":[0.4950269765]}, +{"learn":[0.4929606625],"iteration":2780,"passed_time":98.67691795,"remaining_time":78.73573568,"test":[0.4950266784]}, +{"learn":[0.4929590234],"iteration":2781,"passed_time":98.71313045,"remaining_time":78.70083513,"test":[0.4950252181]}, +{"learn":[0.4929583379],"iteration":2782,"passed_time":98.75097915,"remaining_time":78.66723707,"test":[0.4950246519]}, +{"learn":[0.4929577419],"iteration":2783,"passed_time":98.7876115,"remaining_time":78.63266778,"test":[0.4950239962]}, +{"learn":[0.4929557153],"iteration":2784,"passed_time":98.82503755,"remaining_time":78.59872825,"test":[0.4950226849]}, +{"learn":[0.4929549106],"iteration":2785,"passed_time":98.8623134,"remaining_time":78.56466686,"test":[0.4950220293]}, +{"learn":[0.4929544338],"iteration":2786,"passed_time":98.90010653,"remaining_time":78.5310139,"test":[0.4950215822]}, +{"learn":[0.4929517516],"iteration":2787,"passed_time":98.93521036,"remaining_time":78.49522429,"test":[0.4950194067]}, +{"learn":[0.4929511257],"iteration":2788,"passed_time":98.97359819,"remaining_time":78.46203858,"test":[0.4950190192]}, +{"learn":[0.4929502913],"iteration":2789,"passed_time":99.01132902,"remaining_time":78.42832872,"test":[0.4950183636]}, +{"learn":[0.492949725],"iteration":2790,"passed_time":99.04972762,"remaining_time":78.3951445,"test":[0.4950181252]}, +{"learn":[0.4929483541],"iteration":2791,"passed_time":99.08721483,"remaining_time":78.36123579,"test":[0.4950172311]}, +{"learn":[0.4929472812],"iteration":2792,"passed_time":99.12395143,"remaining_time":78.3267314,"test":[0.4950163966]}, +{"learn":[0.492946566],"iteration":2793,"passed_time":99.1610149,"remaining_time":78.29248349,"test":[0.4950159496]}, +{"learn":[0.4929454633],"iteration":2794,"passed_time":99.1969394,"remaining_time":78.25733502,"test":[0.4950152343]}, +{"learn":[0.4929445692],"iteration":2795,"passed_time":99.23285799,"remaining_time":78.22218134,"test":[0.4950146383]}, +{"learn":[0.4929437348],"iteration":2796,"passed_time":99.26935831,"remaining_time":78.18748529,"test":[0.4950137144]}, +{"learn":[0.4929426917],"iteration":2797,"passed_time":99.30551316,"remaining_time":78.15251607,"test":[0.4950132972]}, +{"learn":[0.4929421254],"iteration":2798,"passed_time":99.34357489,"remaining_time":78.1190455,"test":[0.4950128204]}, +{"learn":[0.492940993],"iteration":2799,"passed_time":99.38136113,"remaining_time":78.08535517,"test":[0.4950118369]}, +{"learn":[0.4929405161],"iteration":2800,"passed_time":99.41931681,"remaining_time":78.05179495,"test":[0.4950114197]}, +{"learn":[0.4929400393],"iteration":2801,"passed_time":99.45835244,"remaining_time":78.01907875,"test":[0.495011062]}, +{"learn":[0.492939175],"iteration":2802,"passed_time":99.49536207,"remaining_time":77.98477005,"test":[0.4950104362]}, +{"learn":[0.4929369994],"iteration":2803,"passed_time":99.53125444,"remaining_time":77.94958443,"test":[0.495008648]}, +{"learn":[0.4929358968],"iteration":2804,"passed_time":99.56677756,"remaining_time":77.91410935,"test":[0.4950079328]}, +{"learn":[0.4929351517],"iteration":2805,"passed_time":99.60628012,"remaining_time":77.88174575,"test":[0.4950074857]}, +{"learn":[0.4929340192],"iteration":2806,"passed_time":99.64318255,"remaining_time":77.84734569,"test":[0.4950068003]}, +{"learn":[0.4929332742],"iteration":2807,"passed_time":99.67968914,"remaining_time":77.81263483,"test":[0.4950061744]}, +{"learn":[0.4929327079],"iteration":2808,"passed_time":99.71794871,"remaining_time":77.77929001,"test":[0.4950056082]}, +{"learn":[0.4929321715],"iteration":2809,"passed_time":99.75637979,"remaining_time":77.74607535,"test":[0.4950050122]}, +{"learn":[0.4929315456],"iteration":2810,"passed_time":99.79386196,"remaining_time":77.71211804,"test":[0.4950043863]}, +{"learn":[0.4929308602],"iteration":2811,"passed_time":99.83222188,"remaining_time":77.67884121,"test":[0.4950040585]}, +{"learn":[0.4929301449],"iteration":2812,"passed_time":99.87075385,"remaining_time":77.64569451,"test":[0.4950036114]}, +{"learn":[0.4929260918],"iteration":2813,"passed_time":99.90641446,"remaining_time":77.61031344,"test":[0.4950008994]}, +{"learn":[0.4929247805],"iteration":2814,"passed_time":99.94243158,"remaining_time":77.57520889,"test":[0.4950003034]}, +{"learn":[0.4929240354],"iteration":2815,"passed_time":99.97855645,"remaining_time":77.54018725,"test":[0.4949995285]}, +{"learn":[0.492923052],"iteration":2816,"passed_time":100.0156642,"remaining_time":77.50592648,"test":[0.4949988729]}, +{"learn":[0.4929220685],"iteration":2817,"passed_time":100.0528959,"remaining_time":77.47175972,"test":[0.4949980384]}, +{"learn":[0.4929214426],"iteration":2818,"passed_time":100.0907882,"remaining_time":77.43810181,"test":[0.4949976212]}, +{"learn":[0.4929199227],"iteration":2819,"passed_time":100.1253261,"remaining_time":77.40184785,"test":[0.4949960119]}, +{"learn":[0.4929190585],"iteration":2820,"passed_time":100.1623099,"remaining_time":77.36748431,"test":[0.4949952966]}, +{"learn":[0.4929184326],"iteration":2821,"passed_time":100.1999787,"remaining_time":77.33364764,"test":[0.49499479]}, +{"learn":[0.4929173895],"iteration":2822,"passed_time":100.2368517,"remaining_time":77.29919451,"test":[0.4949941939]}, +{"learn":[0.4929164657],"iteration":2823,"passed_time":100.2733644,"remaining_time":77.26446211,"test":[0.4949933296]}, +{"learn":[0.492915661],"iteration":2824,"passed_time":100.3110265,"remaining_time":77.23061333,"test":[0.494992674]}, +{"learn":[0.4929151842],"iteration":2825,"passed_time":100.3486619,"remaining_time":77.19674133,"test":[0.4949922866]}, +{"learn":[0.4929143795],"iteration":2826,"passed_time":100.3859002,"remaining_time":77.16256139,"test":[0.4949915713]}, +{"learn":[0.492913098],"iteration":2827,"passed_time":100.4226162,"remaining_time":77.12797821,"test":[0.4949907964]}, +{"learn":[0.4929095515],"iteration":2828,"passed_time":100.4585426,"remaining_time":77.09278756,"test":[0.4949879652]}, +{"learn":[0.4929086276],"iteration":2829,"passed_time":100.4956654,"remaining_time":77.05851375,"test":[0.49498725]}, +{"learn":[0.4929077038],"iteration":2830,"passed_time":100.5328871,"remaining_time":77.02431369,"test":[0.4949868029]}, +{"learn":[0.4929066011],"iteration":2831,"passed_time":100.5688207,"remaining_time":76.98912549,"test":[0.4949862963]}, +{"learn":[0.4929057368],"iteration":2832,"passed_time":100.6053767,"remaining_time":76.95441275,"test":[0.4949856108]}, +{"learn":[0.4929051706],"iteration":2833,"passed_time":100.6439001,"remaining_time":76.92120237,"test":[0.4949851936]}, +{"learn":[0.4929046341],"iteration":2834,"passed_time":100.6824876,"remaining_time":76.88803724,"test":[0.494984836]}, +{"learn":[0.4929038295],"iteration":2835,"passed_time":100.7191329,"remaining_time":76.85338629,"test":[0.4949841505]}, +{"learn":[0.4929031142],"iteration":2836,"passed_time":100.7562102,"remaining_time":76.8190633,"test":[0.4949835247]}, +{"learn":[0.4929026076],"iteration":2837,"passed_time":100.7936567,"remaining_time":76.78501967,"test":[0.4949829882]}, +{"learn":[0.4929015645],"iteration":2838,"passed_time":100.8297676,"remaining_time":76.74995697,"test":[0.4949823624]}, +{"learn":[0.4929003128],"iteration":2839,"passed_time":100.867068,"remaining_time":76.71579822,"test":[0.4949814087]}, +{"learn":[0.4928997764],"iteration":2840,"passed_time":100.9056221,"remaining_time":76.68259,"test":[0.4949810213]}, +{"learn":[0.4928989717],"iteration":2841,"passed_time":100.9424582,"remaining_time":76.64807345,"test":[0.4949803954]}, +{"learn":[0.49289772],"iteration":2842,"passed_time":100.9790902,"remaining_time":76.61340048,"test":[0.4949795312]}, +{"learn":[0.4928968557],"iteration":2843,"passed_time":101.0163824,"remaining_time":76.57922657,"test":[0.4949786371]}, +{"learn":[0.4928958126],"iteration":2844,"passed_time":101.0539795,"remaining_time":76.5452815,"test":[0.4949778026]}, +{"learn":[0.4928947398],"iteration":2845,"passed_time":101.0894471,"remaining_time":76.50972208,"test":[0.4949772066]}, +{"learn":[0.4928929218],"iteration":2846,"passed_time":101.1255752,"remaining_time":76.47466223,"test":[0.4949759847]}, +{"learn":[0.4928922066],"iteration":2847,"passed_time":101.1645313,"remaining_time":76.44173856,"test":[0.4949755675]}, +{"learn":[0.4928911933],"iteration":2848,"passed_time":101.2010679,"remaining_time":76.40698391,"test":[0.4949749416]}, +{"learn":[0.492890031],"iteration":2849,"passed_time":101.2369077,"remaining_time":76.37170226,"test":[0.4949743158]}, +{"learn":[0.4928888687],"iteration":2850,"passed_time":101.2719874,"remaining_time":76.33584742,"test":[0.4949736601]}, +{"learn":[0.4928877064],"iteration":2851,"passed_time":101.3086304,"remaining_time":76.30117044,"test":[0.4949730641]}, +{"learn":[0.4928873488],"iteration":2852,"passed_time":101.3465457,"remaining_time":76.26744954,"test":[0.4949725276]}, +{"learn":[0.4928867527],"iteration":2853,"passed_time":101.3848189,"remaining_time":76.23399487,"test":[0.4949721998]}, +{"learn":[0.4928859183],"iteration":2854,"passed_time":101.422286,"remaining_time":76.19993116,"test":[0.4949714547]}, +{"learn":[0.4928848454],"iteration":2855,"passed_time":101.4578468,"remaining_time":76.16443401,"test":[0.4949708289]}, +{"learn":[0.4928839811],"iteration":2856,"passed_time":101.4928692,"remaining_time":76.12853296,"test":[0.4949701732]}, +{"learn":[0.492882938],"iteration":2857,"passed_time":101.5283795,"remaining_time":76.09299818,"test":[0.4949695474]}, +{"learn":[0.492882342],"iteration":2858,"passed_time":101.5664993,"remaining_time":76.05941761,"test":[0.4949691302]}, +{"learn":[0.4928814479],"iteration":2859,"passed_time":101.603727,"remaining_time":76.02516632,"test":[0.4949682659]}, +{"learn":[0.4928806433],"iteration":2860,"passed_time":101.640152,"remaining_time":75.99031288,"test":[0.4949675804]}, +{"learn":[0.4928790339],"iteration":2861,"passed_time":101.675886,"remaining_time":75.95494207,"test":[0.4949663883]}, +{"learn":[0.4928785571],"iteration":2862,"passed_time":101.7134079,"remaining_time":75.9209056,"test":[0.4949660009]}, +{"learn":[0.492877663],"iteration":2863,"passed_time":101.7505838,"remaining_time":75.88660856,"test":[0.494965077]}, +{"learn":[0.4928770372],"iteration":2864,"passed_time":101.7893921,"remaining_time":75.85352604,"test":[0.4949648386]}, +{"learn":[0.4928765007],"iteration":2865,"passed_time":101.8286717,"remaining_time":75.82079041,"test":[0.4949643916]}, +{"learn":[0.4928758451],"iteration":2866,"passed_time":101.8677535,"remaining_time":75.78790311,"test":[0.4949639446]}, +{"learn":[0.4928748914],"iteration":2867,"passed_time":101.905103,"remaining_time":75.75372372,"test":[0.4949632591]}, +{"learn":[0.4928733417],"iteration":2868,"passed_time":101.9402826,"remaining_time":75.71793037,"test":[0.4949620372]}, +{"learn":[0.4928726562],"iteration":2869,"passed_time":101.9782526,"remaining_time":75.68420838,"test":[0.4949613816]}, +{"learn":[0.4928711661],"iteration":2870,"passed_time":102.0145988,"remaining_time":75.64927932,"test":[0.4949604577]}, +{"learn":[0.4928702125],"iteration":2871,"passed_time":102.0518318,"remaining_time":75.61500632,"test":[0.4949597722]}, +{"learn":[0.4928694674],"iteration":2872,"passed_time":102.0897351,"remaining_time":75.58122748,"test":[0.494959355]}, +{"learn":[0.4928688415],"iteration":2873,"passed_time":102.1271444,"remaining_time":75.54708039,"test":[0.4949589974]}, +{"learn":[0.4928676793],"iteration":2874,"passed_time":102.1627398,"remaining_time":75.51159031,"test":[0.4949583715]}, +{"learn":[0.4928665468],"iteration":2875,"passed_time":102.198772,"remaining_time":75.47642272,"test":[0.4949574477]}, +{"learn":[0.4928653547],"iteration":2876,"passed_time":102.2350967,"remaining_time":75.44147035,"test":[0.4949565238]}, +{"learn":[0.49286154],"iteration":2877,"passed_time":102.269112,"remaining_time":75.40481434,"test":[0.4949536628]}, +{"learn":[0.4928603777],"iteration":2878,"passed_time":102.3058576,"remaining_time":75.37017155,"test":[0.4949528283]}, +{"learn":[0.4928581127],"iteration":2879,"passed_time":102.3407561,"remaining_time":75.33416768,"test":[0.4949508613]}, +{"learn":[0.4928572782],"iteration":2880,"passed_time":102.3778377,"remaining_time":75.29977026,"test":[0.4949501163]}, +{"learn":[0.4928563842],"iteration":2881,"passed_time":102.4148679,"remaining_time":75.26533316,"test":[0.4949494308]}, +{"learn":[0.492854596],"iteration":2882,"passed_time":102.4500985,"remaining_time":75.22957285,"test":[0.4949480301]}, +{"learn":[0.4928534039],"iteration":2883,"passed_time":102.4875047,"remaining_time":75.19540916,"test":[0.4949473447]}, +{"learn":[0.4928514966],"iteration":2884,"passed_time":102.5220393,"remaining_time":75.15913799,"test":[0.494945944]}, +{"learn":[0.4928508707],"iteration":2885,"passed_time":102.5586831,"remaining_time":75.12441307,"test":[0.4949452585]}, +{"learn":[0.4928496787],"iteration":2886,"passed_time":102.5935596,"remaining_time":75.0883933,"test":[0.4949445134]}, +{"learn":[0.4928480991],"iteration":2887,"passed_time":102.6292272,"remaining_time":75.05295285,"test":[0.4949434108]}, +{"learn":[0.4928462514],"iteration":2888,"passed_time":102.6639485,"remaining_time":75.01682078,"test":[0.494941712]}, +{"learn":[0.4928454765],"iteration":2889,"passed_time":102.7015999,"remaining_time":74.98282902,"test":[0.4949412948]}, +{"learn":[0.4928444931],"iteration":2890,"passed_time":102.7382373,"remaining_time":74.94809497,"test":[0.4949405497]}, +{"learn":[0.4928438672],"iteration":2891,"passed_time":102.7757845,"remaining_time":74.91402275,"test":[0.4949402219]}, +{"learn":[0.4928423771],"iteration":2892,"passed_time":102.8110882,"remaining_time":74.87831416,"test":[0.4949397451]}, +{"learn":[0.4928420195],"iteration":2893,"passed_time":102.8489549,"remaining_time":74.84447099,"test":[0.4949392682]}, +{"learn":[0.4928415724],"iteration":2894,"passed_time":102.8873372,"remaining_time":74.8109999,"test":[0.4949389106]}, +{"learn":[0.492840738],"iteration":2895,"passed_time":102.9245987,"remaining_time":74.77671118,"test":[0.4949382848]}, +{"learn":[0.4928396949],"iteration":2896,"passed_time":102.960542,"remaining_time":74.74146356,"test":[0.4949376291]}, +{"learn":[0.4928387412],"iteration":2897,"passed_time":102.9969203,"remaining_time":74.7065309,"test":[0.4949368543]}, +{"learn":[0.4928379365],"iteration":2898,"passed_time":103.0325983,"remaining_time":74.6710897,"test":[0.4949359304]}, +{"learn":[0.4928372809],"iteration":2899,"passed_time":103.0704897,"remaining_time":74.6372512,"test":[0.4949355728]}, +{"learn":[0.4928359398],"iteration":2900,"passed_time":103.1073872,"remaining_time":74.60269072,"test":[0.4949347681]}, +{"learn":[0.4928351351],"iteration":2901,"passed_time":103.1450533,"remaining_time":74.5686843,"test":[0.4949341422]}, +{"learn":[0.4928344795],"iteration":2902,"passed_time":103.1821854,"remaining_time":74.53428963,"test":[0.4949337548]}, +{"learn":[0.492833496],"iteration":2903,"passed_time":103.2192176,"remaining_time":74.49982095,"test":[0.4949330098]}, +{"learn":[0.4928330192],"iteration":2904,"passed_time":103.2569886,"remaining_time":74.46588332,"test":[0.4949324137]}, +{"learn":[0.4928322741],"iteration":2905,"passed_time":103.2939996,"remaining_time":74.43139542,"test":[0.4949319667]}, +{"learn":[0.4928313502],"iteration":2906,"passed_time":103.3304369,"remaining_time":74.39649278,"test":[0.4949310428]}, +{"learn":[0.4928302177],"iteration":2907,"passed_time":103.3674006,"remaining_time":74.36196772,"test":[0.4949304169]}, +{"learn":[0.4928298303],"iteration":2908,"passed_time":103.4052662,"remaining_time":74.32808922,"test":[0.4949299997]}, +{"learn":[0.4928293237],"iteration":2909,"passed_time":103.4423778,"remaining_time":74.2936665,"test":[0.4949294931]}, +{"learn":[0.492828072],"iteration":2910,"passed_time":103.4776771,"remaining_time":74.25794139,"test":[0.4949286288]}, +{"learn":[0.4928267309],"iteration":2911,"passed_time":103.5134503,"remaining_time":74.22255637,"test":[0.4949280626]}, +{"learn":[0.4928256282],"iteration":2912,"passed_time":103.5502084,"remaining_time":74.18787673,"test":[0.4949272877]}, +{"learn":[0.4928245255],"iteration":2913,"passed_time":103.5881664,"remaining_time":74.15405458,"test":[0.4949267215]}, +{"learn":[0.4928240785],"iteration":2914,"passed_time":103.6260546,"remaining_time":74.1201797,"test":[0.4949263042]}, +{"learn":[0.4928223797],"iteration":2915,"passed_time":103.6618095,"remaining_time":74.08477742,"test":[0.4949252313]}, +{"learn":[0.4928214559],"iteration":2916,"passed_time":103.6995763,"remaining_time":74.05081162,"test":[0.4949245757]}, +{"learn":[0.4928205916],"iteration":2917,"passed_time":103.7373613,"remaining_time":74.01685612,"test":[0.4949239796]}, +{"learn":[0.4928195485],"iteration":2918,"passed_time":103.774292,"remaining_time":73.98228905,"test":[0.4949232942]}, +{"learn":[0.4928186842],"iteration":2919,"passed_time":103.8105091,"remaining_time":73.94721195,"test":[0.4949226981]}, +{"learn":[0.4928177902],"iteration":2920,"passed_time":103.8479626,"remaining_time":73.91301415,"test":[0.4949220127]}, +{"learn":[0.4928171643],"iteration":2921,"passed_time":103.8859919,"remaining_time":73.87922352,"test":[0.4949215657]}, +{"learn":[0.4928165385],"iteration":2922,"passed_time":103.923435,"remaining_time":73.84501352,"test":[0.4949212378]}, +{"learn":[0.4928159722],"iteration":2923,"passed_time":103.9613289,"remaining_time":73.81112137,"test":[0.4949208206]}, +{"learn":[0.4928149888],"iteration":2924,"passed_time":103.9977455,"remaining_time":73.77617842,"test":[0.4949203438]}, +{"learn":[0.4928141543],"iteration":2925,"passed_time":104.0335997,"remaining_time":73.7408359,"test":[0.4949195689]}, +{"learn":[0.4928132602],"iteration":2926,"passed_time":104.0708415,"remaining_time":73.70647571,"test":[0.494918794]}, +{"learn":[0.492811025],"iteration":2927,"passed_time":104.106247,"remaining_time":73.67081411,"test":[0.4949168867]}, +{"learn":[0.4928095647],"iteration":2928,"passed_time":104.1420955,"remaining_time":73.63546597,"test":[0.494915933]}, +{"learn":[0.4928087005],"iteration":2929,"passed_time":104.1789239,"remaining_time":73.60080971,"test":[0.494915337]}, +{"learn":[0.4928072402],"iteration":2930,"passed_time":104.2134946,"remaining_time":73.56455831,"test":[0.4949140555]}, +{"learn":[0.4928064355],"iteration":2931,"passed_time":104.2498733,"remaining_time":73.52958322,"test":[0.49491337]}, +{"learn":[0.4928054222],"iteration":2932,"passed_time":104.2869219,"remaining_time":73.49507928,"test":[0.4949125654]}, +{"learn":[0.4928043791],"iteration":2933,"passed_time":104.3250002,"remaining_time":73.4612987,"test":[0.4949117905]}, +{"learn":[0.4928022334],"iteration":2934,"passed_time":104.3612738,"remaining_time":73.42624542,"test":[0.4949104196]}, +{"learn":[0.4928010711],"iteration":2935,"passed_time":104.3984252,"remaining_time":73.39180844,"test":[0.4949096745]}, +{"learn":[0.4928004452],"iteration":2936,"passed_time":104.4364125,"remaining_time":73.35795676,"test":[0.4949092871]}, +{"learn":[0.4927993127],"iteration":2937,"passed_time":104.4737993,"remaining_time":73.32368082,"test":[0.4949084824]}, +{"learn":[0.4927983293],"iteration":2938,"passed_time":104.5087934,"remaining_time":73.28772483,"test":[0.4949078268]}, +{"learn":[0.4927976438],"iteration":2939,"passed_time":104.5469743,"remaining_time":73.25400238,"test":[0.494907499]}, +{"learn":[0.4927966901],"iteration":2940,"passed_time":104.5845855,"remaining_time":73.2198781,"test":[0.4949066645]}, +{"learn":[0.4927957961],"iteration":2941,"passed_time":104.6211839,"remaining_time":73.18504298,"test":[0.49490583]}, +{"learn":[0.4927937099],"iteration":2942,"passed_time":104.6574345,"remaining_time":73.14996355,"test":[0.4949043399]}, +{"learn":[0.4927932629],"iteration":2943,"passed_time":104.6962916,"remaining_time":73.11670363,"test":[0.4949039525]}, +{"learn":[0.492792041],"iteration":2944,"passed_time":104.7322523,"remaining_time":73.08141884,"test":[0.4949033862]}, +{"learn":[0.492790074],"iteration":2945,"passed_time":104.7658192,"remaining_time":73.04446459,"test":[0.494902224]}, +{"learn":[0.4927897462],"iteration":2946,"passed_time":104.8037044,"remaining_time":73.01052095,"test":[0.4949018365]}, +{"learn":[0.4927887031],"iteration":2947,"passed_time":104.8408352,"remaining_time":72.97604946,"test":[0.4949010319]}, +{"learn":[0.4927874514],"iteration":2948,"passed_time":104.8770017,"remaining_time":72.94090554,"test":[0.4949002272]}, +{"learn":[0.4927863487],"iteration":2949,"passed_time":104.9143302,"remaining_time":72.90656845,"test":[0.4948994523]}, +{"learn":[0.4927847394],"iteration":2950,"passed_time":104.9508218,"remaining_time":72.87164824,"test":[0.4948981708]}, +{"learn":[0.4927839049],"iteration":2951,"passed_time":104.9875593,"remaining_time":72.83689751,"test":[0.494897396]}, +{"learn":[0.4927831003],"iteration":2952,"passed_time":105.0239055,"remaining_time":72.80187419,"test":[0.4948967999]}, +{"learn":[0.492782683],"iteration":2953,"passed_time":105.063499,"remaining_time":72.76909915,"test":[0.4948964721]}, +{"learn":[0.4927816102],"iteration":2954,"passed_time":105.0999491,"remaining_time":72.73414413,"test":[0.4948956376]}, +{"learn":[0.4927811035],"iteration":2955,"passed_time":105.1371901,"remaining_time":72.69973493,"test":[0.4948953396]}, +{"learn":[0.4927801796],"iteration":2956,"passed_time":105.1733036,"remaining_time":72.66454493,"test":[0.4948946244]}, +{"learn":[0.4927793452],"iteration":2957,"passed_time":105.2106901,"remaining_time":72.63023301,"test":[0.4948939091]}, +{"learn":[0.4927786299],"iteration":2958,"passed_time":105.2478,"remaining_time":72.59572824,"test":[0.4948933131]}, +{"learn":[0.4927761563],"iteration":2959,"passed_time":105.2808394,"remaining_time":72.55841634,"test":[0.4948920912]}, +{"learn":[0.4927737721],"iteration":2960,"passed_time":105.3160307,"remaining_time":72.5225892,"test":[0.4948908991]}, +{"learn":[0.4927732357],"iteration":2961,"passed_time":105.3542069,"remaining_time":72.48881621,"test":[0.4948905116]}, +{"learn":[0.4927724906],"iteration":2962,"passed_time":105.3902692,"remaining_time":72.45358704,"test":[0.494889856]}, +{"learn":[0.4927719244],"iteration":2963,"passed_time":105.4278116,"remaining_time":72.41937393,"test":[0.4948894686]}, +{"learn":[0.4927708217],"iteration":2964,"passed_time":105.4644986,"remaining_time":72.38457154,"test":[0.4948888725]}, +{"learn":[0.4927679607],"iteration":2965,"passed_time":105.5000165,"remaining_time":72.34896616,"test":[0.4948862499]}, +{"learn":[0.4927673646],"iteration":2966,"passed_time":105.5382601,"remaining_time":72.31522845,"test":[0.4948859519]}, +{"learn":[0.4927666196],"iteration":2967,"passed_time":105.5740408,"remaining_time":72.27980153,"test":[0.4948850876]}, +{"learn":[0.4927650997],"iteration":2968,"passed_time":105.6086252,"remaining_time":72.24355601,"test":[0.4948835677]}, +{"learn":[0.492763997],"iteration":2969,"passed_time":105.6438848,"remaining_time":72.20777312,"test":[0.4948828823]}, +{"learn":[0.4927622685],"iteration":2970,"passed_time":105.6805031,"remaining_time":72.17291844,"test":[0.4948815411]}, +{"learn":[0.4927613446],"iteration":2971,"passed_time":105.7193126,"remaining_time":72.13955788,"test":[0.4948810643]}, +{"learn":[0.4927561292],"iteration":2972,"passed_time":105.7526732,"remaining_time":72.10247852,"test":[0.4948768324]}, +{"learn":[0.4927548775],"iteration":2973,"passed_time":105.7891387,"remaining_time":72.06751679,"test":[0.4948760277]}, +{"learn":[0.4927543708],"iteration":2974,"passed_time":105.830564,"remaining_time":72.0359301,"test":[0.4948756403]}, +{"learn":[0.4927523443],"iteration":2975,"passed_time":105.8653702,"remaining_time":71.99983509,"test":[0.4948742098]}, +{"learn":[0.4927512714],"iteration":2976,"passed_time":105.9014559,"remaining_time":71.96461047,"test":[0.4948735541]}, +{"learn":[0.4927483806],"iteration":2977,"passed_time":105.9362289,"remaining_time":71.92849393,"test":[0.4948714084]}, +{"learn":[0.4927479931],"iteration":2978,"passed_time":105.9890725,"remaining_time":71.90463761,"test":[0.4948709315]}, +{"learn":[0.4927471587],"iteration":2979,"passed_time":106.0265128,"remaining_time":71.87032073,"test":[0.4948703951]}, +{"learn":[0.4927458176],"iteration":2980,"passed_time":106.0616185,"remaining_time":71.8344206,"test":[0.4948693222]}, +{"learn":[0.4927447149],"iteration":2981,"passed_time":106.0989286,"remaining_time":71.80001269,"test":[0.4948685175]}, +{"learn":[0.4927440294],"iteration":2982,"passed_time":106.1362662,"remaining_time":71.76562147,"test":[0.4948680407]}, +{"learn":[0.4927428969],"iteration":2983,"passed_time":106.1721607,"remaining_time":71.73025333,"test":[0.4948675043]}, +{"learn":[0.4927420327],"iteration":2984,"passed_time":106.2095865,"remaining_time":71.69591851,"test":[0.4948668486]}, +{"learn":[0.4927409896],"iteration":2985,"passed_time":106.2455053,"remaining_time":71.66056517,"test":[0.4948662824]}, +{"learn":[0.4927399763],"iteration":2986,"passed_time":106.2819441,"remaining_time":71.62556195,"test":[0.4948657459]}, +{"learn":[0.4927389928],"iteration":2987,"passed_time":106.3189567,"remaining_time":71.59094405,"test":[0.4948650307]}, +{"learn":[0.4927381882],"iteration":2988,"passed_time":106.3558558,"remaining_time":71.55624828,"test":[0.4948644644]}, +{"learn":[0.4927354166],"iteration":2989,"passed_time":106.389172,"remaining_time":71.51914236,"test":[0.4948618418]}, +{"learn":[0.4927344629],"iteration":2990,"passed_time":106.4254862,"remaining_time":71.48405276,"test":[0.494861365]}, +{"learn":[0.4927337178],"iteration":2991,"passed_time":106.4622256,"remaining_time":71.44924769,"test":[0.4948607391]}, +{"learn":[0.4927321979],"iteration":2992,"passed_time":106.4977989,"remaining_time":71.41365932,"test":[0.4948596364]}, +{"learn":[0.4927311846],"iteration":2993,"passed_time":106.5341902,"remaining_time":71.37861911,"test":[0.4948589212]}, +{"learn":[0.4927295157],"iteration":2994,"passed_time":106.5701581,"remaining_time":71.34329451,"test":[0.4948576397]}, +{"learn":[0.492728562],"iteration":2995,"passed_time":106.6065006,"remaining_time":71.30822002,"test":[0.4948571629]}, +{"learn":[0.492727817],"iteration":2996,"passed_time":106.6432825,"remaining_time":71.27343838,"test":[0.4948565966]}, +{"learn":[0.4927257904],"iteration":2997,"passed_time":106.6783446,"remaining_time":71.23750694,"test":[0.4948549575]}, +{"learn":[0.492725105],"iteration":2998,"passed_time":106.7147113,"remaining_time":71.2024466,"test":[0.4948543614]}, +{"learn":[0.4927240321],"iteration":2999,"passed_time":106.7501914,"remaining_time":71.16679426,"test":[0.4948537952]}, +{"learn":[0.4927235552],"iteration":3000,"passed_time":106.789077,"remaining_time":71.13341053,"test":[0.4948534078]}, +{"learn":[0.4927230188],"iteration":3001,"passed_time":106.8269157,"remaining_time":71.09932631,"test":[0.4948530799]}, +{"learn":[0.4927222141],"iteration":3002,"passed_time":106.8650234,"remaining_time":71.06541852,"test":[0.4948523647]}, +{"learn":[0.4927213797],"iteration":3003,"passed_time":106.9009384,"remaining_time":71.03005098,"test":[0.494851858]}, +{"learn":[0.4927205452],"iteration":3004,"passed_time":106.9385434,"remaining_time":70.99580499,"test":[0.4948512024]}, +{"learn":[0.4927199194],"iteration":3005,"passed_time":106.9773369,"remaining_time":70.9623452,"test":[0.4948508448]}, +{"learn":[0.4927192041],"iteration":3006,"passed_time":107.0156105,"remaining_time":70.92853731,"test":[0.4948502189]}, +{"learn":[0.4927185186],"iteration":3007,"passed_time":107.0532107,"remaining_time":70.89428051,"test":[0.4948495931]}, +{"learn":[0.4927171477],"iteration":3008,"passed_time":107.0890082,"remaining_time":70.85882859,"test":[0.4948484904]}, +{"learn":[0.492715896],"iteration":3009,"passed_time":107.1263872,"remaining_time":70.82442213,"test":[0.4948478347]}, +{"learn":[0.4927147338],"iteration":3010,"passed_time":107.162784,"remaining_time":70.78936477,"test":[0.4948470003]}, +{"learn":[0.4927143165],"iteration":3011,"passed_time":107.201709,"remaining_time":70.75597529,"test":[0.4948464638]}, +{"learn":[0.4927125582],"iteration":3012,"passed_time":107.2378914,"remaining_time":70.72077336,"test":[0.4948449439]}, +{"learn":[0.4927113661],"iteration":3013,"passed_time":107.2742696,"remaining_time":70.6856999,"test":[0.4948445267]}, +{"learn":[0.492710472],"iteration":3014,"passed_time":107.3126713,"remaining_time":70.65195773,"test":[0.4948439902]}, +{"learn":[0.4927099654],"iteration":3015,"passed_time":107.35014,"remaining_time":70.61759872,"test":[0.4948435134]}, +{"learn":[0.4927068063],"iteration":3016,"passed_time":107.3832652,"remaining_time":70.58038279,"test":[0.49484101]}, +{"learn":[0.4927062103],"iteration":3017,"passed_time":107.4221345,"remaining_time":70.54694191,"test":[0.4948406822]}, +{"learn":[0.4927055844],"iteration":3018,"passed_time":107.4599424,"remaining_time":70.51280092,"test":[0.4948400265]}, +{"learn":[0.4927038559],"iteration":3019,"passed_time":107.4950953,"remaining_time":70.47691677,"test":[0.494838894]}, +{"learn":[0.4927026042],"iteration":3020,"passed_time":107.5315792,"remaining_time":70.44190508,"test":[0.4948379702]}, +{"learn":[0.492702187],"iteration":3021,"passed_time":107.5694018,"remaining_time":70.40776865,"test":[0.4948377317]}, +{"learn":[0.4927008459],"iteration":3022,"passed_time":107.6057061,"remaining_time":70.37263679,"test":[0.4948369867]}, +{"learn":[0.4926995644],"iteration":3023,"passed_time":107.641536,"remaining_time":70.33719419,"test":[0.494836033]}, +{"learn":[0.4926975676],"iteration":3024,"passed_time":107.6754466,"remaining_time":70.3004982,"test":[0.4948341555]}, +{"learn":[0.4926963755],"iteration":3025,"passed_time":107.7117099,"remaining_time":70.26533884,"test":[0.4948335296]}, +{"learn":[0.4926958987],"iteration":3026,"passed_time":107.7500446,"remaining_time":70.2315289,"test":[0.4948331124]}, +{"learn":[0.492694796],"iteration":3027,"passed_time":107.7859057,"remaining_time":70.19610505,"test":[0.4948323971]}, +{"learn":[0.492694349],"iteration":3028,"passed_time":107.8245562,"remaining_time":70.16249599,"test":[0.4948319799]}, +{"learn":[0.4926933357],"iteration":3029,"passed_time":107.8612314,"remaining_time":70.12759927,"test":[0.4948313838]}, +{"learn":[0.4926924416],"iteration":3030,"passed_time":107.8986831,"remaining_time":70.09320589,"test":[0.4948307282]}, +{"learn":[0.4926918456],"iteration":3031,"passed_time":107.9365962,"remaining_time":70.05910995,"test":[0.4948301023]}, +{"learn":[0.4926891038],"iteration":3032,"passed_time":107.9733647,"remaining_time":70.02426919,"test":[0.4948283738]}, +{"learn":[0.4926878819],"iteration":3033,"passed_time":108.0111865,"remaining_time":69.99010962,"test":[0.4948272711]}, +{"learn":[0.4926869878],"iteration":3034,"passed_time":108.0499602,"remaining_time":69.95656405,"test":[0.4948267347]}, +{"learn":[0.4926854679],"iteration":3035,"passed_time":108.0858032,"remaining_time":69.92111904,"test":[0.4948255724]}, +{"learn":[0.4926841566],"iteration":3036,"passed_time":108.1223913,"remaining_time":69.88615548,"test":[0.4948243803]}, +{"learn":[0.4926836201],"iteration":3037,"passed_time":108.1603295,"remaining_time":69.85206267,"test":[0.4948240823]}, +{"learn":[0.4926827857],"iteration":3038,"passed_time":108.1964501,"remaining_time":69.81679458,"test":[0.4948234862]}, +{"learn":[0.4926801929],"iteration":3039,"passed_time":108.2304167,"remaining_time":69.78013707,"test":[0.4948212511]}, +{"learn":[0.4926793882],"iteration":3040,"passed_time":108.2681955,"remaining_time":69.74593719,"test":[0.4948208338]}, +{"learn":[0.4926786431],"iteration":3041,"passed_time":108.3045971,"remaining_time":69.71084852,"test":[0.494820357]}, +{"learn":[0.4926774511],"iteration":3042,"passed_time":108.3414659,"remaining_time":69.67605942,"test":[0.4948195821]}, +{"learn":[0.4926769742],"iteration":3043,"passed_time":108.3806834,"remaining_time":69.64277815,"test":[0.4948193437]}, +{"learn":[0.4926753053],"iteration":3044,"passed_time":108.4166963,"remaining_time":69.60743557,"test":[0.4948181218]}, +{"learn":[0.492674292],"iteration":3045,"passed_time":108.4534616,"remaining_time":69.57257516,"test":[0.4948175556]}, +{"learn":[0.4926733383],"iteration":3046,"passed_time":108.4914534,"remaining_time":69.53849969,"test":[0.4948169297]}, +{"learn":[0.4926723847],"iteration":3047,"passed_time":108.528735,"remaining_time":69.50396677,"test":[0.4948164231]}, +{"learn":[0.4926718184],"iteration":3048,"passed_time":108.5669357,"remaining_time":69.47002019,"test":[0.4948160357]}, +{"learn":[0.4926713714],"iteration":3049,"passed_time":108.6050923,"remaining_time":69.43604262,"test":[0.4948156184]}, +{"learn":[0.4926701495],"iteration":3050,"passed_time":108.6409606,"remaining_time":69.4006005,"test":[0.4948143965]}, +{"learn":[0.492669464],"iteration":3051,"passed_time":108.6779018,"remaining_time":69.36584298,"test":[0.4948138303]}, +{"learn":[0.4926683315],"iteration":3052,"passed_time":108.7155044,"remaining_time":69.33150574,"test":[0.4948130256]}, +{"learn":[0.4926676759],"iteration":3053,"passed_time":108.7523635,"remaining_time":69.29669265,"test":[0.4948126084]}, +{"learn":[0.4926646063],"iteration":3054,"passed_time":108.7860923,"remaining_time":69.25988526,"test":[0.4948100752]}, +{"learn":[0.4926631757],"iteration":3055,"passed_time":108.8213369,"remaining_time":69.22404415,"test":[0.4948090619]}, +{"learn":[0.4926621625],"iteration":3056,"passed_time":108.85693,"remaining_time":69.18842492,"test":[0.4948081678]}, +{"learn":[0.4926612684],"iteration":3057,"passed_time":108.8936449,"remaining_time":69.15351813,"test":[0.4948076016]}, +{"learn":[0.4926594803],"iteration":3058,"passed_time":108.9291554,"remaining_time":69.11784591,"test":[0.4948064989]}, +{"learn":[0.4926588246],"iteration":3059,"passed_time":108.9676931,"remaining_time":69.08409302,"test":[0.4948059923]}, +{"learn":[0.4926584074],"iteration":3060,"passed_time":109.0069482,"remaining_time":69.05079145,"test":[0.4948057539]}, +{"learn":[0.4926570961],"iteration":3061,"passed_time":109.0421529,"remaining_time":69.01492238,"test":[0.4948050982]}, +{"learn":[0.4926565596],"iteration":3062,"passed_time":109.081007,"remaining_time":68.98136159,"test":[0.494804681]}, +{"learn":[0.4926558742],"iteration":3063,"passed_time":109.1186729,"remaining_time":68.94704659,"test":[0.4948038763]}, +{"learn":[0.4926549503],"iteration":3064,"passed_time":109.1538604,"remaining_time":68.91116473,"test":[0.4948029822]}, +{"learn":[0.4926544139],"iteration":3065,"passed_time":109.1898221,"remaining_time":68.87577166,"test":[0.4948024756]}, +{"learn":[0.4926530728],"iteration":3066,"passed_time":109.2253239,"remaining_time":68.84008837,"test":[0.4948017305]}, +{"learn":[0.4926503607],"iteration":3067,"passed_time":109.2588163,"remaining_time":68.80313985,"test":[0.4947996444]}, +{"learn":[0.4926494667],"iteration":3068,"passed_time":109.2953889,"remaining_time":68.76813163,"test":[0.4947988993]}, +{"learn":[0.4926484832],"iteration":3069,"passed_time":109.3312699,"remaining_time":68.7326876,"test":[0.4947981245]}, +{"learn":[0.4926475295],"iteration":3070,"passed_time":109.3668975,"remaining_time":68.69708408,"test":[0.4947973794]}, +{"learn":[0.4926464566],"iteration":3071,"passed_time":109.4042337,"remaining_time":68.66255291,"test":[0.4947965449]}, +{"learn":[0.4926458904],"iteration":3072,"passed_time":109.4407693,"remaining_time":68.62751787,"test":[0.4947963661]}, +{"learn":[0.4926442811],"iteration":3073,"passed_time":109.4752917,"remaining_time":68.59122048,"test":[0.4947953528]}, +{"learn":[0.4926434168],"iteration":3074,"passed_time":109.5099636,"remaining_time":68.55501785,"test":[0.4947946674]}, +{"learn":[0.4926427612],"iteration":3075,"passed_time":109.5453473,"remaining_time":68.51926146,"test":[0.4947941607]}, +{"learn":[0.4926419267],"iteration":3076,"passed_time":109.5808349,"remaining_time":68.48357021,"test":[0.4947934455]}, +{"learn":[0.492640973],"iteration":3077,"passed_time":109.6167547,"remaining_time":68.44814897,"test":[0.4947928196]}, +{"learn":[0.4926399001],"iteration":3078,"passed_time":109.6533859,"remaining_time":68.41317124,"test":[0.4947920746]}, +{"learn":[0.4926392147],"iteration":3079,"passed_time":109.6894576,"remaining_time":68.3778437,"test":[0.4947914487]}, +{"learn":[0.4926379928],"iteration":3080,"passed_time":109.7238251,"remaining_time":68.34145418,"test":[0.4947904057]}, +{"learn":[0.4926353702],"iteration":3081,"passed_time":109.7578631,"remaining_time":68.30486092,"test":[0.4947887665]}, +{"learn":[0.4926347741],"iteration":3082,"passed_time":109.7953213,"remaining_time":68.27039603,"test":[0.4947883493]}, +{"learn":[0.4926340291],"iteration":3083,"passed_time":109.8323551,"remaining_time":68.23566547,"test":[0.4947877532]}, +{"learn":[0.4926324197],"iteration":3084,"passed_time":109.8682677,"remaining_time":68.20023749,"test":[0.49478674]}, +{"learn":[0.4926315555],"iteration":3085,"passed_time":109.9056696,"remaining_time":68.16573286,"test":[0.4947861141]}, +{"learn":[0.4926305124],"iteration":3086,"passed_time":109.9423539,"remaining_time":68.13078166,"test":[0.4947851903]}, +{"learn":[0.4926295587],"iteration":3087,"passed_time":109.9772358,"remaining_time":68.09471336,"test":[0.4947845346]}, +{"learn":[0.4926284858],"iteration":3088,"passed_time":110.0134213,"remaining_time":68.05945229,"test":[0.4947840578]}, +{"learn":[0.492627413],"iteration":3089,"passed_time":110.0497991,"remaining_time":68.02430949,"test":[0.4947834319]}, +{"learn":[0.4926269361],"iteration":3090,"passed_time":110.0867755,"remaining_time":67.98953555,"test":[0.4947829551]}, +{"learn":[0.4926259228],"iteration":3091,"passed_time":110.124727,"remaining_time":67.95536197,"test":[0.4947821504]}, +{"learn":[0.4926241943],"iteration":3092,"passed_time":110.1589778,"remaining_time":67.91890419,"test":[0.4947812265]}, +{"learn":[0.4926237473],"iteration":3093,"passed_time":110.1969783,"remaining_time":67.88475778,"test":[0.4947808391]}, +{"learn":[0.4926225552],"iteration":3094,"passed_time":110.2344093,"remaining_time":67.85025842,"test":[0.4947800046]}, +{"learn":[0.4926211545],"iteration":3095,"passed_time":110.2688672,"remaining_time":67.81392865,"test":[0.4947787231]}, +{"learn":[0.4926204392],"iteration":3096,"passed_time":110.305279,"remaining_time":67.77880078,"test":[0.4947784251]}, +{"learn":[0.4926188895],"iteration":3097,"passed_time":110.3390285,"remaining_time":67.74203752,"test":[0.494777233]}, +{"learn":[0.492617906],"iteration":3098,"passed_time":110.3753703,"remaining_time":67.70686641,"test":[0.4947763986]}, +{"learn":[0.4926172206],"iteration":3099,"passed_time":110.4110067,"remaining_time":67.67126215,"test":[0.4947759217]}, +{"learn":[0.4926160881],"iteration":3100,"passed_time":110.4481615,"remaining_time":67.63658779,"test":[0.4947751171]}, +{"learn":[0.4926155516],"iteration":3101,"passed_time":110.4858646,"remaining_time":67.60224729,"test":[0.49477467]}, +{"learn":[0.492614449],"iteration":3102,"passed_time":110.5211968,"remaining_time":67.56645514,"test":[0.4947740144]}, +{"learn":[0.49261278],"iteration":3103,"passed_time":110.5572532,"remaining_time":67.53110572,"test":[0.4947729713]}, +{"learn":[0.4926117071],"iteration":3104,"passed_time":110.5925915,"remaining_time":67.4953175,"test":[0.4947720176]}, +{"learn":[0.4926105746],"iteration":3105,"passed_time":110.629327,"remaining_time":67.46038164,"test":[0.4947712726]}, +{"learn":[0.4926100382],"iteration":3106,"passed_time":110.6666574,"remaining_time":67.42580706,"test":[0.4947710043]}, +{"learn":[0.4926091441],"iteration":3107,"passed_time":110.7043036,"remaining_time":67.39142294,"test":[0.4947702891]}, +{"learn":[0.4926083097],"iteration":3108,"passed_time":110.7418105,"remaining_time":67.35695193,"test":[0.4947698123]}, +{"learn":[0.4926078626],"iteration":3109,"passed_time":110.7787515,"remaining_time":67.32213518,"test":[0.4947694546]}, +{"learn":[0.4926069984],"iteration":3110,"passed_time":110.8143431,"remaining_time":67.28649764,"test":[0.4947687692]}, +{"learn":[0.4926064023],"iteration":3111,"passed_time":110.8511224,"remaining_time":67.25158068,"test":[0.4947684115]}, +{"learn":[0.4926049122],"iteration":3112,"passed_time":110.8861404,"remaining_time":67.21559493,"test":[0.4947673685]}, +{"learn":[0.4926038393],"iteration":3113,"passed_time":110.9212583,"remaining_time":67.17967026,"test":[0.4947666532]}, +{"learn":[0.4926018724],"iteration":3114,"passed_time":110.955893,"remaining_time":67.14345371,"test":[0.4947651929]}, +{"learn":[0.492600263],"iteration":3115,"passed_time":110.9901073,"remaining_time":67.10698399,"test":[0.4947642392]}, +{"learn":[0.492599369],"iteration":3116,"passed_time":111.0276538,"remaining_time":67.07252876,"test":[0.4947635538]}, +{"learn":[0.4925984749],"iteration":3117,"passed_time":111.0644331,"remaining_time":67.03760844,"test":[0.4947628087]}, +{"learn":[0.4925975212],"iteration":3118,"passed_time":111.1011436,"remaining_time":67.00264545,"test":[0.4947622723]}, +{"learn":[0.4925953755],"iteration":3119,"passed_time":111.1362677,"remaining_time":66.96672543,"test":[0.4947605735]}, +{"learn":[0.4925947198],"iteration":3120,"passed_time":111.1731191,"remaining_time":66.93184579,"test":[0.4947599775]}, +{"learn":[0.4925934383],"iteration":3121,"passed_time":111.2083098,"remaining_time":66.89596598,"test":[0.4947592324]}, +{"learn":[0.4925926039],"iteration":3122,"passed_time":111.2441959,"remaining_time":66.86050456,"test":[0.4947586662]}, +{"learn":[0.4925915012],"iteration":3123,"passed_time":111.2796295,"remaining_time":66.82477112,"test":[0.4947579509]}, +{"learn":[0.4925899812],"iteration":3124,"passed_time":111.3151622,"remaining_time":66.78909732,"test":[0.4947568482]}, +{"learn":[0.4925894448],"iteration":3125,"passed_time":111.3529299,"remaining_time":66.75476347,"test":[0.4947563714]}, +{"learn":[0.4925887594],"iteration":3126,"passed_time":111.3884885,"remaining_time":66.71910427,"test":[0.4947559542]}, +{"learn":[0.4925873586],"iteration":3127,"passed_time":111.4221852,"remaining_time":66.68233075,"test":[0.4947547621]}, +{"learn":[0.4925862262],"iteration":3128,"passed_time":111.4579766,"remaining_time":66.64681186,"test":[0.4947540468]}, +{"learn":[0.4925855109],"iteration":3129,"passed_time":111.4948739,"remaining_time":66.61195345,"test":[0.4947535104]}, +{"learn":[0.4925846466],"iteration":3130,"passed_time":111.5308424,"remaining_time":66.57653924,"test":[0.4947529143]}, +{"learn":[0.4925841698],"iteration":3131,"passed_time":111.5676665,"remaining_time":66.54163504,"test":[0.4947526461]}, +{"learn":[0.4925829479],"iteration":3132,"passed_time":111.6036399,"remaining_time":66.50622266,"test":[0.4947518415]}, +{"learn":[0.4925807723],"iteration":3133,"passed_time":111.637293,"remaining_time":66.46942844,"test":[0.4947499043]}, +{"learn":[0.4925800273],"iteration":3134,"passed_time":111.6730777,"remaining_time":66.43390428,"test":[0.494749189]}, +{"learn":[0.492579163],"iteration":3135,"passed_time":111.7109418,"remaining_time":66.39961592,"test":[0.4947486526]}, +{"learn":[0.4925781497],"iteration":3136,"passed_time":111.746885,"remaining_time":66.36418449,"test":[0.4947480268]}, +{"learn":[0.4925762126],"iteration":3137,"passed_time":111.7821003,"remaining_time":66.32832081,"test":[0.4947469241]}, +{"learn":[0.4925757357],"iteration":3138,"passed_time":111.8206893,"remaining_time":66.29445771,"test":[0.494746626]}, +{"learn":[0.4925746033],"iteration":3139,"passed_time":111.8561654,"remaining_time":66.25874765,"test":[0.4947455234]}, +{"learn":[0.4925736794],"iteration":3140,"passed_time":111.8907615,"remaining_time":66.2225169,"test":[0.4947449571]}, +{"learn":[0.4925725767],"iteration":3141,"passed_time":111.9261923,"remaining_time":66.1867808,"test":[0.4947442121]}, +{"learn":[0.4925716826],"iteration":3142,"passed_time":111.9609296,"remaining_time":66.15063517,"test":[0.494743616]}, +{"learn":[0.4925706395],"iteration":3143,"passed_time":111.9990351,"remaining_time":66.11647872,"test":[0.4947429902]}, +{"learn":[0.4925700435],"iteration":3144,"passed_time":112.0362849,"remaining_time":66.08181511,"test":[0.4947424835]}, +{"learn":[0.4925693878],"iteration":3145,"passed_time":112.0743949,"remaining_time":66.04765673,"test":[0.4947422153]}, +{"learn":[0.4925688812],"iteration":3146,"passed_time":112.1116795,"remaining_time":66.01300989,"test":[0.4947416491]}, +{"learn":[0.4925676891],"iteration":3147,"passed_time":112.147484,"remaining_time":65.97749059,"test":[0.4947408742]}, +{"learn":[0.4925665864],"iteration":3148,"passed_time":112.1833979,"remaining_time":65.94203539,"test":[0.4947400993]}, +{"learn":[0.4925650069],"iteration":3149,"passed_time":112.217437,"remaining_time":65.90547888,"test":[0.4947389371]}, +{"learn":[0.492564232],"iteration":3150,"passed_time":112.2533485,"remaining_time":65.87002268,"test":[0.4947385198]}, +{"learn":[0.4925634572],"iteration":3151,"passed_time":112.2891921,"remaining_time":65.83452633,"test":[0.4947379834]}, +{"learn":[0.4925626823],"iteration":3152,"passed_time":112.3263109,"remaining_time":65.79977678,"test":[0.4947372085]}, +{"learn":[0.4925616094],"iteration":3153,"passed_time":112.3601542,"remaining_time":65.76310862,"test":[0.4947364933]}, +{"learn":[0.4925611028],"iteration":3154,"passed_time":112.3978108,"remaining_time":65.72867226,"test":[0.4947362548]}, +{"learn":[0.4925606558],"iteration":3155,"passed_time":112.4363139,"remaining_time":65.69472842,"test":[0.494735778]}, +{"learn":[0.4925601193],"iteration":3156,"passed_time":112.4741598,"remaining_time":65.66039803,"test":[0.4947353012]}, +{"learn":[0.4925590464],"iteration":3157,"passed_time":112.5109868,"remaining_time":65.62547109,"test":[0.4947347051]}, +{"learn":[0.4925576755],"iteration":3158,"passed_time":112.5460563,"remaining_time":65.58951872,"test":[0.4947338111]}, +{"learn":[0.4925570795],"iteration":3159,"passed_time":112.5831514,"remaining_time":65.55474636,"test":[0.4947334236]}, +{"learn":[0.4925560364],"iteration":3160,"passed_time":112.6193727,"remaining_time":65.5194642,"test":[0.4947327382]}, +{"learn":[0.4925549039],"iteration":3161,"passed_time":112.6552186,"remaining_time":65.48396322,"test":[0.4947319633]}, +{"learn":[0.4925540993],"iteration":3162,"passed_time":112.6922138,"remaining_time":65.44912953,"test":[0.4947314269]}, +{"learn":[0.4925526687],"iteration":3163,"passed_time":112.729871,"remaining_time":65.4146786,"test":[0.4947302348]}, +{"learn":[0.4925522813],"iteration":3164,"passed_time":112.7680562,"remaining_time":65.38053178,"test":[0.4947299964]}, +{"learn":[0.4925512382],"iteration":3165,"passed_time":112.8035412,"remaining_time":65.34481823,"test":[0.4947293109]}, +{"learn":[0.4925499567],"iteration":3166,"passed_time":112.8390635,"remaining_time":65.30912644,"test":[0.4947283572]}, +{"learn":[0.492548556],"iteration":3167,"passed_time":112.8750829,"remaining_time":65.27372216,"test":[0.4947274632]}, +{"learn":[0.4925474831],"iteration":3168,"passed_time":112.9099652,"remaining_time":65.23766054,"test":[0.4947268075]}, +{"learn":[0.4925467083],"iteration":3169,"passed_time":112.9461895,"remaining_time":65.20237436,"test":[0.4947261221]}, +{"learn":[0.4925458142],"iteration":3170,"passed_time":112.9837224,"remaining_time":65.16784243,"test":[0.4947256154]}, +{"learn":[0.4925450394],"iteration":3171,"passed_time":113.020132,"remaining_time":65.13266116,"test":[0.4947248108]}, +{"learn":[0.4925427446],"iteration":3172,"passed_time":113.0551043,"remaining_time":65.0966516,"test":[0.4947229332]}, +{"learn":[0.4925416419],"iteration":3173,"passed_time":113.0916407,"remaining_time":65.0615425,"test":[0.494722218]}, +{"learn":[0.4925405988],"iteration":3174,"passed_time":113.1270237,"remaining_time":65.02576953,"test":[0.4947212643]}, +{"learn":[0.492540271],"iteration":3175,"passed_time":113.1645559,"remaining_time":64.9912311,"test":[0.4947210557]}, +{"learn":[0.4925391683],"iteration":3176,"passed_time":113.2010836,"remaining_time":64.95611439,"test":[0.4947201914]}, +{"learn":[0.492537559],"iteration":3177,"passed_time":113.2357452,"remaining_time":64.91992692,"test":[0.4947188801]}, +{"learn":[0.4925366053],"iteration":3178,"passed_time":113.272486,"remaining_time":64.88493143,"test":[0.4947181648]}, +{"learn":[0.4925358006],"iteration":3179,"passed_time":113.3080415,"remaining_time":64.84925648,"test":[0.4947175986]}, +{"learn":[0.492534847],"iteration":3180,"passed_time":113.3438317,"remaining_time":64.81371579,"test":[0.4947169131]}, +{"learn":[0.4925339231],"iteration":3181,"passed_time":113.3788216,"remaining_time":64.77771768,"test":[0.4947161979]}, +{"learn":[0.4925330886],"iteration":3182,"passed_time":113.4158161,"remaining_time":64.74286455,"test":[0.4947156912]}, +{"learn":[0.4925321349],"iteration":3183,"passed_time":113.4515,"remaining_time":64.70726254,"test":[0.4947149462]}, +{"learn":[0.4925294825],"iteration":3184,"passed_time":113.4861399,"remaining_time":64.67106558,"test":[0.4947133071]}, +{"learn":[0.4925284097],"iteration":3185,"passed_time":113.5219476,"remaining_time":64.63553454,"test":[0.4947123832]}, +{"learn":[0.4925275454],"iteration":3186,"passed_time":113.5568871,"remaining_time":64.59950933,"test":[0.4947116977]}, +{"learn":[0.4925260851],"iteration":3187,"passed_time":113.5921814,"remaining_time":64.56368654,"test":[0.4947105652]}, +{"learn":[0.492525638],"iteration":3188,"passed_time":113.630435,"remaining_time":64.52954463,"test":[0.4947102076]}, +{"learn":[0.4925242373],"iteration":3189,"passed_time":113.6657467,"remaining_time":64.49373091,"test":[0.4947091049]}, +{"learn":[0.4925233433],"iteration":3190,"passed_time":113.7023767,"remaining_time":64.4586648,"test":[0.4947085685]}, +{"learn":[0.4925219724],"iteration":3191,"passed_time":113.7380635,"remaining_time":64.42306353,"test":[0.4947074062]}, +{"learn":[0.4925204822],"iteration":3192,"passed_time":113.7723785,"remaining_time":64.38668589,"test":[0.4947062737]}, +{"learn":[0.4925193796],"iteration":3193,"passed_time":113.8074293,"remaining_time":64.35072551,"test":[0.4947055883]}, +{"learn":[0.4925189921],"iteration":3194,"passed_time":113.8510951,"remaining_time":64.31963278,"test":[0.494705171]}, +{"learn":[0.4925180981],"iteration":3195,"passed_time":113.8894507,"remaining_time":64.28553477,"test":[0.4947046942]}, +{"learn":[0.4925171742],"iteration":3196,"passed_time":113.9261349,"remaining_time":64.25049146,"test":[0.4947042173]}, +{"learn":[0.4925166079],"iteration":3197,"passed_time":113.964651,"remaining_time":64.21647939,"test":[0.4947038299]}, +{"learn":[0.4925158331],"iteration":3198,"passed_time":114.0004456,"remaining_time":64.18093234,"test":[0.4947032935]}, +{"learn":[0.4925137767],"iteration":3199,"passed_time":114.0336417,"remaining_time":64.14392344,"test":[0.494701863]}, +{"learn":[0.4925126442],"iteration":3200,"passed_time":114.0683192,"remaining_time":64.10774955,"test":[0.4947011775]}, +{"learn":[0.492511631],"iteration":3201,"passed_time":114.104195,"remaining_time":64.07224938,"test":[0.4947003729]}, +{"learn":[0.4925106475],"iteration":3202,"passed_time":114.1408207,"remaining_time":64.03716976,"test":[0.4946998066]}, +{"learn":[0.4925098726],"iteration":3203,"passed_time":114.178386,"remaining_time":64.00261585,"test":[0.4946990615]}, +{"learn":[0.4925088295],"iteration":3204,"passed_time":114.2134295,"remaining_time":63.96664772,"test":[0.4946984357]}, +{"learn":[0.4925081143],"iteration":3205,"passed_time":114.2488468,"remaining_time":63.93088933,"test":[0.4946979887]}, +{"learn":[0.49250725],"iteration":3206,"passed_time":114.2847931,"remaining_time":63.8954269,"test":[0.4946972436]}, +{"learn":[0.4925062963],"iteration":3207,"passed_time":114.3197577,"remaining_time":63.85941576,"test":[0.4946968264]}, +{"learn":[0.4925048956],"iteration":3208,"passed_time":114.3536242,"remaining_time":63.82279245,"test":[0.4946956641]}, +{"learn":[0.4925041208],"iteration":3209,"passed_time":114.3903103,"remaining_time":63.78774312,"test":[0.494694919]}, +{"learn":[0.4925028989],"iteration":3210,"passed_time":114.4247767,"remaining_time":63.75145612,"test":[0.4946945614]}, +{"learn":[0.492501826],"iteration":3211,"passed_time":114.4832428,"remaining_time":63.72852994,"test":[0.4946937269]}, +{"learn":[0.4925008127],"iteration":3212,"passed_time":114.5201231,"remaining_time":63.6935761,"test":[0.4946931011]}, +{"learn":[0.4924986371],"iteration":3213,"passed_time":114.5562938,"remaining_time":63.65822671,"test":[0.4946917898]}, +{"learn":[0.4924978623],"iteration":3214,"passed_time":114.5926109,"remaining_time":63.62295816,"test":[0.4946911341]}, +{"learn":[0.4924968788],"iteration":3215,"passed_time":114.6291112,"remaining_time":63.58779052,"test":[0.4946906871]}, +{"learn":[0.4924957761],"iteration":3216,"passed_time":114.6651809,"remaining_time":63.55238346,"test":[0.4946900911]}, +{"learn":[0.4924937496],"iteration":3217,"passed_time":114.700044,"remaining_time":63.51630777,"test":[0.4946888692]}, +{"learn":[0.4924930939],"iteration":3218,"passed_time":114.7359432,"remaining_time":63.48080608,"test":[0.4946883327]}, +{"learn":[0.4924925873],"iteration":3219,"passed_time":114.7729651,"remaining_time":63.44592482,"test":[0.4946880049]}, +{"learn":[0.4924888024],"iteration":3220,"passed_time":114.8080636,"remaining_time":63.40997986,"test":[0.4946849352]}, +{"learn":[0.4924878189],"iteration":3221,"passed_time":114.8439556,"remaining_time":63.37447335,"test":[0.49468422]}, +{"learn":[0.4924868056],"iteration":3222,"passed_time":114.8812127,"remaining_time":63.33971917,"test":[0.4946834451]}, +{"learn":[0.4924860904],"iteration":3223,"passed_time":114.9171043,"remaining_time":63.3042113,"test":[0.4946827597]}, +{"learn":[0.492483885],"iteration":3224,"passed_time":114.9507396,"remaining_time":63.26746134,"test":[0.4946810609]}, +{"learn":[0.4924828717],"iteration":3225,"passed_time":114.9862003,"remaining_time":63.23171708,"test":[0.4946804947]}, +{"learn":[0.4924825141],"iteration":3226,"passed_time":115.0234947,"remaining_time":63.19698053,"test":[0.4946800775]}, +{"learn":[0.4924818286],"iteration":3227,"passed_time":115.0594516,"remaining_time":63.16150814,"test":[0.49467969]}, +{"learn":[0.4924801895],"iteration":3228,"passed_time":115.0958214,"remaining_time":63.12626191,"test":[0.4946786768]}, +{"learn":[0.4924794146],"iteration":3229,"passed_time":115.1342048,"remaining_time":63.09211844,"test":[0.4946782893]}, +{"learn":[0.4924781927],"iteration":3230,"passed_time":115.1687968,"remaining_time":63.05589648,"test":[0.4946776039]}, +{"learn":[0.4924773285],"iteration":3231,"passed_time":115.205075,"remaining_time":63.02059795,"test":[0.4946772463]}, +{"learn":[0.4924768814],"iteration":3232,"passed_time":115.2435329,"remaining_time":62.98649016,"test":[0.4946768886]}, +{"learn":[0.492476196],"iteration":3233,"passed_time":115.2811634,"remaining_time":62.9519278,"test":[0.494676233]}, +{"learn":[0.4924756297],"iteration":3234,"passed_time":115.3180159,"remaining_time":62.91693912,"test":[0.4946759349]}, +{"learn":[0.4924744377],"iteration":3235,"passed_time":115.3539645,"remaining_time":62.88145653,"test":[0.4946753389]}, +{"learn":[0.4924734244],"iteration":3236,"passed_time":115.3901818,"remaining_time":62.84612002,"test":[0.494674564]}, +{"learn":[0.4924728879],"iteration":3237,"passed_time":115.4282453,"remaining_time":62.81178762,"test":[0.4946741468]}, +{"learn":[0.4924721429],"iteration":3238,"passed_time":115.4643033,"remaining_time":62.77636249,"test":[0.4946734912]}, +{"learn":[0.4924712786],"iteration":3239,"passed_time":115.500155,"remaining_time":62.74082494,"test":[0.4946727461]}, +{"learn":[0.4924702057],"iteration":3240,"passed_time":115.5370889,"remaining_time":62.70587454,"test":[0.4946721203]}, +{"learn":[0.4924692521],"iteration":3241,"passed_time":115.5723498,"remaining_time":62.67001573,"test":[0.4946715242]}, +{"learn":[0.4924685666],"iteration":3242,"passed_time":115.6085836,"remaining_time":62.63468437,"test":[0.494670809]}, +{"learn":[0.4924679408],"iteration":3243,"passed_time":115.6477748,"remaining_time":62.60095329,"test":[0.4946705407]}, +{"learn":[0.4924674639],"iteration":3244,"passed_time":115.6846014,"remaining_time":62.56594007,"test":[0.4946701235]}, +{"learn":[0.4924611458],"iteration":3245,"passed_time":115.7170116,"remaining_time":62.52853921,"test":[0.4946650869]}, +{"learn":[0.4924603412],"iteration":3246,"passed_time":115.7518963,"remaining_time":62.49247745,"test":[0.4946644909]}, +{"learn":[0.4924596259],"iteration":3247,"passed_time":115.7888883,"remaining_time":62.45755306,"test":[0.4946641034]}, +{"learn":[0.4924579272],"iteration":3248,"passed_time":115.8243316,"remaining_time":62.42179277,"test":[0.4946628815]}, +{"learn":[0.4924548575],"iteration":3249,"passed_time":115.8572521,"remaining_time":62.38467421,"test":[0.4946605868]}, +{"learn":[0.4924523243],"iteration":3250,"passed_time":115.8913002,"remaining_time":62.34816489,"test":[0.4946585602]}, +{"learn":[0.4924517879],"iteration":3251,"passed_time":115.9283002,"remaining_time":62.31324376,"test":[0.4946581132]}, +{"learn":[0.4924501786],"iteration":3252,"passed_time":115.9630289,"remaining_time":62.27710158,"test":[0.4946569509]}, +{"learn":[0.4924490461],"iteration":3253,"passed_time":115.9989428,"remaining_time":62.24159622,"test":[0.4946562058]}, +{"learn":[0.492448301],"iteration":3254,"passed_time":116.0346264,"remaining_time":62.20596713,"test":[0.4946557588]}, +{"learn":[0.4924476752],"iteration":3255,"passed_time":116.0720935,"remaining_time":62.17129334,"test":[0.4946553117]}, +{"learn":[0.4924462745],"iteration":3256,"passed_time":116.109727,"remaining_time":62.13670682,"test":[0.4946543283]}, +{"learn":[0.4924457082],"iteration":3257,"passed_time":116.1463746,"remaining_time":62.10159135,"test":[0.4946538812]}, +{"learn":[0.4924449632],"iteration":3258,"passed_time":116.1834607,"remaining_time":62.06670914,"test":[0.4946532852]}, +{"learn":[0.4924439499],"iteration":3259,"passed_time":116.2198237,"remaining_time":62.03143966,"test":[0.4946525401]}, +{"learn":[0.4924420425],"iteration":3260,"passed_time":116.2534331,"remaining_time":61.99470106,"test":[0.49465105]}, +{"learn":[0.4924410591],"iteration":3261,"passed_time":116.290061,"remaining_time":61.95957265,"test":[0.4946503646]}, +{"learn":[0.4924386451],"iteration":3262,"passed_time":116.3240191,"remaining_time":61.92302214,"test":[0.4946484274]}, +{"learn":[0.492437602],"iteration":3263,"passed_time":116.3596319,"remaining_time":61.88735322,"test":[0.4946476227]}, +{"learn":[0.4924373338],"iteration":3264,"passed_time":116.3967957,"remaining_time":61.85250858,"test":[0.4946472949]}, +{"learn":[0.4924365887],"iteration":3265,"passed_time":116.4324769,"remaining_time":61.81687538,"test":[0.4946466095]}, +{"learn":[0.4924356946],"iteration":3266,"passed_time":116.4683763,"remaining_time":61.78135787,"test":[0.4946460134]}, +{"learn":[0.4924349794],"iteration":3267,"passed_time":116.5038494,"remaining_time":61.74561421,"test":[0.494645477]}, +{"learn":[0.4924327442],"iteration":3268,"passed_time":116.5375718,"remaining_time":61.70894365,"test":[0.4946438379]}, +{"learn":[0.492432029],"iteration":3269,"passed_time":116.5740773,"remaining_time":61.67374729,"test":[0.494643212]}, +{"learn":[0.4924307773],"iteration":3270,"passed_time":116.6081665,"remaining_time":61.63727298,"test":[0.4946424967]}, +{"learn":[0.4924297044],"iteration":3271,"passed_time":116.6436788,"remaining_time":61.60155166,"test":[0.4946420795]}, +{"learn":[0.4924286911],"iteration":3272,"passed_time":116.6815534,"remaining_time":61.56707689,"test":[0.4946414835]}, +{"learn":[0.4924274394],"iteration":3273,"passed_time":116.7191333,"remaining_time":61.53244475,"test":[0.4946408576]}, +{"learn":[0.4924264857],"iteration":3274,"passed_time":116.7549777,"remaining_time":61.49689666,"test":[0.4946401722]}, +{"learn":[0.4924260089],"iteration":3275,"passed_time":116.7936343,"remaining_time":61.46282832,"test":[0.4946398145]}, +{"learn":[0.4924254426],"iteration":3276,"passed_time":116.8318061,"remaining_time":61.42850227,"test":[0.4946391589]}, +{"learn":[0.4924241611],"iteration":3277,"passed_time":116.8678418,"remaining_time":61.39305175,"test":[0.4946384138]}, +{"learn":[0.4924235055],"iteration":3278,"passed_time":116.9034827,"remaining_time":61.35739365,"test":[0.4946377284]}, +{"learn":[0.4924231181],"iteration":3279,"passed_time":116.9421476,"remaining_time":61.3233213,"test":[0.4946374304]}, +{"learn":[0.4924226412],"iteration":3280,"passed_time":116.9797724,"remaining_time":61.28870124,"test":[0.4946369833]}, +{"learn":[0.4924219558],"iteration":3281,"passed_time":117.0159699,"remaining_time":61.25333222,"test":[0.4946365959]}, +{"learn":[0.4924187073],"iteration":3282,"passed_time":117.0505974,"remaining_time":61.21714158,"test":[0.4946342415]}, +{"learn":[0.4924182305],"iteration":3283,"passed_time":117.088664,"remaining_time":61.18274891,"test":[0.4946339137]}, +{"learn":[0.4924174258],"iteration":3284,"passed_time":117.1254304,"remaining_time":61.14767525,"test":[0.4946331984]}, +{"learn":[0.4924160251],"iteration":3285,"passed_time":117.1605659,"remaining_time":61.11174984,"test":[0.4946320659]}, +{"learn":[0.4924157569],"iteration":3286,"passed_time":117.198852,"remaining_time":61.07746685,"test":[0.4946316785]}, +{"learn":[0.4924148032],"iteration":3287,"passed_time":117.2348171,"remaining_time":61.04197292,"test":[0.4946308738]}, +{"learn":[0.4924137005],"iteration":3288,"passed_time":117.2700838,"remaining_time":61.00611535,"test":[0.4946301586]}, +{"learn":[0.4924120614],"iteration":3289,"passed_time":117.3059169,"remaining_time":60.97055256,"test":[0.4946292347]}, +{"learn":[0.492411376],"iteration":3290,"passed_time":117.3417777,"remaining_time":60.93500398,"test":[0.4946286685]}, +{"learn":[0.4924101541],"iteration":3291,"passed_time":117.3781949,"remaining_time":60.89974388,"test":[0.4946278042]}, +{"learn":[0.4924093196],"iteration":3292,"passed_time":117.4142679,"remaining_time":60.86430469,"test":[0.4946272976]}, +{"learn":[0.4924081573],"iteration":3293,"passed_time":117.4514899,"remaining_time":60.82946018,"test":[0.4946266717]}, +{"learn":[0.4924066672],"iteration":3294,"passed_time":117.4866269,"remaining_time":60.7935353,"test":[0.4946255988]}, +{"learn":[0.4924057433],"iteration":3295,"passed_time":117.5226361,"remaining_time":60.75806188,"test":[0.4946250028]}, +{"learn":[0.4924047598],"iteration":3296,"passed_time":117.5591854,"remaining_time":60.72286709,"test":[0.4946244067]}, +{"learn":[0.492404134],"iteration":3297,"passed_time":117.5947087,"remaining_time":60.68714197,"test":[0.4946238405]}, +{"learn":[0.4924022862],"iteration":3298,"passed_time":117.6283781,"remaining_time":60.6504611,"test":[0.4946219928]}, +{"learn":[0.4924019882],"iteration":3299,"passed_time":117.6649181,"remaining_time":60.61526085,"test":[0.4946217245]}, +{"learn":[0.4924011836],"iteration":3300,"passed_time":117.700814,"remaining_time":60.57972825,"test":[0.4946212477]}, +{"learn":[0.4923997828],"iteration":3301,"passed_time":117.7346286,"remaining_time":60.54312519,"test":[0.4946200854]}, +{"learn":[0.4923985312],"iteration":3302,"passed_time":117.7700515,"remaining_time":60.50735013,"test":[0.4946193105]}, +{"learn":[0.4923980543],"iteration":3303,"passed_time":117.8079925,"remaining_time":60.47286783,"test":[0.4946189529]}, +{"learn":[0.4923968622],"iteration":3304,"passed_time":117.8425177,"remaining_time":60.43663163,"test":[0.4946184165]}, +{"learn":[0.4923961172],"iteration":3305,"passed_time":117.8784076,"remaining_time":60.40109575,"test":[0.4946177906]}, +{"learn":[0.4923952827],"iteration":3306,"passed_time":117.9145353,"remaining_time":60.36568135,"test":[0.4946173138]}, +{"learn":[0.4923947165],"iteration":3307,"passed_time":117.9506261,"remaining_time":60.3302477,"test":[0.4946166581]}, +{"learn":[0.4923934648],"iteration":3308,"passed_time":117.9875525,"remaining_time":60.29524065,"test":[0.4946155555]}, +{"learn":[0.492392064],"iteration":3309,"passed_time":118.0229751,"remaining_time":60.25946465,"test":[0.4946146018]}, +{"learn":[0.4923906931],"iteration":3310,"passed_time":118.0595932,"remaining_time":60.22429867,"test":[0.4946140355]}, +{"learn":[0.4923901567],"iteration":3311,"passed_time":118.0948517,"remaining_time":60.18843891,"test":[0.4946134991]}, +{"learn":[0.4923891136],"iteration":3312,"passed_time":118.1311999,"remaining_time":60.15313439,"test":[0.4946129925]}, +{"learn":[0.4923885772],"iteration":3313,"passed_time":118.1700124,"remaining_time":60.11908298,"test":[0.494612605]}, +{"learn":[0.4923875639],"iteration":3314,"passed_time":118.2057823,"remaining_time":60.08348208,"test":[0.4946117706]}, +{"learn":[0.49238664],"iteration":3315,"passed_time":118.2425589,"remaining_time":60.04839238,"test":[0.4946112043]}, +{"learn":[0.4923859546],"iteration":3316,"passed_time":118.2796618,"remaining_time":60.01346722,"test":[0.4946104891]}, +{"learn":[0.4923847923],"iteration":3317,"passed_time":118.3148673,"remaining_time":59.97757893,"test":[0.4946098334]}, +{"learn":[0.4923833618],"iteration":3318,"passed_time":118.3503407,"remaining_time":59.94182668,"test":[0.4946090883]}, +{"learn":[0.4923829445],"iteration":3319,"passed_time":118.3883386,"remaining_time":59.90735208,"test":[0.4946088201]}, +{"learn":[0.4923821399],"iteration":3320,"passed_time":118.4250082,"remaining_time":59.87220381,"test":[0.4946084923]}, +{"learn":[0.4923815736],"iteration":3321,"passed_time":118.460206,"remaining_time":59.83631117,"test":[0.4946080453]}, +{"learn":[0.4923804113],"iteration":3322,"passed_time":118.4960476,"remaining_time":59.80074385,"test":[0.4946070618]}, +{"learn":[0.4923796067],"iteration":3323,"passed_time":118.5311199,"remaining_time":59.76478849,"test":[0.4946065552]}, +{"learn":[0.4923770437],"iteration":3324,"passed_time":118.5646874,"remaining_time":59.72807558,"test":[0.4946047968]}, +{"learn":[0.4923761198],"iteration":3325,"passed_time":118.6010461,"remaining_time":59.69276946,"test":[0.4946039623]}, +{"learn":[0.4923754344],"iteration":3326,"passed_time":118.6382796,"remaining_time":59.65790255,"test":[0.4946032769]}, +{"learn":[0.4923749277],"iteration":3327,"passed_time":118.6769244,"remaining_time":59.62374327,"test":[0.4946030087]}, +{"learn":[0.4923743019],"iteration":3328,"passed_time":118.7143518,"remaining_time":59.5889702,"test":[0.494602502]}, +{"learn":[0.4923735866],"iteration":3329,"passed_time":118.7514298,"remaining_time":59.55402036,"test":[0.4946021444]}, +{"learn":[0.4923728117],"iteration":3330,"passed_time":118.7892279,"remaining_time":59.51943,"test":[0.4946014888]}, +{"learn":[0.4923716793],"iteration":3331,"passed_time":118.8256842,"remaining_time":59.48416604,"test":[0.4946007437]}, +{"learn":[0.4923693547],"iteration":3332,"passed_time":118.8588109,"remaining_time":59.44723607,"test":[0.4945988662]}, +{"learn":[0.4923687288],"iteration":3333,"passed_time":118.8962129,"remaining_time":59.41244471,"test":[0.4945985681]}, +{"learn":[0.4923683116],"iteration":3334,"passed_time":118.9355521,"remaining_time":59.37861895,"test":[0.4945981211]}, +{"learn":[0.4923660466],"iteration":3335,"passed_time":118.9691561,"remaining_time":59.34192917,"test":[0.4945963926]}, +{"learn":[0.4923652122],"iteration":3336,"passed_time":119.0052141,"remaining_time":59.30646422,"test":[0.4945957965]}, +{"learn":[0.4923644671],"iteration":3337,"passed_time":119.0403807,"remaining_time":59.27055506,"test":[0.4945953793]}, +{"learn":[0.4923636028],"iteration":3338,"passed_time":119.0754749,"remaining_time":59.23461031,"test":[0.4945946044]}, +{"learn":[0.4923626194],"iteration":3339,"passed_time":119.111617,"remaining_time":59.19918688,"test":[0.4945940084]}, +{"learn":[0.4923618445],"iteration":3340,"passed_time":119.1493688,"remaining_time":59.16456237,"test":[0.4945935613]}, +{"learn":[0.4923614571],"iteration":3341,"passed_time":119.186497,"remaining_time":59.12962658,"test":[0.4945931441]}, +{"learn":[0.4923608014],"iteration":3342,"passed_time":119.223594,"remaining_time":59.09467401,"test":[0.4945925779]}, +{"learn":[0.4923599073],"iteration":3343,"passed_time":119.2615457,"remaining_time":59.06014346,"test":[0.4945919222]}, +{"learn":[0.4923591325],"iteration":3344,"passed_time":119.297728,"remaining_time":59.0247354,"test":[0.4945915348]}, +{"learn":[0.4923583576],"iteration":3345,"passed_time":119.3343272,"remaining_time":58.98953295,"test":[0.4945908791]}, +{"learn":[0.4923570761],"iteration":3346,"passed_time":119.3712559,"remaining_time":58.95449236,"test":[0.4945901639]}, +{"learn":[0.4923565993],"iteration":3347,"passed_time":119.4089146,"remaining_time":58.91981091,"test":[0.4945898659]}, +{"learn":[0.4923560926],"iteration":3348,"passed_time":119.445554,"remaining_time":58.88462518,"test":[0.49458924]}, +{"learn":[0.4923556754],"iteration":3349,"passed_time":119.4849868,"remaining_time":58.8508144,"test":[0.4945888824]}, +{"learn":[0.4923550198],"iteration":3350,"passed_time":119.5226022,"remaining_time":58.81610596,"test":[0.4945884949]}, +{"learn":[0.4923543641],"iteration":3351,"passed_time":119.5604844,"remaining_time":58.78152695,"test":[0.4945881373]}, +{"learn":[0.4923534998],"iteration":3352,"passed_time":119.59724,"remaining_time":58.74639257,"test":[0.4945876009]}, +{"learn":[0.4923527548],"iteration":3353,"passed_time":119.633017,"remaining_time":58.71077696,"test":[0.4945870048]}, +{"learn":[0.4923523674],"iteration":3354,"passed_time":119.6704515,"remaining_time":58.67597398,"test":[0.4945866174]}, +{"learn":[0.4923508474],"iteration":3355,"passed_time":119.7054174,"remaining_time":58.63996012,"test":[0.4945855147]}, +{"learn":[0.492349864],"iteration":3356,"passed_time":119.7413819,"remaining_time":58.60443566,"test":[0.4945850379]}, +{"learn":[0.4923491487],"iteration":3357,"passed_time":119.778026,"remaining_time":58.56924319,"test":[0.494584412]}, +{"learn":[0.4923486421],"iteration":3358,"passed_time":119.8149863,"remaining_time":58.53420438,"test":[0.4945839948]}, +{"learn":[0.4923469731],"iteration":3359,"passed_time":119.850122,"remaining_time":58.49827383,"test":[0.4945828325]}, +{"learn":[0.4923463771],"iteration":3360,"passed_time":119.8871547,"remaining_time":58.46326884,"test":[0.4945824153]}, +{"learn":[0.4923454234],"iteration":3361,"passed_time":119.9220343,"remaining_time":58.42721361,"test":[0.4945816404]}, +{"learn":[0.4923443207],"iteration":3362,"passed_time":119.9580307,"remaining_time":58.39170271,"test":[0.4945810444]}, +{"learn":[0.4923433373],"iteration":3363,"passed_time":119.9933502,"remaining_time":58.35586235,"test":[0.4945803887]}, +{"learn":[0.4923424432],"iteration":3364,"passed_time":120.0292191,"remaining_time":58.32028922,"test":[0.4945797629]}, +{"learn":[0.4923418173],"iteration":3365,"passed_time":120.0665243,"remaining_time":58.28541316,"test":[0.4945791072]}, +{"learn":[0.4923405358],"iteration":3366,"passed_time":120.1025704,"remaining_time":58.249925,"test":[0.4945785112]}, +{"learn":[0.4923395822],"iteration":3367,"passed_time":120.1382575,"remaining_time":58.21426255,"test":[0.4945774383]}, +{"learn":[0.4923389861],"iteration":3368,"passed_time":120.1740624,"remaining_time":58.17865711,"test":[0.4945767528]}, +{"learn":[0.4923376748],"iteration":3369,"passed_time":120.2100301,"remaining_time":58.14313028,"test":[0.4945763058]}, +{"learn":[0.4923352012],"iteration":3370,"passed_time":120.2454832,"remaining_time":58.10735451,"test":[0.4945745475]}, +{"learn":[0.4923338005],"iteration":3371,"passed_time":120.2805437,"remaining_time":58.07138942,"test":[0.4945734746]}, +{"learn":[0.4923329959],"iteration":3372,"passed_time":120.3148982,"remaining_time":58.03508429,"test":[0.4945730573]}, +{"learn":[0.4923314163],"iteration":3373,"passed_time":120.3492646,"remaining_time":57.99878609,"test":[0.4945720739]}, +{"learn":[0.4923305521],"iteration":3374,"passed_time":120.3851666,"remaining_time":57.96322839,"test":[0.4945715076]}, +{"learn":[0.4923297474],"iteration":3375,"passed_time":120.4206167,"remaining_time":57.92745303,"test":[0.4945710308]}, +{"learn":[0.4923293302],"iteration":3376,"passed_time":120.4598694,"remaining_time":57.89350547,"test":[0.4945706434]}, +{"learn":[0.4923284659],"iteration":3377,"passed_time":120.4953379,"remaining_time":57.85773774,"test":[0.4945700771]}, +{"learn":[0.4923277804],"iteration":3378,"passed_time":120.5331451,"remaining_time":57.82309211,"test":[0.4945695705]}, +{"learn":[0.4923271844],"iteration":3379,"passed_time":120.5710093,"remaining_time":57.78847191,"test":[0.4945692426]}, +{"learn":[0.4923263499],"iteration":3380,"passed_time":120.6073069,"remaining_time":57.75309965,"test":[0.4945684082]}, +{"learn":[0.4923256645],"iteration":3381,"passed_time":120.6440068,"remaining_time":57.7179193,"test":[0.4945679611]}, +{"learn":[0.4923249492],"iteration":3382,"passed_time":120.6826443,"remaining_time":57.68366413,"test":[0.4945674247]}, +{"learn":[0.4923233697],"iteration":3383,"passed_time":120.7204428,"remaining_time":57.6490058,"test":[0.4945663816]}, +{"learn":[0.4923227141],"iteration":3384,"passed_time":120.7578931,"remaining_time":57.61417944,"test":[0.4945659346]}, +{"learn":[0.4923218796],"iteration":3385,"passed_time":120.7955506,"remaining_time":57.57945026,"test":[0.4945652789]}, +{"learn":[0.4923208961],"iteration":3386,"passed_time":120.8323523,"remaining_time":57.54431186,"test":[0.4945644445]}, +{"learn":[0.4923199424],"iteration":3387,"passed_time":120.8698037,"remaining_time":57.50948159,"test":[0.4945638484]}, +{"learn":[0.4923194656],"iteration":3388,"passed_time":120.9091768,"remaining_time":57.47556325,"test":[0.4945635504]}, +{"learn":[0.4923188994],"iteration":3389,"passed_time":120.9474771,"remaining_time":57.44113222,"test":[0.4945631928]}, +{"learn":[0.4923174986],"iteration":3390,"passed_time":120.98249,"remaining_time":57.40513903,"test":[0.4945623881]}, +{"learn":[0.4923168132],"iteration":3391,"passed_time":121.0186627,"remaining_time":57.36969625,"test":[0.4945617325]}, +{"learn":[0.4923162768],"iteration":3392,"passed_time":121.055312,"remaining_time":57.33447876,"test":[0.4945614642]}, +{"learn":[0.4923156211],"iteration":3393,"passed_time":121.0924776,"remaining_time":57.29950472,"test":[0.4945608682]}, +{"learn":[0.4923149953],"iteration":3394,"passed_time":121.1309628,"remaining_time":57.26515327,"test":[0.4945602722]}, +{"learn":[0.4923130581],"iteration":3395,"passed_time":121.1661811,"remaining_time":57.22925631,"test":[0.4945595271]}, +{"learn":[0.4923100183],"iteration":3396,"passed_time":121.1998386,"remaining_time":57.19262328,"test":[0.4945570535]}, +{"learn":[0.4923097202],"iteration":3397,"passed_time":121.2389541,"remaining_time":57.15856519,"test":[0.4945566959]}, +{"learn":[0.492309303],"iteration":3398,"passed_time":121.2758724,"remaining_time":57.12346919,"test":[0.4945564873]}, +{"learn":[0.4923085281],"iteration":3399,"passed_time":121.3112322,"remaining_time":57.0876387,"test":[0.4945558316]}, +{"learn":[0.4923066804],"iteration":3400,"passed_time":121.3461934,"remaining_time":57.05162109,"test":[0.4945548481]}, +{"learn":[0.4923058757],"iteration":3401,"passed_time":121.3814488,"remaining_time":57.01574224,"test":[0.4945540435]}, +{"learn":[0.4923049221],"iteration":3402,"passed_time":121.4174732,"remaining_time":56.98022469,"test":[0.4945532686]}, +{"learn":[0.4923037002],"iteration":3403,"passed_time":121.453301,"remaining_time":56.94461468,"test":[0.4945525832]}, +{"learn":[0.4923028061],"iteration":3404,"passed_time":121.4889942,"remaining_time":56.90894148,"test":[0.4945521063]}, +{"learn":[0.4923018822],"iteration":3405,"passed_time":121.5248734,"remaining_time":56.87335531,"test":[0.4945515997]}, +{"learn":[0.492300869],"iteration":3406,"passed_time":121.5610697,"remaining_time":56.83791723,"test":[0.494551093]}, +{"learn":[0.4922983656],"iteration":3407,"passed_time":121.5959896,"remaining_time":56.80188247,"test":[0.4945490069]}, +{"learn":[0.4922972629],"iteration":3408,"passed_time":121.6318259,"remaining_time":56.76627606,"test":[0.4945482618]}, +{"learn":[0.492296935],"iteration":3409,"passed_time":121.6694199,"remaining_time":56.73148903,"test":[0.4945479638]}, +{"learn":[0.4922952065],"iteration":3410,"passed_time":121.7068048,"remaining_time":56.696603,"test":[0.4945467419]}, +{"learn":[0.4922946403],"iteration":3411,"passed_time":121.7444848,"remaining_time":56.66185281,"test":[0.4945463247]}, +{"learn":[0.4922935674],"iteration":3412,"passed_time":121.7796445,"remaining_time":56.62592906,"test":[0.4945456988]}, +{"learn":[0.4922932098],"iteration":3413,"passed_time":121.8167321,"remaining_time":56.59090131,"test":[0.4945453412]}, +{"learn":[0.4922927031],"iteration":3414,"passed_time":121.852713,"remaining_time":56.55535875,"test":[0.4945450432]}, +{"learn":[0.4922903487],"iteration":3415,"passed_time":121.8871109,"remaining_time":56.51908187,"test":[0.4945432252]}, +{"learn":[0.492288948],"iteration":3416,"passed_time":121.9231612,"remaining_time":56.48357159,"test":[0.4945424504]}, +{"learn":[0.4922885308],"iteration":3417,"passed_time":121.9623657,"remaining_time":56.44952094,"test":[0.4945421225]}, +{"learn":[0.4922878453],"iteration":3418,"passed_time":121.9987433,"remaining_time":56.41416003,"test":[0.4945413179]}, +{"learn":[0.4922869513],"iteration":3419,"passed_time":122.0336917,"remaining_time":56.37813825,"test":[0.494540841]}, +{"learn":[0.4922842393],"iteration":3420,"passed_time":122.0678061,"remaining_time":56.34173219,"test":[0.4945385463]}, +{"learn":[0.4922832856],"iteration":3421,"passed_time":122.1034237,"remaining_time":56.30602065,"test":[0.4945380396]}, +{"learn":[0.4922828087],"iteration":3422,"passed_time":122.1408376,"remaining_time":56.27113671,"test":[0.4945377416]}, +{"learn":[0.4922818253],"iteration":3423,"passed_time":122.1759087,"remaining_time":56.23517293,"test":[0.4945372946]}, +{"learn":[0.4922813484],"iteration":3424,"passed_time":122.2126474,"remaining_time":56.19997655,"test":[0.4945369071]}, +{"learn":[0.492280663],"iteration":3425,"passed_time":122.252251,"remaining_time":56.16609546,"test":[0.4945366389]}, +{"learn":[0.4922797689],"iteration":3426,"passed_time":122.2883741,"remaining_time":56.13061352,"test":[0.4945360131]}, +{"learn":[0.4922789941],"iteration":3427,"passed_time":122.3247093,"remaining_time":56.0952284,"test":[0.4945355362]}, +{"learn":[0.4922782788],"iteration":3428,"passed_time":122.3614768,"remaining_time":56.06004086,"test":[0.4945349402]}, +{"learn":[0.4922774145],"iteration":3429,"passed_time":122.3986103,"remaining_time":56.02501986,"test":[0.4945342547]}, +{"learn":[0.4922767887],"iteration":3430,"passed_time":122.4355443,"remaining_time":55.98990646,"test":[0.4945337779]}, +{"learn":[0.4922758052],"iteration":3431,"passed_time":122.4708727,"remaining_time":55.95405841,"test":[0.4945333309]}, +{"learn":[0.4922751496],"iteration":3432,"passed_time":122.5075431,"remaining_time":55.91882321,"test":[0.4945329136]}, +{"learn":[0.4922747621],"iteration":3433,"passed_time":122.5464215,"remaining_time":55.88459409,"test":[0.4945326156]}, +{"learn":[0.4922741661],"iteration":3434,"passed_time":122.5852411,"remaining_time":55.85033549,"test":[0.4945321388]}, +{"learn":[0.4922731528],"iteration":3435,"passed_time":122.6221065,"remaining_time":55.81518467,"test":[0.4945315725]}, +{"learn":[0.4922719011],"iteration":3436,"passed_time":122.6573855,"remaining_time":55.77931146,"test":[0.4945306188]}, +{"learn":[0.4922704706],"iteration":3437,"passed_time":122.6921941,"remaining_time":55.74322488,"test":[0.4945296056]}, +{"learn":[0.4922693679],"iteration":3438,"passed_time":122.7280168,"remaining_time":55.70759938,"test":[0.4945291287]}, +{"learn":[0.4922678182],"iteration":3439,"passed_time":122.7634084,"remaining_time":55.67177824,"test":[0.494527877]}, +{"learn":[0.4922670135],"iteration":3440,"passed_time":122.8011995,"remaining_time":55.63704448,"test":[0.4945273406]}, +{"learn":[0.4922663877],"iteration":3441,"passed_time":122.8369847,"remaining_time":55.60140097,"test":[0.4945268339]}, +{"learn":[0.4922654936],"iteration":3442,"passed_time":122.8726564,"remaining_time":55.56570609,"test":[0.4945260889]}, +{"learn":[0.4922646293],"iteration":3443,"passed_time":122.9090376,"remaining_time":55.53033172,"test":[0.4945253438]}, +{"learn":[0.4922636757],"iteration":3444,"passed_time":122.9456234,"remaining_time":55.49504917,"test":[0.4945248968]}, +{"learn":[0.492262722],"iteration":3445,"passed_time":122.9841164,"remaining_time":55.46062589,"test":[0.4945241517]}, +{"learn":[0.4922616491],"iteration":3446,"passed_time":123.0222482,"remaining_time":55.42603754,"test":[0.4945233173]}, +{"learn":[0.4922603378],"iteration":3447,"passed_time":123.0602614,"remaining_time":55.39139378,"test":[0.4945226616]}, +{"learn":[0.4922587881],"iteration":3448,"passed_time":123.0969488,"remaining_time":55.3561518,"test":[0.4945214099]}, +{"learn":[0.4922564635],"iteration":3449,"passed_time":123.1319611,"remaining_time":55.32015642,"test":[0.4945199198]}, +{"learn":[0.4922553608],"iteration":3450,"passed_time":123.167988,"remaining_time":55.28461706,"test":[0.4945192642]}, +{"learn":[0.4922548542],"iteration":3451,"passed_time":123.2051836,"remaining_time":55.24960147,"test":[0.4945188469]}, +{"learn":[0.4922539005],"iteration":3452,"passed_time":123.241658,"remaining_time":55.21426149,"test":[0.4945181913]}, +{"learn":[0.4922531852],"iteration":3453,"passed_time":123.277517,"remaining_time":55.17864543,"test":[0.4945174462]}, +{"learn":[0.4922522018],"iteration":3454,"passed_time":123.3133237,"remaining_time":55.14300581,"test":[0.4945167608]}, +{"learn":[0.4922517249],"iteration":3455,"passed_time":123.3509737,"remaining_time":55.10818963,"test":[0.4945163733]}, +{"learn":[0.4922510991],"iteration":3456,"passed_time":123.3873993,"remaining_time":55.07282533,"test":[0.4945157773]}, +{"learn":[0.4922501156],"iteration":3457,"passed_time":123.4241035,"remaining_time":55.0375846,"test":[0.4945153601]}, +{"learn":[0.4922491321],"iteration":3458,"passed_time":123.4610532,"remaining_time":55.00245243,"test":[0.4945148534]}, +{"learn":[0.49224794],"iteration":3459,"passed_time":123.4973595,"remaining_time":54.96703284,"test":[0.4945137507]}, +{"learn":[0.4922466287],"iteration":3460,"passed_time":123.5332401,"remaining_time":54.93142344,"test":[0.4945131249]}, +{"learn":[0.4922460327],"iteration":3461,"passed_time":123.5696831,"remaining_time":54.89606372,"test":[0.4945127076]}, +{"learn":[0.4922448108],"iteration":3462,"passed_time":123.6057603,"remaining_time":54.86054102,"test":[0.4945116348]}, +{"learn":[0.4922440359],"iteration":3463,"passed_time":123.6414321,"remaining_time":54.82483827,"test":[0.4945112473]}, +{"learn":[0.4922426054],"iteration":3464,"passed_time":123.677189,"remaining_time":54.78917318,"test":[0.4945102937]}, +{"learn":[0.4922404597],"iteration":3465,"passed_time":123.7112882,"remaining_time":54.75277441,"test":[0.4945085353]}, +{"learn":[0.4922400126],"iteration":3466,"passed_time":123.7488325,"remaining_time":54.71790027,"test":[0.4945081777]}, +{"learn":[0.4922389397],"iteration":3467,"passed_time":123.7846871,"remaining_time":54.68227816,"test":[0.4945076115]}, +{"learn":[0.4922380755],"iteration":3468,"passed_time":123.8216624,"remaining_time":54.64715051,"test":[0.4945070452]}, +{"learn":[0.492237241],"iteration":3469,"passed_time":123.8585933,"remaining_time":54.61200225,"test":[0.49450633]}, +{"learn":[0.4922360191],"iteration":3470,"passed_time":123.8949903,"remaining_time":54.57661772,"test":[0.4945057637]}, +{"learn":[0.4922353337],"iteration":3471,"passed_time":123.9319069,"remaining_time":54.54146131,"test":[0.4945052273]}, +{"learn":[0.4922348866],"iteration":3472,"passed_time":123.9704381,"remaining_time":54.50701381,"test":[0.4945046908]}, +{"learn":[0.4922341416],"iteration":3473,"passed_time":124.0073966,"remaining_time":54.47187314,"test":[0.4945043332]}, +{"learn":[0.4922333965],"iteration":3474,"passed_time":124.0449673,"remaining_time":54.43700003,"test":[0.494503916]}, +{"learn":[0.4922321746],"iteration":3475,"passed_time":124.0802531,"remaining_time":54.40112362,"test":[0.4945030517]}, +{"learn":[0.4922309825],"iteration":3476,"passed_time":124.1157523,"remaining_time":54.36534103,"test":[0.4945024258]}, +{"learn":[0.4922305951],"iteration":3477,"passed_time":124.1531198,"remaining_time":54.33037617,"test":[0.4945022172]}, +{"learn":[0.4922294924],"iteration":3478,"passed_time":124.1892529,"remaining_time":54.29487028,"test":[0.4945014126]}, +{"learn":[0.4922279725],"iteration":3479,"passed_time":124.2294653,"remaining_time":54.26114577,"test":[0.4945002801]}, +{"learn":[0.4922264824],"iteration":3480,"passed_time":124.2661217,"remaining_time":54.2258658,"test":[0.494499088]}, +{"learn":[0.4922258863],"iteration":3481,"passed_time":124.3036899,"remaining_time":54.19098258,"test":[0.4944984025]}, +{"learn":[0.4922254393],"iteration":3482,"passed_time":124.3433948,"remaining_time":54.15702841,"test":[0.4944981045]}, +{"learn":[0.4922246048],"iteration":3483,"passed_time":124.3793246,"remaining_time":54.12142828,"test":[0.4944975085]}, +{"learn":[0.4922231147],"iteration":3484,"passed_time":124.4146886,"remaining_time":54.08558201,"test":[0.4944965846]}, +{"learn":[0.4922216544],"iteration":3485,"passed_time":124.4505347,"remaining_time":54.04994536,"test":[0.4944955117]}, +{"learn":[0.4922208795],"iteration":3486,"passed_time":124.4881644,"remaining_time":54.0150825,"test":[0.4944950051]}, +{"learn":[0.492218704],"iteration":3487,"passed_time":124.5225498,"remaining_time":53.97881173,"test":[0.494493515]}, +{"learn":[0.4922177503],"iteration":3488,"passed_time":124.5591725,"remaining_time":53.94351094,"test":[0.4944929785]}, +{"learn":[0.4922168562],"iteration":3489,"passed_time":124.5958524,"remaining_time":53.90823412,"test":[0.4944923825]}, +{"learn":[0.4922144124],"iteration":3490,"passed_time":124.6305788,"remaining_time":53.87211214,"test":[0.4944905943]}, +{"learn":[0.4922136078],"iteration":3491,"passed_time":124.6686231,"remaining_time":53.83742374,"test":[0.4944902367]}, +{"learn":[0.4922128627],"iteration":3492,"passed_time":124.705783,"remaining_time":53.80235184,"test":[0.4944896407]}, +{"learn":[0.4922122369],"iteration":3493,"passed_time":124.7425331,"remaining_time":53.76710213,"test":[0.4944892532]}, +{"learn":[0.4922117302],"iteration":3494,"passed_time":124.781219,"remaining_time":53.73268513,"test":[0.4944888658]}, +{"learn":[0.4922105977],"iteration":3495,"passed_time":124.8164128,"remaining_time":53.6967634,"test":[0.4944879717]}, +{"learn":[0.4922073791],"iteration":3496,"passed_time":124.8501358,"remaining_time":53.66020992,"test":[0.4944856471]}, +{"learn":[0.4922061274],"iteration":3497,"passed_time":124.8856152,"remaining_time":53.62441225,"test":[0.4944848127]}, +{"learn":[0.4922055909],"iteration":3498,"passed_time":124.9242217,"remaining_time":53.58995623,"test":[0.4944846041]}, +{"learn":[0.4922050843],"iteration":3499,"passed_time":124.9621509,"remaining_time":53.55520752,"test":[0.4944841868]}, +{"learn":[0.4922040114],"iteration":3500,"passed_time":124.9974392,"remaining_time":53.5193263,"test":[0.4944833226]}, +{"learn":[0.4922032962],"iteration":3501,"passed_time":125.0351667,"remaining_time":53.48448878,"test":[0.4944826669]}, +{"learn":[0.4922023723],"iteration":3502,"passed_time":125.0714995,"remaining_time":53.4490536,"test":[0.4944820113]}, +{"learn":[0.4922012994],"iteration":3503,"passed_time":125.1078347,"remaining_time":53.41361893,"test":[0.4944812662]}, +{"learn":[0.4922005543],"iteration":3504,"passed_time":125.1447362,"remaining_time":53.37842528,"test":[0.4944806404]}, +{"learn":[0.4921995411],"iteration":3505,"passed_time":125.1818042,"remaining_time":53.34330163,"test":[0.4944801337]}, +{"learn":[0.4921993026],"iteration":3506,"passed_time":125.2308262,"remaining_time":53.3132659,"test":[0.4944798953]}, +{"learn":[0.4921984682],"iteration":3507,"passed_time":125.268888,"remaining_time":53.27855785,"test":[0.4944792396]}, +{"learn":[0.4921973953],"iteration":3508,"passed_time":125.3059266,"remaining_time":53.24341311,"test":[0.4944785244]}, +{"learn":[0.4921966204],"iteration":3509,"passed_time":125.3426794,"remaining_time":53.20814597,"test":[0.4944780774]}, +{"learn":[0.4921939084],"iteration":3510,"passed_time":125.3767038,"remaining_time":53.17172088,"test":[0.4944764382]}, +{"learn":[0.492193521],"iteration":3511,"passed_time":125.4148828,"remaining_time":53.1370574,"test":[0.4944762296]}, +{"learn":[0.4921928057],"iteration":3512,"passed_time":125.4526418,"remaining_time":53.10221416,"test":[0.4944757528]}, +{"learn":[0.4921908984],"iteration":3513,"passed_time":125.4872384,"remaining_time":53.06603195,"test":[0.4944742329]}, +{"learn":[0.4921900937],"iteration":3514,"passed_time":125.5242496,"remaining_time":53.03087073,"test":[0.4944738156]}, +{"learn":[0.4921890805],"iteration":3515,"passed_time":125.5614419,"remaining_time":52.99578492,"test":[0.4944732196]}, +{"learn":[0.4921878884],"iteration":3516,"passed_time":125.5966148,"remaining_time":52.9598464,"test":[0.4944725639]}, +{"learn":[0.4921872625],"iteration":3517,"passed_time":125.6335293,"remaining_time":52.92464195,"test":[0.4944722063]}, +{"learn":[0.4921860704],"iteration":3518,"passed_time":125.6692557,"remaining_time":52.88893656,"test":[0.4944715506]}, +{"learn":[0.4921853254],"iteration":3519,"passed_time":125.7069571,"remaining_time":52.85406151,"test":[0.4944709844]}, +{"learn":[0.4921848485],"iteration":3520,"passed_time":125.7443749,"remaining_time":52.81906573,"test":[0.4944706566]}, +{"learn":[0.4921841333],"iteration":3521,"passed_time":125.7815011,"remaining_time":52.78394623,"test":[0.4944700307]}, +{"learn":[0.4921827326],"iteration":3522,"passed_time":125.8182742,"remaining_time":52.74867755,"test":[0.494468928]}, +{"learn":[0.4921820471],"iteration":3523,"passed_time":125.8539033,"remaining_time":52.71292887,"test":[0.4944686598]}, +{"learn":[0.4921811232],"iteration":3524,"passed_time":125.8895591,"remaining_time":52.67719141,"test":[0.4944680638]}, +{"learn":[0.4921803484],"iteration":3525,"passed_time":125.9260218,"remaining_time":52.64179129,"test":[0.4944675571]}, +{"learn":[0.4921787987],"iteration":3526,"passed_time":125.96109,"remaining_time":52.6058082,"test":[0.4944666929]}, +{"learn":[0.492178143],"iteration":3527,"passed_time":125.9986645,"remaining_time":52.57087137,"test":[0.4944659478]}, +{"learn":[0.4921772787],"iteration":3528,"passed_time":126.0343916,"remaining_time":52.53516294,"test":[0.494465471]}, +{"learn":[0.4921764443],"iteration":3529,"passed_time":126.0722504,"remaining_time":52.50034224,"test":[0.4944649941]}, +{"learn":[0.492175878],"iteration":3530,"passed_time":126.1112583,"remaining_time":52.46599786,"test":[0.4944645173]}, +{"learn":[0.4921748051],"iteration":3531,"passed_time":126.146963,"remaining_time":52.43027796,"test":[0.4944639809]}, +{"learn":[0.4921741197],"iteration":3532,"passed_time":126.1835167,"remaining_time":52.39491054,"test":[0.4944634444]}, +{"learn":[0.4921736131],"iteration":3533,"passed_time":126.2202361,"remaining_time":52.35961123,"test":[0.494463057]}, +{"learn":[0.4921730766],"iteration":3534,"passed_time":126.2578428,"remaining_time":52.32467882,"test":[0.4944626696]}, +{"learn":[0.4921724508],"iteration":3535,"passed_time":126.2954305,"remaining_time":52.28973708,"test":[0.4944621927]}, +{"learn":[0.4921718249],"iteration":3536,"passed_time":126.3340336,"remaining_time":52.25521377,"test":[0.4944616861]}, +{"learn":[0.4921714375],"iteration":3537,"passed_time":126.3726825,"remaining_time":52.22070713,"test":[0.4944613583]}, +{"learn":[0.4921708712],"iteration":3538,"passed_time":126.4102678,"remaining_time":52.18575904,"test":[0.4944609708]}, +{"learn":[0.4921698878],"iteration":3539,"passed_time":126.445456,"remaining_time":52.14982083,"test":[0.4944606132]}, +{"learn":[0.4921689043],"iteration":3540,"passed_time":126.4825436,"remaining_time":52.11466567,"test":[0.4944599575]}, +{"learn":[0.4921678612],"iteration":3541,"passed_time":126.5185395,"remaining_time":52.07906001,"test":[0.4944590933]}, +{"learn":[0.4921669075],"iteration":3542,"passed_time":126.5545871,"remaining_time":52.04347541,"test":[0.4944584078]}, +{"learn":[0.492165626],"iteration":3543,"passed_time":126.5904081,"remaining_time":52.00779748,"test":[0.4944578714]}, +{"learn":[0.4921648512],"iteration":3544,"passed_time":126.6275523,"remaining_time":51.9726625,"test":[0.4944573051]}, +{"learn":[0.4921635995],"iteration":3545,"passed_time":126.6630442,"remaining_time":51.93684892,"test":[0.4944565005]}, +{"learn":[0.4921631226],"iteration":3546,"passed_time":126.7006355,"remaining_time":51.90189551,"test":[0.4944560236]}, +{"learn":[0.4921621094],"iteration":3547,"passed_time":126.7365528,"remaining_time":51.86625555,"test":[0.494455517]}, +{"learn":[0.4921609173],"iteration":3548,"passed_time":126.7729602,"remaining_time":51.83081578,"test":[0.4944546825]}, +{"learn":[0.4921596954],"iteration":3549,"passed_time":126.8085098,"remaining_time":51.79502513,"test":[0.4944537587]}, +{"learn":[0.4921578774],"iteration":3550,"passed_time":126.8423758,"remaining_time":51.75854762,"test":[0.4944527156]}, +{"learn":[0.4921567449],"iteration":3551,"passed_time":126.8792735,"remaining_time":51.72330745,"test":[0.4944517321]}, +{"learn":[0.4921554634],"iteration":3552,"passed_time":126.9143857,"remaining_time":51.68733918,"test":[0.4944509274]}, +{"learn":[0.4921543011],"iteration":3553,"passed_time":126.9498196,"remaining_time":51.65150228,"test":[0.4944501824]}, +{"learn":[0.4921539137],"iteration":3554,"passed_time":126.9888593,"remaining_time":51.61713127,"test":[0.494449795]}, +{"learn":[0.4921515295],"iteration":3555,"passed_time":127.0234735,"remaining_time":51.58096057,"test":[0.494447977]}, +{"learn":[0.4921509037],"iteration":3556,"passed_time":127.0597918,"remaining_time":51.54548202,"test":[0.4944475598]}, +{"learn":[0.492150397],"iteration":3557,"passed_time":127.0974471,"remaining_time":51.51054488,"test":[0.4944472618]}, +{"learn":[0.4921497414],"iteration":3558,"passed_time":127.1342615,"remaining_time":51.47526577,"test":[0.4944466359]}, +{"learn":[0.4921485195],"iteration":3559,"passed_time":127.1695251,"remaining_time":51.43935847,"test":[0.4944458312]}, +{"learn":[0.492144824],"iteration":3560,"passed_time":127.2040504,"remaining_time":51.40315321,"test":[0.494442851]}, +{"learn":[0.492144079],"iteration":3561,"passed_time":127.241966,"remaining_time":51.36831755,"test":[0.4944426126]}, +{"learn":[0.4921433637],"iteration":3562,"passed_time":127.2804963,"remaining_time":51.33372811,"test":[0.4944421358]}, +{"learn":[0.4921422312],"iteration":3563,"passed_time":127.3175429,"remaining_time":51.29853862,"test":[0.4944415397]}, +{"learn":[0.492139549],"iteration":3564,"passed_time":127.3531916,"remaining_time":51.26278541,"test":[0.4944395132]}, +{"learn":[0.4921385953],"iteration":3565,"passed_time":127.3905377,"remaining_time":51.22771483,"test":[0.4944390065]}, +{"learn":[0.4921376715],"iteration":3566,"passed_time":127.4268905,"remaining_time":51.19224393,"test":[0.4944384105]}, +{"learn":[0.4921360323],"iteration":3567,"passed_time":127.4623055,"remaining_time":51.15639616,"test":[0.4944373376]}, +{"learn":[0.4921337077],"iteration":3568,"passed_time":127.4958584,"remaining_time":51.119802,"test":[0.4944350726]}, +{"learn":[0.492132307],"iteration":3569,"passed_time":127.5323749,"remaining_time":51.08439666,"test":[0.4944342381]}, +{"learn":[0.4921314726],"iteration":3570,"passed_time":127.5685396,"remaining_time":51.04884991,"test":[0.4944335229]}, +{"learn":[0.4921303699],"iteration":3571,"passed_time":127.6035622,"remaining_time":51.01284624,"test":[0.4944326288]}, +{"learn":[0.4921298036],"iteration":3572,"passed_time":127.6411381,"remaining_time":50.97786289,"test":[0.494432152]}, +{"learn":[0.4921282837],"iteration":3573,"passed_time":127.6756722,"remaining_time":50.94166438,"test":[0.4944311089]}, +{"learn":[0.4921278963],"iteration":3574,"passed_time":127.714268,"remaining_time":50.90708583,"test":[0.4944308705]}, +{"learn":[0.4921255121],"iteration":3575,"passed_time":127.7486677,"remaining_time":50.8708341,"test":[0.4944289631]}, +{"learn":[0.4921249459],"iteration":3576,"passed_time":127.7870507,"remaining_time":50.83616807,"test":[0.4944286055]}, +{"learn":[0.4921242902],"iteration":3577,"passed_time":127.824536,"remaining_time":50.80114315,"test":[0.4944282181]}, +{"learn":[0.4921233961],"iteration":3578,"passed_time":127.8602183,"remaining_time":50.76540099,"test":[0.4944275922]}, +{"learn":[0.4921219358],"iteration":3579,"passed_time":127.8966427,"remaining_time":50.72995326,"test":[0.4944265789]}, +{"learn":[0.49212131],"iteration":3580,"passed_time":127.93401,"remaining_time":50.69487857,"test":[0.4944261319]}, +{"learn":[0.4921203861],"iteration":3581,"passed_time":127.9706962,"remaining_time":50.659533,"test":[0.4944258935]}, +{"learn":[0.4921190152],"iteration":3582,"passed_time":128.0055877,"remaining_time":50.62347692,"test":[0.4944249398]}, +{"learn":[0.4921177933],"iteration":3583,"passed_time":128.0401467,"remaining_time":50.58729011,"test":[0.4944240159]}, +{"learn":[0.4921161542],"iteration":3584,"passed_time":128.075265,"remaining_time":50.55132495,"test":[0.4944230623]}, +{"learn":[0.4921152601],"iteration":3585,"passed_time":128.1116588,"remaining_time":50.51586323,"test":[0.4944225258]}, +{"learn":[0.4921145449],"iteration":3586,"passed_time":128.1491285,"remaining_time":50.48082482,"test":[0.4944219894]}, +{"learn":[0.4921137104],"iteration":3587,"passed_time":128.1851912,"remaining_time":50.44523133,"test":[0.4944215424]}, +{"learn":[0.4921129057],"iteration":3588,"passed_time":128.2233366,"remaining_time":50.41045638,"test":[0.4944209463]}, +{"learn":[0.4921117434],"iteration":3589,"passed_time":128.2581371,"remaining_time":50.37436581,"test":[0.4944203205]}, +{"learn":[0.4921110282],"iteration":3590,"passed_time":128.2955354,"remaining_time":50.33929529,"test":[0.4944198436]}, +{"learn":[0.4921097467],"iteration":3591,"passed_time":128.3312016,"remaining_time":50.3035445,"test":[0.4944190092]}, +{"learn":[0.4921089122],"iteration":3592,"passed_time":128.3687366,"remaining_time":50.26852558,"test":[0.4944183535]}, +{"learn":[0.4921075115],"iteration":3593,"passed_time":128.4097417,"remaining_time":50.23486277,"test":[0.4944169826]}, +{"learn":[0.4921068559],"iteration":3594,"passed_time":128.447767,"remaining_time":50.20003133,"test":[0.494416774]}, +{"learn":[0.4921059618],"iteration":3595,"passed_time":128.4836807,"remaining_time":50.16437368,"test":[0.4944162673]}, +{"learn":[0.4921056042],"iteration":3596,"passed_time":128.5219953,"remaining_time":50.12965233,"test":[0.4944159097]}, +{"learn":[0.4921042333],"iteration":3597,"passed_time":128.5573348,"remaining_time":50.09376972,"test":[0.4944150753]}, +{"learn":[0.4921034584],"iteration":3598,"passed_time":128.5935176,"remaining_time":50.05821564,"test":[0.4944146282]}, +{"learn":[0.4921030114],"iteration":3599,"passed_time":128.631094,"remaining_time":50.02320322,"test":[0.4944140918]}, +{"learn":[0.4921019087],"iteration":3600,"passed_time":128.667571,"remaining_time":49.98776225,"test":[0.4944134957]}, +{"learn":[0.4921010146],"iteration":3601,"passed_time":128.7032469,"remaining_time":49.95200977,"test":[0.4944128699]}, +{"learn":[0.4921002695],"iteration":3602,"passed_time":128.7399531,"remaining_time":49.91665683,"test":[0.494412244]}, +{"learn":[0.4920996735],"iteration":3603,"passed_time":128.7766053,"remaining_time":49.88128218,"test":[0.4944117076]}, +{"learn":[0.4920986602],"iteration":3604,"passed_time":128.8130607,"remaining_time":49.84583071,"test":[0.4944112606]}, +{"learn":[0.4920977363],"iteration":3605,"passed_time":128.8501948,"remaining_time":49.81064101,"test":[0.4944104559]}, +{"learn":[0.4920971999],"iteration":3606,"passed_time":128.8885038,"remaining_time":49.77590401,"test":[0.4944102473]}, +{"learn":[0.4920961568],"iteration":3607,"passed_time":128.9249038,"remaining_time":49.7404285,"test":[0.4944096512]}, +{"learn":[0.4920954416],"iteration":3608,"passed_time":128.9615073,"remaining_time":49.70503094,"test":[0.4944091446]}, +{"learn":[0.4920932362],"iteration":3609,"passed_time":128.99661,"remaining_time":49.66905484,"test":[0.494407267]}, +{"learn":[0.492092819],"iteration":3610,"passed_time":129.0341048,"remaining_time":49.63399932,"test":[0.4944069094]}, +{"learn":[0.4920921633],"iteration":3611,"passed_time":129.0724818,"remaining_time":49.59928147,"test":[0.494406522]}, +{"learn":[0.4920914481],"iteration":3612,"passed_time":129.1094777,"remaining_time":49.56403145,"test":[0.4944060452]}, +{"learn":[0.4920906136],"iteration":3613,"passed_time":129.1464236,"remaining_time":49.52876125,"test":[0.4944055087]}, +{"learn":[0.4920895705],"iteration":3614,"passed_time":129.182005,"remaining_time":49.49296733,"test":[0.494404704]}, +{"learn":[0.4920887062],"iteration":3615,"passed_time":129.2178453,"remaining_time":49.45727264,"test":[0.4944042868]}, +{"learn":[0.4920877526],"iteration":3616,"passed_time":129.2554846,"remaining_time":49.42226574,"test":[0.4944036908]}, +{"learn":[0.4920868287],"iteration":3617,"passed_time":129.2923031,"remaining_time":49.38694385,"test":[0.4944029457]}, +{"learn":[0.4920855174],"iteration":3618,"passed_time":129.3282938,"remaining_time":49.35130527,"test":[0.4944020516]}, +{"learn":[0.4920850108],"iteration":3619,"passed_time":129.3668211,"remaining_time":49.31663346,"test":[0.4944017238]}, +{"learn":[0.4920843849],"iteration":3620,"passed_time":129.4044291,"remaining_time":49.28160942,"test":[0.4944012172]}, +{"learn":[0.4920831034],"iteration":3621,"passed_time":129.4406154,"remaining_time":49.24604308,"test":[0.4944001443]}, +{"learn":[0.4920817027],"iteration":3622,"passed_time":129.4765395,"remaining_time":49.21037671,"test":[0.4943992502]}, +{"learn":[0.4920805404],"iteration":3623,"passed_time":129.5118753,"remaining_time":49.17448686,"test":[0.494398535]}, +{"learn":[0.4920796463],"iteration":3624,"passed_time":129.5485992,"remaining_time":49.13912382,"test":[0.4943981177]}, +{"learn":[0.4920783648],"iteration":3625,"passed_time":129.5849598,"remaining_time":49.10362237,"test":[0.4943971641]}, +{"learn":[0.4920779774],"iteration":3626,"passed_time":129.6226955,"remaining_time":49.068641,"test":[0.4943968064]}, +{"learn":[0.4920769939],"iteration":3627,"passed_time":129.6594765,"remaining_time":49.03329708,"test":[0.4943963892]}, +{"learn":[0.4920745203],"iteration":3628,"passed_time":129.6950537,"remaining_time":48.99749754,"test":[0.4943947203]}, +{"learn":[0.4920740733],"iteration":3629,"passed_time":129.7328906,"remaining_time":48.96255101,"test":[0.4943945117]}, +{"learn":[0.4920734177],"iteration":3630,"passed_time":129.7688373,"remaining_time":48.92689018,"test":[0.4943940348]}, +{"learn":[0.492072762],"iteration":3631,"passed_time":129.8068539,"remaining_time":48.89200883,"test":[0.4943933494]}, +{"learn":[0.492072166],"iteration":3632,"passed_time":129.8432988,"remaining_time":48.85653438,"test":[0.4943929917]}, +{"learn":[0.4920711527],"iteration":3633,"passed_time":129.8795564,"remaining_time":48.82098902,"test":[0.4943923063]}, +{"learn":[0.492070348],"iteration":3634,"passed_time":129.9161901,"remaining_time":48.78558446,"test":[0.494391889]}, +{"learn":[0.492069603],"iteration":3635,"passed_time":129.953132,"remaining_time":48.75029485,"test":[0.4943913824]}, +{"learn":[0.4920685301],"iteration":3636,"passed_time":129.9901133,"remaining_time":48.71501909,"test":[0.494390846]}, +{"learn":[0.492067934],"iteration":3637,"passed_time":130.0273091,"remaining_time":48.67982269,"test":[0.4943904585]}, +{"learn":[0.4920670698],"iteration":3638,"passed_time":130.0634664,"remaining_time":48.64423681,"test":[0.4943898923]}, +{"learn":[0.4920654604],"iteration":3639,"passed_time":130.0987655,"remaining_time":48.60832998,"test":[0.4943885214]}, +{"learn":[0.492064626],"iteration":3640,"passed_time":130.1355258,"remaining_time":48.57296883,"test":[0.494388134]}, +{"learn":[0.4920639703],"iteration":3641,"passed_time":130.1724377,"remaining_time":48.53766346,"test":[0.4943874783]}, +{"learn":[0.4920626888],"iteration":3642,"passed_time":130.2074147,"remaining_time":48.50163649,"test":[0.494386763]}, +{"learn":[0.4920604238],"iteration":3643,"passed_time":130.2410252,"remaining_time":48.4651016,"test":[0.4943849153]}, +{"learn":[0.4920596192],"iteration":3644,"passed_time":130.2767871,"remaining_time":48.42936803,"test":[0.4943843193]}, +{"learn":[0.4920581291],"iteration":3645,"passed_time":130.3132399,"remaining_time":48.39389107,"test":[0.4943834848]}, +{"learn":[0.492056788],"iteration":3646,"passed_time":130.3476234,"remaining_time":48.35764585,"test":[0.4943823225]}, +{"learn":[0.4920553574],"iteration":3647,"passed_time":130.3831713,"remaining_time":48.32183323,"test":[0.4943811602]}, +{"learn":[0.492054523],"iteration":3648,"passed_time":130.420036,"remaining_time":48.28650824,"test":[0.4943808622]}, +{"learn":[0.4920538673],"iteration":3649,"passed_time":130.4577008,"remaining_time":48.25147837,"test":[0.4943804748]}, +{"learn":[0.4920523474],"iteration":3650,"passed_time":130.4949248,"remaining_time":48.21628417,"test":[0.4943794615]}, +{"learn":[0.492051513],"iteration":3651,"passed_time":130.5307612,"remaining_time":48.18057671,"test":[0.494378776]}, +{"learn":[0.4920508871],"iteration":3652,"passed_time":130.5666416,"remaining_time":48.14488536,"test":[0.4943782992]}, +{"learn":[0.492049844],"iteration":3653,"passed_time":130.6016008,"remaining_time":48.10885459,"test":[0.4943777627]}, +{"learn":[0.4920486519],"iteration":3654,"passed_time":130.6365112,"remaining_time":48.07280646,"test":[0.4943768091]}, +{"learn":[0.4920478771],"iteration":3655,"passed_time":130.6734364,"remaining_time":48.0374996,"test":[0.4943762428]}, +{"learn":[0.4920468638],"iteration":3656,"passed_time":130.7097832,"remaining_time":48.00197943,"test":[0.494375766]}, +{"learn":[0.4920459995],"iteration":3657,"passed_time":130.7481018,"remaining_time":47.96718224,"test":[0.4943754084]}, +{"learn":[0.4920455823],"iteration":3658,"passed_time":130.7864323,"remaining_time":47.93238744,"test":[0.4943749911]}, +{"learn":[0.4920449564],"iteration":3659,"passed_time":130.8240212,"remaining_time":47.89731924,"test":[0.4943745441]}, +{"learn":[0.4920439432],"iteration":3660,"passed_time":130.8604035,"remaining_time":47.86180832,"test":[0.4943738586]}, +{"learn":[0.492042453],"iteration":3661,"passed_time":130.896499,"remaining_time":47.82619216,"test":[0.4943729348]}, +{"learn":[0.49204141],"iteration":3662,"passed_time":130.9326238,"remaining_time":47.7905864,"test":[0.4943722791]}, +{"learn":[0.4920405755],"iteration":3663,"passed_time":130.9683676,"remaining_time":47.75484145,"test":[0.4943715341]}, +{"learn":[0.4920399795],"iteration":3664,"passed_time":131.0062103,"remaining_time":47.71986107,"test":[0.4943712658]}, +{"learn":[0.4920390854],"iteration":3665,"passed_time":131.0420726,"remaining_time":47.68415844,"test":[0.4943708486]}, +{"learn":[0.4920385787],"iteration":3666,"passed_time":131.0803053,"remaining_time":47.64931741,"test":[0.4943705506]}, +{"learn":[0.4920372972],"iteration":3667,"passed_time":131.1174866,"remaining_time":47.61409275,"test":[0.4943697757]}, +{"learn":[0.4920364032],"iteration":3668,"passed_time":131.1549662,"remaining_time":47.5789752,"test":[0.4943692393]}, +{"learn":[0.4920353303],"iteration":3669,"passed_time":131.1914974,"remaining_time":47.54351267,"test":[0.494368524]}, +{"learn":[0.4920345256],"iteration":3670,"passed_time":131.2286702,"remaining_time":47.50828184,"test":[0.4943680472]}, +{"learn":[0.4920335422],"iteration":3671,"passed_time":131.2658637,"remaining_time":47.47305746,"test":[0.4943675704]}, +{"learn":[0.4920325587],"iteration":3672,"passed_time":131.3021672,"remaining_time":47.43751044,"test":[0.4943670637]}, +{"learn":[0.4920315752],"iteration":3673,"passed_time":131.3392259,"remaining_time":47.40223558,"test":[0.4943663783]}, +{"learn":[0.4920291612],"iteration":3674,"passed_time":131.3736709,"remaining_time":47.36601739,"test":[0.4943646199]}, +{"learn":[0.4920272539],"iteration":3675,"passed_time":131.4079315,"remaining_time":47.32973374,"test":[0.4943635768]}, +{"learn":[0.492026628],"iteration":3676,"passed_time":131.4470457,"remaining_time":47.29519757,"test":[0.4943629212]}, +{"learn":[0.4920259426],"iteration":3677,"passed_time":131.4859453,"remaining_time":47.26058176,"test":[0.4943626232]}, +{"learn":[0.4920251081],"iteration":3678,"passed_time":131.5235532,"remaining_time":47.22549981,"test":[0.4943617589]}, +{"learn":[0.492024065],"iteration":3679,"passed_time":131.5607632,"remaining_time":47.19027375,"test":[0.4943612523]}, +{"learn":[0.4920230815],"iteration":3680,"passed_time":131.5966176,"remaining_time":47.15456087,"test":[0.494360686]}, +{"learn":[0.4920227239],"iteration":3681,"passed_time":131.6344718,"remaining_time":47.11956378,"test":[0.4943603582]}, +{"learn":[0.4920208166],"iteration":3682,"passed_time":131.6698171,"remaining_time":47.08366796,"test":[0.4943587787]}, +{"learn":[0.4920200119],"iteration":3683,"passed_time":131.7048874,"remaining_time":47.04767422,"test":[0.4943579442]}, +{"learn":[0.4920177171],"iteration":3684,"passed_time":131.73962,"remaining_time":47.01156047,"test":[0.4943560369]}, +{"learn":[0.4920171509],"iteration":3685,"passed_time":131.7787863,"remaining_time":46.97702799,"test":[0.4943556196]}, +{"learn":[0.4920155117],"iteration":3686,"passed_time":131.8145456,"remaining_time":46.94127974,"test":[0.4943547256]}, +{"learn":[0.4920150647],"iteration":3687,"passed_time":131.852606,"remaining_time":46.90635006,"test":[0.4943545169]}, +{"learn":[0.4920140812],"iteration":3688,"passed_time":131.8871572,"remaining_time":46.8701716,"test":[0.4943537123]}, +{"learn":[0.4920131574],"iteration":3689,"passed_time":131.9233289,"remaining_time":46.83456932,"test":[0.4943533547]}, +{"learn":[0.4920126805],"iteration":3690,"passed_time":131.9612293,"remaining_time":46.79957982,"test":[0.4943530566]}, +{"learn":[0.4920123229],"iteration":3691,"passed_time":131.9993313,"remaining_time":46.76466015,"test":[0.4943526692]}, +{"learn":[0.4920117567],"iteration":3692,"passed_time":132.0375157,"remaining_time":46.72976795,"test":[0.4943524904]}, +{"learn":[0.4920110116],"iteration":3693,"passed_time":132.0743739,"remaining_time":46.69440505,"test":[0.4943520135]}, +{"learn":[0.4920101771],"iteration":3694,"passed_time":132.1115304,"remaining_time":46.65914672,"test":[0.4943515069]}, +{"learn":[0.4920085678],"iteration":3695,"passed_time":132.1465933,"remaining_time":46.62314872,"test":[0.494350285]}, +{"learn":[0.4920077929],"iteration":3696,"passed_time":132.1826299,"remaining_time":46.58749439,"test":[0.4943498082]}, +{"learn":[0.4920072267],"iteration":3697,"passed_time":132.2186548,"remaining_time":46.55183572,"test":[0.4943493015]}, +{"learn":[0.4920063326],"iteration":3698,"passed_time":132.2552663,"remaining_time":46.51638319,"test":[0.4943487353]}, +{"learn":[0.4920055876],"iteration":3699,"passed_time":132.2916854,"remaining_time":46.48086245,"test":[0.4943481988]}, +{"learn":[0.4920049319],"iteration":3700,"passed_time":132.3292167,"remaining_time":46.44573157,"test":[0.4943479306]}, +{"learn":[0.4920043955],"iteration":3701,"passed_time":132.3668641,"remaining_time":46.41064009,"test":[0.4943474836]}, +{"learn":[0.4920036802],"iteration":3702,"passed_time":132.4034062,"remaining_time":46.37516009,"test":[0.4943469173]}, +{"learn":[0.4920014451],"iteration":3703,"passed_time":132.4382301,"remaining_time":46.33907836,"test":[0.494345457]}, +{"learn":[0.4920007],"iteration":3704,"passed_time":132.4780776,"remaining_time":46.30475318,"test":[0.4943450398]}, +{"learn":[0.4919984648],"iteration":3705,"passed_time":132.5124243,"remaining_time":46.26850433,"test":[0.494343043]}, +{"learn":[0.4919976304],"iteration":3706,"passed_time":132.5485187,"remaining_time":46.23286611,"test":[0.4943425662]}, +{"learn":[0.4919970641],"iteration":3707,"passed_time":132.5841216,"remaining_time":46.1970564,"test":[0.4943421192]}, +{"learn":[0.4919962595],"iteration":3708,"passed_time":132.6198504,"remaining_time":46.16129061,"test":[0.4943415529]}, +{"learn":[0.4919956336],"iteration":3709,"passed_time":132.656383,"remaining_time":46.12580435,"test":[0.4943409271]}, +{"learn":[0.4919947991],"iteration":3710,"passed_time":132.6925937,"remaining_time":46.09020569,"test":[0.4943405099]}, +{"learn":[0.4919937561],"iteration":3711,"passed_time":132.728962,"remaining_time":46.05466137,"test":[0.494339735]}, +{"learn":[0.4919925938],"iteration":3712,"passed_time":132.7643312,"remaining_time":46.01877032,"test":[0.4943390197]}, +{"learn":[0.4919917593],"iteration":3713,"passed_time":132.8021371,"remaining_time":45.98372329,"test":[0.4943385727]}, +{"learn":[0.4919908056],"iteration":3714,"passed_time":132.8386171,"remaining_time":45.94821614,"test":[0.4943381257]}, +{"learn":[0.4919899414],"iteration":3715,"passed_time":132.8747401,"remaining_time":45.91258512,"test":[0.4943374104]}, +{"learn":[0.4919891069],"iteration":3716,"passed_time":132.912834,"remaining_time":45.8776341,"test":[0.4943369634]}, +{"learn":[0.4919884512],"iteration":3717,"passed_time":132.9500755,"remaining_time":45.84238753,"test":[0.4943363673]}, +{"learn":[0.491988034],"iteration":3718,"passed_time":132.9879893,"remaining_time":45.80737142,"test":[0.4943361587]}, +{"learn":[0.4919871101],"iteration":3719,"passed_time":133.0255788,"remaining_time":45.77224217,"test":[0.4943354733]}, +{"learn":[0.4919865141],"iteration":3720,"passed_time":133.0624877,"remaining_time":45.73687766,"test":[0.4943351156]}, +{"learn":[0.4919858882],"iteration":3721,"passed_time":133.1000353,"remaining_time":45.70173162,"test":[0.4943346984]}, +{"learn":[0.491985322],"iteration":3722,"passed_time":133.1378517,"remaining_time":45.6666765,"test":[0.49433446]}, +{"learn":[0.4919846962],"iteration":3723,"passed_time":133.1754369,"remaining_time":45.63154069,"test":[0.4943340129]}, +{"learn":[0.4919840107],"iteration":3724,"passed_time":133.211294,"remaining_time":45.59581205,"test":[0.4943335063]}, +{"learn":[0.491982759],"iteration":3725,"passed_time":133.2464276,"remaining_time":45.55983594,"test":[0.4943325824]}, +{"learn":[0.4919819841],"iteration":3726,"passed_time":133.282872,"remaining_time":45.52430803,"test":[0.4943320758]}, +{"learn":[0.4919806728],"iteration":3727,"passed_time":133.3185286,"remaining_time":45.48851083,"test":[0.4943313903]}, +{"learn":[0.4919800172],"iteration":3728,"passed_time":133.3555816,"remaining_time":45.45318966,"test":[0.4943309731]}, +{"learn":[0.4919793615],"iteration":3729,"passed_time":133.3920521,"remaining_time":45.41766921,"test":[0.4943304069]}, +{"learn":[0.4919785271],"iteration":3730,"passed_time":133.4284921,"remaining_time":45.3821379,"test":[0.4943297214]}, +{"learn":[0.4919772754],"iteration":3731,"passed_time":133.4629968,"remaining_time":45.34594855,"test":[0.4943290956]}, +{"learn":[0.4919764707],"iteration":3732,"passed_time":133.5054575,"remaining_time":45.31246038,"test":[0.4943284399]}, +{"learn":[0.4919754872],"iteration":3733,"passed_time":133.543873,"remaining_time":45.27759593,"test":[0.4943279035]}, +{"learn":[0.4919742653],"iteration":3734,"passed_time":133.58103,"remaining_time":45.24230335,"test":[0.4943272478]}, +{"learn":[0.4919731925],"iteration":3735,"passed_time":133.6171873,"remaining_time":45.2066715,"test":[0.4943262941]}, +{"learn":[0.4919719706],"iteration":3736,"passed_time":133.6523877,"remaining_time":45.17071598,"test":[0.4943254299]}, +{"learn":[0.4919713149],"iteration":3737,"passed_time":133.6877727,"remaining_time":45.13482321,"test":[0.4943251319]}, +{"learn":[0.4919702122],"iteration":3738,"passed_time":133.7240493,"remaining_time":45.09923138,"test":[0.494324506]}, +{"learn":[0.4919694076],"iteration":3739,"passed_time":133.7616234,"remaining_time":45.06407632,"test":[0.4943238504]}, +{"learn":[0.4919686923],"iteration":3740,"passed_time":133.7985561,"remaining_time":45.02870412,"test":[0.4943233139]}, +{"learn":[0.4919675002],"iteration":3741,"passed_time":133.8347299,"remaining_time":44.99307596,"test":[0.4943225987]}, +{"learn":[0.4919659505],"iteration":3742,"passed_time":133.8702333,"remaining_time":44.95722236,"test":[0.4943215854]}, +{"learn":[0.4919648776],"iteration":3743,"passed_time":133.9058658,"remaining_time":44.92141225,"test":[0.4943206913]}, +{"learn":[0.4919643114],"iteration":3744,"passed_time":133.9427017,"remaining_time":44.88600551,"test":[0.4943202145]}, +{"learn":[0.4919637153],"iteration":3745,"passed_time":133.97919,"remaining_time":44.85048164,"test":[0.4943197972]}, +{"learn":[0.491962553],"iteration":3746,"passed_time":134.0154889,"remaining_time":44.81489395,"test":[0.494318933]}, +{"learn":[0.4919613907],"iteration":3747,"passed_time":134.0515598,"remaining_time":44.7792297,"test":[0.4943183369]}, +{"learn":[0.4919608245],"iteration":3748,"passed_time":134.0880337,"remaining_time":44.74369968,"test":[0.4943178303]}, +{"learn":[0.4919600794],"iteration":3749,"passed_time":134.1245746,"remaining_time":44.70819155,"test":[0.4943174131]}, +{"learn":[0.4919588873],"iteration":3750,"passed_time":134.1595472,"remaining_time":44.67216061,"test":[0.4943169362]}, +{"learn":[0.4919584105],"iteration":3751,"passed_time":134.1969887,"remaining_time":44.63695147,"test":[0.4943165488]}, +{"learn":[0.4919577847],"iteration":3752,"passed_time":134.2328511,"remaining_time":44.60121646,"test":[0.4943158931]}, +{"learn":[0.4919572482],"iteration":3753,"passed_time":134.270637,"remaining_time":44.56611981,"test":[0.4943155653]}, +{"learn":[0.4919561753],"iteration":3754,"passed_time":134.3059309,"remaining_time":44.53019547,"test":[0.4943144626]}, +{"learn":[0.4919558475],"iteration":3755,"passed_time":134.3435021,"remaining_time":44.49502572,"test":[0.494314254]}, +{"learn":[0.491955013],"iteration":3756,"passed_time":134.3800519,"remaining_time":44.45951677,"test":[0.494313807]}, +{"learn":[0.4919543872],"iteration":3757,"passed_time":134.4175745,"remaining_time":44.42432876,"test":[0.4943132705]}, +{"learn":[0.4919539104],"iteration":3758,"passed_time":134.4567963,"remaining_time":44.38970049,"test":[0.4943130321]}, +{"learn":[0.4919531951],"iteration":3759,"passed_time":134.4931491,"remaining_time":44.35412364,"test":[0.4943124957]}, +{"learn":[0.4919521222],"iteration":3760,"passed_time":134.5295665,"remaining_time":44.31856764,"test":[0.4943115122]}, +{"learn":[0.4919515858],"iteration":3761,"passed_time":134.5655348,"remaining_time":44.28286341,"test":[0.4943111546]}, +{"learn":[0.4919510791],"iteration":3762,"passed_time":134.6009621,"remaining_time":44.24698116,"test":[0.4943107075]}, +{"learn":[0.4919498572],"iteration":3763,"passed_time":134.6365392,"remaining_time":44.21114838,"test":[0.4943099029]}, +{"learn":[0.4919490526],"iteration":3764,"passed_time":134.6735296,"remaining_time":44.1757793,"test":[0.494309426]}, +{"learn":[0.491948695],"iteration":3765,"passed_time":134.7112451,"remaining_time":44.14064695,"test":[0.4943090982]}, +{"learn":[0.4919476817],"iteration":3766,"passed_time":134.7479343,"remaining_time":44.10517731,"test":[0.4943082637]}, +{"learn":[0.4919462512],"iteration":3767,"passed_time":134.7845267,"remaining_time":44.06967541,"test":[0.4943071909]}, +{"learn":[0.4919458637],"iteration":3768,"passed_time":134.8223628,"remaining_time":44.03457909,"test":[0.4943070716]}, +{"learn":[0.4919452081],"iteration":3769,"passed_time":134.8592402,"remaining_time":43.99916856,"test":[0.4943064756]}, +{"learn":[0.4919441054],"iteration":3770,"passed_time":134.8945902,"remaining_time":43.96325943,"test":[0.4943057901]}, +{"learn":[0.4919434795],"iteration":3771,"passed_time":134.9328026,"remaining_time":43.92828249,"test":[0.4943054921]}, +{"learn":[0.4919402311],"iteration":3772,"passed_time":134.967724,"remaining_time":43.8922336,"test":[0.4943034358]}, +{"learn":[0.4919392774],"iteration":3773,"passed_time":135.0047264,"remaining_time":43.85686129,"test":[0.4943029887]}, +{"learn":[0.491938443],"iteration":3774,"passed_time":135.0399141,"remaining_time":43.82089929,"test":[0.4943023927]}, +{"learn":[0.4919377575],"iteration":3775,"passed_time":135.07705,"remaining_time":43.78556918,"test":[0.4943017668]}, +{"learn":[0.4919373403],"iteration":3776,"passed_time":135.1160842,"remaining_time":43.75085277,"test":[0.4943014688]}, +{"learn":[0.4919362078],"iteration":3777,"passed_time":135.1514892,"remaining_time":43.71496025,"test":[0.4943004853]}, +{"learn":[0.4919348965],"iteration":3778,"passed_time":135.1860975,"remaining_time":43.67881055,"test":[0.4942997105]}, +{"learn":[0.4919338236],"iteration":3779,"passed_time":135.2210188,"remaining_time":43.64276267,"test":[0.4942989654]}, +{"learn":[0.4919326017],"iteration":3780,"passed_time":135.2562797,"remaining_time":43.60682489,"test":[0.4942977733]}, +{"learn":[0.4919318864],"iteration":3781,"passed_time":135.2927669,"remaining_time":43.57128241,"test":[0.4942973561]}, +{"learn":[0.4919312606],"iteration":3782,"passed_time":135.3305738,"remaining_time":43.53616396,"test":[0.4942968197]}, +{"learn":[0.4919304559],"iteration":3783,"passed_time":135.3674669,"remaining_time":43.50075048,"test":[0.4942964024]}, +{"learn":[0.4919287572],"iteration":3784,"passed_time":135.402734,"remaining_time":43.46481423,"test":[0.494295568]}, +{"learn":[0.4919281015],"iteration":3785,"passed_time":135.4396143,"remaining_time":43.42939561,"test":[0.4942951507]}, +{"learn":[0.4919271181],"iteration":3786,"passed_time":135.4759458,"remaining_time":43.39380043,"test":[0.4942940778]}, +{"learn":[0.4919265816],"iteration":3787,"passed_time":135.5137943,"remaining_time":43.35869026,"test":[0.4942935712]}, +{"learn":[0.4919255385],"iteration":3788,"passed_time":135.549966,"remaining_time":43.3230427,"test":[0.4942927069]}, +{"learn":[0.4919241676],"iteration":3789,"passed_time":135.5857041,"remaining_time":43.28725645,"test":[0.4942922003]}, +{"learn":[0.4919210384],"iteration":3790,"passed_time":135.6198822,"remaining_time":43.25097271,"test":[0.4942900545]}, +{"learn":[0.4919205616],"iteration":3791,"passed_time":135.657683,"remaining_time":43.21584415,"test":[0.4942896969]}, +{"learn":[0.4919192503],"iteration":3792,"passed_time":135.6934386,"remaining_time":43.18006339,"test":[0.4942887134]}, +{"learn":[0.4919184754],"iteration":3793,"passed_time":135.7313858,"remaining_time":43.14497926,"test":[0.494288326]}, +{"learn":[0.4919176707],"iteration":3794,"passed_time":135.7684721,"remaining_time":43.10962027,"test":[0.4942878194]}, +{"learn":[0.4919150183],"iteration":3795,"passed_time":135.8031455,"remaining_time":43.07349505,"test":[0.494285763]}, +{"learn":[0.4919142137],"iteration":3796,"passed_time":135.8403126,"remaining_time":43.03816066,"test":[0.4942851967]}, +{"learn":[0.491913707],"iteration":3797,"passed_time":135.8766424,"remaining_time":43.00256035,"test":[0.4942847795]}, +{"learn":[0.4919125447],"iteration":3798,"passed_time":135.9123343,"remaining_time":42.96675795,"test":[0.4942838854]}, +{"learn":[0.4919119785],"iteration":3799,"passed_time":135.9498166,"remaining_time":42.93152102,"test":[0.4942833788]}, +{"learn":[0.4919112334],"iteration":3800,"passed_time":135.9846903,"remaining_time":42.89546005,"test":[0.494283051]}, +{"learn":[0.4919109354],"iteration":3801,"passed_time":136.022885,"remaining_time":42.86044616,"test":[0.4942828126]}, +{"learn":[0.4919099221],"iteration":3802,"passed_time":136.0594747,"remaining_time":42.82492538,"test":[0.4942821271]}, +{"learn":[0.4919085214],"iteration":3803,"passed_time":136.0948701,"remaining_time":42.78902856,"test":[0.4942813522]}, +{"learn":[0.4919078956],"iteration":3804,"passed_time":136.1318651,"remaining_time":42.75363438,"test":[0.4942808158]}, +{"learn":[0.4919070611],"iteration":3805,"passed_time":136.1695728,"remaining_time":42.71846293,"test":[0.4942802794]}, +{"learn":[0.4919067035],"iteration":3806,"passed_time":136.2070553,"remaining_time":42.68321958,"test":[0.4942799217]}, +{"learn":[0.4919060776],"iteration":3807,"passed_time":136.2447163,"remaining_time":42.64803095,"test":[0.4942795641]}, +{"learn":[0.4919047365],"iteration":3808,"passed_time":136.280282,"remaining_time":42.61218583,"test":[0.4942787296]}, +{"learn":[0.4919039915],"iteration":3809,"passed_time":136.3192478,"remaining_time":42.57740284,"test":[0.4942782826]}, +{"learn":[0.4919031272],"iteration":3810,"passed_time":136.3556667,"remaining_time":42.54182307,"test":[0.4942775972]}, +{"learn":[0.4919023821],"iteration":3811,"passed_time":136.3917424,"remaining_time":42.50613588,"test":[0.4942772693]}, +{"learn":[0.4919014285],"iteration":3812,"passed_time":136.4285938,"remaining_time":42.47068998,"test":[0.4942767925]}, +{"learn":[0.4919003854],"iteration":3813,"passed_time":136.4634893,"remaining_time":42.4346351,"test":[0.4942760176]}, +{"learn":[0.4918994019],"iteration":3814,"passed_time":136.4999337,"remaining_time":42.39906198,"test":[0.4942754514]}, +{"learn":[0.4918985675],"iteration":3815,"passed_time":136.5353754,"remaining_time":42.36317727,"test":[0.4942749447]}, +{"learn":[0.4918980608],"iteration":3816,"passed_time":136.5740842,"remaining_time":42.32830537,"test":[0.4942746467]}, +{"learn":[0.4918974648],"iteration":3817,"passed_time":136.6142031,"remaining_time":42.29386802,"test":[0.4942743487]}, +{"learn":[0.4918965409],"iteration":3818,"passed_time":136.6504491,"remaining_time":42.25823001,"test":[0.4942736334]}, +{"learn":[0.4918958852],"iteration":3819,"passed_time":136.686999,"remaining_time":42.22268557,"test":[0.4942731566]}, +{"learn":[0.491895468],"iteration":3820,"passed_time":136.7250824,"remaining_time":42.18761374,"test":[0.4942728586]}, +{"learn":[0.4918938289],"iteration":3821,"passed_time":136.758685,"remaining_time":42.15115931,"test":[0.4942715175]}, +{"learn":[0.4918927858],"iteration":3822,"passed_time":136.7950319,"remaining_time":42.11555127,"test":[0.4942711301]}, +{"learn":[0.4918917725],"iteration":3823,"passed_time":136.830296,"remaining_time":42.07960985,"test":[0.4942702956]}, +{"learn":[0.4918912957],"iteration":3824,"passed_time":136.866849,"remaining_time":42.04406474,"test":[0.4942698784]}, +{"learn":[0.4918904314],"iteration":3825,"passed_time":136.902968,"remaining_time":42.0083859,"test":[0.4942692823]}, +{"learn":[0.4918890903],"iteration":3826,"passed_time":136.9390047,"remaining_time":41.97268161,"test":[0.4942686565]}, +{"learn":[0.4918880174],"iteration":3827,"passed_time":136.976219,"remaining_time":41.93733768,"test":[0.4942679412]}, +{"learn":[0.4918873022],"iteration":3828,"passed_time":137.0139782,"remaining_time":41.90215944,"test":[0.494267673]}, +{"learn":[0.4918864975],"iteration":3829,"passed_time":137.0522486,"remaining_time":41.86713599,"test":[0.4942670471]}, +{"learn":[0.4918858717],"iteration":3830,"passed_time":137.0904509,"remaining_time":41.83209007,"test":[0.4942666597]}, +{"learn":[0.4918841133],"iteration":3831,"passed_time":137.1255684,"remaining_time":41.79610228,"test":[0.4942652888]}, +{"learn":[0.4918833683],"iteration":3832,"passed_time":137.1629309,"remaining_time":41.76079844,"test":[0.4942647524]}, +{"learn":[0.4918825934],"iteration":3833,"passed_time":137.1997836,"remaining_time":41.72533847,"test":[0.4942641861]}, +{"learn":[0.4918817589],"iteration":3834,"passed_time":137.2358603,"remaining_time":41.68964206,"test":[0.4942637093]}, +{"learn":[0.4918812821],"iteration":3835,"passed_time":137.273552,"remaining_time":41.65443549,"test":[0.4942633218]}, +{"learn":[0.4918804178],"iteration":3836,"passed_time":137.3098525,"remaining_time":41.61880597,"test":[0.4942627854]}, +{"learn":[0.4918796728],"iteration":3837,"passed_time":137.346838,"remaining_time":41.58338346,"test":[0.4942623682]}, +{"learn":[0.4918789277],"iteration":3838,"passed_time":137.3845576,"remaining_time":41.54818219,"test":[0.4942621]}, +{"learn":[0.4918779442],"iteration":3839,"passed_time":137.4202775,"remaining_time":41.51237548,"test":[0.4942615933]}, +{"learn":[0.4918774674],"iteration":3840,"passed_time":137.4588583,"remaining_time":41.47743213,"test":[0.4942612357]}, +{"learn":[0.4918767522],"iteration":3841,"passed_time":137.4967321,"remaining_time":41.44227376,"test":[0.4942609079]}, +{"learn":[0.4918760667],"iteration":3842,"passed_time":137.5337858,"remaining_time":41.40686707,"test":[0.4942603416]}, +{"learn":[0.4918750832],"iteration":3843,"passed_time":137.5701163,"remaining_time":41.37124205,"test":[0.4942595668]}, +{"learn":[0.4918744872],"iteration":3844,"passed_time":137.6084115,"remaining_time":41.33620683,"test":[0.4942592985]}, +{"learn":[0.4918740997],"iteration":3845,"passed_time":137.6471703,"remaining_time":41.30130902,"test":[0.4942590303]}, +{"learn":[0.4918733249],"iteration":3846,"passed_time":137.6850095,"remaining_time":41.26613359,"test":[0.4942585833]}, +{"learn":[0.4918730269],"iteration":3847,"passed_time":137.7240088,"remaining_time":41.23130409,"test":[0.494258166]}, +{"learn":[0.4918720136],"iteration":3848,"passed_time":137.7592642,"remaining_time":41.19535284,"test":[0.4942573912]}, +{"learn":[0.4918707619],"iteration":3849,"passed_time":137.7952502,"remaining_time":41.15962019,"test":[0.4942567355]}, +{"learn":[0.491869093],"iteration":3850,"passed_time":137.8299449,"remaining_time":41.12350212,"test":[0.4942558415]}, +{"learn":[0.4918678115],"iteration":3851,"passed_time":137.8658239,"remaining_time":41.08773776,"test":[0.4942550368]}, +{"learn":[0.4918662915],"iteration":3852,"passed_time":137.9005426,"remaining_time":41.05162792,"test":[0.4942537553]}, +{"learn":[0.4918658743],"iteration":3853,"passed_time":137.9380356,"remaining_time":41.01634375,"test":[0.4942536361]}, +{"learn":[0.4918650696],"iteration":3854,"passed_time":137.9732771,"remaining_time":40.98038968,"test":[0.4942532189]}, +{"learn":[0.4918638477],"iteration":3855,"passed_time":138.0079269,"remaining_time":40.94426046,"test":[0.4942526228]}, +{"learn":[0.4918633113],"iteration":3856,"passed_time":138.0448409,"remaining_time":40.90880299,"test":[0.4942522354]}, +{"learn":[0.4918620894],"iteration":3857,"passed_time":138.0793173,"remaining_time":40.87262321,"test":[0.4942514009]}, +{"learn":[0.4918613444],"iteration":3858,"passed_time":138.1159148,"remaining_time":40.83707148,"test":[0.4942508347]}, +{"learn":[0.4918601225],"iteration":3859,"passed_time":138.1519175,"remaining_time":40.80134352,"test":[0.4942499108]}, +{"learn":[0.4918594668],"iteration":3860,"passed_time":138.1879722,"remaining_time":40.76563076,"test":[0.4942495234]}, +{"learn":[0.4918581257],"iteration":3861,"passed_time":138.2225389,"remaining_time":40.72947937,"test":[0.4942485995]}, +{"learn":[0.4918573806],"iteration":3862,"passed_time":138.2571787,"remaining_time":40.6933503,"test":[0.4942480929]}, +{"learn":[0.4918565462],"iteration":3863,"passed_time":138.2934866,"remaining_time":40.65771243,"test":[0.4942474372]}, +{"learn":[0.4918549965],"iteration":3864,"passed_time":138.3302579,"remaining_time":40.62221029,"test":[0.494246722]}, +{"learn":[0.491854162],"iteration":3865,"passed_time":138.366404,"remaining_time":40.5865241,"test":[0.4942462451]}, +{"learn":[0.4918534765],"iteration":3866,"passed_time":138.4031389,"remaining_time":40.55101019,"test":[0.4942457087]}, +{"learn":[0.4918516288],"iteration":3867,"passed_time":138.4369043,"remaining_time":40.51462658,"test":[0.4942441292]}, +{"learn":[0.4918511222],"iteration":3868,"passed_time":138.4743518,"remaining_time":40.47932072,"test":[0.4942437715]}, +{"learn":[0.4918502281],"iteration":3869,"passed_time":138.5112068,"remaining_time":40.44384073,"test":[0.4942432649]}, +{"learn":[0.491849185],"iteration":3870,"passed_time":138.5468508,"remaining_time":40.40800686,"test":[0.4942424304]}, +{"learn":[0.491848738],"iteration":3871,"passed_time":138.5844456,"remaining_time":40.37274139,"test":[0.494242192]}, +{"learn":[0.4918479631],"iteration":3872,"passed_time":138.6203104,"remaining_time":40.3369713,"test":[0.4942416854]}, +{"learn":[0.4918462942],"iteration":3873,"passed_time":138.6541109,"remaining_time":40.30060117,"test":[0.4942404933]}, +{"learn":[0.4918457875],"iteration":3874,"passed_time":138.6905538,"remaining_time":40.2649995,"test":[0.494239927]}, +{"learn":[0.4918451021],"iteration":3875,"passed_time":138.7275713,"remaining_time":40.22956402,"test":[0.4942393608]}, +{"learn":[0.4918440292],"iteration":3876,"passed_time":138.7618864,"remaining_time":40.19334497,"test":[0.4942389435]}, +{"learn":[0.4918433736],"iteration":3877,"passed_time":138.7976079,"remaining_time":40.15753378,"test":[0.4942383475]}, +{"learn":[0.4918430159],"iteration":3878,"passed_time":138.8346352,"remaining_time":40.12210004,"test":[0.4942381091]}, +{"learn":[0.4918422709],"iteration":3879,"passed_time":138.8707308,"remaining_time":40.08639651,"test":[0.4942375428]}, +{"learn":[0.4918412874],"iteration":3880,"passed_time":138.9069101,"remaining_time":40.05071694,"test":[0.4942369766]}, +{"learn":[0.4918406913],"iteration":3881,"passed_time":138.943262,"remaining_time":40.01508679,"test":[0.4942365594]}, +{"learn":[0.4918400655],"iteration":3882,"passed_time":138.9798771,"remaining_time":39.97953199,"test":[0.4942361421]}, +{"learn":[0.4918389628],"iteration":3883,"passed_time":139.0174071,"remaining_time":39.94423954,"test":[0.4942355461]}, +{"learn":[0.4918375919],"iteration":3884,"passed_time":139.0539103,"remaining_time":39.90865123,"test":[0.49423495]}, +{"learn":[0.4918366382],"iteration":3885,"passed_time":139.0887281,"remaining_time":39.87257928,"test":[0.4942342944]}, +{"learn":[0.4918362806],"iteration":3886,"passed_time":139.1254827,"remaining_time":39.83706258,"test":[0.494234056]}, +{"learn":[0.4918359528],"iteration":3887,"passed_time":139.1621078,"remaining_time":39.80150819,"test":[0.4942337579]}, +{"learn":[0.4918341348],"iteration":3888,"passed_time":139.1970306,"remaining_time":39.76546696,"test":[0.494232387]}, +{"learn":[0.4918331216],"iteration":3889,"passed_time":139.2320746,"remaining_time":39.72946088,"test":[0.49423194]}, +{"learn":[0.4918322871],"iteration":3890,"passed_time":139.2670842,"remaining_time":39.6934455,"test":[0.4942314036]}, +{"learn":[0.491831393],"iteration":3891,"passed_time":139.3031368,"remaining_time":39.65772753,"test":[0.4942308671]}, +{"learn":[0.491830499],"iteration":3892,"passed_time":139.337872,"remaining_time":39.6216348,"test":[0.4942303307]}, +{"learn":[0.4918282936],"iteration":3893,"passed_time":139.3716422,"remaining_time":39.58526868,"test":[0.4942286319]}, +{"learn":[0.4918260584],"iteration":3894,"passed_time":139.4058913,"remaining_time":39.54903976,"test":[0.4942272908]}, +{"learn":[0.4918255518],"iteration":3895,"passed_time":139.4431367,"remaining_time":39.51366092,"test":[0.494226963]}, +{"learn":[0.4918251047],"iteration":3896,"passed_time":139.479673,"remaining_time":39.4780804,"test":[0.4942265458]}, +{"learn":[0.4918235252],"iteration":3897,"passed_time":139.5147055,"remaining_time":39.44207425,"test":[0.4942253537]}, +{"learn":[0.4918230484],"iteration":3898,"passed_time":139.5508691,"remaining_time":39.40638803,"test":[0.4942247278]}, +{"learn":[0.4918226013],"iteration":3899,"passed_time":139.5873588,"remaining_time":39.3707935,"test":[0.4942244]}, +{"learn":[0.4918218265],"iteration":3900,"passed_time":139.6227801,"remaining_time":39.33489754,"test":[0.4942238338]}, +{"learn":[0.4918208132],"iteration":3901,"passed_time":139.6600628,"remaining_time":39.29952562,"test":[0.4942233867]}, +{"learn":[0.4918187866],"iteration":3902,"passed_time":139.6946325,"remaining_time":39.26339018,"test":[0.4942221052]}, +{"learn":[0.4918183098],"iteration":3903,"passed_time":139.7310964,"remaining_time":39.22778731,"test":[0.4942218072]}, +{"learn":[0.4918179522],"iteration":3904,"passed_time":139.7677297,"remaining_time":39.1922315,"test":[0.4942214496]}, +{"learn":[0.4918171773],"iteration":3905,"passed_time":139.8048733,"remaining_time":39.15681808,"test":[0.4942208535]}, +{"learn":[0.4918164919],"iteration":3906,"passed_time":139.841325,"remaining_time":39.12121021,"test":[0.4942202873]}, +{"learn":[0.4918156872],"iteration":3907,"passed_time":139.8768984,"remaining_time":39.08535646,"test":[0.4942198403]}, +{"learn":[0.4918146143],"iteration":3908,"passed_time":139.9126476,"remaining_time":39.04955195,"test":[0.494219423]}, +{"learn":[0.4918137501],"iteration":3909,"passed_time":139.9484167,"remaining_time":39.013753,"test":[0.4942188866]}, +{"learn":[0.4918127666],"iteration":3910,"passed_time":139.9843974,"remaining_time":38.97801299,"test":[0.4942180521]}, +{"learn":[0.4918121705],"iteration":3911,"passed_time":140.0207507,"remaining_time":38.94237647,"test":[0.4942178137]}, +{"learn":[0.4918113063],"iteration":3912,"passed_time":140.0551768,"remaining_time":38.90620424,"test":[0.4942172773]}, +{"learn":[0.4918104122],"iteration":3913,"passed_time":140.0916318,"remaining_time":38.87059584,"test":[0.4942168302]}, +{"learn":[0.4918096969],"iteration":3914,"passed_time":140.1269708,"remaining_time":38.83467773,"test":[0.494216264]}, +{"learn":[0.4918093691],"iteration":3915,"passed_time":140.1633331,"remaining_time":38.79904317,"test":[0.4942160256]}, +{"learn":[0.4918080876],"iteration":3916,"passed_time":140.1986194,"remaining_time":38.76311075,"test":[0.4942154295]}, +{"learn":[0.4918072829],"iteration":3917,"passed_time":140.2357079,"remaining_time":38.72767636,"test":[0.4942151017]}, +{"learn":[0.4918061207],"iteration":3918,"passed_time":140.2708837,"remaining_time":38.69171352,"test":[0.4942143268]}, +{"learn":[0.4918054948],"iteration":3919,"passed_time":140.306466,"remaining_time":38.65586309,"test":[0.4942138798]}, +{"learn":[0.4918040643],"iteration":3920,"passed_time":140.3413523,"remaining_time":38.61982124,"test":[0.4942130453]}, +{"learn":[0.4918036173],"iteration":3921,"passed_time":140.3790387,"remaining_time":38.58454964,"test":[0.4942127473]}, +{"learn":[0.491802753],"iteration":3922,"passed_time":140.4161076,"remaining_time":38.54910727,"test":[0.4942121811]}, +{"learn":[0.4918021271],"iteration":3923,"passed_time":140.4521007,"remaining_time":38.5133691,"test":[0.4942117638]}, +{"learn":[0.4918014417],"iteration":3924,"passed_time":140.487926,"remaining_time":38.47758484,"test":[0.4942111976]}, +{"learn":[0.4918003986],"iteration":3925,"passed_time":140.524283,"remaining_time":38.44194598,"test":[0.4942104227]}, +{"learn":[0.4917996238],"iteration":3926,"passed_time":140.5610067,"remaining_time":38.40640699,"test":[0.4942099757]}, +{"learn":[0.4917988489],"iteration":3927,"passed_time":140.597088,"remaining_time":38.37069203,"test":[0.4942095585]}, +{"learn":[0.4917979846],"iteration":3928,"passed_time":140.6337571,"remaining_time":38.33513714,"test":[0.494209022]}, +{"learn":[0.4917972992],"iteration":3929,"passed_time":140.6717244,"remaining_time":38.29993514,"test":[0.4942086644]}, +{"learn":[0.4917964051],"iteration":3930,"passed_time":140.7078162,"remaining_time":38.26422171,"test":[0.4942080087]}, +{"learn":[0.4917958389],"iteration":3931,"passed_time":140.744002,"remaining_time":38.22853359,"test":[0.4942076809]}, +{"learn":[0.4917953024],"iteration":3932,"passed_time":140.7801147,"remaining_time":38.19282544,"test":[0.4942070253]}, +{"learn":[0.4917948554],"iteration":3933,"passed_time":140.8181163,"remaining_time":38.15762888,"test":[0.4942067868]}, +{"learn":[0.4917936931],"iteration":3934,"passed_time":140.8543699,"remaining_time":38.1219578,"test":[0.4942060418]}, +{"learn":[0.4917912195],"iteration":3935,"passed_time":140.8882748,"remaining_time":38.08565153,"test":[0.4942044623]}, +{"learn":[0.4917898784],"iteration":3936,"passed_time":140.9234582,"remaining_time":38.04969167,"test":[0.4942035384]}, +{"learn":[0.4917894016],"iteration":3937,"passed_time":140.959836,"remaining_time":38.01405431,"test":[0.4942033298]}, +{"learn":[0.4917880903],"iteration":3938,"passed_time":140.9951167,"remaining_time":37.97812105,"test":[0.4942024357]}, +{"learn":[0.491787077],"iteration":3939,"passed_time":141.0298679,"remaining_time":37.94204569,"test":[0.4942018993]}, +{"learn":[0.4917857359],"iteration":3940,"passed_time":141.0645404,"remaining_time":37.90594983,"test":[0.4942009456]}, +{"learn":[0.4917850206],"iteration":3941,"passed_time":141.1024781,"remaining_time":37.87073105,"test":[0.4942004092]}, +{"learn":[0.4917837689],"iteration":3942,"passed_time":141.1375364,"remaining_time":37.83473903,"test":[0.4941997237]}, +{"learn":[0.4917829345],"iteration":3943,"passed_time":141.1732202,"remaining_time":37.79891495,"test":[0.4941989786]}, +{"learn":[0.4917818318],"iteration":3944,"passed_time":141.2090779,"remaining_time":37.76313744,"test":[0.4941983826]}, +{"learn":[0.4917808483],"iteration":3945,"passed_time":141.245195,"remaining_time":37.72742917,"test":[0.4941979952]}, +{"learn":[0.4917801926],"iteration":3946,"passed_time":141.281146,"remaining_time":37.69167638,"test":[0.4941974289]}, +{"learn":[0.4917797158],"iteration":3947,"passed_time":141.3192407,"remaining_time":37.65649475,"test":[0.4941973097]}, +{"learn":[0.4917786727],"iteration":3948,"passed_time":141.3552264,"remaining_time":37.62075029,"test":[0.4941966243]}, +{"learn":[0.4917779277],"iteration":3949,"passed_time":141.3920772,"remaining_time":37.58523572,"test":[0.494196207]}, +{"learn":[0.4917774508],"iteration":3950,"passed_time":141.4313866,"remaining_time":37.5503732,"test":[0.494195909]}, +{"learn":[0.4917763779],"iteration":3951,"passed_time":141.4675626,"remaining_time":37.51467754,"test":[0.4941954322]}, +{"learn":[0.4917757819],"iteration":3952,"passed_time":141.5031577,"remaining_time":37.47882774,"test":[0.4941947765]}, +{"learn":[0.4917751262],"iteration":3953,"passed_time":141.5416903,"remaining_time":37.44375519,"test":[0.4941942997]}, +{"learn":[0.4917737255],"iteration":3954,"passed_time":141.5769685,"remaining_time":37.407821,"test":[0.4941934056]}, +{"learn":[0.4917725036],"iteration":3955,"passed_time":141.6108943,"remaining_time":37.37153023,"test":[0.4941927202]}, +{"learn":[0.4917720864],"iteration":3956,"passed_time":141.648257,"remaining_time":37.33614659,"test":[0.4941924221]}, +{"learn":[0.491771401],"iteration":3957,"passed_time":141.6838634,"remaining_time":37.30029956,"test":[0.4941920943]}, +{"learn":[0.4917708347],"iteration":3958,"passed_time":141.7216573,"remaining_time":37.26502785,"test":[0.4941916771]}, +{"learn":[0.491769434],"iteration":3959,"passed_time":141.7579474,"remaining_time":37.22935993,"test":[0.494190634]}, +{"learn":[0.4917686591],"iteration":3960,"passed_time":141.7950889,"remaining_time":37.193915,"test":[0.4941902466]}, +{"learn":[0.4917678545],"iteration":3961,"passed_time":141.8303797,"remaining_time":37.15798439,"test":[0.4941895015]}, +{"learn":[0.4917670498],"iteration":3962,"passed_time":141.8663191,"remaining_time":37.1222238,"test":[0.4941890247]}, +{"learn":[0.4917663644],"iteration":3963,"passed_time":141.9027106,"remaining_time":37.08658127,"test":[0.4941884882]}, +{"learn":[0.4917644868],"iteration":3964,"passed_time":141.9370398,"remaining_time":37.05040004,"test":[0.4941868193]}, +{"learn":[0.4917635033],"iteration":3965,"passed_time":141.9734998,"remaining_time":37.01477529,"test":[0.4941863723]}, +{"learn":[0.4917629967],"iteration":3966,"passed_time":142.0098676,"remaining_time":36.97912611,"test":[0.4941860742]}, +{"learn":[0.4917624603],"iteration":3967,"passed_time":142.04635,"remaining_time":36.94350635,"test":[0.4941857762]}, +{"learn":[0.491761745],"iteration":3968,"passed_time":142.08349,"remaining_time":36.90805698,"test":[0.4941852398]}, +{"learn":[0.4917595694],"iteration":3969,"passed_time":142.1186119,"remaining_time":36.87208318,"test":[0.494183541]}, +{"learn":[0.4917587052],"iteration":3970,"passed_time":142.1552217,"remaining_time":36.83649536,"test":[0.4941828556]}, +{"learn":[0.4917574535],"iteration":3971,"passed_time":142.1901832,"remaining_time":36.80048044,"test":[0.4941821701]}, +{"learn":[0.4917563508],"iteration":3972,"passed_time":142.2241969,"remaining_time":36.76422104,"test":[0.4941814251]}, +{"learn":[0.4917560826],"iteration":3973,"passed_time":142.2618152,"remaining_time":36.7288934,"test":[0.4941813357]}, +{"learn":[0.4917556057],"iteration":3974,"passed_time":142.2986346,"remaining_time":36.6933586,"test":[0.4941810078]}, +{"learn":[0.4917543242],"iteration":3975,"passed_time":142.3322953,"remaining_time":36.65700966,"test":[0.4941803224]}, +{"learn":[0.4917525361],"iteration":3976,"passed_time":142.3673015,"remaining_time":36.62100817,"test":[0.4941791005]}, +{"learn":[0.491751642],"iteration":3977,"passed_time":142.4017892,"remaining_time":36.58487394,"test":[0.4941785939]}, +{"learn":[0.491751195],"iteration":3978,"passed_time":142.4377737,"remaining_time":36.54912465,"test":[0.4941780872]}, +{"learn":[0.4917501519],"iteration":3979,"passed_time":142.4730643,"remaining_time":36.51319737,"test":[0.4941776104]}, +{"learn":[0.4917494068],"iteration":3980,"passed_time":142.5089059,"remaining_time":36.47741147,"test":[0.4941769249]}, +{"learn":[0.4917474101],"iteration":3981,"passed_time":142.5433522,"remaining_time":36.44126886,"test":[0.4941757626]}, +{"learn":[0.4917469333],"iteration":3982,"passed_time":142.5787539,"remaining_time":36.405371,"test":[0.494175256]}, +{"learn":[0.4917462776],"iteration":3983,"passed_time":142.6136422,"remaining_time":36.36934249,"test":[0.4941748686]}, +{"learn":[0.4917454431],"iteration":3984,"passed_time":142.6489325,"remaining_time":36.33341693,"test":[0.4941745109]}, +{"learn":[0.4917433272],"iteration":3985,"passed_time":142.6829669,"remaining_time":36.29717221,"test":[0.4941726036]}, +{"learn":[0.4917426715],"iteration":3986,"passed_time":142.7188152,"remaining_time":36.26138946,"test":[0.4941722758]}, +{"learn":[0.4917421947],"iteration":3987,"passed_time":142.7560977,"remaining_time":36.22597062,"test":[0.4941720075]}, +{"learn":[0.4917413602],"iteration":3988,"passed_time":142.7921162,"remaining_time":36.19023049,"test":[0.4941714115]}, +{"learn":[0.4917408536],"iteration":3989,"passed_time":142.8303374,"remaining_time":36.15504783,"test":[0.4941710539]}, +{"learn":[0.4917397211],"iteration":3990,"passed_time":142.8647362,"remaining_time":36.11889723,"test":[0.4941704578]}, +{"learn":[0.4917372773],"iteration":3991,"passed_time":142.8982961,"remaining_time":36.08253569,"test":[0.4941686995]}, +{"learn":[0.4917360852],"iteration":3992,"passed_time":142.9330215,"remaining_time":36.04646947,"test":[0.4941683717]}, +{"learn":[0.4917351911],"iteration":3993,"passed_time":142.9690444,"remaining_time":36.01073076,"test":[0.494167567]}, +{"learn":[0.4917348037],"iteration":3994,"passed_time":143.0072595,"remaining_time":35.97554339,"test":[0.4941673286]}, +{"learn":[0.4917339692],"iteration":3995,"passed_time":143.0432853,"remaining_time":35.93980442,"test":[0.4941668815]}, +{"learn":[0.4917336712],"iteration":3996,"passed_time":143.0801519,"remaining_time":35.9042763,"test":[0.4941667325]}, +{"learn":[0.4917330752],"iteration":3997,"passed_time":143.1165172,"remaining_time":35.86862188,"test":[0.4941661961]}, +{"learn":[0.4917316447],"iteration":3998,"passed_time":143.1500914,"remaining_time":35.83226844,"test":[0.494165153]}, +{"learn":[0.49173084],"iteration":3999,"passed_time":143.186361,"remaining_time":35.79659025,"test":[0.4941645868]}, +{"learn":[0.491730393],"iteration":4000,"passed_time":143.2248512,"remaining_time":35.76146621,"test":[0.4941643781]}, +{"learn":[0.4917294393],"iteration":4001,"passed_time":143.2610197,"remaining_time":35.72576154,"test":[0.4941637523]}, +{"learn":[0.4917282472],"iteration":4002,"passed_time":143.2966137,"remaining_time":35.68991352,"test":[0.4941624708]}, +{"learn":[0.4917279194],"iteration":4003,"passed_time":143.3341954,"remaining_time":35.6545601,"test":[0.4941622324]}, +{"learn":[0.4917269359],"iteration":4004,"passed_time":143.3716043,"remaining_time":35.61916261,"test":[0.4941618151]}, +{"learn":[0.4917261014],"iteration":4005,"passed_time":143.4074068,"remaining_time":35.58336555,"test":[0.4941610701]}, +{"learn":[0.4917250285],"iteration":4006,"passed_time":143.4441154,"remaining_time":35.54779301,"test":[0.4941606529]}, +{"learn":[0.4917243431],"iteration":4007,"passed_time":143.482114,"remaining_time":35.51253918,"test":[0.4941602058]}, +{"learn":[0.4917234788],"iteration":4008,"passed_time":143.5176906,"remaining_time":35.47668531,"test":[0.4941596396]}, +{"learn":[0.4917228232],"iteration":4009,"passed_time":143.5532423,"remaining_time":35.4408254,"test":[0.4941591925]}, +{"learn":[0.4917223761],"iteration":4010,"passed_time":143.5934518,"remaining_time":35.40611415,"test":[0.4941589541]}, +{"learn":[0.4917218695],"iteration":4011,"passed_time":143.6320685,"remaining_time":35.3710079,"test":[0.4941586263]}, +{"learn":[0.491721035],"iteration":4012,"passed_time":143.6692952,"remaining_time":35.33555803,"test":[0.4941582091]}, +{"learn":[0.4917187999],"iteration":4013,"passed_time":143.7026642,"remaining_time":35.29915968,"test":[0.4941569574]}, +{"learn":[0.491718025],"iteration":4014,"passed_time":143.738096,"remaining_time":35.26326888,"test":[0.4941563017]}, +{"learn":[0.4917171905],"iteration":4015,"passed_time":143.7753117,"remaining_time":35.22781541,"test":[0.4941560633]}, +{"learn":[0.4917167435],"iteration":4016,"passed_time":143.8310011,"remaining_time":35.19688176,"test":[0.4941557057]}, +{"learn":[0.4917158792],"iteration":4017,"passed_time":143.8698295,"remaining_time":35.16181498,"test":[0.4941552586]}, +{"learn":[0.491715015],"iteration":4018,"passed_time":143.9047771,"remaining_time":35.12579905,"test":[0.4941548116]}, +{"learn":[0.4917145381],"iteration":4019,"passed_time":143.9411631,"remaining_time":35.0901343,"test":[0.494154305]}, +{"learn":[0.4917130778],"iteration":4020,"passed_time":143.9772477,"remaining_time":35.0543958,"test":[0.4941531427]}, +{"learn":[0.4917122732],"iteration":4021,"passed_time":144.0133744,"remaining_time":35.01866738,"test":[0.4941527254]}, +{"learn":[0.4917114089],"iteration":4022,"passed_time":144.048389,"remaining_time":34.98266867,"test":[0.49415204]}, +{"learn":[0.491710783],"iteration":4023,"passed_time":144.0840831,"remaining_time":34.94683526,"test":[0.4941516824]}, +{"learn":[0.4917095015],"iteration":4024,"passed_time":144.1191755,"remaining_time":34.91085619,"test":[0.4941508181]}, +{"learn":[0.4917079518],"iteration":4025,"passed_time":144.1540633,"remaining_time":34.87482802,"test":[0.4941499538]}, +{"learn":[0.4917071174],"iteration":4026,"passed_time":144.1905834,"remaining_time":34.83919484,"test":[0.4941494472]}, +{"learn":[0.4917062531],"iteration":4027,"passed_time":144.2270436,"remaining_time":34.80354677,"test":[0.4941485531]}, +{"learn":[0.491705508],"iteration":4028,"passed_time":144.2632039,"remaining_time":34.76782601,"test":[0.4941481955]}, +{"learn":[0.4917050014],"iteration":4029,"passed_time":144.2996401,"remaining_time":34.73217144,"test":[0.4941478975]}, +{"learn":[0.491704614],"iteration":4030,"passed_time":144.3365663,"remaining_time":34.69663426,"test":[0.4941475994]}, +{"learn":[0.4917033623],"iteration":4031,"passed_time":144.3711805,"remaining_time":34.66054135,"test":[0.4941466756]}, +{"learn":[0.491702796],"iteration":4032,"passed_time":144.4080062,"remaining_time":34.62497941,"test":[0.4941461689]}, +{"learn":[0.4917024086],"iteration":4033,"passed_time":144.4448509,"remaining_time":34.58942142,"test":[0.4941458113]}, +{"learn":[0.4917012463],"iteration":4034,"passed_time":144.4802621,"remaining_time":34.55351993,"test":[0.4941452749]}, +{"learn":[0.4916999052],"iteration":4035,"passed_time":144.5155354,"remaining_time":34.51758575,"test":[0.4941444404]}, +{"learn":[0.4916995178],"iteration":4036,"passed_time":144.5522431,"remaining_time":34.48199408,"test":[0.4941440828]}, +{"learn":[0.4916982959],"iteration":4037,"passed_time":144.5868774,"remaining_time":34.44590789,"test":[0.4941430695]}, +{"learn":[0.4916975806],"iteration":4038,"passed_time":144.6225955,"remaining_time":34.41008028,"test":[0.4941424138]}, +{"learn":[0.4916962991],"iteration":4039,"passed_time":144.6568528,"remaining_time":34.37390561,"test":[0.494141788]}, +{"learn":[0.4916954944],"iteration":4040,"passed_time":144.6928247,"remaining_time":34.33813881,"test":[0.4941411323]}, +{"learn":[0.4916940937],"iteration":4041,"passed_time":144.7289804,"remaining_time":34.30241545,"test":[0.4941405363]}, +{"learn":[0.4916933785],"iteration":4042,"passed_time":144.7644233,"remaining_time":34.26652315,"test":[0.4941399402]}, +{"learn":[0.4916926334],"iteration":4043,"passed_time":144.802149,"remaining_time":34.23117074,"test":[0.4941394634]}, +{"learn":[0.4916919778],"iteration":4044,"passed_time":144.8386215,"remaining_time":34.19552128,"test":[0.494138927]}, +{"learn":[0.4916912029],"iteration":4045,"passed_time":144.873553,"remaining_time":34.15950804,"test":[0.4941386587]}, +{"learn":[0.4916901896],"iteration":4046,"passed_time":144.910418,"remaining_time":34.12395067,"test":[0.4941381819]}, +{"learn":[0.4916888485],"iteration":4047,"passed_time":144.9458778,"remaining_time":34.08806218,"test":[0.4941374667]}, +{"learn":[0.4916883717],"iteration":4048,"passed_time":144.9841115,"remaining_time":34.0528254,"test":[0.4941371388]}, +{"learn":[0.4916871498],"iteration":4049,"passed_time":145.019347,"remaining_time":34.01688387,"test":[0.4941364832]}, +{"learn":[0.4916862855],"iteration":4050,"passed_time":145.0555477,"remaining_time":33.98116879,"test":[0.4941361554]}, +{"learn":[0.4916853319],"iteration":4051,"passed_time":145.0908513,"remaining_time":33.94524359,"test":[0.4941353805]}, +{"learn":[0.4916841994],"iteration":4052,"passed_time":145.1268715,"remaining_time":33.90948613,"test":[0.4941347546]}, +{"learn":[0.4916832159],"iteration":4053,"passed_time":145.1637351,"remaining_time":33.87392536,"test":[0.4941341884]}, +{"learn":[0.49168259],"iteration":4054,"passed_time":145.1993953,"remaining_time":33.8380835,"test":[0.4941336818]}, +{"learn":[0.4916820238],"iteration":4055,"passed_time":145.2348517,"remaining_time":33.80219428,"test":[0.4941330559]}, +{"learn":[0.491681398],"iteration":4056,"passed_time":145.2729899,"remaining_time":33.76692864,"test":[0.4941326685]}, +{"learn":[0.4916798184],"iteration":4057,"passed_time":145.3084288,"remaining_time":33.73103497,"test":[0.4941314466]}, +{"learn":[0.4916794906],"iteration":4058,"passed_time":145.3461561,"remaining_time":33.69567205,"test":[0.4941311188]}, +{"learn":[0.4916784177],"iteration":4059,"passed_time":145.3810936,"remaining_time":33.65966207,"test":[0.4941305525]}, +{"learn":[0.4916771958],"iteration":4060,"passed_time":145.4168004,"remaining_time":33.62383048,"test":[0.4941299267]}, +{"learn":[0.4916764806],"iteration":4061,"passed_time":145.4528742,"remaining_time":33.58808369,"test":[0.4941295988]}, +{"learn":[0.4916751395],"iteration":4062,"passed_time":145.4872415,"remaining_time":33.55194321,"test":[0.4941289134]}, +{"learn":[0.4916748414],"iteration":4063,"passed_time":145.5250618,"remaining_time":33.51659887,"test":[0.4941285558]}, +{"learn":[0.4916728149],"iteration":4064,"passed_time":145.5584109,"remaining_time":33.48022488,"test":[0.4941271551]}, +{"learn":[0.491671742],"iteration":4065,"passed_time":145.5932514,"remaining_time":33.44419499,"test":[0.4941262908]}, +{"learn":[0.4916704605],"iteration":4066,"passed_time":145.6281489,"remaining_time":33.40817874,"test":[0.4941255457]}, +{"learn":[0.4916694472],"iteration":4067,"passed_time":145.6633862,"remaining_time":33.3722409,"test":[0.4941249497]}, +{"learn":[0.4916683147],"iteration":4068,"passed_time":145.6991302,"remaining_time":33.33641933,"test":[0.4941245026]}, +{"learn":[0.4916677187],"iteration":4069,"passed_time":145.7358032,"remaining_time":33.30081006,"test":[0.4941241152]}, +{"learn":[0.4916673909],"iteration":4070,"passed_time":145.773879,"remaining_time":33.2655204,"test":[0.494123847]}, +{"learn":[0.4916668246],"iteration":4071,"passed_time":145.809335,"remaining_time":33.22963235,"test":[0.4941234596]}, +{"learn":[0.4916653345],"iteration":4072,"passed_time":145.8460702,"remaining_time":33.19403562,"test":[0.4941225059]}, +{"learn":[0.4916649173],"iteration":4073,"passed_time":145.8837352,"remaining_time":33.15864967,"test":[0.4941222377]}, +{"learn":[0.4916642318],"iteration":4074,"passed_time":145.9220579,"remaining_time":33.12341191,"test":[0.49412188]}, +{"learn":[0.4916636656],"iteration":4075,"passed_time":145.9599736,"remaining_time":33.08808037,"test":[0.4941214926]}, +{"learn":[0.4916616986],"iteration":4076,"passed_time":145.993756,"remaining_time":33.05181183,"test":[0.4941204197]}, +{"learn":[0.4916609834],"iteration":4077,"passed_time":146.0310933,"remaining_time":33.01634822,"test":[0.4941200621]}, +{"learn":[0.4916598807],"iteration":4078,"passed_time":146.0665338,"remaining_time":32.98045541,"test":[0.494119317]}, +{"learn":[0.4916588674],"iteration":4079,"passed_time":146.102902,"remaining_time":32.94477202,"test":[0.494118572]}, +{"learn":[0.4916580925],"iteration":4080,"passed_time":146.1406992,"remaining_time":32.90941009,"test":[0.4941181548]}, +{"learn":[0.4916576157],"iteration":4081,"passed_time":146.177597,"remaining_time":32.87384471,"test":[0.4941177673]}, +{"learn":[0.4916562448],"iteration":4082,"passed_time":146.2112478,"remaining_time":32.83754941,"test":[0.4941165752]}, +{"learn":[0.4916554103],"iteration":4083,"passed_time":146.246847,"remaining_time":32.80169243,"test":[0.494116158]}, +{"learn":[0.491654248],"iteration":4084,"passed_time":146.2826278,"remaining_time":32.76587623,"test":[0.4941152341]}, +{"learn":[0.4916524599],"iteration":4085,"passed_time":146.3161116,"remaining_time":32.72954625,"test":[0.4941139228]}, +{"learn":[0.4916518341],"iteration":4086,"passed_time":146.3554358,"remaining_time":32.69452235,"test":[0.4941136844]}, +{"learn":[0.4916511486],"iteration":4087,"passed_time":146.3926202,"remaining_time":32.65901899,"test":[0.4941130884]}, +{"learn":[0.4916505228],"iteration":4088,"passed_time":146.4300514,"remaining_time":32.62356979,"test":[0.4941127605]}, +{"learn":[0.4916499565],"iteration":4089,"passed_time":146.4678747,"remaining_time":32.58820685,"test":[0.4941122539]}, +{"learn":[0.4916493903],"iteration":4090,"passed_time":146.5056332,"remaining_time":32.55282829,"test":[0.4941118069]}, +{"learn":[0.4916479299],"iteration":4091,"passed_time":146.5406861,"remaining_time":32.51684822,"test":[0.4941106744]}, +{"learn":[0.4916469167],"iteration":4092,"passed_time":146.5756823,"remaining_time":32.48085607,"test":[0.4941099889]}, +{"learn":[0.4916463206],"iteration":4093,"passed_time":146.6126315,"remaining_time":32.44529656,"test":[0.4941096909]}, +{"learn":[0.4916452477],"iteration":4094,"passed_time":146.6475405,"remaining_time":32.40928551,"test":[0.4941090054]}, +{"learn":[0.4916442345],"iteration":4095,"passed_time":146.6837097,"remaining_time":32.37355311,"test":[0.4941083498]}, +{"learn":[0.4916434894],"iteration":4096,"passed_time":146.7314988,"remaining_time":32.3403816,"test":[0.4941076643]}, +{"learn":[0.4916431616],"iteration":4097,"passed_time":146.7695505,"remaining_time":32.30505967,"test":[0.4941075153]}, +{"learn":[0.4916422377],"iteration":4098,"passed_time":146.8049533,"remaining_time":32.26915417,"test":[0.4941069491]}, +{"learn":[0.4916416715],"iteration":4099,"passed_time":146.8426186,"remaining_time":32.23374554,"test":[0.4941065915]}, +{"learn":[0.4916410158],"iteration":4100,"passed_time":146.8798483,"remaining_time":32.19824034,"test":[0.494106204]}, +{"learn":[0.4916403006],"iteration":4101,"passed_time":146.9162916,"remaining_time":32.16256212,"test":[0.4941056974]}, +{"learn":[0.4916390489],"iteration":4102,"passed_time":146.951354,"remaining_time":32.12658166,"test":[0.4941048927]}, +{"learn":[0.4916382144],"iteration":4103,"passed_time":146.9877103,"remaining_time":32.09088412,"test":[0.4941045053]}, +{"learn":[0.4916375289],"iteration":4104,"passed_time":147.0235395,"remaining_time":32.05507135,"test":[0.4941040881]}, +{"learn":[0.4916371117],"iteration":4105,"passed_time":147.0596233,"remaining_time":32.01931399,"test":[0.4941036708]}, +{"learn":[0.4916360686],"iteration":4106,"passed_time":147.0958924,"remaining_time":31.98359676,"test":[0.4941031046]}, +{"learn":[0.4916352938],"iteration":4107,"passed_time":147.1325884,"remaining_time":31.94797197,"test":[0.4941028066]}, +{"learn":[0.4916344891],"iteration":4108,"passed_time":147.1705461,"remaining_time":31.91262024,"test":[0.4941023595]}, +{"learn":[0.4916339229],"iteration":4109,"passed_time":147.2078707,"remaining_time":31.87713015,"test":[0.4941021509]}, +{"learn":[0.4916329394],"iteration":4110,"passed_time":147.2443293,"remaining_time":31.84145191,"test":[0.4941015251]}, +{"learn":[0.4916316579],"iteration":4111,"passed_time":147.2792416,"remaining_time":31.80543933,"test":[0.4941005118]}, +{"learn":[0.4916310022],"iteration":4112,"passed_time":147.3159245,"remaining_time":31.76980915,"test":[0.4941002436]}, +{"learn":[0.4916301678],"iteration":4113,"passed_time":147.353027,"remaining_time":31.73426882,"test":[0.4940993495]}, +{"learn":[0.4916291545],"iteration":4114,"passed_time":147.3885957,"remaining_time":31.69839786,"test":[0.4940989621]}, +{"learn":[0.4916277538],"iteration":4115,"passed_time":147.4238865,"remaining_time":31.66246736,"test":[0.4940981574]}, +{"learn":[0.4916271577],"iteration":4116,"passed_time":147.4623656,"remaining_time":31.627221,"test":[0.4940978296]}, +{"learn":[0.4916265617],"iteration":4117,"passed_time":147.4988439,"remaining_time":31.59154452,"test":[0.4940974719]}, +{"learn":[0.4916260848],"iteration":4118,"passed_time":147.5343207,"remaining_time":31.55565345,"test":[0.4940969057]}, +{"learn":[0.4916252802],"iteration":4119,"passed_time":147.5695521,"remaining_time":31.51971016,"test":[0.4940964587]}, +{"learn":[0.4916241775],"iteration":4120,"passed_time":147.6042867,"remaining_time":31.48366124,"test":[0.494095803]}, +{"learn":[0.491623492],"iteration":4121,"passed_time":147.6404555,"remaining_time":31.44791847,"test":[0.4940954156]}, +{"learn":[0.4916228364],"iteration":4122,"passed_time":147.6760079,"remaining_time":31.41204438,"test":[0.4940949089]}, +{"learn":[0.4916221807],"iteration":4123,"passed_time":147.7130359,"remaining_time":31.37648385,"test":[0.4940944917]}, +{"learn":[0.4916215549],"iteration":4124,"passed_time":147.749935,"remaining_time":31.34089531,"test":[0.4940939255]}, +{"learn":[0.4916210185],"iteration":4125,"passed_time":147.7877108,"remaining_time":31.30549182,"test":[0.4940937467]}, +{"learn":[0.4916201244],"iteration":4126,"passed_time":147.8232109,"remaining_time":31.26960579,"test":[0.4940930016]}, +{"learn":[0.4916197668],"iteration":4127,"passed_time":147.8603245,"remaining_time":31.23406079,"test":[0.4940927632]}, +{"learn":[0.4916181574],"iteration":4128,"passed_time":147.8953647,"remaining_time":31.19807766,"test":[0.4940914519]}, +{"learn":[0.4916175316],"iteration":4129,"passed_time":147.9311475,"remaining_time":31.16225141,"test":[0.494090975]}, +{"learn":[0.4916169951],"iteration":4130,"passed_time":147.9674065,"remaining_time":31.12652535,"test":[0.4940907068]}, +{"learn":[0.4916163395],"iteration":4131,"passed_time":148.0031141,"remaining_time":31.09068322,"test":[0.49409023]}, +{"learn":[0.491615654],"iteration":4132,"passed_time":148.0393931,"remaining_time":31.05496099,"test":[0.4940897829]}, +{"learn":[0.4916130314],"iteration":4133,"passed_time":148.0727811,"remaining_time":31.0186329,"test":[0.4940879054]}, +{"learn":[0.4916121672],"iteration":4134,"passed_time":148.1101833,"remaining_time":30.98314596,"test":[0.4940874286]}, +{"learn":[0.4916115711],"iteration":4135,"passed_time":148.1454131,"remaining_time":30.94720429,"test":[0.4940871305]}, +{"learn":[0.4916111539],"iteration":4136,"passed_time":148.1823306,"remaining_time":30.91161501,"test":[0.4940866537]}, +{"learn":[0.4916105876],"iteration":4137,"passed_time":148.2194521,"remaining_time":30.87606759,"test":[0.4940862663]}, +{"learn":[0.4916096638],"iteration":4138,"passed_time":148.2574839,"remaining_time":30.84070879,"test":[0.494085998]}, +{"learn":[0.4916088293],"iteration":4139,"passed_time":148.2932609,"remaining_time":30.80488028,"test":[0.4940854318]}, +{"learn":[0.4916077564],"iteration":4140,"passed_time":148.3291685,"remaining_time":30.7690789,"test":[0.4940848954]}, +{"learn":[0.4916071604],"iteration":4141,"passed_time":148.3651864,"remaining_time":30.73330032,"test":[0.4940844185]}, +{"learn":[0.4916063855],"iteration":4142,"passed_time":148.4016526,"remaining_time":30.69761436,"test":[0.4940840609]}, +{"learn":[0.4916057895],"iteration":4143,"passed_time":148.4385272,"remaining_time":30.66201237,"test":[0.4940835543]}, +{"learn":[0.4916052828],"iteration":4144,"passed_time":148.4757773,"remaining_time":30.62648723,"test":[0.4940833158]}, +{"learn":[0.4916045974],"iteration":4145,"passed_time":148.5124447,"remaining_time":30.59084124,"test":[0.494082988]}, +{"learn":[0.4916036139],"iteration":4146,"passed_time":148.5472043,"remaining_time":30.55480233,"test":[0.4940824516]}, +{"learn":[0.4916028688],"iteration":4147,"passed_time":148.5848805,"remaining_time":30.5193631,"test":[0.4940820641]}, +{"learn":[0.4916022728],"iteration":4148,"passed_time":148.6225917,"remaining_time":30.48392999,"test":[0.4940815575]}, +{"learn":[0.4916017066],"iteration":4149,"passed_time":148.659413,"remaining_time":30.44831351,"test":[0.4940812297]}, +{"learn":[0.4916001866],"iteration":4150,"passed_time":148.6946661,"remaining_time":30.41237569,"test":[0.4940798886]}, +{"learn":[0.4915997098],"iteration":4151,"passed_time":148.7317436,"remaining_time":30.37681083,"test":[0.4940796502]}, +{"learn":[0.4915991138],"iteration":4152,"passed_time":148.7694974,"remaining_time":30.34138317,"test":[0.4940794117]}, +{"learn":[0.4915982197],"iteration":4153,"passed_time":148.8048025,"remaining_time":30.30545569,"test":[0.4940787561]}, +{"learn":[0.4915976832],"iteration":4154,"passed_time":148.8417886,"remaining_time":30.26987036,"test":[0.4940783389]}, +{"learn":[0.4915966998],"iteration":4155,"passed_time":148.8774041,"remaining_time":30.23400602,"test":[0.4940777726]}, +{"learn":[0.4915951202],"iteration":4156,"passed_time":148.9125972,"remaining_time":30.19805615,"test":[0.4940765507]}, +{"learn":[0.491594256],"iteration":4157,"passed_time":148.9496893,"remaining_time":30.16249119,"test":[0.4940763719]}, +{"learn":[0.4915932725],"iteration":4158,"passed_time":148.9870231,"remaining_time":30.12697437,"test":[0.4940756566]}, +{"learn":[0.4915923486],"iteration":4159,"passed_time":149.0228847,"remaining_time":30.09115941,"test":[0.4940751202]}, +{"learn":[0.4915916036],"iteration":4160,"passed_time":149.0582235,"remaining_time":30.05523901,"test":[0.4940746732]}, +{"learn":[0.4915909479],"iteration":4161,"passed_time":149.0953623,"remaining_time":30.0196813,"test":[0.4940741963]}, +{"learn":[0.4915902327],"iteration":4162,"passed_time":149.1314667,"remaining_time":29.98391487,"test":[0.4940737195]}, +{"learn":[0.4915894876],"iteration":4163,"passed_time":149.1676559,"remaining_time":29.94816531,"test":[0.4940734811]}, +{"learn":[0.4915886829],"iteration":4164,"passed_time":149.2052336,"remaining_time":29.91269389,"test":[0.4940726466]}, +{"learn":[0.4915878783],"iteration":4165,"passed_time":149.2415619,"remaining_time":29.87697135,"test":[0.4940721996]}, +{"learn":[0.4915867756],"iteration":4166,"passed_time":149.2770557,"remaining_time":29.84108168,"test":[0.4940713353]}, +{"learn":[0.4915859709],"iteration":4167,"passed_time":149.3135354,"remaining_time":29.80538903,"test":[0.4940707989]}, +{"learn":[0.4915853153],"iteration":4168,"passed_time":149.3482794,"remaining_time":29.76935002,"test":[0.494070322]}, +{"learn":[0.4915835271],"iteration":4169,"passed_time":149.3826843,"remaining_time":29.73324413,"test":[0.4940689809]}, +{"learn":[0.4915824543],"iteration":4170,"passed_time":149.4187827,"remaining_time":29.69747562,"test":[0.4940683253]}, +{"learn":[0.4915813516],"iteration":4171,"passed_time":149.454635,"remaining_time":29.66165815,"test":[0.4940675206]}, +{"learn":[0.4915807555],"iteration":4172,"passed_time":149.4903166,"remaining_time":29.62580681,"test":[0.4940668948]}, +{"learn":[0.4915801893],"iteration":4173,"passed_time":149.52732,"remaining_time":29.59021714,"test":[0.4940665967]}, +{"learn":[0.4915792356],"iteration":4174,"passed_time":149.5628322,"remaining_time":29.55433211,"test":[0.4940661795]}, +{"learn":[0.4915777753],"iteration":4175,"passed_time":149.5978091,"remaining_time":29.51834165,"test":[0.4940651066]}, +{"learn":[0.4915773879],"iteration":4176,"passed_time":149.6356745,"remaining_time":29.48292079,"test":[0.494064898]}, +{"learn":[0.4915753017],"iteration":4177,"passed_time":149.6698554,"remaining_time":29.44677385,"test":[0.4940639443]}, +{"learn":[0.4915748249],"iteration":4178,"passed_time":149.7073581,"remaining_time":29.41128045,"test":[0.4940636761]}, +{"learn":[0.4915741394],"iteration":4179,"passed_time":149.7435501,"remaining_time":29.37552897,"test":[0.4940633483]}, +{"learn":[0.4915738116],"iteration":4180,"passed_time":149.7809288,"remaining_time":29.34000974,"test":[0.4940629311]}, +{"learn":[0.4915732751],"iteration":4181,"passed_time":149.8169327,"remaining_time":29.30422069,"test":[0.4940627224]}, +{"learn":[0.4915726791],"iteration":4182,"passed_time":149.8524901,"remaining_time":29.26834435,"test":[0.4940622754]}, +{"learn":[0.4915718446],"iteration":4183,"passed_time":149.8872073,"remaining_time":29.2323043,"test":[0.4940615601]}, +{"learn":[0.4915712188],"iteration":4184,"passed_time":149.9233155,"remaining_time":29.19653576,"test":[0.4940612621]}, +{"learn":[0.4915703545],"iteration":4185,"passed_time":149.9596711,"remaining_time":29.16081517,"test":[0.4940606065]}, +{"learn":[0.4915698181],"iteration":4186,"passed_time":149.9977137,"remaining_time":29.12542183,"test":[0.4940600998]}, +{"learn":[0.4915691922],"iteration":4187,"passed_time":150.0342282,"remaining_time":29.08973096,"test":[0.4940595336]}, +{"learn":[0.4915684174],"iteration":4188,"passed_time":150.0713749,"remaining_time":29.05416211,"test":[0.4940592356]}, +{"learn":[0.4915667484],"iteration":4189,"passed_time":150.1057937,"remaining_time":29.01806514,"test":[0.4940579243]}, +{"learn":[0.4915658246],"iteration":4190,"passed_time":150.1412123,"remaining_time":28.98216196,"test":[0.4940574474]}, +{"learn":[0.4915652285],"iteration":4191,"passed_time":150.1760269,"remaining_time":28.94614259,"test":[0.4940570004]}, +{"learn":[0.4915646027],"iteration":4192,"passed_time":150.2123244,"remaining_time":28.9104092,"test":[0.4940567024]}, +{"learn":[0.4915635596],"iteration":4193,"passed_time":150.2481608,"remaining_time":28.87458693,"test":[0.4940561659]}, +{"learn":[0.4915626357],"iteration":4194,"passed_time":150.2839404,"remaining_time":28.83875376,"test":[0.4940552123]}, +{"learn":[0.4915615032],"iteration":4195,"passed_time":150.3198171,"remaining_time":28.80293921,"test":[0.4940544076]}, +{"learn":[0.4915599535],"iteration":4196,"passed_time":150.3545467,"remaining_time":28.76690518,"test":[0.4940532155]}, +{"learn":[0.4915591488],"iteration":4197,"passed_time":150.3889505,"remaining_time":28.7308095,"test":[0.4940527089]}, +{"learn":[0.4915581654],"iteration":4198,"passed_time":150.4240678,"remaining_time":28.69485075,"test":[0.4940521724]}, +{"learn":[0.4915574501],"iteration":4199,"passed_time":150.4609769,"remaining_time":28.65923369,"test":[0.4940517254]}, +{"learn":[0.4915561686],"iteration":4200,"passed_time":150.4947662,"remaining_time":28.62302266,"test":[0.4940509803]}, +{"learn":[0.4915553639],"iteration":4201,"passed_time":150.5294343,"remaining_time":28.58697968,"test":[0.4940504439]}, +{"learn":[0.4915549467],"iteration":4202,"passed_time":150.5669465,"remaining_time":28.55147664,"test":[0.4940502055]}, +{"learn":[0.4915544103],"iteration":4203,"passed_time":150.6037142,"remaining_time":28.51583172,"test":[0.4940499372]}, +{"learn":[0.4915527413],"iteration":4204,"passed_time":150.6394012,"remaining_time":28.47998192,"test":[0.494048775]}, +{"learn":[0.4915514598],"iteration":4205,"passed_time":150.6764625,"remaining_time":28.44439163,"test":[0.4940479107]}, +{"learn":[0.4915508936],"iteration":4206,"passed_time":150.7138583,"remaining_time":28.4088637,"test":[0.4940476723]}, +{"learn":[0.4915494035],"iteration":4207,"passed_time":150.7504294,"remaining_time":28.37317968,"test":[0.4940467782]}, +{"learn":[0.4915489564],"iteration":4208,"passed_time":150.7862207,"remaining_time":28.33734868,"test":[0.4940463908]}, +{"learn":[0.4915483306],"iteration":4209,"passed_time":150.8212653,"remaining_time":28.30137758,"test":[0.4940460033]}, +{"learn":[0.4915476153],"iteration":4210,"passed_time":150.8565959,"remaining_time":28.2654605,"test":[0.4940454669]}, +{"learn":[0.4915472577],"iteration":4211,"passed_time":150.8935456,"remaining_time":28.22984662,"test":[0.4940451093]}, +{"learn":[0.4915467809],"iteration":4212,"passed_time":150.9312544,"remaining_time":28.19437389,"test":[0.4940448708]}, +{"learn":[0.4915456186],"iteration":4213,"passed_time":150.9666796,"remaining_time":28.15847418,"test":[0.4940440066]}, +{"learn":[0.4915450821],"iteration":4214,"passed_time":151.0044137,"remaining_time":28.12300469,"test":[0.4940435595]}, +{"learn":[0.4915437112],"iteration":4215,"passed_time":151.0423957,"remaining_time":28.08758022,"test":[0.4940429039]}, +{"learn":[0.4915431748],"iteration":4216,"passed_time":151.0789209,"remaining_time":28.05188405,"test":[0.4940425463]}, +{"learn":[0.4915423403],"iteration":4217,"passed_time":151.1142315,"remaining_time":28.01596231,"test":[0.494042129]}, +{"learn":[0.491541178],"iteration":4218,"passed_time":151.1477865,"remaining_time":27.97971587,"test":[0.4940413244]}, +{"learn":[0.49154088],"iteration":4219,"passed_time":151.1853857,"remaining_time":27.94421821,"test":[0.4940410562]}, +{"learn":[0.4915404926],"iteration":4220,"passed_time":151.2213954,"remaining_time":27.90842621,"test":[0.4940408773]}, +{"learn":[0.4915397475],"iteration":4221,"passed_time":151.2556585,"remaining_time":27.87231225,"test":[0.4940399237]}, +{"learn":[0.4915388237],"iteration":4222,"passed_time":151.2925752,"remaining_time":27.8366874,"test":[0.494039566]}, +{"learn":[0.491538317],"iteration":4223,"passed_time":151.3287327,"remaining_time":27.80092249,"test":[0.4940390892]}, +{"learn":[0.4915378402],"iteration":4224,"passed_time":151.3664044,"remaining_time":27.76543512,"test":[0.4940388508]}, +{"learn":[0.4915376018],"iteration":4225,"passed_time":151.4041145,"remaining_time":27.72995376,"test":[0.4940385826]}, +{"learn":[0.4915370653],"iteration":4226,"passed_time":151.4393082,"remaining_time":27.69401118,"test":[0.4940381951]}, +{"learn":[0.4915361415],"iteration":4227,"passed_time":151.4748712,"remaining_time":27.65813637,"test":[0.4940378375]}, +{"learn":[0.4915357242],"iteration":4228,"passed_time":151.5112936,"remaining_time":27.62241839,"test":[0.4940375693]}, +{"learn":[0.4915352474],"iteration":4229,"passed_time":151.5487764,"remaining_time":27.5868931,"test":[0.4940372117]}, +{"learn":[0.4915338467],"iteration":4230,"passed_time":151.5855389,"remaining_time":27.55123597,"test":[0.4940366752]}, +{"learn":[0.4915329228],"iteration":4231,"passed_time":151.621934,"remaining_time":27.51551165,"test":[0.4940362878]}, +{"learn":[0.4915322373],"iteration":4232,"passed_time":151.6587059,"remaining_time":27.47985528,"test":[0.4940358705]}, +{"learn":[0.4915318797],"iteration":4233,"passed_time":151.696228,"remaining_time":27.44433411,"test":[0.4940354235]}, +{"learn":[0.4915309558],"iteration":4234,"passed_time":151.7318667,"remaining_time":27.40847179,"test":[0.4940347679]}, +{"learn":[0.4915301512],"iteration":4235,"passed_time":151.7900421,"remaining_time":27.37667426,"test":[0.49403444]}, +{"learn":[0.4915294359],"iteration":4236,"passed_time":151.8281097,"remaining_time":27.34124327,"test":[0.4940339334]}, +{"learn":[0.4915287803],"iteration":4237,"passed_time":151.8641545,"remaining_time":27.30544731,"test":[0.4940337546]}, +{"learn":[0.4915279756],"iteration":4238,"passed_time":151.8987374,"remaining_time":27.26938881,"test":[0.4940329797]}, +{"learn":[0.4915274392],"iteration":4239,"passed_time":151.934065,"remaining_time":27.23346448,"test":[0.4940325029]}, +{"learn":[0.4915264557],"iteration":4240,"passed_time":151.9691314,"remaining_time":27.19749369,"test":[0.4940316684]}, +{"learn":[0.4915258298],"iteration":4241,"passed_time":152.006316,"remaining_time":27.16190183,"test":[0.49403143]}, +{"learn":[0.491525353],"iteration":4242,"passed_time":152.0423948,"remaining_time":27.12611192,"test":[0.494031132]}, +{"learn":[0.4915247272],"iteration":4243,"passed_time":152.0809874,"remaining_time":27.09076968,"test":[0.4940308936]}, +{"learn":[0.4915234457],"iteration":4244,"passed_time":152.1152309,"remaining_time":27.05465238,"test":[0.4940299399]}, +{"learn":[0.49152279],"iteration":4245,"passed_time":152.1510563,"remaining_time":27.01881687,"test":[0.4940296419]}, +{"learn":[0.4915219853],"iteration":4246,"passed_time":152.1862568,"remaining_time":26.98287058,"test":[0.4940291054]}, +{"learn":[0.4915214787],"iteration":4247,"passed_time":152.2224152,"remaining_time":26.94709422,"test":[0.4940288074]}, +{"learn":[0.4915206442],"iteration":4248,"passed_time":152.2561942,"remaining_time":26.91089712,"test":[0.4940285094]}, +{"learn":[0.4915197502],"iteration":4249,"passed_time":152.2919236,"remaining_time":26.87504534,"test":[0.4940281815]}, +{"learn":[0.4915185283],"iteration":4250,"passed_time":152.3276762,"remaining_time":26.83919771,"test":[0.4940274067]}, +{"learn":[0.4915173958],"iteration":4251,"passed_time":152.3625635,"remaining_time":26.80319791,"test":[0.4940263636]}, +{"learn":[0.4915169488],"iteration":4252,"passed_time":152.4112515,"remaining_time":26.76962259,"test":[0.4940260656]}, +{"learn":[0.4915165613],"iteration":4253,"passed_time":152.4491013,"remaining_time":26.73413953,"test":[0.494025857]}, +{"learn":[0.4915159355],"iteration":4254,"passed_time":152.4864355,"remaining_time":26.69856508,"test":[0.4940254099]}, +{"learn":[0.4915153692],"iteration":4255,"passed_time":152.5227919,"remaining_time":26.66281888,"test":[0.4940248139]}, +{"learn":[0.4915149222],"iteration":4256,"passed_time":152.5598196,"remaining_time":26.62718957,"test":[0.4940245457]}, +{"learn":[0.4915143262],"iteration":4257,"passed_time":152.5971278,"remaining_time":26.59160846,"test":[0.4940242774]}, +{"learn":[0.4915135811],"iteration":4258,"passed_time":152.6327158,"remaining_time":26.55572727,"test":[0.4940236814]}, +{"learn":[0.4915125976],"iteration":4259,"passed_time":152.6690799,"remaining_time":26.51998101,"test":[0.4940229065]}, +{"learn":[0.4915119718],"iteration":4260,"passed_time":152.7065599,"remaining_time":26.48442801,"test":[0.4940225489]}, +{"learn":[0.4915115247],"iteration":4261,"passed_time":152.7450405,"remaining_time":26.44904738,"test":[0.4940223999]}, +{"learn":[0.4915112267],"iteration":4262,"passed_time":152.7823266,"remaining_time":26.41345876,"test":[0.4940222509]}, +{"learn":[0.4915105115],"iteration":4263,"passed_time":152.8192142,"remaining_time":26.37780057,"test":[0.4940217144]}, +{"learn":[0.4915099154],"iteration":4264,"passed_time":152.8557101,"remaining_time":26.34207432,"test":[0.494021178]}, +{"learn":[0.491509379],"iteration":4265,"passed_time":152.8922209,"remaining_time":26.30635025,"test":[0.4940209396]}, +{"learn":[0.4915082763],"iteration":4266,"passed_time":152.9273694,"remaining_time":26.27039179,"test":[0.4940201945]}, +{"learn":[0.4915070544],"iteration":4267,"passed_time":152.9631527,"remaining_time":26.2345426,"test":[0.4940195389]}, +{"learn":[0.4915063689],"iteration":4268,"passed_time":152.9995625,"remaining_time":26.1988007,"test":[0.4940188236]}, +{"learn":[0.4915053259],"iteration":4269,"passed_time":153.0370108,"remaining_time":26.16323603,"test":[0.4940182872]}, +{"learn":[0.4915048192],"iteration":4270,"passed_time":153.0749897,"remaining_time":26.12776107,"test":[0.4940179594]}, +{"learn":[0.4915035973],"iteration":4271,"passed_time":153.112443,"remaining_time":26.09219534,"test":[0.4940174825]}, +{"learn":[0.4915027032],"iteration":4272,"passed_time":153.1495578,"remaining_time":26.05657115,"test":[0.4940169461]}, +{"learn":[0.4915020774],"iteration":4273,"passed_time":153.1870555,"remaining_time":26.0210113,"test":[0.4940166481]}, +{"learn":[0.491501541],"iteration":4274,"passed_time":153.2274743,"remaining_time":25.98594593,"test":[0.4940162308]}, +{"learn":[0.4915010939],"iteration":4275,"passed_time":153.2661297,"remaining_time":25.95057949,"test":[0.4940161116]}, +{"learn":[0.491500021],"iteration":4276,"passed_time":153.3020615,"remaining_time":25.9147511,"test":[0.494015456]}, +{"learn":[0.4914995442],"iteration":4277,"passed_time":153.3397979,"remaining_time":25.87922722,"test":[0.4940150089]}, +{"learn":[0.4914981137],"iteration":4278,"passed_time":153.3771507,"remaining_time":25.84363769,"test":[0.4940142043]}, +{"learn":[0.4914974878],"iteration":4279,"passed_time":153.4139056,"remaining_time":25.80794674,"test":[0.4940139658]}, +{"learn":[0.4914970706],"iteration":4280,"passed_time":153.4519717,"remaining_time":25.77247551,"test":[0.4940135784]}, +{"learn":[0.4914964746],"iteration":4281,"passed_time":153.4888954,"remaining_time":25.73681152,"test":[0.4940132804]}, +{"learn":[0.4914958189],"iteration":4282,"passed_time":153.5258429,"remaining_time":25.70115091,"test":[0.4940127141]}, +{"learn":[0.4914937626],"iteration":4283,"passed_time":153.5611666,"remaining_time":25.66521831,"test":[0.494011224]}, +{"learn":[0.4914933751],"iteration":4284,"passed_time":153.5980665,"remaining_time":25.62954903,"test":[0.4940106876]}, +{"learn":[0.4914929281],"iteration":4285,"passed_time":153.6349175,"remaining_time":25.59387101,"test":[0.49401033]}, +{"learn":[0.491492034],"iteration":4286,"passed_time":153.6710173,"remaining_time":25.55806749,"test":[0.4940096743]}, +{"learn":[0.4914914082],"iteration":4287,"passed_time":153.708405,"remaining_time":25.5224777,"test":[0.4940092869]}, +{"learn":[0.4914905737],"iteration":4288,"passed_time":153.7444704,"remaining_time":25.48666786,"test":[0.4940086014]}, +{"learn":[0.4914897988],"iteration":4289,"passed_time":153.7818336,"remaining_time":25.45107269,"test":[0.494007916]}, +{"learn":[0.4914890538],"iteration":4290,"passed_time":153.8170509,"remaining_time":25.41512213,"test":[0.4940074689]}, +{"learn":[0.4914883385],"iteration":4291,"passed_time":153.8542992,"remaining_time":25.37950695,"test":[0.4940071411]}, +{"learn":[0.4914875339],"iteration":4292,"passed_time":153.8911771,"remaining_time":25.34383,"test":[0.4940067239]}, +{"learn":[0.4914869676],"iteration":4293,"passed_time":153.9268327,"remaining_time":25.30795154,"test":[0.4940063364]}, +{"learn":[0.4914856563],"iteration":4294,"passed_time":153.961696,"remaining_time":25.27194312,"test":[0.4940057702]}, +{"learn":[0.4914852987],"iteration":4295,"passed_time":154.0004577,"remaining_time":25.23657407,"test":[0.4940054722]}, +{"learn":[0.491484643],"iteration":4296,"passed_time":154.0366328,"remaining_time":25.20078028,"test":[0.494005055]}, +{"learn":[0.4914836894],"iteration":4297,"passed_time":154.0736484,"remaining_time":25.16512358,"test":[0.4940046079]}, +{"learn":[0.4914832125],"iteration":4298,"passed_time":154.1110957,"remaining_time":25.12953666,"test":[0.4940042801]}, +{"learn":[0.4914825867],"iteration":4299,"passed_time":154.1480905,"remaining_time":25.09387521,"test":[0.4940041013]}, +{"learn":[0.4914817224],"iteration":4300,"passed_time":154.1846825,"remaining_time":25.05814765,"test":[0.4940032966]}, +{"learn":[0.4914807985],"iteration":4301,"passed_time":154.220702,"remaining_time":25.02232683,"test":[0.494002641]}, +{"learn":[0.4914802621],"iteration":4302,"passed_time":154.2584871,"remaining_time":24.9867919,"test":[0.4940024025]}, +{"learn":[0.4914798449],"iteration":4303,"passed_time":154.2961907,"remaining_time":24.95124273,"test":[0.4940020747]}, +{"learn":[0.491479219],"iteration":4304,"passed_time":154.3319848,"remaining_time":24.9153843,"test":[0.4940016575]}, +{"learn":[0.4914787124],"iteration":4305,"passed_time":154.3701351,"remaining_time":24.87990565,"test":[0.4940013595]}, +{"learn":[0.4914775799],"iteration":4306,"passed_time":154.406469,"remaining_time":24.8441335,"test":[0.494000823]}, +{"learn":[0.491476954],"iteration":4307,"passed_time":154.4436783,"remaining_time":24.80850171,"test":[0.4940004058]}, +{"learn":[0.4914764474],"iteration":4308,"passed_time":154.4813199,"remaining_time":24.77293851,"test":[0.4940001376]}, +{"learn":[0.4914760898],"iteration":4309,"passed_time":154.5191534,"remaining_time":24.73740507,"test":[0.4939998395]}, +{"learn":[0.4914754341],"iteration":4310,"passed_time":154.5553541,"remaining_time":24.7016096,"test":[0.4939993925]}, +{"learn":[0.4914748977],"iteration":4311,"passed_time":154.5915483,"remaining_time":24.6658129,"test":[0.4939990945]}, +{"learn":[0.491474242],"iteration":4312,"passed_time":154.6291982,"remaining_time":24.63024789,"test":[0.4939987667]}, +{"learn":[0.4914732288],"iteration":4313,"passed_time":154.6643039,"remaining_time":24.59427735,"test":[0.4939982004]}, +{"learn":[0.4914715598],"iteration":4314,"passed_time":154.6987321,"remaining_time":24.55819965,"test":[0.4939971275]}, +{"learn":[0.4914708148],"iteration":4315,"passed_time":154.7349015,"remaining_time":24.52239867,"test":[0.4939965613]}, +{"learn":[0.4914695333],"iteration":4316,"passed_time":154.7710421,"remaining_time":24.48659295,"test":[0.4939958758]}, +{"learn":[0.4914691756],"iteration":4317,"passed_time":154.808394,"remaining_time":24.4509784,"test":[0.4939955182]}, +{"learn":[0.491468371],"iteration":4318,"passed_time":154.8458779,"remaining_time":24.41538386,"test":[0.4939950712]}, +{"learn":[0.4914677153],"iteration":4319,"passed_time":154.882288,"remaining_time":24.37961941,"test":[0.4939947732]}, +{"learn":[0.4914665828],"iteration":4320,"passed_time":154.9182601,"remaining_time":24.34378585,"test":[0.4939940877]}, +{"learn":[0.4914633642],"iteration":4321,"passed_time":154.9517278,"remaining_time":24.30755933,"test":[0.4939917035]}, +{"learn":[0.4914619933],"iteration":4322,"passed_time":154.9876873,"remaining_time":24.27172434,"test":[0.4939908392]}, +{"learn":[0.4914616357],"iteration":4323,"passed_time":155.0246369,"remaining_time":24.23604406,"test":[0.4939904518]}, +{"learn":[0.4914608012],"iteration":4324,"passed_time":155.0619439,"remaining_time":24.20041898,"test":[0.4939899452]}, +{"learn":[0.4914597283],"iteration":4325,"passed_time":155.0983604,"remaining_time":24.1646544,"test":[0.4939892299]}, +{"learn":[0.4914591621],"iteration":4326,"passed_time":155.1355135,"remaining_time":24.12900406,"test":[0.4939889915]}, +{"learn":[0.4914587448],"iteration":4327,"passed_time":155.1722364,"remaining_time":24.09328624,"test":[0.4939886339]}, +{"learn":[0.4914578508],"iteration":4328,"passed_time":155.2087139,"remaining_time":24.05752992,"test":[0.493988008]}, +{"learn":[0.4914575229],"iteration":4329,"passed_time":155.2463856,"remaining_time":24.02195805,"test":[0.4939876802]}, +{"learn":[0.4914571057],"iteration":4330,"passed_time":155.284128,"remaining_time":23.98639612,"test":[0.4939874716]}, +{"learn":[0.4914556156],"iteration":4331,"passed_time":155.3200868,"remaining_time":23.95055816,"test":[0.4939865775]}, +{"learn":[0.4914550195],"iteration":4332,"passed_time":155.3565762,"remaining_time":23.91480183,"test":[0.4939863391]}, +{"learn":[0.4914542447],"iteration":4333,"passed_time":155.3918876,"remaining_time":23.87886413,"test":[0.4939859219]}, +{"learn":[0.4914536188],"iteration":4334,"passed_time":155.4288903,"remaining_time":23.84318617,"test":[0.4939855046]}, +{"learn":[0.491452695],"iteration":4335,"passed_time":155.4650314,"remaining_time":23.80737565,"test":[0.4939848788]}, +{"learn":[0.4914520393],"iteration":4336,"passed_time":155.5036356,"remaining_time":23.77194153,"test":[0.4939845808]}, +{"learn":[0.491451175],"iteration":4337,"passed_time":155.5396586,"remaining_time":23.73611203,"test":[0.4939839847]}, +{"learn":[0.4914497147],"iteration":4338,"passed_time":155.5746972,"remaining_time":23.70013249,"test":[0.4939830608]}, +{"learn":[0.4914490591],"iteration":4339,"passed_time":155.6106862,"remaining_time":23.6642979,"test":[0.4939824052]}, +{"learn":[0.4914485822],"iteration":4340,"passed_time":155.6488024,"remaining_time":23.62878618,"test":[0.493982137]}, +{"learn":[0.4914473007],"iteration":4341,"passed_time":155.6845657,"remaining_time":23.59291668,"test":[0.4939812131]}, +{"learn":[0.4914464067],"iteration":4342,"passed_time":155.7198035,"remaining_time":23.55696774,"test":[0.4939806469]}, +{"learn":[0.4914453636],"iteration":4343,"passed_time":155.7546862,"remaining_time":23.5209655,"test":[0.4939800806]}, +{"learn":[0.4914442609],"iteration":4344,"passed_time":155.7919636,"remaining_time":23.48532478,"test":[0.493979723]}, +{"learn":[0.4914434562],"iteration":4345,"passed_time":155.8284379,"remaining_time":23.44956244,"test":[0.4939790077]}, +{"learn":[0.491442741],"iteration":4346,"passed_time":155.8652143,"remaining_time":23.41384517,"test":[0.4939783521]}, +{"learn":[0.4914411615],"iteration":4347,"passed_time":155.8996079,"remaining_time":23.37777009,"test":[0.4939777262]}, +{"learn":[0.4914402376],"iteration":4348,"passed_time":155.9348549,"remaining_time":23.34182353,"test":[0.4939772494]}, +{"learn":[0.4914387177],"iteration":4349,"passed_time":155.9691276,"remaining_time":23.30573171,"test":[0.4939761169]}, +{"learn":[0.4914384494],"iteration":4350,"passed_time":156.0069202,"remaining_time":23.27016575,"test":[0.4939758189]}, +{"learn":[0.4914376746],"iteration":4351,"passed_time":156.043806,"remaining_time":23.23446376,"test":[0.493975491]}, +{"learn":[0.4914372574],"iteration":4352,"passed_time":156.0832162,"remaining_time":23.19913643,"test":[0.4939751334]}, +{"learn":[0.4914365719],"iteration":4353,"passed_time":156.1201333,"remaining_time":23.16343732,"test":[0.4939749546]}, +{"learn":[0.4914359759],"iteration":4354,"passed_time":156.158335,"remaining_time":23.12792791,"test":[0.4939744182]}, +{"learn":[0.4914355586],"iteration":4355,"passed_time":156.1982772,"remaining_time":23.09267459,"test":[0.4939741797]}, +{"learn":[0.491434754],"iteration":4356,"passed_time":156.234672,"remaining_time":23.05689559,"test":[0.4939737029]}, +{"learn":[0.4914342175],"iteration":4357,"passed_time":156.2732017,"remaining_time":23.02143081,"test":[0.4939734049]}, +{"learn":[0.4914336215],"iteration":4358,"passed_time":156.3114108,"remaining_time":22.98591749,"test":[0.4939731963]}, +{"learn":[0.4914323698],"iteration":4359,"passed_time":156.3475889,"remaining_time":22.95010479,"test":[0.4939724214]}, +{"learn":[0.4914312969],"iteration":4360,"passed_time":156.3835899,"remaining_time":22.91426598,"test":[0.4939716764]}, +{"learn":[0.491430224],"iteration":4361,"passed_time":156.4199182,"remaining_time":22.87847497,"test":[0.4939708717]}, +{"learn":[0.4914295386],"iteration":4362,"passed_time":156.4556592,"remaining_time":22.84259796,"test":[0.4939703651]}, +{"learn":[0.4914288829],"iteration":4363,"passed_time":156.4928024,"remaining_time":22.80692537,"test":[0.493970067]}, +{"learn":[0.4914283167],"iteration":4364,"passed_time":156.5301229,"remaining_time":22.7712779,"test":[0.493969471]}, +{"learn":[0.491427065],"iteration":4365,"passed_time":156.5661059,"remaining_time":22.73543545,"test":[0.4939688451]}, +{"learn":[0.4914262007],"iteration":4366,"passed_time":156.6013616,"remaining_time":22.6994875,"test":[0.4939681001]}, +{"learn":[0.4914252172],"iteration":4367,"passed_time":156.6376749,"remaining_time":22.66369289,"test":[0.4939675338]}, +{"learn":[0.4914248],"iteration":4368,"passed_time":156.6818928,"remaining_time":22.62903967,"test":[0.4939670272]}, +{"learn":[0.4914241741],"iteration":4369,"passed_time":156.7189801,"remaining_time":22.59335412,"test":[0.4939667888]}, +{"learn":[0.4914236377],"iteration":4370,"passed_time":156.7557849,"remaining_time":22.55762725,"test":[0.4939662821]}, +{"learn":[0.4914232205],"iteration":4371,"passed_time":156.7928843,"remaining_time":22.5219422,"test":[0.4939658947]}, +{"learn":[0.4914219688],"iteration":4372,"passed_time":156.8287922,"remaining_time":22.48608569,"test":[0.4939652092]}, +{"learn":[0.4914209555],"iteration":4373,"passed_time":156.8646982,"remaining_time":22.45022886,"test":[0.493964941]}, +{"learn":[0.4914203594],"iteration":4374,"passed_time":156.901398,"remaining_time":22.41448543,"test":[0.4939643748]}, +{"learn":[0.491419227],"iteration":4375,"passed_time":156.9386847,"remaining_time":22.37882524,"test":[0.4939637787]}, +{"learn":[0.4914183329],"iteration":4376,"passed_time":156.9736788,"remaining_time":22.342838,"test":[0.4939630039]}, +{"learn":[0.4914176772],"iteration":4377,"passed_time":157.0113063,"remaining_time":22.30722533,"test":[0.4939628847]}, +{"learn":[0.4914171408],"iteration":4378,"passed_time":157.0487592,"remaining_time":22.27158699,"test":[0.4939624972]}, +{"learn":[0.4914161573],"iteration":4379,"passed_time":157.0843681,"remaining_time":22.23568681,"test":[0.4939621098]}, +{"learn":[0.491415144],"iteration":4380,"passed_time":157.1202337,"remaining_time":22.19982303,"test":[0.4939616032]}, +{"learn":[0.4914146076],"iteration":4381,"passed_time":157.1586583,"remaining_time":22.16432014,"test":[0.4939613051]}, +{"learn":[0.4914137433],"iteration":4382,"passed_time":157.1951826,"remaining_time":22.12854841,"test":[0.4939606197]}, +{"learn":[0.4914131175],"iteration":4383,"passed_time":157.243795,"remaining_time":22.09447484,"test":[0.4939602025]}, +{"learn":[0.4914127002],"iteration":4384,"passed_time":157.2821257,"remaining_time":22.05895263,"test":[0.4939600236]}, +{"learn":[0.4914121638],"iteration":4385,"passed_time":157.3189435,"remaining_time":22.02321736,"test":[0.4939594872]}, +{"learn":[0.4914117168],"iteration":4386,"passed_time":157.3608305,"remaining_time":21.9881899,"test":[0.4939592786]}, +{"learn":[0.4914106737],"iteration":4387,"passed_time":157.3969726,"remaining_time":21.95235807,"test":[0.4939586825]}, +{"learn":[0.491409869],"iteration":4388,"passed_time":157.432871,"remaining_time":21.91649219,"test":[0.4939581461]}, +{"learn":[0.491409273],"iteration":4389,"passed_time":157.470568,"remaining_time":21.88087618,"test":[0.4939578779]}, +{"learn":[0.4914084087],"iteration":4390,"passed_time":157.5064882,"remaining_time":21.84501283,"test":[0.4939572222]}, +{"learn":[0.4914079617],"iteration":4391,"passed_time":157.5434107,"remaining_time":21.80928818,"test":[0.4939568944]}, +{"learn":[0.491407455],"iteration":4392,"passed_time":157.5811803,"remaining_time":21.77368005,"test":[0.4939564176]}, +{"learn":[0.4914068292],"iteration":4393,"passed_time":157.6174589,"remaining_time":21.7378653,"test":[0.4939559109]}, +{"learn":[0.4914052497],"iteration":4394,"passed_time":157.6535886,"remaining_time":21.70202983,"test":[0.4939551063]}, +{"learn":[0.4914044152],"iteration":4395,"passed_time":157.6909893,"remaining_time":21.66636887,"test":[0.4939544208]}, +{"learn":[0.4914034615],"iteration":4396,"passed_time":157.7267392,"remaining_time":21.63048072,"test":[0.4939539142]}, +{"learn":[0.4914031933],"iteration":4397,"passed_time":157.7634359,"remaining_time":21.59472224,"test":[0.4939534969]}, +{"learn":[0.4914024184],"iteration":4398,"passed_time":157.799499,"remaining_time":21.55887677,"test":[0.4939529903]}, +{"learn":[0.4914014946],"iteration":4399,"passed_time":157.8365784,"remaining_time":21.52316978,"test":[0.4939526029]}, +{"learn":[0.4914006601],"iteration":4400,"passed_time":157.872652,"remaining_time":21.48732528,"test":[0.4939520962]}, +{"learn":[0.4914002429],"iteration":4401,"passed_time":157.9098829,"remaining_time":21.45163788,"test":[0.4939516492]}, +{"learn":[0.491399319],"iteration":4402,"passed_time":157.9468236,"remaining_time":21.41591045,"test":[0.4939511426]}, +{"learn":[0.4913986634],"iteration":4403,"passed_time":157.9835248,"remaining_time":21.38015004,"test":[0.4939507253]}, +{"learn":[0.4913977097],"iteration":4404,"passed_time":158.0211521,"remaining_time":21.3445143,"test":[0.4939502187]}, +{"learn":[0.4913970838],"iteration":4405,"passed_time":158.058567,"remaining_time":21.30884902,"test":[0.4939498313]}, +{"learn":[0.4913959811],"iteration":4406,"passed_time":158.0955726,"remaining_time":21.27312788,"test":[0.4939493842]}, +{"learn":[0.4913952659],"iteration":4407,"passed_time":158.1321649,"remaining_time":21.23735064,"test":[0.4939489074]}, +{"learn":[0.49139464],"iteration":4408,"passed_time":158.168909,"remaining_time":21.20159338,"test":[0.4939485498]}, +{"learn":[0.4913942526],"iteration":4409,"passed_time":158.2051925,"remaining_time":21.16577405,"test":[0.4939483113]}, +{"learn":[0.4913937162],"iteration":4410,"passed_time":158.2430183,"remaining_time":21.13016046,"test":[0.4939478643]}, +{"learn":[0.4913927625],"iteration":4411,"passed_time":158.2796287,"remaining_time":21.09438388,"test":[0.4939472981]}, +{"learn":[0.4913920472],"iteration":4412,"passed_time":158.316567,"remaining_time":21.05865054,"test":[0.493947]}, +{"learn":[0.4913916002],"iteration":4413,"passed_time":158.3526874,"remaining_time":21.02280807,"test":[0.4939468808]}, +{"learn":[0.4913889478],"iteration":4414,"passed_time":158.3865985,"remaining_time":20.98667273,"test":[0.4939450927]}, +{"learn":[0.4913885604],"iteration":4415,"passed_time":158.4239117,"remaining_time":20.95098832,"test":[0.4939447947]}, +{"learn":[0.4913875471],"iteration":4416,"passed_time":158.4593924,"remaining_time":20.9150613,"test":[0.4939441688]}, +{"learn":[0.4913871895],"iteration":4417,"passed_time":158.4954819,"remaining_time":20.87921468,"test":[0.4939440496]}, +{"learn":[0.4913862656],"iteration":4418,"passed_time":158.5316094,"remaining_time":20.84337295,"test":[0.4939434238]}, +{"learn":[0.4913853119],"iteration":4419,"passed_time":158.5677948,"remaining_time":20.80753868,"test":[0.4939430661]}, +{"learn":[0.4913844476],"iteration":4420,"passed_time":158.603861,"remaining_time":20.77168865,"test":[0.4939424999]}, +{"learn":[0.4913834642],"iteration":4421,"passed_time":158.6399225,"remaining_time":20.7358379,"test":[0.4939416952]}, +{"learn":[0.4913824509],"iteration":4422,"passed_time":158.6748612,"remaining_time":20.69984059,"test":[0.4939413078]}, +{"learn":[0.4913817952],"iteration":4423,"passed_time":158.7105323,"remaining_time":20.6639391,"test":[0.493940831]}, +{"learn":[0.4913807522],"iteration":4424,"passed_time":158.7465845,"remaining_time":20.62808726,"test":[0.4939402647]}, +{"learn":[0.4913798581],"iteration":4425,"passed_time":158.7814255,"remaining_time":20.59207823,"test":[0.4939397581]}, +{"learn":[0.4913793216],"iteration":4426,"passed_time":158.819082,"remaining_time":20.55643415,"test":[0.4939395197]}, +{"learn":[0.4913786958],"iteration":4427,"passed_time":158.8561742,"remaining_time":20.52071627,"test":[0.4939389832]}, +{"learn":[0.4913773547],"iteration":4428,"passed_time":158.8936589,"remaining_time":20.48504837,"test":[0.4939382978]}, +{"learn":[0.4913764606],"iteration":4429,"passed_time":158.9313073,"remaining_time":20.44940071,"test":[0.4939378209]}, +{"learn":[0.4913756858],"iteration":4430,"passed_time":158.9676847,"remaining_time":20.41358894,"test":[0.4939374335]}, +{"learn":[0.4913753877],"iteration":4431,"passed_time":159.0058486,"remaining_time":20.37800587,"test":[0.4939372547]}, +{"learn":[0.4913747321],"iteration":4432,"passed_time":159.0424881,"remaining_time":20.34222665,"test":[0.4939371057]}, +{"learn":[0.4913741957],"iteration":4433,"passed_time":159.0793623,"remaining_time":20.30647702,"test":[0.4939365394]}, +{"learn":[0.4913735698],"iteration":4434,"passed_time":159.1177022,"remaining_time":20.27091358,"test":[0.4939360924]}, +{"learn":[0.4913727055],"iteration":4435,"passed_time":159.1542047,"remaining_time":20.23511529,"test":[0.4939356155]}, +{"learn":[0.4913719605],"iteration":4436,"passed_time":159.1917642,"remaining_time":20.19945081,"test":[0.4939351983]}, +{"learn":[0.491370679],"iteration":4437,"passed_time":159.2275282,"remaining_time":20.1635581,"test":[0.4939344235]}, +{"learn":[0.4913697551],"iteration":4438,"passed_time":159.2655003,"remaining_time":20.12794451,"test":[0.4939339764]}, +{"learn":[0.4913691293],"iteration":4439,"passed_time":159.3030345,"remaining_time":20.09227462,"test":[0.49393344]}, +{"learn":[0.4913683544],"iteration":4440,"passed_time":159.3400059,"remaining_time":20.05653306,"test":[0.4939330525]}, +{"learn":[0.4913677583],"iteration":4441,"passed_time":159.3775142,"remaining_time":20.02085838,"test":[0.4939327247]}, +{"learn":[0.4913673113],"iteration":4442,"passed_time":159.4140472,"remaining_time":19.9850606,"test":[0.4939323075]}, +{"learn":[0.4913664172],"iteration":4443,"passed_time":159.451499,"remaining_time":19.94937746,"test":[0.4939318009]}, +{"learn":[0.491365553],"iteration":4444,"passed_time":159.4872466,"remaining_time":19.91348074,"test":[0.4939310856]}, +{"learn":[0.4913649867],"iteration":4445,"passed_time":159.5227919,"remaining_time":19.87755886,"test":[0.4939306386]}, +{"learn":[0.4913640331],"iteration":4446,"passed_time":159.5570547,"remaining_time":19.84147768,"test":[0.4939300127]}, +{"learn":[0.4913631688],"iteration":4447,"passed_time":159.5936633,"remaining_time":19.80568844,"test":[0.4939294465]}, +{"learn":[0.4913621555],"iteration":4448,"passed_time":159.6305106,"remaining_time":19.76992838,"test":[0.4939289398]}, +{"learn":[0.4913616489],"iteration":4449,"passed_time":159.6666889,"remaining_time":19.73408514,"test":[0.4939286716]}, +{"learn":[0.4913609634],"iteration":4450,"passed_time":159.7028658,"remaining_time":19.69824159,"test":[0.4939281352]}, +{"learn":[0.491360129],"iteration":4451,"passed_time":159.7390327,"remaining_time":19.66239666,"test":[0.4939275093]}, +{"learn":[0.4913595329],"iteration":4452,"passed_time":159.7761188,"remaining_time":19.62666449,"test":[0.4939271815]}, +{"learn":[0.4913589667],"iteration":4453,"passed_time":159.8141849,"remaining_time":19.59105185,"test":[0.4939268239]}, +{"learn":[0.49135846],"iteration":4454,"passed_time":159.8513938,"remaining_time":19.55533325,"test":[0.4939264066]}, +{"learn":[0.4913567613],"iteration":4455,"passed_time":159.8857199,"remaining_time":19.51926203,"test":[0.4939254232]}, +{"learn":[0.491356195],"iteration":4456,"passed_time":159.922427,"remaining_time":19.48348169,"test":[0.4939249761]}, +{"learn":[0.4913548539],"iteration":4457,"passed_time":159.9577242,"remaining_time":19.4475295,"test":[0.4939240224]}, +{"learn":[0.4913541089],"iteration":4458,"passed_time":159.9945618,"remaining_time":19.4117645,"test":[0.4939236052]}, +{"learn":[0.4913535426],"iteration":4459,"passed_time":160.0313902,"remaining_time":19.37599792,"test":[0.4939231582]}, +{"learn":[0.4913518439],"iteration":4460,"passed_time":160.065994,"remaining_time":19.33996207,"test":[0.4939222641]}, +{"learn":[0.4913512181],"iteration":4461,"passed_time":160.1028287,"remaining_time":19.30419584,"test":[0.4939218469]}, +{"learn":[0.4913499962],"iteration":4462,"passed_time":160.1399979,"remaining_time":19.26846938,"test":[0.493921072]}, +{"learn":[0.4913493405],"iteration":4463,"passed_time":160.1768601,"remaining_time":19.23270542,"test":[0.4939207442]}, +{"learn":[0.4913488935],"iteration":4464,"passed_time":160.2135199,"remaining_time":19.19691672,"test":[0.4939201779]}, +{"learn":[0.4913485955],"iteration":4465,"passed_time":160.2515431,"remaining_time":19.16129064,"test":[0.4939198501]}, +{"learn":[0.4913477014],"iteration":4466,"passed_time":160.3003607,"remaining_time":19.12695148,"test":[0.4939194329]}, +{"learn":[0.4913470457],"iteration":4467,"passed_time":160.3407418,"remaining_time":19.09160131,"test":[0.4939191349]}, +{"learn":[0.4913465987],"iteration":4468,"passed_time":160.3788572,"remaining_time":19.05597968,"test":[0.4939188964]}, +{"learn":[0.4913461815],"iteration":4469,"passed_time":160.4168109,"remaining_time":19.02033776,"test":[0.493918658]}, +{"learn":[0.4913442741],"iteration":4470,"passed_time":160.4504224,"remaining_time":18.98418105,"test":[0.4939171977]}, +{"learn":[0.4913432608],"iteration":4471,"passed_time":160.486123,"remaining_time":18.94827213,"test":[0.4939164229]}, +{"learn":[0.4913427244],"iteration":4472,"passed_time":160.5226761,"remaining_time":18.91246374,"test":[0.493916095]}, +{"learn":[0.4913419495],"iteration":4473,"passed_time":160.5593011,"remaining_time":18.87666348,"test":[0.4939158268]}, +{"learn":[0.4913412343],"iteration":4474,"passed_time":160.597147,"remaining_time":18.84100607,"test":[0.4939153798]}, +{"learn":[0.4913405786],"iteration":4475,"passed_time":160.6338353,"remaining_time":18.80521217,"test":[0.4939150519]}, +{"learn":[0.491339774],"iteration":4476,"passed_time":160.6687662,"remaining_time":18.76921258,"test":[0.4939142473]}, +{"learn":[0.4913385521],"iteration":4477,"passed_time":160.7050925,"remaining_time":18.73337613,"test":[0.493913681]}, +{"learn":[0.4913377176],"iteration":4478,"passed_time":160.7407573,"remaining_time":18.69746251,"test":[0.493913383]}, +{"learn":[0.4913371514],"iteration":4479,"passed_time":160.7779744,"remaining_time":18.66172918,"test":[0.4939130254]}, +{"learn":[0.4913364063],"iteration":4480,"passed_time":160.8150569,"remaining_time":18.62597959,"test":[0.4939124293]}, +{"learn":[0.4913359891],"iteration":4481,"passed_time":160.8537748,"remaining_time":18.59041841,"test":[0.4939122803]}, +{"learn":[0.4913355122],"iteration":4482,"passed_time":160.891018,"remaining_time":18.55468577,"test":[0.4939120419]}, +{"learn":[0.4913348864],"iteration":4483,"passed_time":160.9279392,"remaining_time":18.5189154,"test":[0.4939116247]}, +{"learn":[0.491334499],"iteration":4484,"passed_time":160.9662695,"remaining_time":18.48330631,"test":[0.4939114161]}, +{"learn":[0.4913334261],"iteration":4485,"passed_time":161.0024287,"remaining_time":18.44744725,"test":[0.4939107306]}, +{"learn":[0.491332979],"iteration":4486,"passed_time":161.0382612,"remaining_time":18.4115507,"test":[0.4939102836]}, +{"learn":[0.4913324724],"iteration":4487,"passed_time":161.0760346,"remaining_time":18.37587561,"test":[0.4939100452]}, +{"learn":[0.4913318168],"iteration":4488,"passed_time":161.1127679,"remaining_time":18.34008117,"test":[0.4939094491]}, +{"learn":[0.4913313399],"iteration":4489,"passed_time":161.1481091,"remaining_time":18.3041282,"test":[0.4939091511]}, +{"learn":[0.4913306247],"iteration":4490,"passed_time":161.1847381,"remaining_time":18.26832147,"test":[0.4939087041]}, +{"learn":[0.4913300286],"iteration":4491,"passed_time":161.2209603,"remaining_time":18.23246836,"test":[0.493908257]}, +{"learn":[0.4913294922],"iteration":4492,"passed_time":161.2581842,"remaining_time":18.19672811,"test":[0.4939078398]}, +{"learn":[0.4913288067],"iteration":4493,"passed_time":161.2947525,"remaining_time":18.16091339,"test":[0.4939077206]}, +{"learn":[0.4913278828],"iteration":4494,"passed_time":161.3300829,"remaining_time":18.12495925,"test":[0.4939070649]}, +{"learn":[0.4913270484],"iteration":4495,"passed_time":161.3669739,"remaining_time":18.08918035,"test":[0.4939066477]}, +{"learn":[0.4913257371],"iteration":4496,"passed_time":161.4015176,"remaining_time":18.05313839,"test":[0.4939059026]}, +{"learn":[0.4913253198],"iteration":4497,"passed_time":161.4361815,"remaining_time":18.01711051,"test":[0.4939054556]}, +{"learn":[0.4913245152],"iteration":4498,"passed_time":161.4693479,"remaining_time":17.98091649,"test":[0.4939050086]}, +{"learn":[0.491324098],"iteration":4499,"passed_time":161.5051622,"remaining_time":17.94501802,"test":[0.4939045317]}, +{"learn":[0.4913237403],"iteration":4500,"passed_time":161.5432518,"remaining_time":17.90937184,"test":[0.4939041443]}, +{"learn":[0.4913226972],"iteration":4501,"passed_time":161.5795931,"remaining_time":17.87353118,"test":[0.4939035483]}, +{"learn":[0.4913220118],"iteration":4502,"passed_time":161.6156913,"remaining_time":17.83766347,"test":[0.4939030714]}, +{"learn":[0.4913212667],"iteration":4503,"passed_time":161.6508244,"remaining_time":17.80168937,"test":[0.4939025648]}, +{"learn":[0.4913205515],"iteration":4504,"passed_time":161.6888025,"remaining_time":17.76602824,"test":[0.4939022071]}, +{"learn":[0.4913201938],"iteration":4505,"passed_time":161.7268948,"remaining_time":17.73037861,"test":[0.4939019687]}, +{"learn":[0.4913197766],"iteration":4506,"passed_time":161.7652503,"remaining_time":17.69475669,"test":[0.4939017303]}, +{"learn":[0.49131927],"iteration":4507,"passed_time":161.8026427,"remaining_time":17.65902844,"test":[0.4939014323]}, +{"learn":[0.4913186143],"iteration":4508,"passed_time":161.8387446,"remaining_time":17.62315892,"test":[0.4939009555]}, +{"learn":[0.4913183461],"iteration":4509,"passed_time":161.8768221,"remaining_time":17.58750395,"test":[0.493900717]}, +{"learn":[0.4913172434],"iteration":4510,"passed_time":161.9157668,"remaining_time":17.55194191,"test":[0.4939001508]}, +{"learn":[0.4913167964],"iteration":4511,"passed_time":161.9521664,"remaining_time":17.5161031,"test":[0.4938997634]}, +{"learn":[0.4913161109],"iteration":4512,"passed_time":161.9889065,"remaining_time":17.48030079,"test":[0.4938992865]}, +{"learn":[0.4913157235],"iteration":4513,"passed_time":162.0278857,"remaining_time":17.44473914,"test":[0.4938990183]}, +{"learn":[0.4913139056],"iteration":4514,"passed_time":162.0631954,"remaining_time":17.40878179,"test":[0.493898005]}, +{"learn":[0.4913126539],"iteration":4515,"passed_time":162.1004035,"remaining_time":17.37302818,"test":[0.4938973494]}, +{"learn":[0.4913108359],"iteration":4516,"passed_time":162.1353282,"remaining_time":17.33702978,"test":[0.4938958295]}, +{"learn":[0.4913096736],"iteration":4517,"passed_time":162.1706771,"remaining_time":17.30107711,"test":[0.4938952036]}, +{"learn":[0.4913086305],"iteration":4518,"passed_time":162.2052287,"remaining_time":17.26503983,"test":[0.4938943393]}, +{"learn":[0.4913077663],"iteration":4519,"passed_time":162.2428681,"remaining_time":17.22933113,"test":[0.4938937731]}, +{"learn":[0.4913075577],"iteration":4520,"passed_time":162.2793943,"remaining_time":17.19350362,"test":[0.4938934155]}, +{"learn":[0.4913065146],"iteration":4521,"passed_time":162.3160942,"remaining_time":17.15769417,"test":[0.4938927002]}, +{"learn":[0.4913060079],"iteration":4522,"passed_time":162.3543839,"remaining_time":17.12205198,"test":[0.4938925214]}, +{"learn":[0.4913055311],"iteration":4523,"passed_time":162.3910342,"remaining_time":17.08623614,"test":[0.4938920744]}, +{"learn":[0.4913049351],"iteration":4524,"passed_time":162.4266212,"remaining_time":17.0503083,"test":[0.4938916571]}, +{"learn":[0.4913043688],"iteration":4525,"passed_time":162.4613858,"remaining_time":17.01429449,"test":[0.4938912995]}, +{"learn":[0.4913037132],"iteration":4526,"passed_time":162.4972231,"remaining_time":16.97839332,"test":[0.4938909717]}, +{"learn":[0.4913030277],"iteration":4527,"passed_time":162.5331443,"remaining_time":16.94250091,"test":[0.4938907333]}, +{"learn":[0.4913023125],"iteration":4528,"passed_time":162.5700333,"remaining_time":16.90670914,"test":[0.4938902862]}, +{"learn":[0.4913015376],"iteration":4529,"passed_time":162.6070694,"remaining_time":16.87093214,"test":[0.4938900776]}, +{"learn":[0.4913007627],"iteration":4530,"passed_time":162.6427851,"remaining_time":16.83501792,"test":[0.4938892729]}, +{"learn":[0.4912995408],"iteration":4531,"passed_time":162.678624,"remaining_time":16.79911651,"test":[0.4938886769]}, +{"learn":[0.4912987064],"iteration":4532,"passed_time":162.7146138,"remaining_time":16.76323067,"test":[0.4938882895]}, +{"learn":[0.4912975739],"iteration":4533,"passed_time":162.7491489,"remaining_time":16.72719527,"test":[0.4938879914]}, +{"learn":[0.4912971567],"iteration":4534,"passed_time":162.7856429,"remaining_time":16.6913614,"test":[0.493887604]}, +{"learn":[0.491296799],"iteration":4535,"passed_time":162.8222267,"remaining_time":16.65553642,"test":[0.4938873656]}, +{"learn":[0.4912962626],"iteration":4536,"passed_time":162.8594331,"remaining_time":16.61977464,"test":[0.4938869782]}, +{"learn":[0.4912952791],"iteration":4537,"passed_time":162.8952433,"remaining_time":16.58387008,"test":[0.4938863523]}, +{"learn":[0.4912945937],"iteration":4538,"passed_time":162.9344602,"remaining_time":16.54831156,"test":[0.4938857861]}, +{"learn":[0.4912938784],"iteration":4539,"passed_time":162.9699894,"remaining_time":16.51237778,"test":[0.4938855178]}, +{"learn":[0.4912930141],"iteration":4540,"passed_time":163.0058241,"remaining_time":16.47647507,"test":[0.4938850112]}, +{"learn":[0.4912918518],"iteration":4541,"passed_time":163.0417658,"remaining_time":16.44058316,"test":[0.4938841469]}, +{"learn":[0.491291673],"iteration":4542,"passed_time":163.0791109,"remaining_time":16.40483242,"test":[0.4938839383]}, +{"learn":[0.491290928],"iteration":4543,"passed_time":163.1159805,"remaining_time":16.36903325,"test":[0.4938835509]}, +{"learn":[0.4912895869],"iteration":4544,"passed_time":163.1511565,"remaining_time":16.33306407,"test":[0.493882627]}, +{"learn":[0.4912887822],"iteration":4545,"passed_time":163.1864047,"remaining_time":16.29710245,"test":[0.4938820608]}, +{"learn":[0.4912881564],"iteration":4546,"passed_time":163.2237909,"remaining_time":16.26135414,"test":[0.4938818224]}, +{"learn":[0.4912877689],"iteration":4547,"passed_time":163.2622645,"remaining_time":16.22571318,"test":[0.4938815243]}, +{"learn":[0.4912855636],"iteration":4548,"passed_time":163.2962553,"remaining_time":16.18962654,"test":[0.4938803919]}, +{"learn":[0.4912849377],"iteration":4549,"passed_time":163.3324511,"remaining_time":16.1537589,"test":[0.4938798852]}, +{"learn":[0.4912845503],"iteration":4550,"passed_time":163.3709778,"remaining_time":16.11812108,"test":[0.4938795574]}, +{"learn":[0.4912837158],"iteration":4551,"passed_time":163.4084661,"remaining_time":16.0823798,"test":[0.4938791104]}, +{"learn":[0.491283388],"iteration":4552,"passed_time":163.4457668,"remaining_time":16.04661932,"test":[0.4938789017]}, +{"learn":[0.4912828217],"iteration":4553,"passed_time":163.4825381,"remaining_time":16.01080632,"test":[0.4938783057]}, +{"learn":[0.4912823449],"iteration":4554,"passed_time":163.5193056,"remaining_time":15.97499253,"test":[0.4938780375]}, +{"learn":[0.4912818085],"iteration":4555,"passed_time":163.5562721,"remaining_time":15.93919772,"test":[0.4938776202]}, +{"learn":[0.491280825],"iteration":4556,"passed_time":163.5920732,"remaining_time":15.9032891,"test":[0.493877054]}, +{"learn":[0.4912801097],"iteration":4557,"passed_time":163.6292518,"remaining_time":15.86751411,"test":[0.4938768156]}, +{"learn":[0.4912796329],"iteration":4558,"passed_time":163.6650866,"remaining_time":15.83160851,"test":[0.4938762791]}, +{"learn":[0.4912789176],"iteration":4559,"passed_time":163.7018931,"remaining_time":15.7957967,"test":[0.4938760407]}, +{"learn":[0.4912779938],"iteration":4560,"passed_time":163.7388134,"remaining_time":15.75999542,"test":[0.4938755341]}, +{"learn":[0.4912770997],"iteration":4561,"passed_time":163.7760709,"remaining_time":15.72422601,"test":[0.4938749976]}, +{"learn":[0.4912768315],"iteration":4562,"passed_time":163.8130555,"remaining_time":15.68842981,"test":[0.493874789]}, +{"learn":[0.4912762056],"iteration":4563,"passed_time":163.8502299,"remaining_time":15.65265123,"test":[0.4938745506]}, +{"learn":[0.4912751923],"iteration":4564,"passed_time":163.8853359,"remaining_time":15.61667494,"test":[0.493874193]}, +{"learn":[0.4912748049],"iteration":4565,"passed_time":163.9223838,"remaining_time":15.58088361,"test":[0.4938738353]}, +{"learn":[0.4912736724],"iteration":4566,"passed_time":163.9586868,"remaining_time":15.54502111,"test":[0.4938730605]}, +{"learn":[0.4912726592],"iteration":4567,"passed_time":163.9936804,"remaining_time":15.50903457,"test":[0.4938724942]}, +{"learn":[0.4912714671],"iteration":4568,"passed_time":164.0292146,"remaining_time":15.47309947,"test":[0.4938718088]}, +{"learn":[0.491270871],"iteration":4569,"passed_time":164.0672468,"remaining_time":15.43739959,"test":[0.4938715704]}, +{"learn":[0.4912703346],"iteration":4570,"passed_time":164.1046036,"remaining_time":15.4016353,"test":[0.4938709743]}, +{"learn":[0.4912692617],"iteration":4571,"passed_time":164.1405768,"remaining_time":15.36574078,"test":[0.4938703187]}, +{"learn":[0.4912686358],"iteration":4572,"passed_time":164.1782324,"remaining_time":15.33000333,"test":[0.4938700802]}, +{"learn":[0.4912678312],"iteration":4573,"passed_time":164.2139599,"remaining_time":15.29408546,"test":[0.4938694842]}, +{"learn":[0.4912672649],"iteration":4574,"passed_time":164.2509657,"remaining_time":15.25828643,"test":[0.4938691862]}, +{"learn":[0.4912659536],"iteration":4575,"passed_time":164.2862509,"remaining_time":15.22232745,"test":[0.4938682325]}, +{"learn":[0.4912649702],"iteration":4576,"passed_time":164.3222111,"remaining_time":15.18643113,"test":[0.4938676067]}, +{"learn":[0.4912639271],"iteration":4577,"passed_time":164.3580376,"remaining_time":15.15052247,"test":[0.4938668318]}, +{"learn":[0.4912632118],"iteration":4578,"passed_time":164.3950247,"remaining_time":15.11472055,"test":[0.493866355]}, +{"learn":[0.4912619303],"iteration":4579,"passed_time":164.4302505,"remaining_time":15.0787566,"test":[0.4938654311]}, +{"learn":[0.4912608276],"iteration":4580,"passed_time":164.4656695,"remaining_time":15.04281064,"test":[0.4938646562]}, +{"learn":[0.4912600826],"iteration":4581,"passed_time":164.5011492,"remaining_time":15.00687044,"test":[0.4938642688]}, +{"learn":[0.4912595163],"iteration":4582,"passed_time":164.5371301,"remaining_time":14.97097606,"test":[0.4938637324]}, +{"learn":[0.4912585925],"iteration":4583,"passed_time":164.5740694,"remaining_time":14.93516861,"test":[0.4938631661]}, +{"learn":[0.4912580262],"iteration":4584,"passed_time":164.6110604,"remaining_time":14.89936534,"test":[0.4938628383]}, +{"learn":[0.4912574302],"iteration":4585,"passed_time":164.6464893,"remaining_time":14.86342054,"test":[0.4938622124]}, +{"learn":[0.4912569533],"iteration":4586,"passed_time":164.6833082,"remaining_time":14.82760111,"test":[0.493861974]}, +{"learn":[0.4912565063],"iteration":4587,"passed_time":164.7198158,"remaining_time":14.79175329,"test":[0.493861676]}, +{"learn":[0.4912558506],"iteration":4588,"passed_time":164.7566659,"remaining_time":14.75593586,"test":[0.4938614078]}, +{"learn":[0.491255195],"iteration":4589,"passed_time":164.7933854,"remaining_time":14.72010632,"test":[0.4938608713]}, +{"learn":[0.491254748],"iteration":4590,"passed_time":164.8310381,"remaining_time":14.68435952,"test":[0.4938605733]}, +{"learn":[0.4912539135],"iteration":4591,"passed_time":164.8674369,"remaining_time":14.64850049,"test":[0.4938599475]}, +{"learn":[0.4912527214],"iteration":4592,"passed_time":164.9020151,"remaining_time":14.61247989,"test":[0.4938594706]}, +{"learn":[0.4912517677],"iteration":4593,"passed_time":164.9380539,"remaining_time":14.57658901,"test":[0.4938589938]}, +{"learn":[0.4912511717],"iteration":4594,"passed_time":164.9751296,"remaining_time":14.54078945,"test":[0.4938585169]}, +{"learn":[0.4912506054],"iteration":4595,"passed_time":165.0125876,"remaining_time":14.50502293,"test":[0.4938580401]}, +{"learn":[0.4912499796],"iteration":4596,"passed_time":165.0496434,"remaining_time":14.46922042,"test":[0.4938578017]}, +{"learn":[0.4912492345],"iteration":4597,"passed_time":165.0867074,"remaining_time":14.43341809,"test":[0.4938573547]}, +{"learn":[0.4912483107],"iteration":4598,"passed_time":165.1226011,"remaining_time":14.39751317,"test":[0.4938567884]}, +{"learn":[0.4912475656],"iteration":4599,"passed_time":165.1593896,"remaining_time":14.36168605,"test":[0.4938563116]}, +{"learn":[0.4912470888],"iteration":4600,"passed_time":165.1956298,"remaining_time":14.32581097,"test":[0.4938560136]}, +{"learn":[0.4912458073],"iteration":4601,"passed_time":165.2310497,"remaining_time":14.28986479,"test":[0.4938548215]}, +{"learn":[0.4912453006],"iteration":4602,"passed_time":165.2676184,"remaining_time":14.25401792,"test":[0.4938546426]}, +{"learn":[0.4912446152],"iteration":4603,"passed_time":165.3041858,"remaining_time":14.21817063,"test":[0.4938542552]}, +{"learn":[0.4912440787],"iteration":4604,"passed_time":165.3417447,"remaining_time":14.18240807,"test":[0.4938538082]}, +{"learn":[0.4912435423],"iteration":4605,"passed_time":165.3784362,"remaining_time":14.14657053,"test":[0.4938535102]}, +{"learn":[0.4912430952],"iteration":4606,"passed_time":165.4184245,"remaining_time":14.11101386,"test":[0.4938532121]}, +{"learn":[0.4912421416],"iteration":4607,"passed_time":165.455646,"remaining_time":14.07521988,"test":[0.4938526459]}, +{"learn":[0.4912413369],"iteration":4608,"passed_time":165.4933257,"remaining_time":14.03946417,"test":[0.4938523181]}, +{"learn":[0.491240115],"iteration":4609,"passed_time":165.5284353,"remaining_time":14.00349019,"test":[0.4938513942]}, +{"learn":[0.4912393402],"iteration":4610,"passed_time":165.563775,"remaining_time":13.96753599,"test":[0.4938508876]}, +{"learn":[0.4912382971],"iteration":4611,"passed_time":165.6004623,"remaining_time":13.93169544,"test":[0.4938502319]}, +{"learn":[0.4912377606],"iteration":4612,"passed_time":165.6358676,"remaining_time":13.89574697,"test":[0.4938497849]}, +{"learn":[0.4912370454],"iteration":4613,"passed_time":165.6728284,"remaining_time":13.85992886,"test":[0.4938495465]}, +{"learn":[0.4912366579],"iteration":4614,"passed_time":165.7103671,"remaining_time":13.82415847,"test":[0.4938490994]}, +{"learn":[0.4912356745],"iteration":4615,"passed_time":165.7463677,"remaining_time":13.78825936,"test":[0.4938486226]}, +{"learn":[0.4912353466],"iteration":4616,"passed_time":165.7839943,"remaining_time":13.75249508,"test":[0.4938484736]}, +{"learn":[0.4912344228],"iteration":4617,"passed_time":165.8192922,"remaining_time":13.71653738,"test":[0.4938479073]}, +{"learn":[0.4912339459],"iteration":4618,"passed_time":165.8576927,"remaining_time":13.68083588,"test":[0.4938477285]}, +{"learn":[0.4912330817],"iteration":4619,"passed_time":165.8921355,"remaining_time":13.64480768,"test":[0.4938469536]}, +{"learn":[0.4912323664],"iteration":4620,"passed_time":165.9286765,"remaining_time":13.60895226,"test":[0.4938465364]}, +{"learn":[0.4912315916],"iteration":4621,"passed_time":165.9637777,"remaining_time":13.57297879,"test":[0.4938458808]}, +{"learn":[0.4912304889],"iteration":4622,"passed_time":166.0001955,"remaining_time":13.53711306,"test":[0.4938454933]}, +{"learn":[0.4912298332],"iteration":4623,"passed_time":166.0365546,"remaining_time":13.50124233,"test":[0.4938449867]}, +{"learn":[0.4912287305],"iteration":4624,"passed_time":166.0720594,"remaining_time":13.46530211,"test":[0.4938445099]}, +{"learn":[0.4912273298],"iteration":4625,"passed_time":166.1066866,"remaining_time":13.42929113,"test":[0.4938435264]}, +{"learn":[0.491226853],"iteration":4626,"passed_time":166.1433295,"remaining_time":13.39344324,"test":[0.4938431986]}, +{"learn":[0.4912260185],"iteration":4627,"passed_time":166.1790871,"remaining_time":13.35752385,"test":[0.4938426621]}, +{"learn":[0.4912250648],"iteration":4628,"passed_time":166.2150696,"remaining_time":13.32162256,"test":[0.4938420065]}, +{"learn":[0.4912243198],"iteration":4629,"passed_time":166.251979,"remaining_time":13.2857953,"test":[0.49384147]}, +{"learn":[0.4912239026],"iteration":4630,"passed_time":166.2890228,"remaining_time":13.24997828,"test":[0.4938410826]}, +{"learn":[0.4912235449],"iteration":4631,"passed_time":166.3282724,"remaining_time":13.21433598,"test":[0.4938409336]}, +{"learn":[0.4912227999],"iteration":4632,"passed_time":166.3640439,"remaining_time":13.1784166,"test":[0.4938403375]}, +{"learn":[0.4912221144],"iteration":4633,"passed_time":166.4018063,"remaining_time":13.14265453,"test":[0.4938399203]}, +{"learn":[0.491221429],"iteration":4634,"passed_time":166.4390491,"remaining_time":13.10685068,"test":[0.4938395627]}, +{"learn":[0.4912207733],"iteration":4635,"passed_time":166.4766502,"remaining_time":13.07107434,"test":[0.4938391454]}, +{"learn":[0.4912200879],"iteration":4636,"passed_time":166.5146895,"remaining_time":13.03533153,"test":[0.4938389368]}, +{"learn":[0.4912194322],"iteration":4637,"passed_time":166.5517304,"remaining_time":12.99950979,"test":[0.4938385494]}, +{"learn":[0.4912184189],"iteration":4638,"passed_time":166.5887184,"remaining_time":12.96368341,"test":[0.4938376553]}, +{"learn":[0.4912179123],"iteration":4639,"passed_time":166.624889,"remaining_time":12.92779311,"test":[0.4938373871]}, +{"learn":[0.4912169586],"iteration":4640,"passed_time":166.6615553,"remaining_time":12.89194104,"test":[0.4938369103]}, +{"learn":[0.4912163328],"iteration":4641,"passed_time":166.6986342,"remaining_time":12.85612043,"test":[0.4938365228]}, +{"learn":[0.4912156473],"iteration":4642,"passed_time":166.7355241,"remaining_time":12.82028475,"test":[0.4938361056]}, +{"learn":[0.491214783],"iteration":4643,"passed_time":166.7717241,"remaining_time":12.78439573,"test":[0.4938357778]}, +{"learn":[0.4912139188],"iteration":4644,"passed_time":166.8070438,"remaining_time":12.7484393,"test":[0.4938350327]}, +{"learn":[0.4912133823],"iteration":4645,"passed_time":166.8464012,"remaining_time":12.71279079,"test":[0.4938346751]}, +{"learn":[0.4912126373],"iteration":4646,"passed_time":166.8835756,"remaining_time":12.67697486,"test":[0.493834079]}, +{"learn":[0.491212071],"iteration":4647,"passed_time":166.9213408,"remaining_time":12.64120309,"test":[0.4938337512]}, +{"learn":[0.4912117134],"iteration":4648,"passed_time":166.9587265,"remaining_time":12.60540181,"test":[0.4938336618]}, +{"learn":[0.4912101637],"iteration":4649,"passed_time":166.9932892,"remaining_time":12.56938736,"test":[0.4938327379]}, +{"learn":[0.4912095676],"iteration":4650,"passed_time":167.0285859,"remaining_time":12.53342861,"test":[0.4938325591]}, +{"learn":[0.4912088226],"iteration":4651,"passed_time":167.0651407,"remaining_time":12.49756426,"test":[0.4938321121]}, +{"learn":[0.4912081967],"iteration":4652,"passed_time":167.1023558,"remaining_time":12.46174886,"test":[0.4938318141]}, +{"learn":[0.4912076603],"iteration":4653,"passed_time":167.1393954,"remaining_time":12.42591982,"test":[0.4938314266]}, +{"learn":[0.4912071239],"iteration":4654,"passed_time":167.1761118,"remaining_time":12.39006629,"test":[0.4938310392]}, +{"learn":[0.4912061702],"iteration":4655,"passed_time":167.2114766,"remaining_time":12.35411253,"test":[0.4938302942]}, +{"learn":[0.4912057231],"iteration":4656,"passed_time":167.2483116,"remaining_time":12.31826732,"test":[0.4938299365]}, +{"learn":[0.4912054549],"iteration":4657,"passed_time":167.2849876,"remaining_time":12.28240999,"test":[0.4938298173]}, +{"learn":[0.4912047099],"iteration":4658,"passed_time":167.3213758,"remaining_time":12.24653126,"test":[0.4938295789]}, +{"learn":[0.4912041734],"iteration":4659,"passed_time":167.3573399,"remaining_time":12.21062137,"test":[0.4938290425]}, +{"learn":[0.491203339],"iteration":4660,"passed_time":167.3927062,"remaining_time":12.17466797,"test":[0.493828357]}, +{"learn":[0.4912028323],"iteration":4661,"passed_time":167.4298451,"remaining_time":12.13884334,"test":[0.4938281782]}, +{"learn":[0.4912022065],"iteration":4662,"passed_time":167.4651573,"remaining_time":12.10288613,"test":[0.4938274629]}, +{"learn":[0.4912008356],"iteration":4663,"passed_time":167.5009735,"remaining_time":12.0669655,"test":[0.4938264199]}, +{"learn":[0.4911997031],"iteration":4664,"passed_time":167.5383271,"remaining_time":12.03115532,"test":[0.4938257344]}, +{"learn":[0.491198958],"iteration":4665,"passed_time":167.5746848,"remaining_time":11.99527319,"test":[0.4938251682]}, +{"learn":[0.4911985706],"iteration":4666,"passed_time":167.6124126,"remaining_time":11.95948862,"test":[0.4938248105]}, +{"learn":[0.4911978255],"iteration":4667,"passed_time":167.6491015,"remaining_time":11.92362932,"test":[0.4938244827]}, +{"learn":[0.4911969911],"iteration":4668,"passed_time":167.6845277,"remaining_time":11.88768016,"test":[0.493823827]}, +{"learn":[0.491196544],"iteration":4669,"passed_time":167.7200862,"remaining_time":11.85174057,"test":[0.493823529]}, +{"learn":[0.4911958586],"iteration":4670,"passed_time":167.7576433,"remaining_time":11.81594191,"test":[0.493822933]}, +{"learn":[0.4911954115],"iteration":4671,"passed_time":167.7930858,"remaining_time":11.77999404,"test":[0.4938226052]}, +{"learn":[0.4911947559],"iteration":4672,"passed_time":167.8285592,"remaining_time":11.74404854,"test":[0.4938222475]}, +{"learn":[0.4911942791],"iteration":4673,"passed_time":167.8653145,"remaining_time":11.70819267,"test":[0.4938220389]}, +{"learn":[0.491193683],"iteration":4674,"passed_time":167.9009509,"remaining_time":11.67225862,"test":[0.4938216217]}, +{"learn":[0.4911929081],"iteration":4675,"passed_time":167.937646,"remaining_time":11.63639805,"test":[0.4938211448]}, +{"learn":[0.4911922823],"iteration":4676,"passed_time":167.9741099,"remaining_time":11.60052117,"test":[0.4938209362]}, +{"learn":[0.4911914478],"iteration":4677,"passed_time":168.0086354,"remaining_time":11.5645106,"test":[0.493820519]}, +{"learn":[0.4911907028],"iteration":4678,"passed_time":168.0442046,"remaining_time":11.52857228,"test":[0.493820221]}, +{"learn":[0.4911897789],"iteration":4679,"passed_time":168.0806477,"remaining_time":11.49269386,"test":[0.4938196547]}, +{"learn":[0.4911894809],"iteration":4680,"passed_time":168.1169168,"remaining_time":11.45680335,"test":[0.4938193269]}, +{"learn":[0.4911889146],"iteration":4681,"passed_time":168.1525314,"remaining_time":11.42086821,"test":[0.4938190289]}, +{"learn":[0.4911878418],"iteration":4682,"passed_time":168.1882396,"remaining_time":11.38493956,"test":[0.4938185222]}, +{"learn":[0.4911870669],"iteration":4683,"passed_time":168.2228679,"remaining_time":11.34893814,"test":[0.4938179262]}, +{"learn":[0.4911863516],"iteration":4684,"passed_time":168.2591441,"remaining_time":11.31304811,"test":[0.4938175388]}, +{"learn":[0.4911853384],"iteration":4685,"passed_time":168.2940207,"remaining_time":11.27706413,"test":[0.4938165851]}, +{"learn":[0.4911843847],"iteration":4686,"passed_time":168.3288935,"remaining_time":11.24108036,"test":[0.4938161082]}, +{"learn":[0.4911835204],"iteration":4687,"passed_time":168.3643868,"remaining_time":11.20513837,"test":[0.4938156016]}, +{"learn":[0.4911828052],"iteration":4688,"passed_time":168.3996228,"remaining_time":11.1691795,"test":[0.4938151844]}, +{"learn":[0.4911820899],"iteration":4689,"passed_time":168.4337726,"remaining_time":11.13314915,"test":[0.4938147671]}, +{"learn":[0.4911810468],"iteration":4690,"passed_time":168.4704773,"remaining_time":11.09728789,"test":[0.4938142903]}, +{"learn":[0.4911798547],"iteration":4691,"passed_time":168.50629,"remaining_time":11.06136771,"test":[0.4938136347]}, +{"learn":[0.4911790501],"iteration":4692,"passed_time":168.5423254,"remaining_time":11.02546215,"test":[0.493813128]}, +{"learn":[0.4911784242],"iteration":4693,"passed_time":168.5782899,"remaining_time":10.98955192,"test":[0.4938125618]}, +{"learn":[0.4911777388],"iteration":4694,"passed_time":168.6131773,"remaining_time":10.95357169,"test":[0.493812383]}, +{"learn":[0.4911769639],"iteration":4695,"passed_time":168.648766,"remaining_time":10.91763733,"test":[0.4938120849]}, +{"learn":[0.4911761294],"iteration":4696,"passed_time":168.6849451,"remaining_time":10.88174119,"test":[0.4938119359]}, +{"learn":[0.4911750566],"iteration":4697,"passed_time":168.7199623,"remaining_time":10.84577024,"test":[0.4938113399]}, +{"learn":[0.4911743115],"iteration":4698,"passed_time":168.7541923,"remaining_time":10.80974928,"test":[0.4938109524]}, +{"learn":[0.4911737155],"iteration":4699,"passed_time":168.7907061,"remaining_time":10.77387485,"test":[0.4938105054]}, +{"learn":[0.4911727916],"iteration":4700,"passed_time":168.8266156,"remaining_time":10.73796173,"test":[0.4938100584]}, +{"learn":[0.4911720763],"iteration":4701,"passed_time":168.8605972,"remaining_time":10.70192641,"test":[0.4938097306]}, +{"learn":[0.4911714505],"iteration":4702,"passed_time":168.8979362,"remaining_time":10.66610399,"test":[0.4938093133]}, +{"learn":[0.4911697517],"iteration":4703,"passed_time":168.9312377,"remaining_time":10.63002686,"test":[0.4938084193]}, +{"learn":[0.4911690067],"iteration":4704,"passed_time":168.9652764,"remaining_time":10.59399714,"test":[0.4938080616]}, +{"learn":[0.4911686193],"iteration":4705,"passed_time":169.0026352,"remaining_time":10.55817568,"test":[0.4938076444]}, +{"learn":[0.4911677252],"iteration":4706,"passed_time":169.0372191,"remaining_time":10.52218084,"test":[0.4938069589]}, +{"learn":[0.4911670397],"iteration":4707,"passed_time":169.073536,"remaining_time":10.48629408,"test":[0.4938065715]}, +{"learn":[0.4911661457],"iteration":4708,"passed_time":169.1073479,"remaining_time":10.45025233,"test":[0.4938060351]}, +{"learn":[0.491165043],"iteration":4709,"passed_time":169.1420343,"remaining_time":10.41426538,"test":[0.4938055284]}, +{"learn":[0.4911648344],"iteration":4710,"passed_time":169.178032,"remaining_time":10.37835942,"test":[0.4938052304]}, +{"learn":[0.4911641191],"iteration":4711,"passed_time":169.2130319,"remaining_time":10.34239244,"test":[0.4938047834]}, +{"learn":[0.491163076],"iteration":4712,"passed_time":169.2477481,"remaining_time":10.30640859,"test":[0.4938043363]}, +{"learn":[0.4911624204],"iteration":4713,"passed_time":169.2829855,"remaining_time":10.27045691,"test":[0.4938038595]}, +{"learn":[0.4911615561],"iteration":4714,"passed_time":169.3192664,"remaining_time":10.23456859,"test":[0.4938033827]}, +{"learn":[0.4911603044],"iteration":4715,"passed_time":169.3539333,"remaining_time":10.19858292,"test":[0.4938026078]}, +{"learn":[0.4911599468],"iteration":4716,"passed_time":169.3909584,"remaining_time":10.16273929,"test":[0.49380228]}, +{"learn":[0.4911592315],"iteration":4717,"passed_time":169.4264972,"remaining_time":10.12680632,"test":[0.4938019521]}, +{"learn":[0.4911576222],"iteration":4718,"passed_time":169.4614049,"remaining_time":10.09083593,"test":[0.4938007899]}, +{"learn":[0.4911571752],"iteration":4719,"passed_time":169.4970313,"remaining_time":10.05490864,"test":[0.4938006408]}, +{"learn":[0.4911567877],"iteration":4720,"passed_time":169.5355627,"remaining_time":10.01915315,"test":[0.4938003726]}, +{"learn":[0.4911561917],"iteration":4721,"passed_time":169.5732129,"remaining_time":9.983344597,"test":[0.4937999852]}, +{"learn":[0.491155685],"iteration":4722,"passed_time":169.6126385,"remaining_time":9.947639394,"test":[0.4937997766]}, +{"learn":[0.4911547016],"iteration":4723,"passed_time":169.6475628,"remaining_time":9.91166963,"test":[0.4937993891]}, +{"learn":[0.4911540459],"iteration":4724,"passed_time":169.6845501,"remaining_time":9.875820375,"test":[0.4937989421]}, +{"learn":[0.4911533009],"iteration":4725,"passed_time":169.7195281,"remaining_time":9.839854144,"test":[0.4937984057]}, +{"learn":[0.4911530624],"iteration":4726,"passed_time":169.7561864,"remaining_time":9.803985381,"test":[0.4937983759]}, +{"learn":[0.4911521982],"iteration":4727,"passed_time":169.7913621,"remaining_time":9.768030984,"test":[0.4937979288]}, +{"learn":[0.4911511253],"iteration":4728,"passed_time":169.8273483,"remaining_time":9.732123361,"test":[0.4937972434]}, +{"learn":[0.4911505889],"iteration":4729,"passed_time":169.8631565,"remaining_time":9.696205549,"test":[0.4937969752]}, +{"learn":[0.4911500822],"iteration":4730,"passed_time":169.9006114,"remaining_time":9.660381414,"test":[0.4937965877]}, +{"learn":[0.4911495756],"iteration":4731,"passed_time":169.9367614,"remaining_time":9.624482684,"test":[0.4937962599]}, +{"learn":[0.4911487709],"iteration":4732,"passed_time":169.9736448,"remaining_time":9.588625222,"test":[0.4937957831]}, +{"learn":[0.4911483239],"iteration":4733,"passed_time":170.0114029,"remaining_time":9.552816469,"test":[0.4937955446]}, +{"learn":[0.4911472808],"iteration":4734,"passed_time":170.0444431,"remaining_time":9.516742856,"test":[0.4937949784]}, +{"learn":[0.4911464761],"iteration":4735,"passed_time":170.0809278,"remaining_time":9.480862528,"test":[0.4937941141]}, +{"learn":[0.4911458503],"iteration":4736,"passed_time":170.1184559,"remaining_time":9.445039877,"test":[0.4937939949]}, +{"learn":[0.4911453436],"iteration":4737,"passed_time":170.1551032,"remaining_time":9.4091678,"test":[0.4937936671]}, +{"learn":[0.4911446582],"iteration":4738,"passed_time":170.1916362,"remaining_time":9.373289102,"test":[0.4937931307]}, +{"learn":[0.4911443602],"iteration":4739,"passed_time":170.2290687,"remaining_time":9.337459464,"test":[0.4937930115]}, +{"learn":[0.4911439429],"iteration":4740,"passed_time":170.2658858,"remaining_time":9.301595533,"test":[0.4937927432]}, +{"learn":[0.4911434959],"iteration":4741,"passed_time":170.3026843,"remaining_time":9.265730189,"test":[0.493792475]}, +{"learn":[0.4911425422],"iteration":4742,"passed_time":170.3398253,"remaining_time":9.229883005,"test":[0.4937919684]}, +{"learn":[0.4911419462],"iteration":4743,"passed_time":170.3762501,"remaining_time":9.193996631,"test":[0.4937917896]}, +{"learn":[0.4911402474],"iteration":4744,"passed_time":170.4111432,"remaining_time":9.158027718,"test":[0.4937908657]}, +{"learn":[0.491139711],"iteration":4745,"passed_time":170.446992,"remaining_time":9.122110403,"test":[0.4937904783]}, +{"learn":[0.4911378633],"iteration":4746,"passed_time":170.4799162,"remaining_time":9.086037246,"test":[0.4937895544]}, +{"learn":[0.4911373864],"iteration":4747,"passed_time":170.5168293,"remaining_time":9.050177126,"test":[0.4937891073]}, +{"learn":[0.4911364328],"iteration":4748,"passed_time":170.5514239,"remaining_time":9.014194018,"test":[0.4937883325]}, +{"learn":[0.4911356579],"iteration":4749,"passed_time":170.5881146,"remaining_time":8.97832182,"test":[0.4937879153]}, +{"learn":[0.4911347042],"iteration":4750,"passed_time":170.6330561,"remaining_time":8.942881701,"test":[0.4937874086]}, +{"learn":[0.4911341678],"iteration":4751,"passed_time":170.6703688,"remaining_time":8.907039448,"test":[0.4937870212]}, +{"learn":[0.4911330353],"iteration":4752,"passed_time":170.7045659,"remaining_time":8.87103467,"test":[0.4937863059]}, +{"learn":[0.4911319922],"iteration":4753,"passed_time":170.7390821,"remaining_time":8.835047157,"test":[0.4937858589]}, +{"learn":[0.4911312173],"iteration":4754,"passed_time":170.7744154,"remaining_time":8.799102373,"test":[0.4937853523]}, +{"learn":[0.4911304127],"iteration":4755,"passed_time":170.8122283,"remaining_time":8.763285049,"test":[0.4937850542]}, +{"learn":[0.4911300253],"iteration":4756,"passed_time":170.8493872,"remaining_time":8.727433484,"test":[0.4937848456]}, +{"learn":[0.4911292802],"iteration":4757,"passed_time":170.8846027,"remaining_time":8.691482527,"test":[0.4937843092]}, +{"learn":[0.4911288928],"iteration":4758,"passed_time":170.9213088,"remaining_time":8.655607361,"test":[0.493784041]}, +{"learn":[0.4911276113],"iteration":4759,"passed_time":170.957536,"remaining_time":8.619707699,"test":[0.4937833555]}, +{"learn":[0.4911266874],"iteration":4760,"passed_time":170.9928691,"remaining_time":8.583763013,"test":[0.4937828489]}, +{"learn":[0.4911259423],"iteration":4761,"passed_time":171.0287103,"remaining_time":8.547843982,"test":[0.4937824912]}, +{"learn":[0.4911256443],"iteration":4762,"passed_time":171.0654686,"remaining_time":8.511970618,"test":[0.4937820442]}, +{"learn":[0.4911251973],"iteration":4763,"passed_time":171.1020969,"remaining_time":8.476090441,"test":[0.493781776]}, +{"learn":[0.4911241542],"iteration":4764,"passed_time":171.1365552,"remaining_time":8.440102934,"test":[0.4937812693]}, +{"learn":[0.4911234091],"iteration":4765,"passed_time":171.1713665,"remaining_time":8.404133397,"test":[0.4937808223]}, +{"learn":[0.4911225747],"iteration":4766,"passed_time":171.2069065,"remaining_time":8.36819996,"test":[0.4937801667]}, +{"learn":[0.4911212336],"iteration":4767,"passed_time":171.2406963,"remaining_time":8.332181531,"test":[0.4937793918]}, +{"learn":[0.4911203991],"iteration":4768,"passed_time":171.2762868,"remaining_time":8.296251256,"test":[0.4937789746]}, +{"learn":[0.4911199223],"iteration":4769,"passed_time":171.3112888,"remaining_time":8.260292752,"test":[0.4937785871]}, +{"learn":[0.4911188196],"iteration":4770,"passed_time":171.3469513,"remaining_time":8.224366346,"test":[0.4937779613]}, +{"learn":[0.4911182831],"iteration":4771,"passed_time":171.3838938,"remaining_time":8.188501213,"test":[0.4937776335]}, +{"learn":[0.4911174487],"iteration":4772,"passed_time":171.4178594,"remaining_time":8.152494048,"test":[0.49377665]}, +{"learn":[0.4911169122],"iteration":4773,"passed_time":171.4542592,"remaining_time":8.116602972,"test":[0.4937764414]}, +{"learn":[0.4911158095],"iteration":4774,"passed_time":171.4888947,"remaining_time":8.080628545,"test":[0.4937757559]}, +{"learn":[0.4911155115],"iteration":4775,"passed_time":171.5259592,"remaining_time":8.044768604,"test":[0.4937754877]}, +{"learn":[0.4911151539],"iteration":4776,"passed_time":171.5637524,"remaining_time":8.008942178,"test":[0.4937753089]}, +{"learn":[0.4911147963],"iteration":4777,"passed_time":171.6023182,"remaining_time":7.973150824,"test":[0.4937751301]}, +{"learn":[0.4911142896],"iteration":4778,"passed_time":171.6401592,"remaining_time":7.937324794,"test":[0.4937747128]}, +{"learn":[0.491113336],"iteration":4779,"passed_time":171.6743857,"remaining_time":7.901331559,"test":[0.4937739678]}, +{"learn":[0.4911122333],"iteration":4780,"passed_time":171.7079617,"remaining_time":7.865309268,"test":[0.4937730141]}, +{"learn":[0.4911115776],"iteration":4781,"passed_time":171.746161,"remaining_time":7.829498765,"test":[0.4937726267]}, +{"learn":[0.4911107432],"iteration":4782,"passed_time":171.7814448,"remaining_time":7.793554989,"test":[0.4937722392]}, +{"learn":[0.4911097597],"iteration":4783,"passed_time":171.8168426,"remaining_time":7.757616639,"test":[0.4937715836]}, +{"learn":[0.4911083292],"iteration":4784,"passed_time":171.8519744,"remaining_time":7.72166656,"test":[0.4937711067]}, +{"learn":[0.4911077331],"iteration":4785,"passed_time":171.8882475,"remaining_time":7.685767859,"test":[0.4937707491]}, +{"learn":[0.4911070477],"iteration":4786,"passed_time":171.9260669,"remaining_time":7.649937802,"test":[0.4937703915]}, +{"learn":[0.4911064218],"iteration":4787,"passed_time":171.9618142,"remaining_time":7.614015163,"test":[0.4937698849]}, +{"learn":[0.4911056768],"iteration":4788,"passed_time":171.9970854,"remaining_time":7.578071625,"test":[0.4937694676]}, +{"learn":[0.4911052297],"iteration":4789,"passed_time":172.0354654,"remaining_time":7.542264662,"test":[0.4937691398]}, +{"learn":[0.4911044549],"iteration":4790,"passed_time":172.0715435,"remaining_time":7.506356209,"test":[0.4937685437]}, +{"learn":[0.4911036502],"iteration":4791,"passed_time":172.1070302,"remaining_time":7.470422012,"test":[0.4937678583]}, +{"learn":[0.4911029647],"iteration":4792,"passed_time":172.1427313,"remaining_time":7.434497264,"test":[0.4937675603]}, +{"learn":[0.4911024283],"iteration":4793,"passed_time":172.1790007,"remaining_time":7.398597028,"test":[0.4937671728]}, +{"learn":[0.4911018919],"iteration":4794,"passed_time":172.2165501,"remaining_time":7.362751361,"test":[0.4937668152]}, +{"learn":[0.4911014448],"iteration":4795,"passed_time":172.2532514,"remaining_time":7.326868909,"test":[0.493766547]}, +{"learn":[0.4911009382],"iteration":4796,"passed_time":172.2907359,"remaining_time":7.291019259,"test":[0.4937662788]}, +{"learn":[0.4911003421],"iteration":4797,"passed_time":172.3282784,"remaining_time":7.255171372,"test":[0.4937659509]}, +{"learn":[0.4910992395],"iteration":4798,"passed_time":172.3638398,"remaining_time":7.219239799,"test":[0.4937653251]}, +{"learn":[0.4910988818],"iteration":4799,"passed_time":172.4010363,"remaining_time":7.183376514,"test":[0.4937649973]}, +{"learn":[0.4910983156],"iteration":4800,"passed_time":172.4391715,"remaining_time":7.147551577,"test":[0.4937647589]}, +{"learn":[0.4910975109],"iteration":4801,"passed_time":172.4773972,"remaining_time":7.111729414,"test":[0.4937641032]}, +{"learn":[0.4910970341],"iteration":4802,"passed_time":172.5129681,"remaining_time":7.075797361,"test":[0.493763984]}, +{"learn":[0.4910965274],"iteration":4803,"passed_time":172.5492334,"remaining_time":7.039893786,"test":[0.493763686]}, +{"learn":[0.4910958718],"iteration":4804,"passed_time":172.585882,"remaining_time":7.004005616,"test":[0.4937631793]}, +{"learn":[0.491095395],"iteration":4805,"passed_time":172.6209525,"remaining_time":6.968053431,"test":[0.4937628813]}, +{"learn":[0.4910950671],"iteration":4806,"passed_time":172.6591094,"remaining_time":6.93222553,"test":[0.4937623449]}, +{"learn":[0.4910945009],"iteration":4807,"passed_time":172.6967299,"remaining_time":6.896375237,"test":[0.4937620468]}, +{"learn":[0.4910936962],"iteration":4808,"passed_time":172.7330415,"remaining_time":6.860472226,"test":[0.4937616892]}, +{"learn":[0.4910927426],"iteration":4809,"passed_time":172.7674839,"remaining_time":6.824495206,"test":[0.4937612124]}, +{"learn":[0.4910917889],"iteration":4810,"passed_time":172.8035519,"remaining_time":6.788582686,"test":[0.4937606759]}, +{"learn":[0.4910908948],"iteration":4811,"passed_time":172.8411995,"remaining_time":6.752731816,"test":[0.4937601693]}, +{"learn":[0.4910902988],"iteration":4812,"passed_time":172.8778145,"remaining_time":6.716840082,"test":[0.4937597819]}, +{"learn":[0.4910895835],"iteration":4813,"passed_time":172.9123711,"remaining_time":6.680868514,"test":[0.4937594242]}, +{"learn":[0.4910890769],"iteration":4814,"passed_time":172.9495915,"remaining_time":6.644999882,"test":[0.4937592752]}, +{"learn":[0.4910874377],"iteration":4815,"passed_time":172.9832328,"remaining_time":6.608993942,"test":[0.4937579341]}, +{"learn":[0.4910862158],"iteration":4816,"passed_time":173.0168493,"remaining_time":6.572988047,"test":[0.4937572189]}, +{"learn":[0.4910850834],"iteration":4817,"passed_time":173.0520713,"remaining_time":6.537043791,"test":[0.4937566824]}, +{"learn":[0.4910836826],"iteration":4818,"passed_time":173.0873187,"remaining_time":6.501100787,"test":[0.4937556989]}, +{"learn":[0.491082729],"iteration":4819,"passed_time":173.123667,"remaining_time":6.465199182,"test":[0.4937550135]}, +{"learn":[0.4910820733],"iteration":4820,"passed_time":173.1605209,"remaining_time":6.429316168,"test":[0.4937547453]}, +{"learn":[0.4910815369],"iteration":4821,"passed_time":173.1962373,"remaining_time":6.39339076,"test":[0.4937544473]}, +{"learn":[0.4910803448],"iteration":4822,"passed_time":173.2304942,"remaining_time":6.357411876,"test":[0.493753881]}, +{"learn":[0.4910794805],"iteration":4823,"passed_time":173.2654351,"remaining_time":6.321458659,"test":[0.4937535234]}, +{"learn":[0.4910788845],"iteration":4824,"passed_time":173.3003995,"remaining_time":6.285506717,"test":[0.4937531359]}, +{"learn":[0.491078348],"iteration":4825,"passed_time":173.3374743,"remaining_time":6.249631274,"test":[0.4937529869]}, +{"learn":[0.4910778116],"iteration":4826,"passed_time":173.3724545,"remaining_time":6.213680262,"test":[0.4937524505]}, +{"learn":[0.4910772751],"iteration":4827,"passed_time":173.4089265,"remaining_time":6.1777828,"test":[0.4937522121]}, +{"learn":[0.4910766493],"iteration":4828,"passed_time":173.4459854,"remaining_time":6.141905882,"test":[0.4937518843]}, +{"learn":[0.491075785],"iteration":4829,"passed_time":173.4818186,"remaining_time":6.105985332,"test":[0.493751467]}, +{"learn":[0.4910748314],"iteration":4830,"passed_time":173.517014,"remaining_time":6.07004251,"test":[0.4937510498]}, +{"learn":[0.4910739969],"iteration":4831,"passed_time":173.5548645,"remaining_time":6.034192307,"test":[0.4937505729]}, +{"learn":[0.4910730134],"iteration":4832,"passed_time":173.5908321,"remaining_time":5.998276217,"test":[0.4937499769]}, +{"learn":[0.491072626],"iteration":4833,"passed_time":173.6273639,"remaining_time":5.962379479,"test":[0.4937497385]}, +{"learn":[0.4910720597],"iteration":4834,"passed_time":173.6638397,"remaining_time":5.926480569,"test":[0.4937492616]}, +{"learn":[0.4910715233],"iteration":4835,"passed_time":173.7018747,"remaining_time":5.890634294,"test":[0.4937489636]}, +{"learn":[0.4910705994],"iteration":4836,"passed_time":173.7362569,"remaining_time":5.854664024,"test":[0.4937482484]}, +{"learn":[0.4910697054],"iteration":4837,"passed_time":173.7723952,"remaining_time":5.818753207,"test":[0.4937478013]}, +{"learn":[0.4910683345],"iteration":4838,"passed_time":173.8069611,"remaining_time":5.782789985,"test":[0.4937469669]}, +{"learn":[0.4910675894],"iteration":4839,"passed_time":173.8433089,"remaining_time":5.746886245,"test":[0.4937464602]}, +{"learn":[0.4910667549],"iteration":4840,"passed_time":173.8799254,"remaining_time":5.710991146,"test":[0.4937459834]}, +{"learn":[0.4910660397],"iteration":4841,"passed_time":173.9169639,"remaining_time":5.675109522,"test":[0.4937456854]}, +{"learn":[0.4910652648],"iteration":4842,"passed_time":173.9523456,"remaining_time":5.639173707,"test":[0.4937451191]}, +{"learn":[0.4910648178],"iteration":4843,"passed_time":173.9907698,"remaining_time":5.603336103,"test":[0.4937448807]}, +{"learn":[0.4910641919],"iteration":4844,"passed_time":174.0269848,"remaining_time":5.567426758,"test":[0.4937442847]}, +{"learn":[0.4910637151],"iteration":4845,"passed_time":174.063642,"remaining_time":5.531531339,"test":[0.4937440462]}, +{"learn":[0.4910627912],"iteration":4846,"passed_time":174.0973302,"remaining_time":5.495541886,"test":[0.4937434204]}, +{"learn":[0.4910618077],"iteration":4847,"passed_time":174.1332901,"remaining_time":5.459624608,"test":[0.4937428243]}, +{"learn":[0.4910607647],"iteration":4848,"passed_time":174.169137,"remaining_time":5.423703793,"test":[0.4937423773]}, +{"learn":[0.4910601686],"iteration":4849,"passed_time":174.2038942,"remaining_time":5.387749304,"test":[0.4937422581]}, +{"learn":[0.491059513],"iteration":4850,"passed_time":174.2390827,"remaining_time":5.351808559,"test":[0.4937418409]}, +{"learn":[0.4910586785],"iteration":4851,"passed_time":174.2758957,"remaining_time":5.315917676,"test":[0.4937411852]}, +{"learn":[0.4910579036],"iteration":4852,"passed_time":174.3111415,"remaining_time":5.279978941,"test":[0.4937407084]}, +{"learn":[0.4910576056],"iteration":4853,"passed_time":174.346506,"remaining_time":5.244044063,"test":[0.4937403508]}, +{"learn":[0.49105695],"iteration":4854,"passed_time":174.3829654,"remaining_time":5.208142117,"test":[0.4937398739]}, +{"learn":[0.4910558473],"iteration":4855,"passed_time":174.4167707,"remaining_time":5.17216124,"test":[0.4937390693]}, +{"learn":[0.4910553704],"iteration":4856,"passed_time":174.4523168,"remaining_time":5.136232511,"test":[0.4937389202]}, +{"learn":[0.4910549234],"iteration":4857,"passed_time":174.4899146,"remaining_time":5.10036391,"test":[0.4937384732]}, +{"learn":[0.4910542678],"iteration":4858,"passed_time":174.5268228,"remaining_time":5.064474586,"test":[0.4937382646]}, +{"learn":[0.4910540293],"iteration":4859,"passed_time":174.5653407,"remaining_time":5.028631214,"test":[0.4937381156]}, +{"learn":[0.4910536121],"iteration":4860,"passed_time":174.6006941,"remaining_time":4.992696253,"test":[0.4937378176]}, +{"learn":[0.4910526286],"iteration":4861,"passed_time":174.635725,"remaining_time":4.956752376,"test":[0.4937371619]}, +{"learn":[0.491051973],"iteration":4862,"passed_time":174.6721933,"remaining_time":4.920849368,"test":[0.4937368937]}, +{"learn":[0.4910511385],"iteration":4863,"passed_time":174.7082196,"remaining_time":4.884933771,"test":[0.4937365361]}, +{"learn":[0.4910507511],"iteration":4864,"passed_time":174.7444892,"remaining_time":4.849024879,"test":[0.4937362678]}, +{"learn":[0.491050006],"iteration":4865,"passed_time":174.7792148,"remaining_time":4.81307332,"test":[0.4937358804]}, +{"learn":[0.4910488735],"iteration":4866,"passed_time":174.8154377,"remaining_time":4.777163185,"test":[0.4937350757]}, +{"learn":[0.4910480093],"iteration":4867,"passed_time":174.8533445,"remaining_time":4.741298578,"test":[0.4937346883]}, +{"learn":[0.4910470258],"iteration":4868,"passed_time":174.8883856,"remaining_time":4.705356032,"test":[0.4937340923]}, +{"learn":[0.4910453271],"iteration":4869,"passed_time":174.9239741,"remaining_time":4.669428466,"test":[0.4937331684]}, +{"learn":[0.4910447608],"iteration":4870,"passed_time":174.959454,"remaining_time":4.633498166,"test":[0.4937326916]}, +{"learn":[0.491044284],"iteration":4871,"passed_time":174.9961162,"remaining_time":4.597599111,"test":[0.4937324829]}, +{"learn":[0.4910429429],"iteration":4872,"passed_time":175.0292186,"remaining_time":4.561606971,"test":[0.4937320061]}, +{"learn":[0.491042466],"iteration":4873,"passed_time":175.0650536,"remaining_time":4.525686654,"test":[0.4937317677]}, +{"learn":[0.4910417806],"iteration":4874,"passed_time":175.0991425,"remaining_time":4.489721602,"test":[0.493731261]}, +{"learn":[0.4910409461],"iteration":4875,"passed_time":175.1355634,"remaining_time":4.453816625,"test":[0.4937310226]}, +{"learn":[0.4910403799],"iteration":4876,"passed_time":175.1701569,"remaining_time":4.417865347,"test":[0.493730516]}, +{"learn":[0.4910396944],"iteration":4877,"passed_time":175.2065519,"remaining_time":4.381959683,"test":[0.4937303074]}, +{"learn":[0.4910388004],"iteration":4878,"passed_time":175.243951,"remaining_time":4.34607872,"test":[0.4937301286]}, +{"learn":[0.4910385321],"iteration":4879,"passed_time":175.2820471,"remaining_time":4.310214273,"test":[0.4937298603]}, +{"learn":[0.4910377573],"iteration":4880,"passed_time":175.3186566,"remaining_time":4.274312667,"test":[0.4937292345]}, +{"learn":[0.4910372208],"iteration":4881,"passed_time":175.3558845,"remaining_time":4.23842572,"test":[0.4937290259]}, +{"learn":[0.4910360287],"iteration":4882,"passed_time":175.3907838,"remaining_time":4.202482429,"test":[0.4937280722]}, +{"learn":[0.4910356711],"iteration":4883,"passed_time":175.4279089,"remaining_time":4.166592431,"test":[0.4937279828]}, +{"learn":[0.4910352539],"iteration":4884,"passed_time":175.4629465,"remaining_time":4.130652783,"test":[0.4937277742]}, +{"learn":[0.491034628],"iteration":4885,"passed_time":175.4975948,"remaining_time":4.094704423,"test":[0.4937273569]}, +{"learn":[0.4910336148],"iteration":4886,"passed_time":175.5325959,"remaining_time":4.058764751,"test":[0.4937269397]}, +{"learn":[0.4910330187],"iteration":4887,"passed_time":175.5684828,"remaining_time":4.02284576,"test":[0.4937266119]}, +{"learn":[0.4910326015],"iteration":4888,"passed_time":175.6047561,"remaining_time":3.986935554,"test":[0.4937262841]}, +{"learn":[0.4910321246],"iteration":4889,"passed_time":175.6417608,"remaining_time":3.951041653,"test":[0.493726135]}, +{"learn":[0.491031618],"iteration":4890,"passed_time":175.677971,"remaining_time":3.915129594,"test":[0.4937257774]}, +{"learn":[0.4910310219],"iteration":4891,"passed_time":175.7150482,"remaining_time":3.879236551,"test":[0.49372539]}, +{"learn":[0.4910303961],"iteration":4892,"passed_time":175.7519868,"remaining_time":3.843339994,"test":[0.4937250324]}, +{"learn":[0.4910298597],"iteration":4893,"passed_time":175.7885806,"remaining_time":3.807435541,"test":[0.4937246449]}, +{"learn":[0.4910285186],"iteration":4894,"passed_time":175.8250736,"remaining_time":3.771528648,"test":[0.4937238701]}, +{"learn":[0.4910278927],"iteration":4895,"passed_time":175.8628665,"remaining_time":3.735649126,"test":[0.493723572]}, +{"learn":[0.491025896],"iteration":4896,"passed_time":175.8981381,"remaining_time":3.699715791,"test":[0.4937222309]}, +{"learn":[0.4910247933],"iteration":4897,"passed_time":175.9338968,"remaining_time":3.66379287,"test":[0.4937214263]}, +{"learn":[0.4910242866],"iteration":4898,"passed_time":175.9699737,"remaining_time":3.627876575,"test":[0.4937210389]}, +{"learn":[0.491023631],"iteration":4899,"passed_time":176.0053522,"remaining_time":3.591945964,"test":[0.4937206812]}, +{"learn":[0.4910226773],"iteration":4900,"passed_time":176.0404137,"remaining_time":3.556009174,"test":[0.4937199362]}, +{"learn":[0.4910222005],"iteration":4901,"passed_time":176.0760244,"remaining_time":3.520083718,"test":[0.4937196679]}, +{"learn":[0.4910216044],"iteration":4902,"passed_time":176.1122605,"remaining_time":3.484170766,"test":[0.4937193997]}, +{"learn":[0.4910208296],"iteration":4903,"passed_time":176.1471147,"remaining_time":3.448230631,"test":[0.4937188335]}, +{"learn":[0.4910203229],"iteration":4904,"passed_time":176.1832855,"remaining_time":3.412316437,"test":[0.4937184759]}, +{"learn":[0.4910190116],"iteration":4905,"passed_time":176.2170532,"remaining_time":3.376356095,"test":[0.4937176414]}, +{"learn":[0.4910184156],"iteration":4906,"passed_time":176.2541503,"remaining_time":3.340459747,"test":[0.4937173732]}, +{"learn":[0.4910177599],"iteration":4907,"passed_time":176.2897666,"remaining_time":3.304535152,"test":[0.4937172242]}, +{"learn":[0.4910171639],"iteration":4908,"passed_time":176.3258276,"remaining_time":3.268618928,"test":[0.4937166281]}, +{"learn":[0.4910167764],"iteration":4909,"passed_time":176.3630115,"remaining_time":3.232723224,"test":[0.4937163301]}, +{"learn":[0.49101624],"iteration":4910,"passed_time":176.398307,"remaining_time":3.196792775,"test":[0.4937161811]}, +{"learn":[0.4910155247],"iteration":4911,"passed_time":176.4338223,"remaining_time":3.160866524,"test":[0.4937158532]}, +{"learn":[0.4910142134],"iteration":4912,"passed_time":176.4689209,"remaining_time":3.124933059,"test":[0.4937151976]}, +{"learn":[0.4910137664],"iteration":4913,"passed_time":176.5039402,"remaining_time":3.088998546,"test":[0.4937149592]}, +{"learn":[0.4910132598],"iteration":4914,"passed_time":176.5387959,"remaining_time":3.053061577,"test":[0.4937145419]}, +{"learn":[0.4910125445],"iteration":4915,"passed_time":176.5730252,"remaining_time":3.017114345,"test":[0.4937142737]}, +{"learn":[0.4910117398],"iteration":4916,"passed_time":176.6092601,"remaining_time":2.981201665,"test":[0.4937137671]}, +{"learn":[0.491010816],"iteration":4917,"passed_time":176.6440832,"remaining_time":2.945265316,"test":[0.4937134393]}, +{"learn":[0.4910101603],"iteration":4918,"passed_time":176.6796674,"remaining_time":2.909341951,"test":[0.4937130816]}, +{"learn":[0.4910094153],"iteration":4919,"passed_time":176.7159826,"remaining_time":2.873430612,"test":[0.493712575]}, +{"learn":[0.4910086106],"iteration":4920,"passed_time":176.75238,"remaining_time":2.837520427,"test":[0.4937119491]}, +{"learn":[0.4910080742],"iteration":4921,"passed_time":176.7890515,"remaining_time":2.801614388,"test":[0.4937117107]}, +{"learn":[0.4910073887],"iteration":4922,"passed_time":176.8252983,"remaining_time":2.765701396,"test":[0.4937114723]}, +{"learn":[0.491005541],"iteration":4923,"passed_time":176.8600519,"remaining_time":2.72976522,"test":[0.4937106676]}, +{"learn":[0.4910051237],"iteration":4924,"passed_time":176.8971003,"remaining_time":2.693864472,"test":[0.4937104888]}, +{"learn":[0.4910039614],"iteration":4925,"passed_time":176.9321232,"remaining_time":2.657932829,"test":[0.4937098928]}, +{"learn":[0.4910033952],"iteration":4926,"passed_time":176.9699662,"remaining_time":2.622043339,"test":[0.4937097438]}, +{"learn":[0.4910029482],"iteration":4927,"passed_time":177.0066283,"remaining_time":2.586135802,"test":[0.4937095054]}, +{"learn":[0.4910025607],"iteration":4928,"passed_time":177.0437255,"remaining_time":2.550234228,"test":[0.4937093861]}, +{"learn":[0.4910020243],"iteration":4929,"passed_time":177.080314,"remaining_time":2.514324946,"test":[0.4937088497]}, +{"learn":[0.4910016369],"iteration":4930,"passed_time":177.116662,"remaining_time":2.478412022,"test":[0.4937085219]}, +{"learn":[0.4910011302],"iteration":4931,"passed_time":177.1540648,"remaining_time":2.442513464,"test":[0.4937083729]}, +{"learn":[0.4910008322],"iteration":4932,"passed_time":177.1918642,"remaining_time":2.406619685,"test":[0.493708045]}, +{"learn":[0.4909997891],"iteration":4933,"passed_time":177.2292147,"remaining_time":2.370719126,"test":[0.4937076278]}, +{"learn":[0.4909994017],"iteration":4934,"passed_time":177.2669937,"remaining_time":2.334823625,"test":[0.4937073]}, +{"learn":[0.490998597],"iteration":4935,"passed_time":177.3047261,"remaining_time":2.298926757,"test":[0.4937067933]}, +{"learn":[0.4909979116],"iteration":4936,"passed_time":177.3437785,"remaining_time":2.263045988,"test":[0.4937063165]}, +{"learn":[0.4909974049],"iteration":4937,"passed_time":177.3790609,"remaining_time":2.227116601,"test":[0.4937059589]}, +{"learn":[0.4909968387],"iteration":4938,"passed_time":177.4155463,"remaining_time":2.191202333,"test":[0.4937057503]}, +{"learn":[0.4909952592],"iteration":4939,"passed_time":177.4500655,"remaining_time":2.155263953,"test":[0.4937049754]}, +{"learn":[0.4909938585],"iteration":4940,"passed_time":177.4846167,"remaining_time":2.11932653,"test":[0.4937041409]}, +{"learn":[0.4909927558],"iteration":4941,"passed_time":177.518988,"remaining_time":2.083387557,"test":[0.4937035449]}, +{"learn":[0.4909923385],"iteration":4942,"passed_time":177.5541103,"remaining_time":2.047457877,"test":[0.4937032767]}, +{"learn":[0.4909920107],"iteration":4943,"passed_time":177.5914338,"remaining_time":2.011553457,"test":[0.493702919]}, +{"learn":[0.4909915041],"iteration":4944,"passed_time":177.627185,"remaining_time":1.975630976,"test":[0.4937025912]}, +{"learn":[0.4909908484],"iteration":4945,"passed_time":177.6624259,"remaining_time":1.939702992,"test":[0.4937022932]}, +{"learn":[0.4909897457],"iteration":4946,"passed_time":177.6968576,"remaining_time":1.903766617,"test":[0.4937013693]}, +{"learn":[0.4909891497],"iteration":4947,"passed_time":177.7340577,"remaining_time":1.867859944,"test":[0.4937010415]}, +{"learn":[0.490988345],"iteration":4948,"passed_time":177.7722058,"remaining_time":1.831962517,"test":[0.4937006243]}, +{"learn":[0.4909876596],"iteration":4949,"passed_time":177.8070577,"remaining_time":1.796030885,"test":[0.493700356]}, +{"learn":[0.4909872125],"iteration":4950,"passed_time":177.8488194,"remaining_time":1.760168078,"test":[0.493699909]}, +{"learn":[0.4909864079],"iteration":4951,"passed_time":177.8842476,"remaining_time":1.724241495,"test":[0.4936994024]}, +{"learn":[0.4909860801],"iteration":4952,"passed_time":177.9203319,"remaining_time":1.688321341,"test":[0.4936991938]}, +{"learn":[0.4909848582],"iteration":4953,"passed_time":177.9553243,"remaining_time":1.65239098,"test":[0.4936983295]}, +{"learn":[0.4909837853],"iteration":4954,"passed_time":177.9914523,"remaining_time":1.616471312,"test":[0.4936978228]}, +{"learn":[0.4909831892],"iteration":4955,"passed_time":178.0278144,"remaining_time":1.580553639,"test":[0.493697346]}, +{"learn":[0.4909821461],"iteration":4956,"passed_time":178.0651161,"remaining_time":1.544643936,"test":[0.4936966904]}, +{"learn":[0.4909816991],"iteration":4957,"passed_time":178.102598,"remaining_time":1.508735199,"test":[0.4936964519]}, +{"learn":[0.4909807454],"iteration":4958,"passed_time":178.1378303,"remaining_time":1.472807228,"test":[0.4936960347]}, +{"learn":[0.4909803282],"iteration":4959,"passed_time":178.1765374,"remaining_time":1.43690756,"test":[0.4936956771]}, +{"learn":[0.4909796428],"iteration":4960,"passed_time":178.2127788,"remaining_time":1.400987376,"test":[0.4936952598]}, +{"learn":[0.4909791063],"iteration":4961,"passed_time":178.2486989,"remaining_time":1.365064603,"test":[0.4936948128]}, +{"learn":[0.4909785997],"iteration":4962,"passed_time":178.2860138,"remaining_time":1.329152229,"test":[0.4936944552]}, +{"learn":[0.4909782122],"iteration":4963,"passed_time":178.3214698,"remaining_time":1.293225808,"test":[0.4936942466]}, +{"learn":[0.490977348],"iteration":4964,"passed_time":178.3563133,"remaining_time":1.25729526,"test":[0.4936937101]}, +{"learn":[0.4909765731],"iteration":4965,"passed_time":178.3912475,"remaining_time":1.22136577,"test":[0.4936931737]}, +{"learn":[0.4909758579],"iteration":4966,"passed_time":178.4274358,"remaining_time":1.185445013,"test":[0.4936927565]}, +{"learn":[0.4909752618],"iteration":4967,"passed_time":178.462627,"remaining_time":1.149517726,"test":[0.493692518]}, +{"learn":[0.4909739803],"iteration":4968,"passed_time":178.4988139,"remaining_time":1.113596947,"test":[0.4936917134]}, +{"learn":[0.4909735333],"iteration":4969,"passed_time":178.5366447,"remaining_time":1.077685984,"test":[0.4936915048]}, +{"learn":[0.4909730266],"iteration":4970,"passed_time":178.5729971,"remaining_time":1.041765624,"test":[0.4936913259]}, +{"learn":[0.4909724008],"iteration":4971,"passed_time":178.6094164,"remaining_time":1.005845466,"test":[0.4936911173]}, +{"learn":[0.4909711789],"iteration":4972,"passed_time":178.6447619,"remaining_time":0.9699192784,"test":[0.4936905213]}, +{"learn":[0.4909706425],"iteration":4973,"passed_time":178.6800143,"remaining_time":0.9339928371,"test":[0.4936902531]}, +{"learn":[0.4909696888],"iteration":4974,"passed_time":178.715248,"remaining_time":0.8980665727,"test":[0.4936897166]}, +{"learn":[0.4909688543],"iteration":4975,"passed_time":178.7506203,"remaining_time":0.8621412555,"test":[0.4936891206]}, +{"learn":[0.4909681391],"iteration":4976,"passed_time":178.7865524,"remaining_time":0.8262187472,"test":[0.4936887331]}, +{"learn":[0.4909676026],"iteration":4977,"passed_time":178.8221729,"remaining_time":0.7902948581,"test":[0.4936881669]}, +{"learn":[0.4909673344],"iteration":4978,"passed_time":178.8581363,"remaining_time":0.7543725372,"test":[0.4936880179]}, +{"learn":[0.490966947],"iteration":4979,"passed_time":178.8946283,"remaining_time":0.7184523224,"test":[0.4936878093]}, +{"learn":[0.4909663509],"iteration":4980,"passed_time":178.9302858,"remaining_time":0.682528695,"test":[0.493687541]}, +{"learn":[0.4909653078],"iteration":4981,"passed_time":178.9655181,"remaining_time":0.6466036382,"test":[0.4936870344]}, +{"learn":[0.490964682],"iteration":4982,"passed_time":179.0025728,"remaining_time":0.6106850767,"test":[0.493686796]}, +{"learn":[0.4909636985],"iteration":4983,"passed_time":179.0382449,"remaining_time":0.5747616208,"test":[0.4936864384]}, +{"learn":[0.4909628342],"iteration":4984,"passed_time":179.073183,"remaining_time":0.5388360571,"test":[0.4936858721]}, +{"learn":[0.4909622382],"iteration":4985,"passed_time":179.109335,"remaining_time":0.502914298,"test":[0.4936853059]}, +{"learn":[0.4909618806],"iteration":4986,"passed_time":179.1469309,"remaining_time":0.4669962105,"test":[0.4936848886]}, +{"learn":[0.4909613739],"iteration":4987,"passed_time":179.182072,"remaining_time":0.4310715444,"test":[0.4936845012]}, +{"learn":[0.4909602712],"iteration":4988,"passed_time":179.2196992,"remaining_time":0.3951526742,"test":[0.4936839946]}, +{"learn":[0.4909600626],"iteration":4989,"passed_time":179.2558677,"remaining_time":0.3592301958,"test":[0.4936836071]}, +{"learn":[0.4909594964],"iteration":4990,"passed_time":179.2911051,"remaining_time":0.3233059399,"test":[0.4936832197]}, +{"learn":[0.4909589897],"iteration":4991,"passed_time":179.3282019,"remaining_time":0.287384939,"test":[0.4936830409]}, +{"learn":[0.4909583937],"iteration":4992,"passed_time":179.3635871,"remaining_time":0.2514610674,"test":[0.4936827429]}, +{"learn":[0.4909577977],"iteration":4993,"passed_time":179.4004668,"remaining_time":0.2155392072,"test":[0.4936824448]}, +{"learn":[0.4909571122],"iteration":4994,"passed_time":179.4355996,"remaining_time":0.1796152149,"test":[0.493682117]}, +{"learn":[0.4909566056],"iteration":4995,"passed_time":179.4717153,"remaining_time":0.1436923261,"test":[0.4936818488]}, +{"learn":[0.4909555923],"iteration":4996,"passed_time":179.5076706,"remaining_time":0.1077692639,"test":[0.4936816402]}, +{"learn":[0.4909550856],"iteration":4997,"passed_time":179.543646,"remaining_time":0.07184619689,"test":[0.4936811037]}, +{"learn":[0.4909543406],"iteration":4998,"passed_time":179.5793173,"remaining_time":0.03592304806,"test":[0.4936809547]}, +{"learn":[0.4909538339],"iteration":4999,"passed_time":179.6183123,"remaining_time":0,"test":[0.4936805375]} +]} \ No newline at end of file diff --git a/code/train/catboost_info/learn/events.out.tfevents b/code/train/catboost_info/learn/events.out.tfevents new file mode 100644 index 0000000..6369d5f Binary files /dev/null and b/code/train/catboost_info/learn/events.out.tfevents differ diff --git a/code/train/catboost_info/learn_error.tsv b/code/train/catboost_info/learn_error.tsv new file mode 100644 index 0000000..f8d704a --- /dev/null +++ b/code/train/catboost_info/learn_error.tsv @@ -0,0 +1,5001 @@ +iter Logloss +0 0.6863319056 +1 0.6746464163 +2 0.6714135204 +3 0.6654025119 +4 0.6550456697 +5 0.6495618046 +6 0.6443816251 +7 0.6393367482 +8 0.6367666558 +9 0.6282967176 +10 0.6203324055 +11 0.6181289413 +12 0.6140690906 +13 0.6101612317 +14 0.6033519383 +15 0.5970112566 +16 0.5936951526 +17 0.5919957051 +18 0.5863674776 +19 0.5848179955 +20 0.5819472573 +21 0.5791733171 +22 0.5764731078 +23 0.5757696538 +24 0.5732078465 +25 0.5706889545 +26 0.5694201506 +27 0.5670772711 +28 0.5648007912 +29 0.5625560805 +30 0.5603164363 +31 0.5592399169 +32 0.5571749738 +33 0.5551205808 +34 0.5532485183 +35 0.5529965099 +36 0.551144713 +37 0.5493430436 +38 0.5475753489 +39 0.5458887165 +40 0.5442331381 +41 0.5438234754 +42 0.5423470685 +43 0.5408106398 +44 0.5404284548 +45 0.5390064074 +46 0.5376043275 +47 0.5369070128 +48 0.5355806904 +49 0.5342982967 +50 0.5336524208 +51 0.5324246845 +52 0.532112535 +53 0.5315086208 +54 0.5303441846 +55 0.529215988 +56 0.5286510553 +57 0.5276323524 +58 0.5258330076 +59 0.5253324478 +60 0.524365601 +61 0.5238870354 +62 0.5229702565 +63 0.5220944855 +64 0.5212760542 +65 0.5204511856 +66 0.5196508742 +67 0.5188702918 +68 0.518487332 +69 0.5182865836 +70 0.5179097035 +71 0.517207084 +72 0.5170208195 +73 0.5163317899 +74 0.5161491613 +75 0.5154723507 +76 0.5153072458 +77 0.5146507603 +78 0.5140464289 +79 0.5134396537 +80 0.5128630384 +81 0.5127128348 +82 0.5121799693 +83 0.511661707 +84 0.5113931881 +85 0.5108606206 +86 0.5107277619 +87 0.5105955588 +88 0.5103445041 +89 0.5101026285 +90 0.5095970023 +91 0.5091182579 +92 0.5088828195 +93 0.5086695542 +94 0.5082198968 +95 0.5081071248 +96 0.5080476394 +97 0.5076298109 +98 0.5074109426 +99 0.5072070352 +100 0.5071077934 +101 0.5066896073 +102 0.506310641 +103 0.5059526556 +104 0.5055950277 +105 0.505503475 +106 0.5053069585 +107 0.5052574867 +108 0.5051662916 +109 0.5050759905 +110 0.5047369594 +111 0.5044177169 +112 0.5042372341 +113 0.5040756459 +114 0.5039881463 +115 0.5039064283 +116 0.5036249752 +117 0.5035439129 +118 0.5032693144 +119 0.5031213757 +120 0.5030503269 +121 0.5028955933 +122 0.5027516481 +123 0.5026203987 +124 0.5024843809 +125 0.5024173257 +126 0.50234884 +127 0.5022772548 +128 0.5021438596 +129 0.5020679233 +130 0.5020014045 +131 0.5018748043 +132 0.5017527936 +133 0.5016272662 +134 0.5015503166 +135 0.5014282463 +136 0.5011702179 +137 0.5011679529 +138 0.5009546875 +139 0.5008937119 +140 0.5007730722 +141 0.5007432102 +142 0.5006886124 +143 0.5006811618 +144 0.5006771683 +145 0.5006639957 +146 0.5004658698 +147 0.5003433823 +148 0.5002898574 +149 0.5001757741 +150 0.5000739098 +151 0.5000602007 +152 0.4999499619 +153 0.4998520017 +154 0.4997453988 +155 0.499689579 +156 0.4995792211 +157 0.4995249212 +158 0.4994656742 +159 0.4994621874 +160 0.499378264 +161 0.4993743599 +162 0.4993709029 +163 0.4993678034 +164 0.49927786 +165 0.4992254377 +166 0.4992223681 +167 0.4992173315 +168 0.4992145301 +169 0.4992130996 +170 0.4991566838 +171 0.4991008044 +172 0.4990954698 +173 0.49907434 +174 0.4990627171 +175 0.4990564586 +176 0.4990507961 +177 0.49904418 +178 0.4990413488 +179 0.4990353287 +180 0.4990299047 +181 0.4989496471 +182 0.4989442529 +183 0.4989383222 +184 0.4989352526 +185 0.4989276828 +186 0.4989216329 +187 0.4989200832 +188 0.4988994004 +189 0.4988967182 +190 0.4988905789 +191 0.4987948836 +192 0.4987855257 +193 0.498783678 +194 0.4987823667 +195 0.4987795652 +196 0.4987739624 +197 0.4987724723 +198 0.4987698497 +199 0.4987647535 +200 0.4987556638 +201 0.4987495245 +202 0.4987429382 +203 0.4987189771 +204 0.4987161757 +205 0.4987033309 +206 0.4986981453 +207 0.4986965062 +208 0.4986910524 +209 0.4986521603 +210 0.4986418785 +211 0.4986402394 +212 0.4985870423 +213 0.4985841514 +214 0.4985826017 +215 0.4985793831 +216 0.4985767307 +217 0.4985714258 +218 0.498565972 +219 0.4985425176 +220 0.4985390903 +221 0.49853763 +222 0.4985321762 +223 0.4985293748 +224 0.4985060694 +225 0.498416871 +226 0.4984138014 +227 0.4984113576 +228 0.4983705284 +229 0.4983645381 +230 0.4983524384 +231 0.4983429911 +232 0.4983403387 +233 0.49833712 +234 0.4982506039 +235 0.4982476237 +236 0.4982452991 +237 0.4982439282 +238 0.4982410075 +239 0.4982385041 +240 0.4982292654 +241 0.4982266726 +242 0.4982198181 +243 0.4982087614 +244 0.4981828632 +245 0.4981814923 +246 0.4981699886 +247 0.498164952 +248 0.4981603327 +249 0.4981560709 +250 0.498153806 +251 0.4981445076 +252 0.4981399181 +253 0.4981348517 +254 0.4981333616 +255 0.4981164934 +256 0.4981142881 +257 0.4981113376 +258 0.4981052282 +259 0.4981036188 +260 0.4980181458 +261 0.4980132582 +262 0.4980118873 +263 0.4980103972 +264 0.498000622 +265 0.4979993703 +266 0.4979943337 +267 0.4979897442 +268 0.4979805651 +269 0.4979773464 +270 0.4979729655 +271 0.4979685547 +272 0.497967303 +273 0.4979647698 +274 0.4979621472 +275 0.4979391697 +276 0.4979370537 +277 0.4979355338 +278 0.497930825 +279 0.4979284706 +280 0.4979247453 +281 0.4979223015 +282 0.4979187551 +283 0.497915745 +284 0.4979142549 +285 0.4979132118 +286 0.4978962543 +287 0.4978929463 +288 0.4978915455 +289 0.4978891018 +290 0.4978877309 +291 0.4978789392 +292 0.4978763464 +293 0.4978751841 +294 0.4978739026 +295 0.4978711906 +296 0.4978683295 +297 0.4978625479 +298 0.4978570941 +299 0.4978522661 +300 0.4978494051 +301 0.4978402558 +302 0.4978379014 +303 0.4978331926 +304 0.4978306594 +305 0.4978264573 +306 0.4978251162 +307 0.4978226426 +308 0.4978186193 +309 0.4978170099 +310 0.4978140297 +311 0.4978126886 +312 0.4978096488 +313 0.4978074434 +314 0.4978048208 +315 0.4977385106 +316 0.4977359774 +317 0.4977345171 +318 0.4977296892 +319 0.4977250996 +320 0.4977225664 +321 0.4977184835 +322 0.4977139535 +323 0.4977083209 +324 0.4977059069 +325 0.4977038207 +326 0.4976999166 +327 0.4976964 +328 0.4976922574 +329 0.497689605 +330 0.4976846877 +331 0.4976831975 +332 0.4976820949 +333 0.4976716938 +334 0.4976611736 +335 0.4976597729 +336 0.4976548257 +337 0.4976505938 +338 0.4976464215 +339 0.4976360503 +340 0.4976272884 +341 0.49761951 +342 0.4976182583 +343 0.4976137283 +344 0.497612417 +345 0.4976034763 +346 0.4976022246 +347 0.4975981715 +348 0.4975936416 +349 0.497589201 +350 0.4975849691 +351 0.4975761178 +352 0.4975735548 +353 0.4975696805 +354 0.4975683096 +355 0.4975657764 +356 0.497563273 +357 0.4975618127 +358 0.4975602928 +359 0.4975578192 +360 0.4975565079 +361 0.4975538257 +362 0.4975509646 +363 0.4975486103 +364 0.4975473288 +365 0.4975451532 +366 0.4975428584 +367 0.4975414279 +368 0.4975399676 +369 0.4975383285 +370 0.4975370768 +371 0.4975344542 +372 0.4975331131 +373 0.4975318018 +374 0.4975302818 +375 0.4975261095 +376 0.4975240532 +377 0.4975216988 +378 0.4975175264 +379 0.4975149932 +380 0.4975135627 +381 0.4975121918 +382 0.4975109401 +383 0.4975097182 +384 0.4975073639 +385 0.4975056055 +386 0.497504026 +387 0.4975024167 +388 0.4974998537 +389 0.4974974397 +390 0.497496337 +391 0.4974915388 +392 0.4974902275 +393 0.497485936 +394 0.497480363 +395 0.4974758032 +396 0.4974746409 +397 0.4974732998 +398 0.4974718097 +399 0.4974568191 +400 0.497455478 +401 0.4974539581 +402 0.4974528554 +403 0.4974519613 +404 0.4974493983 +405 0.4974472824 +406 0.4974393252 +407 0.4974383119 +408 0.4974360171 +409 0.4974347654 +410 0.4974320534 +411 0.4974280897 +412 0.4974269572 +413 0.4974259141 +414 0.4974246028 +415 0.4974201623 +416 0.4974155131 +417 0.4974106255 +418 0.497409195 +419 0.497406632 +420 0.4974044266 +421 0.4973958138 +422 0.4973920885 +423 0.497388542 +424 0.4973824325 +425 0.4973801378 +426 0.4973777536 +427 0.4973765317 +428 0.4973738495 +429 0.4973726872 +430 0.497362763 +431 0.4973613325 +432 0.4973602298 +433 0.4973549846 +434 0.4973506633 +435 0.4973494116 +436 0.4973480705 +437 0.4973446432 +438 0.4973430935 +439 0.4973414841 +440 0.4973390404 +441 0.4973380569 +442 0.4973365966 +443 0.497334421 +444 0.4973272684 +445 0.4973245862 +446 0.4973225597 +447 0.4973195794 +448 0.4973141256 +449 0.4973119202 +450 0.4973096851 +451 0.497308493 +452 0.497305632 +453 0.4973035458 +454 0.4972983006 +455 0.4972969595 +456 0.4972957674 +457 0.4972942177 +458 0.4972926083 +459 0.4972915951 +460 0.4972889427 +461 0.4972865287 +462 0.4972848895 +463 0.4972766045 +464 0.4972591403 +465 0.4972555045 +466 0.4972509447 +467 0.4972469512 +468 0.4972427789 +469 0.4972386065 +470 0.4972345534 +471 0.4972304407 +472 0.4972290996 +473 0.4972264174 +474 0.4972237948 +475 0.4972216192 +476 0.4972203377 +477 0.4972183708 +478 0.4972171787 +479 0.4972136918 +480 0.4972099069 +481 0.4972071949 +482 0.4972058538 +483 0.4972004 +484 0.4971989993 +485 0.4971946779 +486 0.4971900288 +487 0.4971135262 +488 0.4971098009 +489 0.4971072975 +490 0.4971035424 +491 0.4970997277 +492 0.4970983568 +493 0.4970969859 +494 0.4970948998 +495 0.497093052 +496 0.4970890883 +497 0.4970848564 +498 0.4970828298 +499 0.4970815185 +500 0.497079492 +501 0.4970782403 +502 0.4970763627 +503 0.4970736209 +504 0.4970710281 +505 0.4970697764 +506 0.4970684353 +507 0.4970662299 +508 0.497064859 +509 0.497059733 +510 0.4970581833 +511 0.4970557991 +512 0.4970534149 +513 0.4970512394 +514 0.4970489446 +515 0.4970468882 +516 0.4970454577 +517 0.4970441464 +518 0.4970402423 +519 0.4970381561 +520 0.4970223013 +521 0.4970201853 +522 0.4970159534 +523 0.4970138077 +524 0.4970123473 +525 0.4970083836 +526 0.4970069233 +527 0.4970042709 +528 0.4970028404 +529 0.4970005456 +530 0.4969983999 +531 0.4969935421 +532 0.4969899658 +533 0.4969865683 +534 0.4969844822 +535 0.4969824556 +536 0.4969784323 +537 0.4969773296 +538 0.4969759885 +539 0.4969747368 +540 0.4969723526 +541 0.4969712797 +542 0.4969674054 +543 0.4969661537 +544 0.4969650213 +545 0.4969613258 +546 0.4969600145 +547 0.496958733 +548 0.4969511036 +549 0.4969498519 +550 0.4969476167 +551 0.4969454113 +552 0.4969381992 +553 0.4969371561 +554 0.4969214801 +555 0.4969202284 +556 0.4969150726 +557 0.496912748 +558 0.4969112877 +559 0.4969099764 +560 0.4969089035 +561 0.4969015423 +562 0.49689737 +563 0.4968960587 +564 0.4968910519 +565 0.4968889657 +566 0.4968867008 +567 0.4968856577 +568 0.4968781475 +569 0.4968771044 +570 0.4968760315 +571 0.4968734089 +572 0.496868879 +573 0.4968677763 +574 0.4968658689 +575 0.4968635146 +576 0.4968624119 +577 0.4968605045 +578 0.4968592528 +579 0.4968441132 +580 0.4968422059 +581 0.4968384806 +582 0.4968369905 +583 0.4968358878 +584 0.4968336526 +585 0.4968315367 +586 0.4968284074 +587 0.4968273345 +588 0.4968252484 +589 0.4968226854 +590 0.4968190793 +591 0.4968172614 +592 0.4968129102 +593 0.4968093041 +594 0.4968073074 +595 0.4968060557 +596 0.4968052212 +597 0.4968009893 +598 0.4967991117 +599 0.496797115 +600 0.496794403 +601 0.4967920486 +602 0.4967907075 +603 0.4967894558 +604 0.496787012 +605 0.496784598 +606 0.4967812006 +607 0.4967786674 +608 0.4967749421 +609 0.4967729453 +610 0.4967650179 +611 0.4967471067 +612 0.4967451994 +613 0.4967436198 +614 0.4967412058 +615 0.4967399243 +616 0.4967388813 +617 0.4967367653 +618 0.4967347387 +619 0.4967337851 +620 0.4967291061 +621 0.4967270497 +622 0.4967235927 +623 0.4967215065 +624 0.496720225 +625 0.4967189733 +626 0.4967177216 +627 0.496714503 +628 0.4967122976 +629 0.4967109565 +630 0.4967090193 +631 0.4967059497 +632 0.4967046682 +633 0.4967005257 +634 0.4966923896 +635 0.4966901843 +636 0.4966878895 +637 0.4966870252 +638 0.4966842238 +639 0.4966825549 +640 0.4966756109 +641 0.4966745083 +642 0.4966721837 +643 0.4966699485 +644 0.4966626767 +645 0.4966589812 +646 0.4966567759 +647 0.4966556136 +648 0.4966533188 +649 0.4966519181 +650 0.49664861 +651 0.4966032211 +652 0.4966013734 +653 0.4965992276 +654 0.4965921942 +655 0.4965906743 +656 0.4965887372 +657 0.4965868596 +658 0.4965830747 +659 0.4965817336 +660 0.4965795581 +661 0.4965771739 +662 0.4965750877 +663 0.4965718989 +664 0.4965698127 +665 0.4965673987 +666 0.4965637926 +667 0.4965625409 +668 0.4965589945 +669 0.4965522889 +670 0.49655062 +671 0.4965470437 +672 0.4965459112 +673 0.4965445701 +674 0.4965382222 +675 0.4965344672 +676 0.4965312783 +677 0.4965291623 +678 0.4965280001 +679 0.496524841 +680 0.4965208475 +681 0.496520013 +682 0.49651897 +683 0.4965176885 +684 0.4965128605 +685 0.4965109829 +686 0.4965090458 +687 0.4965050821 +688 0.4965029065 +689 0.4965007011 +690 0.4964994494 +691 0.4964976315 +692 0.4964951877 +693 0.4964932804 +694 0.4964923565 +695 0.4964898829 +696 0.4964877669 +697 0.4964856808 +698 0.4964824323 +699 0.4964802567 +700 0.4964765314 +701 0.4964751307 +702 0.4964739983 +703 0.4964672927 +704 0.496464998 +705 0.4964613621 +706 0.4964592759 +707 0.4964561467 +708 0.4964549546 +709 0.4964537923 +710 0.4964507226 +711 0.4964488451 +712 0.4964469377 +713 0.4964455966 +714 0.4964446132 +715 0.4964427356 +716 0.4964404706 +717 0.4964391295 +718 0.4964351062 +719 0.4964340631 +720 0.4964324836 +721 0.4964313511 +722 0.4964300398 +723 0.4964289968 +724 0.4964278643 +725 0.4964265232 +726 0.4964254503 +727 0.4964234237 +728 0.4964213674 +729 0.4964201455 +730 0.4964178209 +731 0.4964164798 +732 0.4964150493 +733 0.4964139168 +734 0.4964102213 +735 0.4964064662 +736 0.4964055423 +737 0.4964029793 +738 0.4963958864 +739 0.4963948731 +740 0.4963923995 +741 0.4963907902 +742 0.4963876609 +743 0.4963857238 +744 0.4963838164 +745 0.4963805084 +746 0.4963782732 +747 0.4963758592 +748 0.4963744287 +749 0.496372581 +750 0.4963703756 +751 0.4963684682 +752 0.4963673358 +753 0.4963656966 +754 0.4963592295 +755 0.4963556532 +756 0.4963524048 +757 0.4963504378 +758 0.4963465933 +759 0.4963444774 +760 0.4963429575 +761 0.4963410203 +762 0.4963345532 +763 0.4963321094 +764 0.4963299636 +765 0.4963262384 +766 0.4963251059 +767 0.4963231687 +768 0.4963210826 +769 0.4963197414 +770 0.4963186388 +771 0.4963146155 +772 0.4963117842 +773 0.4963105921 +774 0.4963069265 +775 0.4963052277 +776 0.4963023071 +777 0.4962999229 +778 0.4962977175 +779 0.4962956016 +780 0.496293277 +781 0.4962912802 +782 0.4962845747 +783 0.4962836508 +784 0.4962816541 +785 0.496280462 +786 0.4962787633 +787 0.4962767367 +788 0.4962737267 +789 0.4962717597 +790 0.4962704186 +791 0.4962668423 +792 0.4962651734 +793 0.4962640111 +794 0.4962606733 +795 0.4962553982 +796 0.4962534611 +797 0.4962523584 +798 0.4962455635 +799 0.4962434475 +800 0.4962414508 +801 0.4962405567 +802 0.4962382321 +803 0.4962371294 +804 0.4962332849 +805 0.4962306623 +806 0.4962208574 +807 0.4962150161 +808 0.4962138836 +809 0.4962116782 +810 0.4962096517 +811 0.4962053303 +812 0.4962041979 +813 0.4962022309 +814 0.4962001149 +815 0.4961970453 +816 0.4961950485 +817 0.496192873 +818 0.4961912339 +819 0.4961901908 +820 0.4961892073 +821 0.4961880152 +822 0.4961859588 +823 0.4961847667 +824 0.4961834256 +825 0.4961825018 +826 0.4961809819 +827 0.4961688821 +828 0.4961669748 +829 0.4961653654 +830 0.4961643224 +831 0.4961604779 +832 0.4961585705 +833 0.4961576168 +834 0.4961557989 +835 0.4961541598 +836 0.4961531167 +837 0.496149302 +838 0.4961427455 +839 0.4961416428 +840 0.4961293642 +841 0.4961275463 +842 0.4961264734 +843 0.496124119 +844 0.496123225 +845 0.4961203043 +846 0.4961177115 +847 0.4961167281 +848 0.496098191 +849 0.4960957174 +850 0.4960924094 +851 0.4960864489 +852 0.4960846012 +853 0.4960834389 +854 0.4960800712 +855 0.4960781639 +856 0.4960763757 +857 0.4960745876 +858 0.4960711901 +859 0.4960699086 +860 0.4960665708 +861 0.4960644846 +862 0.4960561995 +863 0.4960542624 +864 0.4960505669 +865 0.4960480635 +866 0.4960420732 +867 0.4960412388 +868 0.496038497 +869 0.4960375135 +870 0.4960353379 +871 0.496033222 +872 0.4960297053 +873 0.4960276787 +874 0.4960263674 +875 0.4960246091 +876 0.4960237746 +877 0.4960228209 +878 0.4960218077 +879 0.4960195129 +880 0.4960186784 +881 0.4960145657 +882 0.4960136418 +883 0.4960123007 +884 0.4960099463 +885 0.4960068767 +886 0.496005923 +887 0.4960039263 +888 0.4960020785 +889 0.496000946 +890 0.4959970121 +891 0.4959936743 +892 0.4959916775 +893 0.4959899192 +894 0.4959887271 +895 0.4959865217 +896 0.495984823 +897 0.4959839587 +898 0.495982111 +899 0.4959807997 +900 0.4959791904 +901 0.4959775512 +902 0.4959764783 +903 0.4959750776 +904 0.4959740047 +905 0.4959723656 +906 0.4959712033 +907 0.4959702795 +908 0.4959681337 +909 0.4959659581 +910 0.4959640508 +911 0.4959614878 +912 0.4959606533 +913 0.4959598486 +914 0.4959569578 +915 0.4959549611 +916 0.4959527855 +917 0.4959518616 +918 0.495948494 +919 0.4959468548 +920 0.4959458416 +921 0.4959438746 +922 0.495940954 +923 0.4959399407 +924 0.4959387784 +925 0.4959365134 +926 0.4959349339 +927 0.4959337716 +928 0.495932967 +929 0.4959318345 +930 0.4959288244 +931 0.4959219401 +932 0.4959191685 +933 0.4959170525 +934 0.4959149962 +935 0.4959137743 +936 0.495912761 +937 0.4959110623 +938 0.495908231 +939 0.4959065323 +940 0.4959042673 +941 0.4958987837 +942 0.4958972042 +943 0.4958951478 +944 0.4958943133 +945 0.4958931809 +946 0.4958921676 +947 0.4958901708 +948 0.4958880847 +949 0.4958856111 +950 0.4958840315 +951 0.4958831673 +952 0.4958819752 +953 0.4958803361 +954 0.495879144 +955 0.4958727067 +956 0.495871604 +957 0.4958682959 +958 0.495867223 +959 0.4958654647 +960 0.495864362 +961 0.4958624249 +962 0.4958601301 +963 0.495859087 +964 0.4958569114 +965 0.4958552425 +966 0.4958530073 +967 0.4958520835 +968 0.4958510702 +969 0.4958499675 +970 0.4958481794 +971 0.4958473449 +972 0.4958462124 +973 0.4958444541 +974 0.4958428149 +975 0.4958418315 +976 0.4958395665 +977 0.4958376889 +978 0.4958365863 +979 0.4958342915 +980 0.4958331292 +981 0.4958322351 +982 0.4958314007 +983 0.4958297317 +984 0.4958274369 +985 0.49582547 +986 0.4958236521 +987 0.4958200162 +988 0.49581793 +989 0.4958157246 +990 0.4958147114 +991 0.4958136981 +992 0.4958117907 +993 0.4958098238 +994 0.4958088105 +995 0.4958076482 +996 0.4958061283 +997 0.495804817 +998 0.495802701 +999 0.4958004658 +1000 0.4957986479 +1001 0.4957975154 +1002 0.4957967108 +1003 0.4957925086 +1004 0.4957893496 +1005 0.4957865184 +1006 0.4957851475 +1007 0.4957731073 +1008 0.4957664018 +1009 0.4957605009 +1010 0.4957595175 +1011 0.4957582658 +1012 0.4957564776 +1013 0.4957555836 +1014 0.4957549279 +1015 0.4957519179 +1016 0.4957135027 +1017 0.4957121914 +1018 0.4957043534 +1019 0.4957029825 +1020 0.4957010751 +1021 0.4957002108 +1022 0.4956986611 +1023 0.4956964558 +1024 0.4956942802 +1025 0.4956900185 +1026 0.4956879919 +1027 0.4956850117 +1028 0.4956833129 +1029 0.4956815546 +1030 0.4956806009 +1031 0.4956797665 +1032 0.4956766372 +1033 0.4956754451 +1034 0.4956737762 +1035 0.495671839 +1036 0.4956681137 +1037 0.4956619745 +1038 0.4956602161 +1039 0.495658279 +1040 0.4956552093 +1041 0.4956536298 +1042 0.4956526463 +1043 0.4956517821 +1044 0.4956509476 +1045 0.4956473415 +1046 0.4956440335 +1047 0.4956431692 +1048 0.4956422155 +1049 0.4956405764 +1050 0.4956386393 +1051 0.4956371789 +1052 0.4956352716 +1053 0.4956341093 +1054 0.4956286555 +1055 0.4956271654 +1056 0.4956240957 +1057 0.4956210559 +1058 0.4956199532 +1059 0.4956181353 +1060 0.4956165557 +1061 0.4956130093 +1062 0.4956102078 +1063 0.4956094032 +1064 0.4956081217 +1065 0.4956069892 +1066 0.4956059461 +1067 0.4956000154 +1068 0.4955969756 +1069 0.4955949193 +1070 0.4955937868 +1071 0.4955909257 +1072 0.495586962 +1073 0.4955849653 +1074 0.4955831175 +1075 0.4955822235 +1076 0.495581091 +1077 0.4955800181 +1078 0.4955782896 +1079 0.4955724781 +1080 0.4955688124 +1081 0.4955671137 +1082 0.4955662196 +1083 0.49556315 +1084 0.495560736 +1085 0.4955597227 +1086 0.4955540007 +1087 0.4955532556 +1088 0.4955497687 +1089 0.4955476826 +1090 0.4955446427 +1091 0.495543242 +1092 0.4955416625 +1093 0.4955359703 +1094 0.495532394 +1095 0.4955292945 +1096 0.4955274468 +1097 0.4955239301 +1098 0.4955223506 +1099 0.4955186551 +1100 0.4955178207 +1101 0.4955159133 +1102 0.4955140954 +1103 0.495512188 +1104 0.4955106085 +1105 0.4955096846 +1106 0.4955081349 +1107 0.4955069428 +1108 0.4955054527 +1109 0.4955043798 +1110 0.4955033069 +1111 0.4955007439 +1112 0.4954987174 +1113 0.4954957967 +1114 0.4954930847 +1115 0.4954912966 +1116 0.4954855447 +1117 0.4954844719 +1118 0.4954826539 +1119 0.4954814618 +1120 0.4954795843 +1121 0.4954787796 +1122 0.4954770511 +1123 0.495476157 +1124 0.4954736536 +1125 0.4954710012 +1126 0.4954697793 +1127 0.4954687958 +1128 0.4954660838 +1129 0.4954642063 +1130 0.4954581564 +1131 0.4954545801 +1132 0.4954526728 +1133 0.495450825 +1134 0.495448262 +1135 0.4954466527 +1136 0.4954440301 +1137 0.4954431658 +1138 0.49544254 +1139 0.4954404538 +1140 0.4954391425 +1141 0.4954353278 +1142 0.4954344338 +1143 0.4954336589 +1144 0.4954326456 +1145 0.4954302912 +1146 0.4954285925 +1147 0.4954270726 +1148 0.4954263275 +1149 0.4954254037 +1150 0.4954239433 +1151 0.4954225128 +1152 0.4954211121 +1153 0.4954178339 +1154 0.4954146748 +1155 0.4954137212 +1156 0.4954118436 +1157 0.4954099959 +1158 0.4954081481 +1159 0.4954065984 +1160 0.4954039162 +1161 0.4954017704 +1162 0.495398969 +1163 0.495396555 +1164 0.4953955715 +1165 0.4953945881 +1166 0.495391727 +1167 0.4953883594 +1168 0.4953866606 +1169 0.4953827863 +1170 0.4953690475 +1171 0.495367766 +1172 0.4953668421 +1173 0.4953642195 +1174 0.4953624314 +1175 0.4953596597 +1176 0.4953586465 +1177 0.4953578716 +1178 0.4953569179 +1179 0.4953553384 +1180 0.495352537 +1181 0.4953513449 +1182 0.495349527 +1183 0.4953468448 +1184 0.4953441029 +1185 0.4953430301 +1186 0.4953416293 +1187 0.4953389173 +1188 0.4953371888 +1189 0.4953355497 +1190 0.4953346556 +1191 0.4953330761 +1192 0.4953309005 +1193 0.4953283971 +1194 0.4953253871 +1195 0.4953244334 +1196 0.4953233605 +1197 0.4953223472 +1198 0.495321483 +1199 0.4953194266 +1200 0.4953167146 +1201 0.4953143006 +1202 0.4953123933 +1203 0.4953105753 +1204 0.495308668 +1205 0.4953077143 +1206 0.4953025287 +1207 0.4953013664 +1208 0.4952997273 +1209 0.4952971345 +1210 0.495295853 +1211 0.4952950483 +1212 0.4952918297 +1213 0.4952902501 +1214 0.4952888494 +1215 0.4952868229 +1216 0.4952852136 +1217 0.4952844387 +1218 0.4952827102 +1219 0.4952793425 +1220 0.4952784186 +1221 0.4952734118 +1222 0.495272488 +1223 0.4952716237 +1224 0.4952708786 +1225 0.4952651566 +1226 0.4952635771 +1227 0.4952627128 +1228 0.4952606266 +1229 0.4952596134 +1230 0.4952573186 +1231 0.4952563947 +1232 0.4952505237 +1233 0.4952485567 +1234 0.4952476328 +1235 0.4952459341 +1236 0.495244295 +1237 0.4952429241 +1238 0.4952420598 +1239 0.4952402419 +1240 0.4952395266 +1241 0.4952385133 +1242 0.4952357119 +1243 0.4952339536 +1244 0.4952328807 +1245 0.4952310329 +1246 0.4952280527 +1247 0.4952218836 +1248 0.4952202445 +1249 0.4952189332 +1250 0.495215953 +1251 0.4952152079 +1252 0.495213986 +1253 0.4952099925 +1254 0.4952083534 +1255 0.4952071315 +1256 0.4952055818 +1257 0.4952041214 +1258 0.4952010816 +1259 0.4951998001 +1260 0.4951990252 +1261 0.4951872831 +1262 0.4951855546 +1263 0.4951831704 +1264 0.4951820081 +1265 0.4951812333 +1266 0.495180071 +1267 0.4951788789 +1268 0.495178253 +1269 0.4951773292 +1270 0.4951764649 +1271 0.495170713 +1272 0.4951688653 +1273 0.4951673454 +1274 0.4951657659 +1275 0.4951648122 +1276 0.4951639181 +1277 0.4951609975 +1278 0.4951581663 +1279 0.4951567656 +1280 0.4951534575 +1281 0.4951506561 +1282 0.4951497322 +1283 0.4951461261 +1284 0.4951448446 +1285 0.495141775 +1286 0.4951397186 +1287 0.4951379007 +1288 0.4951370066 +1289 0.4951364404 +1290 0.4951350099 +1291 0.4951334005 +1292 0.4951277977 +1293 0.4951266652 +1294 0.4951257711 +1295 0.4951243704 +1296 0.4951214498 +1297 0.4951205855 +1298 0.4951196617 +1299 0.49511841 +1300 0.4951170987 +1301 0.4951152211 +1302 0.49511388 +1303 0.4951130456 +1304 0.4951122111 +1305 0.495111466 +1306 0.4951105124 +1307 0.4951089328 +1308 0.4951053864 +1309 0.4951027638 +1310 0.4951011544 +1311 0.49510032 +1312 0.4950972801 +1313 0.4950962669 +1314 0.4950937337 +1315 0.4950928992 +1316 0.4950921541 +1317 0.4950904554 +1318 0.4950886971 +1319 0.4950872666 +1320 0.4950823492 +1321 0.495080412 +1322 0.4950788921 +1323 0.495077253 +1324 0.4950743323 +1325 0.4950734085 +1326 0.4950707263 +1327 0.4950676566 +1328 0.4950662559 +1329 0.4950647658 +1330 0.4950630969 +1331 0.4950614875 +1332 0.4950601166 +1333 0.4950589544 +1334 0.4950568682 +1335 0.4950555569 +1336 0.495054633 +1337 0.4950532025 +1338 0.4950513846 +1339 0.4950490898 +1340 0.4950440234 +1341 0.4950432187 +1342 0.4950405663 +1343 0.4950397021 +1344 0.4950378245 +1345 0.495036543 +1346 0.4950354701 +1347 0.4950334436 +1348 0.4950326687 +1349 0.4950291818 +1350 0.4950273341 +1351 0.4950265592 +1352 0.4950250393 +1353 0.4950223273 +1354 0.495021314 +1355 0.4950195259 +1356 0.4950185722 +1357 0.4950171417 +1358 0.4950150257 +1359 0.4950140423 +1360 0.4950109726 +1361 0.4950094229 +1362 0.495008499 +1363 0.4950030452 +1364 0.4950010782 +1365 0.4949994689 +1366 0.4949979192 +1367 0.4949965185 +1368 0.4949935979 +1369 0.4949920183 +1370 0.494989664 +1371 0.4949883825 +1372 0.4949874288 +1373 0.4949863559 +1374 0.4949847764 +1375 0.4949834949 +1376 0.4949798292 +1377 0.4949781901 +1378 0.4949773258 +1379 0.4949761933 +1380 0.494975329 +1381 0.494974435 +1382 0.494972766 +1383 0.4949712461 +1384 0.4949703223 +1385 0.4949683851 +1386 0.4949655241 +1387 0.4949648386 +1388 0.4949632591 +1389 0.494961918 +1390 0.4949610835 +1391 0.4949595338 +1392 0.4949585503 +1393 0.4949569708 +1394 0.4949557191 +1395 0.4949541098 +1396 0.4949531859 +1397 0.494951964 +1398 0.4949499077 +1399 0.4949489242 +1400 0.4949460632 +1401 0.4949445731 +1402 0.4949424571 +1403 0.4949398345 +1404 0.4949391192 +1405 0.4949383444 +1406 0.4949351257 +1407 0.4949335462 +1408 0.4949318773 +1409 0.4949311024 +1410 0.4949303275 +1411 0.4949279732 +1412 0.4949265725 +1413 0.49492544 +1414 0.4949240393 +1415 0.4949232942 +1416 0.4949225789 +1417 0.4949205226 +1418 0.4949177212 +1419 0.4949168569 +1420 0.4949160224 +1421 0.4949149793 +1422 0.494913668 +1423 0.4949122375 +1424 0.4949102706 +1425 0.4949094063 +1426 0.4949083334 +1427 0.4949058002 +1428 0.4949050254 +1429 0.4949021644 +1430 0.4949012703 +1431 0.4948995119 +1432 0.4948987967 +1433 0.4948980218 +1434 0.4948956972 +1435 0.4948951608 +1436 0.4948935515 +1437 0.4948903924 +1438 0.4948889321 +1439 0.4948880083 +1440 0.4948871142 +1441 0.4948851472 +1442 0.4948818988 +1443 0.4948811239 +1444 0.4948794252 +1445 0.4948761767 +1446 0.494874776 +1447 0.494873882 +1448 0.4948731071 +1449 0.494871915 +1450 0.4948694116 +1451 0.4948675937 +1452 0.4948660141 +1453 0.4948642856 +1454 0.4948627359 +1455 0.4948602027 +1456 0.4948583251 +1457 0.4948567158 +1458 0.4948468512 +1459 0.4948453611 +1460 0.4948446757 +1461 0.4948438114 +1462 0.4948419041 +1463 0.4948412186 +1464 0.4948394901 +1465 0.494838596 +1466 0.4948370165 +1467 0.494836182 +1468 0.4948299831 +1469 0.494827748 +1470 0.4948264367 +1471 0.4948247379 +1472 0.4948192841 +1473 0.4948184496 +1474 0.4948171383 +1475 0.4948156482 +1476 0.4948132342 +1477 0.4948119229 +1478 0.4948098964 +1479 0.4948079294 +1480 0.4948070652 +1481 0.4948059625 +1482 0.4948045618 +1483 0.4948018497 +1484 0.4947979754 +1485 0.4947955615 +1486 0.4947904355 +1487 0.4947890347 +1488 0.4947881705 +1489 0.4947872764 +1490 0.4947843856 +1491 0.494782061 +1492 0.494779647 +1493 0.4947768754 +1494 0.4947761303 +1495 0.4947754449 +1496 0.4947727627 +1497 0.494771958 +1498 0.4947707659 +1499 0.4947690672 +1500 0.4947678453 +1501 0.4947662956 +1502 0.4947647161 +1503 0.494761408 +1504 0.4947600669 +1505 0.49475658 +1506 0.4947549707 +1507 0.49475357 +1508 0.4947527057 +1509 0.4947509474 +1510 0.4947502917 +1511 0.4947495467 +1512 0.4947490102 +1513 0.494745583 +1514 0.4947440929 +1515 0.4947427219 +1516 0.4947295493 +1517 0.4947187311 +1518 0.4947177774 +1519 0.494715274 +1520 0.4947143501 +1521 0.4947133965 +1522 0.4947123832 +1523 0.4947100288 +1524 0.4947087473 +1525 0.4947070784 +1526 0.4947056181 +1527 0.4947032637 +1528 0.494699896 +1529 0.4946985251 +1530 0.494697035 +1531 0.4946960813 +1532 0.4946945912 +1533 0.4946931309 +1534 0.4946916706 +1535 0.4946907169 +1536 0.4946897632 +1537 0.4946891076 +1538 0.4946866638 +1539 0.4946850545 +1540 0.4946840412 +1541 0.494682253 +1542 0.4946800179 +1543 0.4946778721 +1544 0.494676531 +1545 0.4946736998 +1546 0.4946729845 +1547 0.494671256 +1548 0.4946699149 +1549 0.4946690804 +1550 0.494666577 +1551 0.4946657426 +1552 0.4946649081 +1553 0.4946631796 +1554 0.4946616 +1555 0.4946592755 +1556 0.4946577853 +1557 0.4946569807 +1558 0.4946557886 +1559 0.4946509904 +1560 0.4946485168 +1561 0.4946455664 +1562 0.4946447021 +1563 0.4946434802 +1564 0.4946421391 +1565 0.4946411854 +1566 0.494638533 +1567 0.4946374304 +1568 0.4946360594 +1569 0.4946315891 +1570 0.4946301884 +1571 0.4946290261 +1572 0.4946277148 +1573 0.4946269697 +1574 0.4946254498 +1575 0.4946246154 +1576 0.4946230656 +1577 0.494622112 +1578 0.4946195788 +1579 0.4946185655 +1580 0.4946170456 +1581 0.4946122176 +1582 0.4946062571 +1583 0.4946057207 +1584 0.4946044988 +1585 0.4946036941 +1586 0.4946012801 +1587 0.4946005947 +1588 0.4945990152 +1589 0.4945981807 +1590 0.4945954389 +1591 0.4945938892 +1592 0.4945921606 +1593 0.4945913262 +1594 0.494589538 +1595 0.494588942 +1596 0.4945879883 +1597 0.4945872432 +1598 0.4945842034 +1599 0.4945818788 +1600 0.4945811934 +1601 0.4945797331 +1602 0.4945790774 +1603 0.4945781535 +1604 0.4945767826 +1605 0.4945751137 +1606 0.4945730275 +1607 0.4945725209 +1608 0.4945704645 +1609 0.4945679313 +1610 0.4945668585 +1611 0.4945648021 +1612 0.4945638484 +1613 0.4945621497 +1614 0.4945613152 +1615 0.4945597357 +1616 0.494558186 +1617 0.4945563382 +1618 0.4945552654 +1619 0.4945544309 +1620 0.4945522255 +1621 0.4945508844 +1622 0.4945492751 +1623 0.4945474274 +1624 0.4945461757 +1625 0.4945448942 +1626 0.4945443279 +1627 0.4945436723 +1628 0.4945413775 +1629 0.4945406324 +1630 0.4945396787 +1631 0.4945360429 +1632 0.4945352382 +1633 0.4945343739 +1634 0.4945330328 +1635 0.4945305592 +1636 0.4945295758 +1637 0.4945276088 +1638 0.4945267445 +1639 0.4945252246 +1640 0.4945229894 +1641 0.4945206053 +1642 0.4945180125 +1643 0.4945170886 +1644 0.4945160753 +1645 0.4945153005 +1646 0.4945146448 +1647 0.4945133335 +1648 0.4945105917 +1649 0.4945097572 +1650 0.4945089824 +1651 0.4945073134 +1652 0.4945065386 +1653 0.4945050783 +1654 0.4945039756 +1655 0.4945025749 +1656 0.4945018298 +1657 0.4945003099 +1658 0.49449727 +1659 0.4944954521 +1660 0.494494707 +1661 0.494493515 +1662 0.4944911904 +1663 0.4944887466 +1664 0.4944878227 +1665 0.4944863326 +1666 0.4944856471 +1667 0.4944849021 +1668 0.4944835908 +1669 0.4944824285 +1670 0.4944814748 +1671 0.4944762594 +1672 0.4944756038 +1673 0.4944734282 +1674 0.4944725341 +1675 0.4944709248 +1676 0.4944701201 +1677 0.4944673783 +1678 0.4944667525 +1679 0.4944659776 +1680 0.4944635338 +1681 0.4944623417 +1682 0.4944610304 +1683 0.4944603152 +1684 0.4944577224 +1685 0.4944565601 +1686 0.4944550998 +1687 0.494452805 +1688 0.4944521195 +1689 0.4944506294 +1690 0.4944490797 +1691 0.4944460399 +1692 0.494443298 +1693 0.4944427318 +1694 0.4944400198 +1695 0.4944384105 +1696 0.494437427 +1697 0.4944351918 +1698 0.4944341189 +1699 0.4944328374 +1700 0.4944314367 +1701 0.4944299466 +1702 0.4944285459 +1703 0.494427175 +1704 0.4944255359 +1705 0.4944228835 +1706 0.4944219894 +1707 0.4944214231 +1708 0.4944196052 +1709 0.4944190092 +1710 0.4944178171 +1711 0.4944157905 +1712 0.4944141216 +1713 0.4944132871 +1714 0.4944107837 +1715 0.4944093532 +1716 0.4944085485 +1717 0.4944072968 +1718 0.4944054491 +1719 0.4944047935 +1720 0.4944039888 +1721 0.4944028563 +1722 0.4944023199 +1723 0.4944006211 +1724 0.494398982 +1725 0.494396866 +1726 0.494396121 +1727 0.4943946607 +1728 0.4943930513 +1729 0.4943916208 +1730 0.4943900711 +1731 0.4943871505 +1732 0.494385869 +1733 0.4943845577 +1734 0.4943824119 +1735 0.4943810708 +1736 0.4943795211 +1737 0.4943780012 +1738 0.4943756766 +1739 0.4943744249 +1740 0.4943724877 +1741 0.4943699843 +1742 0.4943683452 +1743 0.4943669147 +1744 0.494365216 +1745 0.4943634278 +1746 0.4943605966 +1747 0.4943598218 +1748 0.4943583912 +1749 0.4943577356 +1750 0.494354964 +1751 0.4943541891 +1752 0.4943534739 +1753 0.4943514175 +1754 0.4943500466 +1755 0.4943457849 +1756 0.4943445034 +1757 0.4943434603 +1758 0.4943382151 +1759 0.4943358309 +1760 0.4943352646 +1761 0.4943335659 +1762 0.4943330593 +1763 0.4943318374 +1764 0.4943309433 +1765 0.4943298108 +1766 0.4943290956 +1767 0.4943266518 +1768 0.4943258769 +1769 0.494324506 +1770 0.4943231649 +1771 0.4943221516 +1772 0.4943215854 +1773 0.4943202443 +1774 0.494319529 +1775 0.4943179495 +1776 0.4943164594 +1777 0.4943155653 +1778 0.4943144328 +1779 0.4943120784 +1780 0.4943111844 +1781 0.4943098433 +1782 0.4943090982 +1783 0.4943082041 +1784 0.4943074889 +1785 0.4943060286 +1786 0.4943046875 +1787 0.494304002 +1788 0.4943031973 +1789 0.4943023927 +1790 0.4943012006 +1791 0.4943003363 +1792 0.4942997701 +1793 0.4942980713 +1794 0.4942975945 +1795 0.4942967302 +1796 0.4942955382 +1797 0.4942947633 +1798 0.4942932732 +1799 0.4942925281 +1800 0.4942916639 +1801 0.4942911274 +1802 0.4942900247 +1803 0.4942882664 +1804 0.4942871637 +1805 0.4942842133 +1806 0.4942815609 +1807 0.4942794151 +1808 0.4942786104 +1809 0.4942779548 +1810 0.4942746169 +1811 0.4942741699 +1812 0.4942731268 +1813 0.4942712791 +1814 0.4942691333 +1815 0.4942683286 +1816 0.4942661829 +1817 0.494265408 +1818 0.4942642755 +1819 0.4942636497 +1820 0.494262845 +1821 0.4942581064 +1822 0.4942571528 +1823 0.4942549772 +1824 0.4942539937 +1825 0.494252444 +1826 0.4942512817 +1827 0.4942488677 +1828 0.4942466623 +1829 0.4942459173 +1830 0.4942435033 +1831 0.4942421026 +1832 0.4942404337 +1833 0.4942398078 +1834 0.4942384667 +1835 0.4942359931 +1836 0.4942349202 +1837 0.4942334897 +1838 0.4942319102 +1839 0.4942305393 +1840 0.4942297644 +1841 0.4942289896 +1842 0.4942269928 +1843 0.4942255921 +1844 0.4942249663 +1845 0.494224251 +1846 0.4942236252 +1847 0.4942229993 +1848 0.4942215688 +1849 0.4942199893 +1850 0.4942187376 +1851 0.4942176945 +1852 0.4942165024 +1853 0.4942158468 +1854 0.4942150719 +1855 0.4942137308 +1856 0.4942117042 +1857 0.4942100353 +1858 0.494209022 +1859 0.4942065484 +1860 0.4942052371 +1861 0.4942036874 +1862 0.4942024059 +1863 0.4942013032 +1864 0.4941985912 +1865 0.4941978163 +1866 0.4941958494 +1867 0.4941949255 +1868 0.4941939718 +1869 0.4941929884 +1870 0.4941877432 +1871 0.4941867299 +1872 0.4941860742 +1873 0.4941846139 +1874 0.4941831238 +1875 0.4941807694 +1876 0.4941791899 +1877 0.4941774614 +1878 0.4941764183 +1879 0.4941755838 +1880 0.4941742725 +1881 0.4941731996 +1882 0.4941716499 +1883 0.494170726 +1884 0.49417013 +1885 0.4941685505 +1886 0.4941676862 +1887 0.4941670306 +1888 0.4941646464 +1889 0.4941617555 +1890 0.494160176 +1891 0.4941588647 +1892 0.494156719 +1893 0.4941560633 +1894 0.494154901 +1895 0.4941537089 +1896 0.4941529043 +1897 0.4941521294 +1898 0.4941513247 +1899 0.4941503711 +1900 0.4941473908 +1901 0.4941453643 +1902 0.4941430397 +1903 0.49414149 +1904 0.4941408939 +1905 0.4941388376 +1906 0.4941287942 +1907 0.4941282279 +1908 0.4941259332 +1909 0.4941247113 +1910 0.4941238172 +1911 0.4941231615 +1912 0.4941220291 +1913 0.494121135 +1914 0.494119168 +1915 0.494116754 +1916 0.4941142506 +1917 0.4941128499 +1918 0.4941115088 +1919 0.4941088564 +1920 0.4941073663 +1921 0.4941052205 +1922 0.4941042371 +1923 0.494095952 +1924 0.4940945811 +1925 0.4940932996 +1926 0.4940910942 +1927 0.4940903194 +1928 0.4940893657 +1929 0.4940885908 +1930 0.494087965 +1931 0.4940856106 +1932 0.4940845377 +1933 0.4940804548 +1934 0.4940791137 +1935 0.4940783389 +1936 0.4940767891 +1937 0.494075299 +1938 0.4940723784 +1939 0.4940643318 +1940 0.4940637059 +1941 0.494062335 +1942 0.4940606661 +1943 0.4940600104 +1944 0.494059176 +1945 0.4940581329 +1946 0.4940573282 +1947 0.494056613 +1948 0.4940546758 +1949 0.4940537817 +1950 0.4940528877 +1951 0.4940511591 +1952 0.4940499968 +1953 0.4940485961 +1954 0.4940478511 +1955 0.4940465994 +1956 0.4940459735 +1957 0.4940430231 +1958 0.494042129 +1959 0.4940408475 +1960 0.4940397747 +1961 0.4940370924 +1962 0.4940356023 +1963 0.4940343804 +1964 0.4940334864 +1965 0.4940326221 +1966 0.4940314598 +1967 0.494030834 +1968 0.4940288372 +1969 0.4940280325 +1970 0.4940251417 +1971 0.4940237112 +1972 0.494021178 +1973 0.494019062 +1974 0.4940178401 +1975 0.4940162904 +1976 0.4940156646 +1977 0.4940152771 +1978 0.4940139062 +1979 0.4940098233 +1980 0.4940086014 +1981 0.4940074093 +1982 0.4940052636 +1983 0.4940043993 +1984 0.4940033264 +1985 0.4940017171 +1986 0.4940003164 +1987 0.4939979918 +1988 0.493995399 +1989 0.4939942069 +1990 0.4939920313 +1991 0.4939906604 +1992 0.4939894981 +1993 0.4939886339 +1994 0.4939868457 +1995 0.4939854748 +1996 0.4939843423 +1997 0.4939837165 +1998 0.4939822264 +1999 0.4939808853 +2000 0.4939804382 +2001 0.4939793654 +2002 0.4939769216 +2003 0.4939757891 +2004 0.4939752526 +2005 0.4939729877 +2006 0.4939706035 +2007 0.4939686663 +2008 0.493967504 +2009 0.4939657755 +2010 0.4939647324 +2011 0.4939639576 +2012 0.4939588912 +2013 0.4939580865 +2014 0.4939560301 +2015 0.4939546592 +2016 0.493952126 +2017 0.4939515598 +2018 0.4939497418 +2019 0.493948967 +2020 0.4939479835 +2021 0.4939458675 +2022 0.4939433045 +2023 0.4939424999 +2024 0.4939412482 +2025 0.4939399965 +2026 0.493938864 +2027 0.4939351685 +2028 0.4939346321 +2029 0.4939053364 +2030 0.4939045913 +2031 0.4939030118 +2032 0.4939019985 +2033 0.4939007468 +2034 0.493899823 +2035 0.4938988395 +2036 0.4938982732 +2037 0.4938974984 +2038 0.4938955016 +2039 0.4938932665 +2040 0.4938921638 +2041 0.4938906438 +2042 0.4938892133 +2043 0.493887902 +2044 0.4938861437 +2045 0.4938836105 +2046 0.4938828058 +2047 0.493881733 +2048 0.4938808985 +2049 0.4938795574 +2050 0.4938789017 +2051 0.4938782461 +2052 0.4938761301 +2053 0.4938747592 +2054 0.4938740142 +2055 0.4938733585 +2056 0.4938727029 +2057 0.493869514 +2058 0.4938681133 +2059 0.493867398 +2060 0.4938660271 +2061 0.493863792 +2062 0.4938626893 +2063 0.493861378 +2064 0.4938601859 +2065 0.4938589938 +2066 0.4938574441 +2067 0.49385655 +2068 0.4938480861 +2069 0.4938461192 +2070 0.4938447781 +2071 0.4938434668 +2072 0.4938412018 +2073 0.4938401885 +2074 0.4938389368 +2075 0.4938375957 +2076 0.4938365526 +2077 0.4938357778 +2078 0.4938342281 +2079 0.4938335426 +2080 0.4938323803 +2081 0.493830324 +2082 0.4938290425 +2083 0.4938275523 +2084 0.4938252576 +2085 0.4938240059 +2086 0.4938233204 +2087 0.4938228436 +2088 0.4938222177 +2089 0.4938195355 +2090 0.4938187905 +2091 0.4938168235 +2092 0.4938147373 +2093 0.4938139625 +2094 0.4938108034 +2095 0.4938094921 +2096 0.4938083 +2097 0.4938068397 +2098 0.4938063629 +2099 0.493805588 +2100 0.4938044257 +2101 0.4938033529 +2102 0.49380228 +2103 0.4938016243 +2104 0.4938010581 +2105 0.4937994488 +2106 0.493797154 +2107 0.4937957831 +2108 0.4937940545 +2109 0.4937926538 +2110 0.4937917001 +2111 0.493789167 +2112 0.4937882729 +2113 0.4937876768 +2114 0.4937859483 +2115 0.4937842794 +2116 0.4937830575 +2117 0.4937810607 +2118 0.4937796898 +2119 0.4937774248 +2120 0.4937765606 +2121 0.4937751599 +2122 0.4937745042 +2123 0.4937736101 +2124 0.4937723882 +2125 0.4937707789 +2126 0.4937703021 +2127 0.4937697656 +2128 0.4937655635 +2129 0.493763984 +2130 0.4937628515 +2131 0.4937603183 +2132 0.4937596031 +2133 0.4937580235 +2134 0.4937572487 +2135 0.4937557884 +2136 0.4937551923 +2137 0.4937524505 +2138 0.49375102 +2139 0.4937503941 +2140 0.4937495299 +2141 0.4937485166 +2142 0.4937479205 +2143 0.4937465198 +2144 0.4937452681 +2145 0.4937434204 +2146 0.4937423773 +2147 0.4937400825 +2148 0.4937393375 +2149 0.4937387712 +2150 0.4937375493 +2151 0.4937355824 +2152 0.4937348075 +2153 0.4937342413 +2154 0.4937334962 +2155 0.4937321253 +2156 0.4937315293 +2157 0.4937302776 +2158 0.4937297113 +2159 0.4937283404 +2160 0.4937274464 +2161 0.4937266715 +2162 0.4937253304 +2163 0.4937239297 +2164 0.4937219329 +2165 0.4937196977 +2166 0.4937179692 +2167 0.4937171347 +2168 0.4937159725 +2169 0.4937145717 +2170 0.4937132902 +2171 0.4937112637 +2172 0.4937104292 +2173 0.4937091477 +2174 0.4937078066 +2175 0.4937067039 +2176 0.4937061675 +2177 0.4937052138 +2178 0.4937039025 +2179 0.4937032767 +2180 0.4937003858 +2181 0.4936994024 +2182 0.4936987467 +2183 0.4936977036 +2184 0.4936964817 +2185 0.493694634 +2186 0.4936935313 +2187 0.493689359 +2188 0.4936876305 +2189 0.4936865874 +2190 0.4936854847 +2191 0.4936844714 +2192 0.4936837263 +2193 0.4936826535 +2194 0.4936816104 +2195 0.493679703 +2196 0.4936791666 +2197 0.4936785109 +2198 0.4936776169 +2199 0.4936765738 +2200 0.4936756797 +2201 0.4936732657 +2202 0.4936726995 +2203 0.4936700769 +2204 0.493668706 +2205 0.4936678417 +2206 0.4936671563 +2207 0.4936664112 +2208 0.4936648913 +2209 0.4936631031 +2210 0.4936618812 +2211 0.4936587222 +2212 0.4936578281 +2213 0.4936541326 +2214 0.4936530896 +2215 0.4936517485 +2216 0.493650616 +2217 0.4936495133 +2218 0.4936487682 +2219 0.4936475165 +2220 0.4936469205 +2221 0.493646235 +2222 0.4936445363 +2223 0.4936437912 +2224 0.4936431356 +2225 0.4936419435 +2226 0.4936403938 +2227 0.4936390229 +2228 0.4936357744 +2229 0.49363494 +2230 0.4936335988 +2231 0.4936320491 +2232 0.4936315425 +2233 0.4936292477 +2234 0.4936271615 +2235 0.4936251648 +2236 0.4936239727 +2237 0.4936218269 +2238 0.4936201878 +2239 0.4936186381 +2240 0.4936160751 +2241 0.4936119922 +2242 0.4936111279 +2243 0.4936105915 +2244 0.4936093696 +2245 0.4936065085 +2246 0.4936057039 +2247 0.4936043926 +2248 0.4936031409 +2249 0.4936014719 +2250 0.4936008163 +2251 0.4935997732 +2252 0.4935986407 +2253 0.4935978957 +2254 0.4935970314 +2255 0.4935959585 +2256 0.4935953327 +2257 0.4935942896 +2258 0.4935921438 +2259 0.4935915478 +2260 0.4935903557 +2261 0.4935891636 +2262 0.493588657 +2263 0.4935873456 +2264 0.4935825177 +2265 0.4935810872 +2266 0.4935789414 +2267 0.4935779877 +2268 0.4935757227 +2269 0.4935745605 +2270 0.4935731299 +2271 0.4935725935 +2272 0.493564219 +2273 0.4935635038 +2274 0.4935624011 +2275 0.4935611792 +2276 0.4935604938 +2277 0.4935598381 +2278 0.4935585864 +2279 0.4935547419 +2280 0.4935539671 +2281 0.493553222 +2282 0.4935527452 +2283 0.4935517915 +2284 0.4935510166 +2285 0.4935504206 +2286 0.4935490795 +2287 0.4935473211 +2288 0.4935465463 +2289 0.4935459204 +2290 0.4935448475 +2291 0.4935428806 +2292 0.4935415097 +2293 0.4935407348 +2294 0.4935401984 +2295 0.4935391255 +2296 0.4935370095 +2297 0.4935358472 +2298 0.493534983 +2299 0.4935344465 +2300 0.4935327776 +2301 0.4935313471 +2302 0.4935301252 +2303 0.4935291119 +2304 0.4935282775 +2305 0.4935269065 +2306 0.4935260423 +2307 0.4935256847 +2308 0.4935244628 +2309 0.4935165353 +2310 0.4935159095 +2311 0.4935147174 +2312 0.4935140915 +2313 0.4935136147 +2314 0.4935124822 +2315 0.493511767 +2316 0.4935108133 +2317 0.4935097106 +2318 0.4935083695 +2319 0.4935075648 +2320 0.4935070284 +2321 0.4935059555 +2322 0.4935051509 +2323 0.4935039886 +2324 0.4935029455 +2325 0.4935024984 +2326 0.4934983857 +2327 0.493496538 +2328 0.4934945114 +2329 0.4934932597 +2330 0.4934924253 +2331 0.4934916504 +2332 0.4934906669 +2333 0.4934898623 +2334 0.4934889384 +2335 0.4934869118 +2336 0.4934856303 +2337 0.4934845575 +2338 0.4934831865 +2339 0.4934822329 +2340 0.493478746 +2341 0.4934774943 +2342 0.4934763916 +2343 0.4934745737 +2344 0.4934739776 +2345 0.4934727855 +2346 0.4934717723 +2347 0.49347061 +2348 0.4934697457 +2349 0.4934691795 +2350 0.4934679278 +2351 0.4934673317 +2352 0.4934661694 +2353 0.4934657224 +2354 0.4934630104 +2355 0.4934621759 +2356 0.4934614905 +2357 0.4934610434 +2358 0.493460209 +2359 0.4934590765 +2360 0.4934582122 +2361 0.4934569307 +2362 0.4934563645 +2363 0.4934554108 +2364 0.4934547551 +2365 0.493453414 +2366 0.4934524604 +2367 0.4934519239 +2368 0.4934511491 +2369 0.4934500464 +2370 0.4934490033 +2371 0.4934478708 +2372 0.4934469767 +2373 0.4934452184 +2374 0.4934445031 +2375 0.493443311 +2376 0.4934425958 +2377 0.4934411951 +2378 0.4934404202 +2379 0.4934393175 +2380 0.4934367247 +2381 0.4934356816 +2382 0.4934340425 +2383 0.4934327908 +2384 0.4934321054 +2385 0.4934310325 +2386 0.4934285887 +2387 0.4934278734 +2388 0.49342689 +2389 0.4934261449 +2390 0.4934254297 +2391 0.4934242674 +2392 0.4934230753 +2393 0.493421913 +2394 0.4934208401 +2395 0.4934201844 +2396 0.4934192606 +2397 0.4934180387 +2398 0.4934169658 +2399 0.4934160419 +2400 0.4934146412 +2401 0.4934133299 +2402 0.4934122272 +2403 0.4934114822 +2404 0.4934103795 +2405 0.493409247 +2406 0.4934084721 +2407 0.4934073396 +2408 0.4934037634 +2409 0.4934025415 +2410 0.4934013196 +2411 0.4934006937 +2412 0.4933999189 +2413 0.4933994718 +2414 0.4933981307 +2415 0.4933960148 +2416 0.4933947035 +2417 0.4933938988 +2418 0.4933931537 +2419 0.4933925279 +2420 0.4933913358 +2421 0.4933907696 +2422 0.4933896073 +2423 0.4933877595 +2424 0.4933865078 +2425 0.4933852859 +2426 0.4933841236 +2427 0.4933817991 +2428 0.4933805772 +2429 0.4933800407 +2430 0.4933759578 +2431 0.4933754512 +2432 0.4933747955 +2433 0.4933723517 +2434 0.4933718451 +2435 0.4933643051 +2436 0.4933629044 +2437 0.4933622785 +2438 0.4933612951 +2439 0.4933604308 +2440 0.4933591791 +2441 0.493358136 +2442 0.4933564671 +2443 0.4933559306 +2444 0.4933536955 +2445 0.4933526822 +2446 0.4933508046 +2447 0.4933499404 +2448 0.4933491357 +2449 0.4933480032 +2450 0.4933474966 +2451 0.4933469899 +2452 0.4933460065 +2453 0.4933449336 +2454 0.4933440395 +2455 0.493342758 +2456 0.4933415659 +2457 0.4933392711 +2458 0.493337632 +2459 0.4933363207 +2460 0.4933346816 +2461 0.4933337279 +2462 0.4933331319 +2463 0.4933320292 +2464 0.4933283039 +2465 0.4933272906 +2466 0.4933260389 +2467 0.4933252641 +2468 0.4933242508 +2469 0.4933230289 +2470 0.4933212705 +2471 0.4933203169 +2472 0.4933189162 +2473 0.4933178731 +2474 0.493317277 +2475 0.4933149823 +2476 0.49331382 +2477 0.4933128663 +2478 0.4933120318 +2479 0.4933108695 +2480 0.49330929 +2481 0.4933087536 +2482 0.493307025 +2483 0.4933048197 +2484 0.4933027931 +2485 0.4933022269 +2486 0.4933016904 +2487 0.4933010944 +2488 0.4932997533 +2489 0.493298889 +2490 0.4932970413 +2491 0.4932959982 +2492 0.4932946571 +2493 0.4932928689 +2494 0.4932915874 +2495 0.4932897993 +2496 0.4932891138 +2497 0.4932877131 +2498 0.4932871469 +2499 0.4932856568 +2500 0.4932845243 +2501 0.4932838984 +2502 0.4932832726 +2503 0.4932821103 +2504 0.4932812162 +2505 0.4932800837 +2506 0.4932790109 +2507 0.4932751068 +2508 0.4932743617 +2509 0.4932731696 +2510 0.4932720073 +2511 0.4932714113 +2512 0.4932703086 +2513 0.4932672985 +2514 0.4932667621 +2515 0.4932647654 +2516 0.4932637521 +2517 0.493262262 +2518 0.4932603248 +2519 0.4932589241 +2520 0.4932579704 +2521 0.4932567485 +2522 0.4932561823 +2523 0.4932540663 +2524 0.493252457 +2525 0.4932518609 +2526 0.4932509073 +2527 0.493247331 +2528 0.4932466753 +2529 0.4932453342 +2530 0.4932440527 +2531 0.4932434865 +2532 0.4932424136 +2533 0.4932409831 +2534 0.4932403871 +2535 0.4932394334 +2536 0.4932390161 +2537 0.4932376452 +2538 0.4932371088 +2539 0.4932362743 +2540 0.4932350524 +2541 0.4932334431 +2542 0.4932324894 +2543 0.4932319232 +2544 0.4932312973 +2545 0.4932300158 +2546 0.4932289728 +2547 0.4932281085 +2548 0.4932269462 +2549 0.4932251283 +2550 0.493223966 +2551 0.4932234295 +2552 0.4932227739 +2553 0.493221701 +2554 0.4932212838 +2555 0.493219734 +2556 0.4932180055 +2557 0.4932173201 +2558 0.493216128 +2559 0.4932149955 +2560 0.4932143994 +2561 0.4932129391 +2562 0.4932109126 +2563 0.4932095715 +2564 0.4932078429 +2565 0.493206621 +2566 0.4932060548 +2567 0.4932055183 +2568 0.4932049521 +2569 0.4932038792 +2570 0.4932031938 +2571 0.493200601 +2572 0.4932000347 +2573 0.4931988724 +2574 0.493198038 +2575 0.4931970247 +2576 0.493196071 +2577 0.4931949087 +2578 0.4931944319 +2579 0.4931929418 +2580 0.4931916901 +2581 0.4931905874 +2582 0.4931900509 +2583 0.493188531 +2584 0.4931875177 +2585 0.4931868025 +2586 0.493185968 +2587 0.4931842395 +2588 0.4931831368 +2589 0.4931821533 +2590 0.4931810208 +2591 0.4931804248 +2592 0.4931794115 +2593 0.4931771465 +2594 0.4931758352 +2595 0.493175269 +2596 0.4931741365 +2597 0.4931726166 +2598 0.4931717821 +2599 0.4931712457 +2600 0.4931701728 +2601 0.4931692191 +2602 0.4931682356 +2603 0.4931670137 +2604 0.4931660005 +2605 0.4931638547 +2606 0.493163199 +2607 0.4931620666 +2608 0.4931613513 +2609 0.493160636 +2610 0.4931584605 +2611 0.4931574174 +2612 0.4931555399 +2613 0.4931550332 +2614 0.4931539901 +2615 0.4931531259 +2616 0.4931518444 +2617 0.4931501456 +2618 0.4931494602 +2619 0.493146778 +2620 0.4931445428 +2621 0.4931434401 +2622 0.4931428143 +2623 0.493141503 +2624 0.4931401619 +2625 0.4931383439 +2626 0.4931361385 +2627 0.4931353637 +2628 0.4931349763 +2629 0.4931336948 +2630 0.4931330391 +2631 0.4931325623 +2632 0.4931313106 +2633 0.4931307741 +2634 0.4931296714 +2635 0.4931283303 +2636 0.4931274065 +2637 0.4931269594 +2638 0.4931244858 +2639 0.4931229063 +2640 0.4931216546 +2641 0.4931189426 +2642 0.4931172737 +2643 0.4931162306 +2644 0.4931155749 +2645 0.4931146213 +2646 0.493111194 +2647 0.4931103893 +2648 0.493109078 +2649 0.4931083926 +2650 0.4931077071 +2651 0.4931069621 +2652 0.4931063958 +2653 0.4931058296 +2654 0.4931052335 +2655 0.4931042501 +2656 0.4931024917 +2657 0.4931006142 +2658 0.4930996009 +2659 0.493098826 +2660 0.4930971273 +2661 0.4930960544 +2662 0.4930954286 +2663 0.4930948325 +2664 0.4930943259 +2665 0.4930934914 +2666 0.493092806 +2667 0.4930914053 +2668 0.4930905112 +2669 0.4930850872 +2670 0.4930839249 +2671 0.4930827626 +2672 0.4930790373 +2673 0.4930776962 +2674 0.4930771001 +2675 0.4930759677 +2676 0.4930746266 +2677 0.4930734941 +2678 0.4930726298 +2679 0.4930712589 +2680 0.4930703648 +2681 0.4930694112 +2682 0.4930676826 +2683 0.4930666991 +2684 0.4930657157 +2685 0.4930636593 +2686 0.4930630633 +2687 0.4930624374 +2688 0.4930589207 +2689 0.4930576988 +2690 0.4930559107 +2691 0.4930540332 +2692 0.4930534371 +2693 0.4930523642 +2694 0.4930517682 +2695 0.493044854 +2696 0.493044109 +2697 0.4930429169 +2698 0.4930422612 +2699 0.4930415758 +2700 0.4930409499 +2701 0.4930399069 +2702 0.4930382975 +2703 0.4930378207 +2704 0.4930366584 +2705 0.4930357345 +2706 0.4930351087 +2707 0.4930341252 +2708 0.4930323371 +2709 0.4930314132 +2710 0.4930309364 +2711 0.4930299827 +2712 0.4930285522 +2713 0.4930281051 +2714 0.493026913 +2715 0.493025721 +2716 0.4930245587 +2717 0.4930237838 +2718 0.4930232176 +2719 0.4930221447 +2720 0.4930203565 +2721 0.4930188366 +2722 0.4930176147 +2723 0.4930166014 +2724 0.4930155882 +2725 0.4930149027 +2726 0.4930139192 +2727 0.4930131444 +2728 0.4930120417 +2729 0.493011237 +2730 0.4930101045 +2731 0.493008972 +2732 0.4930079588 +2733 0.4930067369 +2734 0.4930055746 +2735 0.4930040845 +2736 0.4930030414 +2737 0.4930017599 +2738 0.4930009254 +2739 0.4930002996 +2740 0.4929994651 +2741 0.4929988691 +2742 0.4929978558 +2743 0.4929972597 +2744 0.4929965743 +2745 0.4929956206 +2746 0.4929948457 +2747 0.4929936239 +2748 0.4929925808 +2749 0.4929921039 +2750 0.4929915675 +2751 0.4929905244 +2752 0.4929893323 +2753 0.4929887661 +2754 0.4929875442 +2755 0.4929861137 +2756 0.4929856666 +2757 0.4929850408 +2758 0.4929839977 +2759 0.4929832228 +2760 0.4929826566 +2761 0.4929816135 +2762 0.4929805108 +2763 0.4929796168 +2764 0.4929786631 +2765 0.4929770836 +2766 0.4929764279 +2767 0.4929754444 +2768 0.4929742821 +2769 0.4929733583 +2770 0.492972345 +2771 0.4929710635 +2772 0.492967517 +2773 0.4929665335 +2774 0.4929652818 +2775 0.492964507 +2776 0.4929634937 +2777 0.4929628381 +2778 0.4929623016 +2779 0.4929611691 +2780 0.4929606625 +2781 0.4929590234 +2782 0.4929583379 +2783 0.4929577419 +2784 0.4929557153 +2785 0.4929549106 +2786 0.4929544338 +2787 0.4929517516 +2788 0.4929511257 +2789 0.4929502913 +2790 0.492949725 +2791 0.4929483541 +2792 0.4929472812 +2793 0.492946566 +2794 0.4929454633 +2795 0.4929445692 +2796 0.4929437348 +2797 0.4929426917 +2798 0.4929421254 +2799 0.492940993 +2800 0.4929405161 +2801 0.4929400393 +2802 0.492939175 +2803 0.4929369994 +2804 0.4929358968 +2805 0.4929351517 +2806 0.4929340192 +2807 0.4929332742 +2808 0.4929327079 +2809 0.4929321715 +2810 0.4929315456 +2811 0.4929308602 +2812 0.4929301449 +2813 0.4929260918 +2814 0.4929247805 +2815 0.4929240354 +2816 0.492923052 +2817 0.4929220685 +2818 0.4929214426 +2819 0.4929199227 +2820 0.4929190585 +2821 0.4929184326 +2822 0.4929173895 +2823 0.4929164657 +2824 0.492915661 +2825 0.4929151842 +2826 0.4929143795 +2827 0.492913098 +2828 0.4929095515 +2829 0.4929086276 +2830 0.4929077038 +2831 0.4929066011 +2832 0.4929057368 +2833 0.4929051706 +2834 0.4929046341 +2835 0.4929038295 +2836 0.4929031142 +2837 0.4929026076 +2838 0.4929015645 +2839 0.4929003128 +2840 0.4928997764 +2841 0.4928989717 +2842 0.49289772 +2843 0.4928968557 +2844 0.4928958126 +2845 0.4928947398 +2846 0.4928929218 +2847 0.4928922066 +2848 0.4928911933 +2849 0.492890031 +2850 0.4928888687 +2851 0.4928877064 +2852 0.4928873488 +2853 0.4928867527 +2854 0.4928859183 +2855 0.4928848454 +2856 0.4928839811 +2857 0.492882938 +2858 0.492882342 +2859 0.4928814479 +2860 0.4928806433 +2861 0.4928790339 +2862 0.4928785571 +2863 0.492877663 +2864 0.4928770372 +2865 0.4928765007 +2866 0.4928758451 +2867 0.4928748914 +2868 0.4928733417 +2869 0.4928726562 +2870 0.4928711661 +2871 0.4928702125 +2872 0.4928694674 +2873 0.4928688415 +2874 0.4928676793 +2875 0.4928665468 +2876 0.4928653547 +2877 0.49286154 +2878 0.4928603777 +2879 0.4928581127 +2880 0.4928572782 +2881 0.4928563842 +2882 0.492854596 +2883 0.4928534039 +2884 0.4928514966 +2885 0.4928508707 +2886 0.4928496787 +2887 0.4928480991 +2888 0.4928462514 +2889 0.4928454765 +2890 0.4928444931 +2891 0.4928438672 +2892 0.4928423771 +2893 0.4928420195 +2894 0.4928415724 +2895 0.492840738 +2896 0.4928396949 +2897 0.4928387412 +2898 0.4928379365 +2899 0.4928372809 +2900 0.4928359398 +2901 0.4928351351 +2902 0.4928344795 +2903 0.492833496 +2904 0.4928330192 +2905 0.4928322741 +2906 0.4928313502 +2907 0.4928302177 +2908 0.4928298303 +2909 0.4928293237 +2910 0.492828072 +2911 0.4928267309 +2912 0.4928256282 +2913 0.4928245255 +2914 0.4928240785 +2915 0.4928223797 +2916 0.4928214559 +2917 0.4928205916 +2918 0.4928195485 +2919 0.4928186842 +2920 0.4928177902 +2921 0.4928171643 +2922 0.4928165385 +2923 0.4928159722 +2924 0.4928149888 +2925 0.4928141543 +2926 0.4928132602 +2927 0.492811025 +2928 0.4928095647 +2929 0.4928087005 +2930 0.4928072402 +2931 0.4928064355 +2932 0.4928054222 +2933 0.4928043791 +2934 0.4928022334 +2935 0.4928010711 +2936 0.4928004452 +2937 0.4927993127 +2938 0.4927983293 +2939 0.4927976438 +2940 0.4927966901 +2941 0.4927957961 +2942 0.4927937099 +2943 0.4927932629 +2944 0.492792041 +2945 0.492790074 +2946 0.4927897462 +2947 0.4927887031 +2948 0.4927874514 +2949 0.4927863487 +2950 0.4927847394 +2951 0.4927839049 +2952 0.4927831003 +2953 0.492782683 +2954 0.4927816102 +2955 0.4927811035 +2956 0.4927801796 +2957 0.4927793452 +2958 0.4927786299 +2959 0.4927761563 +2960 0.4927737721 +2961 0.4927732357 +2962 0.4927724906 +2963 0.4927719244 +2964 0.4927708217 +2965 0.4927679607 +2966 0.4927673646 +2967 0.4927666196 +2968 0.4927650997 +2969 0.492763997 +2970 0.4927622685 +2971 0.4927613446 +2972 0.4927561292 +2973 0.4927548775 +2974 0.4927543708 +2975 0.4927523443 +2976 0.4927512714 +2977 0.4927483806 +2978 0.4927479931 +2979 0.4927471587 +2980 0.4927458176 +2981 0.4927447149 +2982 0.4927440294 +2983 0.4927428969 +2984 0.4927420327 +2985 0.4927409896 +2986 0.4927399763 +2987 0.4927389928 +2988 0.4927381882 +2989 0.4927354166 +2990 0.4927344629 +2991 0.4927337178 +2992 0.4927321979 +2993 0.4927311846 +2994 0.4927295157 +2995 0.492728562 +2996 0.492727817 +2997 0.4927257904 +2998 0.492725105 +2999 0.4927240321 +3000 0.4927235552 +3001 0.4927230188 +3002 0.4927222141 +3003 0.4927213797 +3004 0.4927205452 +3005 0.4927199194 +3006 0.4927192041 +3007 0.4927185186 +3008 0.4927171477 +3009 0.492715896 +3010 0.4927147338 +3011 0.4927143165 +3012 0.4927125582 +3013 0.4927113661 +3014 0.492710472 +3015 0.4927099654 +3016 0.4927068063 +3017 0.4927062103 +3018 0.4927055844 +3019 0.4927038559 +3020 0.4927026042 +3021 0.492702187 +3022 0.4927008459 +3023 0.4926995644 +3024 0.4926975676 +3025 0.4926963755 +3026 0.4926958987 +3027 0.492694796 +3028 0.492694349 +3029 0.4926933357 +3030 0.4926924416 +3031 0.4926918456 +3032 0.4926891038 +3033 0.4926878819 +3034 0.4926869878 +3035 0.4926854679 +3036 0.4926841566 +3037 0.4926836201 +3038 0.4926827857 +3039 0.4926801929 +3040 0.4926793882 +3041 0.4926786431 +3042 0.4926774511 +3043 0.4926769742 +3044 0.4926753053 +3045 0.492674292 +3046 0.4926733383 +3047 0.4926723847 +3048 0.4926718184 +3049 0.4926713714 +3050 0.4926701495 +3051 0.492669464 +3052 0.4926683315 +3053 0.4926676759 +3054 0.4926646063 +3055 0.4926631757 +3056 0.4926621625 +3057 0.4926612684 +3058 0.4926594803 +3059 0.4926588246 +3060 0.4926584074 +3061 0.4926570961 +3062 0.4926565596 +3063 0.4926558742 +3064 0.4926549503 +3065 0.4926544139 +3066 0.4926530728 +3067 0.4926503607 +3068 0.4926494667 +3069 0.4926484832 +3070 0.4926475295 +3071 0.4926464566 +3072 0.4926458904 +3073 0.4926442811 +3074 0.4926434168 +3075 0.4926427612 +3076 0.4926419267 +3077 0.492640973 +3078 0.4926399001 +3079 0.4926392147 +3080 0.4926379928 +3081 0.4926353702 +3082 0.4926347741 +3083 0.4926340291 +3084 0.4926324197 +3085 0.4926315555 +3086 0.4926305124 +3087 0.4926295587 +3088 0.4926284858 +3089 0.492627413 +3090 0.4926269361 +3091 0.4926259228 +3092 0.4926241943 +3093 0.4926237473 +3094 0.4926225552 +3095 0.4926211545 +3096 0.4926204392 +3097 0.4926188895 +3098 0.492617906 +3099 0.4926172206 +3100 0.4926160881 +3101 0.4926155516 +3102 0.492614449 +3103 0.49261278 +3104 0.4926117071 +3105 0.4926105746 +3106 0.4926100382 +3107 0.4926091441 +3108 0.4926083097 +3109 0.4926078626 +3110 0.4926069984 +3111 0.4926064023 +3112 0.4926049122 +3113 0.4926038393 +3114 0.4926018724 +3115 0.492600263 +3116 0.492599369 +3117 0.4925984749 +3118 0.4925975212 +3119 0.4925953755 +3120 0.4925947198 +3121 0.4925934383 +3122 0.4925926039 +3123 0.4925915012 +3124 0.4925899812 +3125 0.4925894448 +3126 0.4925887594 +3127 0.4925873586 +3128 0.4925862262 +3129 0.4925855109 +3130 0.4925846466 +3131 0.4925841698 +3132 0.4925829479 +3133 0.4925807723 +3134 0.4925800273 +3135 0.492579163 +3136 0.4925781497 +3137 0.4925762126 +3138 0.4925757357 +3139 0.4925746033 +3140 0.4925736794 +3141 0.4925725767 +3142 0.4925716826 +3143 0.4925706395 +3144 0.4925700435 +3145 0.4925693878 +3146 0.4925688812 +3147 0.4925676891 +3148 0.4925665864 +3149 0.4925650069 +3150 0.492564232 +3151 0.4925634572 +3152 0.4925626823 +3153 0.4925616094 +3154 0.4925611028 +3155 0.4925606558 +3156 0.4925601193 +3157 0.4925590464 +3158 0.4925576755 +3159 0.4925570795 +3160 0.4925560364 +3161 0.4925549039 +3162 0.4925540993 +3163 0.4925526687 +3164 0.4925522813 +3165 0.4925512382 +3166 0.4925499567 +3167 0.492548556 +3168 0.4925474831 +3169 0.4925467083 +3170 0.4925458142 +3171 0.4925450394 +3172 0.4925427446 +3173 0.4925416419 +3174 0.4925405988 +3175 0.492540271 +3176 0.4925391683 +3177 0.492537559 +3178 0.4925366053 +3179 0.4925358006 +3180 0.492534847 +3181 0.4925339231 +3182 0.4925330886 +3183 0.4925321349 +3184 0.4925294825 +3185 0.4925284097 +3186 0.4925275454 +3187 0.4925260851 +3188 0.492525638 +3189 0.4925242373 +3190 0.4925233433 +3191 0.4925219724 +3192 0.4925204822 +3193 0.4925193796 +3194 0.4925189921 +3195 0.4925180981 +3196 0.4925171742 +3197 0.4925166079 +3198 0.4925158331 +3199 0.4925137767 +3200 0.4925126442 +3201 0.492511631 +3202 0.4925106475 +3203 0.4925098726 +3204 0.4925088295 +3205 0.4925081143 +3206 0.49250725 +3207 0.4925062963 +3208 0.4925048956 +3209 0.4925041208 +3210 0.4925028989 +3211 0.492501826 +3212 0.4925008127 +3213 0.4924986371 +3214 0.4924978623 +3215 0.4924968788 +3216 0.4924957761 +3217 0.4924937496 +3218 0.4924930939 +3219 0.4924925873 +3220 0.4924888024 +3221 0.4924878189 +3222 0.4924868056 +3223 0.4924860904 +3224 0.492483885 +3225 0.4924828717 +3226 0.4924825141 +3227 0.4924818286 +3228 0.4924801895 +3229 0.4924794146 +3230 0.4924781927 +3231 0.4924773285 +3232 0.4924768814 +3233 0.492476196 +3234 0.4924756297 +3235 0.4924744377 +3236 0.4924734244 +3237 0.4924728879 +3238 0.4924721429 +3239 0.4924712786 +3240 0.4924702057 +3241 0.4924692521 +3242 0.4924685666 +3243 0.4924679408 +3244 0.4924674639 +3245 0.4924611458 +3246 0.4924603412 +3247 0.4924596259 +3248 0.4924579272 +3249 0.4924548575 +3250 0.4924523243 +3251 0.4924517879 +3252 0.4924501786 +3253 0.4924490461 +3254 0.492448301 +3255 0.4924476752 +3256 0.4924462745 +3257 0.4924457082 +3258 0.4924449632 +3259 0.4924439499 +3260 0.4924420425 +3261 0.4924410591 +3262 0.4924386451 +3263 0.492437602 +3264 0.4924373338 +3265 0.4924365887 +3266 0.4924356946 +3267 0.4924349794 +3268 0.4924327442 +3269 0.492432029 +3270 0.4924307773 +3271 0.4924297044 +3272 0.4924286911 +3273 0.4924274394 +3274 0.4924264857 +3275 0.4924260089 +3276 0.4924254426 +3277 0.4924241611 +3278 0.4924235055 +3279 0.4924231181 +3280 0.4924226412 +3281 0.4924219558 +3282 0.4924187073 +3283 0.4924182305 +3284 0.4924174258 +3285 0.4924160251 +3286 0.4924157569 +3287 0.4924148032 +3288 0.4924137005 +3289 0.4924120614 +3290 0.492411376 +3291 0.4924101541 +3292 0.4924093196 +3293 0.4924081573 +3294 0.4924066672 +3295 0.4924057433 +3296 0.4924047598 +3297 0.492404134 +3298 0.4924022862 +3299 0.4924019882 +3300 0.4924011836 +3301 0.4923997828 +3302 0.4923985312 +3303 0.4923980543 +3304 0.4923968622 +3305 0.4923961172 +3306 0.4923952827 +3307 0.4923947165 +3308 0.4923934648 +3309 0.492392064 +3310 0.4923906931 +3311 0.4923901567 +3312 0.4923891136 +3313 0.4923885772 +3314 0.4923875639 +3315 0.49238664 +3316 0.4923859546 +3317 0.4923847923 +3318 0.4923833618 +3319 0.4923829445 +3320 0.4923821399 +3321 0.4923815736 +3322 0.4923804113 +3323 0.4923796067 +3324 0.4923770437 +3325 0.4923761198 +3326 0.4923754344 +3327 0.4923749277 +3328 0.4923743019 +3329 0.4923735866 +3330 0.4923728117 +3331 0.4923716793 +3332 0.4923693547 +3333 0.4923687288 +3334 0.4923683116 +3335 0.4923660466 +3336 0.4923652122 +3337 0.4923644671 +3338 0.4923636028 +3339 0.4923626194 +3340 0.4923618445 +3341 0.4923614571 +3342 0.4923608014 +3343 0.4923599073 +3344 0.4923591325 +3345 0.4923583576 +3346 0.4923570761 +3347 0.4923565993 +3348 0.4923560926 +3349 0.4923556754 +3350 0.4923550198 +3351 0.4923543641 +3352 0.4923534998 +3353 0.4923527548 +3354 0.4923523674 +3355 0.4923508474 +3356 0.492349864 +3357 0.4923491487 +3358 0.4923486421 +3359 0.4923469731 +3360 0.4923463771 +3361 0.4923454234 +3362 0.4923443207 +3363 0.4923433373 +3364 0.4923424432 +3365 0.4923418173 +3366 0.4923405358 +3367 0.4923395822 +3368 0.4923389861 +3369 0.4923376748 +3370 0.4923352012 +3371 0.4923338005 +3372 0.4923329959 +3373 0.4923314163 +3374 0.4923305521 +3375 0.4923297474 +3376 0.4923293302 +3377 0.4923284659 +3378 0.4923277804 +3379 0.4923271844 +3380 0.4923263499 +3381 0.4923256645 +3382 0.4923249492 +3383 0.4923233697 +3384 0.4923227141 +3385 0.4923218796 +3386 0.4923208961 +3387 0.4923199424 +3388 0.4923194656 +3389 0.4923188994 +3390 0.4923174986 +3391 0.4923168132 +3392 0.4923162768 +3393 0.4923156211 +3394 0.4923149953 +3395 0.4923130581 +3396 0.4923100183 +3397 0.4923097202 +3398 0.492309303 +3399 0.4923085281 +3400 0.4923066804 +3401 0.4923058757 +3402 0.4923049221 +3403 0.4923037002 +3404 0.4923028061 +3405 0.4923018822 +3406 0.492300869 +3407 0.4922983656 +3408 0.4922972629 +3409 0.492296935 +3410 0.4922952065 +3411 0.4922946403 +3412 0.4922935674 +3413 0.4922932098 +3414 0.4922927031 +3415 0.4922903487 +3416 0.492288948 +3417 0.4922885308 +3418 0.4922878453 +3419 0.4922869513 +3420 0.4922842393 +3421 0.4922832856 +3422 0.4922828087 +3423 0.4922818253 +3424 0.4922813484 +3425 0.492280663 +3426 0.4922797689 +3427 0.4922789941 +3428 0.4922782788 +3429 0.4922774145 +3430 0.4922767887 +3431 0.4922758052 +3432 0.4922751496 +3433 0.4922747621 +3434 0.4922741661 +3435 0.4922731528 +3436 0.4922719011 +3437 0.4922704706 +3438 0.4922693679 +3439 0.4922678182 +3440 0.4922670135 +3441 0.4922663877 +3442 0.4922654936 +3443 0.4922646293 +3444 0.4922636757 +3445 0.492262722 +3446 0.4922616491 +3447 0.4922603378 +3448 0.4922587881 +3449 0.4922564635 +3450 0.4922553608 +3451 0.4922548542 +3452 0.4922539005 +3453 0.4922531852 +3454 0.4922522018 +3455 0.4922517249 +3456 0.4922510991 +3457 0.4922501156 +3458 0.4922491321 +3459 0.49224794 +3460 0.4922466287 +3461 0.4922460327 +3462 0.4922448108 +3463 0.4922440359 +3464 0.4922426054 +3465 0.4922404597 +3466 0.4922400126 +3467 0.4922389397 +3468 0.4922380755 +3469 0.492237241 +3470 0.4922360191 +3471 0.4922353337 +3472 0.4922348866 +3473 0.4922341416 +3474 0.4922333965 +3475 0.4922321746 +3476 0.4922309825 +3477 0.4922305951 +3478 0.4922294924 +3479 0.4922279725 +3480 0.4922264824 +3481 0.4922258863 +3482 0.4922254393 +3483 0.4922246048 +3484 0.4922231147 +3485 0.4922216544 +3486 0.4922208795 +3487 0.492218704 +3488 0.4922177503 +3489 0.4922168562 +3490 0.4922144124 +3491 0.4922136078 +3492 0.4922128627 +3493 0.4922122369 +3494 0.4922117302 +3495 0.4922105977 +3496 0.4922073791 +3497 0.4922061274 +3498 0.4922055909 +3499 0.4922050843 +3500 0.4922040114 +3501 0.4922032962 +3502 0.4922023723 +3503 0.4922012994 +3504 0.4922005543 +3505 0.4921995411 +3506 0.4921993026 +3507 0.4921984682 +3508 0.4921973953 +3509 0.4921966204 +3510 0.4921939084 +3511 0.492193521 +3512 0.4921928057 +3513 0.4921908984 +3514 0.4921900937 +3515 0.4921890805 +3516 0.4921878884 +3517 0.4921872625 +3518 0.4921860704 +3519 0.4921853254 +3520 0.4921848485 +3521 0.4921841333 +3522 0.4921827326 +3523 0.4921820471 +3524 0.4921811232 +3525 0.4921803484 +3526 0.4921787987 +3527 0.492178143 +3528 0.4921772787 +3529 0.4921764443 +3530 0.492175878 +3531 0.4921748051 +3532 0.4921741197 +3533 0.4921736131 +3534 0.4921730766 +3535 0.4921724508 +3536 0.4921718249 +3537 0.4921714375 +3538 0.4921708712 +3539 0.4921698878 +3540 0.4921689043 +3541 0.4921678612 +3542 0.4921669075 +3543 0.492165626 +3544 0.4921648512 +3545 0.4921635995 +3546 0.4921631226 +3547 0.4921621094 +3548 0.4921609173 +3549 0.4921596954 +3550 0.4921578774 +3551 0.4921567449 +3552 0.4921554634 +3553 0.4921543011 +3554 0.4921539137 +3555 0.4921515295 +3556 0.4921509037 +3557 0.492150397 +3558 0.4921497414 +3559 0.4921485195 +3560 0.492144824 +3561 0.492144079 +3562 0.4921433637 +3563 0.4921422312 +3564 0.492139549 +3565 0.4921385953 +3566 0.4921376715 +3567 0.4921360323 +3568 0.4921337077 +3569 0.492132307 +3570 0.4921314726 +3571 0.4921303699 +3572 0.4921298036 +3573 0.4921282837 +3574 0.4921278963 +3575 0.4921255121 +3576 0.4921249459 +3577 0.4921242902 +3578 0.4921233961 +3579 0.4921219358 +3580 0.49212131 +3581 0.4921203861 +3582 0.4921190152 +3583 0.4921177933 +3584 0.4921161542 +3585 0.4921152601 +3586 0.4921145449 +3587 0.4921137104 +3588 0.4921129057 +3589 0.4921117434 +3590 0.4921110282 +3591 0.4921097467 +3592 0.4921089122 +3593 0.4921075115 +3594 0.4921068559 +3595 0.4921059618 +3596 0.4921056042 +3597 0.4921042333 +3598 0.4921034584 +3599 0.4921030114 +3600 0.4921019087 +3601 0.4921010146 +3602 0.4921002695 +3603 0.4920996735 +3604 0.4920986602 +3605 0.4920977363 +3606 0.4920971999 +3607 0.4920961568 +3608 0.4920954416 +3609 0.4920932362 +3610 0.492092819 +3611 0.4920921633 +3612 0.4920914481 +3613 0.4920906136 +3614 0.4920895705 +3615 0.4920887062 +3616 0.4920877526 +3617 0.4920868287 +3618 0.4920855174 +3619 0.4920850108 +3620 0.4920843849 +3621 0.4920831034 +3622 0.4920817027 +3623 0.4920805404 +3624 0.4920796463 +3625 0.4920783648 +3626 0.4920779774 +3627 0.4920769939 +3628 0.4920745203 +3629 0.4920740733 +3630 0.4920734177 +3631 0.492072762 +3632 0.492072166 +3633 0.4920711527 +3634 0.492070348 +3635 0.492069603 +3636 0.4920685301 +3637 0.492067934 +3638 0.4920670698 +3639 0.4920654604 +3640 0.492064626 +3641 0.4920639703 +3642 0.4920626888 +3643 0.4920604238 +3644 0.4920596192 +3645 0.4920581291 +3646 0.492056788 +3647 0.4920553574 +3648 0.492054523 +3649 0.4920538673 +3650 0.4920523474 +3651 0.492051513 +3652 0.4920508871 +3653 0.492049844 +3654 0.4920486519 +3655 0.4920478771 +3656 0.4920468638 +3657 0.4920459995 +3658 0.4920455823 +3659 0.4920449564 +3660 0.4920439432 +3661 0.492042453 +3662 0.49204141 +3663 0.4920405755 +3664 0.4920399795 +3665 0.4920390854 +3666 0.4920385787 +3667 0.4920372972 +3668 0.4920364032 +3669 0.4920353303 +3670 0.4920345256 +3671 0.4920335422 +3672 0.4920325587 +3673 0.4920315752 +3674 0.4920291612 +3675 0.4920272539 +3676 0.492026628 +3677 0.4920259426 +3678 0.4920251081 +3679 0.492024065 +3680 0.4920230815 +3681 0.4920227239 +3682 0.4920208166 +3683 0.4920200119 +3684 0.4920177171 +3685 0.4920171509 +3686 0.4920155117 +3687 0.4920150647 +3688 0.4920140812 +3689 0.4920131574 +3690 0.4920126805 +3691 0.4920123229 +3692 0.4920117567 +3693 0.4920110116 +3694 0.4920101771 +3695 0.4920085678 +3696 0.4920077929 +3697 0.4920072267 +3698 0.4920063326 +3699 0.4920055876 +3700 0.4920049319 +3701 0.4920043955 +3702 0.4920036802 +3703 0.4920014451 +3704 0.4920007 +3705 0.4919984648 +3706 0.4919976304 +3707 0.4919970641 +3708 0.4919962595 +3709 0.4919956336 +3710 0.4919947991 +3711 0.4919937561 +3712 0.4919925938 +3713 0.4919917593 +3714 0.4919908056 +3715 0.4919899414 +3716 0.4919891069 +3717 0.4919884512 +3718 0.491988034 +3719 0.4919871101 +3720 0.4919865141 +3721 0.4919858882 +3722 0.491985322 +3723 0.4919846962 +3724 0.4919840107 +3725 0.491982759 +3726 0.4919819841 +3727 0.4919806728 +3728 0.4919800172 +3729 0.4919793615 +3730 0.4919785271 +3731 0.4919772754 +3732 0.4919764707 +3733 0.4919754872 +3734 0.4919742653 +3735 0.4919731925 +3736 0.4919719706 +3737 0.4919713149 +3738 0.4919702122 +3739 0.4919694076 +3740 0.4919686923 +3741 0.4919675002 +3742 0.4919659505 +3743 0.4919648776 +3744 0.4919643114 +3745 0.4919637153 +3746 0.491962553 +3747 0.4919613907 +3748 0.4919608245 +3749 0.4919600794 +3750 0.4919588873 +3751 0.4919584105 +3752 0.4919577847 +3753 0.4919572482 +3754 0.4919561753 +3755 0.4919558475 +3756 0.491955013 +3757 0.4919543872 +3758 0.4919539104 +3759 0.4919531951 +3760 0.4919521222 +3761 0.4919515858 +3762 0.4919510791 +3763 0.4919498572 +3764 0.4919490526 +3765 0.491948695 +3766 0.4919476817 +3767 0.4919462512 +3768 0.4919458637 +3769 0.4919452081 +3770 0.4919441054 +3771 0.4919434795 +3772 0.4919402311 +3773 0.4919392774 +3774 0.491938443 +3775 0.4919377575 +3776 0.4919373403 +3777 0.4919362078 +3778 0.4919348965 +3779 0.4919338236 +3780 0.4919326017 +3781 0.4919318864 +3782 0.4919312606 +3783 0.4919304559 +3784 0.4919287572 +3785 0.4919281015 +3786 0.4919271181 +3787 0.4919265816 +3788 0.4919255385 +3789 0.4919241676 +3790 0.4919210384 +3791 0.4919205616 +3792 0.4919192503 +3793 0.4919184754 +3794 0.4919176707 +3795 0.4919150183 +3796 0.4919142137 +3797 0.491913707 +3798 0.4919125447 +3799 0.4919119785 +3800 0.4919112334 +3801 0.4919109354 +3802 0.4919099221 +3803 0.4919085214 +3804 0.4919078956 +3805 0.4919070611 +3806 0.4919067035 +3807 0.4919060776 +3808 0.4919047365 +3809 0.4919039915 +3810 0.4919031272 +3811 0.4919023821 +3812 0.4919014285 +3813 0.4919003854 +3814 0.4918994019 +3815 0.4918985675 +3816 0.4918980608 +3817 0.4918974648 +3818 0.4918965409 +3819 0.4918958852 +3820 0.491895468 +3821 0.4918938289 +3822 0.4918927858 +3823 0.4918917725 +3824 0.4918912957 +3825 0.4918904314 +3826 0.4918890903 +3827 0.4918880174 +3828 0.4918873022 +3829 0.4918864975 +3830 0.4918858717 +3831 0.4918841133 +3832 0.4918833683 +3833 0.4918825934 +3834 0.4918817589 +3835 0.4918812821 +3836 0.4918804178 +3837 0.4918796728 +3838 0.4918789277 +3839 0.4918779442 +3840 0.4918774674 +3841 0.4918767522 +3842 0.4918760667 +3843 0.4918750832 +3844 0.4918744872 +3845 0.4918740997 +3846 0.4918733249 +3847 0.4918730269 +3848 0.4918720136 +3849 0.4918707619 +3850 0.491869093 +3851 0.4918678115 +3852 0.4918662915 +3853 0.4918658743 +3854 0.4918650696 +3855 0.4918638477 +3856 0.4918633113 +3857 0.4918620894 +3858 0.4918613444 +3859 0.4918601225 +3860 0.4918594668 +3861 0.4918581257 +3862 0.4918573806 +3863 0.4918565462 +3864 0.4918549965 +3865 0.491854162 +3866 0.4918534765 +3867 0.4918516288 +3868 0.4918511222 +3869 0.4918502281 +3870 0.491849185 +3871 0.491848738 +3872 0.4918479631 +3873 0.4918462942 +3874 0.4918457875 +3875 0.4918451021 +3876 0.4918440292 +3877 0.4918433736 +3878 0.4918430159 +3879 0.4918422709 +3880 0.4918412874 +3881 0.4918406913 +3882 0.4918400655 +3883 0.4918389628 +3884 0.4918375919 +3885 0.4918366382 +3886 0.4918362806 +3887 0.4918359528 +3888 0.4918341348 +3889 0.4918331216 +3890 0.4918322871 +3891 0.491831393 +3892 0.491830499 +3893 0.4918282936 +3894 0.4918260584 +3895 0.4918255518 +3896 0.4918251047 +3897 0.4918235252 +3898 0.4918230484 +3899 0.4918226013 +3900 0.4918218265 +3901 0.4918208132 +3902 0.4918187866 +3903 0.4918183098 +3904 0.4918179522 +3905 0.4918171773 +3906 0.4918164919 +3907 0.4918156872 +3908 0.4918146143 +3909 0.4918137501 +3910 0.4918127666 +3911 0.4918121705 +3912 0.4918113063 +3913 0.4918104122 +3914 0.4918096969 +3915 0.4918093691 +3916 0.4918080876 +3917 0.4918072829 +3918 0.4918061207 +3919 0.4918054948 +3920 0.4918040643 +3921 0.4918036173 +3922 0.491802753 +3923 0.4918021271 +3924 0.4918014417 +3925 0.4918003986 +3926 0.4917996238 +3927 0.4917988489 +3928 0.4917979846 +3929 0.4917972992 +3930 0.4917964051 +3931 0.4917958389 +3932 0.4917953024 +3933 0.4917948554 +3934 0.4917936931 +3935 0.4917912195 +3936 0.4917898784 +3937 0.4917894016 +3938 0.4917880903 +3939 0.491787077 +3940 0.4917857359 +3941 0.4917850206 +3942 0.4917837689 +3943 0.4917829345 +3944 0.4917818318 +3945 0.4917808483 +3946 0.4917801926 +3947 0.4917797158 +3948 0.4917786727 +3949 0.4917779277 +3950 0.4917774508 +3951 0.4917763779 +3952 0.4917757819 +3953 0.4917751262 +3954 0.4917737255 +3955 0.4917725036 +3956 0.4917720864 +3957 0.491771401 +3958 0.4917708347 +3959 0.491769434 +3960 0.4917686591 +3961 0.4917678545 +3962 0.4917670498 +3963 0.4917663644 +3964 0.4917644868 +3965 0.4917635033 +3966 0.4917629967 +3967 0.4917624603 +3968 0.491761745 +3969 0.4917595694 +3970 0.4917587052 +3971 0.4917574535 +3972 0.4917563508 +3973 0.4917560826 +3974 0.4917556057 +3975 0.4917543242 +3976 0.4917525361 +3977 0.491751642 +3978 0.491751195 +3979 0.4917501519 +3980 0.4917494068 +3981 0.4917474101 +3982 0.4917469333 +3983 0.4917462776 +3984 0.4917454431 +3985 0.4917433272 +3986 0.4917426715 +3987 0.4917421947 +3988 0.4917413602 +3989 0.4917408536 +3990 0.4917397211 +3991 0.4917372773 +3992 0.4917360852 +3993 0.4917351911 +3994 0.4917348037 +3995 0.4917339692 +3996 0.4917336712 +3997 0.4917330752 +3998 0.4917316447 +3999 0.49173084 +4000 0.491730393 +4001 0.4917294393 +4002 0.4917282472 +4003 0.4917279194 +4004 0.4917269359 +4005 0.4917261014 +4006 0.4917250285 +4007 0.4917243431 +4008 0.4917234788 +4009 0.4917228232 +4010 0.4917223761 +4011 0.4917218695 +4012 0.491721035 +4013 0.4917187999 +4014 0.491718025 +4015 0.4917171905 +4016 0.4917167435 +4017 0.4917158792 +4018 0.491715015 +4019 0.4917145381 +4020 0.4917130778 +4021 0.4917122732 +4022 0.4917114089 +4023 0.491710783 +4024 0.4917095015 +4025 0.4917079518 +4026 0.4917071174 +4027 0.4917062531 +4028 0.491705508 +4029 0.4917050014 +4030 0.491704614 +4031 0.4917033623 +4032 0.491702796 +4033 0.4917024086 +4034 0.4917012463 +4035 0.4916999052 +4036 0.4916995178 +4037 0.4916982959 +4038 0.4916975806 +4039 0.4916962991 +4040 0.4916954944 +4041 0.4916940937 +4042 0.4916933785 +4043 0.4916926334 +4044 0.4916919778 +4045 0.4916912029 +4046 0.4916901896 +4047 0.4916888485 +4048 0.4916883717 +4049 0.4916871498 +4050 0.4916862855 +4051 0.4916853319 +4052 0.4916841994 +4053 0.4916832159 +4054 0.49168259 +4055 0.4916820238 +4056 0.491681398 +4057 0.4916798184 +4058 0.4916794906 +4059 0.4916784177 +4060 0.4916771958 +4061 0.4916764806 +4062 0.4916751395 +4063 0.4916748414 +4064 0.4916728149 +4065 0.491671742 +4066 0.4916704605 +4067 0.4916694472 +4068 0.4916683147 +4069 0.4916677187 +4070 0.4916673909 +4071 0.4916668246 +4072 0.4916653345 +4073 0.4916649173 +4074 0.4916642318 +4075 0.4916636656 +4076 0.4916616986 +4077 0.4916609834 +4078 0.4916598807 +4079 0.4916588674 +4080 0.4916580925 +4081 0.4916576157 +4082 0.4916562448 +4083 0.4916554103 +4084 0.491654248 +4085 0.4916524599 +4086 0.4916518341 +4087 0.4916511486 +4088 0.4916505228 +4089 0.4916499565 +4090 0.4916493903 +4091 0.4916479299 +4092 0.4916469167 +4093 0.4916463206 +4094 0.4916452477 +4095 0.4916442345 +4096 0.4916434894 +4097 0.4916431616 +4098 0.4916422377 +4099 0.4916416715 +4100 0.4916410158 +4101 0.4916403006 +4102 0.4916390489 +4103 0.4916382144 +4104 0.4916375289 +4105 0.4916371117 +4106 0.4916360686 +4107 0.4916352938 +4108 0.4916344891 +4109 0.4916339229 +4110 0.4916329394 +4111 0.4916316579 +4112 0.4916310022 +4113 0.4916301678 +4114 0.4916291545 +4115 0.4916277538 +4116 0.4916271577 +4117 0.4916265617 +4118 0.4916260848 +4119 0.4916252802 +4120 0.4916241775 +4121 0.491623492 +4122 0.4916228364 +4123 0.4916221807 +4124 0.4916215549 +4125 0.4916210185 +4126 0.4916201244 +4127 0.4916197668 +4128 0.4916181574 +4129 0.4916175316 +4130 0.4916169951 +4131 0.4916163395 +4132 0.491615654 +4133 0.4916130314 +4134 0.4916121672 +4135 0.4916115711 +4136 0.4916111539 +4137 0.4916105876 +4138 0.4916096638 +4139 0.4916088293 +4140 0.4916077564 +4141 0.4916071604 +4142 0.4916063855 +4143 0.4916057895 +4144 0.4916052828 +4145 0.4916045974 +4146 0.4916036139 +4147 0.4916028688 +4148 0.4916022728 +4149 0.4916017066 +4150 0.4916001866 +4151 0.4915997098 +4152 0.4915991138 +4153 0.4915982197 +4154 0.4915976832 +4155 0.4915966998 +4156 0.4915951202 +4157 0.491594256 +4158 0.4915932725 +4159 0.4915923486 +4160 0.4915916036 +4161 0.4915909479 +4162 0.4915902327 +4163 0.4915894876 +4164 0.4915886829 +4165 0.4915878783 +4166 0.4915867756 +4167 0.4915859709 +4168 0.4915853153 +4169 0.4915835271 +4170 0.4915824543 +4171 0.4915813516 +4172 0.4915807555 +4173 0.4915801893 +4174 0.4915792356 +4175 0.4915777753 +4176 0.4915773879 +4177 0.4915753017 +4178 0.4915748249 +4179 0.4915741394 +4180 0.4915738116 +4181 0.4915732751 +4182 0.4915726791 +4183 0.4915718446 +4184 0.4915712188 +4185 0.4915703545 +4186 0.4915698181 +4187 0.4915691922 +4188 0.4915684174 +4189 0.4915667484 +4190 0.4915658246 +4191 0.4915652285 +4192 0.4915646027 +4193 0.4915635596 +4194 0.4915626357 +4195 0.4915615032 +4196 0.4915599535 +4197 0.4915591488 +4198 0.4915581654 +4199 0.4915574501 +4200 0.4915561686 +4201 0.4915553639 +4202 0.4915549467 +4203 0.4915544103 +4204 0.4915527413 +4205 0.4915514598 +4206 0.4915508936 +4207 0.4915494035 +4208 0.4915489564 +4209 0.4915483306 +4210 0.4915476153 +4211 0.4915472577 +4212 0.4915467809 +4213 0.4915456186 +4214 0.4915450821 +4215 0.4915437112 +4216 0.4915431748 +4217 0.4915423403 +4218 0.491541178 +4219 0.49154088 +4220 0.4915404926 +4221 0.4915397475 +4222 0.4915388237 +4223 0.491538317 +4224 0.4915378402 +4225 0.4915376018 +4226 0.4915370653 +4227 0.4915361415 +4228 0.4915357242 +4229 0.4915352474 +4230 0.4915338467 +4231 0.4915329228 +4232 0.4915322373 +4233 0.4915318797 +4234 0.4915309558 +4235 0.4915301512 +4236 0.4915294359 +4237 0.4915287803 +4238 0.4915279756 +4239 0.4915274392 +4240 0.4915264557 +4241 0.4915258298 +4242 0.491525353 +4243 0.4915247272 +4244 0.4915234457 +4245 0.49152279 +4246 0.4915219853 +4247 0.4915214787 +4248 0.4915206442 +4249 0.4915197502 +4250 0.4915185283 +4251 0.4915173958 +4252 0.4915169488 +4253 0.4915165613 +4254 0.4915159355 +4255 0.4915153692 +4256 0.4915149222 +4257 0.4915143262 +4258 0.4915135811 +4259 0.4915125976 +4260 0.4915119718 +4261 0.4915115247 +4262 0.4915112267 +4263 0.4915105115 +4264 0.4915099154 +4265 0.491509379 +4266 0.4915082763 +4267 0.4915070544 +4268 0.4915063689 +4269 0.4915053259 +4270 0.4915048192 +4271 0.4915035973 +4272 0.4915027032 +4273 0.4915020774 +4274 0.491501541 +4275 0.4915010939 +4276 0.491500021 +4277 0.4914995442 +4278 0.4914981137 +4279 0.4914974878 +4280 0.4914970706 +4281 0.4914964746 +4282 0.4914958189 +4283 0.4914937626 +4284 0.4914933751 +4285 0.4914929281 +4286 0.491492034 +4287 0.4914914082 +4288 0.4914905737 +4289 0.4914897988 +4290 0.4914890538 +4291 0.4914883385 +4292 0.4914875339 +4293 0.4914869676 +4294 0.4914856563 +4295 0.4914852987 +4296 0.491484643 +4297 0.4914836894 +4298 0.4914832125 +4299 0.4914825867 +4300 0.4914817224 +4301 0.4914807985 +4302 0.4914802621 +4303 0.4914798449 +4304 0.491479219 +4305 0.4914787124 +4306 0.4914775799 +4307 0.491476954 +4308 0.4914764474 +4309 0.4914760898 +4310 0.4914754341 +4311 0.4914748977 +4312 0.491474242 +4313 0.4914732288 +4314 0.4914715598 +4315 0.4914708148 +4316 0.4914695333 +4317 0.4914691756 +4318 0.491468371 +4319 0.4914677153 +4320 0.4914665828 +4321 0.4914633642 +4322 0.4914619933 +4323 0.4914616357 +4324 0.4914608012 +4325 0.4914597283 +4326 0.4914591621 +4327 0.4914587448 +4328 0.4914578508 +4329 0.4914575229 +4330 0.4914571057 +4331 0.4914556156 +4332 0.4914550195 +4333 0.4914542447 +4334 0.4914536188 +4335 0.491452695 +4336 0.4914520393 +4337 0.491451175 +4338 0.4914497147 +4339 0.4914490591 +4340 0.4914485822 +4341 0.4914473007 +4342 0.4914464067 +4343 0.4914453636 +4344 0.4914442609 +4345 0.4914434562 +4346 0.491442741 +4347 0.4914411615 +4348 0.4914402376 +4349 0.4914387177 +4350 0.4914384494 +4351 0.4914376746 +4352 0.4914372574 +4353 0.4914365719 +4354 0.4914359759 +4355 0.4914355586 +4356 0.491434754 +4357 0.4914342175 +4358 0.4914336215 +4359 0.4914323698 +4360 0.4914312969 +4361 0.491430224 +4362 0.4914295386 +4363 0.4914288829 +4364 0.4914283167 +4365 0.491427065 +4366 0.4914262007 +4367 0.4914252172 +4368 0.4914248 +4369 0.4914241741 +4370 0.4914236377 +4371 0.4914232205 +4372 0.4914219688 +4373 0.4914209555 +4374 0.4914203594 +4375 0.491419227 +4376 0.4914183329 +4377 0.4914176772 +4378 0.4914171408 +4379 0.4914161573 +4380 0.491415144 +4381 0.4914146076 +4382 0.4914137433 +4383 0.4914131175 +4384 0.4914127002 +4385 0.4914121638 +4386 0.4914117168 +4387 0.4914106737 +4388 0.491409869 +4389 0.491409273 +4390 0.4914084087 +4391 0.4914079617 +4392 0.491407455 +4393 0.4914068292 +4394 0.4914052497 +4395 0.4914044152 +4396 0.4914034615 +4397 0.4914031933 +4398 0.4914024184 +4399 0.4914014946 +4400 0.4914006601 +4401 0.4914002429 +4402 0.491399319 +4403 0.4913986634 +4404 0.4913977097 +4405 0.4913970838 +4406 0.4913959811 +4407 0.4913952659 +4408 0.49139464 +4409 0.4913942526 +4410 0.4913937162 +4411 0.4913927625 +4412 0.4913920472 +4413 0.4913916002 +4414 0.4913889478 +4415 0.4913885604 +4416 0.4913875471 +4417 0.4913871895 +4418 0.4913862656 +4419 0.4913853119 +4420 0.4913844476 +4421 0.4913834642 +4422 0.4913824509 +4423 0.4913817952 +4424 0.4913807522 +4425 0.4913798581 +4426 0.4913793216 +4427 0.4913786958 +4428 0.4913773547 +4429 0.4913764606 +4430 0.4913756858 +4431 0.4913753877 +4432 0.4913747321 +4433 0.4913741957 +4434 0.4913735698 +4435 0.4913727055 +4436 0.4913719605 +4437 0.491370679 +4438 0.4913697551 +4439 0.4913691293 +4440 0.4913683544 +4441 0.4913677583 +4442 0.4913673113 +4443 0.4913664172 +4444 0.491365553 +4445 0.4913649867 +4446 0.4913640331 +4447 0.4913631688 +4448 0.4913621555 +4449 0.4913616489 +4450 0.4913609634 +4451 0.491360129 +4452 0.4913595329 +4453 0.4913589667 +4454 0.49135846 +4455 0.4913567613 +4456 0.491356195 +4457 0.4913548539 +4458 0.4913541089 +4459 0.4913535426 +4460 0.4913518439 +4461 0.4913512181 +4462 0.4913499962 +4463 0.4913493405 +4464 0.4913488935 +4465 0.4913485955 +4466 0.4913477014 +4467 0.4913470457 +4468 0.4913465987 +4469 0.4913461815 +4470 0.4913442741 +4471 0.4913432608 +4472 0.4913427244 +4473 0.4913419495 +4474 0.4913412343 +4475 0.4913405786 +4476 0.491339774 +4477 0.4913385521 +4478 0.4913377176 +4479 0.4913371514 +4480 0.4913364063 +4481 0.4913359891 +4482 0.4913355122 +4483 0.4913348864 +4484 0.491334499 +4485 0.4913334261 +4486 0.491332979 +4487 0.4913324724 +4488 0.4913318168 +4489 0.4913313399 +4490 0.4913306247 +4491 0.4913300286 +4492 0.4913294922 +4493 0.4913288067 +4494 0.4913278828 +4495 0.4913270484 +4496 0.4913257371 +4497 0.4913253198 +4498 0.4913245152 +4499 0.491324098 +4500 0.4913237403 +4501 0.4913226972 +4502 0.4913220118 +4503 0.4913212667 +4504 0.4913205515 +4505 0.4913201938 +4506 0.4913197766 +4507 0.49131927 +4508 0.4913186143 +4509 0.4913183461 +4510 0.4913172434 +4511 0.4913167964 +4512 0.4913161109 +4513 0.4913157235 +4514 0.4913139056 +4515 0.4913126539 +4516 0.4913108359 +4517 0.4913096736 +4518 0.4913086305 +4519 0.4913077663 +4520 0.4913075577 +4521 0.4913065146 +4522 0.4913060079 +4523 0.4913055311 +4524 0.4913049351 +4525 0.4913043688 +4526 0.4913037132 +4527 0.4913030277 +4528 0.4913023125 +4529 0.4913015376 +4530 0.4913007627 +4531 0.4912995408 +4532 0.4912987064 +4533 0.4912975739 +4534 0.4912971567 +4535 0.491296799 +4536 0.4912962626 +4537 0.4912952791 +4538 0.4912945937 +4539 0.4912938784 +4540 0.4912930141 +4541 0.4912918518 +4542 0.491291673 +4543 0.491290928 +4544 0.4912895869 +4545 0.4912887822 +4546 0.4912881564 +4547 0.4912877689 +4548 0.4912855636 +4549 0.4912849377 +4550 0.4912845503 +4551 0.4912837158 +4552 0.491283388 +4553 0.4912828217 +4554 0.4912823449 +4555 0.4912818085 +4556 0.491280825 +4557 0.4912801097 +4558 0.4912796329 +4559 0.4912789176 +4560 0.4912779938 +4561 0.4912770997 +4562 0.4912768315 +4563 0.4912762056 +4564 0.4912751923 +4565 0.4912748049 +4566 0.4912736724 +4567 0.4912726592 +4568 0.4912714671 +4569 0.491270871 +4570 0.4912703346 +4571 0.4912692617 +4572 0.4912686358 +4573 0.4912678312 +4574 0.4912672649 +4575 0.4912659536 +4576 0.4912649702 +4577 0.4912639271 +4578 0.4912632118 +4579 0.4912619303 +4580 0.4912608276 +4581 0.4912600826 +4582 0.4912595163 +4583 0.4912585925 +4584 0.4912580262 +4585 0.4912574302 +4586 0.4912569533 +4587 0.4912565063 +4588 0.4912558506 +4589 0.491255195 +4590 0.491254748 +4591 0.4912539135 +4592 0.4912527214 +4593 0.4912517677 +4594 0.4912511717 +4595 0.4912506054 +4596 0.4912499796 +4597 0.4912492345 +4598 0.4912483107 +4599 0.4912475656 +4600 0.4912470888 +4601 0.4912458073 +4602 0.4912453006 +4603 0.4912446152 +4604 0.4912440787 +4605 0.4912435423 +4606 0.4912430952 +4607 0.4912421416 +4608 0.4912413369 +4609 0.491240115 +4610 0.4912393402 +4611 0.4912382971 +4612 0.4912377606 +4613 0.4912370454 +4614 0.4912366579 +4615 0.4912356745 +4616 0.4912353466 +4617 0.4912344228 +4618 0.4912339459 +4619 0.4912330817 +4620 0.4912323664 +4621 0.4912315916 +4622 0.4912304889 +4623 0.4912298332 +4624 0.4912287305 +4625 0.4912273298 +4626 0.491226853 +4627 0.4912260185 +4628 0.4912250648 +4629 0.4912243198 +4630 0.4912239026 +4631 0.4912235449 +4632 0.4912227999 +4633 0.4912221144 +4634 0.491221429 +4635 0.4912207733 +4636 0.4912200879 +4637 0.4912194322 +4638 0.4912184189 +4639 0.4912179123 +4640 0.4912169586 +4641 0.4912163328 +4642 0.4912156473 +4643 0.491214783 +4644 0.4912139188 +4645 0.4912133823 +4646 0.4912126373 +4647 0.491212071 +4648 0.4912117134 +4649 0.4912101637 +4650 0.4912095676 +4651 0.4912088226 +4652 0.4912081967 +4653 0.4912076603 +4654 0.4912071239 +4655 0.4912061702 +4656 0.4912057231 +4657 0.4912054549 +4658 0.4912047099 +4659 0.4912041734 +4660 0.491203339 +4661 0.4912028323 +4662 0.4912022065 +4663 0.4912008356 +4664 0.4911997031 +4665 0.491198958 +4666 0.4911985706 +4667 0.4911978255 +4668 0.4911969911 +4669 0.491196544 +4670 0.4911958586 +4671 0.4911954115 +4672 0.4911947559 +4673 0.4911942791 +4674 0.491193683 +4675 0.4911929081 +4676 0.4911922823 +4677 0.4911914478 +4678 0.4911907028 +4679 0.4911897789 +4680 0.4911894809 +4681 0.4911889146 +4682 0.4911878418 +4683 0.4911870669 +4684 0.4911863516 +4685 0.4911853384 +4686 0.4911843847 +4687 0.4911835204 +4688 0.4911828052 +4689 0.4911820899 +4690 0.4911810468 +4691 0.4911798547 +4692 0.4911790501 +4693 0.4911784242 +4694 0.4911777388 +4695 0.4911769639 +4696 0.4911761294 +4697 0.4911750566 +4698 0.4911743115 +4699 0.4911737155 +4700 0.4911727916 +4701 0.4911720763 +4702 0.4911714505 +4703 0.4911697517 +4704 0.4911690067 +4705 0.4911686193 +4706 0.4911677252 +4707 0.4911670397 +4708 0.4911661457 +4709 0.491165043 +4710 0.4911648344 +4711 0.4911641191 +4712 0.491163076 +4713 0.4911624204 +4714 0.4911615561 +4715 0.4911603044 +4716 0.4911599468 +4717 0.4911592315 +4718 0.4911576222 +4719 0.4911571752 +4720 0.4911567877 +4721 0.4911561917 +4722 0.491155685 +4723 0.4911547016 +4724 0.4911540459 +4725 0.4911533009 +4726 0.4911530624 +4727 0.4911521982 +4728 0.4911511253 +4729 0.4911505889 +4730 0.4911500822 +4731 0.4911495756 +4732 0.4911487709 +4733 0.4911483239 +4734 0.4911472808 +4735 0.4911464761 +4736 0.4911458503 +4737 0.4911453436 +4738 0.4911446582 +4739 0.4911443602 +4740 0.4911439429 +4741 0.4911434959 +4742 0.4911425422 +4743 0.4911419462 +4744 0.4911402474 +4745 0.491139711 +4746 0.4911378633 +4747 0.4911373864 +4748 0.4911364328 +4749 0.4911356579 +4750 0.4911347042 +4751 0.4911341678 +4752 0.4911330353 +4753 0.4911319922 +4754 0.4911312173 +4755 0.4911304127 +4756 0.4911300253 +4757 0.4911292802 +4758 0.4911288928 +4759 0.4911276113 +4760 0.4911266874 +4761 0.4911259423 +4762 0.4911256443 +4763 0.4911251973 +4764 0.4911241542 +4765 0.4911234091 +4766 0.4911225747 +4767 0.4911212336 +4768 0.4911203991 +4769 0.4911199223 +4770 0.4911188196 +4771 0.4911182831 +4772 0.4911174487 +4773 0.4911169122 +4774 0.4911158095 +4775 0.4911155115 +4776 0.4911151539 +4777 0.4911147963 +4778 0.4911142896 +4779 0.491113336 +4780 0.4911122333 +4781 0.4911115776 +4782 0.4911107432 +4783 0.4911097597 +4784 0.4911083292 +4785 0.4911077331 +4786 0.4911070477 +4787 0.4911064218 +4788 0.4911056768 +4789 0.4911052297 +4790 0.4911044549 +4791 0.4911036502 +4792 0.4911029647 +4793 0.4911024283 +4794 0.4911018919 +4795 0.4911014448 +4796 0.4911009382 +4797 0.4911003421 +4798 0.4910992395 +4799 0.4910988818 +4800 0.4910983156 +4801 0.4910975109 +4802 0.4910970341 +4803 0.4910965274 +4804 0.4910958718 +4805 0.491095395 +4806 0.4910950671 +4807 0.4910945009 +4808 0.4910936962 +4809 0.4910927426 +4810 0.4910917889 +4811 0.4910908948 +4812 0.4910902988 +4813 0.4910895835 +4814 0.4910890769 +4815 0.4910874377 +4816 0.4910862158 +4817 0.4910850834 +4818 0.4910836826 +4819 0.491082729 +4820 0.4910820733 +4821 0.4910815369 +4822 0.4910803448 +4823 0.4910794805 +4824 0.4910788845 +4825 0.491078348 +4826 0.4910778116 +4827 0.4910772751 +4828 0.4910766493 +4829 0.491075785 +4830 0.4910748314 +4831 0.4910739969 +4832 0.4910730134 +4833 0.491072626 +4834 0.4910720597 +4835 0.4910715233 +4836 0.4910705994 +4837 0.4910697054 +4838 0.4910683345 +4839 0.4910675894 +4840 0.4910667549 +4841 0.4910660397 +4842 0.4910652648 +4843 0.4910648178 +4844 0.4910641919 +4845 0.4910637151 +4846 0.4910627912 +4847 0.4910618077 +4848 0.4910607647 +4849 0.4910601686 +4850 0.491059513 +4851 0.4910586785 +4852 0.4910579036 +4853 0.4910576056 +4854 0.49105695 +4855 0.4910558473 +4856 0.4910553704 +4857 0.4910549234 +4858 0.4910542678 +4859 0.4910540293 +4860 0.4910536121 +4861 0.4910526286 +4862 0.491051973 +4863 0.4910511385 +4864 0.4910507511 +4865 0.491050006 +4866 0.4910488735 +4867 0.4910480093 +4868 0.4910470258 +4869 0.4910453271 +4870 0.4910447608 +4871 0.491044284 +4872 0.4910429429 +4873 0.491042466 +4874 0.4910417806 +4875 0.4910409461 +4876 0.4910403799 +4877 0.4910396944 +4878 0.4910388004 +4879 0.4910385321 +4880 0.4910377573 +4881 0.4910372208 +4882 0.4910360287 +4883 0.4910356711 +4884 0.4910352539 +4885 0.491034628 +4886 0.4910336148 +4887 0.4910330187 +4888 0.4910326015 +4889 0.4910321246 +4890 0.491031618 +4891 0.4910310219 +4892 0.4910303961 +4893 0.4910298597 +4894 0.4910285186 +4895 0.4910278927 +4896 0.491025896 +4897 0.4910247933 +4898 0.4910242866 +4899 0.491023631 +4900 0.4910226773 +4901 0.4910222005 +4902 0.4910216044 +4903 0.4910208296 +4904 0.4910203229 +4905 0.4910190116 +4906 0.4910184156 +4907 0.4910177599 +4908 0.4910171639 +4909 0.4910167764 +4910 0.49101624 +4911 0.4910155247 +4912 0.4910142134 +4913 0.4910137664 +4914 0.4910132598 +4915 0.4910125445 +4916 0.4910117398 +4917 0.491010816 +4918 0.4910101603 +4919 0.4910094153 +4920 0.4910086106 +4921 0.4910080742 +4922 0.4910073887 +4923 0.491005541 +4924 0.4910051237 +4925 0.4910039614 +4926 0.4910033952 +4927 0.4910029482 +4928 0.4910025607 +4929 0.4910020243 +4930 0.4910016369 +4931 0.4910011302 +4932 0.4910008322 +4933 0.4909997891 +4934 0.4909994017 +4935 0.490998597 +4936 0.4909979116 +4937 0.4909974049 +4938 0.4909968387 +4939 0.4909952592 +4940 0.4909938585 +4941 0.4909927558 +4942 0.4909923385 +4943 0.4909920107 +4944 0.4909915041 +4945 0.4909908484 +4946 0.4909897457 +4947 0.4909891497 +4948 0.490988345 +4949 0.4909876596 +4950 0.4909872125 +4951 0.4909864079 +4952 0.4909860801 +4953 0.4909848582 +4954 0.4909837853 +4955 0.4909831892 +4956 0.4909821461 +4957 0.4909816991 +4958 0.4909807454 +4959 0.4909803282 +4960 0.4909796428 +4961 0.4909791063 +4962 0.4909785997 +4963 0.4909782122 +4964 0.490977348 +4965 0.4909765731 +4966 0.4909758579 +4967 0.4909752618 +4968 0.4909739803 +4969 0.4909735333 +4970 0.4909730266 +4971 0.4909724008 +4972 0.4909711789 +4973 0.4909706425 +4974 0.4909696888 +4975 0.4909688543 +4976 0.4909681391 +4977 0.4909676026 +4978 0.4909673344 +4979 0.490966947 +4980 0.4909663509 +4981 0.4909653078 +4982 0.490964682 +4983 0.4909636985 +4984 0.4909628342 +4985 0.4909622382 +4986 0.4909618806 +4987 0.4909613739 +4988 0.4909602712 +4989 0.4909600626 +4990 0.4909594964 +4991 0.4909589897 +4992 0.4909583937 +4993 0.4909577977 +4994 0.4909571122 +4995 0.4909566056 +4996 0.4909555923 +4997 0.4909550856 +4998 0.4909543406 +4999 0.4909538339 diff --git a/code/train/catboost_info/test/events.out.tfevents b/code/train/catboost_info/test/events.out.tfevents new file mode 100644 index 0000000..c218e86 Binary files /dev/null and b/code/train/catboost_info/test/events.out.tfevents differ diff --git a/code/train/catboost_info/test1/events.out.tfevents b/code/train/catboost_info/test1/events.out.tfevents new file mode 100644 index 0000000..2f443b1 Binary files /dev/null and b/code/train/catboost_info/test1/events.out.tfevents differ diff --git a/code/train/catboost_info/test_error.tsv b/code/train/catboost_info/test_error.tsv new file mode 100644 index 0000000..2015169 --- /dev/null +++ b/code/train/catboost_info/test_error.tsv @@ -0,0 +1,5001 @@ +iter Logloss +0 0.6861052887 +1 0.6743600161 +2 0.6710211431 +3 0.6648334068 +4 0.6541856344 +5 0.6488011302 +6 0.6434835621 +7 0.6384988858 +8 0.6359470921 +9 0.6275708523 +10 0.6193913675 +11 0.6171219209 +12 0.613084422 +13 0.6092213262 +14 0.6024870154 +15 0.5959876065 +16 0.592715908 +17 0.5909668695 +18 0.585207929 +19 0.5836811562 +20 0.5808259152 +21 0.5781049635 +22 0.5754473715 +23 0.5747250825 +24 0.5721040878 +25 0.569590143 +26 0.5682790198 +27 0.5659677904 +28 0.5636375471 +29 0.5614650772 +30 0.5593268801 +31 0.5582264592 +32 0.5562307768 +33 0.5542727048 +34 0.5524353322 +35 0.5521891651 +36 0.5503484547 +37 0.5486041846 +38 0.5468421523 +39 0.5452386683 +40 0.5435912557 +41 0.5431712814 +42 0.5416659067 +43 0.5402145338 +44 0.5398402167 +45 0.5384712173 +46 0.5371311263 +47 0.5364143805 +48 0.5351482588 +49 0.5339118798 +50 0.5332699378 +51 0.5320975146 +52 0.5317879281 +53 0.5312035643 +54 0.5300915205 +55 0.5290267433 +56 0.5284817781 +57 0.5274432865 +58 0.5256061523 +59 0.5251191228 +60 0.5242018671 +61 0.5237296791 +62 0.5228649351 +63 0.5220193837 +64 0.5211784814 +65 0.5204109525 +66 0.5196581459 +67 0.51892334 +68 0.5185553409 +69 0.5183632352 +70 0.5179789045 +71 0.5172910074 +72 0.5170997957 +73 0.5164391379 +74 0.5162684898 +75 0.5156210046 +76 0.5154632312 +77 0.5148310048 +78 0.5142572505 +79 0.5136657341 +80 0.5131060465 +81 0.5129601344 +82 0.5124644026 +83 0.5119830356 +84 0.5117207752 +85 0.5112189637 +86 0.5110930787 +87 0.5109636771 +88 0.5107209074 +89 0.5104983436 +90 0.510032891 +91 0.5095928896 +92 0.5093747366 +93 0.5091772069 +94 0.5087631334 +95 0.5086563219 +96 0.5085980882 +97 0.5082021346 +98 0.5079899421 +99 0.5077845445 +100 0.5076948395 +101 0.507296919 +102 0.506916701 +103 0.5065873853 +104 0.5062502019 +105 0.5061634772 +106 0.5059745901 +107 0.5059302442 +108 0.5058471554 +109 0.5057612651 +110 0.5054527515 +111 0.505156278 +112 0.5049940938 +113 0.5048360223 +114 0.5047534699 +115 0.5046803946 +116 0.5044246907 +117 0.5043525095 +118 0.5040934081 +119 0.5039513106 +120 0.5038821693 +121 0.5037341709 +122 0.5035891529 +123 0.5034659501 +124 0.5033391114 +125 0.503279924 +126 0.5032169219 +127 0.5031536814 +128 0.5030316707 +129 0.502961218 +130 0.5028993484 +131 0.50278604 +132 0.5026774999 +133 0.5025590059 +134 0.5024892089 +135 0.5023759601 +136 0.5021478531 +137 0.502145767 +138 0.5019521711 +139 0.5018984077 +140 0.5017865298 +141 0.5017575023 +142 0.5017072556 +143 0.5017002223 +144 0.5016967652 +145 0.5016850827 +146 0.5015010832 +147 0.5013890861 +148 0.5013409255 +149 0.5012378691 +150 0.5011476277 +151 0.5011351107 +152 0.5010340213 +153 0.5009437202 +154 0.5008438825 +155 0.5007910131 +156 0.5006897449 +157 0.5006380676 +158 0.5005837082 +159 0.5005804896 +160 0.5005035996 +161 0.5005005597 +162 0.5004976391 +163 0.5004948377 +164 0.5004137158 +165 0.5003654956 +166 0.5003629326 +167 0.5003586411 +168 0.5003558993 +169 0.5003545284 +170 0.500302732 +171 0.5002501607 +172 0.5002449751 +173 0.5002244115 +174 0.5002135038 +175 0.5002083182 +176 0.500203371 +177 0.5001974702 +178 0.500195086 +179 0.5001891851 +180 0.5001838803 +181 0.5001099706 +182 0.5001051426 +183 0.5000992417 +184 0.5000965595 +185 0.5000902414 +186 0.500085175 +187 0.5000839829 +188 0.5000645518 +189 0.500062108 +190 0.5000562668 +191 0.4999675751 +192 0.4999595881 +193 0.4999580979 +194 0.4999566972 +195 0.499954313 +196 0.4999490678 +197 0.4999477267 +198 0.4999453127 +199 0.4999409914 +200 0.499932915 +201 0.4999271035 +202 0.4999213219 +203 0.4998993576 +204 0.499897182 +205 0.4998852313 +206 0.4998806417 +207 0.4998791814 +208 0.4998748303 +209 0.4998385012 +210 0.4998287559 +211 0.4998273254 +212 0.4997788072 +213 0.4997758568 +214 0.4997746349 +215 0.4997720421 +216 0.4997698963 +217 0.4997651577 +218 0.4997605682 +219 0.4997393191 +220 0.4997361005 +221 0.4997347892 +222 0.4997301996 +223 0.4997277558 +224 0.4997065962 +225 0.499627024 +226 0.4996247888 +227 0.4996222556 +228 0.4995842577 +229 0.4995788634 +230 0.4995679856 +231 0.4995595813 +232 0.4995572866 +233 0.4995544553 +234 0.4994786084 +235 0.4994761944 +236 0.4994740189 +237 0.4994728864 +238 0.4994704128 +239 0.4994683266 +240 0.4994595349 +241 0.499457121 +242 0.4994512499 +243 0.4994410575 +244 0.4994173051 +245 0.4994161428 +246 0.4994054139 +247 0.4994009138 +248 0.4993968607 +249 0.4993925393 +250 0.4993904532 +251 0.4993819297 +252 0.4993779064 +253 0.4993733764 +254 0.4993721545 +255 0.4993561507 +256 0.4993542434 +257 0.4993516804 +258 0.4993463457 +259 0.4993448258 +260 0.4992679954 +261 0.4992632569 +262 0.4992621244 +263 0.4992607535 +264 0.499252379 +265 0.4992510677 +266 0.4992465974 +267 0.4992427231 +268 0.4992345572 +269 0.4992324711 +270 0.4992279411 +271 0.4992239774 +272 0.4992228151 +273 0.4992203713 +274 0.4992178679 +275 0.4991967083 +276 0.4991943539 +277 0.4991930426 +278 0.4991889895 +279 0.4991869629 +280 0.4991835059 +281 0.4991813303 +282 0.4991786779 +283 0.4991762341 +284 0.4991749824 +285 0.4991737605 +286 0.4991573096 +287 0.4991545976 +288 0.4991534949 +289 0.4991511704 +290 0.4991500081 +291 0.4991423489 +292 0.4991398753 +293 0.4991387726 +294 0.4991375507 +295 0.4991350473 +296 0.4991327227 +297 0.4991277159 +298 0.4991225601 +299 0.4991184474 +300 0.4991159738 +301 0.4991076888 +302 0.499105692 +303 0.4991015197 +304 0.4990993143 +305 0.499095291 +306 0.4990941287 +307 0.4990918041 +308 0.499088049 +309 0.4990868271 +310 0.499084592 +311 0.4990833403 +312 0.4990808667 +313 0.4990787805 +314 0.4990763069 +315 0.4990148247 +316 0.4990127088 +317 0.4990114869 +318 0.4990074934 +319 0.4990032912 +320 0.4990012945 +321 0.4989974202 +322 0.4989938737 +323 0.4989887477 +324 0.4989868106 +325 0.4989845158 +326 0.4989807905 +327 0.4989782573 +328 0.498974383 +329 0.4989721776 +330 0.4989679457 +331 0.4989667536 +332 0.4989656509 +333 0.498956144 +334 0.4989466668 +335 0.4989455046 +336 0.4989413918 +337 0.4989376963 +338 0.4989337326 +339 0.4989241959 +340 0.4989164771 +341 0.4989092649 +342 0.4989081026 +343 0.4989043774 +344 0.4989031555 +345 0.4988955559 +346 0.4988943936 +347 0.4988905491 +348 0.4988864662 +349 0.4988827409 +350 0.4988789262 +351 0.4988708497 +352 0.4988683762 +353 0.4988649191 +354 0.4988636972 +355 0.4988614024 +356 0.498859197 +357 0.4988581242 +358 0.4988570513 +359 0.4988549055 +360 0.4988535644 +361 0.4988515974 +362 0.4988491239 +363 0.4988470377 +364 0.4988458456 +365 0.4988438488 +366 0.4988417031 +367 0.4988405408 +368 0.4988393785 +369 0.4988375009 +370 0.4988365473 +371 0.4988344015 +372 0.4988332988 +373 0.4988320471 +374 0.4988309444 +375 0.498827249 +376 0.4988255204 +377 0.4988234939 +378 0.4988195302 +379 0.4988171162 +380 0.4988160433 +381 0.4988149108 +382 0.4988137485 +383 0.4988126756 +384 0.4988107385 +385 0.498809457 +386 0.4988085033 +387 0.4988066555 +388 0.4988045396 +389 0.4988024236 +390 0.4988012911 +391 0.4987974764 +392 0.4987963141 +393 0.4987925293 +394 0.4987873734 +395 0.4987835886 +396 0.4987825157 +397 0.498781264 +398 0.4987802209 +399 0.4987666608 +400 0.4987652899 +401 0.498764217 +402 0.4987631144 +403 0.4987620415 +404 0.4987598361 +405 0.4987580778 +406 0.4987511338 +407 0.4987498821 +408 0.4987477364 +409 0.4987466933 +410 0.4987445475 +411 0.498741001 +412 0.4987399282 +413 0.4987387063 +414 0.498737842 +415 0.4987341167 +416 0.4987301828 +417 0.498725474 +418 0.4987241329 +419 0.4987221958 +420 0.4987199904 +421 0.4987118246 +422 0.4987084569 +423 0.4987052979 +424 0.4987004997 +425 0.4986981453 +426 0.4986962082 +427 0.4986951651 +428 0.4986928107 +429 0.4986916782 +430 0.4986826779 +431 0.4986816348 +432 0.4986805023 +433 0.4986760916 +434 0.4986719789 +435 0.4986709358 +436 0.4986697437 +437 0.4986667337 +438 0.4986655416 +439 0.4986643495 +440 0.4986623825 +441 0.4986613394 +442 0.4986601772 +443 0.4986582698 +444 0.4986517729 +445 0.4986494185 +446 0.4986475112 +447 0.498645127 +448 0.4986405076 +449 0.4986385407 +450 0.4986366333 +451 0.4986354412 +452 0.4986335041 +453 0.4986312689 +454 0.4986265005 +455 0.4986251594 +456 0.4986242654 +457 0.4986230137 +458 0.4986217024 +459 0.4986205401 +460 0.4986182453 +461 0.4986161889 +462 0.4986150564 +463 0.4986080827 +464 0.4985929431 +465 0.4985895159 +466 0.4985854627 +467 0.4985819461 +468 0.4985782804 +469 0.4985747935 +470 0.4985710086 +471 0.4985677006 +472 0.4985665085 +473 0.4985641541 +474 0.4985620977 +475 0.4985601904 +476 0.4985592367 +477 0.4985571803 +478 0.498556018 +479 0.4985528888 +480 0.4985495509 +481 0.4985471668 +482 0.4985461237 +483 0.4985415937 +484 0.4985403718 +485 0.4985368552 +486 0.4985326828 +487 0.4984646441 +488 0.4984611275 +489 0.4984591009 +490 0.4984559717 +491 0.498452306 +492 0.4984512629 +493 0.4984502794 +494 0.4984483125 +495 0.4984467627 +496 0.4984432461 +497 0.4984398486 +498 0.4984378817 +499 0.4984368386 +500 0.498434961 +501 0.4984339179 +502 0.4984319808 +503 0.4984297754 +504 0.4984278383 +505 0.4984265866 +506 0.4984256031 +507 0.4984232189 +508 0.498422295 +509 0.4984172286 +510 0.4984163048 +511 0.4984140398 +512 0.4984116854 +513 0.4984098377 +514 0.4984079601 +515 0.4984059038 +516 0.4984048905 +517 0.4984037878 +518 0.4984005692 +519 0.4983986916 +520 0.4983834924 +521 0.4983815851 +522 0.4983777406 +523 0.4983759226 +524 0.4983748199 +525 0.4983704986 +526 0.4983694853 +527 0.4983673098 +528 0.4983664157 +529 0.4983643295 +530 0.498362452 +531 0.4983580114 +532 0.4983549418 +533 0.4983516933 +534 0.4983499648 +535 0.4983482363 +536 0.4983449282 +537 0.4983437659 +538 0.4983427825 +539 0.4983417692 +540 0.4983396234 +541 0.4983385803 +542 0.4983351531 +543 0.4983340802 +544 0.4983330073 +545 0.4983298781 +546 0.498328835 +547 0.4983278217 +548 0.4983213248 +549 0.4983203115 +550 0.4983184936 +551 0.4983166756 +552 0.4983097913 +553 0.498308778 +554 0.4982938172 +555 0.4982928338 +556 0.498288423 +557 0.4982865455 +558 0.4982855918 +559 0.4982844295 +560 0.4982834758 +561 0.4982762637 +562 0.4982726874 +563 0.4982716145 +564 0.4982674422 +565 0.4982657435 +566 0.4982638063 +567 0.498262793 +568 0.4982565047 +569 0.4982555511 +570 0.4982544782 +571 0.4982521834 +572 0.4982488753 +573 0.4982478621 +574 0.4982456269 +575 0.4982436599 +576 0.4982427063 +577 0.4982408585 +578 0.498239875 +579 0.4982262554 +580 0.4982246759 +581 0.4982214572 +582 0.4982205333 +583 0.4982196393 +584 0.4982175233 +585 0.498215765 +586 0.4982127251 +587 0.4982116523 +588 0.4982100727 +589 0.4982077481 +590 0.4982050063 +591 0.4982030692 +592 0.4981997909 +593 0.4981967213 +594 0.4981947841 +595 0.4981938305 +596 0.498192847 +597 0.4981894197 +598 0.4981874826 +599 0.4981856348 +600 0.4981834593 +601 0.4981814923 +602 0.4981803598 +603 0.4981794657 +604 0.4981774392 +605 0.4981752338 +606 0.498172194 +607 0.498170078 +608 0.4981667402 +609 0.4981648328 +610 0.4981581571 +611 0.4981392624 +612 0.4981375637 +613 0.4981364908 +614 0.4981345239 +615 0.4981335404 +616 0.4981324675 +617 0.498130739 +618 0.4981286528 +619 0.4981276991 +620 0.4981238248 +621 0.4981219771 +622 0.4981188776 +623 0.4981171193 +624 0.4981161656 +625 0.4981150927 +626 0.4981141093 +627 0.49811098 +628 0.4981093111 +629 0.4981081488 +630 0.4981065991 +631 0.4981036188 +632 0.4981026354 +633 0.4980991187 +634 0.4980925324 +635 0.4980907442 +636 0.4980887177 +637 0.4980875852 +638 0.4980856182 +639 0.4980840685 +640 0.4980777802 +641 0.498076916 +642 0.4980745616 +643 0.498072684 +644 0.4980656507 +645 0.4980625215 +646 0.4980608227 +647 0.4980597498 +648 0.4980576637 +649 0.49805671 +650 0.4980537596 +651 0.4980136754 +652 0.4980117383 +653 0.4980099502 +654 0.4980041089 +655 0.4980026784 +656 0.4980010095 +657 0.4979991319 +658 0.4979957047 +659 0.4979946914 +660 0.497992486 +661 0.4979908469 +662 0.4979888799 +663 0.4979860189 +664 0.4979841712 +665 0.4979823532 +666 0.4979791942 +667 0.4979780021 +668 0.4979748132 +669 0.4979690018 +670 0.4979680779 +671 0.4979649785 +672 0.497963995 +673 0.4979628625 +674 0.4979567828 +675 0.497953743 +676 0.497950733 +677 0.4979491832 +678 0.4979481998 +679 0.4979455175 +680 0.4979419115 +681 0.4979411366 +682 0.4979400637 +683 0.49793911 +684 0.4979349973 +685 0.4979332092 +686 0.4979314509 +687 0.497927964 +688 0.4979260864 +689 0.4979242387 +690 0.497923136 +691 0.4979216161 +692 0.4979195001 +693 0.4979175928 +694 0.4979165497 +695 0.4979145827 +696 0.4979128542 +697 0.4979109469 +698 0.4979081156 +699 0.4979062679 +700 0.4979031088 +701 0.4979019466 +702 0.4979009035 +703 0.4978951218 +704 0.4978931251 +705 0.4978896382 +706 0.4978880885 +707 0.4978852871 +708 0.4978842142 +709 0.4978832009 +710 0.4978803995 +711 0.4978790584 +712 0.4978771808 +713 0.4978762272 +714 0.4978754225 +715 0.4978736642 +716 0.497871876 +717 0.4978709521 +718 0.4978671076 +719 0.4978662136 +720 0.4978647533 +721 0.4978637102 +722 0.4978627267 +723 0.4978618028 +724 0.4978609088 +725 0.4978597167 +726 0.4978589716 +727 0.4978569451 +728 0.4978549483 +729 0.4978540244 +730 0.4978522959 +731 0.4978514018 +732 0.4978503587 +733 0.4978493753 +734 0.497845948 +735 0.4978429678 +736 0.4978421631 +737 0.4978401365 +738 0.4978340867 +739 0.4978331032 +740 0.4978312853 +741 0.4978298249 +742 0.4978267851 +743 0.497824997 +744 0.4978233876 +745 0.4978205862 +746 0.4978189173 +747 0.4978170696 +748 0.4978152516 +749 0.4978137913 +750 0.497812033 +751 0.497810215 +752 0.4978093209 +753 0.4978075328 +754 0.4978019002 +755 0.4977988603 +756 0.4977960589 +757 0.4977943602 +758 0.4977914992 +759 0.497789562 +760 0.4977879825 +761 0.4977864328 +762 0.4977802339 +763 0.4977783861 +764 0.497776449 +765 0.4977731409 +766 0.4977723959 +767 0.4977709952 +768 0.4977691772 +769 0.4977680745 +770 0.4977670315 +771 0.4977637234 +772 0.4977609518 +773 0.4977602365 +774 0.4977566901 +775 0.4977549317 +776 0.4977521303 +777 0.4977506104 +778 0.4977488818 +779 0.4977471533 +780 0.4977453652 +781 0.4977432194 +782 0.4977370503 +783 0.4977361563 +784 0.4977343979 +785 0.4977335337 +786 0.4977319243 +787 0.4977301362 +788 0.4977275732 +789 0.4977260235 +790 0.4977251294 +791 0.4977215829 +792 0.4977201226 +793 0.4977192583 +794 0.4977165463 +795 0.4977108839 +796 0.4977093938 +797 0.4977084997 +798 0.4977028075 +799 0.4977010193 +800 0.4976993504 +801 0.4976984861 +802 0.4976966384 +803 0.4976958337 +804 0.4976921084 +805 0.4976902905 +806 0.4976813796 +807 0.4976755383 +808 0.4976746741 +809 0.4976729157 +810 0.4976711574 +811 0.4976674023 +812 0.4976666274 +813 0.4976649585 +814 0.4976633492 +815 0.4976606074 +816 0.4976587 +817 0.4976570013 +818 0.4976550939 +819 0.4976542595 +820 0.4976533952 +821 0.4976524415 +822 0.4976509812 +823 0.4976501468 +824 0.4976492229 +825 0.4976484778 +826 0.4976466599 +827 0.4976359013 +828 0.4976343217 +829 0.4976327124 +830 0.4976318481 +831 0.4976290169 +832 0.4976273182 +833 0.4976264539 +834 0.4976248148 +835 0.4976231757 +836 0.4976222816 +837 0.4976191822 +838 0.4976130727 +839 0.4976122382 +840 0.4976009133 +841 0.4975994828 +842 0.4975984993 +843 0.4975966218 +844 0.4975957277 +845 0.4975929561 +846 0.4975912872 +847 0.4975903037 +848 0.4975734356 +849 0.4975717071 +850 0.4975690547 +851 0.4975631538 +852 0.4975614849 +853 0.49756071 +854 0.4975579086 +855 0.4975561204 +856 0.4975544813 +857 0.4975526634 +858 0.4975499514 +859 0.4975489381 +860 0.4975459281 +861 0.4975442293 +862 0.4975365999 +863 0.4975349012 +864 0.4975316229 +865 0.497529656 +866 0.4975244108 +867 0.4975235763 +868 0.4975210431 +869 0.4975201192 +870 0.4975183609 +871 0.4975165132 +872 0.4975138608 +873 0.4975119832 +874 0.4975111786 +875 0.4975098076 +876 0.4975090626 +877 0.4975081983 +878 0.4975073937 +879 0.4975056651 +880 0.4975047413 +881 0.497501165 +882 0.4975003603 +883 0.4974994662 +884 0.4974979761 +885 0.4974949065 +886 0.497494072 +887 0.4974922243 +888 0.4974905255 +889 0.4974895421 +890 0.497485936 +891 0.4974832538 +892 0.4974817637 +893 0.4974802735 +894 0.4974794093 +895 0.4974775019 +896 0.4974759224 +897 0.4974751177 +898 0.4974736276 +899 0.497472674 +900 0.4974713627 +901 0.4974698427 +902 0.4974688295 +903 0.4974678162 +904 0.4974669221 +905 0.4974653128 +906 0.4974644485 +907 0.4974635544 +908 0.4974620345 +909 0.4974602762 +910 0.4974586073 +911 0.4974568787 +912 0.4974560145 +913 0.4974552098 +914 0.497452468 +915 0.4974507096 +916 0.4974489811 +917 0.4974481466 +918 0.4974452558 +919 0.4974436763 +920 0.4974428418 +921 0.4974410239 +922 0.4974384907 +923 0.4974377456 +924 0.497436941 +925 0.4974353018 +926 0.4974337223 +927 0.4974328581 +928 0.4974321428 +929 0.4974312189 +930 0.4974284771 +931 0.4974224869 +932 0.4974199537 +933 0.4974182549 +934 0.4974164072 +935 0.4974155131 +936 0.4974147979 +937 0.4974133673 +938 0.4974109832 +939 0.4974094334 +940 0.4974077943 +941 0.4974028769 +942 0.4974015954 +943 0.4973999563 +944 0.497399241 +945 0.497398347 +946 0.4973973635 +947 0.4973956946 +948 0.4973939958 +949 0.4973921481 +950 0.4973904792 +951 0.4973897043 +952 0.497388691 +953 0.4973872903 +954 0.4973863962 +955 0.4973808232 +956 0.4973793033 +957 0.4973765019 +958 0.4973756674 +959 0.4973739687 +960 0.4973731342 +961 0.4973714355 +962 0.4973697964 +963 0.4973687831 +964 0.4973673228 +965 0.497365624 +966 0.4973638955 +967 0.4973630908 +968 0.497362316 +969 0.4973614815 +970 0.4973598424 +971 0.4973588887 +972 0.4973582629 +973 0.4973566237 +974 0.497355223 +975 0.4973543289 +976 0.4973527196 +977 0.4973510507 +978 0.497349948 +979 0.4973483685 +980 0.4973474744 +981 0.4973466399 +982 0.4973458055 +983 0.4973442856 +984 0.497342408 +985 0.4973410073 +986 0.4973393682 +987 0.4973358813 +988 0.497334123 +989 0.4973325435 +990 0.4973317984 +991 0.4973309043 +992 0.497329295 +993 0.4973275963 +994 0.4973267618 +995 0.4973258975 +996 0.4973244074 +997 0.4973234835 +998 0.4973215464 +999 0.4973199967 +1000 0.4973185066 +1001 0.4973175529 +1002 0.4973167482 +1003 0.4973129931 +1004 0.4973101619 +1005 0.4973075989 +1006 0.4973062578 +1007 0.4972954992 +1008 0.4972898367 +1009 0.4972847703 +1010 0.4972839657 +1011 0.4972828928 +1012 0.4972814921 +1013 0.4972806278 +1014 0.4972798828 +1015 0.49727729 +1016 0.4972440008 +1017 0.4972432259 +1018 0.4972363714 +1019 0.497234762 +1020 0.4972333613 +1021 0.4972324971 +1022 0.4972309772 +1023 0.4972294572 +1024 0.4972276393 +1025 0.4972239438 +1026 0.4972224835 +1027 0.4972199503 +1028 0.49721849 +1029 0.4972168807 +1030 0.497216076 +1031 0.4972153309 +1032 0.4972124699 +1033 0.4972115758 +1034 0.4972098175 +1035 0.4972081784 +1036 0.497205377 +1037 0.4971998039 +1038 0.4971982244 +1039 0.4971967045 +1040 0.4971942011 +1041 0.4971928898 +1042 0.4971921447 +1043 0.4971912209 +1044 0.4971905056 +1045 0.4971872571 +1046 0.4971842471 +1047 0.4971835021 +1048 0.497182757 +1049 0.4971812967 +1050 0.4971799258 +1051 0.4971784357 +1052 0.4971766773 +1053 0.4971759621 +1054 0.4971711043 +1055 0.4971697036 +1056 0.497167081 +1057 0.4971647862 +1058 0.4971639219 +1059 0.4971624914 +1060 0.4971608225 +1061 0.4971577529 +1062 0.4971553985 +1063 0.4971544746 +1064 0.4971536997 +1065 0.4971529249 +1066 0.4971520308 +1067 0.4971469048 +1068 0.4971441928 +1069 0.4971425537 +1070 0.4971418682 +1071 0.4971387688 +1072 0.4971354011 +1073 0.497133911 +1074 0.4971323613 +1075 0.497131348 +1076 0.4971307221 +1077 0.4971300367 +1078 0.4971283082 +1079 0.4971235994 +1080 0.4971205894 +1081 0.4971192185 +1082 0.4971184138 +1083 0.4971154932 +1084 0.4971130494 +1085 0.4971123341 +1086 0.4971072379 +1087 0.4971063737 +1088 0.4971035424 +1089 0.4971020225 +1090 0.4970998171 +1091 0.4970984462 +1092 0.4970971349 +1093 0.4970920685 +1094 0.4970891181 +1095 0.4970862571 +1096 0.4970848564 +1097 0.4970818463 +1098 0.4970802668 +1099 0.4970771376 +1100 0.4970765415 +1101 0.4970753792 +1102 0.4970739487 +1103 0.4970725778 +1104 0.4970709983 +1105 0.4970701042 +1106 0.4970688227 +1107 0.4970681075 +1108 0.4970667366 +1109 0.4970659617 +1110 0.4970650974 +1111 0.4970625046 +1112 0.4970610443 +1113 0.4970586601 +1114 0.4970561269 +1115 0.4970548752 +1116 0.497049332 +1117 0.4970486466 +1118 0.4970470372 +1119 0.4970461134 +1120 0.4970446531 +1121 0.497043908 +1122 0.4970424477 +1123 0.4970417026 +1124 0.4970394078 +1125 0.4970369343 +1126 0.4970361594 +1127 0.4970354143 +1128 0.4970330003 +1129 0.4970315102 +1130 0.4970264438 +1131 0.497023702 +1132 0.4970219139 +1133 0.497020543 +1134 0.4970183972 +1135 0.4970169667 +1136 0.4970147613 +1137 0.4970139567 +1138 0.4970131818 +1139 0.4970115725 +1140 0.4970103208 +1141 0.4970072213 +1142 0.4970064167 +1143 0.4970058206 +1144 0.4970050458 +1145 0.497003347 +1146 0.4970019761 +1147 0.4970006052 +1148 0.4969999198 +1149 0.4969993237 +1150 0.4969978038 +1151 0.4969964329 +1152 0.4969951514 +1153 0.4969924394 +1154 0.496989489 +1155 0.4969887439 +1156 0.4969876114 +1157 0.4969860021 +1158 0.496984661 +1159 0.4969832305 +1160 0.4969810549 +1161 0.4969794158 +1162 0.4969771806 +1163 0.4969750348 +1164 0.4969742898 +1165 0.4969734553 +1166 0.4969706241 +1167 0.4969678525 +1168 0.4969665412 +1169 0.4969632033 +1170 0.4969521765 +1171 0.4969508652 +1172 0.4969500903 +1173 0.4969478551 +1174 0.4969464246 +1175 0.4969439212 +1176 0.4969430868 +1177 0.4969423417 +1178 0.4969415668 +1179 0.4969402257 +1180 0.4969378713 +1181 0.4969372157 +1182 0.4969355766 +1183 0.496933252 +1184 0.4969309274 +1185 0.4969301525 +1186 0.4969289008 +1187 0.4969266657 +1188 0.4969253544 +1189 0.4969240133 +1190 0.4969231192 +1191 0.4969215993 +1192 0.4969200496 +1193 0.4969178442 +1194 0.496915311 +1195 0.4969144765 +1196 0.4969137613 +1197 0.4969131056 +1198 0.4969123308 +1199 0.4969100062 +1200 0.4969078008 +1201 0.4969056848 +1202 0.4969043139 +1203 0.4969028834 +1204 0.4969013039 +1205 0.496900529 +1206 0.4968957011 +1207 0.4968948666 +1208 0.4968934659 +1209 0.4968914095 +1210 0.4968900386 +1211 0.4968892638 +1212 0.4968870286 +1213 0.4968856279 +1214 0.4968842272 +1215 0.496882588 +1216 0.4968813661 +1217 0.4968806509 +1218 0.4968793098 +1219 0.496876568 +1220 0.4968757931 +1221 0.4968712334 +1222 0.4968706075 +1223 0.4968698028 +1224 0.4968690578 +1225 0.4968642 +1226 0.4968627993 +1227 0.4968620542 +1228 0.4968605343 +1229 0.4968597893 +1230 0.4968576733 +1231 0.4968567494 +1232 0.4968518022 +1233 0.4968502823 +1234 0.4968495373 +1235 0.4968481962 +1236 0.4968467061 +1237 0.4968455438 +1238 0.4968447987 +1239 0.4968433682 +1240 0.4968426827 +1241 0.4968418781 +1242 0.4968392853 +1243 0.4968379144 +1244 0.4968372587 +1245 0.496835858 +1246 0.4968329374 +1247 0.4968279008 +1248 0.4968266193 +1249 0.4968255762 +1250 0.4968229238 +1251 0.4968222085 +1252 0.4968210165 +1253 0.4968175296 +1254 0.4968159799 +1255 0.496814907 +1256 0.4968135361 +1257 0.4968123142 +1258 0.4968099002 +1259 0.4968086187 +1260 0.4968079034 +1261 0.4967976812 +1262 0.4967963699 +1263 0.4967947606 +1264 0.4967935685 +1265 0.4967928235 +1266 0.4967916314 +1267 0.4967909161 +1268 0.4967902605 +1269 0.496789426 +1270 0.4967887107 +1271 0.4967837338 +1272 0.4967821542 +1273 0.4967810515 +1274 0.4967797998 +1275 0.4967791144 +1276 0.4967782799 +1277 0.4967759553 +1278 0.4967734818 +1279 0.4967722301 +1280 0.4967693392 +1281 0.4967670743 +1282 0.496766359 +1283 0.4967635576 +1284 0.4967624251 +1285 0.4967598621 +1286 0.4967585508 +1287 0.4967570011 +1288 0.4967561666 +1289 0.4967555706 +1290 0.4967543487 +1291 0.4967529182 +1292 0.4967482094 +1293 0.4967470769 +1294 0.4967465107 +1295 0.4967450503 +1296 0.4967424873 +1297 0.4967419211 +1298 0.4967412058 +1299 0.4967403714 +1300 0.4967391793 +1301 0.4967377786 +1302 0.4967363779 +1303 0.4967356328 +1304 0.4967349176 +1305 0.4967343215 +1306 0.4967336063 +1307 0.4967323546 +1308 0.4967294041 +1309 0.4967272286 +1310 0.4967257384 +1311 0.4967251424 +1312 0.4967226688 +1313 0.4967219535 +1314 0.4967195992 +1315 0.4967189137 +1316 0.4967180792 +1317 0.4967170958 +1318 0.4967155162 +1319 0.4967139963 +1320 0.4967100028 +1321 0.4967087213 +1322 0.4967076484 +1323 0.4967062775 +1324 0.4967037145 +1325 0.4967029695 +1326 0.4967008237 +1327 0.4966982011 +1328 0.496697158 +1329 0.4966957871 +1330 0.4966943566 +1331 0.4966931645 +1332 0.496691883 +1333 0.4966911379 +1334 0.4966895882 +1335 0.4966886047 +1336 0.4966877405 +1337 0.4966865484 +1338 0.4966850881 +1339 0.4966829125 +1340 0.4966787104 +1341 0.4966779951 +1342 0.4966757003 +1343 0.4966749255 +1344 0.4966733758 +1345 0.4966720645 +1346 0.4966713194 +1347 0.4966700081 +1348 0.4966693226 +1349 0.4966666106 +1350 0.4966650609 +1351 0.4966643457 +1352 0.4966629748 +1353 0.4966607992 +1354 0.4966600541 +1355 0.4966587428 +1356 0.4966580276 +1357 0.4966567461 +1358 0.4966551069 +1359 0.4966543023 +1360 0.496651173 +1361 0.4966498915 +1362 0.4966492061 +1363 0.4966439609 +1364 0.4966427688 +1365 0.4966415171 +1366 0.496640176 +1367 0.4966391031 +1368 0.4966365401 +1369 0.496635199 +1370 0.496633083 +1371 0.4966317419 +1372 0.4966311161 +1373 0.4966301624 +1374 0.4966288511 +1375 0.4966276888 +1376 0.4966245894 +1377 0.4966234271 +1378 0.496622831 +1379 0.4966221754 +1380 0.4966213707 +1381 0.4966207151 +1382 0.4966191653 +1383 0.4966178242 +1384 0.4966169004 +1385 0.4966158573 +1386 0.4966136221 +1387 0.4966130261 +1388 0.4966116552 +1389 0.4966101948 +1390 0.4966095094 +1391 0.4966084663 +1392 0.4966076318 +1393 0.4966061715 +1394 0.4966050987 +1395 0.4966039662 +1396 0.4966031913 +1397 0.4966019396 +1398 0.4965998236 +1399 0.4965991084 +1400 0.496597052 +1401 0.4965958301 +1402 0.4965942804 +1403 0.4965920452 +1404 0.496591479 +1405 0.4965907637 +1406 0.496588767 +1407 0.4965875153 +1408 0.4965860848 +1409 0.4965853695 +1410 0.4965846543 +1411 0.4965825085 +1412 0.4965811376 +1413 0.4965800349 +1414 0.4965787534 +1415 0.4965780381 +1416 0.4965773825 +1417 0.4965758626 +1418 0.4965737764 +1419 0.496573091 +1420 0.4965724055 +1421 0.4965716903 +1422 0.496570677 +1423 0.4965695743 +1424 0.4965680842 +1425 0.4965673093 +1426 0.4965665941 +1427 0.4965645079 +1428 0.4965638224 +1429 0.4965612892 +1430 0.4965606336 +1431 0.4965592627 +1432 0.496558458 +1433 0.4965578024 +1434 0.4965556268 +1435 0.4965550606 +1436 0.4965537195 +1437 0.4965517823 +1438 0.49655062 +1439 0.4965499048 +1440 0.4965493981 +1441 0.4965477888 +1442 0.4965449278 +1443 0.4965442125 +1444 0.496542931 +1445 0.49654007 +1446 0.4965387885 +1447 0.4965381924 +1448 0.4965375368 +1449 0.4965364043 +1450 0.4965341393 +1451 0.4965326492 +1452 0.4965313677 +1453 0.4965299074 +1454 0.4965286259 +1455 0.4965264205 +1456 0.4965251092 +1457 0.4965236787 +1458 0.4965154533 +1459 0.4965140824 +1460 0.4965136055 +1461 0.4965128605 +1462 0.4965114002 +1463 0.4965106551 +1464 0.496509314 +1465 0.4965086583 +1466 0.496507198 +1467 0.4965064232 +1468 0.4965022508 +1469 0.4965002243 +1470 0.496499211 +1471 0.4964976911 +1472 0.4964931611 +1473 0.4964924757 +1474 0.496491224 +1475 0.4964899723 +1476 0.4964877669 +1477 0.4964865152 +1478 0.4964852933 +1479 0.4964839522 +1480 0.4964831774 +1481 0.4964826409 +1482 0.4964816276 +1483 0.4964788858 +1484 0.4964756672 +1485 0.4964737002 +1486 0.4964688126 +1487 0.4964676206 +1488 0.4964671139 +1489 0.4964664285 +1490 0.4964640145 +1491 0.4964619879 +1492 0.496459872 +1493 0.4964576666 +1494 0.4964570705 +1495 0.4964563255 +1496 0.4964540605 +1497 0.4964534048 +1498 0.4964528684 +1499 0.4964516167 +1500 0.4964506332 +1501 0.4964495604 +1502 0.4964485173 +1503 0.4964457755 +1504 0.4964446132 +1505 0.4964412455 +1506 0.4964398746 +1507 0.4964386229 +1508 0.4964380269 +1509 0.4964364771 +1510 0.4964358811 +1511 0.496435136 +1512 0.4964345102 +1513 0.4964321856 +1514 0.4964308445 +1515 0.4964297418 +1516 0.4964182679 +1517 0.496409059 +1518 0.4964083437 +1519 0.4964061384 +1520 0.4964056019 +1521 0.4964048867 +1522 0.4964043204 +1523 0.4964019064 +1524 0.4964008038 +1525 0.4963993434 +1526 0.4963980917 +1527 0.4963960354 +1528 0.4963934128 +1529 0.4963921611 +1530 0.4963911478 +1531 0.496390522 +1532 0.4963895087 +1533 0.4963881378 +1534 0.4963872735 +1535 0.4963866477 +1536 0.4963858728 +1537 0.4963853364 +1538 0.4963829522 +1539 0.4963817899 +1540 0.496381164 +1541 0.4963797335 +1542 0.4963778858 +1543 0.496375889 +1544 0.4963746969 +1545 0.4963725214 +1546 0.4963717465 +1547 0.496370465 +1548 0.4963694815 +1549 0.4963689153 +1550 0.4963667099 +1551 0.4963661139 +1552 0.4963654284 +1553 0.4963641171 +1554 0.4963628952 +1555 0.4963604812 +1556 0.4963591997 +1557 0.4963585739 +1558 0.4963574712 +1559 0.4963536565 +1560 0.4963518087 +1561 0.4963492457 +1562 0.4963486199 +1563 0.4963474874 +1564 0.4963463549 +1565 0.4963456099 +1566 0.4963435535 +1567 0.4963425104 +1568 0.4963414673 +1569 0.4963377122 +1570 0.4963366394 +1571 0.4963355665 +1572 0.4963345532 +1573 0.4963339572 +1574 0.4963326459 +1575 0.4963320796 +1576 0.4963307981 +1577 0.4963296656 +1578 0.4963276987 +1579 0.4963271622 +1580 0.4963260297 +1581 0.4963216786 +1582 0.496316493 +1583 0.4963158671 +1584 0.4963148837 +1585 0.4963141982 +1586 0.4963120226 +1587 0.4963113372 +1588 0.4963100259 +1589 0.4963094596 +1590 0.4963073139 +1591 0.4963059728 +1592 0.4963047509 +1593 0.4963041846 +1594 0.4963026647 +1595 0.4963021283 +1596 0.4963014726 +1597 0.4963009064 +1598 0.496298105 +1599 0.4962962572 +1600 0.4962956016 +1601 0.4962945287 +1602 0.4962938432 +1603 0.4962933664 +1604 0.4962921445 +1605 0.4962910418 +1606 0.4962890749 +1607 0.496288598 +1608 0.4962866311 +1609 0.4962849323 +1610 0.4962837999 +1611 0.4962824587 +1612 0.4962813263 +1613 0.4962801342 +1614 0.4962794189 +1615 0.4962782566 +1616 0.4962768857 +1617 0.4962753956 +1618 0.4962745909 +1619 0.4962740545 +1620 0.4962718789 +1621 0.4962706868 +1622 0.4962696736 +1623 0.4962687199 +1624 0.496267498 +1625 0.4962664847 +1626 0.4962657396 +1627 0.496265233 +1628 0.4962632661 +1629 0.4962626104 +1630 0.4962619846 +1631 0.4962596004 +1632 0.4962590043 +1633 0.4962584679 +1634 0.4962569778 +1635 0.4962548916 +1636 0.4962539081 +1637 0.4962525074 +1638 0.4962519114 +1639 0.4962507193 +1640 0.4962487225 +1641 0.496246994 +1642 0.496244878 +1643 0.4962443118 +1644 0.4962432985 +1645 0.4962424938 +1646 0.496241868 +1647 0.4962407355 +1648 0.4962384705 +1649 0.4962379341 +1650 0.4962373678 +1651 0.4962360267 +1652 0.4962353711 +1653 0.4962341194 +1654 0.4962333147 +1655 0.4962321524 +1656 0.496231467 +1657 0.4962300961 +1658 0.4962281291 +1659 0.4962266092 +1660 0.4962260132 +1661 0.4962248509 +1662 0.4962227051 +1663 0.4962207381 +1664 0.4962202017 +1665 0.4962191288 +1666 0.496218503 +1667 0.4962177281 +1668 0.4962167446 +1669 0.4962158506 +1670 0.4962151949 +1671 0.4962106054 +1672 0.4962100093 +1673 0.4962079231 +1674 0.4962072377 +1675 0.4962061648 +1676 0.496205688 +1677 0.4962034528 +1678 0.4962029164 +1679 0.4962022905 +1680 0.4962002342 +1681 0.4961991911 +1682 0.4961982076 +1683 0.4961975519 +1684 0.4961954062 +1685 0.4961942439 +1686 0.4961931114 +1687 0.4961911146 +1688 0.496190608 +1689 0.4961895053 +1690 0.4961884324 +1691 0.4961862271 +1692 0.4961841409 +1693 0.4961836045 +1694 0.4961812501 +1695 0.4961799388 +1696 0.4961793427 +1697 0.4961774354 +1698 0.4961764817 +1699 0.4961754088 +1700 0.4961742465 +1701 0.4961731438 +1702 0.4961720114 +1703 0.4961709087 +1704 0.4961694484 +1705 0.4961676006 +1706 0.496166945 +1707 0.4961663191 +1708 0.4961649482 +1709 0.496164382 +1710 0.4961633985 +1711 0.4961613719 +1712 0.49616015 +1713 0.4961596136 +1714 0.4961579149 +1715 0.496156544 +1716 0.4961560075 +1717 0.496154875 +1718 0.4961536829 +1719 0.4961529975 +1720 0.4961523418 +1721 0.4961513285 +1722 0.4961508815 +1723 0.4961495106 +1724 0.4961481695 +1725 0.4961463814 +1726 0.4961456959 +1727 0.4961445336 +1728 0.4961434011 +1729 0.4961421792 +1730 0.4961409275 +1731 0.4961385732 +1732 0.4961376493 +1733 0.4961364572 +1734 0.4961347585 +1735 0.4961335068 +1736 0.4961322253 +1737 0.4961309438 +1738 0.496129096 +1739 0.4961282914 +1740 0.4961262946 +1741 0.4961243574 +1742 0.4961230461 +1743 0.4961220031 +1744 0.4961208706 +1745 0.4961196189 +1746 0.4961174135 +1747 0.4961166983 +1748 0.4961155658 +1749 0.4961148505 +1750 0.4961125259 +1751 0.4961119001 +1752 0.4961113636 +1753 0.4961093073 +1754 0.4961082642 +1755 0.4961050455 +1756 0.4961040025 +1757 0.4961032872 +1758 0.4960995917 +1759 0.4960975652 +1760 0.4960970883 +1761 0.4960958366 +1762 0.4960953002 +1763 0.4960942571 +1764 0.4960933034 +1765 0.49609232 +1766 0.4960917537 +1767 0.4960896974 +1768 0.4960892801 +1769 0.4960881178 +1770 0.4960867767 +1771 0.4960863297 +1772 0.4960855846 +1773 0.4960842137 +1774 0.4960837071 +1775 0.4960825448 +1776 0.4960815613 +1777 0.4960808461 +1778 0.4960797732 +1779 0.4960782235 +1780 0.4960774486 +1781 0.4960763757 +1782 0.4960757499 +1783 0.496075273 +1784 0.4960745578 +1785 0.4960733359 +1786 0.4960722332 +1787 0.4960716669 +1788 0.4960710411 +1789 0.4960704153 +1790 0.4960692828 +1791 0.4960686271 +1792 0.4960680907 +1793 0.4960667496 +1794 0.4960662727 +1795 0.4960656469 +1796 0.4960646634 +1797 0.4960640078 +1798 0.4960629945 +1799 0.4960623984 +1800 0.4960617428 +1801 0.4960610573 +1802 0.4960604911 +1803 0.4960592394 +1804 0.4960583155 +1805 0.4960559313 +1806 0.4960533385 +1807 0.49605161 +1808 0.4960508649 +1809 0.4960503583 +1810 0.4960480933 +1811 0.4960474973 +1812 0.4960465138 +1813 0.4960452919 +1814 0.496043623 +1815 0.4960429375 +1816 0.4960412984 +1817 0.4960408215 +1818 0.4960398083 +1819 0.4960392718 +1820 0.4960385268 +1821 0.4960343544 +1822 0.4960336392 +1823 0.4960317914 +1824 0.4960310166 +1825 0.4960299139 +1826 0.496028841 +1827 0.4960270231 +1828 0.4960250263 +1829 0.4960243707 +1830 0.4960225825 +1831 0.4960216289 +1832 0.4960202281 +1833 0.4960197513 +1834 0.4960182612 +1835 0.4960164433 +1836 0.4960157876 +1837 0.4960146551 +1838 0.496013612 +1839 0.4960123603 +1840 0.4960118537 +1841 0.4960113173 +1842 0.4960094695 +1843 0.4960085456 +1844 0.49600789 +1845 0.4960073833 +1846 0.4960068767 +1847 0.4960061615 +1848 0.4960051184 +1849 0.4960039859 +1850 0.496002764 +1851 0.4960021977 +1852 0.4960009162 +1853 0.4960003798 +1854 0.4959997241 +1855 0.4959985619 +1856 0.4959972208 +1857 0.4959958797 +1858 0.495994926 +1859 0.4959931378 +1860 0.4959918563 +1861 0.4959908729 +1862 0.4959898 +1863 0.4959888165 +1864 0.4959870582 +1865 0.4959864621 +1866 0.495984674 +1867 0.4959839289 +1868 0.4959829454 +1869 0.4959823494 +1870 0.4959783559 +1871 0.495977432 +1872 0.4959768658 +1873 0.4959757929 +1874 0.4959748988 +1875 0.4959729915 +1876 0.4959720378 +1877 0.4959709053 +1878 0.4959703689 +1879 0.4959694152 +1880 0.4959683423 +1881 0.4959675078 +1882 0.4959662263 +1883 0.4959655707 +1884 0.4959650044 +1885 0.495963872 +1886 0.4959631567 +1887 0.4959625905 +1888 0.4959605043 +1889 0.4959582691 +1890 0.4959571068 +1891 0.495956034 +1892 0.4959544246 +1893 0.495953769 +1894 0.4959527259 +1895 0.4959518616 +1896 0.4959512954 +1897 0.4959507589 +1898 0.4959502225 +1899 0.495949239 +1900 0.4959469144 +1901 0.4959451263 +1902 0.495943219 +1903 0.4959421759 +1904 0.4959415202 +1905 0.4959397619 +1906 0.4959325497 +1907 0.4959318941 +1908 0.4959301655 +1909 0.4959294801 +1910 0.4959287946 +1911 0.495928288 +1912 0.4959274237 +1913 0.4959268575 +1914 0.4959251587 +1915 0.4959231024 +1916 0.4959209864 +1917 0.4959197943 +1918 0.4959187512 +1919 0.4959163671 +1920 0.4959152346 +1921 0.4959134464 +1922 0.4959127014 +1923 0.495905519 +1924 0.4959044461 +1925 0.4959034329 +1926 0.4959015851 +1927 0.4959010189 +1928 0.4959001546 +1929 0.495899648 +1930 0.4958989625 +1931 0.4958969658 +1932 0.4958963995 +1933 0.4958927338 +1934 0.4958917205 +1935 0.4958913927 +1936 0.4958902602 +1937 0.4958891873 +1938 0.4958868926 +1939 0.4958794122 +1940 0.4958787267 +1941 0.4958778029 +1942 0.4958765512 +1943 0.4958759849 +1944 0.4958754783 +1945 0.4958745544 +1946 0.4958740776 +1947 0.4958734517 +1948 0.4958718126 +1949 0.4958708887 +1950 0.4958702331 +1951 0.4958692198 +1952 0.4958679979 +1953 0.4958669548 +1954 0.4958662396 +1955 0.4958654349 +1956 0.4958647793 +1957 0.4958626037 +1958 0.4958619182 +1959 0.4958610242 +1960 0.4958600109 +1961 0.4958578353 +1962 0.4958567326 +1963 0.4958557193 +1964 0.4958552127 +1965 0.4958542292 +1966 0.4958532458 +1967 0.4958527093 +1968 0.4958510106 +1969 0.4958504741 +1970 0.4958482092 +1971 0.4958471065 +1972 0.4958451991 +1973 0.495843411 +1974 0.4958425765 +1975 0.4958412056 +1976 0.495840699 +1977 0.4958401923 +1978 0.4958392089 +1979 0.4958354538 +1980 0.4958344107 +1981 0.495833606 +1982 0.4958317285 +1983 0.4958311622 +1984 0.4958300894 +1985 0.4958290761 +1986 0.4958279734 +1987 0.4958262449 +1988 0.4958238011 +1989 0.4958229368 +1990 0.4958214169 +1991 0.4958204334 +1992 0.4958193903 +1993 0.4958187943 +1994 0.4958176916 +1995 0.4958167677 +1996 0.4958157842 +1997 0.4958151584 +1998 0.4958139663 +1999 0.4958130722 +2000 0.4958125358 +2001 0.4958115523 +2002 0.4958094363 +2003 0.4958083933 +2004 0.4958078568 +2005 0.4958061581 +2006 0.4958044892 +2007 0.4958030885 +2008 0.4958020156 +2009 0.4958006447 +2010 0.4957998698 +2011 0.4957993334 +2012 0.495795012 +2013 0.4957944756 +2014 0.4957927172 +2015 0.4957914059 +2016 0.4957891112 +2017 0.4957886641 +2018 0.4957875614 +2019 0.4957871442 +2020 0.4957861607 +2021 0.4957844322 +2022 0.4957826739 +2023 0.495782048 +2024 0.4957811837 +2025 0.4957799917 +2026 0.4957789784 +2027 0.4957757895 +2028 0.4957753723 +2029 0.4957508748 +2030 0.4957503681 +2031 0.4957491761 +2032 0.495748282 +2033 0.4957473879 +2034 0.4957467919 +2035 0.4957458084 +2036 0.4957453614 +2037 0.4957446163 +2038 0.4957429176 +2039 0.49574104 +2040 0.4957401162 +2041 0.4957389241 +2042 0.4957379108 +2043 0.4957369273 +2044 0.4957357948 +2045 0.4957337385 +2046 0.495733202 +2047 0.4957321291 +2048 0.4957312053 +2049 0.495730341 +2050 0.4957299238 +2051 0.4957293873 +2052 0.4957276588 +2053 0.4957267647 +2054 0.4957262283 +2055 0.4957255428 +2056 0.4957249766 +2057 0.4957227116 +2058 0.4957214301 +2059 0.4957210725 +2060 0.4957197314 +2061 0.495717973 +2062 0.4957172578 +2063 0.4957163339 +2064 0.4957152312 +2065 0.4957142477 +2066 0.4957131152 +2067 0.4957124 +2068 0.4957054263 +2069 0.4957037275 +2070 0.4957028633 +2071 0.4957018202 +2072 0.4956999128 +2073 0.4956987505 +2074 0.4956980055 +2075 0.495696873 +2076 0.4956957405 +2077 0.4956951445 +2078 0.4956939822 +2079 0.4956934159 +2080 0.4956923728 +2081 0.4956907635 +2082 0.4956897204 +2083 0.495688886 +2084 0.4956873958 +2085 0.495686323 +2086 0.4956858163 +2087 0.4956853097 +2088 0.4956847732 +2089 0.4956827467 +2090 0.4956823295 +2091 0.4956807201 +2092 0.4956788426 +2093 0.4956783359 +2094 0.49567622 +2095 0.4956751173 +2096 0.4956743424 +2097 0.4956733292 +2098 0.4956727033 +2099 0.4956722861 +2100 0.4956712728 +2101 0.4956704979 +2102 0.4956696933 +2103 0.4956691568 +2104 0.49566868 +2105 0.4956669515 +2106 0.4956654315 +2107 0.4956642991 +2108 0.495663107 +2109 0.4956618553 +2110 0.4956613486 +2111 0.4956592625 +2112 0.4956582492 +2113 0.4956577127 +2114 0.495656163 +2115 0.4956549709 +2116 0.4956540471 +2117 0.4956525867 +2118 0.4956518417 +2119 0.4956502622 +2120 0.4956496661 +2121 0.4956489211 +2122 0.495648325 +2123 0.4956475501 +2124 0.4956463283 +2125 0.4956455534 +2126 0.4956450468 +2127 0.4956445699 +2128 0.495640785 +2129 0.4956400698 +2130 0.4956391757 +2131 0.4956370299 +2132 0.4956364637 +2133 0.495635361 +2134 0.4956349438 +2135 0.4956336921 +2136 0.4956333046 +2137 0.4956310695 +2138 0.4956298476 +2139 0.4956294005 +2140 0.4956287747 +2141 0.49562797 +2142 0.4956275826 +2143 0.4956265991 +2144 0.4956258839 +2145 0.4956242149 +2146 0.4956232315 +2147 0.4956210559 +2148 0.495620579 +2149 0.495620132 +2150 0.4956190293 +2151 0.4956174498 +2152 0.4956170028 +2153 0.4956164365 +2154 0.4956159001 +2155 0.4956150358 +2156 0.4956144994 +2157 0.4956136649 +2158 0.4956131583 +2159 0.495612145 +2160 0.4956113403 +2161 0.4956108933 +2162 0.4956099396 +2163 0.495609284 +2164 0.495607615 +2165 0.4956058865 +2166 0.4956042772 +2167 0.4956038599 +2168 0.4956029063 +2169 0.4956016844 +2170 0.4956007605 +2171 0.4955992406 +2172 0.4955987041 +2173 0.4955976909 +2174 0.4955965882 +2175 0.4955957537 +2176 0.4955952173 +2177 0.4955943232 +2178 0.4955933397 +2179 0.4955929523 +2180 0.4955908661 +2181 0.4955899721 +2182 0.4955894356 +2183 0.4955884223 +2184 0.4955874687 +2185 0.495586068 +2186 0.4955851143 +2187 0.4955817168 +2188 0.4955805545 +2189 0.4955797201 +2190 0.495578826 +2191 0.4955777829 +2192 0.4955773061 +2193 0.495576412 +2194 0.495575667 +2195 0.4955739384 +2196 0.495573402 +2197 0.4955728953 +2198 0.4955722695 +2199 0.4955714052 +2200 0.4955707496 +2201 0.4955690806 +2202 0.4955686634 +2203 0.4955663686 +2204 0.4955652957 +2205 0.4955649083 +2206 0.4955644613 +2207 0.4955639248 +2208 0.495563001 +2209 0.4955617493 +2210 0.4955606764 +2211 0.4955572193 +2212 0.4955562656 +2213 0.4955530172 +2214 0.4955519741 +2215 0.49555108 +2216 0.495550335 +2217 0.4955492919 +2218 0.4955487257 +2219 0.4955480402 +2220 0.4955474144 +2221 0.4955469673 +2222 0.495545358 +2223 0.4955447918 +2224 0.4955444341 +2225 0.4955435699 +2226 0.495542646 +2227 0.4955416923 +2228 0.4955395465 +2229 0.4955386525 +2230 0.4955377584 +2231 0.4955365663 +2232 0.4955360895 +2233 0.4955343609 +2234 0.495532692 +2235 0.4955309337 +2236 0.4955300694 +2237 0.4955284601 +2238 0.4955269998 +2239 0.4955259269 +2240 0.4955237215 +2241 0.4955206817 +2242 0.4955202346 +2243 0.4955197876 +2244 0.4955187445 +2245 0.495516867 +2246 0.4955161219 +2247 0.4955150788 +2248 0.4955143636 +2249 0.4955127841 +2250 0.4955122476 +2251 0.4955115324 +2252 0.4955103701 +2253 0.4955098038 +2254 0.4955091184 +2255 0.4955082541 +2256 0.4955078071 +2257 0.4955071812 +2258 0.4955053037 +2259 0.4955049461 +2260 0.4955039924 +2261 0.4955031281 +2262 0.4955026215 +2263 0.4955019956 +2264 0.4954983895 +2265 0.4954974061 +2266 0.4954957371 +2267 0.4954948431 +2268 0.4954933828 +2269 0.4954926675 +2270 0.4954915052 +2271 0.4954908794 +2272 0.4954845315 +2273 0.4954839652 +2274 0.4954831606 +2275 0.4954820877 +2276 0.4954816704 +2277 0.495481134 +2278 0.4954801505 +2279 0.4954769319 +2280 0.4954764252 +2281 0.495476008 +2282 0.4954753822 +2283 0.4954744881 +2284 0.4954740112 +2285 0.4954734748 +2286 0.4954723721 +2287 0.4954711502 +2288 0.4954707628 +2289 0.4954703456 +2290 0.4954694515 +2291 0.4954679018 +2292 0.4954667693 +2293 0.495466352 +2294 0.4954658454 +2295 0.49546516 +2296 0.4954635506 +2297 0.4954623287 +2298 0.4954616135 +2299 0.495460928 +2300 0.4954601234 +2301 0.4954590803 +2302 0.4954581564 +2303 0.4954572027 +2304 0.4954566961 +2305 0.495455653 +2306 0.4954547589 +2307 0.4954542523 +2308 0.4954533284 +2309 0.4954473084 +2310 0.4954468017 +2311 0.4954457884 +2312 0.495445401 +2313 0.4954448348 +2314 0.4954439407 +2315 0.4954434937 +2316 0.4954427188 +2317 0.4954419141 +2318 0.4954410797 +2319 0.4954401856 +2320 0.4954397684 +2321 0.4954390531 +2322 0.4954383677 +2323 0.4954375928 +2324 0.4954365497 +2325 0.4954361921 +2326 0.4954328244 +2327 0.4954313939 +2328 0.4954296952 +2329 0.4954289203 +2330 0.4954285329 +2331 0.4954280263 +2332 0.4954272812 +2333 0.4954268342 +2334 0.4954260295 +2335 0.4954246586 +2336 0.4954236751 +2337 0.4954228109 +2338 0.4954219466 +2339 0.4954210823 +2340 0.4954180127 +2341 0.4954172974 +2342 0.4954162842 +2343 0.4954149729 +2344 0.4954143768 +2345 0.4954134827 +2346 0.4954126781 +2347 0.4954117542 +2348 0.4954110091 +2349 0.4954106515 +2350 0.495409668 +2351 0.4954091912 +2352 0.4954085057 +2353 0.4954079991 +2354 0.4954059427 +2355 0.4954052871 +2356 0.4954048699 +2357 0.4954043334 +2358 0.4954038268 +2359 0.4954031115 +2360 0.4954024857 +2361 0.4954017704 +2362 0.4954011148 +2363 0.4954004293 +2364 0.4953997439 +2365 0.4953990584 +2366 0.4953981941 +2367 0.4953976279 +2368 0.4953970319 +2369 0.4953961974 +2370 0.4953953927 +2371 0.4953944093 +2372 0.4953934854 +2373 0.4953921443 +2374 0.4953915482 +2375 0.4953906244 +2376 0.4953900581 +2377 0.4953891044 +2378 0.4953885978 +2379 0.4953877037 +2380 0.4953862434 +2381 0.4953852897 +2382 0.49538374 +2383 0.4953830248 +2384 0.4953824287 +2385 0.4953812664 +2386 0.4953796869 +2387 0.4953788226 +2388 0.4953781372 +2389 0.4953776305 +2390 0.4953767961 +2391 0.4953758424 +2392 0.4953749781 +2393 0.4953738457 +2394 0.495373041 +2395 0.4953725343 +2396 0.4953719085 +2397 0.4953711336 +2398 0.4953704184 +2399 0.4953696137 +2400 0.4953685408 +2401 0.4953677362 +2402 0.4953666633 +2403 0.4953663355 +2404 0.4953654712 +2405 0.4953644877 +2406 0.4953636235 +2407 0.4953628784 +2408 0.495360077 +2409 0.4953592425 +2410 0.4953581696 +2411 0.4953577822 +2412 0.495357216 +2413 0.4953568285 +2414 0.4953556662 +2415 0.4953542655 +2416 0.4953532821 +2417 0.4953524178 +2418 0.4953517323 +2419 0.4953513449 +2420 0.4953503614 +2421 0.4953499144 +2422 0.4953492289 +2423 0.4953479176 +2424 0.495347113 +2425 0.4953461295 +2426 0.495345444 +2427 0.4953436559 +2428 0.4953427618 +2429 0.4953422552 +2430 0.4953390663 +2431 0.4953387087 +2432 0.4953381425 +2433 0.4953362351 +2434 0.4953358477 +2435 0.4953298276 +2436 0.495328874 +2437 0.4953284567 +2438 0.4953279799 +2439 0.495327354 +2440 0.4953264302 +2441 0.4953255361 +2442 0.4953243142 +2443 0.4953237778 +2444 0.4953220492 +2445 0.4953212446 +2446 0.495319367 +2447 0.4953185624 +2448 0.4953178769 +2449 0.4953167444 +2450 0.495316357 +2451 0.4953157907 +2452 0.4953150159 +2453 0.495313943 +2454 0.4953136152 +2455 0.4953128701 +2456 0.4953122443 +2457 0.4953105753 +2458 0.4953096515 +2459 0.4953086382 +2460 0.4953072673 +2461 0.4953063434 +2462 0.495305956 +2463 0.4953053003 +2464 0.4953022903 +2465 0.495301426 +2466 0.4953004127 +2467 0.4952996677 +2468 0.4952988034 +2469 0.4952979093 +2470 0.4952964788 +2471 0.4952957934 +2472 0.4952948099 +2473 0.4952939456 +2474 0.4952933794 +2475 0.4952917403 +2476 0.4952909058 +2477 0.4952900713 +2478 0.4952896541 +2479 0.4952888196 +2480 0.4952873593 +2481 0.4952869719 +2482 0.4952856606 +2483 0.4952837532 +2484 0.4952822929 +2485 0.4952818161 +2486 0.4952814585 +2487 0.4952810114 +2488 0.495280177 +2489 0.4952794021 +2490 0.4952778524 +2491 0.4952771967 +2492 0.4952758556 +2493 0.4952745443 +2494 0.4952735907 +2495 0.4952723092 +2496 0.4952716833 +2497 0.49527067 +2498 0.4952702528 +2499 0.4952694183 +2500 0.4952687627 +2501 0.4952683156 +2502 0.4952679282 +2503 0.4952670937 +2504 0.4952663189 +2505 0.4952656036 +2506 0.4952646798 +2507 0.4952614313 +2508 0.4952608353 +2509 0.495259971 +2510 0.4952592855 +2511 0.4952588683 +2512 0.4952581232 +2513 0.4952558881 +2514 0.4952554708 +2515 0.4952539509 +2516 0.4952530867 +2517 0.4952518648 +2518 0.4952502554 +2519 0.4952493614 +2520 0.4952486759 +2521 0.4952477818 +2522 0.4952473646 +2523 0.4952457851 +2524 0.495244444 +2525 0.4952438479 +2526 0.4952432519 +2527 0.4952402419 +2528 0.495239765 +2529 0.4952389008 +2530 0.4952377981 +2531 0.4952372616 +2532 0.495236606 +2533 0.4952356225 +2534 0.4952352351 +2535 0.4952345198 +2536 0.4952341324 +2537 0.4952330595 +2538 0.4952326721 +2539 0.4952318674 +2540 0.4952308541 +2541 0.4952294832 +2542 0.4952288574 +2543 0.4952283507 +2544 0.4952279931 +2545 0.4952269798 +2546 0.4952263242 +2547 0.4952256685 +2548 0.4952249831 +2549 0.4952233737 +2550 0.4952227181 +2551 0.4952221518 +2552 0.4952217942 +2553 0.4952210492 +2554 0.4952206617 +2555 0.4952198869 +2556 0.4952185756 +2557 0.4952177411 +2558 0.4952171451 +2559 0.495216102 +2560 0.4952156251 +2561 0.4952143436 +2562 0.4952128833 +2563 0.4952123469 +2564 0.4952113336 +2565 0.4952105289 +2566 0.4952100521 +2567 0.4952096349 +2568 0.4952092176 +2569 0.4952085918 +2570 0.4952080554 +2571 0.4952061182 +2572 0.4952057606 +2573 0.4952050155 +2574 0.4952042109 +2575 0.4952032274 +2576 0.4952023929 +2577 0.4952014988 +2578 0.4952009922 +2579 0.4951998895 +2580 0.4951990849 +2581 0.495198161 +2582 0.4951976543 +2583 0.4951964623 +2584 0.4951955682 +2585 0.4951950615 +2586 0.4951942569 +2587 0.4951928562 +2588 0.4951919919 +2589 0.4951913661 +2590 0.4951905018 +2591 0.4951900249 +2592 0.4951892799 +2593 0.4951873725 +2594 0.4951864785 +2595 0.4951860612 +2596 0.4951851374 +2597 0.4951846009 +2598 0.4951841837 +2599 0.4951837963 +2600 0.495182932 +2601 0.4951820677 +2602 0.4951812333 +2603 0.4951803094 +2604 0.4951796835 +2605 0.4951778358 +2606 0.4951772994 +2607 0.4951765841 +2608 0.4951759583 +2609 0.4951756006 +2610 0.4951740807 +2611 0.4951731568 +2612 0.4951715773 +2613 0.4951711601 +2614 0.4951703554 +2615 0.495169521 +2616 0.4951686269 +2617 0.4951673156 +2618 0.4951668685 +2619 0.4951649314 +2620 0.4951631135 +2621 0.4951623088 +2622 0.4951618618 +2623 0.4951610869 +2624 0.4951602524 +2625 0.4951586729 +2626 0.4951570636 +2627 0.4951566762 +2628 0.4951562887 +2629 0.4951552754 +2630 0.4951549774 +2631 0.4951545602 +2632 0.4951537257 +2633 0.4951533979 +2634 0.4951526826 +2635 0.4951517588 +2636 0.4951511627 +2637 0.4951508051 +2638 0.4951485699 +2639 0.4951473182 +2640 0.4951465136 +2641 0.4951445764 +2642 0.4951431757 +2643 0.4951421624 +2644 0.4951418048 +2645 0.4951408511 +2646 0.4951379305 +2647 0.4951375133 +2648 0.4951364702 +2649 0.4951360529 +2650 0.4951356357 +2651 0.4951349801 +2652 0.495134533 +2653 0.4951340562 +2654 0.4951336092 +2655 0.4951328045 +2656 0.495131672 +2657 0.4951303011 +2658 0.4951296753 +2659 0.495129109 +2660 0.4951278275 +2661 0.4951272911 +2662 0.4951269036 +2663 0.4951264268 +2664 0.4951259202 +2665 0.4951252645 +2666 0.4951246685 +2667 0.4951237446 +2668 0.4951229101 +2669 0.4951186782 +2670 0.4951180225 +2671 0.4951172179 +2672 0.4951143569 +2673 0.4951137608 +2674 0.4951133436 +2675 0.4951123303 +2676 0.4951118237 +2677 0.495111019 +2678 0.4951102441 +2679 0.495109052 +2680 0.4951082176 +2681 0.4951075917 +2682 0.4951063102 +2683 0.4951053566 +2684 0.4951045221 +2685 0.49510333 +2686 0.4951029724 +2687 0.4951024955 +2688 0.4950997239 +2689 0.4950987404 +2690 0.4950975484 +2691 0.4950959688 +2692 0.495095343 +2693 0.4950945979 +2694 0.4950941211 +2695 0.495088399 +2696 0.4950879222 +2697 0.4950869983 +2698 0.4950862831 +2699 0.4950858658 +2700 0.4950851506 +2701 0.4950842863 +2702 0.4950829154 +2703 0.495082528 +2704 0.4950816637 +2705 0.4950809783 +2706 0.495080561 +2707 0.4950799948 +2708 0.4950785941 +2709 0.4950781768 +2710 0.4950776404 +2711 0.4950769251 +2712 0.4950760311 +2713 0.4950756436 +2714 0.4950747198 +2715 0.4950741237 +2716 0.4950733489 +2717 0.4950729018 +2718 0.4950720972 +2719 0.4950712329 +2720 0.4950698918 +2721 0.4950689679 +2722 0.4950679547 +2723 0.495067299 +2724 0.4950664943 +2725 0.4950661367 +2726 0.4950653917 +2727 0.495064885 +2728 0.4950640505 +2729 0.4950634545 +2730 0.4950625604 +2731 0.4950619346 +2732 0.4950611895 +2733 0.4950603551 +2734 0.4950594312 +2735 0.4950582689 +2736 0.4950575536 +2737 0.495056749 +2738 0.4950561231 +2739 0.4950556463 +2740 0.4950549608 +2741 0.4950546032 +2742 0.4950538284 +2743 0.4950532621 +2744 0.4950529045 +2745 0.4950521594 +2746 0.4950515634 +2747 0.4950508481 +2748 0.4950499541 +2749 0.4950494474 +2750 0.4950490302 +2751 0.4950484937 +2752 0.4950478381 +2753 0.4950473314 +2754 0.4950465864 +2755 0.4950452453 +2756 0.495044679 +2757 0.4950443512 +2758 0.4950436658 +2759 0.4950432187 +2760 0.4950427121 +2761 0.495041967 +2762 0.4950411624 +2763 0.4950406557 +2764 0.4950397319 +2765 0.4950386888 +2766 0.4950381225 +2767 0.4950373775 +2768 0.4950366324 +2769 0.4950359172 +2770 0.4950353509 +2771 0.4950342184 +2772 0.495031566 +2773 0.4950309104 +2774 0.4950300461 +2775 0.495029301 +2776 0.4950283772 +2777 0.4950279599 +2778 0.4950276321 +2779 0.4950269765 +2780 0.4950266784 +2781 0.4950252181 +2782 0.4950246519 +2783 0.4950239962 +2784 0.4950226849 +2785 0.4950220293 +2786 0.4950215822 +2787 0.4950194067 +2788 0.4950190192 +2789 0.4950183636 +2790 0.4950181252 +2791 0.4950172311 +2792 0.4950163966 +2793 0.4950159496 +2794 0.4950152343 +2795 0.4950146383 +2796 0.4950137144 +2797 0.4950132972 +2798 0.4950128204 +2799 0.4950118369 +2800 0.4950114197 +2801 0.495011062 +2802 0.4950104362 +2803 0.495008648 +2804 0.4950079328 +2805 0.4950074857 +2806 0.4950068003 +2807 0.4950061744 +2808 0.4950056082 +2809 0.4950050122 +2810 0.4950043863 +2811 0.4950040585 +2812 0.4950036114 +2813 0.4950008994 +2814 0.4950003034 +2815 0.4949995285 +2816 0.4949988729 +2817 0.4949980384 +2818 0.4949976212 +2819 0.4949960119 +2820 0.4949952966 +2821 0.49499479 +2822 0.4949941939 +2823 0.4949933296 +2824 0.494992674 +2825 0.4949922866 +2826 0.4949915713 +2827 0.4949907964 +2828 0.4949879652 +2829 0.49498725 +2830 0.4949868029 +2831 0.4949862963 +2832 0.4949856108 +2833 0.4949851936 +2834 0.494984836 +2835 0.4949841505 +2836 0.4949835247 +2837 0.4949829882 +2838 0.4949823624 +2839 0.4949814087 +2840 0.4949810213 +2841 0.4949803954 +2842 0.4949795312 +2843 0.4949786371 +2844 0.4949778026 +2845 0.4949772066 +2846 0.4949759847 +2847 0.4949755675 +2848 0.4949749416 +2849 0.4949743158 +2850 0.4949736601 +2851 0.4949730641 +2852 0.4949725276 +2853 0.4949721998 +2854 0.4949714547 +2855 0.4949708289 +2856 0.4949701732 +2857 0.4949695474 +2858 0.4949691302 +2859 0.4949682659 +2860 0.4949675804 +2861 0.4949663883 +2862 0.4949660009 +2863 0.494965077 +2864 0.4949648386 +2865 0.4949643916 +2866 0.4949639446 +2867 0.4949632591 +2868 0.4949620372 +2869 0.4949613816 +2870 0.4949604577 +2871 0.4949597722 +2872 0.494959355 +2873 0.4949589974 +2874 0.4949583715 +2875 0.4949574477 +2876 0.4949565238 +2877 0.4949536628 +2878 0.4949528283 +2879 0.4949508613 +2880 0.4949501163 +2881 0.4949494308 +2882 0.4949480301 +2883 0.4949473447 +2884 0.494945944 +2885 0.4949452585 +2886 0.4949445134 +2887 0.4949434108 +2888 0.494941712 +2889 0.4949412948 +2890 0.4949405497 +2891 0.4949402219 +2892 0.4949397451 +2893 0.4949392682 +2894 0.4949389106 +2895 0.4949382848 +2896 0.4949376291 +2897 0.4949368543 +2898 0.4949359304 +2899 0.4949355728 +2900 0.4949347681 +2901 0.4949341422 +2902 0.4949337548 +2903 0.4949330098 +2904 0.4949324137 +2905 0.4949319667 +2906 0.4949310428 +2907 0.4949304169 +2908 0.4949299997 +2909 0.4949294931 +2910 0.4949286288 +2911 0.4949280626 +2912 0.4949272877 +2913 0.4949267215 +2914 0.4949263042 +2915 0.4949252313 +2916 0.4949245757 +2917 0.4949239796 +2918 0.4949232942 +2919 0.4949226981 +2920 0.4949220127 +2921 0.4949215657 +2922 0.4949212378 +2923 0.4949208206 +2924 0.4949203438 +2925 0.4949195689 +2926 0.494918794 +2927 0.4949168867 +2928 0.494915933 +2929 0.494915337 +2930 0.4949140555 +2931 0.49491337 +2932 0.4949125654 +2933 0.4949117905 +2934 0.4949104196 +2935 0.4949096745 +2936 0.4949092871 +2937 0.4949084824 +2938 0.4949078268 +2939 0.494907499 +2940 0.4949066645 +2941 0.49490583 +2942 0.4949043399 +2943 0.4949039525 +2944 0.4949033862 +2945 0.494902224 +2946 0.4949018365 +2947 0.4949010319 +2948 0.4949002272 +2949 0.4948994523 +2950 0.4948981708 +2951 0.494897396 +2952 0.4948967999 +2953 0.4948964721 +2954 0.4948956376 +2955 0.4948953396 +2956 0.4948946244 +2957 0.4948939091 +2958 0.4948933131 +2959 0.4948920912 +2960 0.4948908991 +2961 0.4948905116 +2962 0.494889856 +2963 0.4948894686 +2964 0.4948888725 +2965 0.4948862499 +2966 0.4948859519 +2967 0.4948850876 +2968 0.4948835677 +2969 0.4948828823 +2970 0.4948815411 +2971 0.4948810643 +2972 0.4948768324 +2973 0.4948760277 +2974 0.4948756403 +2975 0.4948742098 +2976 0.4948735541 +2977 0.4948714084 +2978 0.4948709315 +2979 0.4948703951 +2980 0.4948693222 +2981 0.4948685175 +2982 0.4948680407 +2983 0.4948675043 +2984 0.4948668486 +2985 0.4948662824 +2986 0.4948657459 +2987 0.4948650307 +2988 0.4948644644 +2989 0.4948618418 +2990 0.494861365 +2991 0.4948607391 +2992 0.4948596364 +2993 0.4948589212 +2994 0.4948576397 +2995 0.4948571629 +2996 0.4948565966 +2997 0.4948549575 +2998 0.4948543614 +2999 0.4948537952 +3000 0.4948534078 +3001 0.4948530799 +3002 0.4948523647 +3003 0.494851858 +3004 0.4948512024 +3005 0.4948508448 +3006 0.4948502189 +3007 0.4948495931 +3008 0.4948484904 +3009 0.4948478347 +3010 0.4948470003 +3011 0.4948464638 +3012 0.4948449439 +3013 0.4948445267 +3014 0.4948439902 +3015 0.4948435134 +3016 0.49484101 +3017 0.4948406822 +3018 0.4948400265 +3019 0.494838894 +3020 0.4948379702 +3021 0.4948377317 +3022 0.4948369867 +3023 0.494836033 +3024 0.4948341555 +3025 0.4948335296 +3026 0.4948331124 +3027 0.4948323971 +3028 0.4948319799 +3029 0.4948313838 +3030 0.4948307282 +3031 0.4948301023 +3032 0.4948283738 +3033 0.4948272711 +3034 0.4948267347 +3035 0.4948255724 +3036 0.4948243803 +3037 0.4948240823 +3038 0.4948234862 +3039 0.4948212511 +3040 0.4948208338 +3041 0.494820357 +3042 0.4948195821 +3043 0.4948193437 +3044 0.4948181218 +3045 0.4948175556 +3046 0.4948169297 +3047 0.4948164231 +3048 0.4948160357 +3049 0.4948156184 +3050 0.4948143965 +3051 0.4948138303 +3052 0.4948130256 +3053 0.4948126084 +3054 0.4948100752 +3055 0.4948090619 +3056 0.4948081678 +3057 0.4948076016 +3058 0.4948064989 +3059 0.4948059923 +3060 0.4948057539 +3061 0.4948050982 +3062 0.494804681 +3063 0.4948038763 +3064 0.4948029822 +3065 0.4948024756 +3066 0.4948017305 +3067 0.4947996444 +3068 0.4947988993 +3069 0.4947981245 +3070 0.4947973794 +3071 0.4947965449 +3072 0.4947963661 +3073 0.4947953528 +3074 0.4947946674 +3075 0.4947941607 +3076 0.4947934455 +3077 0.4947928196 +3078 0.4947920746 +3079 0.4947914487 +3080 0.4947904057 +3081 0.4947887665 +3082 0.4947883493 +3083 0.4947877532 +3084 0.49478674 +3085 0.4947861141 +3086 0.4947851903 +3087 0.4947845346 +3088 0.4947840578 +3089 0.4947834319 +3090 0.4947829551 +3091 0.4947821504 +3092 0.4947812265 +3093 0.4947808391 +3094 0.4947800046 +3095 0.4947787231 +3096 0.4947784251 +3097 0.494777233 +3098 0.4947763986 +3099 0.4947759217 +3100 0.4947751171 +3101 0.49477467 +3102 0.4947740144 +3103 0.4947729713 +3104 0.4947720176 +3105 0.4947712726 +3106 0.4947710043 +3107 0.4947702891 +3108 0.4947698123 +3109 0.4947694546 +3110 0.4947687692 +3111 0.4947684115 +3112 0.4947673685 +3113 0.4947666532 +3114 0.4947651929 +3115 0.4947642392 +3116 0.4947635538 +3117 0.4947628087 +3118 0.4947622723 +3119 0.4947605735 +3120 0.4947599775 +3121 0.4947592324 +3122 0.4947586662 +3123 0.4947579509 +3124 0.4947568482 +3125 0.4947563714 +3126 0.4947559542 +3127 0.4947547621 +3128 0.4947540468 +3129 0.4947535104 +3130 0.4947529143 +3131 0.4947526461 +3132 0.4947518415 +3133 0.4947499043 +3134 0.494749189 +3135 0.4947486526 +3136 0.4947480268 +3137 0.4947469241 +3138 0.494746626 +3139 0.4947455234 +3140 0.4947449571 +3141 0.4947442121 +3142 0.494743616 +3143 0.4947429902 +3144 0.4947424835 +3145 0.4947422153 +3146 0.4947416491 +3147 0.4947408742 +3148 0.4947400993 +3149 0.4947389371 +3150 0.4947385198 +3151 0.4947379834 +3152 0.4947372085 +3153 0.4947364933 +3154 0.4947362548 +3155 0.494735778 +3156 0.4947353012 +3157 0.4947347051 +3158 0.4947338111 +3159 0.4947334236 +3160 0.4947327382 +3161 0.4947319633 +3162 0.4947314269 +3163 0.4947302348 +3164 0.4947299964 +3165 0.4947293109 +3166 0.4947283572 +3167 0.4947274632 +3168 0.4947268075 +3169 0.4947261221 +3170 0.4947256154 +3171 0.4947248108 +3172 0.4947229332 +3173 0.494722218 +3174 0.4947212643 +3175 0.4947210557 +3176 0.4947201914 +3177 0.4947188801 +3178 0.4947181648 +3179 0.4947175986 +3180 0.4947169131 +3181 0.4947161979 +3182 0.4947156912 +3183 0.4947149462 +3184 0.4947133071 +3185 0.4947123832 +3186 0.4947116977 +3187 0.4947105652 +3188 0.4947102076 +3189 0.4947091049 +3190 0.4947085685 +3191 0.4947074062 +3192 0.4947062737 +3193 0.4947055883 +3194 0.494705171 +3195 0.4947046942 +3196 0.4947042173 +3197 0.4947038299 +3198 0.4947032935 +3199 0.494701863 +3200 0.4947011775 +3201 0.4947003729 +3202 0.4946998066 +3203 0.4946990615 +3204 0.4946984357 +3205 0.4946979887 +3206 0.4946972436 +3207 0.4946968264 +3208 0.4946956641 +3209 0.494694919 +3210 0.4946945614 +3211 0.4946937269 +3212 0.4946931011 +3213 0.4946917898 +3214 0.4946911341 +3215 0.4946906871 +3216 0.4946900911 +3217 0.4946888692 +3218 0.4946883327 +3219 0.4946880049 +3220 0.4946849352 +3221 0.49468422 +3222 0.4946834451 +3223 0.4946827597 +3224 0.4946810609 +3225 0.4946804947 +3226 0.4946800775 +3227 0.49467969 +3228 0.4946786768 +3229 0.4946782893 +3230 0.4946776039 +3231 0.4946772463 +3232 0.4946768886 +3233 0.494676233 +3234 0.4946759349 +3235 0.4946753389 +3236 0.494674564 +3237 0.4946741468 +3238 0.4946734912 +3239 0.4946727461 +3240 0.4946721203 +3241 0.4946715242 +3242 0.494670809 +3243 0.4946705407 +3244 0.4946701235 +3245 0.4946650869 +3246 0.4946644909 +3247 0.4946641034 +3248 0.4946628815 +3249 0.4946605868 +3250 0.4946585602 +3251 0.4946581132 +3252 0.4946569509 +3253 0.4946562058 +3254 0.4946557588 +3255 0.4946553117 +3256 0.4946543283 +3257 0.4946538812 +3258 0.4946532852 +3259 0.4946525401 +3260 0.49465105 +3261 0.4946503646 +3262 0.4946484274 +3263 0.4946476227 +3264 0.4946472949 +3265 0.4946466095 +3266 0.4946460134 +3267 0.494645477 +3268 0.4946438379 +3269 0.494643212 +3270 0.4946424967 +3271 0.4946420795 +3272 0.4946414835 +3273 0.4946408576 +3274 0.4946401722 +3275 0.4946398145 +3276 0.4946391589 +3277 0.4946384138 +3278 0.4946377284 +3279 0.4946374304 +3280 0.4946369833 +3281 0.4946365959 +3282 0.4946342415 +3283 0.4946339137 +3284 0.4946331984 +3285 0.4946320659 +3286 0.4946316785 +3287 0.4946308738 +3288 0.4946301586 +3289 0.4946292347 +3290 0.4946286685 +3291 0.4946278042 +3292 0.4946272976 +3293 0.4946266717 +3294 0.4946255988 +3295 0.4946250028 +3296 0.4946244067 +3297 0.4946238405 +3298 0.4946219928 +3299 0.4946217245 +3300 0.4946212477 +3301 0.4946200854 +3302 0.4946193105 +3303 0.4946189529 +3304 0.4946184165 +3305 0.4946177906 +3306 0.4946173138 +3307 0.4946166581 +3308 0.4946155555 +3309 0.4946146018 +3310 0.4946140355 +3311 0.4946134991 +3312 0.4946129925 +3313 0.494612605 +3314 0.4946117706 +3315 0.4946112043 +3316 0.4946104891 +3317 0.4946098334 +3318 0.4946090883 +3319 0.4946088201 +3320 0.4946084923 +3321 0.4946080453 +3322 0.4946070618 +3323 0.4946065552 +3324 0.4946047968 +3325 0.4946039623 +3326 0.4946032769 +3327 0.4946030087 +3328 0.494602502 +3329 0.4946021444 +3330 0.4946014888 +3331 0.4946007437 +3332 0.4945988662 +3333 0.4945985681 +3334 0.4945981211 +3335 0.4945963926 +3336 0.4945957965 +3337 0.4945953793 +3338 0.4945946044 +3339 0.4945940084 +3340 0.4945935613 +3341 0.4945931441 +3342 0.4945925779 +3343 0.4945919222 +3344 0.4945915348 +3345 0.4945908791 +3346 0.4945901639 +3347 0.4945898659 +3348 0.49458924 +3349 0.4945888824 +3350 0.4945884949 +3351 0.4945881373 +3352 0.4945876009 +3353 0.4945870048 +3354 0.4945866174 +3355 0.4945855147 +3356 0.4945850379 +3357 0.494584412 +3358 0.4945839948 +3359 0.4945828325 +3360 0.4945824153 +3361 0.4945816404 +3362 0.4945810444 +3363 0.4945803887 +3364 0.4945797629 +3365 0.4945791072 +3366 0.4945785112 +3367 0.4945774383 +3368 0.4945767528 +3369 0.4945763058 +3370 0.4945745475 +3371 0.4945734746 +3372 0.4945730573 +3373 0.4945720739 +3374 0.4945715076 +3375 0.4945710308 +3376 0.4945706434 +3377 0.4945700771 +3378 0.4945695705 +3379 0.4945692426 +3380 0.4945684082 +3381 0.4945679611 +3382 0.4945674247 +3383 0.4945663816 +3384 0.4945659346 +3385 0.4945652789 +3386 0.4945644445 +3387 0.4945638484 +3388 0.4945635504 +3389 0.4945631928 +3390 0.4945623881 +3391 0.4945617325 +3392 0.4945614642 +3393 0.4945608682 +3394 0.4945602722 +3395 0.4945595271 +3396 0.4945570535 +3397 0.4945566959 +3398 0.4945564873 +3399 0.4945558316 +3400 0.4945548481 +3401 0.4945540435 +3402 0.4945532686 +3403 0.4945525832 +3404 0.4945521063 +3405 0.4945515997 +3406 0.494551093 +3407 0.4945490069 +3408 0.4945482618 +3409 0.4945479638 +3410 0.4945467419 +3411 0.4945463247 +3412 0.4945456988 +3413 0.4945453412 +3414 0.4945450432 +3415 0.4945432252 +3416 0.4945424504 +3417 0.4945421225 +3418 0.4945413179 +3419 0.494540841 +3420 0.4945385463 +3421 0.4945380396 +3422 0.4945377416 +3423 0.4945372946 +3424 0.4945369071 +3425 0.4945366389 +3426 0.4945360131 +3427 0.4945355362 +3428 0.4945349402 +3429 0.4945342547 +3430 0.4945337779 +3431 0.4945333309 +3432 0.4945329136 +3433 0.4945326156 +3434 0.4945321388 +3435 0.4945315725 +3436 0.4945306188 +3437 0.4945296056 +3438 0.4945291287 +3439 0.494527877 +3440 0.4945273406 +3441 0.4945268339 +3442 0.4945260889 +3443 0.4945253438 +3444 0.4945248968 +3445 0.4945241517 +3446 0.4945233173 +3447 0.4945226616 +3448 0.4945214099 +3449 0.4945199198 +3450 0.4945192642 +3451 0.4945188469 +3452 0.4945181913 +3453 0.4945174462 +3454 0.4945167608 +3455 0.4945163733 +3456 0.4945157773 +3457 0.4945153601 +3458 0.4945148534 +3459 0.4945137507 +3460 0.4945131249 +3461 0.4945127076 +3462 0.4945116348 +3463 0.4945112473 +3464 0.4945102937 +3465 0.4945085353 +3466 0.4945081777 +3467 0.4945076115 +3468 0.4945070452 +3469 0.49450633 +3470 0.4945057637 +3471 0.4945052273 +3472 0.4945046908 +3473 0.4945043332 +3474 0.494503916 +3475 0.4945030517 +3476 0.4945024258 +3477 0.4945022172 +3478 0.4945014126 +3479 0.4945002801 +3480 0.494499088 +3481 0.4944984025 +3482 0.4944981045 +3483 0.4944975085 +3484 0.4944965846 +3485 0.4944955117 +3486 0.4944950051 +3487 0.494493515 +3488 0.4944929785 +3489 0.4944923825 +3490 0.4944905943 +3491 0.4944902367 +3492 0.4944896407 +3493 0.4944892532 +3494 0.4944888658 +3495 0.4944879717 +3496 0.4944856471 +3497 0.4944848127 +3498 0.4944846041 +3499 0.4944841868 +3500 0.4944833226 +3501 0.4944826669 +3502 0.4944820113 +3503 0.4944812662 +3504 0.4944806404 +3505 0.4944801337 +3506 0.4944798953 +3507 0.4944792396 +3508 0.4944785244 +3509 0.4944780774 +3510 0.4944764382 +3511 0.4944762296 +3512 0.4944757528 +3513 0.4944742329 +3514 0.4944738156 +3515 0.4944732196 +3516 0.4944725639 +3517 0.4944722063 +3518 0.4944715506 +3519 0.4944709844 +3520 0.4944706566 +3521 0.4944700307 +3522 0.494468928 +3523 0.4944686598 +3524 0.4944680638 +3525 0.4944675571 +3526 0.4944666929 +3527 0.4944659478 +3528 0.494465471 +3529 0.4944649941 +3530 0.4944645173 +3531 0.4944639809 +3532 0.4944634444 +3533 0.494463057 +3534 0.4944626696 +3535 0.4944621927 +3536 0.4944616861 +3537 0.4944613583 +3538 0.4944609708 +3539 0.4944606132 +3540 0.4944599575 +3541 0.4944590933 +3542 0.4944584078 +3543 0.4944578714 +3544 0.4944573051 +3545 0.4944565005 +3546 0.4944560236 +3547 0.494455517 +3548 0.4944546825 +3549 0.4944537587 +3550 0.4944527156 +3551 0.4944517321 +3552 0.4944509274 +3553 0.4944501824 +3554 0.494449795 +3555 0.494447977 +3556 0.4944475598 +3557 0.4944472618 +3558 0.4944466359 +3559 0.4944458312 +3560 0.494442851 +3561 0.4944426126 +3562 0.4944421358 +3563 0.4944415397 +3564 0.4944395132 +3565 0.4944390065 +3566 0.4944384105 +3567 0.4944373376 +3568 0.4944350726 +3569 0.4944342381 +3570 0.4944335229 +3571 0.4944326288 +3572 0.494432152 +3573 0.4944311089 +3574 0.4944308705 +3575 0.4944289631 +3576 0.4944286055 +3577 0.4944282181 +3578 0.4944275922 +3579 0.4944265789 +3580 0.4944261319 +3581 0.4944258935 +3582 0.4944249398 +3583 0.4944240159 +3584 0.4944230623 +3585 0.4944225258 +3586 0.4944219894 +3587 0.4944215424 +3588 0.4944209463 +3589 0.4944203205 +3590 0.4944198436 +3591 0.4944190092 +3592 0.4944183535 +3593 0.4944169826 +3594 0.494416774 +3595 0.4944162673 +3596 0.4944159097 +3597 0.4944150753 +3598 0.4944146282 +3599 0.4944140918 +3600 0.4944134957 +3601 0.4944128699 +3602 0.494412244 +3603 0.4944117076 +3604 0.4944112606 +3605 0.4944104559 +3606 0.4944102473 +3607 0.4944096512 +3608 0.4944091446 +3609 0.494407267 +3610 0.4944069094 +3611 0.494406522 +3612 0.4944060452 +3613 0.4944055087 +3614 0.494404704 +3615 0.4944042868 +3616 0.4944036908 +3617 0.4944029457 +3618 0.4944020516 +3619 0.4944017238 +3620 0.4944012172 +3621 0.4944001443 +3622 0.4943992502 +3623 0.494398535 +3624 0.4943981177 +3625 0.4943971641 +3626 0.4943968064 +3627 0.4943963892 +3628 0.4943947203 +3629 0.4943945117 +3630 0.4943940348 +3631 0.4943933494 +3632 0.4943929917 +3633 0.4943923063 +3634 0.494391889 +3635 0.4943913824 +3636 0.494390846 +3637 0.4943904585 +3638 0.4943898923 +3639 0.4943885214 +3640 0.494388134 +3641 0.4943874783 +3642 0.494386763 +3643 0.4943849153 +3644 0.4943843193 +3645 0.4943834848 +3646 0.4943823225 +3647 0.4943811602 +3648 0.4943808622 +3649 0.4943804748 +3650 0.4943794615 +3651 0.494378776 +3652 0.4943782992 +3653 0.4943777627 +3654 0.4943768091 +3655 0.4943762428 +3656 0.494375766 +3657 0.4943754084 +3658 0.4943749911 +3659 0.4943745441 +3660 0.4943738586 +3661 0.4943729348 +3662 0.4943722791 +3663 0.4943715341 +3664 0.4943712658 +3665 0.4943708486 +3666 0.4943705506 +3667 0.4943697757 +3668 0.4943692393 +3669 0.494368524 +3670 0.4943680472 +3671 0.4943675704 +3672 0.4943670637 +3673 0.4943663783 +3674 0.4943646199 +3675 0.4943635768 +3676 0.4943629212 +3677 0.4943626232 +3678 0.4943617589 +3679 0.4943612523 +3680 0.494360686 +3681 0.4943603582 +3682 0.4943587787 +3683 0.4943579442 +3684 0.4943560369 +3685 0.4943556196 +3686 0.4943547256 +3687 0.4943545169 +3688 0.4943537123 +3689 0.4943533547 +3690 0.4943530566 +3691 0.4943526692 +3692 0.4943524904 +3693 0.4943520135 +3694 0.4943515069 +3695 0.494350285 +3696 0.4943498082 +3697 0.4943493015 +3698 0.4943487353 +3699 0.4943481988 +3700 0.4943479306 +3701 0.4943474836 +3702 0.4943469173 +3703 0.494345457 +3704 0.4943450398 +3705 0.494343043 +3706 0.4943425662 +3707 0.4943421192 +3708 0.4943415529 +3709 0.4943409271 +3710 0.4943405099 +3711 0.494339735 +3712 0.4943390197 +3713 0.4943385727 +3714 0.4943381257 +3715 0.4943374104 +3716 0.4943369634 +3717 0.4943363673 +3718 0.4943361587 +3719 0.4943354733 +3720 0.4943351156 +3721 0.4943346984 +3722 0.49433446 +3723 0.4943340129 +3724 0.4943335063 +3725 0.4943325824 +3726 0.4943320758 +3727 0.4943313903 +3728 0.4943309731 +3729 0.4943304069 +3730 0.4943297214 +3731 0.4943290956 +3732 0.4943284399 +3733 0.4943279035 +3734 0.4943272478 +3735 0.4943262941 +3736 0.4943254299 +3737 0.4943251319 +3738 0.494324506 +3739 0.4943238504 +3740 0.4943233139 +3741 0.4943225987 +3742 0.4943215854 +3743 0.4943206913 +3744 0.4943202145 +3745 0.4943197972 +3746 0.494318933 +3747 0.4943183369 +3748 0.4943178303 +3749 0.4943174131 +3750 0.4943169362 +3751 0.4943165488 +3752 0.4943158931 +3753 0.4943155653 +3754 0.4943144626 +3755 0.494314254 +3756 0.494313807 +3757 0.4943132705 +3758 0.4943130321 +3759 0.4943124957 +3760 0.4943115122 +3761 0.4943111546 +3762 0.4943107075 +3763 0.4943099029 +3764 0.494309426 +3765 0.4943090982 +3766 0.4943082637 +3767 0.4943071909 +3768 0.4943070716 +3769 0.4943064756 +3770 0.4943057901 +3771 0.4943054921 +3772 0.4943034358 +3773 0.4943029887 +3774 0.4943023927 +3775 0.4943017668 +3776 0.4943014688 +3777 0.4943004853 +3778 0.4942997105 +3779 0.4942989654 +3780 0.4942977733 +3781 0.4942973561 +3782 0.4942968197 +3783 0.4942964024 +3784 0.494295568 +3785 0.4942951507 +3786 0.4942940778 +3787 0.4942935712 +3788 0.4942927069 +3789 0.4942922003 +3790 0.4942900545 +3791 0.4942896969 +3792 0.4942887134 +3793 0.494288326 +3794 0.4942878194 +3795 0.494285763 +3796 0.4942851967 +3797 0.4942847795 +3798 0.4942838854 +3799 0.4942833788 +3800 0.494283051 +3801 0.4942828126 +3802 0.4942821271 +3803 0.4942813522 +3804 0.4942808158 +3805 0.4942802794 +3806 0.4942799217 +3807 0.4942795641 +3808 0.4942787296 +3809 0.4942782826 +3810 0.4942775972 +3811 0.4942772693 +3812 0.4942767925 +3813 0.4942760176 +3814 0.4942754514 +3815 0.4942749447 +3816 0.4942746467 +3817 0.4942743487 +3818 0.4942736334 +3819 0.4942731566 +3820 0.4942728586 +3821 0.4942715175 +3822 0.4942711301 +3823 0.4942702956 +3824 0.4942698784 +3825 0.4942692823 +3826 0.4942686565 +3827 0.4942679412 +3828 0.494267673 +3829 0.4942670471 +3830 0.4942666597 +3831 0.4942652888 +3832 0.4942647524 +3833 0.4942641861 +3834 0.4942637093 +3835 0.4942633218 +3836 0.4942627854 +3837 0.4942623682 +3838 0.4942621 +3839 0.4942615933 +3840 0.4942612357 +3841 0.4942609079 +3842 0.4942603416 +3843 0.4942595668 +3844 0.4942592985 +3845 0.4942590303 +3846 0.4942585833 +3847 0.494258166 +3848 0.4942573912 +3849 0.4942567355 +3850 0.4942558415 +3851 0.4942550368 +3852 0.4942537553 +3853 0.4942536361 +3854 0.4942532189 +3855 0.4942526228 +3856 0.4942522354 +3857 0.4942514009 +3858 0.4942508347 +3859 0.4942499108 +3860 0.4942495234 +3861 0.4942485995 +3862 0.4942480929 +3863 0.4942474372 +3864 0.494246722 +3865 0.4942462451 +3866 0.4942457087 +3867 0.4942441292 +3868 0.4942437715 +3869 0.4942432649 +3870 0.4942424304 +3871 0.494242192 +3872 0.4942416854 +3873 0.4942404933 +3874 0.494239927 +3875 0.4942393608 +3876 0.4942389435 +3877 0.4942383475 +3878 0.4942381091 +3879 0.4942375428 +3880 0.4942369766 +3881 0.4942365594 +3882 0.4942361421 +3883 0.4942355461 +3884 0.49423495 +3885 0.4942342944 +3886 0.494234056 +3887 0.4942337579 +3888 0.494232387 +3889 0.49423194 +3890 0.4942314036 +3891 0.4942308671 +3892 0.4942303307 +3893 0.4942286319 +3894 0.4942272908 +3895 0.494226963 +3896 0.4942265458 +3897 0.4942253537 +3898 0.4942247278 +3899 0.4942244 +3900 0.4942238338 +3901 0.4942233867 +3902 0.4942221052 +3903 0.4942218072 +3904 0.4942214496 +3905 0.4942208535 +3906 0.4942202873 +3907 0.4942198403 +3908 0.494219423 +3909 0.4942188866 +3910 0.4942180521 +3911 0.4942178137 +3912 0.4942172773 +3913 0.4942168302 +3914 0.494216264 +3915 0.4942160256 +3916 0.4942154295 +3917 0.4942151017 +3918 0.4942143268 +3919 0.4942138798 +3920 0.4942130453 +3921 0.4942127473 +3922 0.4942121811 +3923 0.4942117638 +3924 0.4942111976 +3925 0.4942104227 +3926 0.4942099757 +3927 0.4942095585 +3928 0.494209022 +3929 0.4942086644 +3930 0.4942080087 +3931 0.4942076809 +3932 0.4942070253 +3933 0.4942067868 +3934 0.4942060418 +3935 0.4942044623 +3936 0.4942035384 +3937 0.4942033298 +3938 0.4942024357 +3939 0.4942018993 +3940 0.4942009456 +3941 0.4942004092 +3942 0.4941997237 +3943 0.4941989786 +3944 0.4941983826 +3945 0.4941979952 +3946 0.4941974289 +3947 0.4941973097 +3948 0.4941966243 +3949 0.494196207 +3950 0.494195909 +3951 0.4941954322 +3952 0.4941947765 +3953 0.4941942997 +3954 0.4941934056 +3955 0.4941927202 +3956 0.4941924221 +3957 0.4941920943 +3958 0.4941916771 +3959 0.494190634 +3960 0.4941902466 +3961 0.4941895015 +3962 0.4941890247 +3963 0.4941884882 +3964 0.4941868193 +3965 0.4941863723 +3966 0.4941860742 +3967 0.4941857762 +3968 0.4941852398 +3969 0.494183541 +3970 0.4941828556 +3971 0.4941821701 +3972 0.4941814251 +3973 0.4941813357 +3974 0.4941810078 +3975 0.4941803224 +3976 0.4941791005 +3977 0.4941785939 +3978 0.4941780872 +3979 0.4941776104 +3980 0.4941769249 +3981 0.4941757626 +3982 0.494175256 +3983 0.4941748686 +3984 0.4941745109 +3985 0.4941726036 +3986 0.4941722758 +3987 0.4941720075 +3988 0.4941714115 +3989 0.4941710539 +3990 0.4941704578 +3991 0.4941686995 +3992 0.4941683717 +3993 0.494167567 +3994 0.4941673286 +3995 0.4941668815 +3996 0.4941667325 +3997 0.4941661961 +3998 0.494165153 +3999 0.4941645868 +4000 0.4941643781 +4001 0.4941637523 +4002 0.4941624708 +4003 0.4941622324 +4004 0.4941618151 +4005 0.4941610701 +4006 0.4941606529 +4007 0.4941602058 +4008 0.4941596396 +4009 0.4941591925 +4010 0.4941589541 +4011 0.4941586263 +4012 0.4941582091 +4013 0.4941569574 +4014 0.4941563017 +4015 0.4941560633 +4016 0.4941557057 +4017 0.4941552586 +4018 0.4941548116 +4019 0.494154305 +4020 0.4941531427 +4021 0.4941527254 +4022 0.49415204 +4023 0.4941516824 +4024 0.4941508181 +4025 0.4941499538 +4026 0.4941494472 +4027 0.4941485531 +4028 0.4941481955 +4029 0.4941478975 +4030 0.4941475994 +4031 0.4941466756 +4032 0.4941461689 +4033 0.4941458113 +4034 0.4941452749 +4035 0.4941444404 +4036 0.4941440828 +4037 0.4941430695 +4038 0.4941424138 +4039 0.494141788 +4040 0.4941411323 +4041 0.4941405363 +4042 0.4941399402 +4043 0.4941394634 +4044 0.494138927 +4045 0.4941386587 +4046 0.4941381819 +4047 0.4941374667 +4048 0.4941371388 +4049 0.4941364832 +4050 0.4941361554 +4051 0.4941353805 +4052 0.4941347546 +4053 0.4941341884 +4054 0.4941336818 +4055 0.4941330559 +4056 0.4941326685 +4057 0.4941314466 +4058 0.4941311188 +4059 0.4941305525 +4060 0.4941299267 +4061 0.4941295988 +4062 0.4941289134 +4063 0.4941285558 +4064 0.4941271551 +4065 0.4941262908 +4066 0.4941255457 +4067 0.4941249497 +4068 0.4941245026 +4069 0.4941241152 +4070 0.494123847 +4071 0.4941234596 +4072 0.4941225059 +4073 0.4941222377 +4074 0.49412188 +4075 0.4941214926 +4076 0.4941204197 +4077 0.4941200621 +4078 0.494119317 +4079 0.494118572 +4080 0.4941181548 +4081 0.4941177673 +4082 0.4941165752 +4083 0.494116158 +4084 0.4941152341 +4085 0.4941139228 +4086 0.4941136844 +4087 0.4941130884 +4088 0.4941127605 +4089 0.4941122539 +4090 0.4941118069 +4091 0.4941106744 +4092 0.4941099889 +4093 0.4941096909 +4094 0.4941090054 +4095 0.4941083498 +4096 0.4941076643 +4097 0.4941075153 +4098 0.4941069491 +4099 0.4941065915 +4100 0.494106204 +4101 0.4941056974 +4102 0.4941048927 +4103 0.4941045053 +4104 0.4941040881 +4105 0.4941036708 +4106 0.4941031046 +4107 0.4941028066 +4108 0.4941023595 +4109 0.4941021509 +4110 0.4941015251 +4111 0.4941005118 +4112 0.4941002436 +4113 0.4940993495 +4114 0.4940989621 +4115 0.4940981574 +4116 0.4940978296 +4117 0.4940974719 +4118 0.4940969057 +4119 0.4940964587 +4120 0.494095803 +4121 0.4940954156 +4122 0.4940949089 +4123 0.4940944917 +4124 0.4940939255 +4125 0.4940937467 +4126 0.4940930016 +4127 0.4940927632 +4128 0.4940914519 +4129 0.494090975 +4130 0.4940907068 +4131 0.49409023 +4132 0.4940897829 +4133 0.4940879054 +4134 0.4940874286 +4135 0.4940871305 +4136 0.4940866537 +4137 0.4940862663 +4138 0.494085998 +4139 0.4940854318 +4140 0.4940848954 +4141 0.4940844185 +4142 0.4940840609 +4143 0.4940835543 +4144 0.4940833158 +4145 0.494082988 +4146 0.4940824516 +4147 0.4940820641 +4148 0.4940815575 +4149 0.4940812297 +4150 0.4940798886 +4151 0.4940796502 +4152 0.4940794117 +4153 0.4940787561 +4154 0.4940783389 +4155 0.4940777726 +4156 0.4940765507 +4157 0.4940763719 +4158 0.4940756566 +4159 0.4940751202 +4160 0.4940746732 +4161 0.4940741963 +4162 0.4940737195 +4163 0.4940734811 +4164 0.4940726466 +4165 0.4940721996 +4166 0.4940713353 +4167 0.4940707989 +4168 0.494070322 +4169 0.4940689809 +4170 0.4940683253 +4171 0.4940675206 +4172 0.4940668948 +4173 0.4940665967 +4174 0.4940661795 +4175 0.4940651066 +4176 0.494064898 +4177 0.4940639443 +4178 0.4940636761 +4179 0.4940633483 +4180 0.4940629311 +4181 0.4940627224 +4182 0.4940622754 +4183 0.4940615601 +4184 0.4940612621 +4185 0.4940606065 +4186 0.4940600998 +4187 0.4940595336 +4188 0.4940592356 +4189 0.4940579243 +4190 0.4940574474 +4191 0.4940570004 +4192 0.4940567024 +4193 0.4940561659 +4194 0.4940552123 +4195 0.4940544076 +4196 0.4940532155 +4197 0.4940527089 +4198 0.4940521724 +4199 0.4940517254 +4200 0.4940509803 +4201 0.4940504439 +4202 0.4940502055 +4203 0.4940499372 +4204 0.494048775 +4205 0.4940479107 +4206 0.4940476723 +4207 0.4940467782 +4208 0.4940463908 +4209 0.4940460033 +4210 0.4940454669 +4211 0.4940451093 +4212 0.4940448708 +4213 0.4940440066 +4214 0.4940435595 +4215 0.4940429039 +4216 0.4940425463 +4217 0.494042129 +4218 0.4940413244 +4219 0.4940410562 +4220 0.4940408773 +4221 0.4940399237 +4222 0.494039566 +4223 0.4940390892 +4224 0.4940388508 +4225 0.4940385826 +4226 0.4940381951 +4227 0.4940378375 +4228 0.4940375693 +4229 0.4940372117 +4230 0.4940366752 +4231 0.4940362878 +4232 0.4940358705 +4233 0.4940354235 +4234 0.4940347679 +4235 0.49403444 +4236 0.4940339334 +4237 0.4940337546 +4238 0.4940329797 +4239 0.4940325029 +4240 0.4940316684 +4241 0.49403143 +4242 0.494031132 +4243 0.4940308936 +4244 0.4940299399 +4245 0.4940296419 +4246 0.4940291054 +4247 0.4940288074 +4248 0.4940285094 +4249 0.4940281815 +4250 0.4940274067 +4251 0.4940263636 +4252 0.4940260656 +4253 0.494025857 +4254 0.4940254099 +4255 0.4940248139 +4256 0.4940245457 +4257 0.4940242774 +4258 0.4940236814 +4259 0.4940229065 +4260 0.4940225489 +4261 0.4940223999 +4262 0.4940222509 +4263 0.4940217144 +4264 0.494021178 +4265 0.4940209396 +4266 0.4940201945 +4267 0.4940195389 +4268 0.4940188236 +4269 0.4940182872 +4270 0.4940179594 +4271 0.4940174825 +4272 0.4940169461 +4273 0.4940166481 +4274 0.4940162308 +4275 0.4940161116 +4276 0.494015456 +4277 0.4940150089 +4278 0.4940142043 +4279 0.4940139658 +4280 0.4940135784 +4281 0.4940132804 +4282 0.4940127141 +4283 0.494011224 +4284 0.4940106876 +4285 0.49401033 +4286 0.4940096743 +4287 0.4940092869 +4288 0.4940086014 +4289 0.494007916 +4290 0.4940074689 +4291 0.4940071411 +4292 0.4940067239 +4293 0.4940063364 +4294 0.4940057702 +4295 0.4940054722 +4296 0.494005055 +4297 0.4940046079 +4298 0.4940042801 +4299 0.4940041013 +4300 0.4940032966 +4301 0.494002641 +4302 0.4940024025 +4303 0.4940020747 +4304 0.4940016575 +4305 0.4940013595 +4306 0.494000823 +4307 0.4940004058 +4308 0.4940001376 +4309 0.4939998395 +4310 0.4939993925 +4311 0.4939990945 +4312 0.4939987667 +4313 0.4939982004 +4314 0.4939971275 +4315 0.4939965613 +4316 0.4939958758 +4317 0.4939955182 +4318 0.4939950712 +4319 0.4939947732 +4320 0.4939940877 +4321 0.4939917035 +4322 0.4939908392 +4323 0.4939904518 +4324 0.4939899452 +4325 0.4939892299 +4326 0.4939889915 +4327 0.4939886339 +4328 0.493988008 +4329 0.4939876802 +4330 0.4939874716 +4331 0.4939865775 +4332 0.4939863391 +4333 0.4939859219 +4334 0.4939855046 +4335 0.4939848788 +4336 0.4939845808 +4337 0.4939839847 +4338 0.4939830608 +4339 0.4939824052 +4340 0.493982137 +4341 0.4939812131 +4342 0.4939806469 +4343 0.4939800806 +4344 0.493979723 +4345 0.4939790077 +4346 0.4939783521 +4347 0.4939777262 +4348 0.4939772494 +4349 0.4939761169 +4350 0.4939758189 +4351 0.493975491 +4352 0.4939751334 +4353 0.4939749546 +4354 0.4939744182 +4355 0.4939741797 +4356 0.4939737029 +4357 0.4939734049 +4358 0.4939731963 +4359 0.4939724214 +4360 0.4939716764 +4361 0.4939708717 +4362 0.4939703651 +4363 0.493970067 +4364 0.493969471 +4365 0.4939688451 +4366 0.4939681001 +4367 0.4939675338 +4368 0.4939670272 +4369 0.4939667888 +4370 0.4939662821 +4371 0.4939658947 +4372 0.4939652092 +4373 0.493964941 +4374 0.4939643748 +4375 0.4939637787 +4376 0.4939630039 +4377 0.4939628847 +4378 0.4939624972 +4379 0.4939621098 +4380 0.4939616032 +4381 0.4939613051 +4382 0.4939606197 +4383 0.4939602025 +4384 0.4939600236 +4385 0.4939594872 +4386 0.4939592786 +4387 0.4939586825 +4388 0.4939581461 +4389 0.4939578779 +4390 0.4939572222 +4391 0.4939568944 +4392 0.4939564176 +4393 0.4939559109 +4394 0.4939551063 +4395 0.4939544208 +4396 0.4939539142 +4397 0.4939534969 +4398 0.4939529903 +4399 0.4939526029 +4400 0.4939520962 +4401 0.4939516492 +4402 0.4939511426 +4403 0.4939507253 +4404 0.4939502187 +4405 0.4939498313 +4406 0.4939493842 +4407 0.4939489074 +4408 0.4939485498 +4409 0.4939483113 +4410 0.4939478643 +4411 0.4939472981 +4412 0.493947 +4413 0.4939468808 +4414 0.4939450927 +4415 0.4939447947 +4416 0.4939441688 +4417 0.4939440496 +4418 0.4939434238 +4419 0.4939430661 +4420 0.4939424999 +4421 0.4939416952 +4422 0.4939413078 +4423 0.493940831 +4424 0.4939402647 +4425 0.4939397581 +4426 0.4939395197 +4427 0.4939389832 +4428 0.4939382978 +4429 0.4939378209 +4430 0.4939374335 +4431 0.4939372547 +4432 0.4939371057 +4433 0.4939365394 +4434 0.4939360924 +4435 0.4939356155 +4436 0.4939351983 +4437 0.4939344235 +4438 0.4939339764 +4439 0.49393344 +4440 0.4939330525 +4441 0.4939327247 +4442 0.4939323075 +4443 0.4939318009 +4444 0.4939310856 +4445 0.4939306386 +4446 0.4939300127 +4447 0.4939294465 +4448 0.4939289398 +4449 0.4939286716 +4450 0.4939281352 +4451 0.4939275093 +4452 0.4939271815 +4453 0.4939268239 +4454 0.4939264066 +4455 0.4939254232 +4456 0.4939249761 +4457 0.4939240224 +4458 0.4939236052 +4459 0.4939231582 +4460 0.4939222641 +4461 0.4939218469 +4462 0.493921072 +4463 0.4939207442 +4464 0.4939201779 +4465 0.4939198501 +4466 0.4939194329 +4467 0.4939191349 +4468 0.4939188964 +4469 0.493918658 +4470 0.4939171977 +4471 0.4939164229 +4472 0.493916095 +4473 0.4939158268 +4474 0.4939153798 +4475 0.4939150519 +4476 0.4939142473 +4477 0.493913681 +4478 0.493913383 +4479 0.4939130254 +4480 0.4939124293 +4481 0.4939122803 +4482 0.4939120419 +4483 0.4939116247 +4484 0.4939114161 +4485 0.4939107306 +4486 0.4939102836 +4487 0.4939100452 +4488 0.4939094491 +4489 0.4939091511 +4490 0.4939087041 +4491 0.493908257 +4492 0.4939078398 +4493 0.4939077206 +4494 0.4939070649 +4495 0.4939066477 +4496 0.4939059026 +4497 0.4939054556 +4498 0.4939050086 +4499 0.4939045317 +4500 0.4939041443 +4501 0.4939035483 +4502 0.4939030714 +4503 0.4939025648 +4504 0.4939022071 +4505 0.4939019687 +4506 0.4939017303 +4507 0.4939014323 +4508 0.4939009555 +4509 0.493900717 +4510 0.4939001508 +4511 0.4938997634 +4512 0.4938992865 +4513 0.4938990183 +4514 0.493898005 +4515 0.4938973494 +4516 0.4938958295 +4517 0.4938952036 +4518 0.4938943393 +4519 0.4938937731 +4520 0.4938934155 +4521 0.4938927002 +4522 0.4938925214 +4523 0.4938920744 +4524 0.4938916571 +4525 0.4938912995 +4526 0.4938909717 +4527 0.4938907333 +4528 0.4938902862 +4529 0.4938900776 +4530 0.4938892729 +4531 0.4938886769 +4532 0.4938882895 +4533 0.4938879914 +4534 0.493887604 +4535 0.4938873656 +4536 0.4938869782 +4537 0.4938863523 +4538 0.4938857861 +4539 0.4938855178 +4540 0.4938850112 +4541 0.4938841469 +4542 0.4938839383 +4543 0.4938835509 +4544 0.493882627 +4545 0.4938820608 +4546 0.4938818224 +4547 0.4938815243 +4548 0.4938803919 +4549 0.4938798852 +4550 0.4938795574 +4551 0.4938791104 +4552 0.4938789017 +4553 0.4938783057 +4554 0.4938780375 +4555 0.4938776202 +4556 0.493877054 +4557 0.4938768156 +4558 0.4938762791 +4559 0.4938760407 +4560 0.4938755341 +4561 0.4938749976 +4562 0.493874789 +4563 0.4938745506 +4564 0.493874193 +4565 0.4938738353 +4566 0.4938730605 +4567 0.4938724942 +4568 0.4938718088 +4569 0.4938715704 +4570 0.4938709743 +4571 0.4938703187 +4572 0.4938700802 +4573 0.4938694842 +4574 0.4938691862 +4575 0.4938682325 +4576 0.4938676067 +4577 0.4938668318 +4578 0.493866355 +4579 0.4938654311 +4580 0.4938646562 +4581 0.4938642688 +4582 0.4938637324 +4583 0.4938631661 +4584 0.4938628383 +4585 0.4938622124 +4586 0.493861974 +4587 0.493861676 +4588 0.4938614078 +4589 0.4938608713 +4590 0.4938605733 +4591 0.4938599475 +4592 0.4938594706 +4593 0.4938589938 +4594 0.4938585169 +4595 0.4938580401 +4596 0.4938578017 +4597 0.4938573547 +4598 0.4938567884 +4599 0.4938563116 +4600 0.4938560136 +4601 0.4938548215 +4602 0.4938546426 +4603 0.4938542552 +4604 0.4938538082 +4605 0.4938535102 +4606 0.4938532121 +4607 0.4938526459 +4608 0.4938523181 +4609 0.4938513942 +4610 0.4938508876 +4611 0.4938502319 +4612 0.4938497849 +4613 0.4938495465 +4614 0.4938490994 +4615 0.4938486226 +4616 0.4938484736 +4617 0.4938479073 +4618 0.4938477285 +4619 0.4938469536 +4620 0.4938465364 +4621 0.4938458808 +4622 0.4938454933 +4623 0.4938449867 +4624 0.4938445099 +4625 0.4938435264 +4626 0.4938431986 +4627 0.4938426621 +4628 0.4938420065 +4629 0.49384147 +4630 0.4938410826 +4631 0.4938409336 +4632 0.4938403375 +4633 0.4938399203 +4634 0.4938395627 +4635 0.4938391454 +4636 0.4938389368 +4637 0.4938385494 +4638 0.4938376553 +4639 0.4938373871 +4640 0.4938369103 +4641 0.4938365228 +4642 0.4938361056 +4643 0.4938357778 +4644 0.4938350327 +4645 0.4938346751 +4646 0.493834079 +4647 0.4938337512 +4648 0.4938336618 +4649 0.4938327379 +4650 0.4938325591 +4651 0.4938321121 +4652 0.4938318141 +4653 0.4938314266 +4654 0.4938310392 +4655 0.4938302942 +4656 0.4938299365 +4657 0.4938298173 +4658 0.4938295789 +4659 0.4938290425 +4660 0.493828357 +4661 0.4938281782 +4662 0.4938274629 +4663 0.4938264199 +4664 0.4938257344 +4665 0.4938251682 +4666 0.4938248105 +4667 0.4938244827 +4668 0.493823827 +4669 0.493823529 +4670 0.493822933 +4671 0.4938226052 +4672 0.4938222475 +4673 0.4938220389 +4674 0.4938216217 +4675 0.4938211448 +4676 0.4938209362 +4677 0.493820519 +4678 0.493820221 +4679 0.4938196547 +4680 0.4938193269 +4681 0.4938190289 +4682 0.4938185222 +4683 0.4938179262 +4684 0.4938175388 +4685 0.4938165851 +4686 0.4938161082 +4687 0.4938156016 +4688 0.4938151844 +4689 0.4938147671 +4690 0.4938142903 +4691 0.4938136347 +4692 0.493813128 +4693 0.4938125618 +4694 0.493812383 +4695 0.4938120849 +4696 0.4938119359 +4697 0.4938113399 +4698 0.4938109524 +4699 0.4938105054 +4700 0.4938100584 +4701 0.4938097306 +4702 0.4938093133 +4703 0.4938084193 +4704 0.4938080616 +4705 0.4938076444 +4706 0.4938069589 +4707 0.4938065715 +4708 0.4938060351 +4709 0.4938055284 +4710 0.4938052304 +4711 0.4938047834 +4712 0.4938043363 +4713 0.4938038595 +4714 0.4938033827 +4715 0.4938026078 +4716 0.49380228 +4717 0.4938019521 +4718 0.4938007899 +4719 0.4938006408 +4720 0.4938003726 +4721 0.4937999852 +4722 0.4937997766 +4723 0.4937993891 +4724 0.4937989421 +4725 0.4937984057 +4726 0.4937983759 +4727 0.4937979288 +4728 0.4937972434 +4729 0.4937969752 +4730 0.4937965877 +4731 0.4937962599 +4732 0.4937957831 +4733 0.4937955446 +4734 0.4937949784 +4735 0.4937941141 +4736 0.4937939949 +4737 0.4937936671 +4738 0.4937931307 +4739 0.4937930115 +4740 0.4937927432 +4741 0.493792475 +4742 0.4937919684 +4743 0.4937917896 +4744 0.4937908657 +4745 0.4937904783 +4746 0.4937895544 +4747 0.4937891073 +4748 0.4937883325 +4749 0.4937879153 +4750 0.4937874086 +4751 0.4937870212 +4752 0.4937863059 +4753 0.4937858589 +4754 0.4937853523 +4755 0.4937850542 +4756 0.4937848456 +4757 0.4937843092 +4758 0.493784041 +4759 0.4937833555 +4760 0.4937828489 +4761 0.4937824912 +4762 0.4937820442 +4763 0.493781776 +4764 0.4937812693 +4765 0.4937808223 +4766 0.4937801667 +4767 0.4937793918 +4768 0.4937789746 +4769 0.4937785871 +4770 0.4937779613 +4771 0.4937776335 +4772 0.49377665 +4773 0.4937764414 +4774 0.4937757559 +4775 0.4937754877 +4776 0.4937753089 +4777 0.4937751301 +4778 0.4937747128 +4779 0.4937739678 +4780 0.4937730141 +4781 0.4937726267 +4782 0.4937722392 +4783 0.4937715836 +4784 0.4937711067 +4785 0.4937707491 +4786 0.4937703915 +4787 0.4937698849 +4788 0.4937694676 +4789 0.4937691398 +4790 0.4937685437 +4791 0.4937678583 +4792 0.4937675603 +4793 0.4937671728 +4794 0.4937668152 +4795 0.493766547 +4796 0.4937662788 +4797 0.4937659509 +4798 0.4937653251 +4799 0.4937649973 +4800 0.4937647589 +4801 0.4937641032 +4802 0.493763984 +4803 0.493763686 +4804 0.4937631793 +4805 0.4937628813 +4806 0.4937623449 +4807 0.4937620468 +4808 0.4937616892 +4809 0.4937612124 +4810 0.4937606759 +4811 0.4937601693 +4812 0.4937597819 +4813 0.4937594242 +4814 0.4937592752 +4815 0.4937579341 +4816 0.4937572189 +4817 0.4937566824 +4818 0.4937556989 +4819 0.4937550135 +4820 0.4937547453 +4821 0.4937544473 +4822 0.493753881 +4823 0.4937535234 +4824 0.4937531359 +4825 0.4937529869 +4826 0.4937524505 +4827 0.4937522121 +4828 0.4937518843 +4829 0.493751467 +4830 0.4937510498 +4831 0.4937505729 +4832 0.4937499769 +4833 0.4937497385 +4834 0.4937492616 +4835 0.4937489636 +4836 0.4937482484 +4837 0.4937478013 +4838 0.4937469669 +4839 0.4937464602 +4840 0.4937459834 +4841 0.4937456854 +4842 0.4937451191 +4843 0.4937448807 +4844 0.4937442847 +4845 0.4937440462 +4846 0.4937434204 +4847 0.4937428243 +4848 0.4937423773 +4849 0.4937422581 +4850 0.4937418409 +4851 0.4937411852 +4852 0.4937407084 +4853 0.4937403508 +4854 0.4937398739 +4855 0.4937390693 +4856 0.4937389202 +4857 0.4937384732 +4858 0.4937382646 +4859 0.4937381156 +4860 0.4937378176 +4861 0.4937371619 +4862 0.4937368937 +4863 0.4937365361 +4864 0.4937362678 +4865 0.4937358804 +4866 0.4937350757 +4867 0.4937346883 +4868 0.4937340923 +4869 0.4937331684 +4870 0.4937326916 +4871 0.4937324829 +4872 0.4937320061 +4873 0.4937317677 +4874 0.493731261 +4875 0.4937310226 +4876 0.493730516 +4877 0.4937303074 +4878 0.4937301286 +4879 0.4937298603 +4880 0.4937292345 +4881 0.4937290259 +4882 0.4937280722 +4883 0.4937279828 +4884 0.4937277742 +4885 0.4937273569 +4886 0.4937269397 +4887 0.4937266119 +4888 0.4937262841 +4889 0.493726135 +4890 0.4937257774 +4891 0.49372539 +4892 0.4937250324 +4893 0.4937246449 +4894 0.4937238701 +4895 0.493723572 +4896 0.4937222309 +4897 0.4937214263 +4898 0.4937210389 +4899 0.4937206812 +4900 0.4937199362 +4901 0.4937196679 +4902 0.4937193997 +4903 0.4937188335 +4904 0.4937184759 +4905 0.4937176414 +4906 0.4937173732 +4907 0.4937172242 +4908 0.4937166281 +4909 0.4937163301 +4910 0.4937161811 +4911 0.4937158532 +4912 0.4937151976 +4913 0.4937149592 +4914 0.4937145419 +4915 0.4937142737 +4916 0.4937137671 +4917 0.4937134393 +4918 0.4937130816 +4919 0.493712575 +4920 0.4937119491 +4921 0.4937117107 +4922 0.4937114723 +4923 0.4937106676 +4924 0.4937104888 +4925 0.4937098928 +4926 0.4937097438 +4927 0.4937095054 +4928 0.4937093861 +4929 0.4937088497 +4930 0.4937085219 +4931 0.4937083729 +4932 0.493708045 +4933 0.4937076278 +4934 0.4937073 +4935 0.4937067933 +4936 0.4937063165 +4937 0.4937059589 +4938 0.4937057503 +4939 0.4937049754 +4940 0.4937041409 +4941 0.4937035449 +4942 0.4937032767 +4943 0.493702919 +4944 0.4937025912 +4945 0.4937022932 +4946 0.4937013693 +4947 0.4937010415 +4948 0.4937006243 +4949 0.493700356 +4950 0.493699909 +4951 0.4936994024 +4952 0.4936991938 +4953 0.4936983295 +4954 0.4936978228 +4955 0.493697346 +4956 0.4936966904 +4957 0.4936964519 +4958 0.4936960347 +4959 0.4936956771 +4960 0.4936952598 +4961 0.4936948128 +4962 0.4936944552 +4963 0.4936942466 +4964 0.4936937101 +4965 0.4936931737 +4966 0.4936927565 +4967 0.493692518 +4968 0.4936917134 +4969 0.4936915048 +4970 0.4936913259 +4971 0.4936911173 +4972 0.4936905213 +4973 0.4936902531 +4974 0.4936897166 +4975 0.4936891206 +4976 0.4936887331 +4977 0.4936881669 +4978 0.4936880179 +4979 0.4936878093 +4980 0.493687541 +4981 0.4936870344 +4982 0.493686796 +4983 0.4936864384 +4984 0.4936858721 +4985 0.4936853059 +4986 0.4936848886 +4987 0.4936845012 +4988 0.4936839946 +4989 0.4936836071 +4990 0.4936832197 +4991 0.4936830409 +4992 0.4936827429 +4993 0.4936824448 +4994 0.493682117 +4995 0.4936818488 +4996 0.4936816402 +4997 0.4936811037 +4998 0.4936809547 +4999 0.4936805375 diff --git a/code/train/catboost_info/time_left.tsv b/code/train/catboost_info/time_left.tsv new file mode 100644 index 0000000..5dda383 --- /dev/null +++ b/code/train/catboost_info/time_left.tsv @@ -0,0 +1,5001 @@ +iter Passed Remaining +0 9 45220 +1 17 43153 +2 37 62494 +3 47 59835 +4 56 56341 +5 66 55407 +6 77 55547 +7 88 55510 +8 102 56674 +9 110 55034 +10 118 53884 +11 130 54310 +12 140 53850 +13 153 54725 +14 160 53377 +15 168 52518 +16 181 53270 +17 192 53339 +18 201 52706 +19 213 53205 +20 225 53574 +21 239 54273 +22 249 53984 +23 264 54829 +24 275 54893 +25 288 55240 +26 305 56255 +27 316 56229 +28 326 55955 +29 337 55959 +30 348 55833 +31 359 55834 +32 371 55876 +33 380 55585 +34 393 55787 +35 409 56406 +36 418 56133 +37 428 55945 +38 437 55651 +39 449 55767 +40 458 55457 +41 483 57055 +42 507 58517 +43 517 58327 +44 539 59363 +45 555 59833 +46 565 59622 +47 578 59722 +48 591 59765 +49 606 60008 +50 619 60133 +51 629 59920 +52 655 61202 +53 671 61476 +54 681 61262 +55 704 62198 +56 719 62378 +57 735 62698 +58 755 63286 +59 770 63437 +60 781 63241 +61 802 63885 +62 814 63801 +63 828 63892 +64 865 65681 +65 878 65651 +66 893 65805 +67 911 66109 +68 924 66047 +69 941 66319 +70 958 66510 +71 972 66538 +72 987 66653 +73 1000 66608 +74 1020 66996 +75 1037 67207 +76 1072 68543 +77 1083 68370 +78 1095 68239 +79 1104 67929 +80 1117 67892 +81 1137 68247 +82 1152 68267 +83 1164 68171 +84 1178 68133 +85 1193 68187 +86 1216 68677 +87 1248 69680 +88 1262 69639 +89 1279 69815 +90 1288 69504 +91 1298 69282 +92 1313 69307 +93 1335 69676 +94 1351 69782 +95 1377 70382 +96 1405 71036 +97 1416 70848 +98 1430 70811 +99 1448 70984 +100 1477 71648 +101 1487 71432 +102 1504 71538 +103 1515 71342 +104 1535 71577 +105 1549 71533 +106 1560 71352 +107 1583 71708 +108 1599 71769 +109 1616 71845 +110 1631 71866 +111 1650 72049 +112 1663 71948 +113 1675 71828 +114 1697 72117 +115 1716 72259 +116 1728 72144 +117 1745 72213 +118 1755 72009 +119 1772 72073 +120 1793 72314 +121 1806 72219 +122 1833 72712 +123 1850 72752 +124 1870 72935 +125 1901 73548 +126 1916 73540 +127 1931 73528 +128 1946 73507 +129 1972 73908 +130 1999 74334 +131 2015 74342 +132 2036 74539 +133 2052 74526 +134 2067 74522 +135 2098 75068 +136 2107 74815 +137 2146 75614 +138 2156 75423 +139 2183 75807 +140 2213 76273 +141 2235 76479 +142 2253 76545 +143 2288 77166 +144 2325 77847 +145 2359 78451 +146 2370 78270 +147 2383 78142 +148 2421 78827 +149 2435 78735 +150 2448 78635 +151 2481 79148 +152 2502 79276 +153 2515 79143 +154 2530 79087 +155 2545 79048 +156 2572 79348 +157 2587 79298 +158 2603 79262 +159 2640 79870 +160 2657 79882 +161 2694 80465 +162 2730 81033 +163 2767 81599 +164 2781 81493 +165 2798 81488 +166 2836 82095 +167 2872 82615 +168 2908 83155 +169 2947 83753 +170 2962 83664 +171 2990 83937 +172 3024 84396 +173 3056 84781 +174 3089 85190 +175 3123 85609 +176 3157 86045 +177 3193 86524 +178 3230 87018 +179 3266 87471 +180 3301 87893 +181 3332 88224 +182 3369 88700 +183 3405 89133 +184 3442 89600 +185 3478 90029 +186 3514 90461 +187 3553 90960 +188 3587 91310 +189 3624 91748 +190 3659 92148 +191 3681 92179 +192 3714 92510 +193 3751 92941 +194 3790 93392 +195 3825 93769 +196 3860 94132 +197 3899 94574 +198 3935 94956 +199 3973 95375 +200 4006 95662 +201 4041 96006 +202 4076 96331 +203 4109 96624 +204 4145 96973 +205 4179 97259 +206 4214 97582 +207 4252 97960 +208 4286 98272 +209 4317 98476 +210 4350 98735 +211 4387 99097 +212 4418 99300 +213 4453 99605 +214 4492 99979 +215 4529 100311 +216 4565 100621 +217 4601 100930 +218 4635 101189 +219 4667 101413 +220 4704 101740 +221 4742 102077 +222 4777 102340 +223 4813 102638 +224 4846 102863 +225 4880 103088 +226 4918 103416 +227 4954 103697 +228 4985 103876 +229 5019 104108 +230 5052 104315 +231 5088 104571 +232 5124 104849 +233 5160 105102 +234 5191 105262 +235 5227 105519 +236 5263 105782 +237 5302 106096 +238 5338 106351 +239 5375 106606 +240 5408 106795 +241 5445 107056 +242 5479 107267 +243 5514 107485 +244 5546 107643 +245 5585 107939 +246 5618 108114 +247 5653 108325 +248 5689 108553 +249 5724 108766 +250 5761 109003 +251 5795 109186 +252 5830 109387 +253 5865 109599 +254 5903 109847 +255 5936 110002 +256 5974 110257 +257 6010 110464 +258 6045 110665 +259 6084 110919 +260 6116 111053 +261 6151 111250 +262 6191 111517 +263 6229 111757 +264 6264 111941 +265 6302 112173 +266 6337 112336 +267 6373 112537 +268 6408 112715 +269 6445 112922 +270 6482 113122 +271 6518 113307 +272 6557 113541 +273 6593 113721 +274 6630 113930 +275 6663 114052 +276 6700 114249 +277 6739 114467 +278 6776 114658 +279 6814 114873 +280 6849 115027 +281 6886 115220 +282 6923 115402 +283 6960 115575 +284 6998 115777 +285 7036 115980 +286 7069 116094 +287 7105 116260 +288 7144 116468 +289 7181 116636 +290 7220 116848 +291 7256 116991 +292 7292 117153 +293 7332 117362 +294 7370 117553 +295 7407 117720 +296 7445 117901 +297 7482 118059 +298 7517 118193 +299 7554 118352 +300 7590 118502 +301 7625 118619 +302 7663 118791 +303 7699 118939 +304 7737 119111 +305 7773 119243 +306 7812 119431 +307 7849 119575 +308 7886 119719 +309 7925 119897 +310 7962 120050 +311 8000 120207 +312 8037 120362 +313 8075 120514 +314 8112 120656 +315 8143 120702 +316 8179 120836 +317 8217 120986 +318 8253 121107 +319 8289 121231 +320 8325 121353 +321 8362 121489 +322 8398 121607 +323 8434 121725 +324 8471 121859 +325 8508 121992 +326 8545 122124 +327 8581 122238 +328 8617 122350 +329 8654 122474 +330 8691 122593 +331 8730 122752 +332 8769 122900 +333 8803 122985 +334 8837 123063 +335 8876 123214 +336 8911 123307 +337 8947 123412 +338 8983 123514 +339 9016 123575 +340 9050 123656 +341 9085 123743 +342 9124 123883 +343 9161 124002 +344 9198 124116 +345 9231 124177 +346 9271 124319 +347 9306 124402 +348 9341 124485 +349 9377 124588 +350 9412 124670 +351 9445 124725 +352 9482 124834 +353 9518 124924 +354 9555 125029 +355 9592 125138 +356 9629 125233 +357 9667 125352 +358 9705 125472 +359 9741 125562 +360 9781 125693 +361 9818 125799 +362 9856 125907 +363 9893 126006 +364 9931 126117 +365 9967 126204 +366 10005 126310 +367 10043 126419 +368 10082 126535 +369 10120 126637 +370 10158 126752 +371 10196 126851 +372 10235 126965 +373 10273 127067 +374 10310 127168 +375 10348 127259 +376 10385 127350 +377 10422 127447 +378 10458 127511 +379 10496 127612 +380 10534 127717 +381 10572 127814 +382 10611 127921 +383 10650 128032 +384 10688 128123 +385 10725 128211 +386 10764 128313 +387 10803 128412 +388 10839 128482 +389 10875 128554 +390 10914 128653 +391 10950 128721 +392 10989 128825 +393 11025 128886 +394 11059 128930 +395 11093 128981 +396 11131 129067 +397 11171 129175 +398 11209 129265 +399 11242 129287 +400 11279 129367 +401 11317 129452 +402 11356 129541 +403 11395 129640 +404 11433 129723 +405 11470 129795 +406 11507 129860 +407 11546 129958 +408 11585 130042 +409 11624 130138 +410 11660 130199 +411 11697 130265 +412 11737 130363 +413 11775 130443 +414 11813 130521 +415 11849 130576 +416 11885 130625 +417 11919 130663 +418 11959 130751 +419 11997 130831 +420 12034 130890 +421 12067 130914 +422 12104 130975 +423 12140 131022 +424 12176 131078 +425 12212 131127 +426 12249 131190 +427 12287 131262 +428 12325 131327 +429 12364 131409 +430 12400 131453 +431 12439 131540 +432 12479 131623 +433 12514 131661 +434 12549 131702 +435 12590 131791 +436 12628 131864 +437 12664 131905 +438 12703 131979 +439 12741 132046 +440 12777 132095 +441 12817 132177 +442 12855 132242 +443 12892 132289 +444 12925 132305 +445 12962 132358 +446 13000 132414 +447 13036 132462 +448 13072 132501 +449 13110 132560 +450 13148 132623 +451 13187 132692 +452 13223 132731 +453 13260 132779 +454 13295 132811 +455 13333 132866 +456 13372 132933 +457 13412 133012 +458 13450 133070 +459 13488 133122 +460 13525 133170 +461 13562 133222 +462 13602 133293 +463 13636 133312 +464 13670 133323 +465 13706 133358 +466 13742 133393 +467 13777 133417 +468 13814 133461 +469 13849 133486 +470 13884 133513 +471 13922 133559 +472 13960 133617 +473 13996 133647 +474 14034 133693 +475 14071 133735 +476 14109 133792 +477 14147 133840 +478 14188 133918 +479 14225 133953 +480 14261 133986 +481 14298 134030 +482 14337 134083 +483 14372 134102 +484 14411 134161 +485 14448 134198 +486 14484 134223 +487 14515 134207 +488 14551 134238 +489 14589 134283 +490 14625 134312 +491 14660 134332 +492 14698 134377 +493 14737 134428 +494 14775 134473 +495 14812 134506 +496 14848 134535 +497 14884 134560 +498 14921 134591 +499 14958 134626 +500 14995 134661 +501 15033 134705 +502 15070 134740 +503 15108 134777 +504 15143 134795 +505 15182 134840 +506 15220 134879 +507 15258 134921 +508 15296 134966 +509 15332 134983 +510 15369 135020 +511 15406 135049 +512 15446 135101 +513 15484 135141 +514 15522 135182 +515 15560 135221 +516 15598 135259 +517 15638 135310 +518 15674 135330 +519 15711 135361 +520 15744 135355 +521 15782 135386 +522 15816 135393 +523 15854 135429 +524 15893 135469 +525 15928 135483 +526 15966 135521 +527 16002 135534 +528 16041 135578 +529 16079 135611 +530 16116 135641 +531 16151 135647 +532 16188 135671 +533 16224 135687 +534 16262 135722 +535 16300 135759 +536 16335 135766 +537 16374 135807 +538 16414 135852 +539 16452 135885 +540 16488 135900 +541 16527 135937 +542 16562 135943 +543 16599 135972 +544 16637 135996 +545 16673 136015 +546 16711 136046 +547 16750 136082 +548 16783 136074 +549 16822 136112 +550 16860 136138 +551 16896 136154 +552 16931 136155 +553 16969 136187 +554 17002 136174 +555 17041 136211 +556 17076 136216 +557 17114 136241 +558 17153 136276 +559 17191 136304 +560 17230 136338 +561 17264 136331 +562 17300 136343 +563 17338 136374 +564 17373 136372 +565 17411 136396 +566 17448 136414 +567 17486 136443 +568 17519 136431 +569 17558 136460 +570 17596 136485 +571 17631 136488 +572 17667 136496 +573 17705 136521 +574 17741 136529 +575 17777 136542 +576 17815 136562 +577 17853 136585 +578 17891 136612 +579 17924 136599 +580 17963 136624 +581 17999 136631 +582 18036 136653 +583 18075 136678 +584 18111 136685 +585 18149 136711 +586 18185 136719 +587 18223 136740 +588 18261 136760 +589 18299 136783 +590 18334 136783 +591 18372 136799 +592 18409 136817 +593 18446 136827 +594 18483 136839 +595 18520 136855 +596 18559 136881 +597 18594 136880 +598 18632 136896 +599 18668 136905 +600 18707 136925 +601 18743 136936 +602 18781 136955 +603 18819 136974 +604 18856 136981 +605 18892 136986 +606 18928 136990 +607 18964 136993 +608 18999 136992 +609 19036 136997 +610 19069 136981 +611 19101 136953 +612 19138 136965 +613 19176 136986 +614 19214 137000 +615 19253 137024 +616 19293 137052 +617 19331 137073 +618 19369 137090 +619 19409 137118 +620 19445 137120 +621 19481 137125 +622 19518 137130 +623 19555 137138 +624 19593 137155 +625 19632 137175 +626 19670 137190 +627 19706 137194 +628 19743 137197 +629 19781 137214 +630 19818 137223 +631 19855 137230 +632 19894 137248 +633 19930 137246 +634 19964 137236 +635 20001 137240 +636 20038 137246 +637 20076 137263 +638 20112 137262 +639 20151 137279 +640 20185 137269 +641 20224 137285 +642 20260 137284 +643 20295 137277 +644 20329 137262 +645 20364 137255 +646 20400 137252 +647 20439 137270 +648 20476 137277 +649 20514 137290 +650 20552 137300 +651 20583 137266 +652 20619 137263 +653 20657 137274 +654 20692 137265 +655 20730 137274 +656 20767 137277 +657 20804 137282 +658 20838 137269 +659 20876 137279 +660 20913 137281 +661 20949 137279 +662 20985 137278 +663 21020 137265 +664 21056 137260 +665 21092 137258 +666 21127 137248 +667 21164 137251 +668 21199 137242 +669 21234 137228 +670 21272 137240 +671 21307 137232 +672 21347 137249 +673 21386 137264 +674 21420 137250 +675 21456 137245 +676 21491 137232 +677 21528 137238 +678 21567 137250 +679 21602 137238 +680 21636 137222 +681 21674 137229 +682 21711 137229 +683 21750 137243 +684 21783 137221 +685 21819 137213 +686 21854 137201 +687 21888 137185 +688 21924 137176 +689 21959 137166 +690 21997 137171 +691 22035 137179 +692 22072 137177 +693 22110 137186 +694 22147 137186 +695 22183 137182 +696 22220 137182 +697 22258 137189 +698 22294 137180 +699 22330 137173 +700 22364 137153 +701 22403 137167 +702 22443 137183 +703 22478 137167 +704 22514 137163 +705 22549 137149 +706 22586 137147 +707 22620 137129 +708 22658 137133 +709 22695 137130 +710 22732 137132 +711 22770 137134 +712 22806 137128 +713 22844 137131 +714 22881 137130 +715 22917 137122 +716 22954 137115 +717 22992 137123 +718 23028 137111 +719 23066 137118 +720 23104 137119 +721 23142 137123 +722 23181 137130 +723 23219 137134 +724 23258 137144 +725 23296 137149 +726 23335 137154 +727 23371 137145 +728 23408 137141 +729 23446 137144 +730 23481 137129 +731 23519 137131 +732 23557 137137 +733 23596 137141 +734 23631 137126 +735 23667 137115 +736 23706 137123 +737 23743 137119 +738 23778 137101 +739 23815 137102 +740 23852 137093 +741 23888 137084 +742 23922 137064 +743 23958 137053 +744 23995 137049 +745 24031 137038 +746 24068 137030 +747 24104 137024 +748 24141 137016 +749 24180 137021 +750 24217 137015 +751 24254 137011 +752 24293 137017 +753 24331 137015 +754 24364 136987 +755 24400 136980 +756 24436 136966 +757 24475 136970 +758 24510 136957 +759 24549 136960 +760 24586 136956 +761 24622 136944 +762 24658 136930 +763 24695 136923 +764 24732 136918 +765 24767 136900 +766 24805 136898 +767 24842 136891 +768 24878 136878 +769 24915 136874 +770 24955 136880 +771 24991 136868 +772 25026 136853 +773 25065 136858 +774 25100 136838 +775 25138 136833 +776 25173 136818 +777 25210 136811 +778 25247 136804 +779 25283 136791 +780 25320 136780 +781 25358 136780 +782 25393 136761 +783 25431 136761 +784 25469 136756 +785 25507 136755 +786 25545 136749 +787 25582 136740 +788 25617 136723 +789 25655 136720 +790 25692 136713 +791 25728 136697 +792 25765 136692 +793 25803 136687 +794 25840 136678 +795 25873 136649 +796 25911 136644 +797 25949 136641 +798 25983 136614 +799 26019 136604 +800 26056 136593 +801 26094 136591 +802 26129 136571 +803 26167 136566 +804 26202 136547 +805 26240 136540 +806 26274 136518 +807 26309 136499 +808 26348 136499 +809 26386 136493 +810 26423 136485 +811 26459 136470 +812 26498 136470 +813 26534 136452 +814 26570 136437 +815 26605 136419 +816 26642 136407 +817 26678 136395 +818 26715 136380 +819 26753 136376 +820 26792 136375 +821 26830 136370 +822 26867 136360 +823 26906 136360 +824 26943 136352 +825 26982 136347 +826 27017 136331 +827 27049 136293 +828 27085 136276 +829 27122 136265 +830 27162 136267 +831 27198 136254 +832 27234 136238 +833 27272 136233 +834 27310 136224 +835 27346 136210 +836 27385 136210 +837 27420 136187 +838 27454 136158 +839 27492 136155 +840 27527 136130 +841 27564 136119 +842 27601 136109 +843 27638 136095 +844 27677 136094 +845 27714 136082 +846 27751 136069 +847 27789 136063 +848 27822 136029 +849 27858 136016 +850 27895 136000 +851 27929 135975 +852 27966 135963 +853 28005 135962 +854 28041 135944 +855 28078 135932 +856 28114 135912 +857 28151 135900 +858 28186 135878 +859 28224 135872 +860 28262 135861 +861 28297 135841 +862 28330 135807 +863 28367 135794 +864 28401 135770 +865 28437 135749 +866 28471 135723 +867 28510 135718 +868 28545 135697 +869 28582 135683 +870 28618 135665 +871 28654 135650 +872 28690 135632 +873 28727 135616 +874 28765 135609 +875 28804 135602 +876 28841 135589 +877 28878 135577 +878 28917 135572 +879 28953 135553 +880 28990 135543 +881 29025 135516 +882 29063 135507 +883 29100 135496 +884 29136 135476 +885 29171 135451 +886 29209 135445 +887 29245 135423 +888 29282 135410 +889 29321 135404 +890 29355 135377 +891 29391 135358 +892 29428 135345 +893 29464 135326 +894 29502 135315 +895 29539 135300 +896 29575 135283 +897 29613 135272 +898 29650 135258 +899 29688 135249 +900 29726 135236 +901 29763 135223 +902 29801 135213 +903 29840 135207 +904 29879 135199 +905 29915 135179 +906 29954 135173 +907 29992 135162 +908 30028 135146 +909 30065 135128 +910 30101 135108 +911 30138 135094 +912 30177 135088 +913 30215 135078 +914 30252 135060 +915 30291 135053 +916 30326 135032 +917 30364 135018 +918 30399 134996 +919 30435 134976 +920 30473 134963 +921 30511 134950 +922 30546 134926 +923 30582 134908 +924 30620 134897 +925 30657 134881 +926 30695 134870 +927 30734 134860 +928 30773 134854 +929 30811 134842 +930 30847 134822 +931 30882 134797 +932 30919 134779 +933 30955 134758 +934 30993 134746 +935 31032 134738 +936 31069 134723 +937 31106 134706 +938 31143 134688 +939 31180 134675 +940 31217 134656 +941 31252 134630 +942 31289 134616 +943 31326 134598 +944 31364 134584 +945 31402 134571 +946 31440 134559 +947 31476 134540 +948 31513 134522 +949 31549 134498 +950 31584 134476 +951 31622 134461 +952 31661 134451 +953 31696 134426 +954 31734 134413 +955 31768 134384 +956 31805 134366 +957 31841 134346 +958 31879 134331 +959 31916 134314 +960 31953 134297 +961 31990 134278 +962 32026 134260 +963 32065 134247 +964 32101 134228 +965 32139 134214 +966 32175 134193 +967 32214 134181 +968 32254 134175 +969 32293 134167 +970 32329 134146 +971 32368 134134 +972 32407 134124 +973 32445 134113 +974 32480 134088 +975 32519 134074 +976 32554 134051 +977 32591 134030 +978 32629 134016 +979 32664 133991 +980 32702 133975 +981 32739 133959 +982 32778 133947 +983 32816 133932 +984 32852 133909 +985 32890 133895 +986 32926 133874 +987 32961 133849 +988 32999 133833 +989 33037 133818 +990 33075 133804 +991 33115 133796 +992 33151 133776 +993 33187 133751 +994 33225 133737 +995 33263 133723 +996 33299 133700 +997 33337 133683 +998 33374 133664 +999 33410 133642 +1000 33447 133624 +1001 33485 133609 +1002 33524 133595 +1003 33558 133563 +1004 33594 133542 +1005 33629 133516 +1006 33666 133497 +1007 33698 133457 +1008 33733 133429 +1009 33767 133399 +1010 33806 133385 +1011 33843 133368 +1012 33880 133348 +1013 33918 133333 +1014 33957 133320 +1015 33994 133302 +1016 34027 133265 +1017 34065 133250 +1018 34100 133222 +1019 34137 133203 +1020 34173 133179 +1021 34211 133164 +1022 34247 133139 +1023 34283 133114 +1024 34322 133105 +1025 34357 133075 +1026 34394 133057 +1027 34431 133035 +1028 34467 133014 +1029 34504 132994 +1030 34542 132976 +1031 34580 132959 +1032 34616 132936 +1033 34653 132915 +1034 34690 132896 +1035 34727 132876 +1036 34762 132848 +1037 34796 132815 +1038 34832 132793 +1039 34869 132771 +1040 34905 132749 +1041 34944 132734 +1042 34983 132723 +1043 35022 132710 +1044 35061 132698 +1045 35098 132676 +1046 35133 132650 +1047 35172 132635 +1048 35211 132623 +1049 35247 132599 +1050 35284 132578 +1051 35322 132558 +1052 35358 132535 +1053 35396 132519 +1054 35431 132491 +1055 35470 132476 +1056 35506 132451 +1057 35542 132428 +1058 35581 132413 +1059 35618 132393 +1060 35654 132368 +1061 35689 132341 +1062 35726 132319 +1063 35764 132303 +1064 35803 132287 +1065 35841 132270 +1066 35879 132254 +1067 35913 132222 +1068 35950 132200 +1069 35986 132175 +1070 36025 132162 +1071 36061 132135 +1072 36098 132113 +1073 36134 132091 +1074 36171 132066 +1075 36227 132116 +1076 36266 132100 +1077 36304 132084 +1078 36341 132060 +1079 36375 132027 +1080 36409 131997 +1081 36447 131978 +1082 36485 131960 +1083 36520 131931 +1084 36556 131905 +1085 36594 131888 +1086 36629 131860 +1087 36667 131842 +1088 36704 131817 +1089 36739 131791 +1090 36776 131768 +1091 36813 131746 +1092 36852 131730 +1093 36886 131700 +1094 36922 131672 +1095 36958 131648 +1096 36995 131626 +1097 37031 131599 +1098 37067 131574 +1099 37103 131549 +1100 37142 131533 +1101 37179 131511 +1102 37217 131491 +1103 37254 131471 +1104 37292 131451 +1105 37330 131431 +1106 37367 131411 +1107 37407 131397 +1108 37444 131377 +1109 37483 131361 +1110 37521 131343 +1111 37558 131319 +1112 37596 131300 +1113 37631 131271 +1114 37668 131247 +1115 37705 131224 +1116 37739 131192 +1117 37777 131174 +1118 37814 131151 +1119 37853 131135 +1120 37890 131112 +1121 37930 131099 +1122 37967 131077 +1123 38006 131062 +1124 38042 131035 +1125 38078 131009 +1126 38117 130994 +1127 38156 130975 +1128 38192 130952 +1129 38228 130925 +1130 38264 130898 +1131 38299 130869 +1132 38337 130847 +1133 38373 130822 +1134 38410 130798 +1135 38447 130776 +1136 38484 130751 +1137 38522 130733 +1138 38561 130717 +1139 38598 130691 +1140 38635 130670 +1141 38671 130642 +1142 38710 130626 +1143 38749 130609 +1144 38788 130592 +1145 38825 130571 +1146 38862 130548 +1147 38900 130527 +1148 38939 130510 +1149 38977 130491 +1150 39015 130469 +1151 39051 130444 +1152 39089 130421 +1153 39125 130394 +1154 39160 130366 +1155 39198 130344 +1156 39235 130320 +1157 39272 130296 +1158 39309 130274 +1159 39346 130248 +1160 39381 130221 +1161 39418 130195 +1162 39453 130167 +1163 39490 130142 +1164 39529 130124 +1165 39567 130105 +1166 39604 130080 +1167 39640 130052 +1168 39676 130026 +1169 39712 129999 +1170 39746 129965 +1171 39782 129938 +1172 39821 129919 +1173 39858 129895 +1174 39895 129873 +1175 39931 129844 +1176 39970 129826 +1177 40009 129808 +1178 40047 129789 +1179 40086 129770 +1180 40122 129744 +1181 40161 129727 +1182 40197 129699 +1183 40243 129705 +1184 40279 129677 +1185 40318 129658 +1186 40355 129634 +1187 40391 129604 +1188 40428 129583 +1189 40466 129561 +1190 40504 129540 +1191 40541 129514 +1192 40577 129488 +1193 40614 129462 +1194 40650 129436 +1195 40689 129418 +1196 40728 129397 +1197 40768 129382 +1198 40805 129360 +1199 40842 129334 +1200 40879 129308 +1201 40916 129286 +1202 40954 129262 +1203 40992 129241 +1204 41028 129214 +1205 41066 129192 +1206 41102 129163 +1207 41140 129144 +1208 41179 129123 +1209 41216 129099 +1210 41255 129080 +1211 41294 129063 +1212 41329 129031 +1213 41365 129003 +1214 41403 128981 +1215 41440 128957 +1216 41477 128930 +1217 41514 128907 +1218 41551 128882 +1219 41587 128852 +1220 41625 128829 +1221 41660 128800 +1222 41699 128779 +1223 41736 128755 +1224 41776 128738 +1225 41810 128706 +1226 41848 128683 +1227 41886 128662 +1228 41923 128636 +1229 41963 128618 +1230 41998 128589 +1231 42037 128568 +1232 42071 128534 +1233 42108 128509 +1234 42147 128491 +1235 42185 128466 +1236 42221 128440 +1237 42258 128412 +1238 42297 128393 +1239 42334 128369 +1240 42373 128350 +1241 42411 128327 +1242 42448 128300 +1243 42483 128270 +1244 42523 128252 +1245 42559 128224 +1246 42593 128191 +1247 42629 128160 +1248 42665 128134 +1249 42702 128108 +1250 42738 128079 +1251 42777 128060 +1252 42814 128031 +1253 42849 128000 +1254 42887 127978 +1255 42925 127955 +1256 42962 127931 +1257 43000 127907 +1258 43035 127876 +1259 43072 127851 +1260 43111 127831 +1261 43144 127793 +1262 43182 127769 +1263 43219 127744 +1264 43257 127720 +1265 43295 127698 +1266 43334 127676 +1267 43372 127654 +1268 43410 127632 +1269 43450 127612 +1270 43489 127593 +1271 43523 127558 +1272 43559 127530 +1273 43596 127505 +1274 43633 127478 +1275 43672 127459 +1276 43713 127442 +1277 43749 127413 +1278 43786 127387 +1279 43823 127362 +1280 43859 127331 +1281 43895 127302 +1282 43933 127279 +1283 43968 127248 +1284 44005 127222 +1285 44041 127194 +1286 44077 127164 +1287 44113 127135 +1288 44152 127112 +1289 44190 127090 +1290 44226 127061 +1291 44263 127035 +1292 44298 127002 +1293 44336 126978 +1294 44374 126956 +1295 44411 126928 +1296 44447 126898 +1297 44486 126878 +1298 44524 126854 +1299 44561 126829 +1300 44599 126805 +1301 44637 126781 +1302 44674 126755 +1303 44712 126730 +1304 44749 126705 +1305 44788 126684 +1306 44827 126663 +1307 44863 126633 +1308 44899 126604 +1309 44936 126578 +1310 44974 126551 +1311 45012 126528 +1312 45047 126496 +1313 45085 126473 +1314 45122 126445 +1315 45159 126420 +1316 45199 126400 +1317 45236 126372 +1318 45271 126342 +1319 45309 126317 +1320 45345 126288 +1321 45382 126261 +1322 45419 126233 +1323 45456 126207 +1324 45491 126175 +1325 45529 126149 +1326 45565 126120 +1327 45601 126090 +1328 45636 126059 +1329 45673 126032 +1330 45710 126003 +1331 45746 125975 +1332 45782 125945 +1333 45821 125922 +1334 45858 125896 +1335 45896 125872 +1336 45935 125850 +1337 45970 125818 +1338 46007 125791 +1339 46044 125764 +1340 46080 125732 +1341 46118 125710 +1342 46155 125681 +1343 46194 125659 +1344 46233 125638 +1345 46272 125617 +1346 46311 125593 +1347 46348 125567 +1348 46387 125545 +1349 46422 125513 +1350 46460 125489 +1351 46499 125465 +1352 46536 125439 +1353 46572 125407 +1354 46609 125382 +1355 46646 125353 +1356 46684 125330 +1357 46721 125302 +1358 46758 125273 +1359 46796 125248 +1360 46831 125217 +1361 46868 125189 +1362 46907 125168 +1363 46941 125132 +1364 46980 125108 +1365 47016 125079 +1366 47053 125051 +1367 47090 125024 +1368 47125 124990 +1369 47162 124964 +1370 47199 124936 +1371 47236 124908 +1372 47275 124884 +1373 47311 124856 +1374 47348 124827 +1375 47385 124800 +1376 47421 124771 +1377 47459 124745 +1378 47498 124721 +1379 47538 124701 +1380 47576 124677 +1381 47615 124654 +1382 47654 124632 +1383 47691 124604 +1384 47728 124577 +1385 47766 124550 +1386 47803 124522 +1387 47841 124497 +1388 47878 124470 +1389 47916 124444 +1390 47954 124420 +1391 47991 124392 +1392 48028 124365 +1393 48064 124332 +1394 48101 124305 +1395 48137 124275 +1396 48176 124252 +1397 48213 124223 +1398 48250 124195 +1399 48288 124170 +1400 48324 124139 +1401 48362 124113 +1402 48398 124083 +1403 48433 124051 +1404 48473 124029 +1405 48512 124006 +1406 48547 123974 +1407 48585 123948 +1408 48622 123920 +1409 48660 123895 +1410 48698 123869 +1411 48735 123839 +1412 48773 123813 +1413 48811 123788 +1414 48849 123762 +1415 48887 123737 +1416 48925 123711 +1417 48961 123682 +1418 48997 123651 +1419 49036 123626 +1420 49075 123603 +1421 49114 123579 +1422 49151 123553 +1423 49189 123525 +1424 49226 123497 +1425 49265 123475 +1426 49304 123450 +1427 49341 123423 +1428 49380 123400 +1429 49415 123366 +1430 49453 123339 +1431 49489 123308 +1432 49528 123285 +1433 49566 123259 +1434 49601 123227 +1435 49640 123202 +1436 49678 123175 +1437 49714 123144 +1438 49752 123118 +1439 49791 123095 +1440 49829 123070 +1441 49866 123040 +1442 49901 123008 +1443 49940 122983 +1444 49977 122955 +1445 50013 122923 +1446 50050 122895 +1447 50088 122869 +1448 50126 122843 +1449 50164 122815 +1450 50199 122782 +1451 50237 122756 +1452 50273 122724 +1453 50309 122694 +1454 50348 122671 +1455 50384 122638 +1456 50420 122607 +1457 50456 122577 +1458 50489 122538 +1459 50526 122508 +1460 50565 122486 +1461 50604 122461 +1462 50643 122437 +1463 50682 122413 +1464 50718 122383 +1465 50757 122358 +1466 50794 122328 +1467 50832 122302 +1468 50868 122270 +1469 50905 122241 +1470 50943 122216 +1471 50980 122186 +1472 51015 122152 +1473 51052 122124 +1474 51089 122095 +1475 51125 122063 +1476 51161 122033 +1477 51199 122006 +1478 51235 121973 +1479 51269 121939 +1480 51309 121915 +1481 51348 121890 +1482 51384 121861 +1483 51420 121830 +1484 51456 121797 +1485 51492 121766 +1486 51526 121729 +1487 51564 121703 +1488 51603 121679 +1489 51642 121654 +1490 51676 121619 +1491 51712 121586 +1492 51748 121554 +1493 51782 121520 +1494 51820 121491 +1495 51858 121465 +1496 51895 121435 +1497 51934 121411 +1498 51972 121385 +1499 52009 121356 +1500 52046 121326 +1501 52082 121295 +1502 52119 121266 +1503 52156 121237 +1504 52195 121210 +1505 52229 121174 +1506 52266 121146 +1507 52303 121116 +1508 52341 121089 +1509 52378 121059 +1510 52415 121031 +1511 52454 121005 +1512 52493 120981 +1513 52528 120948 +1514 52565 120917 +1515 52601 120885 +1516 52633 120845 +1517 52668 120810 +1518 52706 120783 +1519 52743 120754 +1520 52783 120731 +1521 52822 120707 +1522 52860 120679 +1523 52895 120646 +1524 52933 120618 +1525 52967 120583 +1526 53005 120555 +1527 53041 120522 +1528 53075 120487 +1529 53113 120459 +1530 53149 120429 +1531 53188 120402 +1532 53223 120370 +1533 53261 120342 +1534 53298 120312 +1535 53337 120287 +1536 53375 120260 +1537 53414 120235 +1538 53450 120202 +1539 53485 120169 +1540 53523 120141 +1541 53560 120112 +1542 53597 120082 +1543 53633 120049 +1544 53669 120018 +1545 53705 119987 +1546 53744 119961 +1547 53780 119929 +1548 53819 119903 +1549 53858 119878 +1550 53892 119843 +1551 53931 119816 +1552 53970 119791 +1553 54006 119759 +1554 54042 119728 +1555 54077 119693 +1556 54114 119663 +1557 54152 119635 +1558 54187 119602 +1559 54222 119567 +1560 54264 119548 +1561 54301 119518 +1562 54339 119490 +1563 54377 119463 +1564 54414 119434 +1565 54452 119406 +1566 54487 119372 +1567 54525 119343 +1568 54562 119314 +1569 54596 119278 +1570 54633 119248 +1571 54670 119218 +1572 54707 119187 +1573 54745 119159 +1574 54780 119126 +1575 54818 119098 +1576 54856 119069 +1577 54893 119040 +1578 54930 119009 +1579 54969 118985 +1580 55007 118957 +1581 55042 118922 +1582 55077 118887 +1583 55115 118859 +1584 55151 118828 +1585 55190 118801 +1586 55227 118771 +1587 55266 118746 +1588 55302 118713 +1589 55340 118686 +1590 55376 118653 +1591 55412 118621 +1592 55449 118590 +1593 55488 118565 +1594 55524 118532 +1595 55562 118505 +1596 55601 118478 +1597 55639 118451 +1598 55674 118418 +1599 55711 118386 +1600 55750 118359 +1601 55786 118328 +1602 55825 118301 +1603 55863 118275 +1604 55902 118248 +1605 55939 118218 +1606 55977 118189 +1607 56014 118160 +1608 56051 118130 +1609 56088 118100 +1610 56126 118070 +1611 56163 118040 +1612 56201 118012 +1613 56237 117980 +1614 56276 117953 +1615 56312 117921 +1616 56350 117893 +1617 56386 117861 +1618 56423 117831 +1619 56462 117803 +1620 56497 117768 +1621 56533 117738 +1622 56568 117703 +1623 56604 117670 +1624 56640 117637 +1625 56678 117609 +1626 56718 117584 +1627 56755 117555 +1628 56790 117520 +1629 56828 117492 +1630 56866 117463 +1631 56898 117423 +1632 56936 117393 +1633 56973 117364 +1634 57009 117331 +1635 57045 117299 +1636 57083 117269 +1637 57119 117237 +1638 57155 117204 +1639 57191 117172 +1640 57226 117138 +1641 57260 117102 +1642 57307 117091 +1643 57345 117062 +1644 57381 117030 +1645 57419 117001 +1646 57456 116971 +1647 57492 116939 +1648 57528 116905 +1649 57565 116875 +1650 57602 116843 +1651 57639 116813 +1652 57678 116787 +1653 57716 116758 +1654 57753 116727 +1655 57788 116693 +1656 57825 116662 +1657 57859 116626 +1658 57893 116588 +1659 57928 116554 +1660 57965 116523 +1661 58000 116488 +1662 58034 116453 +1663 58069 116417 +1664 58108 116391 +1665 58145 116361 +1666 58183 116331 +1667 58221 116303 +1668 58257 116269 +1669 58294 116239 +1670 58331 116209 +1671 58364 116171 +1672 58402 116141 +1673 58439 116110 +1674 58476 116081 +1675 58514 116051 +1676 58551 116019 +1677 58586 115986 +1678 58624 115957 +1679 58661 115925 +1680 58695 115889 +1681 58731 115856 +1682 58766 115821 +1683 58802 115789 +1684 58837 115753 +1685 58873 115720 +1686 58908 115687 +1687 58943 115652 +1688 58981 115623 +1689 59018 115591 +1690 59054 115559 +1691 59088 115523 +1692 59123 115487 +1693 59160 115456 +1694 59193 115418 +1695 59227 115382 +1696 59264 115351 +1697 59300 115318 +1698 59337 115286 +1699 59372 115251 +1700 59408 115218 +1701 59442 115183 +1702 59479 115151 +1703 59516 115120 +1704 59551 115086 +1705 59587 115052 +1706 59624 115021 +1707 59661 114991 +1708 59697 114958 +1709 59734 114927 +1710 59769 114893 +1711 59805 114860 +1712 59841 114827 +1713 59878 114796 +1714 59912 114760 +1715 59947 114724 +1716 59984 114692 +1717 60019 114658 +1718 60053 114622 +1719 60091 114593 +1720 60127 114560 +1721 60163 114528 +1722 60201 114498 +1723 60236 114462 +1724 60271 114428 +1725 60306 114393 +1726 60345 114365 +1727 60380 114331 +1728 60415 114297 +1729 60450 114261 +1730 60486 114229 +1731 60523 114197 +1732 60560 114166 +1733 60596 114133 +1734 60631 114099 +1735 60667 114065 +1736 60702 114031 +1737 60738 113997 +1738 60772 113961 +1739 60807 113927 +1740 60841 113890 +1741 60874 113851 +1742 60910 113818 +1743 60945 113784 +1744 60981 113750 +1745 61015 113713 +1746 61049 113676 +1747 61085 113645 +1748 61121 113610 +1749 61158 113579 +1750 61193 113545 +1751 61230 113514 +1752 61268 113484 +1753 61302 113448 +1754 61338 113415 +1755 61372 113378 +1756 61407 113344 +1757 61444 113312 +1758 61477 113273 +1759 61510 113234 +1760 61547 113203 +1761 61583 113170 +1762 61621 113142 +1763 61658 113110 +1764 61695 113079 +1765 61731 113046 +1766 61768 113015 +1767 61803 112980 +1768 61841 112951 +1769 61877 112917 +1770 61913 112884 +1771 61949 112851 +1772 61986 112819 +1773 62021 112785 +1774 62058 112754 +1775 62095 112722 +1776 62129 112686 +1777 62168 112657 +1778 62202 112622 +1779 62238 112587 +1780 62275 112556 +1781 62311 112524 +1782 62348 112493 +1783 62386 112462 +1784 62423 112431 +1785 62458 112396 +1786 62495 112365 +1787 62531 112332 +1788 62568 112302 +1789 62605 112270 +1790 62641 112236 +1791 62679 112208 +1792 62718 112180 +1793 62756 112151 +1794 62793 112119 +1795 62831 112088 +1796 62868 112057 +1797 62905 112025 +1798 62940 111991 +1799 62977 111960 +1800 63015 111929 +1801 63053 111900 +1802 63091 111870 +1803 63128 111840 +1804 63166 111809 +1805 63201 111775 +1806 63237 111742 +1807 63272 111707 +1808 63310 111677 +1809 63348 111647 +1810 63383 111612 +1811 63420 111581 +1812 63457 111548 +1813 63491 111512 +1814 63525 111476 +1815 63562 111444 +1816 63596 111408 +1817 63634 111377 +1818 63669 111342 +1819 63706 111312 +1820 63745 111282 +1821 63778 111244 +1822 63814 111211 +1823 63849 111176 +1824 63885 111143 +1825 63921 111109 +1826 63956 111075 +1827 63990 111037 +1828 64024 111000 +1829 64061 110969 +1830 64095 110933 +1831 64132 110901 +1832 64167 110867 +1833 64205 110836 +1834 64242 110804 +1835 64278 110772 +1836 64314 110738 +1837 64350 110705 +1838 64386 110672 +1839 64421 110637 +1840 64459 110606 +1841 64496 110574 +1842 64531 110541 +1843 64568 110509 +1844 64605 110477 +1845 64643 110447 +1846 64681 110417 +1847 64718 110385 +1848 64755 110353 +1849 64791 110321 +1850 64827 110287 +1851 64864 110255 +1852 64900 110221 +1853 64937 110190 +1854 64974 110158 +1855 65008 110122 +1856 65044 110089 +1857 65079 110054 +1858 65115 110019 +1859 65150 109985 +1860 65186 109951 +1861 65221 109917 +1862 65271 109907 +1863 65308 109874 +1864 65342 109838 +1865 65380 109808 +1866 65416 109774 +1867 65453 109743 +1868 65489 109709 +1869 65526 109677 +1870 65558 109637 +1871 65592 109600 +1872 65629 109569 +1873 65665 109536 +1874 65700 109501 +1875 65735 109466 +1876 65771 109433 +1877 65808 109399 +1878 65845 109368 +1879 65894 109356 +1880 65931 109324 +1881 65966 109289 +1882 66000 109253 +1883 66037 109221 +1884 66074 109189 +1885 66110 109156 +1886 66147 109123 +1887 66183 109091 +1888 66217 109054 +1889 66251 109017 +1890 66288 108984 +1891 66324 108952 +1892 66359 108916 +1893 66397 108886 +1894 66434 108853 +1895 66470 108820 +1896 66506 108788 +1897 66544 108756 +1898 66581 108724 +1899 66618 108692 +1900 66652 108657 +1901 66687 108622 +1902 66722 108586 +1903 66757 108550 +1904 66795 108520 +1905 66831 108486 +1906 66864 108448 +1907 66902 108418 +1908 66938 108385 +1909 66975 108353 +1910 67014 108323 +1911 67053 108295 +1912 67088 108260 +1913 67127 108232 +1914 67164 108199 +1915 67199 108164 +1916 67232 108126 +1917 67269 108093 +1918 67306 108061 +1919 67342 108027 +1920 67379 107997 +1921 67414 107962 +1922 67452 107930 +1923 67483 107889 +1924 67519 107855 +1925 67554 107820 +1926 67590 107786 +1927 67626 107753 +1928 67663 107721 +1929 67698 107686 +1930 67735 107654 +1931 67771 107619 +1932 67808 107588 +1933 67843 107552 +1934 67879 107519 +1935 67918 107491 +1936 67954 107457 +1937 67991 107425 +1938 68025 107388 +1939 68058 107349 +1940 68095 107317 +1941 68130 107282 +1942 68165 107248 +1943 68202 107214 +1944 68239 107182 +1945 68273 107146 +1946 68310 107114 +1947 68348 107083 +1948 68383 107048 +1949 68420 107017 +1950 68458 106986 +1951 68493 106951 +1952 68530 106919 +1953 68566 106885 +1954 68606 106857 +1955 68642 106824 +1956 68681 106795 +1957 68717 106760 +1958 68754 106729 +1959 68791 106696 +1960 68826 106662 +1961 68861 106627 +1962 68899 106596 +1963 68936 106563 +1964 68973 106531 +1965 69008 106497 +1966 69044 106463 +1967 69082 106431 +1968 69117 106396 +1969 69154 106364 +1970 69188 106326 +1971 69223 106293 +1972 69259 106259 +1973 69297 106228 +1974 69334 106195 +1975 69371 106163 +1976 69409 106133 +1977 69447 106102 +1978 69482 106066 +1979 69514 106027 +1980 69551 105994 +1981 69585 105958 +1982 69620 105922 +1983 69656 105889 +1984 69692 105856 +1985 69728 105820 +1986 69763 105786 +1987 69797 105750 +1988 69831 105713 +1989 69868 105680 +1990 69903 105645 +1991 69939 105612 +1992 69975 105577 +1993 70011 105544 +1994 70048 105511 +1995 70083 105475 +1996 70118 105441 +1997 70155 105409 +1998 70191 105374 +1999 70227 105341 +2000 70265 105310 +2001 70303 105279 +2002 70337 105243 +2003 70373 105209 +2004 70410 105176 +2005 70445 105141 +2006 70480 105105 +2007 70517 105073 +2008 70552 105038 +2009 70587 105003 +2010 70624 104970 +2011 70662 104940 +2012 70696 104903 +2013 70734 104872 +2014 70770 104839 +2015 70806 104805 +2016 70843 104772 +2017 70881 104742 +2018 70919 104711 +2019 70958 104682 +2020 70995 104649 +2021 71032 104616 +2022 71068 104582 +2023 71105 104549 +2024 71140 104515 +2025 71175 104479 +2026 71211 104445 +2027 71245 104409 +2028 71284 104379 +2029 71317 104340 +2030 71355 104309 +2031 71392 104277 +2032 71430 104246 +2033 71468 104216 +2034 71505 104184 +2035 71541 104149 +2036 71579 104118 +2037 71615 104085 +2038 71650 104049 +2039 71684 104012 +2040 71720 103978 +2041 71755 103943 +2042 71789 103907 +2043 71825 103873 +2044 71860 103837 +2045 71894 103800 +2046 71932 103769 +2047 71967 103734 +2048 72011 103712 +2049 72046 103676 +2050 72083 103643 +2051 72120 103611 +2052 72153 103573 +2053 72188 103538 +2054 72225 103505 +2055 72262 103472 +2056 72300 103442 +2057 72335 103406 +2058 72373 103375 +2059 72410 103342 +2060 72447 103310 +2061 72483 103276 +2062 72521 103245 +2063 72557 103211 +2064 72593 103177 +2065 72628 103142 +2066 72664 103107 +2067 72700 103074 +2068 72732 103034 +2069 72767 102998 +2070 72801 102962 +2071 72838 102929 +2072 72873 102894 +2073 72908 102859 +2074 72944 102825 +2075 72981 102792 +2076 73017 102758 +2077 73054 102726 +2078 73090 102691 +2079 73127 102660 +2080 73163 102625 +2081 73196 102587 +2082 73232 102553 +2083 73267 102518 +2084 73301 102481 +2085 73339 102450 +2086 73377 102419 +2087 73416 102389 +2088 73455 102359 +2089 73489 102322 +2090 73527 102291 +2091 73564 102258 +2092 73598 102222 +2093 73636 102190 +2094 73669 102153 +2095 73707 102121 +2096 73744 102088 +2097 73781 102055 +2098 73820 102025 +2099 73859 101996 +2100 73896 101963 +2101 73932 101929 +2102 73967 101894 +2103 74004 101862 +2104 74042 101829 +2105 74076 101794 +2106 74110 101756 +2107 74146 101722 +2108 74181 101687 +2109 74217 101653 +2110 74255 101622 +2111 74291 101588 +2112 74328 101554 +2113 74366 101524 +2114 74403 101491 +2115 74440 101458 +2116 74477 101426 +2117 74513 101391 +2118 74550 101359 +2119 74586 101324 +2120 74624 101293 +2121 74659 101258 +2122 74696 101225 +2123 74731 101189 +2124 74766 101154 +2125 74800 101118 +2126 74837 101085 +2127 74875 101053 +2128 74907 101013 +2129 74942 100978 +2130 74978 100944 +2131 75011 100906 +2132 75048 100873 +2133 75083 100838 +2134 75120 100806 +2135 75156 100771 +2136 75192 100738 +2137 75225 100699 +2138 75260 100664 +2139 75298 100631 +2140 75334 100598 +2141 75369 100563 +2142 75406 100530 +2143 75442 100496 +2144 75478 100462 +2145 75512 100425 +2146 75547 100390 +2147 75580 100351 +2148 75617 100319 +2149 75654 100286 +2150 75689 100250 +2151 75723 100214 +2152 75760 100181 +2153 75797 100148 +2154 75834 100114 +2155 75869 100080 +2156 75907 100049 +2157 75943 100014 +2158 75980 99982 +2159 76015 99946 +2160 76057 99919 +2161 76096 99889 +2162 76132 99856 +2163 76168 99821 +2164 76204 99787 +2165 76241 99754 +2166 76278 99721 +2167 76317 99691 +2168 76354 99658 +2169 76391 99626 +2170 76428 99592 +2171 76464 99558 +2172 76501 99525 +2173 76537 99491 +2174 76574 99458 +2175 76609 99423 +2176 76647 99391 +2177 76683 99357 +2178 76718 99322 +2179 76755 99288 +2180 76789 99251 +2181 76824 99217 +2182 76863 99186 +2183 76901 99154 +2184 76937 99121 +2185 76974 99087 +2186 77011 99054 +2187 77045 99018 +2188 77083 98987 +2189 77120 98953 +2190 77156 98919 +2191 77193 98886 +2192 77233 98856 +2193 77269 98823 +2194 77307 98791 +2195 77342 98756 +2196 77381 98725 +2197 77420 98694 +2198 77455 98659 +2199 77490 98623 +2200 77528 98592 +2201 77565 98559 +2202 77603 98527 +2203 77640 98495 +2204 77677 98461 +2205 77715 98430 +2206 77754 98400 +2207 77793 98369 +2208 77831 98337 +2209 77867 98303 +2210 77903 98268 +2211 77936 98231 +2212 77973 98197 +2213 78007 98160 +2214 78043 98127 +2215 78082 98096 +2216 78118 98062 +2217 78155 98028 +2218 78192 97996 +2219 78228 97961 +2220 78266 97930 +2221 78305 97899 +2222 78339 97863 +2223 78378 97831 +2224 78416 97800 +2225 78451 97765 +2226 78486 97728 +2227 78521 97693 +2228 78556 97658 +2229 78592 97623 +2230 78626 97586 +2231 78661 97551 +2232 78698 97518 +2233 78732 97481 +2234 78765 97443 +2235 78800 97408 +2236 78836 97373 +2237 78870 97337 +2238 78905 97301 +2239 78940 97266 +2240 78975 97229 +2241 79008 97192 +2242 79044 97158 +2243 79082 97126 +2244 79117 97090 +2245 79151 97053 +2246 79188 97020 +2247 79223 96985 +2248 79258 96949 +2249 79294 96915 +2250 79331 96882 +2251 79367 96847 +2252 79402 96812 +2253 79440 96780 +2254 79481 96752 +2255 79517 96717 +2256 79557 96688 +2257 79594 96655 +2258 79628 96618 +2259 79665 96585 +2260 79701 96551 +2261 79737 96517 +2262 79774 96483 +2263 79809 96447 +2264 79841 96408 +2265 79877 96374 +2266 79911 96338 +2267 79946 96302 +2268 79981 96266 +2269 80015 96229 +2270 80050 96194 +2271 80086 96160 +2272 80119 96121 +2273 80156 96089 +2274 80192 96054 +2275 80227 96019 +2276 80265 95987 +2277 80303 95955 +2278 80340 95922 +2279 80375 95887 +2280 80412 95853 +2281 80450 95821 +2282 80488 95789 +2283 80526 95757 +2284 80571 95733 +2285 80609 95701 +2286 80645 95667 +2287 80681 95633 +2288 80718 95600 +2289 80755 95566 +2290 80791 95532 +2291 80825 95495 +2292 80861 95460 +2293 80898 95427 +2294 80934 95393 +2295 80970 95359 +2296 81003 95321 +2297 81038 95285 +2298 81073 95250 +2299 81110 95216 +2300 81146 95181 +2301 81181 95146 +2302 81217 95111 +2303 81253 95077 +2304 81290 95044 +2305 81326 95009 +2306 81360 94973 +2307 81397 94939 +2308 81432 94904 +2309 81464 94865 +2310 81501 94832 +2311 81537 94797 +2312 81575 94765 +2313 81613 94733 +2314 81650 94700 +2315 81688 94667 +2316 81723 94633 +2317 81761 94600 +2318 81797 94566 +2319 81832 94530 +2320 81870 94498 +2321 81906 94463 +2322 81942 94429 +2323 81978 94395 +2324 82015 94362 +2325 82054 94330 +2326 82088 94293 +2327 82124 94259 +2328 82159 94224 +2329 82195 94189 +2330 82231 94155 +2331 82268 94121 +2332 82303 94086 +2333 82340 94052 +2334 82376 94018 +2335 82411 93982 +2336 82447 93948 +2337 82483 93913 +2338 82520 93880 +2339 82555 93845 +2340 82590 93809 +2341 82628 93777 +2342 82665 93743 +2343 82699 93707 +2344 82736 93674 +2345 82773 93640 +2346 82809 93606 +2347 82845 93571 +2348 82881 93536 +2349 82918 93504 +2350 82954 93469 +2351 82991 93436 +2352 83028 93402 +2353 83066 93370 +2354 83102 93336 +2355 83138 93301 +2356 83178 93271 +2357 83217 93240 +2358 83256 93209 +2359 83294 93176 +2360 83332 93144 +2361 83367 93108 +2362 83405 93077 +2363 83443 93044 +2364 83480 93011 +2365 83517 92977 +2366 83552 92942 +2367 83591 92911 +2368 83628 92877 +2369 83664 92842 +2370 83700 92808 +2371 83736 92773 +2372 83771 92737 +2373 83805 92701 +2374 83842 92667 +2375 83877 92632 +2376 83914 92599 +2377 83950 92564 +2378 83986 92530 +2379 84022 92495 +2380 84056 92458 +2381 84092 92424 +2382 84127 92388 +2383 84162 92353 +2384 84201 92321 +2385 84238 92287 +2386 84272 92250 +2387 84308 92216 +2388 84346 92184 +2389 84384 92151 +2390 84419 92116 +2391 84456 92083 +2392 84493 92049 +2393 84530 92016 +2394 84568 91983 +2395 84604 91949 +2396 84642 91916 +2397 84677 91881 +2398 84714 91847 +2399 84749 91812 +2400 84784 91776 +2401 84820 91741 +2402 84857 91708 +2403 84895 91675 +2404 84933 91643 +2405 84970 91610 +2406 85007 91576 +2407 85042 91541 +2408 85076 91503 +2409 85112 91469 +2410 85148 91435 +2411 85185 91401 +2412 85222 91367 +2413 85259 91334 +2414 85294 91298 +2415 85329 91262 +2416 85364 91227 +2417 85399 91191 +2418 85436 91158 +2419 85475 91126 +2420 85511 91092 +2421 85549 91059 +2422 85584 91023 +2423 85618 90987 +2424 85655 90953 +2425 85690 90918 +2426 85726 90884 +2427 85761 90847 +2428 85797 90812 +2429 85834 90779 +2430 85867 90742 +2431 85904 90707 +2432 85941 90674 +2433 85975 90637 +2434 86012 90604 +2435 86046 90567 +2436 86081 90532 +2437 86118 90498 +2438 86154 90464 +2439 86192 90431 +2440 86229 90397 +2441 86266 90364 +2442 86302 90329 +2443 86339 90296 +2444 86373 90259 +2445 86409 90224 +2446 86444 90188 +2447 86479 90153 +2448 86516 90120 +2449 86554 90087 +2450 86592 90054 +2451 86629 90021 +2452 86666 89987 +2453 86702 89953 +2454 86739 89919 +2455 86776 89885 +2456 86811 89849 +2457 86846 89814 +2458 86883 89780 +2459 86918 89744 +2460 86953 89709 +2461 86988 89674 +2462 87026 89641 +2463 87061 89605 +2464 87094 89568 +2465 87131 89533 +2466 87166 89498 +2467 87205 89466 +2468 87242 89433 +2469 87279 89399 +2470 87315 89365 +2471 87353 89332 +2472 87389 89298 +2473 87425 89263 +2474 87463 89230 +2475 87498 89194 +2476 87532 89158 +2477 87567 89121 +2478 87604 89088 +2479 87641 89054 +2480 87675 89018 +2481 87713 88985 +2482 87748 88949 +2483 87782 88913 +2484 87815 88875 +2485 87853 88842 +2486 87891 88810 +2487 87929 88777 +2488 87965 88742 +2489 88003 88710 +2490 88039 88675 +2491 88076 88642 +2492 88111 88606 +2493 88147 88571 +2494 88183 88537 +2495 88220 88503 +2496 88257 88469 +2497 88295 88436 +2498 88332 88402 +2499 88367 88367 +2500 88404 88333 +2501 88442 88301 +2502 88480 88268 +2503 88517 88235 +2504 88553 88200 +2505 88590 88166 +2506 88629 88134 +2507 88663 88097 +2508 88700 88064 +2509 88737 88030 +2510 88773 87995 +2511 88811 87963 +2512 88848 87929 +2513 88881 87891 +2514 88918 87858 +2515 88954 87822 +2516 88991 87789 +2517 89027 87754 +2518 89064 87721 +2519 89100 87686 +2520 89136 87651 +2521 89174 87618 +2522 89211 87585 +2523 89245 87548 +2524 89279 87511 +2525 89317 87478 +2526 89352 87443 +2527 89385 87405 +2528 89423 87372 +2529 89459 87338 +2530 89495 87303 +2531 89532 87269 +2532 89568 87234 +2533 89604 87199 +2534 89643 87167 +2535 89680 87133 +2536 89719 87102 +2537 89754 87066 +2538 89791 87033 +2539 89828 86999 +2540 89865 86965 +2541 89901 86930 +2542 89936 86895 +2543 89974 86862 +2544 90012 86829 +2545 90047 86793 +2546 90082 86757 +2547 90120 86725 +2548 90157 86691 +2549 90191 86654 +2550 90227 86619 +2551 90265 86586 +2552 90304 86555 +2553 90340 86520 +2554 90377 86486 +2555 90412 86450 +2556 90447 86414 +2557 90484 86380 +2558 90520 86346 +2559 90556 86311 +2560 90593 86278 +2561 90628 86241 +2562 90662 86205 +2563 90699 86171 +2564 90735 86136 +2565 90770 86101 +2566 90808 86067 +2567 90845 86034 +2568 90882 86000 +2569 90917 85964 +2570 90953 85929 +2571 90988 85893 +2572 91023 85858 +2573 91061 85825 +2574 91097 85790 +2575 91133 85755 +2576 91169 85720 +2577 91206 85687 +2578 91245 85655 +2579 91281 85620 +2580 91316 85584 +2581 91353 85551 +2582 91391 85518 +2583 91426 85482 +2584 91463 85448 +2585 91500 85414 +2586 91537 85380 +2587 91572 85344 +2588 91608 85309 +2589 91644 85274 +2590 91679 85239 +2591 91716 85205 +2592 91752 85170 +2593 91786 85134 +2594 91822 85099 +2595 91859 85066 +2596 91896 85031 +2597 91932 84996 +2598 91969 84962 +2599 92007 84929 +2600 92044 84895 +2601 92081 84861 +2602 92118 84828 +2603 92156 84794 +2604 92192 84760 +2605 92227 84724 +2606 92264 84690 +2607 92300 84656 +2608 92336 84620 +2609 92373 84587 +2610 92408 84551 +2611 92443 84516 +2612 92479 84481 +2613 92517 84447 +2614 92552 84412 +2615 92589 84378 +2616 92626 84343 +2617 92660 84308 +2618 92697 84273 +2619 92731 84237 +2620 92766 84200 +2621 92801 84165 +2622 92839 84132 +2623 92877 84099 +2624 92912 84064 +2625 92948 84028 +2626 92983 83993 +2627 93021 83959 +2628 93059 83926 +2629 93096 83893 +2630 93134 83859 +2631 93171 83825 +2632 93207 83791 +2633 93244 83756 +2634 93279 83721 +2635 93317 83687 +2636 93352 83652 +2637 93391 83620 +2638 93427 83585 +2639 93462 83549 +2640 93496 83513 +2641 93530 83476 +2642 93564 83439 +2643 93601 83405 +2644 93639 83372 +2645 93675 83337 +2646 93710 83302 +2647 93763 83282 +2648 93801 83249 +2649 93840 83216 +2650 93877 83183 +2651 93913 83148 +2652 93950 83114 +2653 93988 83081 +2654 94026 83048 +2655 94063 83014 +2656 94100 82979 +2657 94136 82944 +2658 94171 82909 +2659 94209 82875 +2660 94244 82840 +2661 94280 82805 +2662 94318 82772 +2663 94357 82739 +2664 94395 82706 +2665 94431 82672 +2666 94467 82636 +2667 94504 82602 +2668 94542 82569 +2669 94576 82533 +2670 94611 82497 +2671 94646 82461 +2672 94681 82425 +2673 94717 82390 +2674 94756 82358 +2675 94793 82324 +2676 94830 82289 +2677 94866 82255 +2678 94902 82220 +2679 94938 82185 +2680 94976 82152 +2681 95012 82117 +2682 95049 82083 +2683 95086 82049 +2684 95122 82014 +2685 95158 81979 +2686 95197 81947 +2687 95235 81914 +2688 95269 81877 +2689 95307 81843 +2690 95342 81807 +2691 95376 81771 +2692 95415 81739 +2693 95451 81704 +2694 95489 81671 +2695 95523 81634 +2696 95560 81600 +2697 95597 81566 +2698 95633 81531 +2699 95672 81498 +2700 95709 81464 +2701 95747 81431 +2702 95783 81396 +2703 95821 81363 +2704 95857 81328 +2705 95894 81294 +2706 95932 81260 +2707 95968 81226 +2708 96005 81191 +2709 96044 81158 +2710 96082 81125 +2711 96119 81091 +2712 96155 81056 +2713 96193 81023 +2714 96229 80988 +2715 96265 80953 +2716 96302 80919 +2717 96337 80884 +2718 96374 80849 +2719 96409 80814 +2720 96445 80778 +2721 96482 80744 +2722 96518 80710 +2723 96555 80675 +2724 96591 80640 +2725 96629 80607 +2726 96666 80573 +2727 96704 80540 +2728 96741 80505 +2729 96777 80470 +2730 96818 80439 +2731 96856 80406 +2732 96892 80371 +2733 96929 80337 +2734 96965 80302 +2735 96999 80266 +2736 97036 80231 +2737 97072 80196 +2738 97108 80161 +2739 97145 80127 +2740 97182 80093 +2741 97220 80060 +2742 97257 80025 +2743 97295 79992 +2744 97333 79958 +2745 97370 79924 +2746 97407 79890 +2747 97443 79855 +2748 97480 79821 +2749 97518 79788 +2750 97557 79755 +2751 97592 79719 +2752 97628 79684 +2753 97667 79651 +2754 97704 79617 +2755 97740 79582 +2756 97779 79550 +2757 97822 79520 +2758 97859 79486 +2759 97897 79452 +2760 97943 79425 +2761 97980 79391 +2762 98015 79356 +2763 98051 79321 +2764 98086 79285 +2765 98121 79249 +2766 98158 79215 +2767 98194 79180 +2768 98232 79146 +2769 98270 79113 +2770 98308 79079 +2771 98345 79045 +2772 98380 79009 +2773 98416 78974 +2774 98452 78939 +2775 98490 78906 +2776 98527 78871 +2777 98565 78837 +2778 98602 78804 +2779 98639 78769 +2780 98676 78735 +2781 98713 78700 +2782 98750 78667 +2783 98787 78632 +2784 98825 78598 +2785 98862 78564 +2786 98900 78531 +2787 98935 78495 +2788 98973 78462 +2789 99011 78428 +2790 99049 78395 +2791 99087 78361 +2792 99123 78326 +2793 99161 78292 +2794 99196 78257 +2795 99232 78222 +2796 99269 78187 +2797 99305 78152 +2798 99343 78119 +2799 99381 78085 +2800 99419 78051 +2801 99458 78019 +2802 99495 77984 +2803 99531 77949 +2804 99566 77914 +2805 99606 77881 +2806 99643 77847 +2807 99679 77812 +2808 99717 77779 +2809 99756 77746 +2810 99793 77712 +2811 99832 77678 +2812 99870 77645 +2813 99906 77610 +2814 99942 77575 +2815 99978 77540 +2816 100015 77505 +2817 100052 77471 +2818 100090 77438 +2819 100125 77401 +2820 100162 77367 +2821 100199 77333 +2822 100236 77299 +2823 100273 77264 +2824 100311 77230 +2825 100348 77196 +2826 100385 77162 +2827 100422 77127 +2828 100458 77092 +2829 100495 77058 +2830 100532 77024 +2831 100568 76989 +2832 100605 76954 +2833 100643 76921 +2834 100682 76888 +2835 100719 76853 +2836 100756 76819 +2837 100793 76785 +2838 100829 76749 +2839 100867 76715 +2840 100905 76682 +2841 100942 76648 +2842 100979 76613 +2843 101016 76579 +2844 101053 76545 +2845 101089 76509 +2846 101125 76474 +2847 101164 76441 +2848 101201 76406 +2849 101236 76371 +2850 101271 76335 +2851 101308 76301 +2852 101346 76267 +2853 101384 76233 +2854 101422 76199 +2855 101457 76164 +2856 101492 76128 +2857 101528 76092 +2858 101566 76059 +2859 101603 76025 +2860 101640 75990 +2861 101675 75954 +2862 101713 75920 +2863 101750 75886 +2864 101789 75853 +2865 101828 75820 +2866 101867 75787 +2867 101905 75753 +2868 101940 75717 +2869 101978 75684 +2870 102014 75649 +2871 102051 75615 +2872 102089 75581 +2873 102127 75547 +2874 102162 75511 +2875 102198 75476 +2876 102235 75441 +2877 102269 75404 +2878 102305 75370 +2879 102340 75334 +2880 102377 75299 +2881 102414 75265 +2882 102450 75229 +2883 102487 75195 +2884 102522 75159 +2885 102558 75124 +2886 102593 75088 +2887 102629 75052 +2888 102663 75016 +2889 102701 74982 +2890 102738 74948 +2891 102775 74914 +2892 102811 74878 +2893 102848 74844 +2894 102887 74810 +2895 102924 74776 +2896 102960 74741 +2897 102996 74706 +2898 103032 74671 +2899 103070 74637 +2900 103107 74602 +2901 103145 74568 +2902 103182 74534 +2903 103219 74499 +2904 103256 74465 +2905 103293 74431 +2906 103330 74396 +2907 103367 74361 +2908 103405 74328 +2909 103442 74293 +2910 103477 74257 +2911 103513 74222 +2912 103550 74187 +2913 103588 74154 +2914 103626 74120 +2915 103661 74084 +2916 103699 74050 +2917 103737 74016 +2918 103774 73982 +2919 103810 73947 +2920 103847 73913 +2921 103885 73879 +2922 103923 73845 +2923 103961 73811 +2924 103997 73776 +2925 104033 73740 +2926 104070 73706 +2927 104106 73670 +2928 104142 73635 +2929 104178 73600 +2930 104213 73564 +2931 104249 73529 +2932 104286 73495 +2933 104325 73461 +2934 104361 73426 +2935 104398 73391 +2936 104436 73357 +2937 104473 73323 +2938 104508 73287 +2939 104546 73254 +2940 104584 73219 +2941 104621 73185 +2942 104657 73149 +2943 104696 73116 +2944 104732 73081 +2945 104765 73044 +2946 104803 73010 +2947 104840 72976 +2948 104877 72940 +2949 104914 72906 +2950 104950 72871 +2951 104987 72836 +2952 105023 72801 +2953 105063 72769 +2954 105099 72734 +2955 105137 72699 +2956 105173 72664 +2957 105210 72630 +2958 105247 72595 +2959 105280 72558 +2960 105316 72522 +2961 105354 72488 +2962 105390 72453 +2963 105427 72419 +2964 105464 72384 +2965 105500 72348 +2966 105538 72315 +2967 105574 72279 +2968 105608 72243 +2969 105643 72207 +2970 105680 72172 +2971 105719 72139 +2972 105752 72102 +2973 105789 72067 +2974 105830 72035 +2975 105865 71999 +2976 105901 71964 +2977 105936 71928 +2978 105989 71904 +2979 106026 71870 +2980 106061 71834 +2981 106098 71800 +2982 106136 71765 +2983 106172 71730 +2984 106209 71695 +2985 106245 71660 +2986 106281 71625 +2987 106318 71590 +2988 106355 71556 +2989 106389 71519 +2990 106425 71484 +2991 106462 71449 +2992 106497 71413 +2993 106534 71378 +2994 106570 71343 +2995 106606 71308 +2996 106643 71273 +2997 106678 71237 +2998 106714 71202 +2999 106750 71166 +3000 106789 71133 +3001 106826 71099 +3002 106865 71065 +3003 106900 71030 +3004 106938 70995 +3005 106977 70962 +3006 107015 70928 +3007 107053 70894 +3008 107089 70858 +3009 107126 70824 +3010 107162 70789 +3011 107201 70755 +3012 107237 70720 +3013 107274 70685 +3014 107312 70651 +3015 107350 70617 +3016 107383 70580 +3017 107422 70546 +3018 107459 70512 +3019 107495 70476 +3020 107531 70441 +3021 107569 70407 +3022 107605 70372 +3023 107641 70337 +3024 107675 70300 +3025 107711 70265 +3026 107750 70231 +3027 107785 70196 +3028 107824 70162 +3029 107861 70127 +3030 107898 70093 +3031 107936 70059 +3032 107973 70024 +3033 108011 69990 +3034 108049 69956 +3035 108085 69921 +3036 108122 69886 +3037 108160 69852 +3038 108196 69816 +3039 108230 69780 +3040 108268 69745 +3041 108304 69710 +3042 108341 69676 +3043 108380 69642 +3044 108416 69607 +3045 108453 69572 +3046 108491 69538 +3047 108528 69503 +3048 108566 69470 +3049 108605 69436 +3050 108640 69400 +3051 108677 69365 +3052 108715 69331 +3053 108752 69296 +3054 108786 69259 +3055 108821 69224 +3056 108856 69188 +3057 108893 69153 +3058 108929 69117 +3059 108967 69084 +3060 109006 69050 +3061 109042 69014 +3062 109081 68981 +3063 109118 68947 +3064 109153 68911 +3065 109189 68875 +3066 109225 68840 +3067 109258 68803 +3068 109295 68768 +3069 109331 68732 +3070 109366 68697 +3071 109404 68662 +3072 109440 68627 +3073 109475 68591 +3074 109509 68555 +3075 109545 68519 +3076 109580 68483 +3077 109616 68448 +3078 109653 68413 +3079 109689 68377 +3080 109723 68341 +3081 109757 68304 +3082 109795 68270 +3083 109832 68235 +3084 109868 68200 +3085 109905 68165 +3086 109942 68130 +3087 109977 68094 +3088 110013 68059 +3089 110049 68024 +3090 110086 67989 +3091 110124 67955 +3092 110158 67918 +3093 110196 67884 +3094 110234 67850 +3095 110268 67813 +3096 110305 67778 +3097 110339 67742 +3098 110375 67706 +3099 110411 67671 +3100 110448 67636 +3101 110485 67602 +3102 110521 67566 +3103 110557 67531 +3104 110592 67495 +3105 110629 67460 +3106 110666 67425 +3107 110704 67391 +3108 110741 67356 +3109 110778 67322 +3110 110814 67286 +3111 110851 67251 +3112 110886 67215 +3113 110921 67179 +3114 110955 67143 +3115 110990 67106 +3116 111027 67072 +3117 111064 67037 +3118 111101 67002 +3119 111136 66966 +3120 111173 66931 +3121 111208 66895 +3122 111244 66860 +3123 111279 66824 +3124 111315 66789 +3125 111352 66754 +3126 111388 66719 +3127 111422 66682 +3128 111457 66646 +3129 111494 66611 +3130 111530 66576 +3131 111567 66541 +3132 111603 66506 +3133 111637 66469 +3134 111673 66433 +3135 111710 66399 +3136 111746 66364 +3137 111782 66328 +3138 111820 66294 +3139 111856 66258 +3140 111890 66222 +3141 111926 66186 +3142 111960 66150 +3143 111999 66116 +3144 112036 66081 +3145 112074 66047 +3146 112111 66013 +3147 112147 65977 +3148 112183 65942 +3149 112217 65905 +3150 112253 65870 +3151 112289 65834 +3152 112326 65799 +3153 112360 65763 +3154 112397 65728 +3155 112436 65694 +3156 112474 65660 +3157 112510 65625 +3158 112546 65589 +3159 112583 65554 +3160 112619 65519 +3161 112655 65483 +3162 112692 65449 +3163 112729 65414 +3164 112768 65380 +3165 112803 65344 +3166 112839 65309 +3167 112875 65273 +3168 112909 65237 +3169 112946 65202 +3170 112983 65167 +3171 113020 65132 +3172 113055 65096 +3173 113091 65061 +3174 113127 65025 +3175 113164 64991 +3176 113201 64956 +3177 113235 64919 +3178 113272 64884 +3179 113308 64849 +3180 113343 64813 +3181 113378 64777 +3182 113415 64742 +3183 113451 64707 +3184 113486 64671 +3185 113521 64635 +3186 113556 64599 +3187 113592 64563 +3188 113630 64529 +3189 113665 64493 +3190 113702 64458 +3191 113738 64423 +3192 113772 64386 +3193 113807 64350 +3194 113851 64319 +3195 113889 64285 +3196 113926 64250 +3197 113964 64216 +3198 114000 64180 +3199 114033 64143 +3200 114068 64107 +3201 114104 64072 +3202 114140 64037 +3203 114178 64002 +3204 114213 63966 +3205 114248 63930 +3206 114284 63895 +3207 114319 63859 +3208 114353 63822 +3209 114390 63787 +3210 114424 63751 +3211 114483 63728 +3212 114520 63693 +3213 114556 63658 +3214 114592 63622 +3215 114629 63587 +3216 114665 63552 +3217 114700 63516 +3218 114735 63480 +3219 114772 63445 +3220 114808 63409 +3221 114843 63374 +3222 114881 63339 +3223 114917 63304 +3224 114950 63267 +3225 114986 63231 +3226 115023 63196 +3227 115059 63161 +3228 115095 63126 +3229 115134 63092 +3230 115168 63055 +3231 115205 63020 +3232 115243 62986 +3233 115281 62951 +3234 115318 62916 +3235 115353 62881 +3236 115390 62846 +3237 115428 62811 +3238 115464 62776 +3239 115500 62740 +3240 115537 62705 +3241 115572 62670 +3242 115608 62634 +3243 115647 62600 +3244 115684 62565 +3245 115717 62528 +3246 115751 62492 +3247 115788 62457 +3248 115824 62421 +3249 115857 62384 +3250 115891 62348 +3251 115928 62313 +3252 115963 62277 +3253 115998 62241 +3254 116034 62205 +3255 116072 62171 +3256 116109 62136 +3257 116146 62101 +3258 116183 62066 +3259 116219 62031 +3260 116253 61994 +3261 116290 61959 +3262 116324 61923 +3263 116359 61887 +3264 116396 61852 +3265 116432 61816 +3266 116468 61781 +3267 116503 61745 +3268 116537 61708 +3269 116574 61673 +3270 116608 61637 +3271 116643 61601 +3272 116681 61567 +3273 116719 61532 +3274 116754 61496 +3275 116793 61462 +3276 116831 61428 +3277 116867 61393 +3278 116903 61357 +3279 116942 61323 +3280 116979 61288 +3281 117015 61253 +3282 117050 61217 +3283 117088 61182 +3284 117125 61147 +3285 117160 61111 +3286 117198 61077 +3287 117234 61041 +3288 117270 61006 +3289 117305 60970 +3290 117341 60935 +3291 117378 60899 +3292 117414 60864 +3293 117451 60829 +3294 117486 60793 +3295 117522 60758 +3296 117559 60722 +3297 117594 60687 +3298 117628 60650 +3299 117664 60615 +3300 117700 60579 +3301 117734 60543 +3302 117770 60507 +3303 117807 60472 +3304 117842 60436 +3305 117878 60401 +3306 117914 60365 +3307 117950 60330 +3308 117987 60295 +3309 118022 60259 +3310 118059 60224 +3311 118094 60188 +3312 118131 60153 +3313 118170 60119 +3314 118205 60083 +3315 118242 60048 +3316 118279 60013 +3317 118314 59977 +3318 118350 59941 +3319 118388 59907 +3320 118425 59872 +3321 118460 59836 +3322 118496 59800 +3323 118531 59764 +3324 118564 59728 +3325 118601 59692 +3326 118638 59657 +3327 118676 59623 +3328 118714 59588 +3329 118751 59554 +3330 118789 59519 +3331 118825 59484 +3332 118858 59447 +3333 118896 59412 +3334 118935 59378 +3335 118969 59341 +3336 119005 59306 +3337 119040 59270 +3338 119075 59234 +3339 119111 59199 +3340 119149 59164 +3341 119186 59129 +3342 119223 59094 +3343 119261 59060 +3344 119297 59024 +3345 119334 58989 +3346 119371 58954 +3347 119408 58919 +3348 119445 58884 +3349 119484 58850 +3350 119522 58816 +3351 119560 58781 +3352 119597 58746 +3353 119633 58710 +3354 119670 58675 +3355 119705 58639 +3356 119741 58604 +3357 119778 58569 +3358 119814 58534 +3359 119850 58498 +3360 119887 58463 +3361 119922 58427 +3362 119958 58391 +3363 119993 58355 +3364 120029 58320 +3365 120066 58285 +3366 120102 58249 +3367 120138 58214 +3368 120174 58178 +3369 120210 58143 +3370 120245 58107 +3371 120280 58071 +3372 120314 58035 +3373 120349 57998 +3374 120385 57963 +3375 120420 57927 +3376 120459 57893 +3377 120495 57857 +3378 120533 57823 +3379 120571 57788 +3380 120607 57753 +3381 120644 57717 +3382 120682 57683 +3383 120720 57649 +3384 120757 57614 +3385 120795 57579 +3386 120832 57544 +3387 120869 57509 +3388 120909 57475 +3389 120947 57441 +3390 120982 57405 +3391 121018 57369 +3392 121055 57334 +3393 121092 57299 +3394 121130 57265 +3395 121166 57229 +3396 121199 57192 +3397 121238 57158 +3398 121275 57123 +3399 121311 57087 +3400 121346 57051 +3401 121381 57015 +3402 121417 56980 +3403 121453 56944 +3404 121488 56908 +3405 121524 56873 +3406 121561 56837 +3407 121595 56801 +3408 121631 56766 +3409 121669 56731 +3410 121706 56696 +3411 121744 56661 +3412 121779 56625 +3413 121816 56590 +3414 121852 56555 +3415 121887 56519 +3416 121923 56483 +3417 121962 56449 +3418 121998 56414 +3419 122033 56378 +3420 122067 56341 +3421 122103 56306 +3422 122140 56271 +3423 122175 56235 +3424 122212 56199 +3425 122252 56166 +3426 122288 56130 +3427 122324 56095 +3428 122361 56060 +3429 122398 56025 +3430 122435 55989 +3431 122470 55954 +3432 122507 55918 +3433 122546 55884 +3434 122585 55850 +3435 122622 55815 +3436 122657 55779 +3437 122692 55743 +3438 122728 55707 +3439 122763 55671 +3440 122801 55637 +3441 122836 55601 +3442 122872 55565 +3443 122909 55530 +3444 122945 55495 +3445 122984 55460 +3446 123022 55426 +3447 123060 55391 +3448 123096 55356 +3449 123131 55320 +3450 123167 55284 +3451 123205 55249 +3452 123241 55214 +3453 123277 55178 +3454 123313 55143 +3455 123350 55108 +3456 123387 55072 +3457 123424 55037 +3458 123461 55002 +3459 123497 54967 +3460 123533 54931 +3461 123569 54896 +3462 123605 54860 +3463 123641 54824 +3464 123677 54789 +3465 123711 54752 +3466 123748 54717 +3467 123784 54682 +3468 123821 54647 +3469 123858 54612 +3470 123894 54576 +3471 123931 54541 +3472 123970 54507 +3473 124007 54471 +3474 124044 54437 +3475 124080 54401 +3476 124115 54365 +3477 124153 54330 +3478 124189 54294 +3479 124229 54261 +3480 124266 54225 +3481 124303 54190 +3482 124343 54157 +3483 124379 54121 +3484 124414 54085 +3485 124450 54049 +3486 124488 54015 +3487 124522 53978 +3488 124559 53943 +3489 124595 53908 +3490 124630 53872 +3491 124668 53837 +3492 124705 53802 +3493 124742 53767 +3494 124781 53732 +3495 124816 53696 +3496 124850 53660 +3497 124885 53624 +3498 124924 53589 +3499 124962 53555 +3500 124997 53519 +3501 125035 53484 +3502 125071 53449 +3503 125107 53413 +3504 125144 53378 +3505 125181 53343 +3506 125230 53313 +3507 125268 53278 +3508 125305 53243 +3509 125342 53208 +3510 125376 53171 +3511 125414 53137 +3512 125452 53102 +3513 125487 53066 +3514 125524 53030 +3515 125561 52995 +3516 125596 52959 +3517 125633 52924 +3518 125669 52888 +3519 125706 52854 +3520 125744 52819 +3521 125781 52783 +3522 125818 52748 +3523 125853 52712 +3524 125889 52677 +3525 125926 52641 +3526 125961 52605 +3527 125998 52570 +3528 126034 52535 +3529 126072 52500 +3530 126111 52465 +3531 126146 52430 +3532 126183 52394 +3533 126220 52359 +3534 126257 52324 +3535 126295 52289 +3536 126334 52255 +3537 126372 52220 +3538 126410 52185 +3539 126445 52149 +3540 126482 52114 +3541 126518 52079 +3542 126554 52043 +3543 126590 52007 +3544 126627 51972 +3545 126663 51936 +3546 126700 51901 +3547 126736 51866 +3548 126772 51830 +3549 126808 51795 +3550 126842 51758 +3551 126879 51723 +3552 126914 51687 +3553 126949 51651 +3554 126988 51617 +3555 127023 51580 +3556 127059 51545 +3557 127097 51510 +3558 127134 51475 +3559 127169 51439 +3560 127204 51403 +3561 127241 51368 +3562 127280 51333 +3563 127317 51298 +3564 127353 51262 +3565 127390 51227 +3566 127426 51192 +3567 127462 51156 +3568 127495 51119 +3569 127532 51084 +3570 127568 51048 +3571 127603 51012 +3572 127641 50977 +3573 127675 50941 +3574 127714 50907 +3575 127748 50870 +3576 127787 50836 +3577 127824 50801 +3578 127860 50765 +3579 127896 50729 +3580 127934 50694 +3581 127970 50659 +3582 128005 50623 +3583 128040 50587 +3584 128075 50551 +3585 128111 50515 +3586 128149 50480 +3587 128185 50445 +3588 128223 50410 +3589 128258 50374 +3590 128295 50339 +3591 128331 50303 +3592 128368 50268 +3593 128409 50234 +3594 128447 50200 +3595 128483 50164 +3596 128521 50129 +3597 128557 50093 +3598 128593 50058 +3599 128631 50023 +3600 128667 49987 +3601 128703 49952 +3602 128739 49916 +3603 128776 49881 +3604 128813 49845 +3605 128850 49810 +3606 128888 49775 +3607 128924 49740 +3608 128961 49705 +3609 128996 49669 +3610 129034 49633 +3611 129072 49599 +3612 129109 49564 +3613 129146 49528 +3614 129182 49492 +3615 129217 49457 +3616 129255 49422 +3617 129292 49386 +3618 129328 49351 +3619 129366 49316 +3620 129404 49281 +3621 129440 49246 +3622 129476 49210 +3623 129511 49174 +3624 129548 49139 +3625 129584 49103 +3626 129622 49068 +3627 129659 49033 +3628 129695 48997 +3629 129732 48962 +3630 129768 48926 +3631 129806 48892 +3632 129843 48856 +3633 129879 48820 +3634 129916 48785 +3635 129953 48750 +3636 129990 48715 +3637 130027 48679 +3638 130063 48644 +3639 130098 48608 +3640 130135 48572 +3641 130172 48537 +3642 130207 48501 +3643 130241 48465 +3644 130276 48429 +3645 130313 48393 +3646 130347 48357 +3647 130383 48321 +3648 130420 48286 +3649 130457 48251 +3650 130494 48216 +3651 130530 48180 +3652 130566 48144 +3653 130601 48108 +3654 130636 48072 +3655 130673 48037 +3656 130709 48001 +3657 130748 47967 +3658 130786 47932 +3659 130824 47897 +3660 130860 47861 +3661 130896 47826 +3662 130932 47790 +3663 130968 47754 +3664 131006 47719 +3665 131042 47684 +3666 131080 47649 +3667 131117 47614 +3668 131154 47578 +3669 131191 47543 +3670 131228 47508 +3671 131265 47473 +3672 131302 47437 +3673 131339 47402 +3674 131373 47366 +3675 131407 47329 +3676 131447 47295 +3677 131485 47260 +3678 131523 47225 +3679 131560 47190 +3680 131596 47154 +3681 131634 47119 +3682 131669 47083 +3683 131704 47047 +3684 131739 47011 +3685 131778 46977 +3686 131814 46941 +3687 131852 46906 +3688 131887 46870 +3689 131923 46834 +3690 131961 46799 +3691 131999 46764 +3692 132037 46729 +3693 132074 46694 +3694 132111 46659 +3695 132146 46623 +3696 132182 46587 +3697 132218 46551 +3698 132255 46516 +3699 132291 46480 +3700 132329 46445 +3701 132366 46410 +3702 132403 46375 +3703 132438 46339 +3704 132478 46304 +3705 132512 46268 +3706 132548 46232 +3707 132584 46197 +3708 132619 46161 +3709 132656 46125 +3710 132692 46090 +3711 132728 46054 +3712 132764 46018 +3713 132802 45983 +3714 132838 45948 +3715 132874 45912 +3716 132912 45877 +3717 132950 45842 +3718 132987 45807 +3719 133025 45772 +3720 133062 45736 +3721 133100 45701 +3722 133137 45666 +3723 133175 45631 +3724 133211 45595 +3725 133246 45559 +3726 133282 45524 +3727 133318 45488 +3728 133355 45453 +3729 133392 45417 +3730 133428 45382 +3731 133462 45345 +3732 133505 45312 +3733 133543 45277 +3734 133581 45242 +3735 133617 45206 +3736 133652 45170 +3737 133687 45134 +3738 133724 45099 +3739 133761 45064 +3740 133798 45028 +3741 133834 44993 +3742 133870 44957 +3743 133905 44921 +3744 133942 44886 +3745 133979 44850 +3746 134015 44814 +3747 134051 44779 +3748 134088 44743 +3749 134124 44708 +3750 134159 44672 +3751 134196 44636 +3752 134232 44601 +3753 134270 44566 +3754 134305 44530 +3755 134343 44495 +3756 134380 44459 +3757 134417 44424 +3758 134456 44389 +3759 134493 44354 +3760 134529 44318 +3761 134565 44282 +3762 134600 44246 +3763 134636 44211 +3764 134673 44175 +3765 134711 44140 +3766 134747 44105 +3767 134784 44069 +3768 134822 44034 +3769 134859 43999 +3770 134894 43963 +3771 134932 43928 +3772 134967 43892 +3773 135004 43856 +3774 135039 43820 +3775 135077 43785 +3776 135116 43750 +3777 135151 43714 +3778 135186 43678 +3779 135221 43642 +3780 135256 43606 +3781 135292 43571 +3782 135330 43536 +3783 135367 43500 +3784 135402 43464 +3785 135439 43429 +3786 135475 43393 +3787 135513 43358 +3788 135549 43323 +3789 135585 43287 +3790 135619 43250 +3791 135657 43215 +3792 135693 43180 +3793 135731 43144 +3794 135768 43109 +3795 135803 43073 +3796 135840 43038 +3797 135876 43002 +3798 135912 42966 +3799 135949 42931 +3800 135984 42895 +3801 136022 42860 +3802 136059 42824 +3803 136094 42789 +3804 136131 42753 +3805 136169 42718 +3806 136207 42683 +3807 136244 42648 +3808 136280 42612 +3809 136319 42577 +3810 136355 42541 +3811 136391 42506 +3812 136428 42470 +3813 136463 42434 +3814 136499 42399 +3815 136535 42363 +3816 136574 42328 +3817 136614 42293 +3818 136650 42258 +3819 136686 42222 +3820 136725 42187 +3821 136758 42151 +3822 136795 42115 +3823 136830 42079 +3824 136866 42044 +3825 136902 42008 +3826 136939 41972 +3827 136976 41937 +3828 137013 41902 +3829 137052 41867 +3830 137090 41832 +3831 137125 41796 +3832 137162 41760 +3833 137199 41725 +3834 137235 41689 +3835 137273 41654 +3836 137309 41618 +3837 137346 41583 +3838 137384 41548 +3839 137420 41512 +3840 137458 41477 +3841 137496 41442 +3842 137533 41406 +3843 137570 41371 +3844 137608 41336 +3845 137647 41301 +3846 137685 41266 +3847 137724 41231 +3848 137759 41195 +3849 137795 41159 +3850 137829 41123 +3851 137865 41087 +3852 137900 41051 +3853 137938 41016 +3854 137973 40980 +3855 138007 40944 +3856 138044 40908 +3857 138079 40872 +3858 138115 40837 +3859 138151 40801 +3860 138187 40765 +3861 138222 40729 +3862 138257 40693 +3863 138293 40657 +3864 138330 40622 +3865 138366 40586 +3866 138403 40551 +3867 138436 40514 +3868 138474 40479 +3869 138511 40443 +3870 138546 40408 +3871 138584 40372 +3872 138620 40336 +3873 138654 40300 +3874 138690 40264 +3875 138727 40229 +3876 138761 40193 +3877 138797 40157 +3878 138834 40122 +3879 138870 40086 +3880 138906 40050 +3881 138943 40015 +3882 138979 39979 +3883 139017 39944 +3884 139053 39908 +3885 139088 39872 +3886 139125 39837 +3887 139162 39801 +3888 139197 39765 +3889 139232 39729 +3890 139267 39693 +3891 139303 39657 +3892 139337 39621 +3893 139371 39585 +3894 139405 39549 +3895 139443 39513 +3896 139479 39478 +3897 139514 39442 +3898 139550 39406 +3899 139587 39370 +3900 139622 39334 +3901 139660 39299 +3902 139694 39263 +3903 139731 39227 +3904 139767 39192 +3905 139804 39156 +3906 139841 39121 +3907 139876 39085 +3908 139912 39049 +3909 139948 39013 +3910 139984 38978 +3911 140020 38942 +3912 140055 38906 +3913 140091 38870 +3914 140126 38834 +3915 140163 38799 +3916 140198 38763 +3917 140235 38727 +3918 140270 38691 +3919 140306 38655 +3920 140341 38619 +3921 140379 38584 +3922 140416 38549 +3923 140452 38513 +3924 140487 38477 +3925 140524 38441 +3926 140561 38406 +3927 140597 38370 +3928 140633 38335 +3929 140671 38299 +3930 140707 38264 +3931 140744 38228 +3932 140780 38192 +3933 140818 38157 +3934 140854 38121 +3935 140888 38085 +3936 140923 38049 +3937 140959 38014 +3938 140995 37978 +3939 141029 37942 +3940 141064 37905 +3941 141102 37870 +3942 141137 37834 +3943 141173 37798 +3944 141209 37763 +3945 141245 37727 +3946 141281 37691 +3947 141319 37656 +3948 141355 37620 +3949 141392 37585 +3950 141431 37550 +3951 141467 37514 +3952 141503 37478 +3953 141541 37443 +3954 141576 37407 +3955 141610 37371 +3956 141648 37336 +3957 141683 37300 +3958 141721 37265 +3959 141757 37229 +3960 141795 37193 +3961 141830 37157 +3962 141866 37122 +3963 141902 37086 +3964 141937 37050 +3965 141973 37014 +3966 142009 36979 +3967 142046 36943 +3968 142083 36908 +3969 142118 36872 +3970 142155 36836 +3971 142190 36800 +3972 142224 36764 +3973 142261 36728 +3974 142298 36693 +3975 142332 36657 +3976 142367 36621 +3977 142401 36584 +3978 142437 36549 +3979 142473 36513 +3980 142508 36477 +3981 142543 36441 +3982 142578 36405 +3983 142613 36369 +3984 142648 36333 +3985 142682 36297 +3986 142718 36261 +3987 142756 36225 +3988 142792 36190 +3989 142830 36155 +3990 142864 36118 +3991 142898 36082 +3992 142933 36046 +3993 142969 36010 +3994 143007 35975 +3995 143043 35939 +3996 143080 35904 +3997 143116 35868 +3998 143150 35832 +3999 143186 35796 +4000 143224 35761 +4001 143261 35725 +4002 143296 35689 +4003 143334 35654 +4004 143371 35619 +4005 143407 35583 +4006 143444 35547 +4007 143482 35512 +4008 143517 35476 +4009 143553 35440 +4010 143593 35406 +4011 143632 35371 +4012 143669 35335 +4013 143702 35299 +4014 143738 35263 +4015 143775 35227 +4016 143831 35196 +4017 143869 35161 +4018 143904 35125 +4019 143941 35090 +4020 143977 35054 +4021 144013 35018 +4022 144048 34982 +4023 144084 34946 +4024 144119 34910 +4025 144154 34874 +4026 144190 34839 +4027 144227 34803 +4028 144263 34767 +4029 144299 34732 +4030 144336 34696 +4031 144371 34660 +4032 144408 34624 +4033 144444 34589 +4034 144480 34553 +4035 144515 34517 +4036 144552 34481 +4037 144586 34445 +4038 144622 34410 +4039 144656 34373 +4040 144692 34338 +4041 144728 34302 +4042 144764 34266 +4043 144802 34231 +4044 144838 34195 +4045 144873 34159 +4046 144910 34123 +4047 144945 34088 +4048 144984 34052 +4049 145019 34016 +4050 145055 33981 +4051 145090 33945 +4052 145126 33909 +4053 145163 33873 +4054 145199 33838 +4055 145234 33802 +4056 145272 33766 +4057 145308 33731 +4058 145346 33695 +4059 145381 33659 +4060 145416 33623 +4061 145452 33588 +4062 145487 33551 +4063 145525 33516 +4064 145558 33480 +4065 145593 33444 +4066 145628 33408 +4067 145663 33372 +4068 145699 33336 +4069 145735 33300 +4070 145773 33265 +4071 145809 33229 +4072 145846 33194 +4073 145883 33158 +4074 145922 33123 +4075 145959 33088 +4076 145993 33051 +4077 146031 33016 +4078 146066 32980 +4079 146102 32944 +4080 146140 32909 +4081 146177 32873 +4082 146211 32837 +4083 146246 32801 +4084 146282 32765 +4085 146316 32729 +4086 146355 32694 +4087 146392 32659 +4088 146430 32623 +4089 146467 32588 +4090 146505 32552 +4091 146540 32516 +4092 146575 32480 +4093 146612 32445 +4094 146647 32409 +4095 146683 32373 +4096 146731 32340 +4097 146769 32305 +4098 146804 32269 +4099 146842 32233 +4100 146879 32198 +4101 146916 32162 +4102 146951 32126 +4103 146987 32090 +4104 147023 32055 +4105 147059 32019 +4106 147095 31983 +4107 147132 31947 +4108 147170 31912 +4109 147207 31877 +4110 147244 31841 +4111 147279 31805 +4112 147315 31769 +4113 147353 31734 +4114 147388 31698 +4115 147423 31662 +4116 147462 31627 +4117 147498 31591 +4118 147534 31555 +4119 147569 31519 +4120 147604 31483 +4121 147640 31447 +4122 147676 31412 +4123 147713 31376 +4124 147749 31340 +4125 147787 31305 +4126 147823 31269 +4127 147860 31234 +4128 147895 31198 +4129 147931 31162 +4130 147967 31126 +4131 148003 31090 +4132 148039 31054 +4133 148072 31018 +4134 148110 30983 +4135 148145 30947 +4136 148182 30911 +4137 148219 30876 +4138 148257 30840 +4139 148293 30804 +4140 148329 30769 +4141 148365 30733 +4142 148401 30697 +4143 148438 30662 +4144 148475 30626 +4145 148512 30590 +4146 148547 30554 +4147 148584 30519 +4148 148622 30483 +4149 148659 30448 +4150 148694 30412 +4151 148731 30376 +4152 148769 30341 +4153 148804 30305 +4154 148841 30269 +4155 148877 30234 +4156 148912 30198 +4157 148949 30162 +4158 148987 30126 +4159 149022 30091 +4160 149058 30055 +4161 149095 30019 +4162 149131 29983 +4163 149167 29948 +4164 149205 29912 +4165 149241 29876 +4166 149277 29841 +4167 149313 29805 +4168 149348 29769 +4169 149382 29733 +4170 149418 29697 +4171 149454 29661 +4172 149490 29625 +4173 149527 29590 +4174 149562 29554 +4175 149597 29518 +4176 149635 29482 +4177 149669 29446 +4178 149707 29411 +4179 149743 29375 +4180 149780 29340 +4181 149816 29304 +4182 149852 29268 +4183 149887 29232 +4184 149923 29196 +4185 149959 29160 +4186 149997 29125 +4187 150034 29089 +4188 150071 29054 +4189 150105 29018 +4190 150141 28982 +4191 150176 28946 +4192 150212 28910 +4193 150248 28874 +4194 150283 28838 +4195 150319 28802 +4196 150354 28766 +4197 150388 28730 +4198 150424 28694 +4199 150460 28659 +4200 150494 28623 +4201 150529 28586 +4202 150566 28551 +4203 150603 28515 +4204 150639 28479 +4205 150676 28444 +4206 150713 28408 +4207 150750 28373 +4208 150786 28337 +4209 150821 28301 +4210 150856 28265 +4211 150893 28229 +4212 150931 28194 +4213 150966 28158 +4214 151004 28123 +4215 151042 28087 +4216 151078 28051 +4217 151114 28015 +4218 151147 27979 +4219 151185 27944 +4220 151221 27908 +4221 151255 27872 +4222 151292 27836 +4223 151328 27800 +4224 151366 27765 +4225 151404 27729 +4226 151439 27694 +4227 151474 27658 +4228 151511 27622 +4229 151548 27586 +4230 151585 27551 +4231 151621 27515 +4232 151658 27479 +4233 151696 27444 +4234 151731 27408 +4235 151790 27376 +4236 151828 27341 +4237 151864 27305 +4238 151898 27269 +4239 151934 27233 +4240 151969 27197 +4241 152006 27161 +4242 152042 27126 +4243 152080 27090 +4244 152115 27054 +4245 152151 27018 +4246 152186 26982 +4247 152222 26947 +4248 152256 26910 +4249 152291 26875 +4250 152327 26839 +4251 152362 26803 +4252 152411 26769 +4253 152449 26734 +4254 152486 26698 +4255 152522 26662 +4256 152559 26627 +4257 152597 26591 +4258 152632 26555 +4259 152669 26519 +4260 152706 26484 +4261 152745 26449 +4262 152782 26413 +4263 152819 26377 +4264 152855 26342 +4265 152892 26306 +4266 152927 26270 +4267 152963 26234 +4268 152999 26198 +4269 153037 26163 +4270 153074 26127 +4271 153112 26092 +4272 153149 26056 +4273 153187 26021 +4274 153227 25985 +4275 153266 25950 +4276 153302 25914 +4277 153339 25879 +4278 153377 25843 +4279 153413 25807 +4280 153451 25772 +4281 153488 25736 +4282 153525 25701 +4283 153561 25665 +4284 153598 25629 +4285 153634 25593 +4286 153671 25558 +4287 153708 25522 +4288 153744 25486 +4289 153781 25451 +4290 153817 25415 +4291 153854 25379 +4292 153891 25343 +4293 153926 25307 +4294 153961 25271 +4295 154000 25236 +4296 154036 25200 +4297 154073 25165 +4298 154111 25129 +4299 154148 25093 +4300 154184 25058 +4301 154220 25022 +4302 154258 24986 +4303 154296 24951 +4304 154331 24915 +4305 154370 24879 +4306 154406 24844 +4307 154443 24808 +4308 154481 24772 +4309 154519 24737 +4310 154555 24701 +4311 154591 24665 +4312 154629 24630 +4313 154664 24594 +4314 154698 24558 +4315 154734 24522 +4316 154771 24486 +4317 154808 24450 +4318 154845 24415 +4319 154882 24379 +4320 154918 24343 +4321 154951 24307 +4322 154987 24271 +4323 155024 24236 +4324 155061 24200 +4325 155098 24164 +4326 155135 24129 +4327 155172 24093 +4328 155208 24057 +4329 155246 24021 +4330 155284 23986 +4331 155320 23950 +4332 155356 23914 +4333 155391 23878 +4334 155428 23843 +4335 155465 23807 +4336 155503 23771 +4337 155539 23736 +4338 155574 23700 +4339 155610 23664 +4340 155648 23628 +4341 155684 23592 +4342 155719 23556 +4343 155754 23520 +4344 155791 23485 +4345 155828 23449 +4346 155865 23413 +4347 155899 23377 +4348 155934 23341 +4349 155969 23305 +4350 156006 23270 +4351 156043 23234 +4352 156083 23199 +4353 156120 23163 +4354 156158 23127 +4355 156198 23092 +4356 156234 23056 +4357 156273 23021 +4358 156311 22985 +4359 156347 22950 +4360 156383 22914 +4361 156419 22878 +4362 156455 22842 +4363 156492 22806 +4364 156530 22771 +4365 156566 22735 +4366 156601 22699 +4367 156637 22663 +4368 156681 22629 +4369 156718 22593 +4370 156755 22557 +4371 156792 22521 +4372 156828 22486 +4373 156864 22450 +4374 156901 22414 +4375 156938 22378 +4376 156973 22342 +4377 157011 22307 +4378 157048 22271 +4379 157084 22235 +4380 157120 22199 +4381 157158 22164 +4382 157195 22128 +4383 157243 22094 +4384 157282 22058 +4385 157318 22023 +4386 157360 21988 +4387 157396 21952 +4388 157432 21916 +4389 157470 21880 +4390 157506 21845 +4391 157543 21809 +4392 157581 21773 +4393 157617 21737 +4394 157653 21702 +4395 157690 21666 +4396 157726 21630 +4397 157763 21594 +4398 157799 21558 +4399 157836 21523 +4400 157872 21487 +4401 157909 21451 +4402 157946 21415 +4403 157983 21380 +4404 158021 21344 +4405 158058 21308 +4406 158095 21273 +4407 158132 21237 +4408 158168 21201 +4409 158205 21165 +4410 158243 21130 +4411 158279 21094 +4412 158316 21058 +4413 158352 21022 +4414 158386 20986 +4415 158423 20950 +4416 158459 20915 +4417 158495 20879 +4418 158531 20843 +4419 158567 20807 +4420 158603 20771 +4421 158639 20735 +4422 158674 20699 +4423 158710 20663 +4424 158746 20628 +4425 158781 20592 +4426 158819 20556 +4427 158856 20520 +4428 158893 20485 +4429 158931 20449 +4430 158967 20413 +4431 159005 20378 +4432 159042 20342 +4433 159079 20306 +4434 159117 20270 +4435 159154 20235 +4436 159191 20199 +4437 159227 20163 +4438 159265 20127 +4439 159303 20092 +4440 159340 20056 +4441 159377 20020 +4442 159414 19985 +4443 159451 19949 +4444 159487 19913 +4445 159522 19877 +4446 159557 19841 +4447 159593 19805 +4448 159630 19769 +4449 159666 19734 +4450 159702 19698 +4451 159739 19662 +4452 159776 19626 +4453 159814 19591 +4454 159851 19555 +4455 159885 19519 +4456 159922 19483 +4457 159957 19447 +4458 159994 19411 +4459 160031 19375 +4460 160065 19339 +4461 160102 19304 +4462 160139 19268 +4463 160176 19232 +4464 160213 19196 +4465 160251 19161 +4466 160300 19126 +4467 160340 19091 +4468 160378 19055 +4469 160416 19020 +4470 160450 18984 +4471 160486 18948 +4472 160522 18912 +4473 160559 18876 +4474 160597 18841 +4475 160633 18805 +4476 160668 18769 +4477 160705 18733 +4478 160740 18697 +4479 160777 18661 +4480 160815 18625 +4481 160853 18590 +4482 160891 18554 +4483 160927 18518 +4484 160966 18483 +4485 161002 18447 +4486 161038 18411 +4487 161076 18375 +4488 161112 18340 +4489 161148 18304 +4490 161184 18268 +4491 161220 18232 +4492 161258 18196 +4493 161294 18160 +4494 161330 18124 +4495 161366 18089 +4496 161401 18053 +4497 161436 18017 +4498 161469 17980 +4499 161505 17945 +4500 161543 17909 +4501 161579 17873 +4502 161615 17837 +4503 161650 17801 +4504 161688 17766 +4505 161726 17730 +4506 161765 17694 +4507 161802 17659 +4508 161838 17623 +4509 161876 17587 +4510 161915 17551 +4511 161952 17516 +4512 161988 17480 +4513 162027 17444 +4514 162063 17408 +4515 162100 17373 +4516 162135 17337 +4517 162170 17301 +4518 162205 17265 +4519 162242 17229 +4520 162279 17193 +4521 162316 17157 +4522 162354 17122 +4523 162391 17086 +4524 162426 17050 +4525 162461 17014 +4526 162497 16978 +4527 162533 16942 +4528 162570 16906 +4529 162607 16870 +4530 162642 16835 +4531 162678 16799 +4532 162714 16763 +4533 162749 16727 +4534 162785 16691 +4535 162822 16655 +4536 162859 16619 +4537 162895 16583 +4538 162934 16548 +4539 162969 16512 +4540 163005 16476 +4541 163041 16440 +4542 163079 16404 +4543 163115 16369 +4544 163151 16333 +4545 163186 16297 +4546 163223 16261 +4547 163262 16225 +4548 163296 16189 +4549 163332 16153 +4550 163370 16118 +4551 163408 16082 +4552 163445 16046 +4553 163482 16010 +4554 163519 15974 +4555 163556 15939 +4556 163592 15903 +4557 163629 15867 +4558 163665 15831 +4559 163701 15795 +4560 163738 15759 +4561 163776 15724 +4562 163813 15688 +4563 163850 15652 +4564 163885 15616 +4565 163922 15580 +4566 163958 15545 +4567 163993 15509 +4568 164029 15473 +4569 164067 15437 +4570 164104 15401 +4571 164140 15365 +4572 164178 15330 +4573 164213 15294 +4574 164250 15258 +4575 164286 15222 +4576 164322 15186 +4577 164358 15150 +4578 164395 15114 +4579 164430 15078 +4580 164465 15042 +4581 164501 15006 +4582 164537 14970 +4583 164574 14935 +4584 164611 14899 +4585 164646 14863 +4586 164683 14827 +4587 164719 14791 +4588 164756 14755 +4589 164793 14720 +4590 164831 14684 +4591 164867 14648 +4592 164902 14612 +4593 164938 14576 +4594 164975 14540 +4595 165012 14505 +4596 165049 14469 +4597 165086 14433 +4598 165122 14397 +4599 165159 14361 +4600 165195 14325 +4601 165231 14289 +4602 165267 14254 +4603 165304 14218 +4604 165341 14182 +4605 165378 14146 +4606 165418 14111 +4607 165455 14075 +4608 165493 14039 +4609 165528 14003 +4610 165563 13967 +4611 165600 13931 +4612 165635 13895 +4613 165672 13859 +4614 165710 13824 +4615 165746 13788 +4616 165783 13752 +4617 165819 13716 +4618 165857 13680 +4619 165892 13644 +4620 165928 13608 +4621 165963 13572 +4622 166000 13537 +4623 166036 13501 +4624 166072 13465 +4625 166106 13429 +4626 166143 13393 +4627 166179 13357 +4628 166215 13321 +4629 166251 13285 +4630 166289 13249 +4631 166328 13214 +4632 166364 13178 +4633 166401 13142 +4634 166439 13106 +4635 166476 13071 +4636 166514 13035 +4637 166551 12999 +4638 166588 12963 +4639 166624 12927 +4640 166661 12891 +4641 166698 12856 +4642 166735 12820 +4643 166771 12784 +4644 166807 12748 +4645 166846 12712 +4646 166883 12676 +4647 166921 12641 +4648 166958 12605 +4649 166993 12569 +4650 167028 12533 +4651 167065 12497 +4652 167102 12461 +4653 167139 12425 +4654 167176 12390 +4655 167211 12354 +4656 167248 12318 +4657 167284 12282 +4658 167321 12246 +4659 167357 12210 +4660 167392 12174 +4661 167429 12138 +4662 167465 12102 +4663 167500 12066 +4664 167538 12031 +4665 167574 11995 +4666 167612 11959 +4667 167649 11923 +4668 167684 11887 +4669 167720 11851 +4670 167757 11815 +4671 167793 11779 +4672 167828 11744 +4673 167865 11708 +4674 167900 11672 +4675 167937 11636 +4676 167974 11600 +4677 168008 11564 +4678 168044 11528 +4679 168080 11492 +4680 168116 11456 +4681 168152 11420 +4682 168188 11384 +4683 168222 11348 +4684 168259 11313 +4685 168294 11277 +4686 168328 11241 +4687 168364 11205 +4688 168399 11169 +4689 168433 11133 +4690 168470 11097 +4691 168506 11061 +4692 168542 11025 +4693 168578 10989 +4694 168613 10953 +4695 168648 10917 +4696 168684 10881 +4697 168719 10845 +4698 168754 10809 +4699 168790 10773 +4700 168826 10737 +4701 168860 10701 +4702 168897 10666 +4703 168931 10630 +4704 168965 10593 +4705 169002 10558 +4706 169037 10522 +4707 169073 10486 +4708 169107 10450 +4709 169142 10414 +4710 169178 10378 +4711 169213 10342 +4712 169247 10306 +4713 169282 10270 +4714 169319 10234 +4715 169353 10198 +4716 169390 10162 +4717 169426 10126 +4718 169461 10090 +4719 169497 10054 +4720 169535 10019 +4721 169573 9983 +4722 169612 9947 +4723 169647 9911 +4724 169684 9875 +4725 169719 9839 +4726 169756 9803 +4727 169791 9768 +4728 169827 9732 +4729 169863 9696 +4730 169900 9660 +4731 169936 9624 +4732 169973 9588 +4733 170011 9552 +4734 170044 9516 +4735 170080 9480 +4736 170118 9445 +4737 170155 9409 +4738 170191 9373 +4739 170229 9337 +4740 170265 9301 +4741 170302 9265 +4742 170339 9229 +4743 170376 9193 +4744 170411 9158 +4745 170446 9122 +4746 170479 9086 +4747 170516 9050 +4748 170551 9014 +4749 170588 8978 +4750 170633 8942 +4751 170670 8907 +4752 170704 8871 +4753 170739 8835 +4754 170774 8799 +4755 170812 8763 +4756 170849 8727 +4757 170884 8691 +4758 170921 8655 +4759 170957 8619 +4760 170992 8583 +4761 171028 8547 +4762 171065 8511 +4763 171102 8476 +4764 171136 8440 +4765 171171 8404 +4766 171206 8368 +4767 171240 8332 +4768 171276 8296 +4769 171311 8260 +4770 171346 8224 +4771 171383 8188 +4772 171417 8152 +4773 171454 8116 +4774 171488 8080 +4775 171525 8044 +4776 171563 8008 +4777 171602 7973 +4778 171640 7937 +4779 171674 7901 +4780 171707 7865 +4781 171746 7829 +4782 171781 7793 +4783 171816 7757 +4784 171851 7721 +4785 171888 7685 +4786 171926 7649 +4787 171961 7614 +4788 171997 7578 +4789 172035 7542 +4790 172071 7506 +4791 172107 7470 +4792 172142 7434 +4793 172179 7398 +4794 172216 7362 +4795 172253 7326 +4796 172290 7291 +4797 172328 7255 +4798 172363 7219 +4799 172401 7183 +4800 172439 7147 +4801 172477 7111 +4802 172512 7075 +4803 172549 7039 +4804 172585 7004 +4805 172620 6968 +4806 172659 6932 +4807 172696 6896 +4808 172733 6860 +4809 172767 6824 +4810 172803 6788 +4811 172841 6752 +4812 172877 6716 +4813 172912 6680 +4814 172949 6644 +4815 172983 6608 +4816 173016 6572 +4817 173052 6537 +4818 173087 6501 +4819 173123 6465 +4820 173160 6429 +4821 173196 6393 +4822 173230 6357 +4823 173265 6321 +4824 173300 6285 +4825 173337 6249 +4826 173372 6213 +4827 173408 6177 +4828 173445 6141 +4829 173481 6105 +4830 173517 6070 +4831 173554 6034 +4832 173590 5998 +4833 173627 5962 +4834 173663 5926 +4835 173701 5890 +4836 173736 5854 +4837 173772 5818 +4838 173806 5782 +4839 173843 5746 +4840 173879 5710 +4841 173916 5675 +4842 173952 5639 +4843 173990 5603 +4844 174026 5567 +4845 174063 5531 +4846 174097 5495 +4847 174133 5459 +4848 174169 5423 +4849 174203 5387 +4850 174239 5351 +4851 174275 5315 +4852 174311 5279 +4853 174346 5244 +4854 174382 5208 +4855 174416 5172 +4856 174452 5136 +4857 174489 5100 +4858 174526 5064 +4859 174565 5028 +4860 174600 4992 +4861 174635 4956 +4862 174672 4920 +4863 174708 4884 +4864 174744 4849 +4865 174779 4813 +4866 174815 4777 +4867 174853 4741 +4868 174888 4705 +4869 174923 4669 +4870 174959 4633 +4871 174996 4597 +4872 175029 4561 +4873 175065 4525 +4874 175099 4489 +4875 175135 4453 +4876 175170 4417 +4877 175206 4381 +4878 175243 4346 +4879 175282 4310 +4880 175318 4274 +4881 175355 4238 +4882 175390 4202 +4883 175427 4166 +4884 175462 4130 +4885 175497 4094 +4886 175532 4058 +4887 175568 4022 +4888 175604 3986 +4889 175641 3951 +4890 175677 3915 +4891 175715 3879 +4892 175751 3843 +4893 175788 3807 +4894 175825 3771 +4895 175862 3735 +4896 175898 3699 +4897 175933 3663 +4898 175969 3627 +4899 176005 3591 +4900 176040 3556 +4901 176076 3520 +4902 176112 3484 +4903 176147 3448 +4904 176183 3412 +4905 176217 3376 +4906 176254 3340 +4907 176289 3304 +4908 176325 3268 +4909 176363 3232 +4910 176398 3196 +4911 176433 3160 +4912 176468 3124 +4913 176503 3088 +4914 176538 3053 +4915 176573 3017 +4916 176609 2981 +4917 176644 2945 +4918 176679 2909 +4919 176715 2873 +4920 176752 2837 +4921 176789 2801 +4922 176825 2765 +4923 176860 2729 +4924 176897 2693 +4925 176932 2657 +4926 176969 2622 +4927 177006 2586 +4928 177043 2550 +4929 177080 2514 +4930 177116 2478 +4931 177154 2442 +4932 177191 2406 +4933 177229 2370 +4934 177266 2334 +4935 177304 2298 +4936 177343 2263 +4937 177379 2227 +4938 177415 2191 +4939 177450 2155 +4940 177484 2119 +4941 177518 2083 +4942 177554 2047 +4943 177591 2011 +4944 177627 1975 +4945 177662 1939 +4946 177696 1903 +4947 177734 1867 +4948 177772 1831 +4949 177807 1796 +4950 177848 1760 +4951 177884 1724 +4952 177920 1688 +4953 177955 1652 +4954 177991 1616 +4955 178027 1580 +4956 178065 1544 +4957 178102 1508 +4958 178137 1472 +4959 178176 1436 +4960 178212 1400 +4961 178248 1365 +4962 178286 1329 +4963 178321 1293 +4964 178356 1257 +4965 178391 1221 +4966 178427 1185 +4967 178462 1149 +4968 178498 1113 +4969 178536 1077 +4970 178572 1041 +4971 178609 1005 +4972 178644 969 +4973 178680 933 +4974 178715 898 +4975 178750 862 +4976 178786 826 +4977 178822 790 +4978 178858 754 +4979 178894 718 +4980 178930 682 +4981 178965 646 +4982 179002 610 +4983 179038 574 +4984 179073 538 +4985 179109 502 +4986 179146 466 +4987 179182 431 +4988 179219 395 +4989 179255 359 +4990 179291 323 +4991 179328 287 +4992 179363 251 +4993 179400 215 +4994 179435 179 +4995 179471 143 +4996 179507 107 +4997 179543 71 +4998 179579 35 +4999 179618 0 diff --git a/code/train/catboost_info/tmp/cat_feature_index.7083db21-2a602535-fc74a793-f24f9ca1.tmp b/code/train/catboost_info/tmp/cat_feature_index.7083db21-2a602535-fc74a793-f24f9ca1.tmp new file mode 100644 index 0000000..593f470 Binary files /dev/null and b/code/train/catboost_info/tmp/cat_feature_index.7083db21-2a602535-fc74a793-f24f9ca1.tmp differ diff --git a/code/train/catboost_info/tmp/cat_feature_index.c8182d04-ba2f7d40-17be2993-7ebf9fac.tmp b/code/train/catboost_info/tmp/cat_feature_index.c8182d04-ba2f7d40-17be2993-7ebf9fac.tmp new file mode 100644 index 0000000..593f470 Binary files /dev/null and b/code/train/catboost_info/tmp/cat_feature_index.c8182d04-ba2f7d40-17be2993-7ebf9fac.tmp differ diff --git a/code/train/catboost_info/tmp/cat_feature_index.d44701fd-1e864ae1-30a8fb3f-c689cc7f.tmp b/code/train/catboost_info/tmp/cat_feature_index.d44701fd-1e864ae1-30a8fb3f-c689cc7f.tmp new file mode 100644 index 0000000..593f470 Binary files /dev/null and b/code/train/catboost_info/tmp/cat_feature_index.d44701fd-1e864ae1-30a8fb3f-c689cc7f.tmp differ diff --git a/code/train/catboost_info/tmp/cat_feature_index.ea11afac-3656bfa6-7640c1ea-9df76981.tmp b/code/train/catboost_info/tmp/cat_feature_index.ea11afac-3656bfa6-7640c1ea-9df76981.tmp new file mode 100644 index 0000000..593f470 Binary files /dev/null and b/code/train/catboost_info/tmp/cat_feature_index.ea11afac-3656bfa6-7640c1ea-9df76981.tmp differ diff --git a/code/train/code.ipynb b/code/train/code.ipynb new file mode 100644 index 0000000..a0bb1e6 --- /dev/null +++ b/code/train/code.ipynb @@ -0,0 +1,384 @@ +{ + "cells": [ + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "\n", + "\n", + "def get_technical_factor(df):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " df['return_skew'] = grouped['pct_chg'].rolling(window=5).skew().reset_index(0, drop=True)\n", + " df['return_kurtosis'] = grouped['pct_chg'].rolling(window=5).kurt().reset_index(0, drop=True)\n", + "\n", + " # 因子 1:短期成交量变化率\n", + " df['volume_change_rate'] = (\n", + " grouped['vol'].rolling(window=2).mean() /\n", + " grouped['vol'].rolling(window=5).mean() - 1\n", + " ).reset_index(level=0, drop=True) # 确保索引对齐\n", + "\n", + " # 因子 2:成交量突破信号\n", + " max_volume = grouped['vol'].rolling(window=5).max().reset_index(level=0, drop=True) # 确保索引对齐\n", + " df['cat_volume_breakout'] = (df['vol'] > max_volume)\n", + "\n", + " # 因子 3:换手率均线偏离度\n", + " mean_turnover = grouped['turnover_rate'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + " std_turnover = grouped['turnover_rate'].rolling(window=3).std().reset_index(level=0, drop=True)\n", + " df['turnover_deviation'] = (df['turnover_rate'] - mean_turnover) / std_turnover\n", + "\n", + " # 因子 4:换手率激增信号\n", + " df['cat_turnover_spike'] = (df['turnover_rate'] > mean_turnover + 2 * std_turnover)\n", + "\n", + " # 因子 5:量比均值\n", + " df['avg_volume_ratio'] = grouped['volume_ratio'].rolling(window=3).mean().reset_index(level=0, drop=True)\n", + "\n", + " # 因子 6:量比突破信号\n", + " max_volume_ratio = grouped['volume_ratio'].rolling(window=5).max().reset_index(level=0, drop=True)\n", + " df['cat_volume_ratio_breakout'] = (df['volume_ratio'] > max_volume_ratio)\n", + "\n", + " # 因子 7:成交量与换手率的综合动量因子\n", + " alpha = 0.5\n", + " df['momentum_factor'] = df['volume_change_rate'] + alpha * df['turnover_deviation']\n", + "\n", + " # 因子 8:量价共振因子\n", + " df['price_change_rate'] = grouped['close'].pct_change()\n", + " df['resonance_factor'] = df['volume_ratio'] * df['price_change_rate']\n", + "\n", + " # 计算 up 和 down\n", + " df['log_close'] = np.log(df['close'])\n", + "\n", + " df['vol_spike'] = grouped.apply(\n", + " lambda x: pd.Series(x['vol'].rolling(20).mean(), index=x.index)\n", + " )\n", + " df['cat_vol_spike'] = df['vol'] > 2 * df['vol_spike']\n", + " df['vol_std_5'] = df['vol'].pct_change().rolling(5).std()\n", + "\n", + " df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close']\n", + " df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close']\n", + "\n", + " # 计算 ATR\n", + " df['atr_14'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14),\n", + " index=x.index)\n", + " )\n", + " df['atr_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6),\n", + " index=x.index)\n", + " )\n", + "\n", + " # 计算 OBV 及其均线\n", + " df['obv'] = grouped.apply(\n", + " lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index)\n", + " )\n", + " df['maobv_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['obv-maobv_6'] = df['obv'] - df['maobv_6']\n", + "\n", + " # 计算 RSI\n", + " df['rsi_3'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index)\n", + " )\n", + " df['rsi_6'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index)\n", + " )\n", + " df['rsi_9'] = grouped.apply(\n", + " lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index)\n", + " )\n", + "\n", + " # 计算 return_10 和 return_20\n", + " df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1)\n", + " df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1)\n", + " df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1)\n", + "\n", + " # df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x)\n", + "\n", + " # 计算标准差指标\n", + " df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std())\n", + " df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std())\n", + " df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std())\n", + " df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std())\n", + " df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std())\n", + "\n", + " # 计算比值指标\n", + " df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90']\n", + " df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25']\n", + "\n", + " # 计算标准差差值\n", + " df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2']\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_act_factor(df, cat=True):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + " # 计算 EMA 指标\n", + " df['_ema_5'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index)\n", + " )\n", + " df['_ema_13'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index)\n", + " )\n", + " df['_ema_20'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index)\n", + " )\n", + " df['_ema_60'] = grouped['close'].apply(\n", + " lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index)\n", + " )\n", + "\n", + " # 计算 act_factor1, act_factor2, act_factor3, act_factor4\n", + " df['act_factor1'] = grouped['_ema_5'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50\n", + " )\n", + " df['act_factor2'] = grouped['_ema_13'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40\n", + " )\n", + " df['act_factor3'] = grouped['_ema_20'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21\n", + " )\n", + " df['act_factor4'] = grouped['_ema_60'].apply(\n", + " lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10\n", + " )\n", + "\n", + " if cat:\n", + " df['cat_af1'] = df['act_factor1'] > 0\n", + " df['cat_af2'] = df['act_factor2'] > df['act_factor1']\n", + " df['cat_af3'] = df['act_factor3'] > df['act_factor2']\n", + " df['cat_af4'] = df['act_factor4'] > df['act_factor3']\n", + "\n", + " # 计算 act_factor5 和 act_factor6\n", + " df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4']\n", + " df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt(\n", + " df['act_factor1'] ** 2 + df['act_factor2'] ** 2)\n", + "\n", + " # 根据 trade_date 截面计算排名\n", + " df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True)\n", + " df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True)\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_money_flow_factor(df):\n", + " # 计算资金流相关因子(字段名称见 tushare 数据说明)\n", + " df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol']\n", + " df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol']\n", + "\n", + " df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol']\n", + " df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol']\n", + "\n", + " df['log(circ_mv)'] = np.log(df['circ_mv'])\n", + " return df\n", + "\n", + "\n", + "def get_alpha_factor(df):\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + " grouped = df.groupby('ts_code')\n", + "\n", + " # alpha_022: 当前 close 与 5 日前 close 差值\n", + " df['alpha_022'] = grouped['close'].transform(lambda x: x - x.shift(5))\n", + "\n", + " # alpha_003: (close - open) / (high - low)\n", + " df['alpha_003'] = np.where(df['high'] != df['low'],\n", + " (df['close'] - df['open']) / (df['high'] - df['low']),\n", + " 0)\n", + "\n", + " # alpha_007: 计算过去5日 close 与 vol 的相关性,并按 trade_date 排名\n", + " df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True)\n", + " df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True)\n", + "\n", + " # alpha_013: 计算过去5日 close 之和 - 20日 close 之和,并按 trade_date 排名\n", + " df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum())\n", + " df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True)\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_limit_factor(df):\n", + " # 按股票和日期排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " # 分组处理\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " # 1. 今日是否涨停/跌停\n", + " df['cat_up_limit'] = (df['close'] == df['up_limit']).astype(int) # 是否涨停(1表示涨停,0表示未涨停)\n", + " df['cat_down_limit'] = (df['close'] == df['down_limit']).astype(int) # 是否跌停(1表示跌停,0表示未跌停)\n", + "\n", + " # 2. 最近涨跌停次数(过去20个交易日)\n", + " df['up_limit_count_10d'] = grouped['cat_up_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + " df['down_limit_count_10d'] = grouped['cat_down_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0,\n", + " drop=True)\n", + "\n", + " # 3. 最近连续涨跌停天数\n", + " def calculate_consecutive_limits(series):\n", + " \"\"\"\n", + " 计算连续涨停/跌停天数。\n", + " \"\"\"\n", + " consecutive_up = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " consecutive_down = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1)\n", + " return consecutive_up, consecutive_down\n", + "\n", + " # 连续涨停天数\n", + " df['consecutive_up_limit'] = grouped['cat_up_limit'].apply(\n", + " lambda x: calculate_consecutive_limits(x)[0]\n", + " ).reset_index(level=0, drop=True)\n", + "\n", + " # 连续跌停天数\n", + " # df['consecutive_down_limit'] = grouped['cat_down_limit'].apply(\n", + " # lambda x: calculate_consecutive_limits(x)[1]\n", + " # ).reset_index(level=0, drop=True)\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_cyp_perf_factor(df):\n", + " # 预处理:按股票代码和时间排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " # 按股票代码分组处理\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " df['ctrl_strength'] = (df['cost_85pct'] - df['cost_15pct']) / (df['his_high'] - df['his_low'])\n", + "\n", + " df['low_cost_dev'] = (df['close'] - df['cost_5pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['asymmetry'] = (df['cost_95pct'] - df['cost_50pct']) / (df['cost_50pct'] - df['cost_5pct'])\n", + "\n", + " df['lock_factor'] = df['turnover_rate'] * (\n", + " 1 - (df['cost_95pct'] - df['cost_5pct']) / (df['his_high'] - df['his_low']))\n", + "\n", + " df['vol_break'] = np.where((df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2), 1, 0)\n", + "\n", + " df['weight_roc5'] = grouped['weight_avg'].apply(lambda x: x.pct_change(5))\n", + "\n", + " def rolling_corr(group):\n", + " roc_close = group['close'].pct_change()\n", + " roc_weight = group['weight_avg'].pct_change()\n", + " return roc_close.rolling(10).corr(roc_weight)\n", + "\n", + " df['price_cost_divergence'] = grouped.apply(rolling_corr)\n", + "\n", + " def calc_atr(group):\n", + " high, low, close = group['high'], group['low'], group['close']\n", + " tr = np.maximum(high - low,\n", + " np.maximum(abs(high - close.shift()),\n", + " abs(low - close.shift())))\n", + " return tr.rolling(14).mean()\n", + "\n", + " df['atr_14'] = grouped.apply(calc_atr)\n", + " df['cost_atr_adj'] = (df['cost_95pct'] - df['cost_5pct']) / df['atr_14']\n", + "\n", + " # 12. 小盘股筹码集中度\n", + " df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct'])\n", + "\n", + " # 16. 筹码稳定性指数 (20日波动率)\n", + " df['weight_std20'] = grouped['weight_avg'].apply(lambda x: x.rolling(20).std())\n", + " df['cost_stability'] = df['weight_std20'] / grouped['weight_avg'].transform(lambda x: x.rolling(20).mean())\n", + "\n", + " # 17. 成本区间突破标记\n", + " df['high_cost_break_days'] = grouped.apply(lambda g: g['close'].gt(g['cost_95pct']).rolling(5).sum())\n", + "\n", + " # 18. 黄金筹码共振 (复合事件)\n", + " df['cat_golden_resonance'] = ((df['close'] > df['weight_avg']) &\n", + " (df['volume_ratio'] > 1.5) &\n", + " (df['winner_rate'] > 0.7))\n", + "\n", + " # 20. 筹码-流动性风险\n", + " df['liquidity_risk'] = (df['cost_95pct'] - df['cost_5pct']) * (\n", + " 1 / grouped['vol'].transform(lambda x: x.rolling(10).mean()))\n", + "\n", + " df.drop(columns=['weight_std20'], inplace=True, errors='ignore')\n", + "\n", + " return df\n", + "\n", + "\n", + "def get_mv_factors(df):\n", + " \"\"\"\n", + " 计算多个因子并生成最终的综合因子。\n", + "\n", + " 参数:\n", + " df (pd.DataFrame): 包含 ts_code, trade_date, turnover_rate, pe_ttm, pb, ps, circ_mv, volume_ratio, vol 等列的数据框。\n", + "\n", + " 返回:\n", + " pd.DataFrame: 包含新增因子和最终综合因子的数据框。\n", + " \"\"\"\n", + " # 按 ts_code 和 trade_date 排序\n", + " df = df.sort_values(by=['ts_code', 'trade_date'])\n", + "\n", + " # 按 ts_code 分组\n", + " grouped = df.groupby('ts_code', group_keys=False)\n", + "\n", + " # 1. 市值流动比因子\n", + " df['mv_turnover_ratio'] = df['turnover_rate'] / df['circ_mv']\n", + "\n", + " # 2. 市值调整成交量因子\n", + " df['mv_adjusted_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " # 3. 市值加权换手率因子\n", + " df['mv_weighted_turnover'] = df['turnover_rate'] * (1 / df['circ_mv'])\n", + "\n", + " # 4. 非线性市值成交量因子\n", + " df['nonlinear_mv_volume'] = df['vol'] / df['circ_mv']\n", + "\n", + " # 5. 市值量比因子\n", + " df['mv_volume_ratio'] = df['volume_ratio'] / df['circ_mv']\n", + "\n", + " # 6. 市值动量因子\n", + " df['mv_momentum'] = df['turnover_rate'] * df['volume_ratio'] / df['circ_mv']\n", + "\n", + " # 7. 市值波动率因子\n", + " df['turnover_std'] = grouped['turnover_rate'].rolling(window=20).std().reset_index(level=0, drop=True)\n", + " df['mv_volatility'] = grouped.apply(lambda x: x['turnover_std'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " # 8. 市值成长性因子\n", + " df['volume_growth'] = grouped['vol'].pct_change(periods=20).reset_index(level=0, drop=True)\n", + " df['mv_growth'] = grouped.apply(lambda x: x['volume_growth'] / x['circ_mv']).reset_index(level=0, drop=True)\n", + "\n", + " # # 标准化因子\n", + " # factor_columns = [\n", + " # 'mv_turnover_ratio', 'mv_adjusted_volume', 'mv_weighted_turnover',\n", + " # 'nonlinear_mv_volume', 'mv_volume_ratio', 'mv_momentum',\n", + " # 'mv_volatility', 'mv_growth'\n", + " # ]\n", + " # scaler = StandardScaler()\n", + " # df[factor_columns] = scaler.fit_transform(df[factor_columns])\n", + " #\n", + " # # 加权合成因子\n", + " # weights = [0.2, 0.15, 0.15, 0.1, 0.1, 0.1, 0.1, 0.1] # 各因子权重\n", + " # df['final_combined_factor'] = df[factor_columns].dot(weights)\n", + "\n", + " return df" + ], + "id": "505e825945e4b8cf" + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/code/train/predictions.tsv b/code/train/predictions.tsv new file mode 100644 index 0000000..8b9bdff --- /dev/null +++ b/code/train/predictions.tsv @@ -0,0 +1,1359 @@ +trade_date,score,ts_code +2017-06-06,0.9792771978028909,600612.SH +2017-06-07,0.977708890232353,600612.SH +2017-06-08,0.983417748100082,600651.SH +2017-06-09,0.983246676479826,600611.SH +2017-06-12,0.9848851878005606,600611.SH +2017-06-13,0.987266633600615,600611.SH +2017-06-14,0.9847572038517239,600611.SH +2017-06-15,0.9861676293245814,600611.SH +2017-06-16,0.9860626192352899,000002.SZ +2017-06-19,0.986629192758206,600622.SH +2017-06-20,0.9862617499446108,600622.SH +2017-06-21,0.9856763516722852,600621.SH +2017-06-22,0.9846136314891523,600616.SH +2017-06-23,0.9869350257724956,600519.SH +2017-06-26,0.987310181118494,600611.SH +2017-06-27,0.9872121796528486,600611.SH +2017-06-28,0.9856894867089396,600622.SH +2017-06-29,0.9847766437158131,600612.SH +2017-06-30,0.985293420191102,600651.SH +2017-07-03,0.9841205065717499,600620.SH +2017-07-04,0.9863403532499786,600651.SH +2017-07-05,0.9874824504670711,600651.SH +2017-07-06,0.9881775393416772,600651.SH +2017-07-07,0.9872157495096682,600651.SH +2017-07-10,0.98818038901273,600620.SH +2017-07-11,0.9877628633708306,600620.SH +2017-07-12,0.9910735220248974,600601.SH +2017-07-13,0.9898007908901383,600620.SH +2017-07-14,0.9879857341726727,600651.SH +2017-07-17,0.9857739989347243,600622.SH +2017-07-18,0.9839947231994457,600622.SH +2017-07-19,0.9844060118545995,000568.SZ +2017-07-20,0.9845378853295399,600601.SH +2017-07-21,0.9844953226956968,600651.SH +2017-07-24,0.9848586233415936,600651.SH +2017-07-25,0.9856870298460575,600651.SH +2017-07-26,0.9852573743549891,600519.SH +2017-07-27,0.9855809880789572,600519.SH +2017-07-28,0.9858450241674511,600611.SH +2017-07-31,0.9864915132142532,600519.SH +2017-08-01,0.9863918351608066,600622.SH +2017-08-02,0.9864595697873465,000651.SZ +2017-08-03,0.9865627925068153,600519.SH +2017-08-04,0.9914924538492762,000651.SZ +2017-08-07,0.9863804015402894,600611.SH +2017-08-08,0.9885283551318323,600519.SH +2017-08-09,0.9883247114447078,600616.SH +2017-08-10,0.9902367628652944,600651.SH +2017-08-11,0.9895177159215952,600611.SH +2017-08-14,0.9838825812870864,600622.SH +2017-08-15,0.9875890314799173,600652.SH +2017-08-16,0.9879185069010644,600622.SH +2017-08-17,0.9899218523001471,600519.SH +2017-08-18,0.9848298787434691,600614.SH +2017-08-21,0.9889955923500934,600652.SH +2017-08-22,0.9905411100002887,600651.SH +2017-08-23,0.9897603969888674,600614.SH +2017-08-24,0.9927278322369076,000651.SZ +2017-08-25,0.9901011600964907,600621.SH +2017-08-28,0.9912015303208196,600614.SH +2017-08-29,0.9897452505806377,600651.SH +2017-08-30,0.9893760311099565,600620.SH +2017-08-31,0.9904191025562743,600651.SH +2017-09-01,0.9916272148520812,600616.SH +2017-09-04,0.9917495446027549,000002.SZ +2017-09-05,0.9926486447577658,600616.SH +2017-09-06,0.9909542804154061,600620.SH +2017-09-07,0.9917512373440288,600620.SH +2017-09-08,0.9903848925715317,600622.SH +2017-09-11,0.9896001815706417,600622.SH +2017-09-12,0.9887112410320237,600601.SH +2017-09-13,0.9896138355435685,600651.SH +2017-09-14,0.9896273265034253,600651.SH +2017-09-15,0.9911392181667198,600601.SH +2017-09-18,0.9922409056974835,600601.SH +2017-09-19,0.9926678638871562,600651.SH +2017-09-20,0.9913801953570427,600651.SH +2017-09-21,0.9904067411611358,600651.SH +2017-09-22,0.9899495486101814,600651.SH +2017-09-25,0.9900774042662902,600519.SH +2017-09-26,0.9899283843160969,600616.SH +2017-09-27,0.9902755916168999,600602.SH +2017-09-28,0.991375360318179,600602.SH +2017-09-29,0.9901778144324205,600602.SH +2017-10-09,0.9904790950332131,600601.SH +2017-10-10,0.9918884347417258,600601.SH +2017-10-11,0.9917540497896526,600601.SH +2017-10-12,0.9909185771760292,000002.SZ +2017-10-13,0.9919683801420404,000002.SZ +2017-10-16,0.9901791257112612,600616.SH +2017-10-17,0.9885371163022113,600602.SH +2017-10-18,0.9890716940833254,000002.SZ +2017-10-19,0.9905946310172892,600616.SH +2017-10-20,0.9880046818495988,600616.SH +2017-10-23,0.988708626552004,600616.SH +2017-10-24,0.9890763387639029,600611.SH +2017-10-25,0.986472867007105,600602.SH +2017-10-26,0.9862798676956535,600612.SH +2017-10-27,0.9857980135184512,600612.SH +2017-10-30,0.9850212272058593,600611.SH +2017-10-31,0.9841156548752064,600611.SH +2017-11-01,0.9859020868058997,600611.SH +2017-11-02,0.9848786785031204,600622.SH +2017-11-03,0.9854830059986858,600611.SH +2017-11-06,0.9862144405456303,600611.SH +2017-11-07,0.9821864473906471,600066.SH +2017-11-08,0.9824725507798179,600622.SH +2017-11-09,0.9856076062150072,000002.SZ +2017-11-10,0.9865912954224171,000002.SZ +2017-11-13,0.9869397219698266,000002.SZ +2017-11-14,0.9846252320856339,600614.SH +2017-11-15,0.984048662521476,600620.SH +2017-11-16,0.9837002327711067,600612.SH +2017-11-17,0.9889929815185896,600612.SH +2017-11-20,0.9877263362936969,600622.SH +2017-11-21,0.9858412863497614,600612.SH +2017-11-22,0.9853417999611792,600612.SH +2017-11-23,0.9864876811932082,600614.SH +2017-11-24,0.9837724474860139,600614.SH +2017-11-27,0.9839693058475932,600660.SH +2017-11-28,0.9806152082346716,600887.SH +2017-11-29,0.9813497967899386,600887.SH +2017-11-30,0.9816517957568629,000651.SZ +2017-12-01,0.9837213289638179,600519.SH +2017-12-04,0.9856822709839689,600519.SH +2017-12-05,0.9842841710990081,600519.SH +2017-12-06,0.9830395690768329,600519.SH +2017-12-07,0.9851324012165599,600519.SH +2017-12-08,0.983197035811365,600887.SH +2017-12-11,0.9853671179747259,000651.SZ +2017-12-12,0.9859106935228691,600602.SH +2017-12-13,0.9850572036346227,000651.SZ +2017-12-14,0.9856669369512234,600622.SH +2017-12-15,0.9862531039458684,600276.SH +2017-12-18,0.9857117161978787,000002.SZ +2017-12-19,0.9854435483116459,600519.SH +2017-12-20,0.9868438983890775,600612.SH +2017-12-21,0.985752226127299,000651.SZ +2017-12-22,0.9864295328258101,600612.SH +2017-12-25,0.986565359819315,600622.SH +2017-12-26,0.986882290141028,000002.SZ +2017-12-27,0.988199085292406,600602.SH +2017-12-28,0.9850379300071193,600612.SH +2017-12-29,0.9853427526968435,600612.SH +2018-01-02,0.9857603996759916,600612.SH +2018-01-03,0.9862329804114905,600612.SH +2018-01-04,0.9851668928466087,000002.SZ +2018-01-05,0.9862267169563917,600612.SH +2018-01-08,0.9879432825225005,600616.SH +2018-01-09,0.9881386903587859,600612.SH +2018-01-10,0.985564679264619,000001.SZ +2018-01-11,0.9879710074850522,000568.SZ +2018-01-12,0.9857169491772462,000001.SZ +2018-01-15,0.9867280708850433,600652.SH +2018-01-16,0.9825767762898063,600741.SH +2018-01-17,0.9876007784871373,600612.SH +2018-01-18,0.9854701343820962,600612.SH +2018-01-19,0.9867365133400982,600602.SH +2018-01-22,0.9862356653235457,600651.SH +2018-01-23,0.9829497772278804,600612.SH +2018-01-24,0.986949445714857,600612.SH +2018-01-25,0.9859944818565455,600611.SH +2018-01-26,0.9878845620752524,000568.SZ +2018-01-29,0.9851299908563296,600887.SH +2018-01-30,0.985374339280112,600651.SH +2018-01-31,0.9879299670499722,000568.SZ +2018-02-01,0.9872595734916026,600611.SH +2018-02-02,0.987975888163846,000568.SZ +2018-02-05,0.9867431124457562,600519.SH +2018-02-06,0.9849433352967232,600612.SH +2018-02-07,0.9852848569737594,600612.SH +2018-02-08,0.9850690598652722,600276.SH +2018-02-09,0.9858435446003809,600612.SH +2018-02-12,0.9836885170745608,600887.SH +2018-02-13,0.9829030199217856,600612.SH +2018-02-14,0.9830722114174744,600519.SH +2018-02-22,0.9820521960566864,600602.SH +2018-02-23,0.9864837176171944,600602.SH +2018-02-26,0.9877675587649374,600602.SH +2018-02-27,0.9872803459034069,600602.SH +2018-02-28,0.9905932728620886,600519.SH +2018-03-01,0.9875740154890948,600602.SH +2018-03-02,0.9863158132234343,600887.SH +2018-03-05,0.9863650429850468,600612.SH +2018-03-06,0.9862619250981359,600611.SH +2018-03-07,0.987397219209205,600612.SH +2018-03-08,0.98718103594704,600620.SH +2018-03-09,0.9868168111657029,600620.SH +2018-03-12,0.9864816825507907,600620.SH +2018-03-13,0.9851950326714551,600620.SH +2018-03-14,0.9861083981545572,600616.SH +2018-03-15,0.9852462170572807,000568.SZ +2018-03-16,0.987282663556909,600651.SH +2018-03-19,0.9846411237109423,600616.SH +2018-03-20,0.9869406767029008,600602.SH +2018-03-21,0.986502917080806,600616.SH +2018-03-22,0.9876769396703721,600651.SH +2018-03-23,0.9878645799781182,600621.SH +2018-03-26,0.9876531730705217,600651.SH +2018-03-27,0.987363713345791,600651.SH +2018-03-28,0.9858823180674439,600611.SH +2018-03-29,0.9873898708529395,600616.SH +2018-03-30,0.9878721641282344,600611.SH +2018-04-02,0.9876879859633853,600611.SH +2018-04-03,0.9858659596286808,000568.SZ +2018-04-04,0.9858248119413761,000568.SZ +2018-04-09,0.9876658024320947,000568.SZ +2018-04-10,0.9882949314913229,000568.SZ +2018-04-11,0.9881416326977185,000568.SZ +2018-04-12,0.9870660175990443,600602.SH +2018-04-13,0.9859039793698985,000568.SZ +2018-04-16,0.990635200839884,600276.SH +2018-04-17,0.98676805697326,600276.SH +2018-04-18,0.9863720256000282,002024.SZ +2018-04-19,0.9854202185129245,600655.SH +2018-04-20,0.9893582312643248,600276.SH +2018-04-23,0.9876527222655532,600276.SH +2018-04-24,0.9821945232838227,600655.SH +2018-04-25,0.9845181799319348,000651.SZ +2018-04-26,0.985978890927311,000858.SZ +2018-04-27,0.9866945233387499,600276.SH +2018-05-02,0.9889141458726989,600276.SH +2018-05-03,0.9864559487072235,000001.SZ +2018-05-04,0.9889030100532537,600519.SH +2018-05-07,0.9861603638558114,600276.SH +2018-05-08,0.9869368066481617,600276.SH +2018-05-09,0.9902923771419273,600519.SH +2018-05-10,0.9890860164142122,000651.SZ +2018-05-11,0.9873683320069812,600519.SH +2018-05-14,0.9894374418584635,000651.SZ +2018-05-15,0.9894997209278491,000651.SZ +2018-05-16,0.9874263966530754,000651.SZ +2018-05-17,0.9853081722336754,600616.SH +2018-05-18,0.9881705966702756,600616.SH +2018-05-21,0.9873901799388669,600616.SH +2018-05-22,0.9861289044222549,600519.SH +2018-05-23,0.9866625725772311,600519.SH +2018-05-24,0.9882208867292701,600519.SH +2018-05-25,0.9885652255027891,600519.SH +2018-05-28,0.9839875979300242,600519.SH +2018-05-29,0.9842123718514368,000651.SZ +2018-05-30,0.9865777006944516,000651.SZ +2018-05-31,0.984491656273522,600611.SH +2018-06-01,0.9857645282041615,600612.SH +2018-06-04,0.9870311013093861,600612.SH +2018-06-05,0.9851777681216853,600612.SH +2018-06-06,0.9866604167022227,000651.SZ +2018-06-07,0.9864345603979976,000651.SZ +2018-06-08,0.9866598277372949,600612.SH +2018-06-11,0.9867200835470955,600518.SH +2018-06-12,0.9848982830466831,600611.SH +2018-06-13,0.9867497775702575,600611.SH +2018-06-14,0.9866577892709685,600616.SH +2018-06-15,0.9862938587558715,600616.SH +2018-06-19,0.9858187077080025,600612.SH +2018-06-20,0.9867841381326168,600612.SH +2018-06-21,0.9841263666391381,600309.SH +2018-06-22,0.9828512895091719,600611.SH +2018-06-25,0.9828585473324926,600611.SH +2018-06-26,0.9846323397868967,600519.SH +2018-06-27,0.9833905271841265,600612.SH +2018-06-28,0.9847163035479684,600612.SH +2018-06-29,0.9841691187688928,000002.SZ +2018-07-02,0.9848899036080218,600612.SH +2018-07-03,0.9863642845691591,600276.SH +2018-07-04,0.986037163672552,600519.SH +2018-07-05,0.9877441016483067,600612.SH +2018-07-06,0.9887780800921989,600612.SH +2018-07-09,0.9874872971838556,600612.SH +2018-07-10,0.9876124399373736,000651.SZ +2018-07-11,0.9891464273882377,600276.SH +2018-07-12,0.9897939412949255,000651.SZ +2018-07-13,0.9919996778022421,600519.SH +2018-07-16,0.9892806711038712,600519.SH +2018-07-17,0.9882496031909613,000538.SZ +2018-07-18,0.9915997975113293,600612.SH +2018-07-19,0.9879334827360265,600620.SH +2018-07-20,0.9865698167508765,600620.SH +2018-07-23,0.988786245477947,600611.SH +2018-07-24,0.9913017105705304,600602.SH +2018-07-25,0.98879063381843,600611.SH +2018-07-26,0.9871717341217463,600602.SH +2018-07-27,0.9888591350243917,600611.SH +2018-07-30,0.9902915020839462,600602.SH +2018-07-31,0.9894465216367149,600519.SH +2018-08-01,0.9901154483531438,600519.SH +2018-08-02,0.9879843566043439,600611.SH +2018-08-03,0.9888757633802194,600620.SH +2018-08-06,0.9904990570755076,600620.SH +2018-08-07,0.9879224888737669,600611.SH +2018-08-08,0.9900422844277751,600611.SH +2018-08-09,0.9907899255363576,600611.SH +2018-08-10,0.9897642405663076,600611.SH +2018-08-13,0.9901067603396008,600611.SH +2018-08-14,0.9897320597520012,600611.SH +2018-08-15,0.9905916102089171,600611.SH +2018-08-16,0.9900332759066114,600611.SH +2018-08-17,0.9924213767603302,600611.SH +2018-08-20,0.989513570975009,600620.SH +2018-08-21,0.9892493757235131,600620.SH +2018-08-22,0.9923228491072629,600620.SH +2018-08-23,0.9907950564658059,600620.SH +2018-08-24,0.9923738417045882,600620.SH +2018-08-27,0.9911463522028516,600602.SH +2018-08-28,0.991073189858642,600276.SH +2018-08-29,0.9910449142932661,600620.SH +2018-08-30,0.992234222631933,600620.SH +2018-08-31,0.9921260131099335,600620.SH +2018-09-03,0.989199164905445,600620.SH +2018-09-04,0.990139671076839,600620.SH +2018-09-05,0.9903711140162471,600276.SH +2018-09-06,0.9898050741194462,600602.SH +2018-09-07,0.9907811697783558,600602.SH +2018-09-10,0.9925475365708447,600519.SH +2018-09-11,0.9912406658428964,600660.SH +2018-09-12,0.9918230434441299,600611.SH +2018-09-13,0.9899902061667454,600660.SH +2018-09-14,0.990140289655022,600519.SH +2018-09-17,0.9915979163886295,000002.SZ +2018-09-18,0.9904873974731282,000002.SZ +2018-09-19,0.9890874755909735,600621.SH +2018-09-20,0.9906700601115662,600602.SH +2018-09-21,0.9918983767473076,600602.SH +2018-09-25,0.9914656094643226,600611.SH +2018-09-26,0.9922577893847883,600611.SH +2018-09-27,0.9931644813258189,600611.SH +2018-09-28,0.9921535787485959,000002.SZ +2018-10-08,0.9936007830343795,600602.SH +2018-10-09,0.9890059600776075,600611.SH +2018-10-10,0.9939776953966813,600519.SH +2018-10-11,0.9917321881378962,600519.SH +2018-10-12,0.9897237638956644,000002.SZ +2018-10-15,0.9894738707001773,600660.SH +2018-10-16,0.9880245171977298,600611.SH +2018-10-17,0.988672487403609,600611.SH +2018-10-18,0.9887806664315293,600660.SH +2018-10-19,0.9864592207168568,600611.SH +2018-10-22,0.9857194352651891,600611.SH +2018-10-23,0.988666830037206,600519.SH +2018-10-24,0.9887513049112788,600519.SH +2018-10-25,0.9900043405204567,600611.SH +2018-10-26,0.9906747141051689,600660.SH +2018-10-29,0.9909241281126226,000651.SZ +2018-10-30,0.991212096826903,000651.SZ +2018-10-31,0.9923449211146743,600611.SH +2018-11-01,0.9927851068727649,600611.SH +2018-11-02,0.993136220541728,000651.SZ +2018-11-05,0.993154250374379,600612.SH +2018-11-06,0.993831392794097,000651.SZ +2018-11-07,0.9941991797614806,600611.SH +2018-11-08,0.9915125065921716,600611.SH +2018-11-09,0.9902049216961399,600621.SH +2018-11-12,0.9882395727918977,600620.SH +2018-11-13,0.9872870801661081,600620.SH +2018-11-14,0.9896387996907483,600621.SH +2018-11-15,0.9886639212426509,600620.SH +2018-11-16,0.9889502822603863,600616.SH +2018-11-19,0.9904279510078268,600655.SH +2018-11-20,0.9899811029793358,600616.SH +2018-11-21,0.9894563572153146,600620.SH +2018-11-22,0.9929444468007179,600622.SH +2018-11-23,0.9897972664450182,600276.SH +2018-11-26,0.9901398413862957,600635.SH +2018-11-27,0.9889265162833331,600611.SH +2018-11-28,0.9887040689612716,600602.SH +2018-11-29,0.9900631489128013,600611.SH +2018-11-30,0.9904304790493573,600611.SH +2018-12-03,0.9898424232370592,000002.SZ +2018-12-04,0.9876359843201297,600621.SH +2018-12-05,0.9903876228458911,600622.SH +2018-12-06,0.9907545967589408,000002.SZ +2018-12-07,0.9886523897742969,000002.SZ +2018-12-10,0.9924038088383792,600611.SH +2018-12-11,0.9922449219139071,600519.SH +2018-12-12,0.9901400815057299,600611.SH +2018-12-13,0.9896840541995848,600887.SH +2018-12-14,0.9929244645320694,000651.SZ +2018-12-17,0.9923981370027076,600611.SH +2018-12-18,0.9915816358430597,000651.SZ +2018-12-19,0.9917833230801321,000002.SZ +2018-12-20,0.9925561317741243,000651.SZ +2018-12-21,0.9917365006983935,600519.SH +2018-12-24,0.9901790937559705,600519.SH +2018-12-25,0.9903585406449339,600519.SH +2018-12-26,0.9920452374779688,600519.SH +2018-12-27,0.9906110682514851,600519.SH +2018-12-28,0.9924952044514114,000651.SZ +2019-01-02,0.9921346448916263,600611.SH +2019-01-03,0.9925668086837579,600660.SH +2019-01-04,0.9922946169724551,000651.SZ +2019-01-07,0.9931224878601312,000002.SZ +2019-01-08,0.9923450086695965,600660.SH +2019-01-09,0.9931082725190132,600602.SH +2019-01-10,0.9928051862718107,600611.SH +2019-01-11,0.9924841425195414,600611.SH +2019-01-14,0.9927493124957524,000651.SZ +2019-01-15,0.9923759555462888,000651.SZ +2019-01-16,0.9919540058025622,600602.SH +2019-01-17,0.9917029820826967,000651.SZ +2019-01-18,0.9909455917085154,000651.SZ +2019-01-21,0.9932236516566159,600612.SH +2019-01-22,0.9929462413223434,000002.SZ +2019-01-23,0.9906096232332534,000002.SZ +2019-01-24,0.9924376355575933,000002.SZ +2019-01-25,0.9885482794233825,600655.SH +2019-01-28,0.9871892612720647,600622.SH +2019-01-29,0.9878057402263183,600620.SH +2019-01-30,0.9872859126591226,600620.SH +2019-01-31,0.9909409793082936,600602.SH +2019-02-01,0.9867695788669727,600602.SH +2019-02-11,0.9909168252981498,600602.SH +2019-02-12,0.988669975734185,600602.SH +2019-02-13,0.9877056186381385,600602.SH +2019-02-14,0.9898143424981142,600620.SH +2019-02-15,0.9911060085473357,000002.SZ +2019-02-18,0.9904501669541307,000002.SZ +2019-02-19,0.9910754578434545,600620.SH +2019-02-20,0.9902326115418132,600620.SH +2019-02-22,0.9889902922563454,600620.SH +2019-02-25,0.9892093967720503,600276.SH +2019-02-26,0.9888145074660555,000651.SZ +2019-02-27,0.9888875679635698,000651.SZ +2019-02-28,0.9885365645701479,000651.SZ +2019-03-01,0.9851995809605244,000651.SZ +2019-03-04,0.986408373277714,600620.SH +2019-03-05,0.9854836681995314,600276.SH +2019-03-06,0.9873914892955951,000858.SZ +2019-03-07,0.9815455653694498,002236.SZ +2019-03-08,0.9860301287188142,600635.SH +2019-03-11,0.9876674870105329,600614.SH +2019-03-12,0.9854118457917136,002236.SZ +2019-03-13,0.9853590551268829,600614.SH +2019-03-14,0.9874130671192201,600621.SH +2019-03-15,0.9892746656187866,600620.SH +2019-03-18,0.989769058584362,600570.SH +2019-03-19,0.9872455112545369,600616.SH +2019-03-20,0.9894183156580936,600621.SH +2019-03-21,0.988284044755176,600602.SH +2019-03-22,0.9880615360779493,600602.SH +2019-03-25,0.9866779741094441,600620.SH +2019-03-26,0.9860362725809741,600620.SH +2019-03-27,0.9883642072154887,000858.SZ +2019-03-28,0.9870215194227774,600276.SH +2019-03-29,0.986885474232256,600621.SH +2019-04-01,0.9864468234707724,000568.SZ +2019-04-02,0.9853641543022142,000568.SZ +2019-04-03,0.9869684646359964,000568.SZ +2019-04-04,0.9857446958482933,000568.SZ +2019-04-08,0.9870203689860898,000568.SZ +2019-04-09,0.9874196597068499,000568.SZ +2019-04-10,0.9884067586348539,600602.SH +2019-04-11,0.9862742948321613,000568.SZ +2019-04-12,0.9878931321574486,000568.SZ +2019-04-15,0.9848045593777548,000001.SZ +2019-04-16,0.988619576633022,600602.SH +2019-04-17,0.988271594037285,600276.SH +2019-04-18,0.9872267003283745,600602.SH +2019-04-19,0.9879629804468715,000002.SZ +2019-04-22,0.9883081796870645,000538.SZ +2019-04-23,0.9881711778974576,000858.SZ +2019-04-24,0.9861362044487282,600519.SH +2019-04-25,0.9886445688040905,600276.SH +2019-04-26,0.9864088151173853,000568.SZ +2019-04-29,0.9907235851075822,600612.SH +2019-04-30,0.9897337754042048,600276.SH +2019-05-06,0.9911522858244006,600653.SH +2019-05-07,0.9899310388516844,600612.SH +2019-05-08,0.9884434053331487,000538.SZ +2019-05-09,0.9894920105073723,600611.SH +2019-05-10,0.9874004141548083,600611.SH +2019-05-13,0.9872297291205628,600519.SH +2019-05-14,0.9863838552001197,600611.SH +2019-05-15,0.9858471125130721,000858.SZ +2019-05-16,0.9858619240293037,000568.SZ +2019-05-17,0.9858479010177489,600612.SH +2019-05-20,0.986213299668494,600612.SH +2019-05-21,0.9853823902644998,000568.SZ +2019-05-22,0.986799445078701,600611.SH +2019-05-23,0.9866482338350321,600276.SH +2019-05-24,0.9876027403962361,600612.SH +2019-05-27,0.9893280989366454,600611.SH +2019-05-28,0.9912558946882702,600276.SH +2019-05-29,0.9919711435641665,600611.SH +2019-05-30,0.9904267785365535,600611.SH +2019-05-31,0.9905683895005299,600611.SH +2019-06-03,0.989070983197744,600611.SH +2019-06-04,0.9899775528982415,600611.SH +2019-06-05,0.9915037388375214,600611.SH +2019-06-06,0.9925223124779478,600611.SH +2019-06-10,0.992170165059796,600611.SH +2019-06-11,0.9912980654191588,600611.SH +2019-06-12,0.9905576776805819,000002.SZ +2019-06-13,0.9933029880265704,000002.SZ +2019-06-14,0.9921257350644304,000002.SZ +2019-06-17,0.9907427812192359,600519.SH +2019-06-18,0.9902302916291239,000002.SZ +2019-06-19,0.9896721569480381,000002.SZ +2019-06-20,0.9916035784706705,600611.SH +2019-06-21,0.9923015710083425,000002.SZ +2019-06-24,0.9879363825931134,600612.SH +2019-06-25,0.9923106295825151,000002.SZ +2019-06-26,0.9910736090616102,000568.SZ +2019-06-27,0.9921311267205262,000002.SZ +2019-06-28,0.9907098217451177,000651.SZ +2019-07-01,0.9877522091786756,600612.SH +2019-07-02,0.9891407640457088,600612.SH +2019-07-03,0.9897568992992628,600612.SH +2019-07-04,0.9896433482868298,600653.SH +2019-07-05,0.9876660084303412,600653.SH +2019-07-08,0.9898969452138657,000002.SZ +2019-07-09,0.9881384558052798,000002.SZ +2019-07-10,0.987254357014584,600653.SH +2019-07-11,0.9867248828864903,600612.SH +2019-07-12,0.9842508897809529,000002.SZ +2019-07-15,0.9854223882603337,600653.SH +2019-07-16,0.9874045296350907,600653.SH +2019-07-17,0.9885924348991253,000651.SZ +2019-07-18,0.988444344206418,000651.SZ +2019-07-19,0.9884483637062467,600519.SH +2019-07-22,0.9898950634986049,000651.SZ +2019-07-23,0.9889664961639009,600519.SH +2019-07-24,0.9884954240621416,000651.SZ +2019-07-25,0.9887573470105036,000651.SZ +2019-07-26,0.989653345602965,000651.SZ +2019-07-29,0.988894020267749,600276.SH +2019-07-30,0.9901820211616414,000568.SZ +2019-07-31,0.9896630817695509,600519.SH +2019-08-01,0.9882779090592324,000568.SZ +2019-08-02,0.988690935005314,600612.SH +2019-08-05,0.9848338870425334,600309.SH +2019-08-06,0.9887341191596758,600519.SH +2019-08-07,0.9887884372688674,600519.SH +2019-08-08,0.9885831545791983,600519.SH +2019-08-09,0.9894255128081617,600519.SH +2019-08-12,0.9890575705808285,600276.SH +2019-08-13,0.9897603336977397,000568.SZ +2019-08-14,0.9895937749437121,000651.SZ +2019-08-15,0.9898046430203057,000651.SZ +2019-08-16,0.9895463051832487,000651.SZ +2019-08-19,0.9860126323964189,000858.SZ +2019-08-20,0.9855544089552751,000661.SZ +2019-08-21,0.9874433416466641,000651.SZ +2019-08-22,0.9901842446575643,000651.SZ +2019-08-23,0.9885654279042668,000538.SZ +2019-08-26,0.9898962102848685,000651.SZ +2019-08-27,0.9902236664638318,600660.SH +2019-08-28,0.9896929257292048,600660.SH +2019-08-29,0.9883261298424847,600309.SH +2019-08-30,0.989362202869883,600620.SH +2019-09-02,0.9866230465607867,600620.SH +2019-09-03,0.9859434012880183,600620.SH +2019-09-04,0.9870481385520224,600519.SH +2019-09-05,0.9882991749782997,600620.SH +2019-09-06,0.9873267355778497,600519.SH +2019-09-09,0.9879456462721511,600519.SH +2019-09-10,0.9879176665753147,000568.SZ +2019-09-11,0.9883383362864302,600620.SH +2019-09-12,0.9886244002484522,600276.SH +2019-09-16,0.987885777604903,600620.SH +2019-09-17,0.9900928530374041,000651.SZ +2019-09-18,0.9896277088940975,000651.SZ +2019-09-19,0.991033042118493,000651.SZ +2019-09-20,0.9896230654144582,600621.SH +2019-09-23,0.9888573583763943,600276.SH +2019-09-24,0.9899318286789746,000651.SZ +2019-09-25,0.9897073733080068,000858.SZ +2019-09-26,0.9899995754666142,600519.SH +2019-09-27,0.9895934486889086,000651.SZ +2019-09-30,0.9879397286510636,000651.SZ +2019-10-08,0.9905259856495441,600519.SH +2019-10-09,0.9904320571439086,600519.SH +2019-10-10,0.9902512647496965,600519.SH +2019-10-11,0.9914793544499088,000002.SZ +2019-10-14,0.9893055679496279,600519.SH +2019-10-15,0.9913941807463995,000651.SZ +2019-10-16,0.9906199607941839,000002.SZ +2019-10-17,0.9906127710693731,000651.SZ +2019-10-18,0.9892225233705427,000651.SZ +2019-10-21,0.990097292427659,000568.SZ +2019-10-22,0.9888147025634507,000002.SZ +2019-10-23,0.990730965731949,600612.SH +2019-10-24,0.9897440878673117,000651.SZ +2019-10-25,0.9904506502933195,600309.SH +2019-10-28,0.9904678366793065,600519.SH +2019-10-29,0.989140522731321,600612.SH +2019-10-30,0.9886987492376775,600519.SH +2019-10-31,0.9901069043974567,600612.SH +2019-11-01,0.9875805108578805,000568.SZ +2019-11-04,0.9903175710853435,000002.SZ +2019-11-05,0.9902087733510527,000002.SZ +2019-11-06,0.9891274615650517,600519.SH +2019-11-07,0.9895980894902813,600519.SH +2019-11-08,0.9897250422673212,600519.SH +2019-11-11,0.98964884946587,600612.SH +2019-11-12,0.9895691445775929,600519.SH +2019-11-13,0.9900681667677137,000651.SZ +2019-11-14,0.9897129907283727,000651.SZ +2019-11-15,0.9881929696184416,000651.SZ +2019-11-18,0.9871897865161066,000651.SZ +2019-11-19,0.988113661998146,000651.SZ +2019-11-20,0.9893531735637534,000002.SZ +2019-11-21,0.9892845815565294,000651.SZ +2019-11-22,0.9890890915772067,000651.SZ +2019-11-25,0.990124661914059,600519.SH +2019-11-26,0.9893428275540257,600276.SH +2019-11-27,0.9883178008500177,600519.SH +2019-11-28,0.9896215131488432,600519.SH +2019-11-29,0.9876751307394066,600653.SH +2019-12-02,0.9879723158300089,600653.SH +2019-12-03,0.9875427302865708,600653.SH +2019-12-04,0.9894595148913388,600653.SH +2019-12-05,0.9899191339670498,600653.SH +2019-12-06,0.9889487633197446,600887.SH +2019-12-09,0.9860498591138759,600887.SH +2019-12-10,0.9892236517897115,600887.SH +2019-12-11,0.9884196427517071,000002.SZ +2019-12-12,0.9903377757194506,000651.SZ +2019-12-13,0.9903280801640565,000002.SZ +2019-12-16,0.9877263682895665,000651.SZ +2019-12-17,0.9872328834166395,000651.SZ +2019-12-18,0.9878375750375537,000651.SZ +2019-12-19,0.9886285616554099,000651.SZ +2019-12-20,0.9880014416692764,000001.SZ +2019-12-23,0.9891488356619701,600620.SH +2019-12-24,0.9895643485667,600620.SH +2019-12-25,0.9889104810188942,600620.SH +2019-12-26,0.987089606596003,000651.SZ +2019-12-27,0.9892251351458913,600621.SH +2019-12-30,0.9883303311819881,000001.SZ +2019-12-31,0.9890328897395891,000651.SZ +2020-01-02,0.9890624548609609,600620.SH +2020-01-03,0.9894179878597524,600620.SH +2020-01-06,0.9895105440353521,600621.SH +2020-01-07,0.9881035609512873,600620.SH +2020-01-08,0.9897253065429095,600620.SH +2020-01-09,0.9854926491185682,600621.SH +2020-01-10,0.9871964421078996,000002.SZ +2020-01-13,0.9886153590454847,600602.SH +2020-01-14,0.9871334130490892,000858.SZ +2020-01-15,0.9894337997196142,600621.SH +2020-01-16,0.9892533182514254,600621.SH +2020-01-17,0.9898895091006501,600276.SH +2020-01-20,0.9888919217228815,600621.SH +2020-01-21,0.9870871786487203,000568.SZ +2020-01-22,0.9876121012698136,000568.SZ +2020-01-23,0.9880514347917273,000568.SZ +2020-02-03,0.9842072190679355,000568.SZ +2020-02-04,0.9849636390612159,000651.SZ +2020-02-05,0.9850504494173916,600276.SH +2020-02-06,0.9854141110135509,600276.SH +2020-02-07,0.98672415219515,600276.SH +2020-02-10,0.9879968907733506,600276.SH +2020-02-11,0.9869530823204036,600660.SH +2020-02-12,0.9887764303834902,000651.SZ +2020-02-13,0.9888452865123978,000002.SZ +2020-02-14,0.9889186223349878,000002.SZ +2020-02-17,0.990054026666573,000002.SZ +2020-02-18,0.9894369323843553,600276.SH +2020-02-19,0.9888999286620391,600612.SH +2020-02-20,0.988125765450227,600276.SH +2020-02-21,0.986428528596291,600276.SH +2020-02-24,0.985073900079244,600741.SH +2020-02-25,0.9858151393317164,600741.SH +2020-02-26,0.9888803324928305,000002.SZ +2020-02-27,0.9881282997256475,600621.SH +2020-02-28,0.9886596230346164,600519.SH +2020-03-02,0.9853080759494,000002.SZ +2020-03-03,0.9847152639329355,600588.SH +2020-03-04,0.9857167561459399,600653.SH +2020-03-05,0.9853199918455063,600653.SH +2020-03-06,0.986936762070681,600621.SH +2020-03-09,0.9873990058394596,600620.SH +2020-03-10,0.9857678551732441,600620.SH +2020-03-11,0.987442533684394,600620.SH +2020-03-12,0.9846125313247953,600603.SH +2020-03-13,0.9851579907546024,600620.SH +2020-03-16,0.9873979752192488,600620.SH +2020-03-17,0.9905991448429678,600611.SH +2020-03-18,0.9895629646558112,000661.SZ +2020-03-19,0.9914853044723592,600653.SH +2020-03-20,0.9881743072979314,600653.SH +2020-03-23,0.9918029892159623,600519.SH +2020-03-24,0.9889536859641211,600887.SH +2020-03-25,0.9884709232745869,002007.SZ +2020-03-26,0.9869696621779038,600519.SH +2020-03-27,0.9868156410342366,600276.SH +2020-03-30,0.9867050793482547,600519.SH +2020-03-31,0.9846926576152912,600887.SH +2020-04-01,0.9847372762972194,600519.SH +2020-04-02,0.9828652053946154,600655.SH +2020-04-03,0.986208080689276,600653.SH +2020-04-07,0.9897639252727755,000568.SZ +2020-04-08,0.9902315292823468,600653.SH +2020-04-09,0.9885242000370074,600653.SH +2020-04-10,0.9880917269907268,600653.SH +2020-04-13,0.989624309915956,600612.SH +2020-04-14,0.9886066573388205,000651.SZ +2020-04-15,0.989124358862822,000651.SZ +2020-04-16,0.9908136783957312,000651.SZ +2020-04-17,0.9893685808778943,000651.SZ +2020-04-20,0.9874011450593791,000651.SZ +2020-04-21,0.9858038719152935,000651.SZ +2020-04-22,0.9873757753467413,600611.SH +2020-04-23,0.9877044419834365,600611.SH +2020-04-24,0.9888220482875487,000651.SZ +2020-04-27,0.9880876214893419,000651.SZ +2020-04-28,0.9852027289755183,000651.SZ +2020-04-29,0.9857752145674631,000002.SZ +2020-04-30,0.9875910425899669,000651.SZ +2020-05-06,0.9896829216310307,000651.SZ +2020-05-07,0.9858903961717242,000568.SZ +2020-05-08,0.9847207364469477,600612.SH +2020-05-11,0.9884015960888164,600621.SH +2020-05-12,0.9850072365974929,600741.SH +2020-05-13,0.9866755026264081,000651.SZ +2020-05-14,0.9847046899099996,600621.SH +2020-05-15,0.9886531098781289,000651.SZ +2020-05-18,0.9862005141686503,600621.SH +2020-05-19,0.9872788524847532,000651.SZ +2020-05-20,0.9894125223370132,000651.SZ +2020-05-21,0.9899876850605632,000651.SZ +2020-05-22,0.9901764924680031,600276.SH +2020-05-25,0.9896627732506229,600276.SH +2020-05-26,0.9892490970645778,600276.SH +2020-05-27,0.9862640810595334,600611.SH +2020-05-28,0.987410715911733,600570.SH +2020-05-29,0.9864586711952172,600519.SH +2020-06-01,0.9852568533400531,600611.SH +2020-06-02,0.984692586629196,600570.SH +2020-06-03,0.9895092135460659,000651.SZ +2020-06-04,0.9870675130734294,000661.SZ +2020-06-05,0.9876882682359398,000651.SZ +2020-06-08,0.9894095441203004,600887.SH +2020-06-09,0.9896977840331949,600276.SH +2020-06-10,0.9887711793210836,600612.SH +2020-06-11,0.9887657010329779,600276.SH +2020-06-12,0.9891208892685832,000651.SZ +2020-06-15,0.9901689456723476,600276.SH +2020-06-16,0.9877573026734358,600620.SH +2020-06-17,0.9876969925718446,600612.SH +2020-06-18,0.9856304769094197,600612.SH +2020-06-19,0.9865553884165865,000651.SZ +2020-06-22,0.9858525307337379,600887.SH +2020-06-23,0.9855050345897698,600612.SH +2020-06-24,0.9858543785850389,600887.SH +2020-06-29,0.9861197078170486,000568.SZ +2020-06-30,0.9851083861268275,000568.SZ +2020-07-01,0.9884396176082214,600519.SH +2020-07-02,0.9839268127424691,600519.SH +2020-07-03,0.982373613534521,600519.SH +2020-07-06,0.980877472250099,600519.SH +2020-07-07,0.9823400714667516,600309.SH +2020-07-08,0.9795407853855601,002007.SZ +2020-07-09,0.9819511479273316,002007.SZ +2020-07-10,0.9822390263761732,600887.SH +2020-07-13,0.980615219101196,000895.SZ +2020-07-14,0.9813755612682288,002410.SZ +2020-07-15,0.9816743411790199,600887.SH +2020-07-16,0.9843832452348414,600276.SH +2020-07-17,0.9826701108098463,000001.SZ +2020-07-20,0.9837816587243888,600887.SH +2020-07-21,0.9794770895351145,600588.SH +2020-07-22,0.980328344999033,000538.SZ +2020-07-23,0.9817847231521053,002371.SZ +2020-07-24,0.9821454233623048,600655.SH +2020-07-27,0.9804735031576295,002714.SZ +2020-07-28,0.9801318195821572,600519.SH +2020-07-29,0.9793244128698358,000568.SZ +2020-07-30,0.982676090839837,600655.SH +2020-07-31,0.9821635496377285,002714.SZ +2020-08-03,0.9810332607522967,600655.SH +2020-08-04,0.9811540225082797,002410.SZ +2020-08-05,0.9873524035929379,000858.SZ +2020-08-06,0.9892631028963755,600887.SH +2020-08-07,0.9863885552699181,600612.SH +2020-08-10,0.9860896790048626,000661.SZ +2020-08-11,0.9856664194802609,600887.SH +2020-08-12,0.9847275962724411,600739.SH +2020-08-13,0.9831445373273237,002007.SZ +2020-08-14,0.9856058728986158,600309.SH +2020-08-17,0.9877386885821492,000568.SZ +2020-08-18,0.9890942967313958,600654.SH +2020-08-19,0.9890019603617183,600654.SH +2020-08-20,0.9887596019995502,600309.SH +2020-08-21,0.9879563070839219,000858.SZ +2020-08-24,0.985883124561841,600309.SH +2020-08-25,0.9868239365099291,000858.SZ +2020-08-26,0.9869190572325398,600309.SH +2020-08-27,0.9890897764817401,000002.SZ +2020-08-28,0.9883967517642375,600570.SH +2020-08-31,0.9893378930346843,000002.SZ +2020-09-01,0.9871409853994263,000002.SZ +2020-09-02,0.9883982559433824,000002.SZ +2020-09-03,0.9891069134691498,600276.SH +2020-09-04,0.9871905097911182,600276.SH +2020-09-07,0.988490031806269,600276.SH +2020-09-08,0.9867707248673709,600611.SH +2020-09-09,0.9859308291043052,000002.SZ +2020-09-10,0.9884129307637691,000002.SZ +2020-09-11,0.9856532348792326,600570.SH +2020-09-14,0.9863491133663737,000002.SZ +2020-09-15,0.9856780829511838,600570.SH +2020-09-16,0.9864843910549332,600276.SH +2020-09-17,0.986454198967976,600519.SH +2020-09-18,0.9876858903481867,600654.SH +2020-09-21,0.9863530400140871,600519.SH +2020-09-22,0.9864287823143598,600654.SH +2020-09-23,0.9857966247987678,000568.SZ +2020-09-24,0.9874870194014531,600652.SH +2020-09-25,0.9893142691237767,600652.SH +2020-09-28,0.9890481305410939,000651.SZ +2020-09-29,0.989700734114995,000651.SZ +2020-09-30,0.9879696010463292,600309.SH +2020-10-09,0.9884788677316558,000651.SZ +2020-10-12,0.9901405537007603,000651.SZ +2020-10-13,0.9892367584627242,000651.SZ +2020-10-14,0.9900112345651596,600276.SH +2020-10-15,0.9882183701717159,600276.SH +2020-10-16,0.9838498207985185,600654.SH +2020-10-19,0.9830448360970546,000651.SZ +2020-10-20,0.9836609181971917,000651.SZ +2020-10-21,0.9859574360038001,600655.SH +2020-10-22,0.9875185138699328,600519.SH +2020-10-23,0.9886944724852609,600570.SH +2020-10-26,0.9861878115859265,600276.SH +2020-10-27,0.985706496072548,600276.SH +2020-10-28,0.9855638327903891,600276.SH +2020-10-29,0.9850586055215393,600276.SH +2020-10-30,0.9859688503977561,600276.SH +2020-11-02,0.9866603872199683,600887.SH +2020-11-03,0.9843027347573549,600519.SH +2020-11-04,0.9857564130122597,600519.SH +2020-11-05,0.9848304727383624,600519.SH +2020-11-06,0.985685308957536,600612.SH +2020-11-09,0.9872943233468581,600519.SH +2020-11-10,0.9877817668263644,600519.SH +2020-11-11,0.9892392342444332,600519.SH +2020-11-12,0.9887590743951117,600519.SH +2020-11-13,0.9871192969823694,000001.SZ +2020-11-16,0.98763356095373,600654.SH +2020-11-17,0.9860828320170977,600655.SH +2020-11-18,0.9871669675440073,600612.SH +2020-11-19,0.9877215338010794,600612.SH +2020-11-20,0.9856048756429345,600612.SH +2020-11-23,0.9853509297308607,000001.SZ +2020-11-24,0.9863205573009951,600519.SH +2020-11-25,0.9840653392547615,000001.SZ +2020-11-26,0.9853168586441944,000858.SZ +2020-11-27,0.9838965357210029,600309.SH +2020-11-30,0.9808863437479509,600652.SH +2020-12-01,0.9831033824211278,600652.SH +2020-12-02,0.982163463920244,000001.SZ +2020-12-03,0.9827529326629403,000661.SZ +2020-12-04,0.9852748237782901,600519.SH +2020-12-07,0.9883232984931776,000568.SZ +2020-12-08,0.9864402377904454,600887.SH +2020-12-09,0.9873430110482185,600276.SH +2020-12-10,0.9880410945072883,600887.SH +2020-12-11,0.9819978476339165,600612.SH +2020-12-14,0.9828065378686976,000858.SZ +2020-12-15,0.9834144205650553,002007.SZ +2020-12-16,0.9830466159130533,000001.SZ +2020-12-17,0.9855142306028144,000001.SZ +2020-12-18,0.9880608082731555,600588.SH +2020-12-21,0.9865347238874052,600660.SH +2020-12-22,0.9869803851232691,600309.SH +2020-12-23,0.9827939632291205,600588.SH +2020-12-24,0.9790987294014176,600887.SH +2020-12-25,0.9833342916591926,600690.SH +2020-12-28,0.9855816674455593,600741.SH +2020-12-29,0.9862484230652259,600588.SH +2020-12-30,0.986306772120577,000001.SZ +2020-12-31,0.9880369315781563,600655.SH +2021-01-04,0.987269180777764,600611.SH +2021-01-05,0.9869862831933476,600588.SH +2021-01-06,0.9913123643722762,000002.SZ +2021-01-07,0.9904701785456675,000002.SZ +2021-01-08,0.9872305135245824,000002.SZ +2021-01-11,0.9842598932737131,600588.SH +2021-01-12,0.9881435822793038,000002.SZ +2021-01-13,0.9855199000218197,600611.SH +2021-01-14,0.9859256942300256,600612.SH +2021-01-15,0.9875965638197873,600612.SH +2021-01-18,0.9853447121423901,000651.SZ +2021-01-19,0.9853545580887598,000858.SZ +2021-01-20,0.9863549606999162,600620.SH +2021-01-21,0.9837718748524845,600570.SH +2021-01-22,0.9858510855704716,000002.SZ +2021-01-25,0.9824800645063446,000002.SZ +2021-01-26,0.9830343475121747,600809.SH +2021-01-27,0.9835720027771597,000858.SZ +2021-01-28,0.9835088821155948,000858.SZ +2021-01-29,0.9810204335430415,600588.SH +2021-02-01,0.9793866593878149,000002.SZ +2021-02-02,0.980429928189506,000538.SZ +2021-02-03,0.9804243202449074,000002.SZ +2021-02-04,0.9786196443177094,000568.SZ +2021-02-05,0.9816798011403972,000858.SZ +2021-02-08,0.9850124318664775,000002.SZ +2021-02-09,0.9840671114975065,600031.SH +2021-02-10,0.9867081926412232,600620.SH +2021-02-18,0.9849893545528171,600612.SH +2021-02-19,0.984805540320164,002415.SZ +2021-02-22,0.9845512437764584,601012.SH +2021-02-23,0.98364270811774,600809.SH +2021-02-24,0.9857111856474349,600612.SH +2021-02-25,0.9868227257396353,600519.SH +2021-02-26,0.985376280501225,600519.SH +2021-03-01,0.9832571931770131,600612.SH +2021-03-02,0.9850889339002099,000002.SZ +2021-03-03,0.987026608062753,000002.SZ +2021-03-04,0.9882042945236114,600611.SH +2021-03-05,0.9895050451243901,600654.SH +2021-03-08,0.9893488448537007,600652.SH +2021-03-09,0.9878751473677019,600652.SH +2021-03-10,0.9883942940132561,600612.SH +2021-03-11,0.9901474817232848,600652.SH +2021-03-12,0.9896719527977113,600616.SH +2021-03-15,0.9903349831687139,600652.SH +2021-03-16,0.988572831777228,600620.SH +2021-03-17,0.9897390818726989,000002.SZ +2021-03-18,0.9884270861247187,600652.SH +2021-03-19,0.9872833519736985,600654.SH +2021-03-22,0.9871465661817534,000651.SZ +2021-03-23,0.9878959895546633,000651.SZ +2021-03-24,0.9869898680809938,600602.SH +2021-03-25,0.9845411556788703,600616.SH +2021-03-26,0.9856724224078858,600612.SH +2021-03-29,0.987611598296774,000651.SZ +2021-03-30,0.9868907760829553,000661.SZ +2021-03-31,0.9879124497205753,600602.SH +2021-04-01,0.9867855636597986,000568.SZ +2021-04-02,0.9862521972029792,000651.SZ +2021-04-06,0.9887418057492114,600620.SH +2021-04-07,0.9870844303031786,600519.SH +2021-04-08,0.9849861442355813,000858.SZ +2021-04-09,0.9897432889725779,000651.SZ +2021-04-12,0.985804754098155,600652.SH +2021-04-13,0.9848361304847878,000858.SZ +2021-04-14,0.9868877944565506,600602.SH +2021-04-15,0.9879690113878388,600602.SH +2021-04-16,0.9861575313460382,600602.SH +2021-04-19,0.9881823188722975,600602.SH +2021-04-20,0.9897601768493963,000858.SZ +2021-04-21,0.9891022273255288,600519.SH +2021-04-22,0.9838241017894612,600741.SH +2021-04-23,0.9836278532138817,600519.SH +2021-04-26,0.9892450124537877,000858.SZ +2021-04-27,0.9872089664739481,000858.SZ +2021-04-28,0.9860345562126155,000858.SZ +2021-04-29,0.9848272587974406,600887.SH +2021-04-30,0.9846310139099899,000858.SZ +2021-05-06,0.9853815376305805,600690.SH +2021-05-07,0.9849976348442724,000661.SZ +2021-05-10,0.9852009265651531,600570.SH +2021-05-11,0.9845583500890006,600436.SH +2021-05-12,0.9858554146943443,600570.SH +2021-05-13,0.9849904573632201,600620.SH +2021-05-14,0.9829751753380609,600620.SH +2021-05-17,0.9852263157461861,600620.SH +2021-05-18,0.9866070355609458,600276.SH +2021-05-19,0.986722502549542,600276.SH +2021-05-20,0.9875387549059595,600276.SH +2021-05-21,0.9906895640300462,600570.SH +2021-05-24,0.9877062941987828,000001.SZ +2021-05-25,0.9882918936534031,600887.SH +2021-05-26,0.9883053242124387,600276.SH +2021-05-27,0.9878159323116521,600276.SH +2021-05-28,0.983938598515649,600519.SH +2021-05-31,0.9846941687969281,000568.SZ +2021-06-01,0.9870401908812099,600276.SH +2021-06-02,0.9831831800674761,600612.SH +2021-06-03,0.9848400232371932,600612.SH +2021-06-04,0.9858506380769518,600309.SH +2021-06-07,0.9845276114781083,600602.SH +2021-06-08,0.9844276422852277,600309.SH +2021-06-09,0.9887128278256424,000001.SZ +2021-06-10,0.9860207747045721,600612.SH +2021-06-11,0.9901353362122064,600602.SH +2021-06-15,0.9864451039798937,600519.SH +2021-06-16,0.9861628035718697,600436.SH +2021-06-17,0.9856195964732907,600519.SH +2021-06-18,0.9848797576983028,600741.SH +2021-06-21,0.9859160610390831,600741.SH +2021-06-22,0.9849384123173031,600809.SH +2021-06-23,0.985792353062363,600132.SH +2021-06-24,0.9868662823116406,600602.SH +2021-06-25,0.9868310695587348,600602.SH +2021-06-28,0.9882381517239689,600602.SH +2021-06-29,0.9871037783642681,600602.SH +2021-06-30,0.9888179063967447,600570.SH +2021-07-01,0.9887137277960948,600809.SH +2021-07-02,0.9897220631974643,600570.SH +2021-07-05,0.9897580232080315,600611.SH +2021-07-06,0.9864903437839591,600309.SH +2021-07-07,0.9867211209027262,600660.SH +2021-07-08,0.9888512514092933,600309.SH +2021-07-09,0.9874065031430471,600406.SH +2021-07-12,0.9883822648111236,002007.SZ +2021-07-13,0.9822879699137358,600436.SH +2021-07-14,0.9858618904779493,002007.SZ +2021-07-15,0.9875950115465673,600809.SH +2021-07-16,0.9892655997199821,002007.SZ +2021-07-19,0.9902022979560917,000538.SZ +2021-07-20,0.99046021709618,000651.SZ +2021-07-21,0.9898448654920153,000661.SZ +2021-07-22,0.9876021313623972,600436.SH +2021-07-23,0.9890394506814185,002007.SZ +2021-07-26,0.9887616809745622,600620.SH +2021-07-27,0.9877064568036241,600620.SH +2021-07-28,0.9878446972797845,600309.SH +2021-07-29,0.9858254911398646,600309.SH +2021-07-30,0.9878559275629352,600620.SH +2021-08-02,0.9862627550855831,600031.SH +2021-08-03,0.9860618560733088,600620.SH +2021-08-04,0.9864878900150226,002236.SZ +2021-08-05,0.9915294690264528,600887.SH +2021-08-06,0.9905618096429234,600887.SH +2021-08-09,0.9900593835802526,600887.SH +2021-08-10,0.9917811161710712,600887.SH +2021-08-11,0.9896851428114241,600621.SH +2021-08-12,0.9889905247144849,600621.SH +2021-08-13,0.9874380820458568,600620.SH +2021-08-16,0.9865662858724397,600620.SH +2021-08-17,0.9855787645088185,002371.SZ +2021-08-18,0.9899689739420883,000002.SZ +2021-08-19,0.9888537526475082,600621.SH +2021-08-20,0.9882246127246993,600621.SH +2021-08-23,0.9874566984236784,000002.SZ +2021-08-24,0.9889020374497098,000001.SZ +2021-08-25,0.9876800108686683,002001.SZ +2021-08-26,0.9894200259656959,600620.SH +2021-08-27,0.9890932294165505,600602.SH +2021-08-30,0.9894308795938697,600620.SH +2021-08-31,0.9888841850947051,600620.SH +2021-09-01,0.9885435441491781,600690.SH +2021-09-02,0.9884057762255515,600741.SH +2021-09-03,0.989308641197408,600655.SH +2021-09-06,0.9897129215376936,600655.SH +2021-09-07,0.9885921923837242,600570.SH +2021-09-08,0.9897407511151102,600655.SH +2021-09-09,0.9877984855186296,600655.SH +2021-09-10,0.9866823105912985,002049.SZ +2021-09-13,0.9871275570444646,002709.SZ +2021-09-14,0.9868300785940526,600620.SH +2021-09-15,0.9862891463569063,600620.SH +2021-09-16,0.985303979600702,600741.SH +2021-09-17,0.9894444358770839,600519.SH +2021-09-22,0.9835348249729495,600620.SH +2021-09-23,0.9860053550250646,600406.SH +2021-09-24,0.9871883695585282,600276.SH +2021-09-27,0.9875479594286415,600611.SH +2021-09-28,0.987658793837311,000858.SZ +2021-09-29,0.9885836752327902,000001.SZ +2021-09-30,0.9834358381046543,000002.SZ +2021-10-08,0.9837058396499633,000001.SZ +2021-10-11,0.9852893145742434,000002.SZ +2021-10-12,0.9854322903773662,600660.SH +2021-10-13,0.985422894768341,600655.SH +2021-10-14,0.9843409424168996,600588.SH +2021-10-15,0.9816380786570557,600612.SH +2021-10-18,0.9817216280362755,000002.SZ +2021-10-19,0.9796664947389844,000002.SZ +2021-10-20,0.9819483729206907,600655.SH +2021-10-21,0.9819765364900465,600655.SH +2021-10-22,0.9822792996662035,600616.SH +2021-10-25,0.9847710201848635,600309.SH +2021-10-26,0.9841289924215159,000651.SZ +2021-10-27,0.9861026326952126,000002.SZ +2021-10-28,0.9862245873711345,600309.SH +2021-10-29,0.984494152624186,600309.SH +2021-11-01,0.9850026139659188,600309.SH +2021-11-02,0.9849952840388578,600612.SH +2021-11-03,0.9790849764273957,600690.SH +2021-11-04,0.9821875813177326,600276.SH +2021-11-05,0.9820188892286111,000661.SZ +2021-11-08,0.9783478293168532,600660.SH +2021-11-09,0.9813285104043372,600660.SH +2021-11-10,0.9785939306737608,600570.SH +2021-11-11,0.9853123084621778,600276.SH +2021-11-12,0.9869360889505224,600276.SH +2021-11-15,0.9832836913265592,600276.SH +2021-11-16,0.9881584252871122,600570.SH +2021-11-17,0.9858828002240678,600570.SH +2021-11-18,0.9855682348132325,600887.SH +2021-11-19,0.9811445034634998,600406.SH +2021-11-22,0.9831213795268275,002371.SZ +2021-11-23,0.9808247180546468,601012.SH +2021-11-24,0.9860116693082103,000661.SZ +2021-11-25,0.9877272417411642,600602.SH +2021-11-26,0.9871136997803625,600602.SH +2021-11-29,0.9863018491633144,000858.SZ +2021-11-30,0.9864128700781493,600602.SH +2021-12-01,0.9859394856563847,000858.SZ +2021-12-02,0.9866987314522804,600436.SH +2021-12-03,0.9871803086211948,600602.SH +2021-12-06,0.9891339923643545,600602.SH +2021-12-07,0.9879439984596091,000002.SZ +2021-12-08,0.9874256830252467,600436.SH +2021-12-09,0.9844363230488247,002236.SZ +2021-12-10,0.9869613552135342,600621.SH +2021-12-13,0.9892460419570884,600621.SH +2021-12-14,0.9872693304854405,600309.SH +2021-12-15,0.9868246013548662,600621.SH +2021-12-16,0.9860429286213774,600570.SH +2021-12-17,0.9863971686198393,002241.SZ +2021-12-20,0.9857767371484902,600570.SH +2021-12-21,0.9873696271823941,600519.SH +2021-12-22,0.9880639896835693,600436.SH +2021-12-23,0.9889026595282685,600309.SH +2021-12-24,0.9894870827038845,600660.SH +2021-12-27,0.9906741161109219,600309.SH +2021-12-28,0.9894826771197488,600309.SH +2021-12-29,0.9900596247642042,600660.SH +2021-12-30,0.9891976293073055,600309.SH +2021-12-31,0.9910843349585604,000651.SZ +2022-01-04,0.9867709412534679,600602.SH +2022-01-05,0.9878484948730089,600602.SH +2022-01-06,0.9852878457503547,002271.SZ +2022-01-07,0.9907674307274636,000002.SZ +2022-01-10,0.9920691731824376,000002.SZ +2022-01-11,0.9894482415809565,000002.SZ +2022-01-12,0.9882101750020948,000651.SZ +2022-01-13,0.9874822875874528,000002.SZ +2022-01-14,0.9884141660166034,000002.SZ +2022-01-17,0.9852435179549184,000002.SZ +2022-01-18,0.9847969723119606,000651.SZ +2022-01-19,0.9859070552143073,600660.SH +2022-01-20,0.9853231825458825,000538.SZ +2022-01-21,0.98548274921812,600612.SH +2022-01-24,0.9846915046717092,600612.SH +2022-01-25,0.9860510988148439,600611.SH +2022-01-26,0.9847919017580229,600660.SH +2022-01-27,0.9832886984285654,600570.SH +2022-01-28,0.9824673062316289,600660.SH +2022-02-07,0.9852129071267037,600588.SH +2022-02-08,0.9857362125463051,600620.SH +2022-02-09,0.9837822737786447,600611.SH +2022-02-10,0.9851029726678869,600887.SH +2022-02-11,0.9850327053558041,600660.SH +2022-02-14,0.9825758663940669,002812.SZ +2022-02-15,0.983706068478303,600660.SH +2022-02-16,0.9836246268888972,600612.SH +2022-02-17,0.9845917139524742,000651.SZ +2022-02-18,0.982131556075455,600612.SH +2022-02-21,0.9854730466796412,600519.SH +2022-02-22,0.9877929098654699,600602.SH +2022-02-23,0.9873746023585854,600612.SH +2022-02-24,0.9896634217675385,600612.SH +2022-02-25,0.989675783581842,600612.SH +2022-02-28,0.9878303182097151,600612.SH +2022-03-01,0.988290042507787,601012.SH +2022-03-02,0.9847498871362838,600111.SH +2022-03-03,0.9879008859077736,600612.SH +2022-03-04,0.9853627744374387,600655.SH +2022-03-07,0.9862140785231349,600655.SH +2022-03-08,0.9855240102210369,600602.SH +2022-03-09,0.9863258670741654,600612.SH +2022-03-10,0.9838472639139972,002371.SZ +2022-03-11,0.9835578466892776,600809.SH +2022-03-14,0.9842495418147467,002812.SZ +2022-03-15,0.9849745478265439,600621.SH +2022-03-16,0.9833707738322485,002812.SZ +2022-03-17,0.9826008688292792,600620.SH +2022-03-18,0.983514940662977,000661.SZ +2022-03-21,0.9816701302527591,600620.SH +2022-03-22,0.9837350297512797,600620.SH +2022-03-23,0.9859473460113649,002001.SZ +2022-03-24,0.98621757317936,600621.SH +2022-03-25,0.9861263104601733,600621.SH +2022-03-28,0.9880079612833538,601012.SH +2022-03-29,0.9859430790472826,600620.SH +2022-03-30,0.9856551008673808,600620.SH +2022-03-31,0.9886984358101368,600620.SH +2022-04-01,0.9894229654827273,600436.SH +2022-04-06,0.9898155781638046,600436.SH +2022-04-07,0.9876591288444796,600655.SH +2022-04-08,0.9864514252121771,600622.SH +2022-04-11,0.988751400844367,600622.SH +2022-04-12,0.9853824315917914,600603.SH +2022-04-13,0.9888234195642237,600603.SH +2022-04-14,0.9914766387957348,600603.SH +2022-04-15,0.9889898269568108,600603.SH +2022-04-18,0.9838635225513969,000651.SZ +2022-04-19,0.9878399362203748,600622.SH +2022-04-20,0.9832509241413933,000651.SZ +2022-04-21,0.9845855543860165,000651.SZ +2022-04-22,0.984556484912655,600309.SH +2022-04-25,0.9857022413994875,600612.SH +2022-04-26,0.9826907815499413,000651.SZ +2022-04-27,0.9818896940948418,600612.SH +2022-04-28,0.9847053662511683,000568.SZ +2022-04-29,0.9826321113192136,000568.SZ +2022-05-05,0.9794865526899253,600620.SH +2022-05-06,0.9857971139883748,600436.SH +2022-05-09,0.9847510321086883,600309.SH +2022-05-10,0.9849616200516966,600519.SH +2022-05-11,0.9834256960715291,600519.SH +2022-05-12,0.9836964325006612,600653.SH +2022-05-13,0.9859261593414782,600309.SH +2022-05-16,0.9863682081238946,600887.SH +2022-05-17,0.9895784791790366,600887.SH +2022-05-18,0.9849978933212815,600309.SH +2022-05-19,0.9886675407279493,600309.SH +2022-05-20,0.9888261620782701,600519.SH +2022-05-23,0.9887304447010099,000651.SZ +2022-05-24,0.9863068351265996,000651.SZ +2022-05-25,0.987096247550162,600620.SH +2022-05-26,0.9801218057412038,600660.SH +2022-05-27,0.9813073255985749,600660.SH +2022-05-30,0.9850934498300576,600660.SH +2022-05-31,0.9829391633221874,600660.SH +2022-06-01,0.9819357519206029,600660.SH +2022-06-02,0.9838596714895453,600660.SH +2022-06-06,0.9852552171207578,600660.SH +2022-06-07,0.979630770983244,600660.SH +2022-06-08,0.9815855939327074,000858.SZ +2022-06-09,0.9844397635582383,600660.SH +2022-06-10,0.984858562009103,600621.SH +2022-06-13,0.98680218385323,000858.SZ +2022-06-14,0.9849468026995667,000858.SZ +2022-06-15,0.9841366744895231,600276.SH +2022-06-16,0.9863937663589886,000568.SZ +2022-06-17,0.98319458588455,600519.SH +2022-06-20,0.9859828317368192,000568.SZ +2022-06-21,0.9853993181124361,600588.SH +2022-06-22,0.9846223203027024,600519.SH +2022-06-23,0.982802710168536,000858.SZ +2022-06-24,0.9829492634469033,600602.SH +2022-06-27,0.9814948861057085,600519.SH +2022-06-28,0.9808657020802649,600309.SH +2022-06-29,0.9821300188419317,000568.SZ +2022-06-30,0.9822929337852921,000538.SZ +2022-07-01,0.9821288728392062,002271.SZ +2022-07-04,0.9810453010241605,600588.SH +2022-07-05,0.9850035732614817,600588.SH +2022-07-06,0.9869437373062112,000568.SZ +2022-07-07,0.9831019512029111,000002.SZ +2022-07-08,0.9851783161735337,000651.SZ +2022-07-11,0.9848390411780676,000651.SZ +2022-07-12,0.9858001889828826,600436.SH +2022-07-13,0.9849433257355388,600519.SH +2022-07-14,0.9874399431383559,600519.SH +2022-07-15,0.9887454813229043,000651.SZ +2022-07-18,0.9889302246588275,000651.SZ +2022-07-19,0.9866781243182803,600602.SH +2022-07-20,0.9845190278902056,000858.SZ +2022-07-21,0.9869517722266856,600602.SH +2022-07-22,0.9838264746840338,600620.SH +2022-07-25,0.9868324870886003,000651.SZ +2022-07-26,0.9891280486490168,600602.SH +2022-07-27,0.9809834734307481,600406.SH +2022-07-28,0.9824317746318592,600406.SH +2022-07-29,0.9888997829937491,600602.SH +2022-08-01,0.9887732878953364,600602.SH +2022-08-02,0.9867982456584534,600620.SH +2022-08-03,0.9843306354484249,000596.SZ +2022-08-04,0.9864678188450098,600602.SH +2022-08-05,0.9851765406963073,600602.SH +2022-08-08,0.9861276378560345,600570.SH +2022-08-09,0.9831860777323554,600588.SH +2022-08-10,0.9864964357260677,002475.SZ +2022-08-11,0.9881481166106562,002028.SZ +2022-08-12,0.9877893303859322,600620.SH +2022-08-15,0.9866688547064104,600620.SH +2022-08-16,0.9865155787553587,600620.SH +2022-08-17,0.9861474919646094,000661.SZ +2022-08-18,0.9840007163850606,600620.SH +2022-08-19,0.9863664464478205,600621.SH +2022-08-22,0.9825030945332284,002049.SZ +2022-08-23,0.9822027598235832,002410.SZ +2022-08-24,0.9879109634184398,600309.SH +2022-08-25,0.9885676719791733,600309.SH +2022-08-26,0.9900705447166154,000568.SZ +2022-08-29,0.9859933780373757,600603.SH +2022-08-30,0.9841195257191224,600309.SH +2022-08-31,0.9845306442478696,000651.SZ +2022-09-01,0.9867712816281954,600612.SH +2022-09-02,0.9858053759622951,600612.SH +2022-09-05,0.9865724979905759,600621.SH +2022-09-06,0.9867681241553278,600660.SH +2022-09-07,0.9837259659969035,600309.SH +2022-09-08,0.9860917219750596,600660.SH +2022-09-09,0.9866896010534619,600660.SH +2022-09-13,0.9868355902094181,000568.SZ +2022-09-14,0.9874533040770226,000568.SZ +2022-09-15,0.9874241897497551,600660.SH +2022-09-16,0.9858099837361651,600519.SH +2022-09-19,0.9875855616646366,600436.SH +2022-09-20,0.9861100757980853,600276.SH +2022-09-21,0.9873401473976627,600660.SH +2022-09-22,0.9856897568796622,600519.SH +2022-09-23,0.9847652592525572,600519.SH +2022-09-26,0.9837131102435838,600660.SH +2022-09-27,0.9828376191382338,600519.SH +2022-09-28,0.9835015007893292,600519.SH +2022-09-29,0.9823857751160318,600519.SH +2022-09-30,0.986705909914462,600605.SH +2022-10-10,0.986240871173751,600605.SH +2022-10-11,0.9870227737032441,600605.SH +2022-10-12,0.987192858056764,600605.SH +2022-10-13,0.985161649591314,000858.SZ +2022-10-14,0.9850415084746501,600309.SH +2022-10-17,0.9859094360984131,600309.SH +2022-10-18,0.9869155009037822,600309.SH +2022-10-19,0.9873045815587472,600602.SH +2022-10-20,0.9878452504568073,600602.SH +2022-10-21,0.98822974116062,600612.SH +2022-10-24,0.986268840644853,600602.SH +2022-10-25,0.9878260085412278,600612.SH +2022-10-26,0.9886287658077019,600612.SH +2022-10-27,0.9868303725639093,600612.SH +2022-10-28,0.987675536368675,600612.SH +2022-10-31,0.9846496420878166,600602.SH +2022-11-01,0.9854164478592385,600588.SH +2022-11-02,0.9856726862664293,600588.SH +2022-11-03,0.9825667988206199,600276.SH +2022-11-04,0.9814089120206277,600602.SH +2022-11-07,0.9830386265494072,600276.SH +2022-11-08,0.9830947994320021,600276.SH +2022-11-09,0.9843274399340093,600276.SH +2022-11-10,0.9807688186506701,600602.SH +2022-11-11,0.9871502419330133,600602.SH +2022-11-14,0.9871359813219227,000538.SZ +2022-11-15,0.9875708403626837,600621.SH +2022-11-16,0.9881385421843082,600621.SH +2022-11-17,0.9854772874522475,600621.SH +2022-11-18,0.9832258033150055,600655.SH +2022-11-21,0.9838322512644885,600602.SH +2022-11-22,0.9826842921653856,600602.SH +2022-11-23,0.9845395740228039,600602.SH +2022-11-24,0.9848884736777758,000002.SZ +2022-11-25,0.9832734879107153,000002.SZ +2022-11-28,0.9860590288602017,000651.SZ +2022-11-29,0.9849577258166504,000858.SZ +2022-11-30,0.9863323792486314,000651.SZ +2022-12-01,0.9854051543979425,000651.SZ +2022-12-02,0.9883773760975241,000651.SZ +2022-12-05,0.9857474705190054,000651.SZ +2022-12-06,0.9850155311609259,000651.SZ +2022-12-07,0.9860046752840635,600621.SH +2022-12-08,0.9841406886899378,000651.SZ +2022-12-09,0.9838094106798072,600309.SH +2022-12-12,0.9871659975750184,000651.SZ +2022-12-13,0.9880315940043493,000651.SZ +2022-12-14,0.9862879138682699,600309.SH +2022-12-15,0.9868418597902221,600309.SH +2022-12-16,0.9830673612062371,000651.SZ +2022-12-19,0.9841413975775601,600612.SH +2022-12-20,0.9851025598237675,600612.SH +2022-12-21,0.9829772861114977,002371.SZ +2022-12-22,0.9826575131420677,600660.SH +2022-12-23,0.9841142880696031,600660.SH +2022-12-26,0.9859266516999629,600660.SH +2022-12-27,0.9849834557569601,000651.SZ +2022-12-28,0.9853314998448656,000651.SZ +2022-12-29,0.9869764531158789,000651.SZ +2022-12-30,0.98583005308633,000002.SZ diff --git a/code/train/predictions_test.tsv b/code/train/predictions_test.tsv new file mode 100644 index 0000000..0a2fe9b --- /dev/null +++ b/code/train/predictions_test.tsv @@ -0,0 +1,262 @@ +trade_date,score,ts_code +2024-03-01,0.48944956369028353,600515.SH +2024-03-04,0.4910973129007265,601377.SH +2024-03-05,0.49755441935533035,601377.SH +2024-03-06,0.48530227310531543,000950.SZ +2024-03-07,0.4852382924633875,002252.SZ +2024-03-08,0.4295690224121115,000650.SZ +2024-03-11,0.4772666567296332,002539.SZ +2024-03-12,0.44912255948878027,002030.SZ +2024-03-13,0.48036470172022555,603366.SH +2024-03-14,0.47455902892485136,002616.SZ +2024-03-15,0.4898609892396381,002616.SZ +2024-03-18,0.4898609892396381,002616.SZ +2024-03-19,0.4585803401938102,600749.SH +2024-03-20,0.4717940942781549,601616.SH +2024-03-21,0.4898609892396381,002616.SZ +2024-03-22,0.4921881826907514,600268.SH +2024-03-25,0.4529948903273269,000910.SZ +2024-03-26,0.468535149074664,600163.SH +2024-03-27,0.45345883846621166,600268.SH +2024-03-28,0.4629678911934166,603689.SH +2024-03-29,0.4576699667200496,600479.SH +2024-04-01,0.4880682627555449,000407.SZ +2024-04-02,0.4658882567202438,002228.SZ +2024-04-03,0.46661866733947643,600279.SH +2024-04-08,0.4348058590086616,601199.SH +2024-04-09,0.440404827771838,600279.SH +2024-04-10,0.45436095343545857,600279.SH +2024-04-11,0.4860610115557819,002807.SZ +2024-04-12,0.49251811801038575,002807.SZ +2024-04-15,0.45282134310413785,002267.SZ +2024-04-16,0.44573083040693495,601200.SH +2024-04-17,0.4755082230960848,600681.SH +2024-04-18,0.46969708080904654,600681.SH +2024-04-19,0.4763960575203315,601963.SH +2024-04-22,0.4797611675632624,601006.SH +2024-04-23,0.4417060612494253,600905.SH +2024-04-24,0.467078149060861,600681.SH +2024-04-25,0.48593234463506524,601016.SH +2024-04-26,0.485704669384595,600248.SH +2024-04-29,0.4856232616952012,000088.SZ +2024-04-30,0.47658127432737996,600717.SH +2024-05-06,0.485599247202529,600057.SH +2024-05-07,0.48502517567793635,600928.SH +2024-05-08,0.4875800938455082,601997.SH +2024-05-09,0.4764814479757618,601990.SH +2024-05-10,0.4767299756060024,601187.SH +2024-05-13,0.48339009051626075,002252.SZ +2024-05-14,0.49804720312809037,601236.SH +2024-05-15,0.4754440788180303,601669.SH +2024-05-16,0.47188100886784723,002252.SZ +2024-05-17,0.4738812084576224,000505.SZ +2024-05-20,0.47680745811007763,600300.SH +2024-05-21,0.4914822821325402,000919.SZ +2024-05-22,0.43568399742751623,603777.SH +2024-05-23,0.48230237417866073,000919.SZ +2024-05-24,0.45217189085141946,600846.SH +2024-05-27,0.4822386303700534,000012.SZ +2024-05-28,0.4911043379651643,000012.SZ +2024-05-29,0.4593967921412618,000012.SZ +2024-05-30,0.46327623228814613,600033.SH +2024-05-31,0.48434217554317305,601006.SH +2024-06-03,0.49496311907072943,601158.SH +2024-06-04,0.49311491712360267,601158.SH +2024-06-05,0.4662101696226407,600681.SH +2024-06-06,0.44598437609141306,600507.SH +2024-06-07,0.46683069546117434,002936.SZ +2024-06-11,0.48392216170099567,002936.SZ +2024-06-12,0.48392216170099567,002936.SZ +2024-06-13,0.4856066420239958,601555.SH +2024-06-14,0.4626378515738043,600273.SH +2024-06-17,0.4930611701154713,601868.SH +2024-06-18,0.4850760483461876,600909.SH +2024-06-19,0.48789755402053436,600909.SH +2024-06-20,0.47168404865503394,600918.SH +2024-06-21,0.4780215106901423,002939.SZ +2024-06-24,0.4670168740500108,600507.SH +2024-06-25,0.4462181161419812,600507.SH +2024-06-26,0.47871585166988867,601108.SH +2024-06-27,0.4550530100208326,601108.SH +2024-06-28,0.4682668022638408,600056.SH +2024-07-01,0.4956846242134755,601555.SH +2024-07-02,0.4855061855012652,601375.SH +2024-07-03,0.48208040944932096,000166.SZ +2024-07-04,0.4741422882624783,002763.SZ +2024-07-05,0.4207747223564723,600279.SH +2024-07-08,0.4505916830616898,000778.SZ +2024-07-09,0.47552387696457243,600108.SH +2024-07-10,0.48433484852590997,601990.SH +2024-07-11,0.4670143394143526,600597.SH +2024-07-12,0.48598259773635294,601228.SH +2024-07-15,0.46747598383004435,600704.SH +2024-07-16,0.46517324677556354,601228.SH +2024-07-17,0.4669329317249588,600681.SH +2024-07-18,0.4342287048693295,603886.SH +2024-07-19,0.4688897638752658,002936.SZ +2024-07-22,0.4655336697859469,601008.SH +2024-07-23,0.4385299287889017,000959.SZ +2024-07-24,0.40980850428167526,600059.SH +2024-07-25,0.4354808457559223,600928.SH +2024-07-26,0.43863748866816843,002936.SZ +2024-07-29,0.4757869671100767,002936.SZ +2024-07-30,0.45055950278777573,600056.SH +2024-07-31,0.43441391812299834,000672.SZ +2024-08-01,0.46163952351711074,600597.SH +2024-08-02,0.45912773679288216,601528.SH +2024-08-05,0.42637336325271274,000012.SZ +2024-08-06,0.44417354831155165,000498.SZ +2024-08-07,0.46761174293945373,002029.SZ +2024-08-08,0.44084265961702834,600061.SH +2024-08-09,0.44756951600219536,600061.SH +2024-08-12,0.43865468410238356,600517.SH +2024-08-13,0.40119132713124916,600798.SH +2024-08-14,0.4147687048594177,600279.SH +2024-08-15,0.4285641100025751,600283.SH +2024-08-16,0.43481178678490995,600279.SH +2024-08-19,0.4334514206803078,000055.SZ +2024-08-20,0.4271544196243579,600925.SH +2024-08-21,0.44140030057394675,601718.SH +2024-08-22,0.4260043286627239,002266.SZ +2024-08-23,0.4272469992425721,002266.SZ +2024-08-26,0.43298605818458036,601718.SH +2024-08-27,0.42993335252901094,600308.SH +2024-08-28,0.44014909636073596,601216.SH +2024-08-29,0.4549086267823673,002108.SZ +2024-08-30,0.4432950051114155,603817.SH +2024-09-02,0.44924217940667366,603759.SH +2024-09-03,0.45929491873592476,603759.SH +2024-09-04,0.4555291720504659,603817.SH +2024-09-05,0.45486187663776934,000581.SZ +2024-09-06,0.458767486527876,600016.SH +2024-09-09,0.42622859802922114,000725.SZ +2024-09-10,0.47344109719180894,002239.SZ +2024-09-11,0.4602775423090333,600050.SH +2024-09-12,0.4581305095531178,603856.SH +2024-09-13,0.48196532955068866,002697.SZ +2024-09-18,0.48196532955068866,002697.SZ +2024-09-19,0.4448663482243619,600210.SH +2024-09-20,0.4894480847057984,600293.SH +2024-09-23,0.48392216170099567,002239.SZ +2024-09-24,0.43493260807615913,603182.SH +2024-09-25,0.4279590881784511,601369.SH +2024-09-26,0.457735727285402,600526.SH +2024-09-27,0.464687096497251,002818.SZ +2024-09-30,0.21397500413643297,600081.SH +2024-10-08,0.22763716829204592,605333.SH +2024-10-09,0.44498910797127905,600495.SH +2024-10-10,0.4635725472634731,600251.SH +2024-10-11,0.46083590103602623,000967.SZ +2024-10-14,0.47310129519500743,600251.SH +2024-10-15,0.4432757845922387,601727.SH +2024-10-16,0.49142274407028197,002267.SZ +2024-10-17,0.4969633584025033,600032.SH +2024-10-18,0.49050625194789943,002267.SZ +2024-10-21,0.4839204785725789,000709.SZ +2024-10-22,0.47843667953797847,002237.SZ +2024-10-23,0.4785259848937853,601577.SH +2024-10-24,0.48592022305116356,601577.SH +2024-10-25,0.4799806860019888,600820.SH +2024-10-28,0.4616976069244002,002135.SZ +2024-10-29,0.48907368099203313,600330.SH +2024-10-30,0.47786058189302977,600516.SH +2024-10-31,0.46572447890972274,600969.SH +2024-11-01,0.46269570933167936,600261.SH +2024-11-04,0.4819410916205754,600249.SH +2024-11-05,0.4866489103957071,603167.SH +2024-11-06,0.485704669384595,600423.SH +2024-11-07,0.4906974157098039,600249.SH +2024-11-08,0.47099968069944914,002328.SZ +2024-11-11,0.47924756292999116,600103.SH +2024-11-12,0.4864515748363791,600103.SH +2024-11-13,0.4682636704183581,600419.SH +2024-11-14,0.47314641913653194,000533.SZ +2024-11-15,0.48200633444426155,600103.SH +2024-11-18,0.4734312305146418,600300.SH +2024-11-19,0.481591587838489,601113.SH +2024-11-20,0.485704669384595,600493.SH +2024-11-21,0.48103812387602335,600515.SH +2024-11-22,0.48907368099203313,600284.SH +2024-11-25,0.49351892138415066,603111.SH +2024-11-26,0.49311491712360267,601187.SH +2024-11-27,0.49823564043257407,601187.SH +2024-11-28,0.49478522113574214,002091.SZ +2024-11-29,0.4744243783704977,002390.SZ +2024-12-02,0.47703304354620096,002390.SZ +2024-12-03,0.48674050526244056,002566.SZ +2024-12-04,0.4959275225246577,002753.SZ +2024-12-05,0.48839819807517926,002753.SZ +2024-12-06,0.4870618149295468,603128.SH +2024-12-09,0.49249410351771356,600425.SH +2024-12-10,0.4959275225246577,002772.SZ +2024-12-11,0.48502517567793635,600035.SH +2024-12-12,0.48907368099203313,600035.SH +2024-12-13,0.4901095168698787,600035.SH +2024-12-16,0.485704669384595,603577.SH +2024-12-17,0.42271811250681296,000533.SZ +2024-12-18,0.45253512664134277,000026.SZ +2024-12-19,0.4668403018194925,601000.SH +2024-12-20,0.47643624443298405,000026.SZ +2024-12-23,0.4405301681206755,600305.SH +2024-12-24,0.44052806294048863,000883.SZ +2024-12-25,0.448810439825342,000589.SZ +2024-12-26,0.47338854249265216,600582.SH +2024-12-27,0.4495112908067394,000830.SZ +2024-12-30,0.463164320301011,601006.SH +2024-12-31,0.4773178744459276,600004.SH +2025-01-02,0.47702414327290926,600572.SH +2025-01-03,0.4474782636368997,601163.SH +2025-01-06,0.4333771722554744,600821.SH +2025-01-07,0.44770531932040636,600004.SH +2025-01-08,0.47082512104142743,600116.SH +2025-01-09,0.4541624257750102,600004.SH +2025-01-10,0.4505883376349118,600905.SH +2025-01-13,0.4505883376349118,600905.SH +2025-01-14,0.4629277092655053,000088.SZ +2025-01-15,0.4849467618585074,601222.SH +2025-01-16,0.4904213884330184,600273.SH +2025-01-17,0.49427977331421474,002267.SZ +2025-01-20,0.4921881826907514,000088.SZ +2025-01-21,0.49980885843191936,002233.SZ +2025-01-22,0.49226959038014517,603817.SH +2025-01-23,0.4845623679956794,600731.SH +2025-01-24,0.4894480847057984,002443.SZ +2025-01-27,0.480828304199342,600475.SH +2025-02-05,0.49381191740852215,600475.SH +2025-02-06,0.48051107405830695,600219.SH +2025-02-07,0.4912337545022996,002365.SZ +2025-02-10,0.4891404807504195,002606.SZ +2025-02-11,0.48918316877240914,002454.SZ +2025-02-12,0.48841224882795287,605138.SH +2025-02-13,0.49427977331421474,603022.SH +2025-02-14,0.4961990011809636,002454.SZ +2025-02-17,0.49980885843191936,603172.SH +2025-02-18,0.4859761480409009,600526.SH +2025-02-19,0.47951904158629705,600526.SH +2025-02-20,0.4865640468808261,002972.SZ +2025-02-21,0.4878226668596109,002972.SZ +2025-02-24,0.49427977331421474,002972.SZ +2025-02-25,0.4959275225246577,002972.SZ +2025-02-26,0.49559758720502334,000850.SZ +2025-02-27,0.4962265008275085,600969.SH +2025-02-28,0.45857905703475876,000931.SZ +2025-03-03,0.475929514181944,600704.SH +2025-03-04,0.4855766924008325,603176.SH +2025-03-05,0.48947041607005387,600749.SH +2025-03-06,0.48947041607005387,600749.SH +2025-03-07,0.48852295338866114,002948.SZ +2025-03-10,0.48013938012027435,600749.SH +2025-03-11,0.4697442502219659,603916.SH +2025-03-12,0.46825376442882116,600969.SH +2025-03-13,0.485704669384595,601311.SH +2025-03-14,0.47290759442027386,600784.SH +2025-03-17,0.48236846890282975,002204.SZ +2025-03-18,0.4753161955607809,600784.SH +2025-03-19,0.4898609892396381,002627.SZ +2025-03-20,0.4898609892396381,002627.SZ +2025-03-21,0.47660773064492085,000589.SZ +2025-03-24,0.4753538392607698,000589.SZ +2025-03-25,0.4628733846203298,000589.SZ +2025-03-26,0.45948501496487415,603367.SH +2025-03-27,0.47591884404751766,600017.SH +2025-03-28,0.4765671044505851,600925.SH diff --git a/code/train/predictions_train.tsv b/code/train/predictions_train.tsv new file mode 100644 index 0000000..7109fac --- /dev/null +++ b/code/train/predictions_train.tsv @@ -0,0 +1,1116 @@ +trade_date,score,ts_code +2018-06-04,0.18423463856624533,601238.SH +2018-06-05,0.20221574184870214,600702.SH +2018-06-06,0.13252317509763495,601985.SH +2018-06-07,0.21648562116075595,600808.SH +2018-06-08,0.17291288916217423,000625.SZ +2018-06-11,0.20921231143707175,600808.SH +2018-06-12,0.16753801586648182,600761.SH +2018-06-13,0.20070675383742204,600307.SH +2018-06-14,0.198811335013709,600126.SH +2018-06-15,0.20106009685161316,000778.SZ +2018-06-19,0.18959626724356846,601169.SH +2018-06-20,0.1773954137668958,600010.SH +2018-06-21,0.16571570926131357,601898.SH +2018-06-22,0.1742081629343484,600010.SH +2018-06-25,0.17497004108373962,601311.SH +2018-06-26,0.1483254842213669,600478.SH +2018-06-27,0.10626658806004101,002594.SZ +2018-06-28,0.1279323770130037,600478.SH +2018-06-29,0.17022069434514087,000009.SZ +2018-07-02,0.11732186642418092,600110.SH +2018-07-03,0.12825629508196462,600984.SH +2018-07-04,0.14445110167430447,601991.SH +2018-07-05,0.12937006378431593,601169.SH +2018-07-06,0.13057514713080395,601169.SH +2018-07-09,0.10836510627410145,002625.SZ +2018-07-10,0.1205088665507418,002842.SZ +2018-07-11,0.15765214975977376,002812.SZ +2018-07-12,0.14865754892832123,000049.SZ +2018-07-13,0.15938762336867016,601311.SH +2018-07-16,0.13305101109595152,600696.SH +2018-07-17,0.150052839513973,002709.SZ +2018-07-18,0.17001633762229568,600593.SH +2018-07-19,0.18941244105140434,002487.SZ +2018-07-20,0.1795494345127134,600863.SH +2018-07-23,0.2041861532715287,600126.SH +2018-07-24,0.19445040699449348,000778.SZ +2018-07-25,0.1727531700347936,000778.SZ +2018-07-26,0.18341912819955636,000778.SZ +2018-07-27,0.17549002030690858,600307.SH +2018-07-30,0.20810221606438242,600126.SH +2018-07-31,0.1862513436072853,600578.SH +2018-08-01,0.19781856809627607,600578.SH +2018-08-02,0.1866633696823395,000157.SZ +2018-08-03,0.15357217636237463,600395.SH +2018-08-06,0.12024946313525392,600803.SH +2018-08-07,0.2047595071736526,000157.SZ +2018-08-08,0.1496426768353182,601985.SH +2018-08-09,0.1893057604194163,600307.SH +2018-08-10,0.13523929442295543,600795.SH +2018-08-13,0.12756684090118625,000858.SZ +2018-08-14,0.12604086393014213,601985.SH +2018-08-15,0.08779600371440273,601633.SH +2018-08-16,0.14315954327750763,600519.SH +2018-08-17,0.11589314487335094,002304.SZ +2018-08-20,0.15998158265120122,000552.SZ +2018-08-21,0.1900834189127013,000001.SZ +2018-08-22,0.13961931306710057,000778.SZ +2018-08-23,0.12199933651825641,600215.SH +2018-08-24,0.18201719729368523,600000.SH +2018-08-27,0.17256995715046078,601818.SH +2018-08-28,0.15674185203098806,600118.SH +2018-08-29,0.14793175165729217,600007.SH +2018-08-30,0.17648869228543992,600015.SH +2018-08-31,0.16762542695338595,600919.SH +2018-09-03,0.18232613691528055,600926.SH +2018-09-04,0.17185094953991636,002506.SZ +2018-09-05,0.14705368395891033,002506.SZ +2018-09-06,0.1454385264771671,600869.SH +2018-09-07,0.1598541378520439,002498.SZ +2018-09-10,0.1726920612354666,600268.SH +2018-09-11,0.17937075334306313,601179.SH +2018-09-12,0.19466728712170434,603333.SH +2018-09-13,0.17921709999039664,601179.SH +2018-09-14,0.17285636821819902,002533.SZ +2018-09-17,0.18008848830142832,600192.SH +2018-09-18,0.18565345413738435,002546.SZ +2018-09-19,0.18163342597831278,000858.SZ +2018-09-20,0.17055407319232854,000009.SZ +2018-09-21,0.18629753733988752,600559.SH +2018-09-25,0.16570574373293342,601238.SH +2018-09-26,0.19606299085085432,600549.SH +2018-09-27,0.16581715319716397,600508.SH +2018-09-28,0.20142762353299368,600919.SH +2018-10-08,0.19712397521509623,601169.SH +2018-10-09,0.17118087245643468,600395.SH +2018-10-10,0.16959180536495758,600395.SH +2018-10-11,0.15096672181266177,601169.SH +2018-10-12,0.17431877769790666,600307.SH +2018-10-15,0.17659100900903707,601169.SH +2018-10-16,0.1306810644592925,600869.SH +2018-10-17,0.13838453585217023,002039.SZ +2018-10-18,0.1625048944804212,600236.SH +2018-10-19,0.16908116843188264,600000.SH +2018-10-22,0.19313920272421822,601169.SH +2018-10-23,0.16382588974514828,600095.SH +2018-10-24,0.19639483849075373,601169.SH +2018-10-25,0.173462408016599,601311.SH +2018-10-26,0.17272570909171692,600095.SH +2018-10-29,0.14946127093822467,600467.SH +2018-10-30,0.153746651184532,000776.SZ +2018-10-31,0.16883660559962277,600467.SH +2018-11-01,0.160419245236889,600665.SH +2018-11-02,0.16514680406669485,002698.SZ +2018-11-05,0.1248944288975124,000831.SZ +2018-11-06,0.14774313927657257,600467.SH +2018-11-07,0.16695693954011018,600097.SH +2018-11-08,0.14893681326034533,603577.SH +2018-11-09,0.1778222346743419,603577.SH +2018-11-12,0.14525075576915017,002623.SZ +2018-11-13,0.13869854628578523,603218.SH +2018-11-14,0.13402353337818051,002531.SZ +2018-11-15,0.1419232898840986,603861.SH +2018-11-16,0.12484201318061076,600468.SH +2018-11-19,0.1340797271479573,002531.SZ +2018-11-20,0.13363793220119488,603906.SH +2018-11-21,0.14962239345587283,600458.SH +2018-11-22,0.15830095877675748,002487.SZ +2018-11-23,0.12274154246622596,600268.SH +2018-11-26,0.14003241529334218,600869.SH +2018-11-27,0.15445609162978877,600936.SH +2018-11-28,0.16831211127548162,603659.SH +2018-11-29,0.1599529559312206,002850.SZ +2018-11-30,0.1730038738133559,603919.SH +2018-12-03,0.19217182470119493,603026.SH +2018-12-04,0.2041479243275984,002125.SZ +2018-12-05,0.21321545366299993,002182.SZ +2018-12-06,0.19044688913091407,601311.SH +2018-12-07,0.16482258247893164,603919.SH +2018-12-10,0.14859203465151063,002218.SZ +2018-12-11,0.18786019680959626,002533.SZ +2018-12-12,0.171632214831274,002733.SZ +2018-12-13,0.1711870017969341,600089.SH +2018-12-14,0.1764463506168984,601127.SH +2018-12-17,0.1594515043788005,600674.SH +2018-12-18,0.19124368093672023,600578.SH +2018-12-19,0.14864023224692266,600104.SH +2018-12-20,0.16577803806901018,600104.SH +2018-12-21,0.1831100024763051,002358.SZ +2018-12-24,0.1769486244363681,601985.SH +2018-12-25,0.1638898443357337,600982.SH +2018-12-26,0.18602028156964462,600089.SH +2018-12-27,0.17884789775247723,002498.SZ +2018-12-28,0.17799069507852747,601991.SH +2019-01-02,0.13968455292234946,601169.SH +2019-01-03,0.15983736142176988,002471.SZ +2019-01-04,0.18619667037429768,603556.SH +2019-01-07,0.18929393779623102,600192.SH +2019-01-08,0.20259765481472927,600192.SH +2019-01-09,0.1980213554914237,600089.SH +2019-01-10,0.18310072310962403,603333.SH +2019-01-11,0.16853282857401888,600537.SH +2019-01-14,0.19847851637345504,600307.SH +2019-01-15,0.18143061764940374,603198.SH +2019-01-16,0.17191274302073425,600199.SH +2019-01-17,0.16216819202629026,600123.SH +2019-01-18,0.18091352424031126,000709.SZ +2019-01-21,0.17937117387250082,603198.SH +2019-01-22,0.13800387979592038,603806.SH +2019-01-23,0.17716760025218856,603026.SH +2019-01-24,0.1643595205800027,002245.SZ +2019-01-25,0.19379105119616777,002125.SZ +2019-01-28,0.17245533747196398,601997.SH +2019-01-29,0.17241450760389568,600926.SH +2019-01-30,0.19023750829662556,600307.SH +2019-01-31,0.15910502788627465,601997.SH +2019-02-01,0.1590721734873878,600926.SH +2019-02-11,0.17252317890720548,000157.SZ +2019-02-12,0.1781112710501537,600458.SH +2019-02-13,0.17446115454967337,002074.SZ +2019-02-14,0.17688227495784695,600199.SH +2019-02-15,0.17527949408404297,603026.SH +2019-02-18,0.15992248281341642,000049.SZ +2019-02-19,0.14117224478430473,002747.SZ +2019-02-20,0.1422057614036836,002340.SZ +2019-02-21,0.15467696560251712,002428.SZ +2019-02-22,0.1669173760785788,002245.SZ +2019-02-25,0.1255938497645231,601100.SH +2019-02-26,0.12252190947220522,002149.SZ +2019-02-27,0.10447985239697256,000584.SZ +2019-02-28,0.11756265851768292,600111.SH +2019-03-01,0.15829297972694772,002546.SZ +2019-03-04,0.11793702792369766,002276.SZ +2019-03-05,0.13129708403736062,601100.SH +2019-03-06,0.1571026337202067,002340.SZ +2019-03-07,0.16046296230994594,000831.SZ +2019-03-08,0.13583563481221017,002546.SZ +2019-03-11,0.14358674757577478,603369.SH +2019-03-12,0.12944989005096239,601126.SH +2019-03-13,0.146967311061323,603338.SH +2019-03-14,0.1499215376964026,603198.SH +2019-03-15,0.17879907098815453,603198.SH +2019-03-18,0.17569196598112033,600519.SH +2019-03-19,0.16480520952143843,002142.SZ +2019-03-20,0.14945498293834122,603203.SH +2019-03-21,0.1704289695330449,002203.SZ +2019-03-22,0.17563475734326267,002203.SZ +2019-03-25,0.19121434421850952,000978.SZ +2019-03-26,0.16918416342267253,002203.SZ +2019-03-27,0.15944403154599288,002203.SZ +2019-03-28,0.13487702126355428,600873.SH +2019-03-29,0.18036245503165743,002646.SZ +2019-04-01,0.1458857906778758,002128.SZ +2019-04-02,0.152974367151872,002738.SZ +2019-04-03,0.16012143976670243,000157.SZ +2019-04-04,0.1527715714464238,601238.SH +2019-04-08,0.15350349382058912,600126.SH +2019-04-09,0.1417919712894545,000709.SZ +2019-04-10,0.1922896875486184,600104.SH +2019-04-11,0.21168115542921748,601127.SH +2019-04-12,0.22105416867914884,600863.SH +2019-04-15,0.1974664164140294,600021.SH +2019-04-16,0.18193190554190192,601169.SH +2019-04-17,0.1745861523596014,600110.SH +2019-04-18,0.15087392235337121,600674.SH +2019-04-19,0.17279772324276435,601918.SH +2019-04-22,0.19577385371504233,000937.SZ +2019-04-23,0.15840107433914835,000821.SZ +2019-04-24,0.16736284045699887,601666.SH +2019-04-25,0.18037177278212255,600429.SH +2019-04-26,0.14517815248982202,600197.SH +2019-04-29,0.17453819003314722,600696.SH +2019-04-30,0.13168468971389344,603260.SH +2019-05-06,0.17862895526049727,600098.SH +2019-05-07,0.17841652377023987,600824.SH +2019-05-08,0.1422026771369669,000429.SZ +2019-05-09,0.14571925169346261,600519.SH +2019-05-10,0.18035899939753797,600118.SH +2019-05-13,0.1368834471393572,600605.SH +2019-05-14,0.2006577577423028,600879.SH +2019-05-15,0.20994216802303234,603198.SH +2019-05-16,0.19782134024446882,600879.SH +2019-05-17,0.15753735679666947,603198.SH +2019-05-20,0.14786220640906195,600549.SH +2019-05-21,0.16258678436903642,000962.SZ +2019-05-22,0.16277191930497809,002378.SZ +2019-05-23,0.09895594305774452,600392.SH +2019-05-24,0.11111691611445426,600392.SH +2019-05-27,0.16143115395672678,002531.SZ +2019-05-28,0.12672945498041802,600900.SH +2019-05-29,0.18852699609010767,601958.SH +2019-05-30,0.176597016709752,601985.SH +2019-05-31,0.19058905750692806,603985.SH +2019-06-03,0.17221364012509355,601985.SH +2019-06-04,0.11291008719661677,600936.SH +2019-06-05,0.15092793909059452,600959.SH +2019-06-06,0.14647739928431133,002608.SZ +2019-06-10,0.18038977399743567,600483.SH +2019-06-11,0.19334386096910408,601958.SH +2019-06-12,0.21324996703256263,000960.SZ +2019-06-13,0.17236994746724524,603659.SH +2019-06-14,0.15700753527094985,000630.SZ +2019-06-17,0.15709753715942196,600984.SH +2019-06-18,0.15436864643049358,603298.SH +2019-06-19,0.1559475787770595,600909.SH +2019-06-20,0.1898094681420803,601838.SH +2019-06-21,0.19638364145181075,600559.SH +2019-06-24,0.20595277547920993,603919.SH +2019-06-25,0.186551712812105,600197.SH +2019-06-26,0.13002605988628504,603638.SH +2019-06-27,0.1951129502425258,002304.SZ +2019-06-28,0.16573361427879016,603919.SH +2019-07-01,0.15746293745986545,603507.SH +2019-07-02,0.18004192154906942,600104.SH +2019-07-03,0.14806572587942304,603203.SH +2019-07-04,0.15892523772252118,603198.SH +2019-07-05,0.1554826611291877,603589.SH +2019-07-08,0.1382913404475126,601100.SH +2019-07-09,0.15199050232940958,603985.SH +2019-07-10,0.17393415933166598,600696.SH +2019-07-11,0.13102102470396146,600110.SH +2019-07-12,0.1616748888942711,600110.SH +2019-07-15,0.1630129327170569,600732.SH +2019-07-16,0.16681915438051287,000425.SZ +2019-07-17,0.17956809564281126,600031.SH +2019-07-18,0.1612602205952535,600031.SH +2019-07-19,0.1653949358520933,002203.SZ +2019-07-22,0.156397869243784,600732.SH +2019-07-23,0.17164505845260347,603659.SH +2019-07-24,0.17330228060606936,603659.SH +2019-07-25,0.17145216944273017,601998.SH +2019-07-26,0.15980315206765608,601229.SH +2019-07-29,0.1624849755743802,600795.SH +2019-07-30,0.17098042527601862,603659.SH +2019-07-31,0.15975760897848393,600761.SH +2019-08-01,0.14610229697671034,600982.SH +2019-08-02,0.16055163102490408,000657.SZ +2019-08-05,0.14441216865439938,002459.SZ +2019-08-06,0.1419348609747458,600236.SH +2019-08-07,0.17099338814935355,000960.SZ +2019-08-08,0.18888061146880378,002821.SZ +2019-08-09,0.178965226379276,603198.SH +2019-08-12,0.1807958615545666,603198.SH +2019-08-13,0.18162705075505656,603456.SH +2019-08-14,0.1663451521435803,000568.SZ +2019-08-15,0.17154166666715093,603259.SH +2019-08-16,0.16094981887010973,603369.SH +2019-08-19,0.1636172306085296,600511.SH +2019-08-20,0.15824762835048561,002698.SZ +2019-08-21,0.1644308256479965,002531.SZ +2019-08-22,0.18259123020528842,002531.SZ +2019-08-23,0.1422081101473711,000950.SZ +2019-08-26,0.1755781904880205,002202.SZ +2019-08-27,0.1389360964666334,600760.SH +2019-08-28,0.1441929267647425,002230.SZ +2019-08-29,0.18342549355184926,603985.SH +2019-08-30,0.18115983586171922,002646.SZ +2019-09-02,0.15614262993454253,002322.SZ +2019-09-03,0.13792928700613805,002063.SZ +2019-09-04,0.14267953550145748,000682.SZ +2019-09-05,0.1652092673392108,002487.SZ +2019-09-06,0.16940825442265123,600869.SH +2019-09-09,0.17258287944868203,600869.SH +2019-09-10,0.1705927629063362,002857.SZ +2019-09-11,0.1671042540590599,002350.SZ +2019-09-12,0.16544157815571642,603338.SH +2019-09-16,0.18257402351800509,002270.SZ +2019-09-17,0.1737748226980118,002879.SZ +2019-09-18,0.18193042967963294,603369.SH +2019-09-19,0.18200815982244348,600197.SH +2019-09-20,0.1697676817086606,600559.SH +2019-09-23,0.14650445085693484,601179.SH +2019-09-24,0.1604024639876834,002879.SZ +2019-09-25,0.14702828072040186,002546.SZ +2019-09-26,0.18897161855984526,601997.SH +2019-09-27,0.17555662922823773,601838.SH +2019-09-30,0.11567064721126855,002685.SZ +2019-10-08,0.15332546159334792,002202.SZ +2019-10-09,0.2022622807414354,600926.SH +2019-10-10,0.16495908208145105,601218.SH +2019-10-11,0.1895364350295671,601838.SH +2019-10-14,0.18359268242523089,601998.SH +2019-10-15,0.19637695045450235,601838.SH +2019-10-16,0.19337482731381986,601229.SH +2019-10-17,0.19434932080374315,600919.SH +2019-10-18,0.19818274065481434,601997.SH +2019-10-21,0.11790412885657865,000521.SZ +2019-10-22,0.14237783575025656,603298.SH +2019-10-23,0.14746069401736744,000798.SZ +2019-10-24,0.1484525356150478,002936.SZ +2019-10-25,0.1533875530332632,600000.SH +2019-10-28,0.16018219317975232,601218.SH +2019-10-29,0.16230394791393807,600097.SH +2019-10-30,0.15772280215050913,000651.SZ +2019-10-31,0.17096460202685007,000333.SZ +2019-11-01,0.1597676199384802,600919.SH +2019-11-04,0.14024190109654905,000848.SZ +2019-11-05,0.180963315838935,601169.SH +2019-11-06,0.18222917816706524,002340.SZ +2019-11-07,0.18217373595084138,002709.SZ +2019-11-08,0.1695892315444436,601311.SH +2019-11-11,0.16609871978711999,000333.SZ +2019-11-12,0.12768332432590118,000651.SZ +2019-11-13,0.1646425489415209,000710.SZ +2019-11-14,0.18844787765765975,603919.SH +2019-11-15,0.15044254772547244,002709.SZ +2019-11-18,0.15509396092738365,601229.SH +2019-11-19,0.16966297319284113,600031.SH +2019-11-20,0.16468944127489635,600549.SH +2019-11-21,0.16225565546765655,600019.SH +2019-11-22,0.19608391848283319,000778.SZ +2019-11-25,0.1809818508340601,000778.SZ +2019-11-26,0.18453879452988442,601005.SH +2019-11-27,0.19885337377750262,002340.SZ +2019-11-28,0.18541339078368999,600549.SH +2019-11-29,0.14767529369857307,601238.SH +2019-12-02,0.16771790527691402,601311.SH +2019-12-03,0.15741941435397683,002218.SZ +2019-12-04,0.19550894754901552,002709.SZ +2019-12-05,0.17706367827979527,002182.SZ +2019-12-06,0.19962978576539273,002245.SZ +2019-12-09,0.1641205206866854,002232.SZ +2019-12-10,0.1866919270587312,002709.SZ +2019-12-11,0.18332092606064096,002245.SZ +2019-12-12,0.1663354707804964,002149.SZ +2019-12-13,0.1667844261125831,002074.SZ +2019-12-16,0.17815622698680625,600690.SH +2019-12-17,0.16753802248899513,002074.SZ +2019-12-18,0.16772004597145412,000425.SZ +2019-12-19,0.1565836595068554,601198.SH +2019-12-20,0.16814059543728155,002125.SZ +2019-12-23,0.17067979823934795,002125.SZ +2019-12-24,0.17752818526859798,000009.SZ +2019-12-25,0.17041561926869567,000657.SZ +2019-12-26,0.17591390070257382,002580.SZ +2019-12-27,0.18167552520115343,600549.SH +2019-12-30,0.1935487148375531,600549.SH +2019-12-31,0.1884546205883217,002580.SZ +2020-01-02,0.1776048209485717,002738.SZ +2020-01-03,0.16757739150547485,000962.SZ +2020-01-06,0.1589581077631563,002245.SZ +2020-01-07,0.19649068913244963,601311.SH +2020-01-08,0.16942666176580484,000962.SZ +2020-01-09,0.15510741856126553,600761.SH +2020-01-10,0.16421751588856554,601100.SH +2020-01-13,0.16458297368678557,002580.SZ +2020-01-14,0.16623497618616634,000960.SZ +2020-01-15,0.14958770347971467,000960.SZ +2020-01-16,0.1453429805914475,603638.SH +2020-01-17,0.164499458181833,603638.SH +2020-01-20,0.1629657021422537,002149.SZ +2020-01-21,0.15974194969960911,603368.SH +2020-01-22,0.1565057003439686,601607.SH +2020-01-23,0.1556224679492242,600879.SH +2020-02-03,0.15069820822144814,603806.SH +2020-02-04,0.15202066813792606,600031.SH +2020-02-05,0.1729188764624542,600879.SH +2020-02-06,0.1684221527943814,600879.SH +2020-02-07,0.16347705875677468,600884.SH +2020-02-10,0.1600089895308011,002829.SZ +2020-02-11,0.16568897424387033,002829.SZ +2020-02-12,0.1516050958269647,600110.SH +2020-02-13,0.14931825834504905,002218.SZ +2020-02-14,0.19957329964449455,000962.SZ +2020-02-17,0.1762962274937971,000962.SZ +2020-02-18,0.19489419428647045,002149.SZ +2020-02-19,0.16342288362345223,002149.SZ +2020-02-20,0.15578830292176948,000962.SZ +2020-02-21,0.15611967703807103,002331.SZ +2020-02-24,0.16230874711000895,603918.SH +2020-02-25,0.14962569909633672,601633.SH +2020-02-26,0.17655279620455383,601633.SH +2020-02-27,0.16759780613264072,601218.SH +2020-02-28,0.14651373181993677,000528.SZ +2020-03-02,0.16734282967262873,002546.SZ +2020-03-03,0.17461185389187867,603618.SH +2020-03-04,0.14993730349619872,000090.SZ +2020-03-05,0.18498650253561427,002090.SZ +2020-03-06,0.2620103362921763,600192.SH +2020-03-09,0.24779611647848726,002300.SZ +2020-03-10,0.23738090257654434,002300.SZ +2020-03-11,0.25496969492040245,002033.SZ +2020-03-12,0.21315871240696094,601126.SH +2020-03-13,0.23713801049591554,000978.SZ +2020-03-16,0.23385864144472818,603829.SH +2020-03-17,0.15837207100031198,601169.SH +2020-03-18,0.16062670518390293,600838.SH +2020-03-19,0.21413168254540296,600865.SH +2020-03-20,0.2414318952670421,600865.SH +2020-03-23,0.22345755545108448,600814.SH +2020-03-24,0.19302978249878588,600429.SH +2020-03-25,0.21588624622511904,600814.SH +2020-03-26,0.2194918349379615,600865.SH +2020-03-27,0.22710089000613976,002561.SZ +2020-03-30,0.21358827161607877,600857.SH +2020-03-31,0.19988398610388428,600605.SH +2020-04-01,0.23127064064440603,600097.SH +2020-04-02,0.16661316966437734,600419.SH +2020-04-03,0.1647839038620518,002726.SZ +2020-04-07,0.1664284311778115,000529.SZ +2020-04-08,0.12754138166149231,002840.SZ +2020-04-09,0.13936237961233935,002330.SZ +2020-04-10,0.12732953487456972,002330.SZ +2020-04-13,0.1528971971908885,600761.SH +2020-04-14,0.16492858385927905,600713.SH +2020-04-15,0.1760449748704622,002462.SZ +2020-04-16,0.15636447704007664,600713.SH +2020-04-17,0.17166807990128016,603198.SH +2020-04-20,0.14439451958218857,002361.SZ +2020-04-21,0.15050701147264614,603906.SH +2020-04-22,0.1775180254081717,603198.SH +2020-04-23,0.16355173574966209,603298.SH +2020-04-24,0.19451792866906586,600197.SH +2020-04-27,0.18199405063884347,603198.SH +2020-04-28,0.17308754546977723,603198.SH +2020-04-29,0.17047153178194602,000568.SZ +2020-04-30,0.18573072303909838,601311.SH +2020-05-06,0.16594488124696208,601615.SH +2020-05-07,0.1750989884632903,002531.SZ +2020-05-08,0.17791478665819788,603198.SH +2020-05-11,0.16364307331267314,002304.SZ +2020-05-12,0.1717866872495883,603218.SH +2020-05-13,0.16110757624480204,600559.SH +2020-05-14,0.14601315809461732,600779.SH +2020-05-15,0.1527446114366914,603203.SH +2020-05-18,0.16605395900955908,000962.SZ +2020-05-19,0.17701091824574605,000657.SZ +2020-05-20,0.1696457548257732,603015.SH +2020-05-21,0.17592378173823867,600559.SH +2020-05-22,0.1631518787570469,000858.SZ +2020-05-25,0.11939767387933142,600650.SH +2020-05-26,0.15225287704184715,000921.SZ +2020-05-27,0.15525051380953528,600824.SH +2020-05-28,0.18446986430261167,603099.SH +2020-05-29,0.19959343985457523,603099.SH +2020-06-01,0.19121123670613158,600559.SH +2020-06-02,0.12461686307121207,600697.SH +2020-06-03,0.16324697062842122,002580.SZ +2020-06-04,0.19210544335908927,002580.SZ +2020-06-05,0.17059180662504458,600959.SH +2020-06-08,0.16327321195316724,601615.SH +2020-06-09,0.15517744702656783,002733.SZ +2020-06-10,0.15703605442223942,002818.SZ +2020-06-11,0.14691034917860277,002698.SZ +2020-06-12,0.15690542615284978,002125.SZ +2020-06-15,0.14014546274964076,002698.SZ +2020-06-16,0.15894429358704767,002340.SZ +2020-06-17,0.13165352716965414,600959.SH +2020-06-18,0.17137675749017017,600456.SH +2020-06-19,0.16986543847631755,002340.SZ +2020-06-22,0.1587580322080993,002340.SZ +2020-06-23,0.17039867786803956,002245.SZ +2020-06-24,0.15823034287110205,603368.SH +2020-06-29,0.1521200827384958,002182.SZ +2020-06-30,0.14760207791986968,603203.SH +2020-07-01,0.15776272927182164,002304.SZ +2020-07-02,0.15864486075717463,600456.SH +2020-07-03,0.15993705614798262,603026.SH +2020-07-06,0.11438556472917977,000960.SZ +2020-07-07,0.11591502497650934,600519.SH +2020-07-08,0.13847552667771848,000831.SZ +2020-07-09,0.11905477520343884,603416.SH +2020-07-10,0.13870757851920557,601633.SH +2020-07-13,0.14207491494469188,600577.SH +2020-07-14,0.1277788700824254,600979.SH +2020-07-15,0.1484551946844287,000584.SZ +2020-07-16,0.16797223599720085,002842.SZ +2020-07-17,0.1528664748086893,600519.SH +2020-07-20,0.1571331266756986,002246.SZ +2020-07-21,0.16484257494244484,603861.SH +2020-07-22,0.17615980578554524,603015.SH +2020-07-23,0.16875121026342027,002202.SZ +2020-07-24,0.17479243984043838,002580.SZ +2020-07-27,0.1585084683889329,000798.SZ +2020-07-28,0.16628591969854217,600097.SH +2020-07-29,0.1513318340608193,600690.SH +2020-07-30,0.201623104846795,603063.SH +2020-07-31,0.200776251781631,600192.SH +2020-08-03,0.19763898831738164,603063.SH +2020-08-04,0.15751286457673025,603333.SH +2020-08-05,0.1318829232060969,002879.SZ +2020-08-06,0.16807876255878285,603298.SH +2020-08-07,0.15038484201670993,600973.SH +2020-08-10,0.17245607660666162,002546.SZ +2020-08-11,0.1966704558613683,601997.SH +2020-08-12,0.20362734396878646,601009.SH +2020-08-13,0.1856203218347746,601009.SH +2020-08-14,0.14664894527220196,002580.SZ +2020-08-17,0.18270478328589934,600919.SH +2020-08-18,0.2112455859509734,600919.SH +2020-08-19,0.22797106412992,600674.SH +2020-08-20,0.2513611267651093,600674.SH +2020-08-21,0.20889014013466625,601985.SH +2020-08-24,0.18686353821807467,603589.SH +2020-08-25,0.17923087765804538,002304.SZ +2020-08-26,0.17960554693024688,601100.SH +2020-08-27,0.1430541112780741,002533.SZ +2020-08-28,0.20448284782948756,601218.SH +2020-08-31,0.2074090784813979,601229.SH +2020-09-01,0.17782640939063651,002948.SZ +2020-09-02,0.14033607867656697,000778.SZ +2020-09-03,0.14041608028741606,600559.SH +2020-09-04,0.18958184136790662,000858.SZ +2020-09-07,0.2063480455142334,000888.SZ +2020-09-08,0.18047261572387596,600025.SH +2020-09-09,0.2226835534805117,600019.SH +2020-09-10,0.19355405994658967,000709.SZ +2020-09-11,0.20853985007246284,000778.SZ +2020-09-14,0.18425828506856598,603099.SH +2020-09-15,0.22321362042814158,600054.SH +2020-09-16,0.19594995145936825,002033.SZ +2020-09-17,0.1592186249525627,002278.SZ +2020-09-18,0.18624879835405517,600123.SH +2020-09-21,0.1924585137964555,600348.SH +2020-09-22,0.16081537842178975,601198.SH +2020-09-23,0.1753073284808983,600833.SH +2020-09-24,0.15721832095723867,601012.SH +2020-09-25,0.13788239805453897,600785.SH +2020-09-28,0.16082710647150733,603108.SH +2020-09-29,0.1389017204627297,603032.SH +2020-09-30,0.17450926352423268,600207.SH +2020-10-09,0.21568257223645135,002865.SZ +2020-10-12,0.1980730968278872,601311.SH +2020-10-13,0.17592080126475323,601238.SH +2020-10-14,0.2119467772247144,002533.SZ +2020-10-15,0.18565437969132279,002580.SZ +2020-10-16,0.17424308537806452,600123.SH +2020-10-19,0.17395622505409863,002936.SZ +2020-10-20,0.17136636573951494,000568.SZ +2020-10-21,0.17662794491799966,002936.SZ +2020-10-22,0.1544361807121186,603031.SH +2020-10-23,0.1678526569173178,601311.SH +2020-10-26,0.19990027607677519,603897.SH +2020-10-27,0.18566380207642996,601311.SH +2020-10-28,0.1889110891980309,601311.SH +2020-10-29,0.17600742332278738,603589.SH +2020-10-30,0.20720399934983197,000651.SZ +2020-11-02,0.19357482152023114,000651.SZ +2020-11-03,0.2110147317195107,002540.SZ +2020-11-04,0.23330944676301976,000960.SZ +2020-11-05,0.19595949028709833,600549.SH +2020-11-06,0.22600571063344838,000960.SZ +2020-11-09,0.21540553630310497,600782.SH +2020-11-10,0.21635106228592196,600497.SH +2020-11-11,0.23916610867655366,000060.SZ +2020-11-12,0.21877300071984196,000060.SZ +2020-11-13,0.244846925325657,000060.SZ +2020-11-16,0.2019847305529161,002540.SZ +2020-11-17,0.20853055536790333,000060.SZ +2020-11-18,0.23764104978748926,601958.SH +2020-11-19,0.23339457573565814,000657.SZ +2020-11-20,0.204947418493216,002540.SZ +2020-11-23,0.2128369715458883,601958.SH +2020-11-24,0.23284587398922246,000657.SZ +2020-11-25,0.2396831848680999,601958.SH +2020-11-26,0.27308248498817,600101.SH +2020-11-27,0.2210393803809697,600969.SH +2020-11-30,0.20568128473476563,600097.SH +2020-12-01,0.21082283768421164,600097.SH +2020-12-02,0.22706451742583683,600097.SH +2020-12-03,0.18946568721998444,601169.SH +2020-12-04,0.21081803996792364,600519.SH +2020-12-07,0.1899971127873679,600519.SH +2020-12-08,0.18614864200523476,600519.SH +2020-12-09,0.18267219459699946,002910.SZ +2020-12-10,0.16164970452209185,600281.SH +2020-12-11,0.15109159571294067,000709.SZ +2020-12-14,0.20320476009069524,600207.SH +2020-12-15,0.18434893047301928,000568.SZ +2020-12-16,0.19968612999767363,600207.SH +2020-12-17,0.1923937783280185,601958.SH +2020-12-18,0.20638502424394384,601958.SH +2020-12-21,0.19714341948408637,601958.SH +2020-12-22,0.18018011602753567,000009.SZ +2020-12-23,0.1942471038288267,000858.SZ +2020-12-24,0.18553427045843496,002580.SZ +2020-12-25,0.21458139384018446,603618.SH +2020-12-28,0.2058649200376683,002580.SZ +2020-12-29,0.15953540878045994,600458.SH +2020-12-30,0.19715415440901266,002580.SZ +2020-12-31,0.20204750564951318,002580.SZ +2021-01-04,0.2019589332256311,002580.SZ +2021-01-05,0.14203462174669962,603338.SH +2021-01-06,0.13614150850645435,002142.SZ +2021-01-07,0.18260926374480313,000528.SZ +2021-01-08,0.16344523105196473,603015.SH +2021-01-11,0.20759715544273835,600259.SH +2021-01-12,0.14257742511650529,601009.SH +2021-01-13,0.19279524947795507,600259.SH +2021-01-14,0.15993930563250428,000988.SZ +2021-01-15,0.1877078647237692,002966.SZ +2021-01-18,0.1914559823082226,601229.SH +2021-01-19,0.16871313932235954,601998.SH +2021-01-20,0.19291866972086083,000657.SZ +2021-01-21,0.17557609760491458,000009.SZ +2021-01-22,0.18010231771368115,000009.SZ +2021-01-25,0.1824569424987482,002184.SZ +2021-01-26,0.12101618403801837,600908.SH +2021-01-27,0.14180034435505184,601577.SH +2021-01-28,0.13680995594147918,603638.SH +2021-01-29,0.21855186006490196,002033.SZ +2021-02-01,0.21737892577292225,002033.SZ +2021-02-02,0.15727246747363754,600000.SH +2021-02-03,0.15512972938484376,000572.SZ +2021-02-04,0.16591865856604207,601997.SH +2021-02-05,0.1686627724774876,601169.SH +2021-02-08,0.15624118965638506,601038.SH +2021-02-09,0.17076885176829792,002578.SZ +2021-02-10,0.18754278082751466,002203.SZ +2021-02-18,0.2190181619932198,002033.SZ +2021-02-19,0.2291903299405773,601958.SH +2021-02-22,0.18724073790149107,600282.SH +2021-02-23,0.244451711688069,600282.SH +2021-02-24,0.24866226129176788,600022.SH +2021-02-25,0.25503597329239674,600022.SH +2021-02-26,0.12215044783345241,600743.SH +2021-03-01,0.24701998005135878,600808.SH +2021-03-02,0.2563095264103556,600808.SH +2021-03-03,0.233828940170071,000778.SZ +2021-03-04,0.26785117190729735,000778.SZ +2021-03-05,0.24834326893770745,600808.SH +2021-03-08,0.28957717751394596,000778.SZ +2021-03-09,0.2226856452874473,603878.SH +2021-03-10,0.22893301442929243,600780.SH +2021-03-11,0.23508087432545732,600101.SH +2021-03-12,0.22890764992980306,000539.SZ +2021-03-15,0.2674583838772481,000543.SZ +2021-03-16,0.2786195467028672,600101.SH +2021-03-17,0.23786135435209096,600719.SH +2021-03-18,0.23960977315888332,600101.SH +2021-03-19,0.2486459185095781,600863.SH +2021-03-22,0.23414312942397025,600642.SH +2021-03-23,0.2530037268436895,600863.SH +2021-03-24,0.24450846751596714,000539.SZ +2021-03-25,0.23025876862148706,600863.SH +2021-03-26,0.23542264867599655,600863.SH +2021-03-29,0.19709472473502235,600023.SH +2021-03-30,0.18849467088008423,600642.SH +2021-03-31,0.20358224872921968,600149.SH +2021-04-01,0.18157812941774423,600642.SH +2021-04-02,0.1251033322157906,600149.SH +2021-04-06,0.1546992390646773,000407.SZ +2021-04-07,0.17978660937706825,000709.SZ +2021-04-08,0.20761274688916528,000778.SZ +2021-04-09,0.14558901880320993,600123.SH +2021-04-12,0.18076976941954656,000507.SZ +2021-04-13,0.1903130749882708,000778.SZ +2021-04-14,0.1393121225811194,600197.SH +2021-04-15,0.12803601898815095,600361.SH +2021-04-16,0.17853382726056027,600348.SH +2021-04-19,0.17753750198565058,600152.SH +2021-04-20,0.21472450440204605,600152.SH +2021-04-21,0.19027741406168378,600152.SH +2021-04-22,0.19148781649980806,600152.SH +2021-04-23,0.1685876877025597,601311.SH +2021-04-26,0.1825244965567435,000049.SZ +2021-04-27,0.1737789773963454,603659.SH +2021-04-28,0.1436873506200255,002245.SZ +2021-04-29,0.18610581068372947,000962.SZ +2021-04-30,0.16595841887762672,000962.SZ +2021-05-06,0.17873016055419053,000962.SZ +2021-05-07,0.1880065080708573,002842.SZ +2021-05-10,0.1727382596850207,002842.SZ +2021-05-11,0.16442944554512917,601958.SH +2021-05-12,0.1759087320007798,600104.SH +2021-05-13,0.1059778026976537,600207.SH +2021-05-14,0.1515335754594715,600281.SH +2021-05-17,0.15550477896851458,002812.SZ +2021-05-18,0.1820815625559984,600281.SH +2021-05-19,0.1975985621962538,002125.SZ +2021-05-20,0.21029081536214,600478.SH +2021-05-21,0.1857844361417979,002125.SZ +2021-05-24,0.17710198676934438,002125.SZ +2021-05-25,0.20476494625102237,002125.SZ +2021-05-26,0.17215075324770832,000860.SZ +2021-05-27,0.1409890560763275,002580.SZ +2021-05-28,0.19977723906750658,002125.SZ +2021-05-31,0.1955889196593248,002125.SZ +2021-06-01,0.19965103969384576,002125.SZ +2021-06-02,0.16243152458835555,603283.SH +2021-06-03,0.1648906048703381,002733.SZ +2021-06-04,0.181851876426343,600847.SH +2021-06-07,0.17560013158781207,603283.SH +2021-06-08,0.15482192149612098,601126.SH +2021-06-09,0.16539678119980983,002128.SZ +2021-06-10,0.1916107408888142,002182.SZ +2021-06-11,0.1949643397994827,601958.SH +2021-06-15,0.1971787795380582,600847.SH +2021-06-16,0.2152120881266321,600104.SH +2021-06-17,0.14966207127293646,000937.SZ +2021-06-18,0.17461214743762413,002129.SZ +2021-06-21,0.2285496907165141,002865.SZ +2021-06-22,0.24577742234292188,002865.SZ +2021-06-23,0.19265753592844634,600863.SH +2021-06-24,0.22276780628052106,002865.SZ +2021-06-25,0.22894025489328657,002865.SZ +2021-06-28,0.22934462649570525,002865.SZ +2021-06-29,0.2196512095450311,002865.SZ +2021-06-30,0.2062968109240255,002865.SZ +2021-07-01,0.1494337170090815,605222.SH +2021-07-02,0.2156521952961339,603829.SH +2021-07-05,0.21471128488252586,002733.SZ +2021-07-06,0.1945192508365901,002842.SZ +2021-07-07,0.20525884952209658,601311.SH +2021-07-08,0.21223730295338775,002842.SZ +2021-07-09,0.20305373210080938,601311.SH +2021-07-12,0.19722481849956058,601311.SH +2021-07-13,0.2084165886161525,002842.SZ +2021-07-14,0.22199934444942887,002842.SZ +2021-07-15,0.22608964016520547,000778.SZ +2021-07-16,0.2535241943425804,000060.SZ +2021-07-19,0.2679234440960684,600497.SH +2021-07-20,0.23731746623879577,000751.SZ +2021-07-21,0.22418474401589272,000751.SZ +2021-07-22,0.22107187117793597,000751.SZ +2021-07-23,0.22961295567977172,603115.SH +2021-07-26,0.22837102430219525,603527.SH +2021-07-27,0.23086707582381477,601212.SH +2021-07-28,0.23109631296482594,600458.SH +2021-07-29,0.2308182341081746,002270.SZ +2021-07-30,0.24395908147429513,002452.SZ +2021-08-02,0.2520240319230685,002112.SZ +2021-08-03,0.247596531325816,601616.SH +2021-08-04,0.2687602989407161,601616.SH +2021-08-05,0.2321480863859433,002300.SZ +2021-08-06,0.24368243549242688,000533.SZ +2021-08-09,0.24389379066221,002540.SZ +2021-08-10,0.2637718948360557,603829.SH +2021-08-11,0.2690730796458701,000533.SZ +2021-08-12,0.27642366460801343,002540.SZ +2021-08-13,0.25691575520938764,002300.SZ +2021-08-16,0.2326580150048708,002300.SZ +2021-08-17,0.2289431823065808,000407.SZ +2021-08-18,0.2357309105345075,603318.SH +2021-08-19,0.22462781732865006,000407.SZ +2021-08-20,0.21611430309506446,600644.SH +2021-08-23,0.2458178310362961,000407.SZ +2021-08-24,0.19158848613817206,000709.SZ +2021-08-25,0.21324585049966516,002927.SZ +2021-08-26,0.25193801039262365,000778.SZ +2021-08-27,0.2494375901170068,000888.SZ +2021-08-30,0.22028693887461326,002927.SZ +2021-08-31,0.23490402972736693,002546.SZ +2021-09-01,0.2538996971421676,600706.SH +2021-09-02,0.2527668721449061,600575.SH +2021-09-03,0.27057401394494474,601985.SH +2021-09-06,0.26307532624032826,003816.SZ +2021-09-07,0.26871289868359727,600310.SH +2021-09-08,0.20667930806746304,002479.SZ +2021-09-09,0.2108607480501272,600719.SH +2021-09-10,0.19930325209525984,003816.SZ +2021-09-13,0.1686431839279045,600310.SH +2021-09-14,0.19664938392884668,003816.SZ +2021-09-15,0.18019873963780894,601616.SH +2021-09-16,0.15660266332118858,600973.SH +2021-09-17,0.26248988114300575,600719.SH +2021-09-22,0.22934613687492966,600149.SH +2021-09-23,0.24694805907455686,600900.SH +2021-09-24,0.2178504373454381,600900.SH +2021-09-27,0.2171157890092214,603711.SH +2021-09-28,0.2096914900509066,603711.SH +2021-09-29,0.19226047301573895,600173.SH +2021-09-30,0.19351999311184453,000042.SZ +2021-10-08,0.1954392230758774,601366.SH +2021-10-11,0.17747645000621826,600467.SH +2021-10-12,0.17400554799463602,605266.SH +2021-10-13,0.14666567568462743,002594.SZ +2021-10-14,0.17833588792404667,002561.SZ +2021-10-15,0.1516554192698566,600151.SH +2021-10-18,0.16264208866077584,600519.SH +2021-10-19,0.1835351305134648,600467.SH +2021-10-20,0.19157132295200446,600241.SH +2021-10-21,0.181719307607797,002966.SZ +2021-10-22,0.19540445783104096,601963.SH +2021-10-25,0.15694606804732927,002056.SZ +2021-10-26,0.19508868153601808,603178.SH +2021-10-27,0.16459158124192047,603788.SH +2021-10-28,0.14840630801951837,600167.SH +2021-10-29,0.17315070935535617,002245.SZ +2021-11-01,0.18939503420674525,002276.SZ +2021-11-02,0.22001362538514585,603178.SH +2021-11-03,0.18978269843359963,605088.SH +2021-11-04,0.19041968445480206,002997.SZ +2021-11-05,0.22950026470681853,603788.SH +2021-11-08,0.22391639103083735,603788.SH +2021-11-09,0.22509358835113583,603788.SH +2021-11-10,0.20063727455792488,603926.SH +2021-11-11,0.19948642502865918,603023.SH +2021-11-12,0.20703000461331472,603023.SH +2021-11-15,0.19329394965696467,002863.SZ +2021-11-16,0.22038668921725027,603023.SH +2021-11-17,0.20350134570135228,603023.SH +2021-11-18,0.19134472810146977,002441.SZ +2021-11-19,0.17744611084652898,603089.SH +2021-11-22,0.16777655589092363,600459.SH +2021-11-23,0.19641499391535977,600148.SH +2021-11-24,0.19958041990709574,603089.SH +2021-11-25,0.17159765323762036,603577.SH +2021-11-26,0.19971573923413222,603577.SH +2021-11-29,0.1772495265597118,603577.SH +2021-11-30,0.17621129936461086,002771.SZ +2021-12-01,0.1829815738273412,002838.SZ +2021-12-02,0.17520639187776685,002921.SZ +2021-12-03,0.19376293054632046,600779.SH +2021-12-06,0.2115164121077862,600795.SH +2021-12-07,0.24006187564160694,600780.SH +2021-12-08,0.20833934107212307,601991.SH +2021-12-09,0.18392716403090992,002304.SZ +2021-12-10,0.15866232507400277,000705.SZ +2021-12-13,0.21708698306469396,002479.SZ +2021-12-14,0.21426278557419026,601929.SH +2021-12-15,0.21476236078409827,600900.SH +2021-12-16,0.21800575888093082,000156.SZ +2021-12-17,0.21997564546493592,600037.SH +2021-12-20,0.21983557973091644,600831.SH +2021-12-21,0.17488512342524543,600575.SH +2021-12-22,0.19373772533882105,600831.SH +2021-12-23,0.227703461358263,600780.SH +2021-12-24,0.20090319411293014,600023.SH +2021-12-27,0.2265739351436108,000705.SZ +2021-12-28,0.22436624311910927,002033.SZ +2021-12-29,0.23769137038597543,000950.SZ +2021-12-30,0.23082142079363654,002033.SZ +2021-12-31,0.2297993797449627,002589.SZ +2022-01-04,0.20350906700664648,002589.SZ +2022-01-05,0.201526984412336,002462.SZ +2022-01-06,0.2581146150771152,603199.SH +2022-01-07,0.2319719203054469,002314.SZ +2022-01-10,0.2222585917013781,600736.SH +2022-01-11,0.22654596157689266,600056.SH +2022-01-12,0.22442011640081608,002033.SZ +2022-01-13,0.2558038744617968,002033.SZ +2022-01-14,0.24560082301811634,002033.SZ +2022-01-17,0.18604763496692558,002401.SZ +2022-01-18,0.20775237264294494,600064.SH +2022-01-19,0.23170736171445092,002948.SZ +2022-01-20,0.23564990580655712,601229.SH +2022-01-21,0.2542095145992081,002948.SZ +2022-01-24,0.2450374072715567,002948.SZ +2022-01-25,0.20926471421015255,600895.SH +2022-01-26,0.2182919744763318,600708.SH +2022-01-27,0.19299283992711344,002827.SZ +2022-01-28,0.20371888005091005,000656.SZ +2022-02-07,0.1711360180787693,603725.SH +2022-02-08,0.23803239279538455,600694.SH +2022-02-09,0.1974227576065522,600674.SH +2022-02-10,0.2128911369239139,002479.SZ +2022-02-11,0.24011828402562593,002966.SZ +2022-02-14,0.1636542870924237,002378.SZ +2022-02-15,0.1978521190370309,002378.SZ +2022-02-16,0.19640052933672647,600980.SH +2022-02-17,0.2146528367761008,600531.SH +2022-02-18,0.17469357863991858,600648.SH +2022-02-21,0.20594695041082342,603937.SH +2022-02-22,0.20415785457055405,600459.SH +2022-02-23,0.19018836110816983,600459.SH +2022-02-24,0.14170447476898052,600583.SH +2022-02-25,0.19480908274808814,603706.SH +2022-02-28,0.22963450769946794,600531.SH +2022-03-01,0.20299369479152926,002842.SZ +2022-03-02,0.24410999650618334,000060.SZ +2022-03-03,0.19834324240086823,600782.SH +2022-03-04,0.21519360883183394,002479.SZ +2022-03-07,0.2187932556711358,600713.SH +2022-03-08,0.2244820230630971,601607.SH +2022-03-09,0.16790647377900927,600780.SH +2022-03-10,0.23285854421848964,601607.SH +2022-03-11,0.241404977904526,601607.SH +2022-03-14,0.23406675417276454,600511.SH +2022-03-15,0.2407852333797169,601607.SH +2022-03-16,0.20390156137959684,600511.SH +2022-03-17,0.21379061675738348,600511.SH +2022-03-18,0.27528639602359284,600064.SH +2022-03-21,0.25940897155870996,600748.SH +2022-03-22,0.2900127250121592,000006.SZ +2022-03-23,0.3023095177276327,600649.SH +2022-03-24,0.30507153968399253,600649.SH +2022-03-25,0.30257530520999715,600648.SH +2022-03-28,0.28729397253925376,600503.SH +2022-03-29,0.2799102114039588,600649.SH +2022-03-30,0.26255085880010237,600648.SH +2022-03-31,0.26921224136725025,600648.SH +2022-04-01,0.2383563213925304,600648.SH +2022-04-06,0.21431117795409357,600648.SH +2022-04-07,0.24293152938583698,601997.SH +2022-04-08,0.22807842894923067,600648.SH +2022-04-11,0.2457753440012352,000501.SZ +2022-04-12,0.2326063271145159,002344.SZ +2022-04-13,0.27508100315497785,600694.SH +2022-04-14,0.2622835724690967,000501.SZ +2022-04-15,0.2736191811240571,601366.SH +2022-04-18,0.2610857740867666,601366.SH +2022-04-19,0.2515530199476554,601366.SH +2022-04-20,0.26360147890698543,601366.SH +2022-04-21,0.177171445731014,002304.SZ +2022-04-22,0.21795335108590483,000883.SZ +2022-04-25,0.2068862868893051,000883.SZ +2022-04-26,0.1871534157767033,600167.SH +2022-04-27,0.13786003540400915,000690.SZ +2022-04-28,0.19017305133239207,600167.SH +2022-04-29,0.16324382778516736,603212.SH +2022-05-05,0.16431056349527182,600104.SH +2022-05-06,0.1361182759390275,002651.SZ +2022-05-09,0.1834794264660862,000821.SZ +2022-05-10,0.15188515305112904,600674.SH +2022-05-11,0.16082075686788266,002149.SZ +2022-05-12,0.17607653606935206,603897.SH +2022-05-13,0.20306951111178928,600104.SH +2022-05-16,0.21860398812014953,600104.SH +2022-05-17,0.20981231792261545,600104.SH +2022-05-18,0.17203618431807827,000572.SZ +2022-05-19,0.15128325495172323,002202.SZ +2022-05-20,0.1828886593719253,000572.SZ +2022-05-23,0.1779793092131416,000572.SZ +2022-05-24,0.181937381930025,002167.SZ +2022-05-25,0.18532110664527812,603530.SH +2022-05-26,0.14735763088743836,600644.SH +2022-05-27,0.17545440644214216,601179.SH +2022-05-30,0.14472889131912636,601179.SH +2022-05-31,0.16449488819641056,000858.SZ +2022-06-01,0.17952024372720057,002698.SZ +2022-06-02,0.17257002361475665,600392.SH +2022-06-06,0.18204026763402345,002812.SZ +2022-06-07,0.16655760175325796,603556.SH +2022-06-08,0.16864848184386874,601958.SH +2022-06-09,0.18705661825989484,000878.SZ +2022-06-10,0.1814835699879979,600478.SH +2022-06-13,0.1761160231341241,000962.SZ +2022-06-14,0.17715557326310497,000962.SZ +2022-06-15,0.18474884623271273,603416.SH +2022-06-16,0.17938543175091934,002979.SZ +2022-06-17,0.18450904651117475,601311.SH +2022-06-20,0.17734623324065837,603960.SH +2022-06-21,0.19542167877688738,002978.SZ +2022-06-22,0.17741565917618787,002978.SZ +2022-06-23,0.19482927679918902,002471.SZ +2022-06-24,0.2056954301463309,002471.SZ +2022-06-27,0.18168254170069595,002149.SZ +2022-06-28,0.16800695813080735,002149.SZ +2022-06-29,0.19944972134129071,002978.SZ +2022-06-30,0.16812945491849726,002149.SZ +2022-07-01,0.1667755629676203,600236.SH +2022-07-04,0.19391428628288862,600236.SH +2022-07-05,0.20295775244595132,002479.SZ +2022-07-06,0.187675610612082,002471.SZ +2022-07-07,0.21482480355910796,002471.SZ +2022-07-08,0.19813870083520257,600979.SH +2022-07-11,0.20983024826888608,000883.SZ +2022-07-12,0.2228671538161786,601616.SH +2022-07-13,0.24528453420596846,600226.SH +2022-07-14,0.22126961571874237,002546.SZ +2022-07-15,0.19736084144410532,600452.SH +2022-07-18,0.23578796727387114,603829.SH +2022-07-19,0.1740281702338357,605066.SH +2022-07-20,0.16373885483697323,000409.SZ +2022-07-21,0.17048354379489958,600843.SH +2022-07-22,0.1828085986184721,603829.SH +2022-07-25,0.12189234267127581,002595.SZ +2022-07-26,0.13123874165505398,002595.SZ +2022-07-27,0.18250337738666805,603829.SH +2022-07-28,0.16263491769313462,002698.SZ +2022-07-29,0.185646997130024,600468.SH +2022-08-01,0.16591199801668158,603203.SH +2022-08-02,0.18693523701611398,603203.SH +2022-08-03,0.195164090471059,603203.SH +2022-08-04,0.18215942439980481,600879.SH +2022-08-05,0.15653852988519493,600459.SH +2022-08-08,0.14127949237598278,003029.SZ +2022-08-09,0.15155289593244883,605158.SH +2022-08-10,0.15272649809503697,002428.SZ +2022-08-11,0.16905403848163061,603203.SH +2022-08-12,0.14734227674037978,600333.SH +2022-08-15,0.1856453696100582,601918.SH +2022-08-16,0.17151946323749284,000027.SZ +2022-08-17,0.15664189192527286,000791.SZ +2022-08-18,0.1523452189882028,600885.SH +2022-08-19,0.20917537615356963,000791.SZ +2022-08-22,0.1862444174515823,600886.SH +2022-08-23,0.1813046086302681,600886.SH +2022-08-24,0.17079104409839976,600167.SH +2022-08-25,0.19133001224772453,600886.SH +2022-08-26,0.16679757445055007,600997.SH +2022-08-29,0.1934234516142574,600025.SH +2022-08-30,0.17966416662535578,000061.SZ +2022-08-31,0.22215752879476158,600467.SH +2022-09-01,0.21684324492015095,600694.SH +2022-09-02,0.2279332937935151,600694.SH +2022-09-05,0.20621023619258066,600162.SH +2022-09-06,0.20201599500667,600649.SH +2022-09-07,0.1895969482295465,600503.SH +2022-09-08,0.21741337923735937,000751.SZ +2022-09-09,0.2123692486432012,600162.SH +2022-09-13,0.21174324636491468,601187.SH +2022-09-14,0.2182698045504904,600694.SH +2022-09-15,0.20519026803159485,600162.SH +2022-09-16,0.19913981074784295,002936.SZ +2022-09-19,0.15040280082511154,600879.SH +2022-09-20,0.20933897485425784,000501.SZ +2022-09-21,0.1980821854193473,600655.SH +2022-09-22,0.15280646000287776,002428.SZ +2022-09-23,0.1405554425119473,002428.SZ +2022-09-26,0.16898517132830976,603659.SH +2022-09-27,0.16751240928499694,603589.SH +2022-09-28,0.15855030497658734,603919.SH +2022-09-29,0.1746893050941906,600157.SH +2022-09-30,0.11537471254645981,600056.SH +2022-10-10,0.1897648447220721,601997.SH +2022-10-11,0.19175553832447986,600025.SH +2022-10-12,0.15911759148490928,002028.SZ +2022-10-13,0.1506662275940095,002649.SZ +2022-10-14,0.16092162152625558,600713.SH +2022-10-17,0.16159655526671712,605266.SH +2022-10-18,0.17859077963545855,600829.SH +2022-10-19,0.13043203399049935,002074.SZ +2022-10-20,0.1304504021394396,000028.SZ +2022-10-21,0.15170988292846577,600511.SH +2022-10-24,0.15891737904892284,601179.SH +2022-10-25,0.13572778893124507,603960.SH +2022-10-26,0.14325150030062883,002609.SZ +2022-10-27,0.15104634741662648,603189.SH +2022-10-28,0.177229327632946,601607.SH +2022-10-31,0.18726152282413244,601607.SH +2022-11-01,0.1748394260067667,601607.SH +2022-11-02,0.1763483307490702,000950.SZ +2022-11-03,0.17618518075974207,601607.SH +2022-11-04,0.1562338313267974,601607.SH +2022-11-07,0.18277266473760853,000758.SZ +2022-11-08,0.19459616490979478,600362.SH +2022-11-09,0.20236573892593057,600362.SH +2022-11-10,0.193901351114919,000061.SZ +2022-11-11,0.14760747367823596,600576.SH +2022-11-14,0.1214567468677267,600998.SH +2022-11-15,0.15019249180788974,600638.SH +2022-11-16,0.13142321916376865,605389.SH +2022-11-17,0.17438277701900992,000078.SZ +2022-11-18,0.17741089272727248,000078.SZ +2022-11-21,0.1527666186924788,600406.SH +2022-11-22,0.16897893044773704,000778.SZ +2022-11-23,0.23304409037601614,000791.SZ +2022-11-24,0.22621492337060042,605011.SH +2022-11-25,0.21934515101147908,605580.SH +2022-11-28,0.21108848379908782,600032.SH +2022-11-29,0.18052654667081366,002966.SZ +2022-11-30,0.17357917234516015,000425.SZ +2022-12-01,0.18088796899169185,600559.SH +2022-12-02,0.20319988079886522,600729.SH +2022-12-05,0.16032246672610784,000932.SZ +2022-12-06,0.20750106178905706,002646.SZ +2022-12-07,0.20760251030136104,000501.SZ +2022-12-08,0.212541750712977,600694.SH +2022-12-09,0.1863141585434498,600696.SH +2022-12-12,0.17192065040590587,002356.SZ +2022-12-13,0.17761795727087729,600857.SH +2022-12-14,0.1909253026942845,600467.SH +2022-12-15,0.17972638022229118,002646.SZ +2022-12-16,0.1335555489517524,600696.SH +2022-12-19,0.19266405650141108,600467.SH +2022-12-20,0.12819039366991655,603337.SH +2022-12-21,0.20391806886629033,600467.SH +2022-12-22,0.15670200549109733,002646.SZ +2022-12-23,0.13437631864951932,600729.SH +2022-12-26,0.15957297484489874,600097.SH +2022-12-27,0.18612184236894286,600097.SH +2022-12-28,0.20859168817545437,601619.SH +2022-12-29,0.15722281325384957,603259.SH +2022-12-30,0.15631457434382806,600959.SH diff --git a/code/train/utils/factor.py b/code/train/utils/factor.py new file mode 100644 index 0000000..8c8e9fa --- /dev/null +++ b/code/train/utils/factor.py @@ -0,0 +1,738 @@ +import numpy as np +import talib +import pandas as pd + +def get_technical_factor(df): + # 按股票和日期排序 + df = df.sort_values(by=['ts_code', 'trade_date']) + grouped = df.groupby('ts_code', group_keys=False) + + df['return_skew'] = grouped['pct_chg'].rolling(window=5).skew().reset_index(0, drop=True) + df['return_kurtosis'] = grouped['pct_chg'].rolling(window=5).kurt().reset_index(0, drop=True) + + # 因子 1:短期成交量变化率 + df['volume_change_rate'] = ( + grouped['vol'].rolling(window=2).mean() / + grouped['vol'].rolling(window=5).mean() - 1 + ).reset_index(level=0, drop=True) # 确保索引对齐 + + # 因子 2:成交量突破信号 + max_volume = grouped['vol'].rolling(window=5).max().reset_index(level=0, drop=True) # 确保索引对齐 + df['cat_volume_breakout'] = (df['vol'] > max_volume) + + # 因子 3:换手率均线偏离度 + mean_turnover = grouped['turnover_rate'].rolling(window=3).mean().reset_index(level=0, drop=True) + std_turnover = grouped['turnover_rate'].rolling(window=3).std().reset_index(level=0, drop=True) + df['turnover_deviation'] = (df['turnover_rate'] - mean_turnover) / std_turnover + + # 因子 4:换手率激增信号 + df['cat_turnover_spike'] = (df['turnover_rate'] > mean_turnover + 2 * std_turnover) + + # 因子 5:量比均值 + df['avg_volume_ratio'] = grouped['volume_ratio'].rolling(window=3).mean().reset_index(level=0, drop=True) + + # 因子 6:量比突破信号 + max_volume_ratio = grouped['volume_ratio'].rolling(window=5).max().reset_index(level=0, drop=True) + df['cat_volume_ratio_breakout'] = (df['volume_ratio'] > max_volume_ratio) + + # 因子 7:成交量与换手率的综合动量因子 + alpha = 0.5 + df['momentum_factor'] = df['volume_change_rate'] + alpha * df['turnover_deviation'] + + # 因子 8:量价共振因子 + df['price_change_rate'] = grouped['close'].pct_change() + df['resonance_factor'] = df['volume_ratio'] * df['price_change_rate'] + + # 计算 up 和 down + df['log_close'] = np.log(df['close']) + + df['vol_spike'] = grouped.apply( + lambda x: pd.Series(x['vol'].rolling(20).mean(), index=x.index) + ) + df['cat_vol_spike'] = df['vol'] > 2 * df['vol_spike'] + df['vol_std_5'] = df['vol'].pct_change().rolling(5).std() + + df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close'] + df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close'] + + # 计算 ATR + df['atr_14'] = grouped.apply( + lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14), + index=x.index) + ) + df['atr_6'] = grouped.apply( + lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6), + index=x.index) + ) + + # 计算 OBV 及其均线 + df['obv'] = grouped.apply( + lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index) + ) + df['maobv_6'] = grouped.apply( + lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index) + ) + df['obv-maobv_6'] = df['obv'] - df['maobv_6'] + + # 计算 RSI + df['rsi_3'] = grouped.apply( + lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index) + ) + df['rsi_6'] = grouped.apply( + lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index) + ) + df['rsi_9'] = grouped.apply( + lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index) + ) + + # 计算 return_10 和 return_20 + df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1) + df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1) + df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1) + + # df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x) + + # 计算标准差指标 + df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std()) + df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std()) + df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std()) + df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std()) + df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std()) + + # 计算比值指标 + df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90'] + df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25'] + + # 计算标准差差值 + df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2'] + + return df + + +def get_act_factor(df, cat=True): + # 按股票和日期排序 + df = df.sort_values(by=['ts_code', 'trade_date']) + grouped = df.groupby('ts_code', group_keys=False) + # 计算 EMA 指标 + df['_ema_5'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index) + ) + df['_ema_13'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index) + ) + df['_ema_20'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index) + ) + df['_ema_60'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index) + ) + + # 计算 act_factor1, act_factor2, act_factor3, act_factor4 + df['act_factor1'] = grouped['_ema_5'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50 + ) + df['act_factor2'] = grouped['_ema_13'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40 + ) + df['act_factor3'] = grouped['_ema_20'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21 + ) + df['act_factor4'] = grouped['_ema_60'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10 + ) + + if cat: + df['cat_af1'] = df['act_factor1'] > 0 + df['cat_af2'] = df['act_factor2'] > df['act_factor1'] + df['cat_af3'] = df['act_factor3'] > df['act_factor2'] + df['cat_af4'] = df['act_factor4'] > df['act_factor3'] + + # 计算 act_factor5 和 act_factor6 + df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4'] + df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt( + df['act_factor1'] ** 2 + df['act_factor2'] ** 2) + + # 根据 trade_date 截面计算排名 + df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True) + df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True) + df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True) + + return df + + +def get_money_flow_factor(df): + # 计算资金流相关因子(字段名称见 tushare 数据说明) + df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol'] + df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol'] + df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol'] + + df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol'] + df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol'] + + df['log(circ_mv)'] = np.log(df['circ_mv']) + return df + + +def get_alpha_factor(df): + df = df.sort_values(by=['ts_code', 'trade_date']) + grouped = df.groupby('ts_code') + + # alpha_022: 当前 close 与 5 日前 close 差值 + # df['alpha_022'] = grouped['close'].transform(lambda x: x - x.shift(5)) + def rolling_covariance(x, y, window): + return x.rolling(window).cov(y) + + def delta(series, period): + return series.diff(period) + + def rank(series): + return series.rank(pct=True) + + def stddev(series, window): + return series.rolling(window).std() + + # 计算改进后的 Alpha 22 因子 + window_high_volume = 5 + window_close_stddev = 20 + period_delta = 5 + + df['cov'] = rolling_covariance(df['high'], df['volume'], window_high_volume) + df['delta_cov'] = delta(df['cov'], period_delta) + df['_rank_stddev'] = rank(stddev(df['close'], window_close_stddev)) + df['alpha_22_improved'] = -1 * df['delta_cov'] * df['_rank_stddev'] + + # alpha_003: (close - open) / (high - low) + df['alpha_003'] = np.where(df['high'] != df['low'], + (df['close'] - df['open']) / (df['high'] - df['low']), + 0) + + # alpha_007: 计算过去5日 close 与 vol 的相关性,并按 trade_date 排名 + df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True) + df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True) + + # alpha_013: 计算过去5日 close 之和 - 20日 close 之和,并按 trade_date 排名 + df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum()) + df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True) + + return df + + +def get_limit_factor(df): + # 按股票和日期排序 + df = df.sort_values(by=['ts_code', 'trade_date']) + + # 分组处理 + grouped = df.groupby('ts_code', group_keys=False) + + # 1. 今日是否涨停/跌停 + df['cat_up_limit'] = (df['close'] == df['up_limit']).astype(int) # 是否涨停(1表示涨停,0表示未涨停) + df['cat_down_limit'] = (df['close'] == df['down_limit']).astype(int) # 是否跌停(1表示跌停,0表示未跌停) + + # 2. 最近涨跌停次数(过去20个交易日) + df['up_limit_count_10d'] = grouped['cat_up_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0, + drop=True) + df['down_limit_count_10d'] = grouped['cat_down_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0, + drop=True) + + # 3. 最近连续涨跌停天数 + def calculate_consecutive_limits(series): + """ + 计算连续涨停/跌停天数。 + """ + consecutive_up = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1) + consecutive_down = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1) + return consecutive_up, consecutive_down + + # 连续涨停天数 + df['consecutive_up_limit'] = grouped['cat_up_limit'].apply( + lambda x: calculate_consecutive_limits(x)[0] + ).reset_index(level=0, drop=True) + + # 连续跌停天数 + # df['consecutive_down_limit'] = grouped['cat_down_limit'].apply( + # lambda x: calculate_consecutive_limits(x)[1] + # ).reset_index(level=0, drop=True) + + return df + + +def get_cyp_perf_factor(df): + # 预处理:按股票代码和时间排序 + df = df.sort_values(by=['ts_code', 'trade_date']) + + # 按股票代码分组处理 + grouped = df.groupby('ts_code', group_keys=False) + + df['ctrl_strength'] = (df['cost_85pct'] - df['cost_15pct']) / (df['his_high'] - df['his_low']) + + df['low_cost_dev'] = (df['close'] - df['cost_5pct']) / (df['cost_50pct'] - df['cost_5pct']) + + df['asymmetry'] = (df['cost_95pct'] - df['cost_50pct']) / (df['cost_50pct'] - df['cost_5pct']) + + df['lock_factor'] = df['turnover_rate'] * ( + 1 - (df['cost_95pct'] - df['cost_5pct']) / (df['his_high'] - df['his_low'])) + + df['vol_break'] = np.where((df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2), 1, 0) + + df['weight_roc5'] = grouped['weight_avg'].apply(lambda x: x.pct_change(5)) + + def rolling_corr(group): + roc_close = group['close'].pct_change() + roc_weight = group['weight_avg'].pct_change() + return roc_close.rolling(10).corr(roc_weight) + + df['price_cost_divergence'] = grouped.apply(rolling_corr) + + def calc_atr(group): + high, low, close = group['high'], group['low'], group['close'] + tr = np.maximum(high - low, + np.maximum(abs(high - close.shift()), + abs(low - close.shift()))) + return tr.rolling(14).mean() + + df['atr_14'] = grouped.apply(calc_atr) + df['cost_atr_adj'] = (df['cost_95pct'] - df['cost_5pct']) / df['atr_14'] + + # 12. 小盘股筹码集中度 + df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct']) + + # 16. 筹码稳定性指数 (20日波动率) + df['weight_std20'] = grouped['weight_avg'].apply(lambda x: x.rolling(20).std()) + df['cost_stability'] = df['weight_std20'] / grouped['weight_avg'].transform(lambda x: x.rolling(20).mean()) + + # 17. 成本区间突破标记 + df['high_cost_break_days'] = grouped.apply(lambda g: g['close'].gt(g['cost_95pct']).rolling(5).sum()) + + # 18. 黄金筹码共振 (复合事件) + df['cat_golden_resonance'] = ((df['close'] > df['weight_avg']) & + (df['volume_ratio'] > 1.5) & + (df['winner_rate'] > 0.7)) + + # 20. 筹码-流动性风险 + df['liquidity_risk'] = (df['cost_95pct'] - df['cost_5pct']) * ( + 1 / grouped['vol'].transform(lambda x: x.rolling(10).mean())) + + df.drop(columns=['weight_std20'], inplace=True, errors='ignore') + + return df + + +def get_mv_factors(df): + """ + 计算多个因子并生成最终的综合因子。 + + 参数: + df (pd.DataFrame): 包含 ts_code, trade_date, turnover_rate, pe_ttm, pb, ps, circ_mv, volume_ratio, vol 等列的数据框。 + + 返回: + pd.DataFrame: 包含新增因子和最终综合因子的数据框。 + """ + # 按 ts_code 和 trade_date 排序 + df = df.sort_values(by=['ts_code', 'trade_date']) + + # 按 ts_code 分组 + grouped = df.groupby('ts_code', group_keys=False) + + # 1. 市值流动比因子 + df['mv_turnover_ratio'] = df['turnover_rate'] / df['circ_mv'] + + # 2. 市值调整成交量因子 + df['mv_adjusted_volume'] = df['vol'] / df['circ_mv'] + + # 3. 市值加权换手率因子 + df['mv_weighted_turnover'] = df['turnover_rate'] * (1 / df['circ_mv']) + + # 4. 非线性市值成交量因子 + df['nonlinear_mv_volume'] = df['vol'] / df['circ_mv'] + + # 5. 市值量比因子 + df['mv_volume_ratio'] = df['volume_ratio'] / df['circ_mv'] + + # 6. 市值动量因子 + df['mv_momentum'] = df['turnover_rate'] * df['volume_ratio'] / df['circ_mv'] + + # 7. 市值波动率因子 + df['turnover_std'] = grouped['turnover_rate'].rolling(window=20).std().reset_index(level=0, drop=True) + df['mv_volatility'] = grouped.apply(lambda x: x['turnover_std'] / x['circ_mv']).reset_index(level=0, drop=True) + + # 8. 市值成长性因子 + df['volume_growth'] = grouped['vol'].pct_change(periods=20).reset_index(level=0, drop=True) + df['mv_growth'] = grouped.apply(lambda x: x['volume_growth'] / x['circ_mv']).reset_index(level=0, drop=True) + + # # 标准化因子 + # factor_columns = [ + # 'mv_turnover_ratio', 'mv_adjusted_volume', 'mv_weighted_turnover', + # 'nonlinear_mv_volume', 'mv_volume_ratio', 'mv_momentum', + # 'mv_volatility', 'mv_growth' + # ] + # scaler = StandardScaler() + # df[factor_columns] = scaler.fit_transform(df[factor_columns]) + # + # # 加权合成因子 + # weights = [0.2, 0.15, 0.15, 0.1, 0.1, 0.1, 0.1, 0.1] # 各因子权重 + # df['final_combined_factor'] = df[factor_columns].dot(weights) + + return df + + +import numpy as np +import talib + + +def get_rolling_factor(df): + old_columns = df.columns.tolist()[:] + # 按股票和日期排序 + df = df.sort_values(by=['ts_code', 'trade_date']) + grouped = df.groupby('ts_code', group_keys=False) + + df["gap_next_open"] = (df["open"].shift(-1) - df["close"]) / df["close"] + + df['return_skew'] = grouped['pct_chg'].rolling(window=5).skew().reset_index(0, drop=True) + df['return_kurtosis'] = grouped['pct_chg'].rolling(window=5).kurt().reset_index(0, drop=True) + + # 因子 1:短期成交量变化率 + df['volume_change_rate'] = ( + grouped['vol'].rolling(window=2).mean() / + grouped['vol'].rolling(window=10).mean() - 1 + ).reset_index(level=0, drop=True) # 确保索引对齐 + + # 因子 2:成交量突破信号 + max_volume = grouped['vol'].rolling(window=5).max().reset_index(level=0, drop=True) # 确保索引对齐 + df['cat_volume_breakout'] = (df['vol'] > max_volume) + + # 因子 3:换手率均线偏离度 + mean_turnover = grouped['turnover_rate'].rolling(window=3).mean().reset_index(level=0, drop=True) + std_turnover = grouped['turnover_rate'].rolling(window=3).std().reset_index(level=0, drop=True) + df['turnover_deviation'] = (df['turnover_rate'] - mean_turnover) / std_turnover + + # 因子 4:换手率激增信号 + df['cat_turnover_spike'] = (df['turnover_rate'] > mean_turnover + 2 * std_turnover) + + # 因子 5:量比均值 + df['avg_volume_ratio'] = grouped['volume_ratio'].rolling(window=3).mean().reset_index(level=0, drop=True) + + # 因子 6:量比突破信号 + max_volume_ratio = grouped['volume_ratio'].rolling(window=5).max().reset_index(level=0, drop=True) + df['cat_volume_ratio_breakout'] = (df['volume_ratio'] > max_volume_ratio) + + df['vol_spike'] = grouped.apply( + lambda x: pd.Series(x['vol'].rolling(20).mean(), index=x.index) + ) + df['vol_std_5'] = df['vol'].pct_change().rolling(5).std() + + # 计算 ATR + df['atr_14'] = grouped.apply( + lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=14), + index=x.index) + ) + df['atr_6'] = grouped.apply( + lambda x: pd.Series(talib.ATR(x['high'].values, x['low'].values, x['close'].values, timeperiod=6), + index=x.index) + ) + + # 计算 OBV 及其均线 + df['obv'] = grouped.apply( + lambda x: pd.Series(talib.OBV(x['close'].values, x['vol'].values), index=x.index) + ) + df['maobv_6'] = grouped.apply( + lambda x: pd.Series(talib.SMA(x['obv'].values, timeperiod=6), index=x.index) + ) + + df['rsi_3'] = grouped.apply( + lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=3), index=x.index) + ) + df['rsi_6'] = grouped.apply( + lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=6), index=x.index) + ) + df['rsi_9'] = grouped.apply( + lambda x: pd.Series(talib.RSI(x['close'].values, timeperiod=9), index=x.index) + ) + + # 计算 return_10 和 return_20 + df['return_5'] = grouped['close'].apply(lambda x: x / x.shift(5) - 1) + df['return_10'] = grouped['close'].apply(lambda x: x / x.shift(10) - 1) + df['return_20'] = grouped['close'].apply(lambda x: x / x.shift(20) - 1) + + # df['avg_close_5'] = grouped['close'].apply(lambda x: x.rolling(window=5).mean() / x) + + # 计算标准差指标 + df['std_return_5'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=5).std()) + df['std_return_15'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=15).std()) + df['std_return_25'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=25).std()) + df['std_return_90'] = grouped['close'].apply(lambda x: x.pct_change().rolling(window=90).std()) + df['std_return_90_2'] = grouped['close'].apply(lambda x: x.shift(10).pct_change().rolling(window=90).std()) + + # 计算 EMA 指标 + df['_ema_5'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=5), index=x.index) + ) + df['_ema_13'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=13), index=x.index) + ) + df['_ema_20'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=20), index=x.index) + ) + df['_ema_60'] = grouped['close'].apply( + lambda x: pd.Series(talib.EMA(x.values, timeperiod=60), index=x.index) + ) + + # 计算 act_factor1, act_factor2, act_factor3, act_factor4 + df['act_factor1'] = grouped['_ema_5'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 50 + ) + df['act_factor2'] = grouped['_ema_13'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 40 + ) + df['act_factor3'] = grouped['_ema_20'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 21 + ) + df['act_factor4'] = grouped['_ema_60'].apply( + lambda x: np.arctan((x / x.shift(1) - 1) * 100) * 57.3 / 10 + ) + + # 根据 trade_date 截面计算排名 + df['rank_act_factor1'] = df.groupby('trade_date', group_keys=False)['act_factor1'].rank(ascending=False, pct=True) + df['rank_act_factor2'] = df.groupby('trade_date', group_keys=False)['act_factor2'].rank(ascending=False, pct=True) + df['rank_act_factor3'] = df.groupby('trade_date', group_keys=False)['act_factor3'].rank(ascending=False, pct=True) + + df['log(circ_mv)'] = np.log(df['circ_mv']) + + def rolling_covariance(x, y, window): + return x.rolling(window).cov(y) + + def delta(series, period): + return series.diff(period) + + def rank(series): + return series.rank(pct=True) + + def stddev(series, window): + return series.rolling(window).std() + + window_high_volume = 5 + window_close_stddev = 20 + period_delta = 5 + df['cov'] = rolling_covariance(df['high'], df['vol'], window_high_volume) + df['delta_cov'] = delta(df['cov'], period_delta) + df['_rank_stddev'] = rank(stddev(df['close'], window_close_stddev)) + df['alpha_22_improved'] = -1 * df['delta_cov'] * df['_rank_stddev'] + + df['alpha_003'] = np.where(df['high'] != df['low'], + (df['close'] - df['open']) / (df['high'] - df['low']), + 0) + + df['alpha_007'] = grouped.apply(lambda x: x['close'].rolling(5).corr(x['vol'])).reset_index(level=0, drop=True) + df['alpha_007'] = df.groupby('trade_date', group_keys=False)['alpha_007'].rank(ascending=True, pct=True) + + df['alpha_013'] = grouped['close'].transform(lambda x: x.rolling(5).sum() - x.rolling(20).sum()) + df['alpha_013'] = df.groupby('trade_date', group_keys=False)['alpha_013'].rank(ascending=True, pct=True) + + df['cat_up_limit'] = (df['close'] == df['up_limit']) # 是否涨停(1表示涨停,0表示未涨停) + df['cat_down_limit'] = (df['close'] == df['down_limit']) # 是否跌停(1表示跌停,0表示未跌停) + df['up_limit_count_10d'] = grouped['cat_up_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0, + drop=True) + df['down_limit_count_10d'] = grouped['cat_down_limit'].rolling(window=10, min_periods=1).sum().reset_index(level=0, + drop=True) + + # 3. 最近连续涨跌停天数 + def calculate_consecutive_limits(series): + """ + 计算连续涨停/跌停天数。 + """ + consecutive_up = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1) + consecutive_down = series * (series.groupby((series != series.shift()).cumsum()).cumcount() + 1) + return consecutive_up, consecutive_down + + # 连续涨停天数 + df['consecutive_up_limit'] = grouped['cat_up_limit'].apply( + lambda x: calculate_consecutive_limits(x)[0] + ).reset_index(level=0, drop=True) + + df['vol_break'] = np.where((df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2), 1, 0) + + df['weight_roc5'] = grouped['weight_avg'].apply(lambda x: x.pct_change(5)) + + def rolling_corr(group): + roc_close = group['close'].pct_change() + roc_weight = group['weight_avg'].pct_change() + return roc_close.rolling(10).corr(roc_weight) + + df['price_cost_divergence'] = grouped.apply(rolling_corr) + + df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct']) + + # 16. 筹码稳定性指数 (20日波动率) + df['weight_std20'] = grouped['weight_avg'].apply(lambda x: x.rolling(20).std()) + df['cost_stability'] = df['weight_std20'] / grouped['weight_avg'].transform(lambda x: x.rolling(20).mean()) + + # 17. 成本区间突破标记 + df['high_cost_break_days'] = grouped.apply(lambda g: g['close'].gt(g['cost_95pct']).rolling(5).sum()) + + # 20. 筹码-流动性风险 + df['liquidity_risk'] = (df['cost_95pct'] - df['cost_5pct']) * ( + 1 / grouped['vol'].transform(lambda x: x.rolling(10).mean())) + + # 7. 市值波动率因子 + df['turnover_std'] = grouped['turnover_rate'].rolling(window=20).std().reset_index(level=0, drop=True) + df['mv_volatility'] = grouped.apply(lambda x: x['turnover_std'] / x['circ_mv']).reset_index(level=0, drop=True) + + # 8. 市值成长性因子 + df['volume_growth'] = grouped['vol'].pct_change(periods=20).reset_index(level=0, drop=True) + df['mv_growth'] = grouped.apply(lambda x: x['volume_growth'] / x['circ_mv']).reset_index(level=0, drop=True) + + df.drop(columns=['weight_std20'], inplace=True, errors='ignore') + new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns] + + return df, new_columns + + +def get_simple_factor(df): + old_columns = df.columns.tolist()[:] + df = df.sort_values(by=['ts_code', 'trade_date']) + + alpha = 0.5 + df['momentum_factor'] = df['volume_change_rate'] + alpha * df['turnover_deviation'] + df['resonance_factor'] = df['volume_ratio'] * df['pct_chg'] + df['log_close'] = np.log(df['close']) + + df['cat_vol_spike'] = df['vol'] > 2 * df['vol_spike'] + + df['up'] = (df['high'] - df[['close', 'open']].max(axis=1)) / df['close'] + df['down'] = (df[['close', 'open']].min(axis=1) - df['low']) / df['close'] + + df['obv-maobv_6'] = df['obv'] - df['maobv_6'] + + # 计算比值指标 + df['std_return_5 / std_return_90'] = df['std_return_5'] / df['std_return_90'] + df['std_return_5 / std_return_25'] = df['std_return_5'] / df['std_return_25'] + + # 计算标准差差值 + df['std_return_90 - std_return_90_2'] = df['std_return_90'] - df['std_return_90_2'] + + df['cat_af1'] = df['act_factor1'] > 0 + df['cat_af2'] = df['act_factor2'] > df['act_factor1'] + df['cat_af3'] = df['act_factor3'] > df['act_factor2'] + df['cat_af4'] = df['act_factor4'] > df['act_factor3'] + + # 计算 act_factor5 和 act_factor6 + df['act_factor5'] = df['act_factor1'] + df['act_factor2'] + df['act_factor3'] + df['act_factor4'] + df['act_factor6'] = (df['act_factor1'] - df['act_factor2']) / np.sqrt( + df['act_factor1'] ** 2 + df['act_factor2'] ** 2) + + df['active_buy_volume_large'] = df['buy_lg_vol'] / df['net_mf_vol'] + df['active_buy_volume_big'] = df['buy_elg_vol'] / df['net_mf_vol'] + df['active_buy_volume_small'] = df['buy_sm_vol'] / df['net_mf_vol'] + + df['buy_lg_vol_minus_sell_lg_vol'] = (df['buy_lg_vol'] - df['sell_lg_vol']) / df['net_mf_vol'] + df['buy_elg_vol_minus_sell_elg_vol'] = (df['buy_elg_vol'] - df['sell_elg_vol']) / df['net_mf_vol'] + + df['log(circ_mv)'] = np.log(df['circ_mv']) + + df['ctrl_strength'] = (df['cost_85pct'] - df['cost_15pct']) / (df['his_high'] - df['his_low']) + + df['low_cost_dev'] = (df['close'] - df['cost_5pct']) / (df['cost_50pct'] - df['cost_5pct']) + + df['asymmetry'] = (df['cost_95pct'] - df['cost_50pct']) / (df['cost_50pct'] - df['cost_5pct']) + + df['lock_factor'] = df['turnover_rate'] * ( + 1 - (df['cost_95pct'] - df['cost_5pct']) / (df['his_high'] - df['his_low'])) + + df['cat_vol_break'] = (df['close'] > df['cost_85pct']) & (df['volume_ratio'] > 2) + + df['cost_atr_adj'] = (df['cost_95pct'] - df['cost_5pct']) / df['atr_14'] + + # 12. 小盘股筹码集中度 + df['smallcap_concentration'] = (1 / df['circ_mv']) * (df['cost_85pct'] - df['cost_15pct']) + + df['cat_golden_resonance'] = ((df['close'] > df['weight_avg']) & + (df['volume_ratio'] > 1.5) & + (df['winner_rate'] > 0.7)) + + df['mv_turnover_ratio'] = df['turnover_rate'] / df['circ_mv'] + + df['mv_adjusted_volume'] = df['vol'] / df['circ_mv'] + + df['mv_weighted_turnover'] = df['turnover_rate'] * (1 / df['circ_mv']) + + df['nonlinear_mv_volume'] = df['vol'] / df['circ_mv'] + + df['mv_volume_ratio'] = df['volume_ratio'] / df['circ_mv'] + + df['mv_momentum'] = df['turnover_rate'] * df['volume_ratio'] / df['circ_mv'] + + drop_columns = [col for col in df.columns if col.startswith('_')] + df.drop(columns=drop_columns, inplace=True, errors='ignore') + + new_columns = [col for col in df.columns.tolist()[:] if col not in old_columns] + return df, new_columns + + +def calculate_indicators(df): + """ + 计算四个指标:当日涨跌幅、5日移动平均、RSI、MACD。 + """ + df = df.sort_values('trade_date') + df['daily_return'] = (df['close'] - df['pre_close']) / df['pre_close'] * 100 + # df['5_day_ma'] = df['close'].rolling(window=5).mean() + delta = df['close'].diff() + gain = delta.where(delta > 0, 0) + loss = -delta.where(delta < 0, 0) + avg_gain = gain.rolling(window=14).mean() + avg_loss = loss.rolling(window=14).mean() + rs = avg_gain / avg_loss + df['RSI'] = 100 - (100 / (1 + rs)) + + # 计算MACD + ema12 = df['close'].ewm(span=12, adjust=False).mean() + ema26 = df['close'].ewm(span=26, adjust=False).mean() + df['MACD'] = ema12 - ema26 + df['Signal_line'] = df['MACD'].ewm(span=9, adjust=False).mean() + df['MACD_hist'] = df['MACD'] - df['Signal_line'] + + # 4. 情绪因子1:市场上涨比例(Up Ratio) + df['up_ratio'] = df['daily_return'].apply(lambda x: 1 if x > 0 else 0) + df['up_ratio_20d'] = df['up_ratio'].rolling(window=20).mean() # 过去20天上涨比例 + + # 5. 情绪因子2:成交量变化率(Volume Change Rate) + df['volume_mean'] = df['vol'].rolling(window=20).mean() # 过去20天的平均成交量 + df['volume_change_rate'] = (df['vol'] - df['volume_mean']) / df['volume_mean'] * 100 # 成交量变化率 + + # 6. 情绪因子3:波动率(Volatility) + df['volatility'] = df['daily_return'].rolling(window=20).std() # 过去20天的日收益率标准差 + + # 7. 情绪因子4:成交额变化率(Amount Change Rate) + df['amount_mean'] = df['amount'].rolling(window=20).mean() # 过去20天的平均成交额 + df['amount_change_rate'] = (df['amount'] - df['amount_mean']) / df['amount_mean'] * 100 # 成交额变化率 + + return df + + +def generate_index_indicators(h5_filename): + df = pd.read_hdf(h5_filename, key='index_data') + df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d') + df = df.sort_values('trade_date') + + # 计算每个ts_code的相关指标 + df_indicators = [] + for ts_code in df['ts_code'].unique(): + df_index = df[df['ts_code'] == ts_code].copy() + df_index = calculate_indicators(df_index) + df_indicators.append(df_index) + + # 合并所有指数的结果 + df_all_indicators = pd.concat(df_indicators, ignore_index=True) + + # 保留trade_date列,并将同一天的数据按ts_code合并成一行 + df_final = df_all_indicators.pivot_table( + index='trade_date', + columns='ts_code', + values=['daily_return', 'RSI', 'MACD', 'Signal_line', + 'MACD_hist', 'up_ratio_20d', 'volume_change_rate', 'volatility', + 'amount_change_rate', 'amount_mean'], + aggfunc='last' + ) + + df_final.columns = [f"{col[1]}_{col[0]}" for col in df_final.columns] + df_final = df_final.reset_index() + + return df_final \ No newline at end of file