Enhance trading workflow with new order flow management
- Added dingdanliu_nb_mflow for improved order processing - Updated related scripts and configurations to support new functionality
This commit is contained in:
1 parent
e2c54c6409
commit
f925dff46b
21 files changed
+5345
No files matched your search
@@ -0,0 +1,698 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "ModuleNotFoundError",
|
||||
"evalue": "No module named 'tushare'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
|
||||
"Cell \u001b[1;32mIn[3], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtushare\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mts\u001b[39;00m\n\u001b[0;32m 2\u001b[0m ts\u001b[38;5;241m.\u001b[39mset_token(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m78282dabb315ee578fb73a9b328f493026e97d5af709acb331b7b348\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 3\u001b[0m pro \u001b[38;5;241m=\u001b[39m ts\u001b[38;5;241m.\u001b[39mpro_api()\n",
|
||||
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'tushare'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import tushare as ts\n",
|
||||
"ts.set_token('78282dabb315ee578fb73a9b328f493026e97d5af709acb331b7b348')\n",
|
||||
"pro = ts.pro_api()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 32,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"300\n",
|
||||
"<class 'int'>\n",
|
||||
"0.15\n",
|
||||
"<class 'float'>\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from datetime import datetime, timedelta\n",
|
||||
"import pandas as pd\n",
|
||||
"fees_df = pd.read_csv('./futures_fees_info.csv', usecols= [1, 4, 17, 19, 25],names=['合约', '合约乘数', '做多保证金率', '做空保证金率', '品种代码'])\n",
|
||||
"data0 = int(fees_df[fees_df['合约'] == 'IH2407']['合约乘数'].iloc[0])\n",
|
||||
"\n",
|
||||
"print(data0)\n",
|
||||
"print(type(data0))\n",
|
||||
"data1 = float(fees_df[fees_df['合约'] == 'IH2407']['做多保证金率'].iloc[0])\n",
|
||||
"print(data1)\n",
|
||||
"print(type(data1))\n",
|
||||
"# fees_df[fees_df['合约'] == 'IH2407']['做空保证金率'].iloc[0]\n",
|
||||
"# (fees_df[fees_df['合约'] == 'IH2407']['做多保证金率'].iloc[0] + fees_df[fees_df['合约'] == 'IH2407']['做空保证金率'].iloc[0])/2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from datetime import datetime, timedelta\n",
|
||||
"import pandas as pd\n",
|
||||
"fees_df = pd.read_csv('./futures_fees_info.csv', usecols= [1, 4, 17, 19],names=['合约', '合约乘数', '做多保证金率', '做空保证金率'])\n",
|
||||
"contacts_df = pd.read_csv('./main_contacts.csv', usecols= [16, 17],names=['主连代码', '品种代码'])\n",
|
||||
"\n",
|
||||
"def get_main_contact_on_time(main_symbol_code):\n",
|
||||
" data_str = ''\n",
|
||||
" alpha_chars = ''\n",
|
||||
" numeric_chars = ''\n",
|
||||
" main_code = ''\n",
|
||||
"\n",
|
||||
" # main_symbol = pro.fut_mapping(ts_code=main_symbol_code, trade_date = data_str).loc[0,'mapping_ts_code'].split('.')[0]\n",
|
||||
" # exchange_id = pro.fut_mapping(ts_code=main_symbol_code, trade_date = data_str).loc[0,'mapping_ts_code'].split('.')[1]\n",
|
||||
" main_symbol = contacts_df[contacts_df['品种代码'] == main_symbol_code]['主连代码'].iloc[0]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" # # 拆分主连合约代码为交易标识和交易所代码(交易市场)\n",
|
||||
" # main_symbol = pro.fut_mapping(ts_code=main_symbol_code, trade_date = data_str).loc[0,'mapping_ts_code'].split('.')[0]\n",
|
||||
" # exchange_id = pro.fut_mapping(ts_code=main_symbol_code, trade_date = data_str).loc[0,'mapping_ts_code'].split('.')[1]\n",
|
||||
"\n",
|
||||
" # # 拆分交易标识中的合约产品代码和交割月份\n",
|
||||
" # for char in main_symbol:\n",
|
||||
" # if char.isalpha():\n",
|
||||
" # alpha_chars += char\n",
|
||||
" # elif char.isdigit():\n",
|
||||
" # numeric_chars += char\n",
|
||||
" \n",
|
||||
" # # 监理交易所映射\n",
|
||||
" # exchange = {'CFX': 'CFFEX', 'SHF':'SHFE', 'DCE':'DCE', 'GFE':'GFEX', 'INE':'INE', 'ZCE':'CZCE'}\n",
|
||||
"\n",
|
||||
" # # 计算per_unit:交易单位(每手)和转换后交易所识别的main_code:主连代码\n",
|
||||
" # if exchange_id == 'CFX' or exchange_id == 'SHF' or exchange_id == 'DCE' or exchange_id == 'GFE' or exchange_id == 'INE':\n",
|
||||
" # df = pro.fut_basic(exchange = exchange[exchange_id], fut_type='1', fut_code = alpha_chars, fields='ts_code,symbol,exchange,name,per_unit')\n",
|
||||
" # # ts_code = df[df['symbol'] == main_symbol]['ts_code'].iloc[0]\n",
|
||||
" # per_unit = df[df['symbol'] == main_symbol]['per_unit'].iloc[0]\n",
|
||||
"\n",
|
||||
" # # ds = pro.fut_settle(trade_date = data_str, ts_code =ts_code)\n",
|
||||
" # # ds['margin_rate'] = (ds['long_margin_rate'] + ds['short_margin_rate'])/2\n",
|
||||
" # # margin_rate = ds['margin_rate'].iloc[0]\n",
|
||||
" \n",
|
||||
" \n",
|
||||
" # if exchange_id == 'CFX':\n",
|
||||
" # main_code = main_symbol\n",
|
||||
" # elif exchange_id == 'SHF' or exchange_id == 'DCE' or exchange_id == 'GFE' or exchange_id == 'INE':\n",
|
||||
" # lower_alpha_chars = str.lower(alpha_chars) \n",
|
||||
" # main_code = lower_alpha_chars + numeric_chars\n",
|
||||
" # elif exchange_id == 'ZCE':\n",
|
||||
" # true_numeric_chars = numeric_chars[1:]\n",
|
||||
" # main_code = alpha_chars + true_numeric_chars \n",
|
||||
" # df = pro.fut_basic(exchange = exchange[exchange_id], fut_type='1', fut_code = alpha_chars, fields='ts_code,symbol,exchange,name,per_unit')\n",
|
||||
" # per_unit = df[df['symbol'] == main_code]['per_unit'].iloc[0]\n",
|
||||
" # main_code = alpha_chars + true_numeric_chars\n",
|
||||
"\n",
|
||||
" # print(\"最终使用的主连代码:\",main_code) \n",
|
||||
" # print(\"%s的交易单位(每手):%s\"%(main_symbol, per_unit))\n",
|
||||
" return main_symbol\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'IH2407'"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"get_main_contact_on_time('IH')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from datetime import datetime, timedelta\n",
|
||||
"def get_main_contact_on_time(main_symbol_code):\n",
|
||||
" data_str = ''\n",
|
||||
" alpha_chars = ''\n",
|
||||
" numeric_chars = ''\n",
|
||||
" main_code = ''\n",
|
||||
"\n",
|
||||
" # 获取主连合约代码,如果是当天15点前日盘,则获取前一天的合约代码,如果是当天15点后晚盘,则获取今天的的合约代码\n",
|
||||
" now = datetime.now()\n",
|
||||
" if now.hour < 15:\n",
|
||||
" data_str = (now - timedelta(days=1)).date().strftime('%Y%m%d')\n",
|
||||
" else:\n",
|
||||
" data_str = now.date().strftime('%Y%m%d')\n",
|
||||
"\n",
|
||||
" # 拆分主连合约代码为交易标识和交易所代码(交易市场)\n",
|
||||
" main_symbol = pro.fut_mapping(ts_code=main_symbol_code, trade_date = data_str).loc[0,'mapping_ts_code'].split('.')[0]\n",
|
||||
" exchange_id = pro.fut_mapping(ts_code=main_symbol_code, trade_date = data_str).loc[0,'mapping_ts_code'].split('.')[1]\n",
|
||||
"\n",
|
||||
" # 拆分交易标识中的合约产品代码和交割月份\n",
|
||||
" for char in main_symbol:\n",
|
||||
" if char.isalpha():\n",
|
||||
" alpha_chars += char\n",
|
||||
" elif char.isdigit():\n",
|
||||
" numeric_chars += char\n",
|
||||
" \n",
|
||||
" # 监理交易所映射\n",
|
||||
" exchange = {'CFX': 'CFFEX', 'SHF':'SHFE', 'DCE':'DCE', 'GFE':'GFEX', 'INE':'INE', 'ZCE':'CZCE'}\n",
|
||||
"\n",
|
||||
" # 计算per_unit:交易单位(每手)和转换后交易所识别的main_code:主连代码\n",
|
||||
" if exchange_id == 'CFX' or exchange_id == 'SHF' or exchange_id == 'DCE' or exchange_id == 'GFE' or exchange_id == 'INE':\n",
|
||||
" df = pro.fut_basic(exchange = exchange[exchange_id], fut_type='1', fut_code = alpha_chars, fields='ts_code,symbol,exchange,name,per_unit')\n",
|
||||
" # ts_code = df[df['symbol'] == main_symbol]['ts_code'].iloc[0]\n",
|
||||
" per_unit = df[df['symbol'] == main_symbol]['per_unit'].iloc[0]\n",
|
||||
"\n",
|
||||
" # ds = pro.fut_settle(trade_date = data_str, ts_code =ts_code)\n",
|
||||
" # ds['margin_rate'] = (ds['long_margin_rate'] + ds['short_margin_rate'])/2\n",
|
||||
" # margin_rate = ds['margin_rate'].iloc[0]\n",
|
||||
" \n",
|
||||
" \n",
|
||||
" if exchange_id == 'CFX':\n",
|
||||
" main_code = main_symbol\n",
|
||||
" elif exchange_id == 'SHF' or exchange_id == 'DCE' or exchange_id == 'GFE' or exchange_id == 'INE':\n",
|
||||
" lower_alpha_chars = str.lower(alpha_chars) \n",
|
||||
" main_code = lower_alpha_chars + numeric_chars\n",
|
||||
" elif exchange_id == 'ZCE':\n",
|
||||
" true_numeric_chars = numeric_chars[1:]\n",
|
||||
" main_code = alpha_chars + true_numeric_chars \n",
|
||||
" df = pro.fut_basic(exchange = exchange[exchange_id], fut_type='1', fut_code = alpha_chars, fields='ts_code,symbol,exchange,name,per_unit')\n",
|
||||
" per_unit = df[df['symbol'] == main_code]['per_unit'].iloc[0]\n",
|
||||
" main_code = alpha_chars + true_numeric_chars\n",
|
||||
"\n",
|
||||
" print(\"最终使用的主连代码:\",main_code) \n",
|
||||
" print(\"%s的交易单位(每手):%s\"%(main_symbol, per_unit))\n",
|
||||
" return main_code\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"sb_1 = get_main_contact_on_time('IH.CFX')\n",
|
||||
"sb_2 = get_main_contact_on_time('cu.SHF')\n",
|
||||
"sb_3 = get_main_contact_on_time('eb.DCE')\n",
|
||||
"sb_4 = get_main_contact_on_time('si.GFE')\n",
|
||||
"sb_5 = get_main_contact_on_time('sc.INE') \n",
|
||||
"sb_6 = get_main_contact_on_time('SA.ZCE')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# df = pro.fut_basic(exchange='DCE', fut_type='1',fut_code = 'j' , fields='ts_code,symbol,exchange,name,fut_code,multiplier,trade_unit,per_unit,quote_unit,quote_unit_desc,d_mode_desc,list_date,delist_date,d_month,last_ddate,trade_time_desc')\n",
|
||||
"# df = pro.fut_basic(exchange='SHFE', fut_type='1', fut_code = 'au', fields='ts_code,symbol,name,list_date,delist_date')\n",
|
||||
"df = pro.fut_basic(exchange='CZCE', fut_type='1', fut_code = 'SA', fields='ts_code,symbol,exchange,name,fut_code,per_unit')\n",
|
||||
"# index_of_value = df.index[df['symbol'] == 'AU2408']\n",
|
||||
"df.head()\n",
|
||||
"value = df[df['symbol'] == 'SA409']['per_unit'].iloc[0]\n",
|
||||
"print(value)\n",
|
||||
"# df.loc[index_of_value, 'per_unit'].value\n",
|
||||
"# df.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df = pro.fut_mapping(ts_code='SA.ZCE')\n",
|
||||
"print(df)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# ds = pro.fut_settle(trade_date = '20240625', ts_code ='SA2409.ZCE')\n",
|
||||
"# ds = pro.fut_settle(trade_date='20230625', exchange='ZCE')\n",
|
||||
"# ds = pro.fut_settle(ts_code='SA409.ZCE', exchange='CZCE')\n",
|
||||
"# pro.fut_settle(trade_date='20181114', exchange='CZCE')\n",
|
||||
"pro.fut_settle(ts_code='AP2510.ZCE', exchange='CZCE')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ds.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ds['margin_rate'] = round((ds['long_margin_rate'] + ds['short_margin_rate'])/2,2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ds['margin_rate'].iloc[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"value = df.loc[index_of_value, 'per_unit'].iloc[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(value)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_IH = pro.fut_mapping(ts_code='IH.CFX')\n",
|
||||
"print(df_IH)\n",
|
||||
"df_IH.to_csv(r\"E:\\data\\mapping_ts_code_IH.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_IF = pro.fut_mapping(ts_code='IF.CFX')\n",
|
||||
"print(df_IF)\n",
|
||||
"df_IF.to_csv(r\"E:\\data\\mapping_ts_code_IF.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_IC = pro.fut_mapping(ts_code='IC.CFX')\n",
|
||||
"print(df_IC)\n",
|
||||
"df_IC.to_csv(r\"E:\\data\\mapping_ts_code_IC.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_IM = pro.fut_mapping(ts_code='IM.CFX')\n",
|
||||
"print(df_IM)\n",
|
||||
"df_IM.to_csv(r\"E:\\data\\mapping_ts_code_IM.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_TF = pro.fut_mapping(ts_code='TF.CFX')\n",
|
||||
"print(df_TF)\n",
|
||||
"df_TF.to_csv(r\"E:\\data\\mapping_ts_code_TF.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_T = pro.fut_mapping(ts_code='T.CFX')\n",
|
||||
"print(df_T)\n",
|
||||
"df_T.to_csv(r\"E:\\data\\mapping_ts_code_T.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_TS = pro.fut_mapping(ts_code='TS.CFX')\n",
|
||||
"print(df_TS)\n",
|
||||
"df_TS.to_csv(r\"E:\\data\\mapping_ts_code_TS.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_TL = pro.fut_mapping(TL_code='TL.CFX')\n",
|
||||
"print(df_TL)\n",
|
||||
"df_TL.to_csv(r\"E:\\data\\mapping_TL_code_TL.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "NameError",
|
||||
"evalue": "name 'pro' 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 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m df_TL \u001b[38;5;241m=\u001b[39m \u001b[43mpro\u001b[49m\u001b[38;5;241m.\u001b[39mfut_mapping(ts_code\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mTL.CFX\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28mprint\u001b[39m(df_TL)\n\u001b[0;32m 3\u001b[0m df_TL\u001b[38;5;241m.\u001b[39mto_csv(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mD:\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mmapping_TL_code_TL.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
|
||||
"\u001b[1;31mNameError\u001b[0m: name 'pro' is not defined"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df_TL = pro.fut_mapping(ts_code='TL.CFX')\n",
|
||||
"print(df_TL)\n",
|
||||
"df_TL.to_csv(r\"D:\\data\\mapping_TL_code_TL.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import akshare as ak\n",
|
||||
"\n",
|
||||
"futures_comm_info_df = ak.futures_comm_info(symbol=\"上海国际能源交易中心\")\n",
|
||||
"print(futures_comm_info_df[\"保证金-买开\"])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"futures_fees_info_df = ak.futures_fees_info()\n",
|
||||
"print(futures_fees_info_df)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"futures_fees_info_df.to_csv(r'./futures_fees_info.csv', index=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"futures_display_main_sina_df = ak.futures_display_main_sina()\n",
|
||||
"print(futures_display_main_sina_df)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"url = 'https://www.9qihuo.com/hangqing' #上期所铜结算参数地址https://www.9qihuo.com/hangqing\n",
|
||||
"data =pd.read_html(url) #读取网页上的表格\n",
|
||||
"dt=data[4].drop([0],axis=0).append(data[5],ignore_index=True) #提取结算参数到DataFrame格式\n",
|
||||
"#调整格式\n",
|
||||
"dt.columns=dt.iloc[0]\n",
|
||||
"dt.drop([0],axis=0,inplace=True) \n",
|
||||
"dt.set_index('合约代码',inplace=True)\n",
|
||||
"print(dt) #输出铜的结算参数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import requests\n",
|
||||
"from bs4 import BeautifulSoup\n",
|
||||
"import csv\n",
|
||||
"\n",
|
||||
"# 目标网址\n",
|
||||
"url = \"https://www.9qihuo.com/hangqing\"\n",
|
||||
"\n",
|
||||
"# 发送GET请求,禁用SSL验证\n",
|
||||
"response = requests.get(url, verify=False)\n",
|
||||
"response.encoding = 'utf-8' # 确保编码正确\n",
|
||||
"\n",
|
||||
"# 解析网页内容\n",
|
||||
"soup = BeautifulSoup(response.text, 'lxml')\n",
|
||||
"\n",
|
||||
"# 找到目标表格\n",
|
||||
"table = soup.find('table', {'id': 'tblhangqinglist'})\n",
|
||||
"\n",
|
||||
"# 初始化CSV文件\n",
|
||||
"with open('main_contacts.csv', mode='w', newline='', encoding='utf-8') as file:\n",
|
||||
" writer = csv.writer(file)\n",
|
||||
" \n",
|
||||
" # 遍历表格的所有行\n",
|
||||
" for row in table.find_all('tr'):\n",
|
||||
" # 获取每一行的所有单元格\n",
|
||||
" cols = row.find_all(['th', 'td'])\n",
|
||||
" # 提取文本内容并写入CSV文件\n",
|
||||
" writer.writerow([col.text.strip() for col in cols])\n",
|
||||
"\n",
|
||||
"print(\"表格已成功保存为main_contacts.csv\")\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"df = pd.read_csv('./main_contacts.csv')\n",
|
||||
"df.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df['交易品种'] = df['合约'].str.split(r'[()]', n=1, expand=True)[0]\n",
|
||||
"df['主连代码'] = df['合约'].str.split(r'[()]', n=2, expand=True)[1]\n",
|
||||
"\n",
|
||||
"# df['品种代码'] = df['主连代码'].str.split(str.isalpha(df['主连代码']), n=1, expand=True)[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"import re\n",
|
||||
"\n",
|
||||
"# 创建示例DataFrame\n",
|
||||
"\n",
|
||||
"# 定义拆分字母和数字的函数\n",
|
||||
"def split_alpha_numeric(s):\n",
|
||||
" match = re.match(r\"([a-zA-Z]+)([0-9]+)\", s)\n",
|
||||
" if match:\n",
|
||||
" return match.groups()\n",
|
||||
" else:\n",
|
||||
" return (s, None) # 如果没有匹配,返回原始字符串和None\n",
|
||||
"\n",
|
||||
"# 应用函数并创建新列\n",
|
||||
"df[['品种代码', '交割月份']] = df['主连代码'].apply(lambda x: pd.Series(split_alpha_numeric(x)))\n",
|
||||
"\n",
|
||||
"print(df)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.to_csv('./main_contacts_all.csv')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 39,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import subprocess\n",
|
||||
"import schedule\n",
|
||||
"import time\n",
|
||||
"from datetime import datetime\n",
|
||||
"\n",
|
||||
"# jerome:增加akshare库\n",
|
||||
"import akshare as ak\n",
|
||||
"\n",
|
||||
"# jerome:增加下列库用于爬虫获取主力连续代码\n",
|
||||
"import pandas as pd\n",
|
||||
"import requests\n",
|
||||
"from bs4 import BeautifulSoup\n",
|
||||
"import csv\n",
|
||||
"import re\n",
|
||||
"import os"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 48,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def get_futures_fees_info():\n",
|
||||
" futures_fees_info_df = ak.futures_fees_info()\n",
|
||||
" futures_fees_info_df.to_csv(r'./futures_fees_info.csv', index=False)\n",
|
||||
"\n",
|
||||
"def get_main_contacts():\n",
|
||||
" url = \"https://www.9qihuo.com/hangqing\"\n",
|
||||
"\n",
|
||||
" # 发送GET请求,禁用SSL验证\n",
|
||||
" response = requests.get(url, verify=False)\n",
|
||||
" response.encoding = 'utf-8' # 确保编码正确\n",
|
||||
"\n",
|
||||
" # 解析网页内容\n",
|
||||
" soup = BeautifulSoup(response.text, 'lxml')\n",
|
||||
"\n",
|
||||
" # 找到目标表格\n",
|
||||
" table = soup.find('table', {'id': 'tblhangqinglist'})\n",
|
||||
"\n",
|
||||
" # 初始化CSV文件\n",
|
||||
" with open('tmp_main_contacts.csv', mode='w', newline='', encoding='utf-8') as file:\n",
|
||||
" writer = csv.writer(file)\n",
|
||||
" \n",
|
||||
" # 遍历表格的所有行\n",
|
||||
" for row in table.find_all('tr'):\n",
|
||||
" # 获取每一行的所有单元格\n",
|
||||
" cols = row.find_all(['th', 'td'])\n",
|
||||
" # 提取文本内容并写入CSV文件\n",
|
||||
" writer.writerow([col.text.strip() for col in cols])\n",
|
||||
"\n",
|
||||
" df = pd.read_csv('./tmp_main_contacts.csv',encoding='utf-8')\n",
|
||||
" df['交易品种'] = df['合约'].str.split(r'[()]', n=1, expand=True)[0]\n",
|
||||
" df['主连代码'] = df['合约'].str.split(r'[()]', n=2, expand=True)[1]\n",
|
||||
"\n",
|
||||
" df[['品种代码', '交割月份']] = df['主连代码'].apply(lambda x: pd.Series(split_alpha_numeric(x)))\n",
|
||||
" df.to_csv('./main_contacts.csv')\n",
|
||||
"\n",
|
||||
" print(\"期货主力品种表已经保存为main_contacts.csv\")\n",
|
||||
" os.remove(\"./tmp_main_contacts.csv\")\n",
|
||||
"\n",
|
||||
"# 拆分字母和数字的函数\n",
|
||||
"def split_alpha_numeric(s):\n",
|
||||
" match = re.match(r\"([a-zA-Z]+)([0-9]+)\", s)\n",
|
||||
" if match:\n",
|
||||
" return match.groups()\n",
|
||||
" else:\n",
|
||||
" return (s, None) # 如果没有匹配,返回原始字符串和None"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 44,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"get_futures_fees_info()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 49,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"期货主力品种表已经保存为main_contacts.csv\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"get_main_contacts()"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 配置迅投研数据服务\n",
|
||||
"from vnpy.trader.setting import SETTINGS\n",
|
||||
"\n",
|
||||
"SETTINGS[\"datafeed.name\"] = \"xt\"\n",
|
||||
"SETTINGS[\"datafeed.username\"] = \"token\"\n",
|
||||
"SETTINGS[\"datafeed.password\"] = \"ef326f853a744c58572f0158d470912c38a09552\""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 加载功能模块\n",
|
||||
"from datetime import datetime\n",
|
||||
"\n",
|
||||
"from vnpy.trader.datafeed import get_datafeed\n",
|
||||
"from vnpy.trader.object import HistoryRequest, Exchange, Interval\n",
|
||||
"\n",
|
||||
"from vnpy_sqlite import Database as SqliteDatabase\n",
|
||||
"#from elite_database import Database as EliteDatabase\n",
|
||||
"\n",
|
||||
"#增加\n",
|
||||
"import pandas as pd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"True"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# 初始化数据服务\n",
|
||||
"datafeed = get_datafeed()\n",
|
||||
"datafeed.init()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 交易所映射关系\n",
|
||||
"EXCHANGE_XT2VT = {\n",
|
||||
" \"SH\": Exchange.SSE,\n",
|
||||
" \"SZ\": Exchange.SZSE,\n",
|
||||
" \"BJ\": Exchange.BSE,\n",
|
||||
" \"SF\": Exchange.SHFE,\n",
|
||||
" \"IF\": Exchange.CFFEX,\n",
|
||||
" \"INE\": Exchange.INE,\n",
|
||||
" \"DF\": Exchange.DCE,\n",
|
||||
" \"ZF\": Exchange.CZCE,\n",
|
||||
" \"GF\": Exchange.GFEX\n",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"数据长度 41336\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# 查询期货历史数据\n",
|
||||
"req = HistoryRequest(\n",
|
||||
" symbol=\"rb00\", # 加权指数 \n",
|
||||
" # symbol=\"IF00\", # 主力连续(未平滑)\n",
|
||||
" # exchange=Exchange.CFFEX,\n",
|
||||
" exchange = EXCHANGE_XT2VT[\"SF\"],\n",
|
||||
" start=datetime(2023, 1, 1),\n",
|
||||
" end=datetime(2023, 11, 24),#end=datetime.now(),\n",
|
||||
" interval=Interval.TICK\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"ticks = datafeed.query_tick_history(req)\n",
|
||||
"print(\"数据长度\", len(ticks))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 创建Elite数据库实例并写入数据\n",
|
||||
"#db2 = EliteDatabase()\n",
|
||||
"#db2.save_bar_data(bars)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df = pd.DataFrame(ticks)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 创建CSV文件并写入数据\n",
|
||||
"filepath = \"rb00_11.csv\" # CSV文件保存路径及文件名\n",
|
||||
"df.to_csv(filepath, index=False) # index参数设置为False表示不包含索引列\n",
|
||||
"#df.to_csv(filepath, mode='a', index=False, header=False) # index参数设置为False表示不包含索引列"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 读取CSV文件\n",
|
||||
"data = pd.read_csv(\"IC0.csv\")\n",
|
||||
"# 对数据进行排序\n",
|
||||
"sorted_data = data.sort_values(by='datetime')\n",
|
||||
"# 将排序结果写入CSV文件\n",
|
||||
"sorted_data.to_csv('sort_IC00.csv', index=False)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"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.10.9"
|
||||
},
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "1b43cb0bd93d5abbadd54afed8252f711d4681fe6223ad6b67ffaee289648f85"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,241 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"map_file = r\"D:\\data\\mapping_ts_code_IH.csv\" #主力合约统计表\n",
|
||||
"file_path = str(\"F:/2022_tickdata/marketdatacsv\") #csv文件绝对地址前缀\n",
|
||||
"\n",
|
||||
"header_file = r\"D:\\data\\fut_marketdata_head.csv\" # 包含表头的 CSV 文件名\n",
|
||||
"# data_file = r\"D:\\combined_market_data.csv\" # 包含数据的 CSV 文件名\n",
|
||||
"output_file = r\"D:\\IH888_up_2022.csv\" # 合并后的输出文件名\n",
|
||||
"total_code = 'IH888'\n",
|
||||
"\n",
|
||||
"sp_chars = ['csv2022'] #'csv2021', 'csv2022',需要查找的主力年份文件"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df = pd.read_csv(map_file, index_col=0, encoding='utf', low_memory=False)\n",
|
||||
"df['mapping_ts_code_new'] = df['mapping_ts_code'].apply(lambda x: x.split('.')[0])\n",
|
||||
"df['temp_path']= file_path\n",
|
||||
"df['final_path'] = df['temp_path'].astype(str) + df['trade_date'].astype(str) + '/' + df['mapping_ts_code_new'] + '.csv'\n",
|
||||
"del df['mapping_ts_code_new'], df['temp_path']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"\n",
|
||||
"import time as s_time\n",
|
||||
"import datetime\n",
|
||||
"import pandas as pd\n",
|
||||
"for sp_char in sp_chars:\n",
|
||||
" csv_files = [sp_file for sp_file in df['final_path'] if sp_char in sp_file]\n",
|
||||
" print(csv_files[:5])\n",
|
||||
" print(csv_files[-5:])\n",
|
||||
" dfs = pd.DataFrame()\n",
|
||||
" for file_path in csv_files:\n",
|
||||
" df_temp = pd.read_csv(file_path) \n",
|
||||
" print('读取%s成功'%(file_path))\n",
|
||||
" # df_temp.columns = ['交易日','合约代码','最后修改时间','最后修改毫秒','最新价','数量','申买价一','申买量一','申卖价一','申卖量一','当日均价','成交金额','持仓量','涨停价','跌停价']\n",
|
||||
" # df_temp['datetime'] = df_temp['交易日'].astype(str) + ' '+df_temp['最后修改时间'].astype(str) + '.' + df_temp['最后修改毫秒'].astype(str)\n",
|
||||
" # df_temp['datetime'] = pd.to_datetime(df_temp['datetime'], errors='coerce', format='%Y-%m-%d %H:%M:%S.%f')\n",
|
||||
" # df_temp['tmp_time'] = df_temp['datetime'].dt.strftime('%H:%M:%S.%f')\n",
|
||||
" # df_temp['time'] = df_temp['tmp_time'].apply(lambda x: datetime.strptime(x, '%H:%M:%S.%f')).dt.time\n",
|
||||
" # drop_index1 = df_temp.loc[(df_temp['time'] > s_time(11, 30, 0)) & (df_temp['time'] < s_time(13, 0, 0))].index\n",
|
||||
" # drop_index2 = df_temp.loc[(df_temp['time'] > s_time(15, 0, 0)) | (df_temp['time'] < s_time(9, 30, 0))].index\n",
|
||||
" # df_temp.drop(drop_index1, axis=0, inplace=True)\n",
|
||||
" # df_temp.drop(drop_index2, axis=0, inplace=True)\n",
|
||||
" # dfs.append(df_temp)\n",
|
||||
" # df_temp.columns=['交易日','合约代码','最后修改时间','最后修改毫秒','最新价','数量','申买价一','申买量一','申卖价一','申卖量一','当日均价','成交金额','持仓量','涨停价','跌停价']\n",
|
||||
" df_temp.columns = ['交易日','合约代码','最后修改时间','最后修改毫秒','最新价','数量','申买价一','申买量一','申卖价一','申卖量一','当日均价','成交金额','持仓量','涨停价','跌停价']\n",
|
||||
" # print(df_temp.tail())\n",
|
||||
" # # print(\"表头添加成功!\")\n",
|
||||
" # dfs = pd.concat([dfs, df_temp],ignore_index=True, axis= 0)# \n",
|
||||
" # print(dfs.tail())\n",
|
||||
" # dfs = pd.concat([df_temp, ignore_index=True)\n",
|
||||
" dfs = pd.concat([dfs, df_temp], ignore_index=True)\n",
|
||||
" \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"dfs.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"dfs.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"combined_df = dfs.sort_values(by = ['交易日', '最后修改时间', '最后修改毫秒'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"combined_df.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"combined_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"combined_df.insert(0,'统一代码', total_code)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"combined_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"combined_df.to_csv(output_file, index=False)\n",
|
||||
"print(\"合并完成,并已导出到%s文件。\"%(output_file))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### 以下为其他代码\n",
|
||||
"import pandas as pd\n",
|
||||
" \n",
|
||||
"try:\n",
|
||||
" file_path = 'path/to/your/file.csv' # 替换为你的文件路径\n",
|
||||
" df = pd.read_csv(file_path)\n",
|
||||
"except FileNotFoundError:\n",
|
||||
" print(f\"无法找到文件:{file_path}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"import os\n",
|
||||
"for k in ['2021']:# , '2023'\n",
|
||||
" for v in [ 'IH', 'IF', 'IC', 'IM', 'T', 'TF', 'TL', 'TS']: \n",
|
||||
" print('当前年份为:%s,品种为:%s'%(k,v))\n",
|
||||
" map_file = 'D:/data/mapping_ts_code_%s.csv'%(v) #v\n",
|
||||
" file_path = 'F:/%s_tickdata/marketdatacsv'%(k) #csv文件绝对地址前缀\n",
|
||||
" output_file = 'D:/%s888_up_%s.csv'%(v,k) # 合并后的输出文件名\n",
|
||||
" total_code = '%s888'%(v)\n",
|
||||
" sp_chars = ['csv%s'%(k)] #'csv2021', 'csv2022',需要查找的主力年份文件\n",
|
||||
"\n",
|
||||
" try:\n",
|
||||
" df = pd.read_csv(map_file, index_col=0, encoding='utf', low_memory=False)\n",
|
||||
" except FileNotFoundError:\n",
|
||||
" raise ValueError(\"主力合约统计表文件不存在,请检查文件路径是否正确。\")\n",
|
||||
" df['mapping_ts_code_new'] = df['mapping_ts_code'].apply(lambda x: x.split('.')[0])\n",
|
||||
" df['temp_path']= file_path\n",
|
||||
" df['final_path'] = df['temp_path'].astype(str) + df['trade_date'].astype(str) + '/' + df['mapping_ts_code_new'] + '.csv'\n",
|
||||
" del df['mapping_ts_code_new'], df['temp_path']\n",
|
||||
"\n",
|
||||
" for sp_char in sp_chars:\n",
|
||||
" csv_files = [sp_file for sp_file in df['final_path'] if sp_char in sp_file]\n",
|
||||
" if csv_files:\n",
|
||||
" print(csv_files[:5])\n",
|
||||
" print(csv_files[-5:])\n",
|
||||
" dfs = pd.DataFrame()\n",
|
||||
" for path in csv_files:\n",
|
||||
" try:\n",
|
||||
" df_temp = pd.read_csv(path) \n",
|
||||
" # print('读取%s成功'%(path))\n",
|
||||
" except FileNotFoundError:\n",
|
||||
" raise ValueError(\"%s文件不存在,请检查文件路径是否正确。\"%(path))\n",
|
||||
" break\n",
|
||||
" df_temp.columns = ['交易日','合约代码','最后修改时间','最后修改毫秒','最新价','数量','申买价一','申买量一','申卖价一','申卖量一','当日均价','成交金额','持仓量','涨停价','跌停价']\n",
|
||||
" dfs = pd.concat([dfs, df_temp], ignore_index=True)\n",
|
||||
" combined_df = dfs.sort_values(by = ['交易日', '最后修改时间', '最后修改毫秒'])\n",
|
||||
" combined_df.insert(0,'统一代码', total_code)\n",
|
||||
" combined_df.to_csv(output_file, index=False)\n",
|
||||
" print(\"合并完成,并已导出到%s文件。\"%(output_file))\n",
|
||||
" else:\n",
|
||||
" print('品种%s在%s年无数据!'%(v,k))\n",
|
||||
" continue\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import shelve\n",
|
||||
"\n",
|
||||
"# 要合并的shelve数据库路径\n",
|
||||
"shelve_files = ['D:/contract_data1.dat', 'D:/contract_data2.dat', 'D:/contract_data3.dat']\n",
|
||||
"# 合并后的新数据库路径\n",
|
||||
"new_shelve_file = 'D:/contract_data3.dat'\n",
|
||||
"\n",
|
||||
"# 创建一个新的shelve数据库来存储合并后的内容\n",
|
||||
"with shelve.open(new_shelve_file, writeback=True) as new_db:\n",
|
||||
" for shelve_file in shelve_files:\n",
|
||||
" try:\n",
|
||||
" with shelve.open(shelve_file) as db:\n",
|
||||
" for key in db:\n",
|
||||
" if key in new_db:\n",
|
||||
" print(f\"Warning: Key {key} already exists in the new database. Overwriting.\")\n",
|
||||
" new_db[key] = db[key]\n",
|
||||
" except Exception as e:\n",
|
||||
" print(f\"Error processing {shelve_file}: {e}\")\n",
|
||||
"\n",
|
||||
"print(f\"Databases merged into {new_shelve_file}\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import shelve\n",
|
||||
"import os\n",
|
||||
"\n",
|
||||
"# 要合并的shelve数据库路径\n",
|
||||
"shelve_files = [r'C:\\Users\\Administrator\\.vntrader\\elite_db\\bar_overview1', r'C:\\Users\\Administrator\\.vntrader\\elite_db\\bar_overview2', r'C:\\Users\\Administrator\\.vntrader\\elite_db\\bar_overview3']\n",
|
||||
"# 合并后的新数据库路径\n",
|
||||
"new_shelve_file = r'D:\\bar_overview'\n",
|
||||
"\n",
|
||||
"# 创建一个新的shelve数据库来存储合并后的内容\n",
|
||||
"with shelve.open(new_shelve_file, writeback=True) as new_db:\n",
|
||||
" for shelve_file in shelve_files:\n",
|
||||
" # 检查文件是否存在\n",
|
||||
" if not os.path.exists(shelve_file):\n",
|
||||
" print(f\"错误:文件 {shelve_file} 不存在。\")\n",
|
||||
" continue\n",
|
||||
" try:\n",
|
||||
" # 打开并读取shelve数据库\n",
|
||||
" with shelve.open(shelve_file) as db:\n",
|
||||
" for key in db:\n",
|
||||
" if key in new_db:\n",
|
||||
" print(f\"警告:键 {key} 已存在于新数据库中。将覆盖。\")\n",
|
||||
" new_db[key] = db[key]\n",
|
||||
" except Exception as e:\n",
|
||||
" print(f\"处理文件 {shelve_file} 时出错:{e}\")\n",
|
||||
" if 'db type could not be determined' in str(e):\n",
|
||||
" print(f\"提示:文件 {shelve_file} 可能已损坏或不是一个shelve数据库。\")\n",
|
||||
" continue\n",
|
||||
"\n",
|
||||
"print(f\"数据库已合并到 {new_shelve_file}\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import shelve\n",
|
||||
"f_shelve = shelve.open(r'C:\\Users\\Administrator\\.vntrader\\elite_db\\bar_overview1') # 创建一个文件句柄\n",
|
||||
"# 使用for循环打印内容\n",
|
||||
"for k,v in f_shelve.items():\n",
|
||||
" print(k,v)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import shelve\n",
|
||||
"\n",
|
||||
"# 打开所有源 shelve 数据库\n",
|
||||
"db1 = shelve.open(r'C:\\Users\\Administrator\\.vntrader\\elite_db\\bar_overview1')\n",
|
||||
"db2 = shelve.open(r'C:\\Users\\Administrator\\.vntrader\\elite_db\\bar_overview2')\n",
|
||||
"db3 = shelve.open(r'C:\\Users\\Administrator\\.vntrader\\elite_db\\bar_overview3')\n",
|
||||
"\n",
|
||||
"# 创建一个新的目标 shelve 数据库\n",
|
||||
"merged_db = shelve.open(r'D:\\bar_overview')\n",
|
||||
"\n",
|
||||
"# 将第一个数据库的所有条目添加到新的数据库中\n",
|
||||
"for key in db1:\n",
|
||||
" merged_db[key] = db1[key]\n",
|
||||
"\n",
|
||||
"# 将第二个数据库的所有条目添加到新的数据库中\n",
|
||||
"for key in db2:\n",
|
||||
" merged_db[key] = db2[key]\n",
|
||||
"\n",
|
||||
"# 将第三个数据库的所有条目添加到新的数据库中\n",
|
||||
"for key in db3:\n",
|
||||
" merged_db[key] = db3[key]\n",
|
||||
"\n",
|
||||
"# 关闭所有数据库\n",
|
||||
"db1.close()\n",
|
||||
"db2.close()\n",
|
||||
"db3.close()\n",
|
||||
"merged_db.close()\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,309 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# import sqlite3\n",
|
||||
"# import pandas as pd\n",
|
||||
"\n",
|
||||
"# # 连接到SQLite数据库\n",
|
||||
"# conn = sqlite3.connect('database.db')\n",
|
||||
"\n",
|
||||
"# # 从数据库中读取表数据到DataFrame\n",
|
||||
"# table_name = 'your_table_name' # 替换为实际表名\n",
|
||||
"# query = f\"SELECT * FROM {table_name}\"\n",
|
||||
"# df = pd.read_sql_query(query, conn)\n",
|
||||
"\n",
|
||||
"# 按照“本地代码”分组并导出为CSV文件\n",
|
||||
"for local_code, group in df.groupby('本地代码'):\n",
|
||||
" # 为每个“本地代码”生成一个CSV文件,文件名使用该代码值\n",
|
||||
" csv_filename = f\"{local_code}.csv\"\n",
|
||||
" group.to_csv(csv_filename, index=False, encoding='utf-8-sig')\n",
|
||||
" print(f\"数据已导出到 {csv_filename}\")\n",
|
||||
"\n",
|
||||
"# 关闭数据库连接\n",
|
||||
"conn.close()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sqlite3\n",
|
||||
"import pandas as pd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 连接到SQLite数据库\n",
|
||||
"conn = sqlite3.connect(r'D:\\of_data\\database.db')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 从数据库中读取表数据到DataFrame\n",
|
||||
"table_name = 'dbbardata' # 替换为实际表名\n",
|
||||
"query = f\"SELECT * FROM {table_name}\"\n",
|
||||
"df = pd.read_sql_query(query, conn)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"del(df['id'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"del group"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"数据已导出到 AP00_CZCE.csv\n",
|
||||
"数据已导出到 APJQ00_CZCE.csv\n",
|
||||
"数据已导出到 CF00_CZCE.csv\n",
|
||||
"数据已导出到 CFJQ00_CZCE.csv\n",
|
||||
"数据已导出到 CJ00_CZCE.csv\n",
|
||||
"数据已导出到 CJJQ00_CZCE.csv\n",
|
||||
"数据已导出到 CY00_CZCE.csv\n",
|
||||
"数据已导出到 CYJQ00_CZCE.csv\n",
|
||||
"数据已导出到 FG00_CZCE.csv\n",
|
||||
"数据已导出到 FGJQ00_CZCE.csv\n",
|
||||
"数据已导出到 IC00_CFFEX.csv\n",
|
||||
"数据已导出到 ICJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 IF00_CFFEX.csv\n",
|
||||
"数据已导出到 IFJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 IH00_CFFEX.csv\n",
|
||||
"数据已导出到 IHJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 IM00_CFFEX.csv\n",
|
||||
"数据已导出到 IMJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 JR00_CZCE.csv\n",
|
||||
"数据已导出到 JRJQ00_CZCE.csv\n",
|
||||
"数据已导出到 LR00_CZCE.csv\n",
|
||||
"数据已导出到 LRJQ00_CZCE.csv\n",
|
||||
"数据已导出到 MA00_CZCE.csv\n",
|
||||
"数据已导出到 MAJQ00_CZCE.csv\n",
|
||||
"数据已导出到 OI00_CZCE.csv\n",
|
||||
"数据已导出到 OIJQ00_CZCE.csv\n",
|
||||
"数据已导出到 PF00_CZCE.csv\n",
|
||||
"数据已导出到 PFJQ00_CZCE.csv\n",
|
||||
"数据已导出到 PK00_CZCE.csv\n",
|
||||
"数据已导出到 PKJQ00_CZCE.csv\n",
|
||||
"数据已导出到 PM00_CZCE.csv\n",
|
||||
"数据已导出到 PMJQ00_CZCE.csv\n",
|
||||
"数据已导出到 PX00_CZCE.csv\n",
|
||||
"数据已导出到 PXJQ00_CZCE.csv\n",
|
||||
"数据已导出到 RI00_CZCE.csv\n",
|
||||
"数据已导出到 RIJQ00_CZCE.csv\n",
|
||||
"数据已导出到 RM00_CZCE.csv\n",
|
||||
"数据已导出到 RMJQ00_CZCE.csv\n",
|
||||
"数据已导出到 RS00_CZCE.csv\n",
|
||||
"数据已导出到 RSJQ00_CZCE.csv\n",
|
||||
"数据已导出到 SA00_CZCE.csv\n",
|
||||
"数据已导出到 SAJQ00_CZCE.csv\n",
|
||||
"数据已导出到 SF00_CZCE.csv\n",
|
||||
"数据已导出到 SFJQ00_CZCE.csv\n",
|
||||
"数据已导出到 SH00_CZCE.csv\n",
|
||||
"数据已导出到 SHJQ00_CZCE.csv\n",
|
||||
"数据已导出到 SM00_CZCE.csv\n",
|
||||
"数据已导出到 SMJQ00_CZCE.csv\n",
|
||||
"数据已导出到 SR00_CZCE.csv\n",
|
||||
"数据已导出到 SRJQ00_CZCE.csv\n",
|
||||
"数据已导出到 T00_CFFEX.csv\n",
|
||||
"数据已导出到 TA00_CZCE.csv\n",
|
||||
"数据已导出到 TAJQ00_CZCE.csv\n",
|
||||
"数据已导出到 TF00_CFFEX.csv\n",
|
||||
"数据已导出到 TFJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 TJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 TL00_CFFEX.csv\n",
|
||||
"数据已导出到 TLJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 TS00_CFFEX.csv\n",
|
||||
"数据已导出到 TSJQ00_CFFEX.csv\n",
|
||||
"数据已导出到 UR00_CZCE.csv\n",
|
||||
"数据已导出到 URJQ00_CZCE.csv\n",
|
||||
"数据已导出到 WH00_CZCE.csv\n",
|
||||
"数据已导出到 WHJQ00_CZCE.csv\n",
|
||||
"数据已导出到 ZC00_CZCE.csv\n",
|
||||
"数据已导出到 ZCJQ00_CZCE.csv\n",
|
||||
"数据已导出到 a00_DCE.csv\n",
|
||||
"数据已导出到 aJQ00_DCE.csv\n",
|
||||
"数据已导出到 ag00_SHFE.csv\n",
|
||||
"数据已导出到 agJQ00_SHFE.csv\n",
|
||||
"数据已导出到 al00_SHFE.csv\n",
|
||||
"数据已导出到 alJQ00_SHFE.csv\n",
|
||||
"数据已导出到 ao00_SHFE.csv\n",
|
||||
"数据已导出到 aoJQ00_SHFE.csv\n",
|
||||
"数据已导出到 au00_SHFE.csv\n",
|
||||
"数据已导出到 auJQ00_SHFE.csv\n",
|
||||
"数据已导出到 b00_DCE.csv\n",
|
||||
"数据已导出到 bJQ00_DCE.csv\n",
|
||||
"数据已导出到 bb00_DCE.csv\n",
|
||||
"数据已导出到 bbJQ00_DCE.csv\n",
|
||||
"数据已导出到 bc00_INE.csv\n",
|
||||
"数据已导出到 bcJQ00_INE.csv\n",
|
||||
"数据已导出到 br00_SHFE.csv\n",
|
||||
"数据已导出到 brJQ00_SHFE.csv\n",
|
||||
"数据已导出到 bu00_SHFE.csv\n",
|
||||
"数据已导出到 buJQ00_SHFE.csv\n",
|
||||
"数据已导出到 c00_DCE.csv\n",
|
||||
"数据已导出到 cJQ00_DCE.csv\n",
|
||||
"数据已导出到 cs00_DCE.csv\n",
|
||||
"数据已导出到 csJQ00_DCE.csv\n",
|
||||
"数据已导出到 cu00_SHFE.csv\n",
|
||||
"数据已导出到 cuJQ00_SHFE.csv\n",
|
||||
"数据已导出到 eb00_DCE.csv\n",
|
||||
"数据已导出到 ebJQ00_DCE.csv\n",
|
||||
"数据已导出到 ec00_INE.csv\n",
|
||||
"数据已导出到 ecJQ00_INE.csv\n",
|
||||
"数据已导出到 eg00_DCE.csv\n",
|
||||
"数据已导出到 egJQ00_DCE.csv\n",
|
||||
"数据已导出到 fb00_DCE.csv\n",
|
||||
"数据已导出到 fbJQ00_DCE.csv\n",
|
||||
"数据已导出到 fu00_SHFE.csv\n",
|
||||
"数据已导出到 fuJQ00_SHFE.csv\n",
|
||||
"数据已导出到 hc00_SHFE.csv\n",
|
||||
"数据已导出到 hcJQ00_SHFE.csv\n",
|
||||
"数据已导出到 i00_DCE.csv\n",
|
||||
"数据已导出到 iJQ00_DCE.csv\n",
|
||||
"数据已导出到 j00_DCE.csv\n",
|
||||
"数据已导出到 jJQ00_DCE.csv\n",
|
||||
"数据已导出到 jd00_DCE.csv\n",
|
||||
"数据已导出到 jdJQ00_DCE.csv\n",
|
||||
"数据已导出到 jm00_DCE.csv\n",
|
||||
"数据已导出到 jmJQ00_DCE.csv\n",
|
||||
"数据已导出到 l00_DCE.csv\n",
|
||||
"数据已导出到 lJQ00_DCE.csv\n",
|
||||
"数据已导出到 lc00_GFEX.csv\n",
|
||||
"数据已导出到 lcJQ00_GFEX.csv\n",
|
||||
"数据已导出到 lh00_DCE.csv\n",
|
||||
"数据已导出到 lhJQ00_DCE.csv\n",
|
||||
"数据已导出到 lu00_INE.csv\n",
|
||||
"数据已导出到 luJQ00_INE.csv\n",
|
||||
"数据已导出到 m00_DCE.csv\n",
|
||||
"数据已导出到 mJQ00_DCE.csv\n",
|
||||
"数据已导出到 ni00_SHFE.csv\n",
|
||||
"数据已导出到 niJQ00_SHFE.csv\n",
|
||||
"数据已导出到 nr00_INE.csv\n",
|
||||
"数据已导出到 nrJQ00_INE.csv\n",
|
||||
"数据已导出到 p00_DCE.csv\n",
|
||||
"数据已导出到 pJQ00_DCE.csv\n",
|
||||
"数据已导出到 pb00_SHFE.csv\n",
|
||||
"数据已导出到 pbJQ00_SHFE.csv\n",
|
||||
"数据已导出到 pg00_DCE.csv\n",
|
||||
"数据已导出到 pgJQ00_DCE.csv\n",
|
||||
"数据已导出到 pp00_DCE.csv\n",
|
||||
"数据已导出到 ppJQ00_DCE.csv\n",
|
||||
"数据已导出到 rb00_SHFE.csv\n",
|
||||
"数据已导出到 rbJQ00_SHFE.csv\n",
|
||||
"数据已导出到 rr00_DCE.csv\n",
|
||||
"数据已导出到 rrJQ00_DCE.csv\n",
|
||||
"数据已导出到 ru00_SHFE.csv\n",
|
||||
"数据已导出到 ruJQ00_SHFE.csv\n",
|
||||
"数据已导出到 sc00_INE.csv\n",
|
||||
"数据已导出到 scJQ00_INE.csv\n",
|
||||
"数据已导出到 si00_GFEX.csv\n",
|
||||
"数据已导出到 siJQ00_GFEX.csv\n",
|
||||
"数据已导出到 sn00_SHFE.csv\n",
|
||||
"数据已导出到 snJQ00_SHFE.csv\n",
|
||||
"数据已导出到 sp00_SHFE.csv\n",
|
||||
"数据已导出到 spJQ00_SHFE.csv\n",
|
||||
"数据已导出到 ss00_SHFE.csv\n",
|
||||
"数据已导出到 ssJQ00_SHFE.csv\n",
|
||||
"数据已导出到 v00_DCE.csv\n",
|
||||
"数据已导出到 vJQ00_DCE.csv\n",
|
||||
"数据已导出到 wr00_SHFE.csv\n",
|
||||
"数据已导出到 wrJQ00_SHFE.csv\n",
|
||||
"数据已导出到 y00_DCE.csv\n",
|
||||
"数据已导出到 yJQ00_DCE.csv\n",
|
||||
"数据已导出到 zn00_SHFE.csv\n",
|
||||
"数据已导出到 znJQ00_SHFE.csv\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for local_code, group in df.groupby('symbol'):\n",
|
||||
" # 为每个“本地代码”生成一个CSV文件,文件名使用该代码值\n",
|
||||
" exchange = group.exchange.iloc[0]\n",
|
||||
" csv_filename = f\"{local_code}_{exchange}.csv\"\n",
|
||||
" group.to_csv(csv_filename, index=False, encoding='utf-8-sig')\n",
|
||||
" print(f\"数据已导出到 {csv_filename}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"conn.close()"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,371 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"from ssquant.SQDATA import TakeData\n",
|
||||
"\n",
|
||||
"#注意首先需要pip install ssquant\n",
|
||||
"#否则链接不到数据库\n",
|
||||
"#输入俱乐部的账号密码即可调用,注意保密。\n",
|
||||
"#目前数据是2019年1月-至今\n",
|
||||
"#每日下午收盘后3点30分录入当天数据。\n",
|
||||
"#有任何疑问可以再群里提出,或者私信我(慕金龙)\n",
|
||||
"#官网: quant789.com\n",
|
||||
"#公众号:松鼠Quant\n",
|
||||
"#客服微信: viquant01\n",
|
||||
"\n",
|
||||
"#只能调取分钟及以上数据,tick数据每月底更新到百度网盘下载\n",
|
||||
"\n",
|
||||
"'''\n",
|
||||
"获取数据-\n",
|
||||
"品种:symbol,不区分大小写\n",
|
||||
"起始时间:start_date,\n",
|
||||
"结束时间:end_date(包含当天),\n",
|
||||
"周期kline_period:1M..5M..NM(分钟),1D(天),1W(周),1Y(月)\n",
|
||||
"复权adjust_type:0(不复权)1(后复权)\n",
|
||||
"注意:\n",
|
||||
"1.请正确输入账号密码\n",
|
||||
"2.不要挂代理访问数据库\n",
|
||||
"3.暂时没有股指数据,下个月补齐。\n",
|
||||
"'''\n",
|
||||
" \n",
|
||||
"# username='俱乐部账号' password='密码'\n",
|
||||
"client = TakeData(username='[email protected]', password='7777')\n",
|
||||
"data = client.get_data(\n",
|
||||
" symbol='rb888',\n",
|
||||
" start_date='2023-01-02',\n",
|
||||
" end_date='2024-01-03',\n",
|
||||
" kline_period='60M',\n",
|
||||
" adjust_type=1\n",
|
||||
")\n",
|
||||
"print(data)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"'''\n",
|
||||
"datetime:时间,\n",
|
||||
"\n",
|
||||
"symbol:品种,\n",
|
||||
"\n",
|
||||
"open:开盘价,\n",
|
||||
"\n",
|
||||
"high:最高价,\n",
|
||||
"\n",
|
||||
"low:最低价,\n",
|
||||
"\n",
|
||||
"close:收盘价,\n",
|
||||
"\n",
|
||||
"volume:成交量(单bar),\n",
|
||||
"\n",
|
||||
"amount:成交金额(单bar),\n",
|
||||
"\n",
|
||||
"openint:持仓量(单bar),\n",
|
||||
"\n",
|
||||
"cumulative_openint:累计持仓量,\n",
|
||||
"\n",
|
||||
"open_bidp , open_askp: K线第一个价格的买一价格和卖一价格\n",
|
||||
"\n",
|
||||
"close_bidp , close_askp: K线最后一个价格的买一价格和卖一价格\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" datetime symbol open high low close volume amount cumulative_openint openint open_bidp open_askp close_bidp close_askp\n",
|
||||
"0 2023-01-03 10:00:00 rb2305 4081.0 4081.0 4016.0 4037.0 737537 29782187220 1883481 -48415 4081.0 4084.0 4037.0 4038.0\n",
|
||||
"1 2023-01-03 11:00:00 rb2305 4038.0 4056.0 4037.0 4042.0 158548 6415696920 1887716 4235 4037.0 4038.0 4042.0 4044.0\n",
|
||||
"2 2023-01-03 12:00:00 rb2305 4044.0 4054.0 4037.0 4051.0 67448 2728130300 1890125 2409 4043.0 4044.0 4050.0 4051.0\n",
|
||||
"3 2023-01-03 14:00:00 rb2305 4055.0 4065.0 4045.0 4058.0 110181 4469698600 1895841 5723 4050.0 4051.0 4058.0 4059.0\n",
|
||||
"4 2023-01-03 15:00:00 rb2305 4059.0 4074.0 4056.0 4063.0 167932 6824213940 1882723 -13125 4058.0 4059.0 4062.0 4063.0\n",
|
||||
"... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n",
|
||||
"1689 2024-01-03 12:00:00 rb2405 4055.0 4057.0 4044.0 4049.0 79745 3229361570 1597387 -6515 4054.0 4055.0 4049.0 4050.0\n",
|
||||
"1690 2024-01-03 14:00:00 rb2405 4050.0 4056.0 4046.0 4049.0 55040 2229498750 1598566 1179 4050.0 4051.0 4049.0 4050.0\n",
|
||||
"1691 2024-01-03 15:00:00 rb2405 4050.0 4064.0 4048.0 4055.0 148845 6038835190 1583796 -14770 4049.0 4050.0 4055.0 4056.0\n",
|
||||
"1692 2024-01-03 22:00:00 rb2405 4054.0 4054.0 4040.0 4049.0 181753 7354584770 1582419 990 4053.0 4054.0 4048.0 4049.0\n",
|
||||
"1693 2024-01-03 23:00:00 rb2405 4049.0 4057.0 4042.0 4049.0 104712 4240341050 1574287 -8132 4048.0 4049.0 4049.0 4050.0"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from ssquant.SQDATA import TakeData"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"out_path = r'D:/data'\n",
|
||||
"symbol_name = 'rb888' #主力连续888 次主力合约777\n",
|
||||
"time_period = '1M'\n",
|
||||
"start_time = '2000-01-01'\n",
|
||||
"end_time = '2019-01-31'\n",
|
||||
"adjust_k = 'Faj' #Naj:Non adjust,Faj:Forward adjust,后复权\n",
|
||||
"\n",
|
||||
"if adjust_k == 'Naj':\n",
|
||||
" adjust_tmp = 0\n",
|
||||
"elif adjust_k == 'Faj':\n",
|
||||
" adjust_tmp = 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"client = TakeData(username='[email protected]', password='Zj123!@#')\n",
|
||||
"data = client.get_data(\n",
|
||||
" symbol=symbol_name,\n",
|
||||
" start_date=start_time,\n",
|
||||
" end_date=end_time,\n",
|
||||
" kline_period=time_period,\n",
|
||||
" adjust_type= adjust_tmp\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 49,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"头部文件为:--------------------\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>datetime</th>\n",
|
||||
" <th>symbol</th>\n",
|
||||
" <th>open</th>\n",
|
||||
" <th>high</th>\n",
|
||||
" <th>low</th>\n",
|
||||
" <th>close</th>\n",
|
||||
" <th>volume</th>\n",
|
||||
" <th>amount</th>\n",
|
||||
" <th>cumulative_openint</th>\n",
|
||||
" <th>openint</th>\n",
|
||||
" <th>open_bidp</th>\n",
|
||||
" <th>open_askp</th>\n",
|
||||
" <th>close_bidp</th>\n",
|
||||
" <th>close_askp</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>2019-01-02 09:01:00</td>\n",
|
||||
" <td>rb1905</td>\n",
|
||||
" <td>3399</td>\n",
|
||||
" <td>3405</td>\n",
|
||||
" <td>3389</td>\n",
|
||||
" <td>3401</td>\n",
|
||||
" <td>69562</td>\n",
|
||||
" <td>2362607160</td>\n",
|
||||
" <td>2383714</td>\n",
|
||||
" <td>16864</td>\n",
|
||||
" <td>3399.0</td>\n",
|
||||
" <td>3400.0</td>\n",
|
||||
" <td>3400.0</td>\n",
|
||||
" <td>3401.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>2019-01-02 09:02:00</td>\n",
|
||||
" <td>rb1905</td>\n",
|
||||
" <td>3401</td>\n",
|
||||
" <td>3430</td>\n",
|
||||
" <td>3401</td>\n",
|
||||
" <td>3410</td>\n",
|
||||
" <td>88696</td>\n",
|
||||
" <td>3034283200</td>\n",
|
||||
" <td>2399530</td>\n",
|
||||
" <td>-12248</td>\n",
|
||||
" <td>3401.0</td>\n",
|
||||
" <td>3402.0</td>\n",
|
||||
" <td>3409.0</td>\n",
|
||||
" <td>3410.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>2019-01-02 09:03:00</td>\n",
|
||||
" <td>rb1905</td>\n",
|
||||
" <td>3409</td>\n",
|
||||
" <td>3414</td>\n",
|
||||
" <td>3409</td>\n",
|
||||
" <td>3412</td>\n",
|
||||
" <td>22828</td>\n",
|
||||
" <td>778740580</td>\n",
|
||||
" <td>2387356</td>\n",
|
||||
" <td>1180</td>\n",
|
||||
" <td>3409.0</td>\n",
|
||||
" <td>3410.0</td>\n",
|
||||
" <td>3411.0</td>\n",
|
||||
" <td>3412.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>2019-01-02 09:04:00</td>\n",
|
||||
" <td>rb1905</td>\n",
|
||||
" <td>3412</td>\n",
|
||||
" <td>3413</td>\n",
|
||||
" <td>3403</td>\n",
|
||||
" <td>3404</td>\n",
|
||||
" <td>17378</td>\n",
|
||||
" <td>592413220</td>\n",
|
||||
" <td>2388158</td>\n",
|
||||
" <td>54</td>\n",
|
||||
" <td>3411.0</td>\n",
|
||||
" <td>3412.0</td>\n",
|
||||
" <td>3404.0</td>\n",
|
||||
" <td>3405.0</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>2019-01-02 09:05:00</td>\n",
|
||||
" <td>rb1905</td>\n",
|
||||
" <td>3405</td>\n",
|
||||
" <td>3409</td>\n",
|
||||
" <td>3405</td>\n",
|
||||
" <td>3405</td>\n",
|
||||
" <td>15770</td>\n",
|
||||
" <td>537276980</td>\n",
|
||||
" <td>2388190</td>\n",
|
||||
" <td>1674</td>\n",
|
||||
" <td>3405.0</td>\n",
|
||||
" <td>3406.0</td>\n",
|
||||
" <td>3405.0</td>\n",
|
||||
" <td>3406.0</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" datetime symbol open high low close volume amount \\\n",
|
||||
"0 2019-01-02 09:01:00 rb1905 3399 3405 3389 3401 69562 2362607160 \n",
|
||||
"1 2019-01-02 09:02:00 rb1905 3401 3430 3401 3410 88696 3034283200 \n",
|
||||
"2 2019-01-02 09:03:00 rb1905 3409 3414 3409 3412 22828 778740580 \n",
|
||||
"3 2019-01-02 09:04:00 rb1905 3412 3413 3403 3404 17378 592413220 \n",
|
||||
"4 2019-01-02 09:05:00 rb1905 3405 3409 3405 3405 15770 537276980 \n",
|
||||
"\n",
|
||||
" cumulative_openint openint open_bidp open_askp close_bidp close_askp \n",
|
||||
"0 2383714 16864 3399.0 3400.0 3400.0 3401.0 \n",
|
||||
"1 2399530 -12248 3401.0 3402.0 3409.0 3410.0 \n",
|
||||
"2 2387356 1180 3409.0 3410.0 3411.0 3412.0 \n",
|
||||
"3 2388158 54 3411.0 3412.0 3404.0 3405.0 \n",
|
||||
"4 2388190 1674 3405.0 3406.0 3405.0 3406.0 "
|
||||
]
|
||||
},
|
||||
"execution_count": 49,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print('头部文件为:--------------------')\n",
|
||||
"data.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from datetime import datetime\n",
|
||||
" \n",
|
||||
"# 假设你有一个字符串,表示时间,格式为 'YYYY-MM-DD HH:MM:SS'\n",
|
||||
"real_start_time = data.iloc[0,0]\n",
|
||||
" \n",
|
||||
"# 使用datetime.strptime将字符串转换为时间\n",
|
||||
"time_obj = datetime.strptime(real_start_time, '%Y-%m-%d %H:%M:%S')\n",
|
||||
" \n",
|
||||
"# 获取年月日\n",
|
||||
"year = time_obj.year\n",
|
||||
"month = time_obj.month\n",
|
||||
"day = time_obj.day\n",
|
||||
" \n",
|
||||
"print(f'年: {year}, 月: {month}, 日: {day}')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print('尾部文件为:--------------------')\n",
|
||||
"data.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"import datetime\n",
|
||||
"real_start_time = pd.to_datetime(data.iloc[0,0]).date().strftime('%Y-%m-%d')\n",
|
||||
"real_end_time = pd.to_datetime(data.iloc[-1,0]).date().strftime('%Y-%m-%d')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"data.to_csv('%s/%s_%s_%s(%s_%s).csv'%(out_path,symbol_name,time_period,adjust_k,real_start_time,real_end_time), index=False)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
from ssquant.SQDATA import TakeData
|
||||
|
||||
#注意首先需要pip install ssquant
|
||||
#否则链接不到数据库
|
||||
#输入俱乐部的账号密码即可调用,注意保密。
|
||||
#目前数据是2019年1月-至今
|
||||
#每日下午收盘后3点30分录入当天数据。
|
||||
#有任何疑问可以再群里提出,或者私信我(慕金龙)
|
||||
#官网: quant789.com
|
||||
#公众号:松鼠Quant
|
||||
#客服微信: viquant01
|
||||
|
||||
#只能调取分钟及以上数据,tick数据每月底更新到百度网盘下载
|
||||
|
||||
'''
|
||||
获取数据-
|
||||
品种:symbol,不区分大小写
|
||||
起始时间:start_date,
|
||||
结束时间:end_date(包含当天),
|
||||
周期kline_period:1M..5M..NM(分钟),1D(天),1W(周),1Y(月)
|
||||
复权adjust_type:0(不复权)1(后复权)
|
||||
注意:
|
||||
1.请正确输入账号密码
|
||||
2.不要挂代理访问数据库
|
||||
3.暂时没有股指数据,下个月补齐。
|
||||
'''
|
||||
|
||||
# username='俱乐部账号' password='密码'
|
||||
client = TakeData(username='[email protected]', password='7777')
|
||||
data = client.get_data(
|
||||
symbol='rb888',
|
||||
start_date='2023-01-02',
|
||||
end_date='2024-01-03',
|
||||
kline_period='60M',
|
||||
adjust_type=1
|
||||
)
|
||||
print(data)
|
||||
|
||||
|
||||
|
||||
'''
|
||||
datetime:时间,
|
||||
|
||||
symbol:品种,
|
||||
|
||||
open:开盘价,
|
||||
|
||||
high:最高价,
|
||||
|
||||
low:最低价,
|
||||
|
||||
close:收盘价,
|
||||
|
||||
volume:成交量(单bar),
|
||||
|
||||
amount:成交金额(单bar),
|
||||
|
||||
openint:持仓量(单bar),
|
||||
|
||||
cumulative_openint:累计持仓量,
|
||||
|
||||
open_bidp , open_askp: K线第一个价格的买一价格和卖一价格
|
||||
|
||||
close_bidp , close_askp: K线最后一个价格的买一价格和卖一价格
|
||||
|
||||
|
||||
datetime symbol open high low close volume amount cumulative_openint openint open_bidp open_askp close_bidp close_askp
|
||||
0 2023-01-03 10:00:00 rb2305 4081.0 4081.0 4016.0 4037.0 737537 29782187220 1883481 -48415 4081.0 4084.0 4037.0 4038.0
|
||||
1 2023-01-03 11:00:00 rb2305 4038.0 4056.0 4037.0 4042.0 158548 6415696920 1887716 4235 4037.0 4038.0 4042.0 4044.0
|
||||
2 2023-01-03 12:00:00 rb2305 4044.0 4054.0 4037.0 4051.0 67448 2728130300 1890125 2409 4043.0 4044.0 4050.0 4051.0
|
||||
3 2023-01-03 14:00:00 rb2305 4055.0 4065.0 4045.0 4058.0 110181 4469698600 1895841 5723 4050.0 4051.0 4058.0 4059.0
|
||||
4 2023-01-03 15:00:00 rb2305 4059.0 4074.0 4056.0 4063.0 167932 6824213940 1882723 -13125 4058.0 4059.0 4062.0 4063.0
|
||||
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
|
||||
1689 2024-01-03 12:00:00 rb2405 4055.0 4057.0 4044.0 4049.0 79745 3229361570 1597387 -6515 4054.0 4055.0 4049.0 4050.0
|
||||
1690 2024-01-03 14:00:00 rb2405 4050.0 4056.0 4046.0 4049.0 55040 2229498750 1598566 1179 4050.0 4051.0 4049.0 4050.0
|
||||
1691 2024-01-03 15:00:00 rb2405 4050.0 4064.0 4048.0 4055.0 148845 6038835190 1583796 -14770 4049.0 4050.0 4055.0 4056.0
|
||||
1692 2024-01-03 22:00:00 rb2405 4054.0 4054.0 4040.0 4049.0 181753 7354584770 1582419 990 4053.0 4054.0 4048.0 4049.0
|
||||
1693 2024-01-03 23:00:00 rb2405 4049.0 4057.0 4042.0 4049.0 104712 4240341050 1574287 -8132 4048.0 4049.0 4049.0 4050.0
|
||||
'''
|
||||
@@ -0,0 +1,65 @@
|
||||
from ssquant.SQDATA import TakeData
|
||||
from pyecharts import options as opts
|
||||
from pyecharts.charts import Kline, Bar, Grid
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def plotK(data):
|
||||
# 示例数据(您需要替换为您的实际数据)
|
||||
kline_data = data[['open', 'close', 'low', 'high']].values.tolist()
|
||||
dates = data.index.strftime('%Y-%m-%d %H:%M:%S').tolist()
|
||||
symbol_data = data['symbol'].values.tolist()
|
||||
# 标记 symbol 变化的位置
|
||||
markline_data = []
|
||||
for i in range(1, len(symbol_data)):
|
||||
if symbol_data[i] != symbol_data[i-1]:
|
||||
# 当前 symbol 与前一个不同时,添加红色竖线
|
||||
markline_data.append(opts.MarkLineItem(x=dates[i], name=f'前一个合约{symbol_data[i-1]},当前合约{symbol_data[i]}'))
|
||||
|
||||
|
||||
# 数据缩放组件配置
|
||||
datazoom_slider = opts.DataZoomOpts(type_="slider", xaxis_index=[0, 1, 2, 3,4], range_start=50, range_end=100)
|
||||
datazoom_inside = opts.DataZoomOpts(type_="inside", xaxis_index=[0, 1, 2, 3,4])
|
||||
|
||||
# 创建 K 线图
|
||||
kline = (
|
||||
Kline(init_opts=opts.InitOpts(width="100%", height="900px"))
|
||||
.add_xaxis(dates)
|
||||
.add_yaxis('K线图表', kline_data,markline_opts=opts.MarkLineOpts(data=markline_data, symbol='none', linestyle_opts=opts.LineStyleOpts(color="red")))#"ssss",
|
||||
.set_global_opts(
|
||||
datazoom_opts=[datazoom_slider, datazoom_inside],
|
||||
toolbox_opts=opts.ToolboxOpts(is_show=True, pos_top="0%", pos_right="80%"),
|
||||
legend_opts=opts.LegendOpts(pos_left='40%'), # 调整图例位置到底部
|
||||
)
|
||||
)
|
||||
kline.render('K线图.html')
|
||||
|
||||
|
||||
|
||||
'''
|
||||
获取数据-
|
||||
品种:symbol,
|
||||
起始时间:start_date,
|
||||
结束时间:end_date(包含当天),
|
||||
周期kline_period:1M..5M..NM(分钟),1D(天),1W(周),1Y(月)
|
||||
复权adjust_type:0(不复权)1(后复权)
|
||||
'''
|
||||
|
||||
# 请在下方输入你的俱乐部账号密码,username='俱乐部账号' password='密码'
|
||||
|
||||
client = TakeData(username='[email protected]', password='123')
|
||||
data = client.get_data(
|
||||
symbol='rb888',
|
||||
start_date='2023-12-28',
|
||||
end_date='2024-01-17',
|
||||
kline_period='60M',
|
||||
adjust_type=1
|
||||
)
|
||||
data.set_index("datetime", inplace=True)
|
||||
data.index = pd.to_datetime(data.index)
|
||||
print(data)
|
||||
#生产K线图表到脚本同目录下
|
||||
plotK(data)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "1a846b12",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"from ssquant.SQDATA import TakeData\n",
|
||||
"\n",
|
||||
"#注意首先需要pip install ssquant\n",
|
||||
"#否则链接不到数据库\n",
|
||||
"#输入俱乐部的账号密码即可调用,注意保密。\n",
|
||||
"#目前数据是2019年1月-至今\n",
|
||||
"#每日下午收盘后3点30分录入当天数据。\n",
|
||||
"#有任何疑问可以再群里提出,或者私信我(慕金龙)\n",
|
||||
"#官网: quant789.com\n",
|
||||
"#公众号:松鼠Quant\n",
|
||||
"#客服微信: viquant01\n",
|
||||
"\n",
|
||||
"#只能调取分钟及以上数据,tick数据每月底更新到百度网盘下载\n",
|
||||
"\n",
|
||||
"'''\n",
|
||||
"获取数据-\n",
|
||||
"品种:symbol,不区分大小写\n",
|
||||
"起始时间:start_date,\n",
|
||||
"结束时间:end_date(包含当天),\n",
|
||||
"周期kline_period:1M..5M..NM(分钟),1D(天),1W(周),1Y(月)\n",
|
||||
"复权adjust_type:0(不复权)1(后复权)\n",
|
||||
"注意:\n",
|
||||
"1.请正确输入账号密码\n",
|
||||
"2.不要挂代理访问数据库\n",
|
||||
"3.暂时没有股指数据,下个月补齐。\n",
|
||||
"'''\n",
|
||||
" \n",
|
||||
"# username='俱乐部账号' password='密码'\n",
|
||||
"client = TakeData(username='[email protected]', password='7777')\n",
|
||||
"data = client.get_data(\n",
|
||||
" symbol='rb888',\n",
|
||||
" start_date='2023-01-02',\n",
|
||||
" end_date='2024-01-03',\n",
|
||||
" kline_period='60M',\n",
|
||||
" adjust_type=1\n",
|
||||
")\n",
|
||||
"print(data)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"'''\n",
|
||||
"datetime:时间,\n",
|
||||
"\n",
|
||||
"symbol:品种,\n",
|
||||
"\n",
|
||||
"open:开盘价,\n",
|
||||
"\n",
|
||||
"high:最高价,\n",
|
||||
"\n",
|
||||
"low:最低价,\n",
|
||||
"\n",
|
||||
"close:收盘价,\n",
|
||||
"\n",
|
||||
"volume:成交量(单bar),\n",
|
||||
"\n",
|
||||
"amount:成交金额(单bar),\n",
|
||||
"\n",
|
||||
"openint:持仓量(单bar),\n",
|
||||
"\n",
|
||||
"cumulative_openint:累计持仓量,\n",
|
||||
"\n",
|
||||
"open_bidp , open_askp: K线第一个价格的买一价格和卖一价格\n",
|
||||
"\n",
|
||||
"close_bidp , close_askp: K线最后一个价格的买一价格和卖一价格\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" datetime symbol open high low close volume amount cumulative_openint openint open_bidp open_askp close_bidp close_askp\n",
|
||||
"0 2023-01-03 10:00:00 rb2305 4081.0 4081.0 4016.0 4037.0 737537 29782187220 1883481 -48415 4081.0 4084.0 4037.0 4038.0\n",
|
||||
"1 2023-01-03 11:00:00 rb2305 4038.0 4056.0 4037.0 4042.0 158548 6415696920 1887716 4235 4037.0 4038.0 4042.0 4044.0\n",
|
||||
"2 2023-01-03 12:00:00 rb2305 4044.0 4054.0 4037.0 4051.0 67448 2728130300 1890125 2409 4043.0 4044.0 4050.0 4051.0\n",
|
||||
"3 2023-01-03 14:00:00 rb2305 4055.0 4065.0 4045.0 4058.0 110181 4469698600 1895841 5723 4050.0 4051.0 4058.0 4059.0\n",
|
||||
"4 2023-01-03 15:00:00 rb2305 4059.0 4074.0 4056.0 4063.0 167932 6824213940 1882723 -13125 4058.0 4059.0 4062.0 4063.0\n",
|
||||
"... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n",
|
||||
"1689 2024-01-03 12:00:00 rb2405 4055.0 4057.0 4044.0 4049.0 79745 3229361570 1597387 -6515 4054.0 4055.0 4049.0 4050.0\n",
|
||||
"1690 2024-01-03 14:00:00 rb2405 4050.0 4056.0 4046.0 4049.0 55040 2229498750 1598566 1179 4050.0 4051.0 4049.0 4050.0\n",
|
||||
"1691 2024-01-03 15:00:00 rb2405 4050.0 4064.0 4048.0 4055.0 148845 6038835190 1583796 -14770 4049.0 4050.0 4055.0 4056.0\n",
|
||||
"1692 2024-01-03 22:00:00 rb2405 4054.0 4054.0 4040.0 4049.0 181753 7354584770 1582419 990 4053.0 4054.0 4048.0 4049.0\n",
|
||||
"1693 2024-01-03 23:00:00 rb2405 4049.0 4057.0 4042.0 4049.0 104712 4240341050 1574287 -8132 4048.0 4049.0 4049.0 4050.0\n",
|
||||
"'''"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"id": "65b4b7aa",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from ssquant.SQDATA import TakeData\n",
|
||||
"import pandas as pd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"id": "edd4f1e5",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" datetime symbol open high low close volume \\\n",
|
||||
"0 2023-01-03 10:00:00 rb2305 4081 4081 4016 4037 737537 \n",
|
||||
"1 2023-01-03 11:00:00 rb2305 4038 4056 4037 4042 158548 \n",
|
||||
"2 2023-01-03 12:00:00 rb2305 4044 4054 4037 4051 67448 \n",
|
||||
"3 2023-01-03 14:00:00 rb2305 4055 4065 4045 4058 110181 \n",
|
||||
"4 2023-01-03 15:00:00 rb2305 4059 4074 4056 4063 167932 \n",
|
||||
".. ... ... ... ... ... ... ... \n",
|
||||
"112 2023-02-01 12:00:00 rb2305 4126 4129 4105 4107 193291 \n",
|
||||
"113 2023-02-01 14:00:00 rb2305 4108 4117 4100 4109 137182 \n",
|
||||
"114 2023-02-01 15:00:00 rb2305 4109 4114 4075 4084 378930 \n",
|
||||
"115 2023-02-01 22:00:00 rb2305 4092 4104 4087 4103 207519 \n",
|
||||
"116 2023-02-01 23:00:00 rb2305 4102 4109 4075 4098 189724 \n",
|
||||
"\n",
|
||||
" amount cumulative_openint openint open_bidp open_askp \\\n",
|
||||
"0 29782187220 1883481 -48415 4081 4084 \n",
|
||||
"1 6415696920 1887716 4235 4037 4038 \n",
|
||||
"2 2728130300 1890125 2409 4043 4044 \n",
|
||||
"3 4469698600 1895841 5723 4050 4051 \n",
|
||||
"4 6824213940 1882723 -13125 4058 4059 \n",
|
||||
".. ... ... ... ... ... \n",
|
||||
"112 7954826320 1984919 3490 4125 4126 \n",
|
||||
"113 5634834380 1998312 13394 4108 4109 \n",
|
||||
"114 15503896450 1994915 -3398 4109 4110 \n",
|
||||
"115 8500232870 1988628 -5587 4091 4092 \n",
|
||||
"116 7757206650 1973544 -15099 4101 4102 \n",
|
||||
"\n",
|
||||
" close_bidp close_askp \n",
|
||||
"0 4037 4038 \n",
|
||||
"1 4042 4044 \n",
|
||||
"2 4050 4051 \n",
|
||||
"3 4058 4059 \n",
|
||||
"4 4062 4063 \n",
|
||||
".. ... ... \n",
|
||||
"112 4106 4107 \n",
|
||||
"113 4108 4109 \n",
|
||||
"114 4084 4085 \n",
|
||||
"115 4102 4103 \n",
|
||||
"116 4098 4099 \n",
|
||||
"\n",
|
||||
"[117 rows x 14 columns]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"client = TakeData(username='[email protected]', password='Zj123!@#')\n",
|
||||
"data = client.get_data(\n",
|
||||
" symbol='rb888',\n",
|
||||
" start_date='2023-01-01',\n",
|
||||
" end_date='2023-02-01',\n",
|
||||
" kline_period='60M',\n",
|
||||
" adjust_type=1\n",
|
||||
")\n",
|
||||
"print(data)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"id": "25c70609",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" symbol open high low close volume amount \\\n",
|
||||
"datetime \n",
|
||||
"2023-01-03 10:00:00 rb2305 4081 4081 4016 4037 737537 29782187220 \n",
|
||||
"2023-01-03 11:00:00 rb2305 4038 4056 4037 4042 158548 6415696920 \n",
|
||||
"2023-01-03 12:00:00 rb2305 4044 4054 4037 4051 67448 2728130300 \n",
|
||||
"2023-01-03 14:00:00 rb2305 4055 4065 4045 4058 110181 4469698600 \n",
|
||||
"2023-01-03 15:00:00 rb2305 4059 4074 4056 4063 167932 6824213940 \n",
|
||||
"... ... ... ... ... ... ... ... \n",
|
||||
"2023-02-01 12:00:00 rb2305 4126 4129 4105 4107 193291 7954826320 \n",
|
||||
"2023-02-01 14:00:00 rb2305 4108 4117 4100 4109 137182 5634834380 \n",
|
||||
"2023-02-01 15:00:00 rb2305 4109 4114 4075 4084 378930 15503896450 \n",
|
||||
"2023-02-01 22:00:00 rb2305 4092 4104 4087 4103 207519 8500232870 \n",
|
||||
"2023-02-01 23:00:00 rb2305 4102 4109 4075 4098 189724 7757206650 \n",
|
||||
"\n",
|
||||
" cumulative_openint openint open_bidp open_askp \\\n",
|
||||
"datetime \n",
|
||||
"2023-01-03 10:00:00 1883481 -48415 4081 4084 \n",
|
||||
"2023-01-03 11:00:00 1887716 4235 4037 4038 \n",
|
||||
"2023-01-03 12:00:00 1890125 2409 4043 4044 \n",
|
||||
"2023-01-03 14:00:00 1895841 5723 4050 4051 \n",
|
||||
"2023-01-03 15:00:00 1882723 -13125 4058 4059 \n",
|
||||
"... ... ... ... ... \n",
|
||||
"2023-02-01 12:00:00 1984919 3490 4125 4126 \n",
|
||||
"2023-02-01 14:00:00 1998312 13394 4108 4109 \n",
|
||||
"2023-02-01 15:00:00 1994915 -3398 4109 4110 \n",
|
||||
"2023-02-01 22:00:00 1988628 -5587 4091 4092 \n",
|
||||
"2023-02-01 23:00:00 1973544 -15099 4101 4102 \n",
|
||||
"\n",
|
||||
" close_bidp close_askp \n",
|
||||
"datetime \n",
|
||||
"2023-01-03 10:00:00 4037 4038 \n",
|
||||
"2023-01-03 11:00:00 4042 4044 \n",
|
||||
"2023-01-03 12:00:00 4050 4051 \n",
|
||||
"2023-01-03 14:00:00 4058 4059 \n",
|
||||
"2023-01-03 15:00:00 4062 4063 \n",
|
||||
"... ... ... \n",
|
||||
"2023-02-01 12:00:00 4106 4107 \n",
|
||||
"2023-02-01 14:00:00 4108 4109 \n",
|
||||
"2023-02-01 15:00:00 4084 4085 \n",
|
||||
"2023-02-01 22:00:00 4102 4103 \n",
|
||||
"2023-02-01 23:00:00 4098 4099 \n",
|
||||
"\n",
|
||||
"[117 rows x 13 columns]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"data.set_index(\"datetime\", inplace=True)\n",
|
||||
"data.index = pd.to_datetime(data.index)\n",
|
||||
"print(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.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
1.使用数据库示例.py调取数据,每日下午3点50分后更新当日数据。
|
||||
2.次月初更新上个月所有的tick数据和1m数据
|
||||
@@ -0,0 +1,610 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"file_path_888 = r\"E:\\data\\data_rs_merged\\中金所\\IM888\\IM888_rs_2023.csv\"\n",
|
||||
"df_888 = pd.read_csv(file_path_888, encoding='utf-8')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>main_contract</th>\n",
|
||||
" <th>symbol</th>\n",
|
||||
" <th>datetime</th>\n",
|
||||
" <th>lastprice</th>\n",
|
||||
" <th>volume</th>\n",
|
||||
" <th>bid_p</th>\n",
|
||||
" <th>ask_p</th>\n",
|
||||
" <th>bid_v</th>\n",
|
||||
" <th>ask_v</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>IM2301</td>\n",
|
||||
" <td>2023-01-03 09:30:00.200</td>\n",
|
||||
" <td>6280.0</td>\n",
|
||||
" <td>46</td>\n",
|
||||
" <td>6276.0</td>\n",
|
||||
" <td>6277.0</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" <td>3</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>IM2301</td>\n",
|
||||
" <td>2023-01-03 09:30:00.700</td>\n",
|
||||
" <td>6277.0</td>\n",
|
||||
" <td>61</td>\n",
|
||||
" <td>6278.0</td>\n",
|
||||
" <td>6278.8</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" <td>16</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>IM2301</td>\n",
|
||||
" <td>2023-01-03 09:30:01.200</td>\n",
|
||||
" <td>6277.2</td>\n",
|
||||
" <td>81</td>\n",
|
||||
" <td>6277.2</td>\n",
|
||||
" <td>6278.8</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" <td>5</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>IM2301</td>\n",
|
||||
" <td>2023-01-03 09:30:01.700</td>\n",
|
||||
" <td>6277.8</td>\n",
|
||||
" <td>90</td>\n",
|
||||
" <td>6277.8</td>\n",
|
||||
" <td>6278.6</td>\n",
|
||||
" <td>3</td>\n",
|
||||
" <td>4</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>IM2301</td>\n",
|
||||
" <td>2023-01-03 09:30:02.200</td>\n",
|
||||
" <td>6278.8</td>\n",
|
||||
" <td>112</td>\n",
|
||||
" <td>6278.8</td>\n",
|
||||
" <td>6280.0</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" <td>7</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" main_contract symbol datetime lastprice volume bid_p \\\n",
|
||||
"0 IM888 IM2301 2023-01-03 09:30:00.200 6280.0 46 6276.0 \n",
|
||||
"1 IM888 IM2301 2023-01-03 09:30:00.700 6277.0 61 6278.0 \n",
|
||||
"2 IM888 IM2301 2023-01-03 09:30:01.200 6277.2 81 6277.2 \n",
|
||||
"3 IM888 IM2301 2023-01-03 09:30:01.700 6277.8 90 6277.8 \n",
|
||||
"4 IM888 IM2301 2023-01-03 09:30:02.200 6278.8 112 6278.8 \n",
|
||||
"\n",
|
||||
" ask_p bid_v ask_v \n",
|
||||
"0 6277.0 1 3 \n",
|
||||
"1 6278.8 1 16 \n",
|
||||
"2 6278.8 1 5 \n",
|
||||
"3 6278.6 3 4 \n",
|
||||
"4 6280.0 1 7 "
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df_888.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 重命名列以便处理\n",
|
||||
"# df_888.rename(columns={'时间': 'datetime', '最新': 'price', '成交量': 'volume'}, inplace=True)\n",
|
||||
"df_888.rename(columns={'datetime': 'datetime', 'lastprice': 'price', 'volume': 'volume'}, inplace=True)\n",
|
||||
"\n",
|
||||
"# 确保datetime列是datetime类型\n",
|
||||
"df_888['datetime'] = pd.to_datetime(df_888['datetime'])\n",
|
||||
"\n",
|
||||
"# 设置datetime列为索引\n",
|
||||
"df_888.set_index('datetime', inplace=True)\n",
|
||||
"\n",
|
||||
"# 使用resample方法将数据重新采样为1分钟数据\n",
|
||||
"df_resampled = df_888.resample('1T').agg({\n",
|
||||
" 'price': ['first', 'max', 'min', 'last'],\n",
|
||||
" 'volume': 'sum'\n",
|
||||
"})"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead tr th {\n",
|
||||
" text-align: left;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead tr:last-of-type th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr>\n",
|
||||
" <th></th>\n",
|
||||
" <th colspan=\"4\" halign=\"left\">price</th>\n",
|
||||
" <th>volume</th>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th></th>\n",
|
||||
" <th>first</th>\n",
|
||||
" <th>max</th>\n",
|
||||
" <th>min</th>\n",
|
||||
" <th>last</th>\n",
|
||||
" <th>sum</th>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>datetime</th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:30:00</th>\n",
|
||||
" <td>6280.0</td>\n",
|
||||
" <td>6306.4</td>\n",
|
||||
" <td>6277.0</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>66894</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:31:00</th>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>6320.0</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>6318.8</td>\n",
|
||||
" <td>172512</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:32:00</th>\n",
|
||||
" <td>6319.8</td>\n",
|
||||
" <td>6328.0</td>\n",
|
||||
" <td>6314.8</td>\n",
|
||||
" <td>6314.8</td>\n",
|
||||
" <td>238716</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:33:00</th>\n",
|
||||
" <td>6313.0</td>\n",
|
||||
" <td>6325.0</td>\n",
|
||||
" <td>6310.4</td>\n",
|
||||
" <td>6312.4</td>\n",
|
||||
" <td>297675</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:34:00</th>\n",
|
||||
" <td>6311.0</td>\n",
|
||||
" <td>6323.2</td>\n",
|
||||
" <td>6311.0</td>\n",
|
||||
" <td>6319.4</td>\n",
|
||||
" <td>352184</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" price volume\n",
|
||||
" first max min last sum\n",
|
||||
"datetime \n",
|
||||
"2023-01-03 09:30:00 6280.0 6306.4 6277.0 6302.0 66894\n",
|
||||
"2023-01-03 09:31:00 6302.0 6320.0 6302.0 6318.8 172512\n",
|
||||
"2023-01-03 09:32:00 6319.8 6328.0 6314.8 6314.8 238716\n",
|
||||
"2023-01-03 09:33:00 6313.0 6325.0 6310.4 6312.4 297675\n",
|
||||
"2023-01-03 09:34:00 6311.0 6323.2 6311.0 6319.4 352184"
|
||||
]
|
||||
},
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df_resampled.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'IM888'"
|
||||
]
|
||||
},
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df_888['main_contract'][1]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# df_resampled['symbol'] = df_888['main_contract'][1]\n",
|
||||
"df_resampled.insert(0, 'symbol', df_888['main_contract'][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead tr th {\n",
|
||||
" text-align: left;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead tr:last-of-type th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr>\n",
|
||||
" <th></th>\n",
|
||||
" <th>symbol</th>\n",
|
||||
" <th colspan=\"4\" halign=\"left\">price</th>\n",
|
||||
" <th>volume</th>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th>first</th>\n",
|
||||
" <th>max</th>\n",
|
||||
" <th>min</th>\n",
|
||||
" <th>last</th>\n",
|
||||
" <th>sum</th>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>datetime</th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:30:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6280.0</td>\n",
|
||||
" <td>6306.4</td>\n",
|
||||
" <td>6277.0</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>66894</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:31:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>6320.0</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>6318.8</td>\n",
|
||||
" <td>172512</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:32:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6319.8</td>\n",
|
||||
" <td>6328.0</td>\n",
|
||||
" <td>6314.8</td>\n",
|
||||
" <td>6314.8</td>\n",
|
||||
" <td>238716</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:33:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6313.0</td>\n",
|
||||
" <td>6325.0</td>\n",
|
||||
" <td>6310.4</td>\n",
|
||||
" <td>6312.4</td>\n",
|
||||
" <td>297675</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:34:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6311.0</td>\n",
|
||||
" <td>6323.2</td>\n",
|
||||
" <td>6311.0</td>\n",
|
||||
" <td>6319.4</td>\n",
|
||||
" <td>352184</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" symbol price volume\n",
|
||||
" first max min last sum\n",
|
||||
"datetime \n",
|
||||
"2023-01-03 09:30:00 IM888 6280.0 6306.4 6277.0 6302.0 66894\n",
|
||||
"2023-01-03 09:31:00 IM888 6302.0 6320.0 6302.0 6318.8 172512\n",
|
||||
"2023-01-03 09:32:00 IM888 6319.8 6328.0 6314.8 6314.8 238716\n",
|
||||
"2023-01-03 09:33:00 IM888 6313.0 6325.0 6310.4 6312.4 297675\n",
|
||||
"2023-01-03 09:34:00 IM888 6311.0 6323.2 6311.0 6319.4 352184"
|
||||
]
|
||||
},
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df_resampled.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 重命名列名以符合K线数据的标准命名\n",
|
||||
"df_resampled.columns = ['open', 'high', 'low', 'close', 'volume', 'symbol']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>open</th>\n",
|
||||
" <th>high</th>\n",
|
||||
" <th>low</th>\n",
|
||||
" <th>close</th>\n",
|
||||
" <th>volume</th>\n",
|
||||
" <th>symbol</th>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>datetime</th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" <th></th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:30:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6280.0</td>\n",
|
||||
" <td>6306.4</td>\n",
|
||||
" <td>6277.0</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>66894</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:31:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>6320.0</td>\n",
|
||||
" <td>6302.0</td>\n",
|
||||
" <td>6318.8</td>\n",
|
||||
" <td>172512</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:32:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6319.8</td>\n",
|
||||
" <td>6328.0</td>\n",
|
||||
" <td>6314.8</td>\n",
|
||||
" <td>6314.8</td>\n",
|
||||
" <td>238716</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:33:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6313.0</td>\n",
|
||||
" <td>6325.0</td>\n",
|
||||
" <td>6310.4</td>\n",
|
||||
" <td>6312.4</td>\n",
|
||||
" <td>297675</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2023-01-03 09:34:00</th>\n",
|
||||
" <td>IM888</td>\n",
|
||||
" <td>6311.0</td>\n",
|
||||
" <td>6323.2</td>\n",
|
||||
" <td>6311.0</td>\n",
|
||||
" <td>6319.4</td>\n",
|
||||
" <td>352184</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" open high low close volume symbol\n",
|
||||
"datetime \n",
|
||||
"2023-01-03 09:30:00 IM888 6280.0 6306.4 6277.0 6302.0 66894\n",
|
||||
"2023-01-03 09:31:00 IM888 6302.0 6320.0 6302.0 6318.8 172512\n",
|
||||
"2023-01-03 09:32:00 IM888 6319.8 6328.0 6314.8 6314.8 238716\n",
|
||||
"2023-01-03 09:33:00 IM888 6313.0 6325.0 6310.4 6312.4 297675\n",
|
||||
"2023-01-03 09:34:00 IM888 6311.0 6323.2 6311.0 6319.4 352184"
|
||||
]
|
||||
},
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df_resampled.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"1分钟历史数据已保存至E:\\data\\data_rs_merged\\中金所\\IM888\\IM888_rs_2023_1min.csv\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# 删除存在NA值的行(如果有的时间段没有交易数据)\n",
|
||||
"df_resampled.dropna(inplace=True)\n",
|
||||
"# df_resampled['symbol'] = df_888['统一代码']\n",
|
||||
"# df_resampled.insert(loc=0, column='main_contract', value=df_888['main_contract'])\n",
|
||||
"# df_resampled['symbol'] = df_888['main_contract']\n",
|
||||
"# 将重新采样的数据写入新的CSV文件\n",
|
||||
"output_file = r\"E:\\data\\data_rs_merged\\中金所\\IM888\\IM888_rs_2023_1min.csv\"\n",
|
||||
"df_resampled.to_csv(output_file)\n",
|
||||
"\n",
|
||||
"print(f'1分钟历史数据已保存至{output_file}')"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
import pandas as pd
|
||||
|
||||
# 读取上传的CSV文件
|
||||
file_path = 'C:/Users/zhouj/Desktop/a次主力连续_20190103.csv'
|
||||
df = pd.read_csv(file_path, encoding='gbk')
|
||||
|
||||
# 重命名列以便处理
|
||||
df.rename(columns={'时间': 'datetime', '最新': 'price', '成交量': 'volume'}, inplace=True)
|
||||
|
||||
# 确保datetime列是datetime类型
|
||||
df['datetime'] = pd.to_datetime(df['datetime'])
|
||||
|
||||
# 设置datetime列为索引
|
||||
df.set_index('datetime', inplace=True)
|
||||
|
||||
# 使用resample方法将数据重新采样为1分钟数据
|
||||
df_resampled = df.resample('1T').agg({
|
||||
'price': ['first', 'max', 'min', 'last'],
|
||||
'volume': 'sum'
|
||||
})
|
||||
|
||||
# 重命名列名以符合K线数据的标准命名
|
||||
df_resampled.columns = ['open', 'high', 'low', 'close', 'volume']
|
||||
|
||||
# 删除存在NA值的行(如果有的时间段没有交易数据)
|
||||
df_resampled.dropna(inplace=True)
|
||||
|
||||
# 将重新采样的数据写入新的CSV文件
|
||||
output_file = 'C:/Users/zhouj/Desktop/tic_data_1min.csv'
|
||||
df_resampled.to_csv(output_file)
|
||||
|
||||
print(f'1分钟历史数据已保存至{output_file}')
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
from multiprocessing import Process
|
||||
from datetime import datetime
|
||||
|
||||
from vnpy.trader.database import BarOverview
|
||||
from vnpy.trader.datafeed import get_datafeed
|
||||
from vnpy.trader.database import get_database
|
||||
from vnpy.trader.object import BarData, HistoryRequest
|
||||
from vnpy.trader.constant import Exchange, Interval
|
||||
|
||||
import re
|
||||
|
||||
# 交易所映射关系
|
||||
EXCHANGE_XT2VT = {
|
||||
"SH": Exchange.SSE,
|
||||
"SZ": Exchange.SZSE,
|
||||
"BJ": Exchange.BSE,
|
||||
"SF": Exchange.SHFE,
|
||||
"IF": Exchange.CFFEX,
|
||||
"INE": Exchange.INE,
|
||||
"DF": Exchange.DCE,
|
||||
"ZF": Exchange.CZCE,
|
||||
"GF": Exchange.GFEX
|
||||
}
|
||||
|
||||
# 开始查询时间
|
||||
START_TIME = datetime(2018, 1, 1)
|
||||
|
||||
|
||||
def update_history_data() -> None:
|
||||
"""更新历史合约信息"""
|
||||
# 在子进程中加载xtquant
|
||||
from xtquant.xtdata import download_history_data
|
||||
|
||||
# 初始化数据服务
|
||||
datafeed = get_datafeed()
|
||||
datafeed.init()
|
||||
|
||||
# 下载历史合约信息
|
||||
download_history_data("", "historycontract")
|
||||
|
||||
print("xtquant历史合约信息下载完成")
|
||||
|
||||
|
||||
def update_bar_data(
|
||||
sector_name: str,
|
||||
interval: Interval = Interval.MINUTE
|
||||
) -> None:
|
||||
"""更新K线数据"""
|
||||
# 在子进程中加载xtquant
|
||||
from xtquant.xtdata import (
|
||||
get_stock_list_in_sector,
|
||||
get_instrument_detail
|
||||
)
|
||||
|
||||
# 初始化数据服务
|
||||
datafeed = get_datafeed()
|
||||
datafeed.init()
|
||||
|
||||
# 连接数据库
|
||||
database = get_database()
|
||||
|
||||
# 获取当前时间戳
|
||||
now: datetime = datetime.now()
|
||||
|
||||
# 获取本地已有数据汇总
|
||||
data: list[BarOverview] = database.get_bar_overview()
|
||||
|
||||
overviews: dict[str, BarOverview] = {}
|
||||
for o in data:
|
||||
vt_symbol: str = f"{o.symbol}.{o.exchange.value}"
|
||||
overviews[vt_symbol] = o
|
||||
|
||||
# 查询交易所历史合约代码
|
||||
xt_symbols: list[str] = get_stock_list_in_sector(sector_name)
|
||||
|
||||
# 遍历列表查询合约信息
|
||||
for xt_symbol in xt_symbols:
|
||||
# 查询合约信息
|
||||
data: dict = get_instrument_detail(xt_symbol, True)
|
||||
|
||||
# 获取合约到期时间
|
||||
expiry: datetime = None
|
||||
if data["ExpireDate"]:
|
||||
expiry = datetime.strptime(data["ExpireDate"], "%Y%m%d")
|
||||
|
||||
# 拆分迅投研代码
|
||||
symbol, xt_exchange = xt_symbol.split(".")
|
||||
|
||||
symbol_main = re.split(r'(\d+)', symbol)[0]
|
||||
|
||||
# 生成本地代码
|
||||
exchange: Exchange = EXCHANGE_XT2VT[xt_exchange]
|
||||
vt_symbol: str = f"{symbol_main}+'JQ00'.{exchange.value}" or f"{symbol_main}+'00'.{exchange.value}"
|
||||
|
||||
# 查询数据汇总
|
||||
overview: BarOverview = overviews.get(vt_symbol, None)
|
||||
|
||||
# 如果已经到期,则跳过
|
||||
if overview and expiry and expiry < now:
|
||||
continue
|
||||
|
||||
# 实现增量查询
|
||||
start: datetime = START_TIME
|
||||
if overview:
|
||||
start = overview.end
|
||||
|
||||
# 执行数据查询和更新入库
|
||||
req: HistoryRequest = HistoryRequest(
|
||||
symbol=symbol,
|
||||
exchange=exchange,
|
||||
start=start,
|
||||
end=now,
|
||||
interval=interval
|
||||
)
|
||||
|
||||
bars: list[BarData] = datafeed.query_bar_history(req)
|
||||
|
||||
if bars:
|
||||
database.save_bar_data(bars)
|
||||
|
||||
start_dt: datetime = bars[0].datetime
|
||||
end_dt: datetime = bars[-1].datetime
|
||||
msg: str = f"{vt_symbol}数据更新成功,{start_dt} - {end_dt}"
|
||||
print(msg)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 使用子进程更新历史合约信息
|
||||
process: Process = Process(target=update_history_data)
|
||||
process.start()
|
||||
process.join() # 等待子进程执行完成
|
||||
|
||||
# 更新历史数据
|
||||
update_bar_data("上期所")
|
||||
update_bar_data("过期上期所")
|
||||
@@ -0,0 +1,184 @@
|
||||
from multiprocessing import Process
|
||||
from datetime import datetime
|
||||
|
||||
from vnpy.trader.database import BarOverview
|
||||
from vnpy.trader.datafeed import get_datafeed
|
||||
from vnpy.trader.object import ContractData, BarData, HistoryRequest
|
||||
from vnpy.trader.constant import Exchange, Product, OptionType, Interval
|
||||
from vnpy.trader.setting import SETTINGS
|
||||
|
||||
from elite_database import EliteDatabase
|
||||
|
||||
|
||||
# 配置迅投研数据服务
|
||||
SETTINGS["datafeed.name"] = "xt"
|
||||
SETTINGS["datafeed.username"] = "token"
|
||||
SETTINGS["datafeed.password"] = ""
|
||||
|
||||
|
||||
# 交易所映射关系
|
||||
EXCHANGE_XT2VT = {
|
||||
"SH": Exchange.SSE,
|
||||
"SZ": Exchange.SZSE,
|
||||
"BJ": Exchange.BSE,
|
||||
"SF": Exchange.SHFE,
|
||||
"IF": Exchange.CFFEX,
|
||||
"INE": Exchange.INE,
|
||||
"DF": Exchange.DCE,
|
||||
"ZF": Exchange.CZCE,
|
||||
"GF": Exchange.GFEX
|
||||
}
|
||||
|
||||
|
||||
def update_history_data() -> None:
|
||||
"""更新历史合约信息"""
|
||||
# 在子进程中加载xtquant
|
||||
from xtquant.xtdata import download_history_data
|
||||
|
||||
# 初始化数据服务
|
||||
datafeed = get_datafeed()
|
||||
datafeed.init()
|
||||
|
||||
# 下载历史合约信息
|
||||
download_history_data("", "historycontract")
|
||||
|
||||
print("xtquant历史合约信息下载完成")
|
||||
|
||||
|
||||
def update_contract_data(sector_name: str) -> None:
|
||||
"""更新合约数据"""
|
||||
# 在子进程中加载xtquant
|
||||
from xtquant.xtdata import (
|
||||
get_stock_list_in_sector,
|
||||
get_instrument_detail
|
||||
)
|
||||
|
||||
# 初始化数据服务
|
||||
datafeed = get_datafeed()
|
||||
datafeed.init()
|
||||
|
||||
# 查询中金所历史合约代码
|
||||
vt_symbols: list[str] = get_stock_list_in_sector(sector_name)
|
||||
|
||||
# 遍历列表查询合约信息
|
||||
contracts: list[ContractData] = []
|
||||
|
||||
for xt_symbol in vt_symbols:
|
||||
# 拆分XT代码
|
||||
symbol, xt_exchange = xt_symbol.split(".")
|
||||
|
||||
# 筛选期权合约合约
|
||||
if "-" in symbol:
|
||||
data: dict = get_instrument_detail(xt_symbol, True)
|
||||
|
||||
type_str = data["InstrumentID"].split("-")[1]
|
||||
if type_str == "C":
|
||||
option_type = OptionType.CALL
|
||||
elif type_str == "P":
|
||||
option_type = OptionType.PUT
|
||||
|
||||
option_underlying: str = data["InstrumentID"].split("-")[0]
|
||||
|
||||
contract: ContractData = ContractData(
|
||||
symbol=data["InstrumentID"],
|
||||
exchange=EXCHANGE_XT2VT[xt_exchange.replace("O", "")],
|
||||
name=data["InstrumentName"],
|
||||
product=Product.OPTION,
|
||||
size=data["VolumeMultiple"],
|
||||
pricetick=data["PriceTick"],
|
||||
min_volume=data["MinLimitOrderVolume"],
|
||||
option_strike=data["ExtendInfo"]["OptExercisePrice"],
|
||||
option_listed=datetime.strptime(data["OpenDate"], "%Y%m%d"),
|
||||
option_expiry=datetime.strptime(data["ExpireDate"], "%Y%m%d"),
|
||||
option_underlying=option_underlying,
|
||||
option_portfolio=data["ProductID"],
|
||||
option_index=str(data["ExtendInfo"]["OptExercisePrice"]),
|
||||
option_type=option_type,
|
||||
gateway_name="XT"
|
||||
)
|
||||
contracts.append(contract)
|
||||
|
||||
# 保存合约信息到数据库
|
||||
database: EliteDatabase = EliteDatabase()
|
||||
database.save_contract_data(contracts)
|
||||
|
||||
print("合约信息更新成功", len(contracts))
|
||||
|
||||
|
||||
def update_bar_data() -> None:
|
||||
"""更新K线数据"""
|
||||
# 初始化数据服务
|
||||
datafeed = get_datafeed()
|
||||
datafeed.init()
|
||||
|
||||
# 获取当前时间戳
|
||||
now: datetime = datetime.now()
|
||||
|
||||
# 获取合约信息
|
||||
database: EliteDatabase = EliteDatabase()
|
||||
contracts: list[ContractData] = database.load_contract_data()
|
||||
|
||||
# 获取数据汇总
|
||||
data: list[BarOverview] = database.get_bar_overview()
|
||||
|
||||
overviews: dict[str, BarOverview] = {}
|
||||
for o in data:
|
||||
# 只保留分钟线数据
|
||||
if o.interval != Interval.MINUTE:
|
||||
continue
|
||||
|
||||
vt_symbol: str = f"{o.symbol}.{o.exchange.value}"
|
||||
overviews[vt_symbol] = o
|
||||
|
||||
# 遍历所有合约信息
|
||||
for contract in contracts:
|
||||
# 如果没有到期时间,则跳过
|
||||
if not contract.option_expiry:
|
||||
continue
|
||||
|
||||
# 查询数据汇总
|
||||
overview: BarOverview = overviews.get(contract.vt_symbol, None)
|
||||
|
||||
# 如果已经到期,则跳过
|
||||
if overview and contract.option_expiry < now:
|
||||
continue
|
||||
|
||||
# 初始化查询开始的时间
|
||||
start: datetime = datetime(2018, 1, 1)
|
||||
|
||||
# 实现增量查询
|
||||
if overview:
|
||||
start = overview.end
|
||||
|
||||
# 执行数据查询和更新入库
|
||||
req: HistoryRequest = HistoryRequest(
|
||||
symbol=contract.symbol,
|
||||
exchange=contract.exchange,
|
||||
start=start,
|
||||
end=datetime.now(),
|
||||
interval=Interval.MINUTE
|
||||
)
|
||||
|
||||
bars: list[BarData] = datafeed.query_bar_history(req)
|
||||
|
||||
if bars:
|
||||
database.save_bar_data(bars)
|
||||
|
||||
start_dt: datetime = bars[0].datetime
|
||||
end_dt: datetime = bars[-1].datetime
|
||||
msg: str = f"{contract.vt_symbol}数据更新成功,{start_dt} - {end_dt}"
|
||||
print(msg)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 使用子进程更新历史合约信息
|
||||
process: Process = Process(target=update_history_data)
|
||||
process.start()
|
||||
process.join() # 等待子进程执行完成
|
||||
|
||||
# 更新合约信息
|
||||
update_contract_data("中金所")
|
||||
update_contract_data("过期中金所")
|
||||
|
||||
# 更新历史数据
|
||||
# update_bar_data()
|
||||
@@ -0,0 +1,594 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "2d85dda4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import pandas as pd\n",
|
||||
"from merged_tickdata_20240510 import merged_old_tickdata, merged_new_tickdata, merged_new_unprocessed_tickdata,merged_old_unprocessed_tickdata, reinstatement_tickdata"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"id": "fe51b707",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 相关文件保存路径,需要修改:csv_directory为需要处理的文件原始路径;out_up_path为csv_directory进行了按年份合并的文件保存路径;\n",
|
||||
"# out_up_path为按年份合并后处理了重复数据、清除了交易时间外数据和统一表头了的数据;out_rs_path为out_path文件进行了复权处理后的数据\n",
|
||||
"csv_directory = str(\"D:/tickdata_888/sc_888/tmp\") \n",
|
||||
"out_up_path = str('D:/data_transfer/data_up_merged/上期所')\n",
|
||||
"out_path = str('D:/data_transfer/data_merged/上期所')\n",
|
||||
"out_rs_path = str('D:/data_transfer/data_rs_merged/上期所')\n",
|
||||
"# 需要处理的年份数据,csv数据中有含有\"_year\"的文件名\n",
|
||||
"sp_old_chars = ['_2019', '_2020', '_2021']\n",
|
||||
"sp_new_chars = ['_2022', '_2023']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"id": "3356d8ff",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"csv_files: ['JR主力连续(缺2023)\\\\JR主力连续_20190102.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190103.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190104.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190107.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190108.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190109.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190110.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190111.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190114.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190115.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190116.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190117.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190118.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190121.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190122.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190123.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190124.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190125.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190128.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190129.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190130.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190131.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190201.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190211.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190212.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190213.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190214.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190215.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190218.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190219.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190220.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190221.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190222.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190225.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190226.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190227.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190228.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190301.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190304.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190305.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190306.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190307.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190308.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190311.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190312.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190313.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190314.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190315.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190318.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190319.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190320.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190321.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190322.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190325.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190326.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190327.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190328.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190329.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190401.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190402.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190403.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190404.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190408.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190409.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190410.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190411.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190412.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190415.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190416.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190417.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190418.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190419.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190422.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190423.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190424.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190425.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190426.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190429.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190430.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20190506.csv', 'JR主力连续(Line truncated
|
||||
"code_value characters: JR888\n",
|
||||
"按年份未处理的JR888_up_2019.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"JR888_2019数据生成成功!\n",
|
||||
"按年份处理的JR888_2019.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的JR888_rs_2019.CSV文件合并成功!\n",
|
||||
"csv_files: ['JR主力连续(缺2023)\\\\JR主力连续_20200211.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200212.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200214.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200217.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200218.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200219.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200220.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200221.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200224.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200225.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200226.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200227.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200228.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200302.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200303.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200304.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200305.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200306.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200309.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200310.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200311.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200312.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200313.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200316.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200317.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200318.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200319.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200320.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200323.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200324.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200325.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200326.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200327.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200330.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200331.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200401.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200402.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200403.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200407.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200408.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200409.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200410.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200413.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200414.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200415.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200416.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200417.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200420.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200421.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200422.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200423.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200424.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200427.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200428.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200429.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200430.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200506.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200507.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200508.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200511.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200512.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200513.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200514.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200515.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200518.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200519.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200520.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200521.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200522.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200525.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200526.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200527.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200528.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200529.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200601.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200602.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200603.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200604.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200605.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20200608.csv', 'JR主力连续(Line truncated
|
||||
"code_value characters: JR888\n",
|
||||
"按年份未处理的JR888_up_2020.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"JR888_2020数据生成成功!\n",
|
||||
"按年份处理的JR888_2020.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的JR888_rs_2020.CSV文件合并成功!\n",
|
||||
"csv_files: ['JR主力连续(缺2023)\\\\JR主力连续_20210104.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210105.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210106.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210107.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210108.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210111.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210112.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210113.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210114.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210115.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210118.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210119.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210120.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210121.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210122.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210125.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210126.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210127.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210128.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210129.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210201.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210202.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210203.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210204.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210205.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210208.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210209.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210210.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210218.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210222.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210223.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210224.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210225.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210226.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210301.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210303.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210304.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210305.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210308.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210309.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210310.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210311.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210315.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210317.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210318.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210319.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210322.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210324.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210325.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210330.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210331.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210406.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210408.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210409.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210413.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210414.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210415.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210416.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210423.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210428.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210429.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210430.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210506.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210510.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210511.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210512.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210513.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210518.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210519.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210520.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210521.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210524.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210525.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210526.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210601.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210602.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210603.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210607.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210616.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20210623.csv', 'JR主力连续(Line truncated
|
||||
"code_value characters: JR888\n",
|
||||
"按年份未处理的JR888_up_2021.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"JR888_2021数据生成成功!\n",
|
||||
"按年份处理的JR888_2021.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的JR888_rs_2021.CSV文件合并成功!\n",
|
||||
"csv_files: ['JR主力连续(缺2023)\\\\JR主力连续_20220104.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220310.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220311.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220314.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220315.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220316.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220317.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220318.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220321.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220322.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220323.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220324.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220325.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220328.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220329.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220330.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220331.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220401.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220406.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220407.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220411.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220418.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220419.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220422.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220425.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220427.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220428.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220506.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220509.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220510.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220520.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220602.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220608.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220610.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220614.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220623.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220817.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220921.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20220926.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20221011.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20221212.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20221214.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20221216.csv', 'JR主力连续(缺2023)\\\\JR主力连续_20221230.csv']\n",
|
||||
"code_value characters: JR888\n",
|
||||
"按年份未处理的JR888_up_2022.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"JR888_2022数据生成成功!\n",
|
||||
"按年份处理的JR888_2022.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的JR888_rs_2022.CSV文件合并成功!\n",
|
||||
"csv_files: ['LR主力连续(缺2021)\\\\LR主力连续_20190102.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190103.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190104.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190107.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190108.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190109.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190110.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190111.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190114.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190115.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190116.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190117.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190118.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190121.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190122.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190123.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190124.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190125.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190128.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190129.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190130.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190131.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190201.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190211.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190212.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190213.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190214.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190215.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190218.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190219.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190220.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190221.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190222.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190225.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190226.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190227.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190228.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190301.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190304.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190305.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190306.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190307.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190308.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190311.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190312.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190313.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190314.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190315.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190318.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190319.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190321.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190322.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190325.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190326.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190327.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190328.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190329.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190401.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190402.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190403.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190404.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190408.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190409.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190410.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190412.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190415.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190416.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190417.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190418.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190419.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190422.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190423.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190424.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190425.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190426.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190429.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190430.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190507.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190509.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20190510.csv', 'LR主力连续(Line truncated
|
||||
"code_value characters: LR888\n",
|
||||
"按年份未处理的LR888_up_2019.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"LR888_2019数据生成成功!\n",
|
||||
"按年份处理的LR888_2019.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的LR888_rs_2019.CSV文件合并成功!\n",
|
||||
"csv_files: ['LR主力连续(缺2021)\\\\LR主力连续_20200103.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200224.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200225.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200226.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200227.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200305.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200311.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200312.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200313.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200316.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200319.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200320.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200323.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200326.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200327.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200330.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200331.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200401.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200402.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200403.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200407.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200408.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200409.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200410.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200413.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200414.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200415.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200416.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200417.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200420.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200421.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200422.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200423.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200424.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200427.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200428.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200429.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200430.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200506.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200507.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200508.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200511.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200512.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200513.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200514.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200519.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200520.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200521.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200522.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200525.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200526.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200527.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200529.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200601.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200602.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200603.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200608.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200611.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200615.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200616.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200617.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200618.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200619.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200622.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200624.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200629.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200716.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200717.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200720.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200721.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200722.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200723.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200724.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200727.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200728.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200729.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200730.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200731.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200803.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20200805.csv', 'LR主力连续(Line truncated
|
||||
"code_value characters: LR888\n",
|
||||
"按年份未处理的LR888_up_2020.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"LR888_2020数据生成成功!\n",
|
||||
"按年份处理的LR888_2020.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的LR888_rs_2020.CSV文件合并成功!\n",
|
||||
"csv_files: ['LR主力连续(缺2021)\\\\LR主力连续_20220316.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220317.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220318.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220321.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220322.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220323.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220324.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220328.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220329.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220330.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220505.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220506.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220509.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220510.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220511.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220512.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220516.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220519.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220527.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220608.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220613.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220616.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220620.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220622.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220624.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220627.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220629.csv', 'LR主力连续(缺2021)\\\\LR主力连续_20220630.csv']\n",
|
||||
"code_value characters: LR888\n",
|
||||
"按年份未处理的LR888_up_2022.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"LR888_2022数据生成成功!\n",
|
||||
"按年份处理的LR888_2022.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的LR888_rs_2022.CSV文件合并成功!\n",
|
||||
"csv_files: ['PM主力连续(缺2023)\\\\PM主力连续_20190109.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190114.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190115.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190121.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190319.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190410.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190415.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190423.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190424.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190429.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190509.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190510.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190513.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190516.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190624.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190701.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190709.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190806.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190826.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20190920.csv']\n",
|
||||
"code_value characters: PM888\n",
|
||||
"按年份未处理的PM888_up_2019.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"PM888_2019数据生成成功!\n",
|
||||
"按年份处理的PM888_2019.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的PM888_rs_2019.CSV文件合并成功!\n",
|
||||
"csv_files: ['PM主力连续(缺2023)\\\\PM主力连续_20200115.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200116.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200122.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200203.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200204.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200206.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200207.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200210.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200211.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200212.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200213.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200217.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200218.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200219.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200221.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200224.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200227.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200228.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200302.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200309.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200317.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200319.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200323.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200324.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200325.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200326.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200327.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200330.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200331.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200401.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200402.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200403.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200409.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200413.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200415.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200416.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200417.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200420.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200421.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200422.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200423.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200424.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200427.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200430.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200506.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200507.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200508.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200511.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200512.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200514.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200515.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200522.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200525.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200526.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200528.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200601.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200602.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200604.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200605.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200609.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200610.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200611.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200615.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200616.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200617.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200618.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200622.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200623.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200624.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200629.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200630.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200701.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200714.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200716.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200717.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200720.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200721.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200722.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200727.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20200728.csv', 'PM主力连续(Line truncated
|
||||
"code_value characters: PM888\n",
|
||||
"按年份未处理的PM888_up_2020.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"PM888_2020数据生成成功!\n",
|
||||
"按年份处理的PM888_2020.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的PM888_rs_2020.CSV文件合并成功!\n",
|
||||
"csv_files: ['PM主力连续(缺2023)\\\\PM主力连续_20210104.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210106.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210107.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210108.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210111.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210112.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210113.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210114.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210115.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210118.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210119.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210121.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210122.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210126.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210127.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210202.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210218.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210219.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210223.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210225.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210226.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210301.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210302.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210406.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210412.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210413.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210414.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210421.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210423.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210426.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210430.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210512.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210517.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210525.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210526.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210528.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210601.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210603.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210604.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210607.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210608.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210609.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210615.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210616.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210617.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210622.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210623.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210625.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210628.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210629.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210630.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210701.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210706.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210713.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210714.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210729.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210823.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210824.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210902.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210913.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20210914.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20211020.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20211021.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20211025.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20211223.csv']\n",
|
||||
"code_value characters: PM888\n",
|
||||
"按年份未处理的PM888_up_2021.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"PM888_2021数据生成成功!\n",
|
||||
"按年份处理的PM888_2021.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的PM888_rs_2021.CSV文件合并成功!\n",
|
||||
"csv_files: ['PM主力连续(缺2023)\\\\PM主力连续_20220427.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220428.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220429.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220505.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220506.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220509.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220510.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220511.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220512.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220513.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220517.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220525.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220526.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220527.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220613.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220617.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220621.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220623.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220627.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220630.csv', 'PM主力连续(缺2023)\\\\PM主力连续_20220711.csv']\n",
|
||||
"code_value characters: PM888\n",
|
||||
"按年份未处理的PM888_up_2022.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"PM888_2022数据生成成功!\n",
|
||||
"按年份处理的PM888_2022.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的PM888_rs_2022.CSV文件合并成功!\n",
|
||||
"csv_files: ['RI主力连续(缺2023)\\\\RI主力连续_20190125.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190227.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190228.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190301.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190307.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190312.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190313.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190314.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190423.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190521.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190522.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190523.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190524.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190527.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190528.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190529.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190530.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190531.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190603.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190604.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190605.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190606.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190610.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190611.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190612.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190613.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190614.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190617.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190618.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190619.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190620.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190621.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190624.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190625.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190626.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190627.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190628.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190701.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190702.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190703.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190704.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190705.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190708.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190709.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190710.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190711.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190712.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190715.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190716.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190717.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190718.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190719.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190722.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190723.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190724.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190725.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190726.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190729.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190730.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190731.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190801.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190802.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190805.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190807.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190808.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190809.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190812.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190813.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190814.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190815.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190816.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190819.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190820.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190821.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190822.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190826.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190827.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190828.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190829.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20190830.csv', 'RI主力连续(Line truncated
|
||||
"code_value characters: RI888\n",
|
||||
"按年份未处理的RI888_up_2019.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"RI888_2019数据生成成功!\n",
|
||||
"按年份处理的RI888_2019.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的RI888_rs_2019.CSV文件合并成功!\n",
|
||||
"csv_files: ['RI主力连续(缺2023)\\\\RI主力连续_20200217.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200218.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200219.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200220.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200221.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200224.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200225.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200226.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200227.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200228.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200302.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200303.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200304.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200305.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200306.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200309.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200310.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200311.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200312.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200313.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200316.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200317.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200318.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200319.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200320.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200323.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200324.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200325.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200326.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200327.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200330.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200331.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200401.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200402.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200403.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200407.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200408.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200409.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200410.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200413.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200414.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200415.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200416.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200417.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200420.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200421.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200422.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200423.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200424.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200427.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200428.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200429.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200506.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200511.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200521.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200522.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200601.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200602.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200603.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200604.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200605.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200608.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200609.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200610.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200612.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200615.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200617.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200618.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200619.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200622.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200624.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200629.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200630.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200702.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200708.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200709.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200710.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200713.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200714.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20200715.csv', 'RI主力连续(Line truncated
|
||||
"code_value characters: RI888\n",
|
||||
"按年份未处理的RI888_up_2020.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"RI888_2020数据生成成功!\n",
|
||||
"按年份处理的RI888_2020.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的RI888_rs_2020.CSV文件合并成功!\n",
|
||||
"csv_files: ['RI主力连续(缺2023)\\\\RI主力连续_20210108.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210331.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210429.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210806.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210824.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210825.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210902.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210903.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210907.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210908.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210909.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210910.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210913.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210914.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210915.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210922.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210923.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210924.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210927.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20210928.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211012.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211013.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211014.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211015.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211018.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211022.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211103.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211104.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211105.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211108.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211109.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211110.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211112.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211115.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211116.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211117.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211125.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211130.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211202.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211210.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20211231.csv']\n",
|
||||
"code_value characters: RI888\n",
|
||||
"按年份未处理的RI888_up_2021.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"RI888_2021数据生成成功!\n",
|
||||
"按年份处理的RI888_2021.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的RI888_rs_2021.CSV文件合并成功!\n",
|
||||
"csv_files: ['RI主力连续(缺2023)\\\\RI主力连续_20220112.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220113.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220114.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220118.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220120.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220121.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220124.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220125.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220126.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220127.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220208.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220210.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220308.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220314.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220315.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220316.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220317.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220318.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220321.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220322.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220324.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220330.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220331.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220401.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220406.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220407.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220408.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220411.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220412.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220413.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220414.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220415.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220418.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220421.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220425.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220509.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220629.csv', 'RI主力连续(缺2023)\\\\RI主力连续_20220630.csv']\n",
|
||||
"code_value characters: RI888\n",
|
||||
"按年份未处理的RI888_up_2022.CSV文件合并成功!\n",
|
||||
"按照无夜盘筛选商品期货品种\n",
|
||||
"RI888_2022数据生成成功!\n",
|
||||
"按年份处理的RI888_2022.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的RI888_rs_2022.CSV文件合并成功!\n",
|
||||
"csv_files: ['ZC主力连续(缺2023)\\\\ZC主力连续_20190102.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190103.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190104.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190107.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190108.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190109.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190110.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190111.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190114.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190115.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190116.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190117.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190118.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190121.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190122.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190123.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190124.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190125.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190128.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190129.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190130.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190131.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190201.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190211.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190212.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190213.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190214.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190215.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190218.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190219.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190220.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190221.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190222.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190225.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190226.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190227.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190228.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190301.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190304.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190305.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190306.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190307.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190308.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190311.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190312.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190313.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190314.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190315.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190318.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190319.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190320.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190321.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190322.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190325.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190326.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190327.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190328.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190329.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190401.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190402.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190403.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190404.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190408.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190409.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190410.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190411.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190412.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190415.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190416.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190417.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190418.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190419.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190422.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190423.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190424.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190425.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190426.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190429.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190430.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20190506.csv', 'ZC主力连续(Line truncated
|
||||
"code_value characters: ZC888\n",
|
||||
"按年份未处理的ZC888_up_2019.CSV文件合并成功!\n",
|
||||
"按照夜盘截止交易时间为23:00筛选商品期货品种\n",
|
||||
"ZC888_2019数据生成成功!\n",
|
||||
"按年份处理的ZC888_2019.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的ZC888_rs_2019.CSV文件合并成功!\n",
|
||||
"csv_files: ['ZC主力连续(缺2023)\\\\ZC主力连续_20200102.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200103.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200106.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200107.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200108.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200109.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200110.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200113.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200114.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200115.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200116.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200117.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200120.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200121.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200122.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200123.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200203.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200204.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200205.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200206.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200207.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200210.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200211.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200212.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200213.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200214.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200217.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200218.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200219.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200220.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200221.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200224.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200225.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200226.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200227.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200228.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200302.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200303.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200304.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200305.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200306.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200309.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200310.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200311.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200312.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200313.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200316.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200317.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200318.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200319.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200320.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200323.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200324.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200325.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200326.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200327.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200330.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200331.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200401.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200402.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200403.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200407.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200408.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200409.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200410.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200413.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200414.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200415.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200416.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200417.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200420.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200421.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200422.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200423.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200424.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200427.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200428.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200429.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200430.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20200506.csv', 'ZC主力连续(Line truncated
|
||||
"code_value characters: ZC888\n",
|
||||
"按年份未处理的ZC888_up_2020.CSV文件合并成功!\n",
|
||||
"按照夜盘截止交易时间为23:00筛选商品期货品种\n",
|
||||
"ZC888_2020数据生成成功!\n",
|
||||
"按年份处理的ZC888_2020.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的ZC888_rs_2020.CSV文件合并成功!\n",
|
||||
"csv_files: ['ZC主力连续(缺2023)\\\\ZC主力连续_20210104.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210105.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210106.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210107.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210108.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210111.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210112.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210113.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210114.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210115.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210118.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210119.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210120.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210121.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210122.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210125.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210126.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210127.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210128.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210129.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210201.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210202.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210203.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210204.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210205.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210208.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210209.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210210.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210218.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210219.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210222.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210223.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210224.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210225.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210226.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210301.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210302.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210303.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210304.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210305.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210308.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210309.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210310.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210311.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210312.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210315.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210316.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210317.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210318.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210319.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210322.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210323.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210324.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210325.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210326.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210329.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210330.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210331.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210401.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210402.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210406.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210407.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210408.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210409.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210412.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210413.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210414.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210415.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210416.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210419.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210420.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210421.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210422.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210423.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210426.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210427.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210428.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210429.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210430.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20210506.csv', 'ZC主力连续(Line truncated
|
||||
"code_value characters: ZC888\n",
|
||||
"按年份未处理的ZC888_up_2021.CSV文件合并成功!\n",
|
||||
"按照夜盘截止交易时间为23:00筛选商品期货品种\n",
|
||||
"ZC888_2021数据生成成功!\n",
|
||||
"按年份处理的ZC888_2021.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的ZC888_rs_2021.CSV文件合并成功!\n",
|
||||
"csv_files: ['ZC主力连续(缺2023)\\\\ZC主力连续_20220104.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220105.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220106.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220107.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220110.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220111.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220112.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220113.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220114.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220117.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220118.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220119.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220120.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220121.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220124.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220125.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220126.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220127.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220128.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220207.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220208.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220209.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220210.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220211.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220214.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220215.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220216.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220217.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220218.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220221.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220222.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220223.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220224.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220225.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220228.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220301.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220302.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220303.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220304.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220307.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220308.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220309.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220310.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220311.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220314.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220315.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220316.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220317.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220318.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220321.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220322.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220323.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220324.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220325.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220328.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220329.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220330.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220331.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220401.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220406.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220407.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220408.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220411.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220412.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220413.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220414.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220415.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220418.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220419.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220420.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220421.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220422.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220425.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220426.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220427.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220428.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220429.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220505.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220506.csv', 'ZC主力连续(缺2023)\\\\ZC主力连续_20220509.csv', 'ZC主力连续(Line truncated
|
||||
"code_value characters: ZC888\n",
|
||||
"按年份未处理的ZC888_up_2022.CSV文件合并成功!\n",
|
||||
"按照夜盘截止交易时间为23:00筛选商品期货品种\n",
|
||||
"ZC888_2022数据生成成功!\n",
|
||||
"按年份处理的ZC888_2022.CSV文件合并成功!\n",
|
||||
"按年份处理且进行等差复权的ZC888_rs_2022.CSV文件合并成功!\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"os.chdir(csv_directory) \n",
|
||||
"for root, dirs, files in os.walk('.'):\n",
|
||||
" if len(dirs) > 0:\n",
|
||||
" for dir in dirs:\n",
|
||||
" # 获取二级子文件夹中的所有 CSV 文件\n",
|
||||
" all_csv_files = [os.path.join(dir, file) for file in os.listdir(dir) if file.endswith('.csv')] \n",
|
||||
" \n",
|
||||
" for sp_old_char in sp_old_chars:\n",
|
||||
" csv_old_files = [sp_file for sp_file in all_csv_files if sp_old_char in sp_file]\n",
|
||||
" if len(csv_old_files) > 0:\n",
|
||||
" # 生成按年份未处理的CSV文件\n",
|
||||
" old_up_df, alpha_chars, old_code_value = merged_old_unprocessed_tickdata(csv_old_files, sp_old_char)\n",
|
||||
" folder_up_path = str('%s/%s'%(out_up_path, old_code_value))\n",
|
||||
" if not os.path.exists(folder_up_path):\n",
|
||||
" os.makedirs(folder_up_path) \n",
|
||||
" old_up_df.to_csv('%s/%s_up%s.csv'%(folder_up_path,old_code_value,sp_old_char), index=False)\n",
|
||||
" print(\"按年份未处理的%s_up%s.CSV文件合并成功!\"%(old_code_value,sp_old_char))\n",
|
||||
"\n",
|
||||
" # 生成按年份处理后的CSV文件\n",
|
||||
" old_df = merged_old_tickdata(old_up_df, sp_old_char, alpha_chars, old_code_value)\n",
|
||||
" del old_up_df\n",
|
||||
" folder_path = str('%s/%s'%(out_path, old_code_value))\n",
|
||||
" if not os.path.exists(folder_path):\n",
|
||||
" os.makedirs(folder_path) \n",
|
||||
" old_df.to_csv('%s/%s%s.csv'%(folder_path,old_code_value,sp_old_char), index=False)\n",
|
||||
" print(\"按年份处理的%s%s.CSV文件合并成功!\"%(old_code_value,sp_old_char))\n",
|
||||
"\n",
|
||||
" # 生成按年份处理后的CSV文件按照等差复权处理\n",
|
||||
" old_rs_df = reinstatement_tickdata(old_df)\n",
|
||||
" del old_df\n",
|
||||
" folder_rs_path = str('%s/%s'%(out_rs_path, old_code_value))\n",
|
||||
" if not os.path.exists(folder_rs_path):\n",
|
||||
" os.makedirs(folder_rs_path) \n",
|
||||
" old_rs_df.to_csv('%s/%s_rs%s.csv'%(folder_rs_path,old_code_value,sp_old_char), index=False)\n",
|
||||
" print(\"按年份处理且进行等差复权的%s_rs%s.CSV文件合并成功!\"%(old_code_value,sp_old_char))\n",
|
||||
"\n",
|
||||
" del old_rs_df\n",
|
||||
" \n",
|
||||
" for sp_new_char in sp_new_chars:\n",
|
||||
" csv_new_files = [sp_file for sp_file in all_csv_files if sp_new_char in sp_file]\n",
|
||||
" if len(csv_new_files) > 0:\n",
|
||||
" # 生成按年份未处理的CSV文件\n",
|
||||
" new_up_df, alpha_chars, new_code_value = merged_new_unprocessed_tickdata(csv_new_files, sp_new_char)\n",
|
||||
" folder_up_path = str('%s/%s'%(out_up_path, new_code_value))\n",
|
||||
" if not os.path.exists(folder_up_path):\n",
|
||||
" os.makedirs(folder_up_path) \n",
|
||||
" new_up_df.to_csv('%s/%s_up%s.csv'%(folder_up_path,new_code_value,sp_new_char), index=False)\n",
|
||||
" print(\"按年份未处理的%s_up%s.CSV文件合并成功!\"%(new_code_value,sp_new_char))\n",
|
||||
"\n",
|
||||
" # 生成按年份处理后的CSV文件\n",
|
||||
" new_df = merged_new_tickdata(new_up_df, sp_new_char, alpha_chars, new_code_value)\n",
|
||||
" del new_up_df\n",
|
||||
" folder_path = str('%s/%s'%(out_path, new_code_value))\n",
|
||||
" if not os.path.exists(folder_path):\n",
|
||||
" os.makedirs(folder_path) \n",
|
||||
" new_df.to_csv('%s/%s%s.csv'%(folder_path,new_code_value,sp_new_char), index=False)\n",
|
||||
" print(\"按年份处理的%s%s.CSV文件合并成功!\"%(new_code_value,sp_new_char))\n",
|
||||
"\n",
|
||||
" # 生成按年份处理后的CSV文件按照等差复权处理\n",
|
||||
" new_rs_df = reinstatement_tickdata(new_df)\n",
|
||||
" del new_df\n",
|
||||
" folder_rs_path = str('%s/%s'%(out_rs_path, new_code_value))\n",
|
||||
" if not os.path.exists(folder_rs_path):\n",
|
||||
" os.makedirs(folder_rs_path) \n",
|
||||
" new_rs_df.to_csv('%s/%s_rs%s.csv'%(folder_rs_path,new_code_value,sp_new_char), index=False)\n",
|
||||
" print(\"按年份处理且进行等差复权的%s_rs%s.CSV文件合并成功!\"%(new_code_value,sp_new_char))\n",
|
||||
"\n",
|
||||
" del new_rs_df"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "4ff42c1f",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# import chardet\n",
|
||||
"# for root, dirs, files in os.walk('.'):\n",
|
||||
"# if len(dirs) > 0:\n",
|
||||
"# for dir in dirs:\n",
|
||||
"# all_csv_files = [os.path.join(dir, file) for file in os.listdir(dir) if file.endswith('.csv')]\n",
|
||||
"# fileNum_corrects = 0\n",
|
||||
"# fileNum_errors = 0\n",
|
||||
"\n",
|
||||
"# for csv_file in all_csv_files:\n",
|
||||
"# with open(csv_file, 'rb') as f:\n",
|
||||
"# data = f.read() \n",
|
||||
"# detected_encoding = chardet.detect(data)['encoding']\n",
|
||||
"\n",
|
||||
"# if (detected_encoding and detected_encoding != 'gbk') and (detected_encoding and detected_encoding != 'GB2312'):\n",
|
||||
"# fileNum_errors += 1\n",
|
||||
"# with open('output_error.txt', 'a') as f:\n",
|
||||
"# print(\"%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s\"%(csv_file,detected_encoding,fileNum_errors), file = f)\n",
|
||||
"# print(\"%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s\"%(csv_file,detected_encoding,fileNum_errors))\n",
|
||||
"# # print(\"%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式\"%(csv_file,detected_encoding))\n",
|
||||
"# else:\n",
|
||||
"# fileNum_corrects += 1\n",
|
||||
"# with open('output.txt', 'a') as f:\n",
|
||||
"# print(\"%s当前文件为gbk或者GB2312格式,无需要转换,正确总数为%s\"%(csv_file, fileNum_corrects), file = f)\n",
|
||||
"# if fileNum_errors >0:\n",
|
||||
"# print(\"存在错误文件,请核查!!!\")\n",
|
||||
" \n",
|
||||
"# print(\"查询完毕!!!\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "1f6e93e2",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"merged_rs_df = pd.read_csv('D:\\data_transfer\\data_up_merged\\大商所\\j888\\j888_up_2020.csv', encoding='utf', low_memory=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "33b31d28",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"merged_rs_df.replace([np.inf, -np.inf], np.nan)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "b2df07dd",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "febd8fc4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# # 检测NaN值\n",
|
||||
"# nan_mask = df['A'].isna()\n",
|
||||
"# print(df[nan_mask])\n",
|
||||
" \n",
|
||||
"# # 检测无穷值\n",
|
||||
"# inf_mask = df['A'].isinf()\n",
|
||||
"# print(df[inf_mask])\n",
|
||||
" \n",
|
||||
"# # 如果你想要在整个DataFrame中查找所有的NaN和无穷值,可以使用\n",
|
||||
"# nan_and_inf = df.isna() | df.isinf()\n",
|
||||
"# print(df[nan_and_inf])\n",
|
||||
"\n",
|
||||
"# 检测NaN值\n",
|
||||
"nan_mask = merged_rs_df.isna() # merged_rs_df['成交量']\n",
|
||||
"print(merged_rs_df[nan_mask])\n",
|
||||
"\n",
|
||||
"nan_index = merged_rs_df[nan_mask].index\n",
|
||||
"print(nan_index)\n",
|
||||
"# nan_index_in_column_A = merged_rs_df['成交量'].isna().index\n",
|
||||
"# print(\"NaN indices in column '成交量':\", nan_index_in_column_A)\n",
|
||||
" \n",
|
||||
"# 检测无穷值\n",
|
||||
"# inf_mask = pd.isinf(merged_rs_df['成交量'])\n",
|
||||
"# print(merged_rs_df[inf_mask])\n",
|
||||
" \n",
|
||||
"# 如果你想要在整个DataFrame中查找所有的NaN和无穷值,可以使用\n",
|
||||
"# nan_and_inf = df.isna() | df.isinf()\n",
|
||||
"# print(df[nan_and_inf])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "98b01523",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.iloc[nan_index]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "8efb7d08",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# merged_rs_df = merged_rs_df.drop(4017556)\n",
|
||||
"merged_rs_df = merged_rs_df.drop(merged_rs_df.index[nan_index])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "71702d76",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.iloc[nan_index]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "60c8bc6c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# merged_rs_df['成交量'].replace(np.nan,0,inplace=True)\n",
|
||||
"# merged_rs_df['成交量'].replace(np.inf,0,inplace=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "808dd229",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df['volume'] = merged_rs_df['成交量'].astype(int)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "0b07ec27",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df['volume'] = merged_rs_df['volume'].astype(int)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "2b4cd024",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"pd.set_option('mode.use_inf_as_na', True)\n",
|
||||
"nan_index_in_column_A = merged_rs_df['volume'].isna().index\n",
|
||||
"print(\"NaN indices in column 'A':\", nan_index_in_column_A)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "55655ddb",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"pd.set_option('mode.use_inf_as_na', True)\n",
|
||||
"inf_index_in_column_A = merged_rs_df['volume'].isinf().index\n",
|
||||
"print(\"Inf indices in column 'A':\", inf_index_in_column_A)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "4761b95d",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"not_int_values = merged_rs_df['成交量'].apply(lambda x: not isinstance(pd.to_numeric(x, errors='coerce'), float))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "f8b97f31",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(merged_rs_df.loc[not_int_values, '成交量'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "0f639067",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "59b47b33",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df['main_contract'] = merged_rs_df['main_contract'].astype(str)\n",
|
||||
"merged_rs_df['symbol'] = merged_rs_df['symbol'].astype(str)\n",
|
||||
"merged_rs_df['datetime'] = pd.to_datetime(merged_rs_df['datetime'], errors='coerce', format='%Y-%m-%d %H:%M:%S.%f')\n",
|
||||
"merged_rs_df['lastprice'] = merged_rs_df['lastprice'].astype(float)\n",
|
||||
"merged_rs_df['volume'] = merged_rs_df['volume'].astype(int)\n",
|
||||
"merged_rs_df['bid_p'] = merged_rs_df['bid_p'].astype(float)\n",
|
||||
"merged_rs_df['ask_p'] = merged_rs_df['ask_p'].astype(float)\n",
|
||||
"merged_rs_df['bid_v'] = merged_rs_df['bid_v'].astype(int)\n",
|
||||
"merged_rs_df['ask_v'] = merged_rs_df['ask_v'].astype(int)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "8edc4f4e",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 要查找的值\n",
|
||||
"value_to_find = '0l4276.0'\n",
|
||||
" \n",
|
||||
"# 查找值的索引\n",
|
||||
"index_of_value = merged_rs_df.index[merged_rs_df['volume'] == value_to_find].tolist()\n",
|
||||
"print(index_of_value)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "4a2d43b8",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 要查找的值\n",
|
||||
"value_to_find = '3564.0<70'\n",
|
||||
" \n",
|
||||
"# 查找值的索引\n",
|
||||
"index_of_value = merged_rs_df.index[merged_rs_df['lastprice'] == value_to_find].tolist()\n",
|
||||
"print(index_of_value)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "35491aea",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.loc[9748911-5:9748911+5]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "e9bc02b5",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.loc[9748911,'volume'] = 0 \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "ac80c04d",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.loc[2079318-5:2079318+5]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "60a21f7a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.to_csv('D:/ag888_2019.csv', index=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "5fd5e0a8",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 等差复权\n",
|
||||
"import numpy as np\n",
|
||||
"merged_rs_df['复权因子'] = np.where(merged_rs_df['symbol'] != merged_rs_df['symbol'].shift(), merged_rs_df['ask_p'].shift() - merged_rs_df['bid_p'], 0)\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.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
@@ -0,0 +1,344 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "2d85dda4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import pandas as pd\n",
|
||||
"from merged_tickdata_20240724 import merged_new_tickdata, reinstatement_tickdata"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "413eb7eb",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"for k in ['2021']:#, '2023'\n",
|
||||
" for v in ['IH', 'IF', 'IC', 'IM', 'T', 'TF', 'TL', 'TS']:\n",
|
||||
" new_up_file = 'E:/%s888/%s888_up_%s.csv'%(v,v,k)\n",
|
||||
" new_df_file = 'E:/%s888/%s888_%s.csv'%(v,v,k)\n",
|
||||
" new_rs_df_file= 'E:/%s888/%s888_rs_%s.csv'%(v,v,k)\n",
|
||||
" sp_new_chars = '_%s'%(k)\n",
|
||||
" alpha_chars = '%s'%(v)\n",
|
||||
" print(new_up_file,new_df_file,new_rs_df_file,sp_new_chars,alpha_chars)\n",
|
||||
" # 生成按年份处理后的CSV文件\n",
|
||||
" try:\n",
|
||||
" new_up_df = pd.read_csv(str(new_up_file), encoding='utf-8')\n",
|
||||
" print('品种%s在%s年数据读取成功!'%(v,k))\n",
|
||||
" except FileNotFoundError:\n",
|
||||
" print('品种%s在%s年无数据!'%(v,k))\n",
|
||||
" continue\n",
|
||||
" new_df = merged_new_tickdata(new_up_df, alpha_chars)\n",
|
||||
" del new_up_df\n",
|
||||
" new_df.to_csv(new_df_file, index=False)\n",
|
||||
" print(\"按年份处理的CSV文件合并成功!\")\n",
|
||||
" \n",
|
||||
" # 生成按年份处理后的CSV文件按照等差复权处理\n",
|
||||
" new_rs_df = reinstatement_tickdata(new_df)\n",
|
||||
" del new_df\n",
|
||||
" new_rs_df.to_csv(new_rs_df_file, index=False)\n",
|
||||
" print(\"按年份处理且进行等差复权的文件合并成功!\")\n",
|
||||
" del new_rs_df\n",
|
||||
" "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "39018dfe",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"new_up_df = pd.read_csv(r\"E:\\TS888\\TS888_up_2022.csv\", encoding='utf-8')\n",
|
||||
"new_df_file = r\"E:\\TS888\\TS888_2022.csv\"\n",
|
||||
"new_rs_df_file=r\"E:\\TS888\\TS888_rs_2022.csv\"\n",
|
||||
"sp_new_chars = '_2022'\n",
|
||||
"alpha_chars = 'TS'"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "b391b81f",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"new_up_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "b80fde40",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"new_df = merged_new_tickdata(new_up_df, alpha_chars)\n",
|
||||
"del new_up_df\n",
|
||||
"new_df.to_csv(new_df_file, index=False)\n",
|
||||
"print(\"按年份处理的CSV文件合并成功!\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "fbe64270",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"new_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "f076b084",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 生成按年份处理后的CSV文件按照等差复权处理\n",
|
||||
"new_rs_df = reinstatement_tickdata(new_df)\n",
|
||||
"del new_df\n",
|
||||
"new_rs_df.to_csv(new_rs_df_file, index=False)\n",
|
||||
"print(\"按年份处理且进行等差复权的文件合并成功!\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "8bb177b0",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"new_rs_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "b2202624",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"del new_rs_df"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "0bf526ef",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "da125360",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df = pd.read_csv(r\"D:\\BaiduNetdiskDownload\\主力连续\\tick生成的OF数据(5M)\\data_rs_merged\\中金所\\IM888\\IM888_rs_2022_5T_back_ofdata_dj.csv\", encoding='utf-8')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"id": "a574a928",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_new = df.drop(df[df['delta'] == 0].index)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "ebdd32fd",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_new.to_csv(r\"D:\\BaiduNetdiskDownload\\主力连续\\tick生成的OF数据(5M)\\data_rs_merged\\中金所\\IM888\\IM888_rs_2022_5T_back_ofdata_dj_new.csv\", index=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"id": "55e799b0",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAADs8AAAd6CAYAAACPVxIRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdebhVdd03/vc+h5nDAScEEgUVcEbNMR8C0mJQy+wu86EU08AeiVAxNdQ0UetuUBKHcoDucsrbIR9RHLjF0gxLAy0MUTHMUtQEPSjj2b8//LmfTooCwtmwfL2ua1+w1vqs73qv3flLep9vqVwulwMAAAAAAAAAAAAAAAAAAAVQU+0AAAAAAAAAAAAAAAAAAACwrijPAgAAAAAAAAAAAAAAAABQGMqzAAAAAAAAAAAAAAAAAAAUhvIsAAAAAAAAAAAAAAAAAACFoTwLAAAAAAAAAAAAAAAAAEBhKM8CAAAAAAAAAAAAAAAAAFAYyrMAAAAAAAAAAAAAAAAAABSG8iwAAAAAAAAAAAAAAAAAAIWhPAsAAAAAAAAAAAAAAAAAQGEozwIAAAAAAACsph49emT48OGV4+nTp6dUKmX69OmVc8OHD0+PHj2aPVvRDRgwIAMGDKh2DAAAAAAAAGAjoDwLAAAAAAAAFM7kyZNTKpWafDp37pyBAwfmzjvvrHa8Ddrw4cObfG8tWrRI9+7d88UvfjGzZ8+udjwAAAAAAACA99Wi2gEAAAAAAAAA1pfvfOc76dmzZ8rlcl588cVMnjw5Q4cOzf/9v/83hxxyyHp55hVXXJHGxsb1snZzad26da688sokyYoVK/L000/n8ssvz9SpUzN79ux069atygkBAAAAAAAAVk15FgAAAAAAACisIUOGZK+99qocH3vssdlyyy1z3XXXrbfybMuWLdfLuutKuVzOkiVL0rZt21XOtGjRIl/60peanNtvv/1yyCGHZMqUKfnqV7+6vmMCAAAAAAAArLWaagcAAAAAAAAAaC6dOnVK27Zt06JF098zvHjx4px88snp3r17WrdunT59+uQHP/hByuXyGj9j+PDh6dGjR+X42WefTalUyg9+8IP89Kc/zXbbbZfWrVtn7733zu9///t33H/jjTdmp512Sps2bbLLLrvklltueceaSdLY2JiLLrooO++8c9q0aZMtt9wyI0eOzKuvvtpkrkePHjnkkENy1113Za+99krbtm3zk5/8ZI3fq0uXLknS5Lv75z//mbFjx2bXXXdNXV1d6uvrM2TIkMyaNavJvdOnT0+pVMovf/nLnHfeedlqq63Spk2bHHjggXnqqafe8ay3v6e2bdtmn332yW9+85t3zXTxxRdn5513Trt27bLJJptkr732yrXXXrvG7wYAAAAAAAAUi51nAQAAAAAAgMJatGhRXn755ZTL5SxYsCAXX3xxGhoamuyqWi6X8+lPfzr33Xdfjj322Oy+++656667csopp+T555/PhRdeuE6yXHvttXn99dczcuTIlEql/Od//mcOP/zwPPPMM5XdaqdMmZIjjjgiu+66ay644IK8+uqrOfbYY/ORj3zkHeuNHDkykydPzjHHHJPRo0dn3rx5mThxYv74xz/mwQcfbLID7pw5c3LkkUdm5MiR+epXv5o+ffq8b96XX345SbJy5co888wzOfXUU7PZZps12bH3mWeeya233prPf/7z6dmzZ1588cX85Cc/Sf/+/TN79ux069atyZrf/e53U1NTk7Fjx2bRokX5z//8zwwbNiwzZsyozFx11VUZOXJkPvaxj2XMmDF55pln8ulPfzqbbrppunfvXpm74oorMnr06PzHf/xHvvGNb2TJkiV57LHHMmPGjPzv//2/V/N/FQAAAAAAAKCIlGcBAAAAAACAwjrooIOaHLdu3TpXX311PvnJT1bO3Xbbbfmf//mfjB8/PuPGjUuSnHDCCfn85z+fCRMmZNSoUdluu+0+cJb58+dn7ty52WSTTZIkffr0yWc+85ncddddlULq6aefno985CN58MEHU1dXlyQ58MADM2DAgGyzzTaVtR544IFceeWVueaaa5oURQcOHJjBgwfnxhtvbHL+qaeeytSpUzNo0KDVyrp48eJsscUWTc595CMfyd13393k/K677ponn3wyNTU1lXNf/vKXs8MOO+Sqq67KmWee2WSNJUuWZObMmWnVqlWSZJNNNsk3vvGN/OlPf8ouu+yS5cuX51vf+lZ233333HfffZW5nXbaKSNGjGhSnp0yZUp23nnn3Hjjjav1TgAAAAAAAMCHR837jwAAAAAAAABsnC655JLcc889ueeee/KLX/wiAwcOzHHHHZebb765MnPHHXektrY2o0ePbnLvySefnHK5nDvvvHOdZDniiCMqxdkk6devX5K3dm9Nkr///e95/PHHc9RRR1WKs0nSv3//7Lrrrk3WuvHGG9OxY8d88pOfzMsvv1z5fPSjH01dXV3uu+++JvM9e/Zc7eJskrRp06byvd111135yU9+krq6ugwdOjRPPvlkZa5169aV4uzKlSvzyiuvpK6uLn369Mmjjz76jnWPOeaYSiH23b6DP/zhD1mwYEGOP/74JnPDhw9Px44dm6zVqVOn/O1vf8vvf//71X4vAAAAAAAA4MPhQ1+e/fWvf51DDz003bp1S6lUyq233rpG95999tkplUrv+LRv3379BAYAAAAAAABW2z777JODDjooBx10UIYNG5YpU6Zkp512yqhRo7Js2bIkyV//+td069YtHTp0aHLvjjvuWLm+Lmy99dZNjt8u0r766qtNnrP99tu/495/Pzd37twsWrQonTt3zhZbbNHk09DQkAULFjSZ79mz5xplra2trXxvn/rUpzJixIjce++9WbRoUU4//fTKXGNjYy688ML06tUrrVu3zuabb54tttgijz32WBYtWrTW30GvXr2azLVs2TLbbrttk3Onnnpq6urqss8++6RXr1454YQT8uCDD67RewIAAAAAAADF1KLaAapt8eLF6du3b77yla/k8MMPX+P7x44dm+OPP77JuQMPPDB77733uooIAAAAAAAArCM1NTUZOHBgJkyYkLlz52bnnXdutmfX1ta+6/lyubzGazU2NqZz58655ppr3vX6Flts0eS4bdu2a/yMf7fVVlulT58++fWvf105d/755+fMM8/MV77ylZx77rnZdNNNU1NTkzFjxqSxsfEda6zL72DHHXfMnDlzcvvtt2fq1Km56aabcumll+ass87KOeecs8brAQAAAAAAAMXxoS/PDhkyJEOGDFnl9aVLl2bcuHG57rrrsnDhwuyyyy753ve+lwEDBiRJ6urqUldXV5mfNWtWZs+encsvv3x9RwcAAAAAAADWwooVK5IkDQ0NSZJtttkm9957b15//fUmu8/+5S9/qVxvDm8/56mnnnrHtX8/t9122+Xee+/NAQccsE6KsatrxYoVle8tSf77v/87AwcOzFVXXdVkbuHChdl8883XeP23v4O5c+fmE5/4ROX88uXLM2/evPTt27fJfPv27XPEEUfkiCOOyLJly3L44YfnvPPOy+mnn542bdqs8fMBAAAAAACAYqipdoAN3ahRo/LQQw/l+uuvz2OPPZbPf/7zGTx4cObOnfuu81deeWV69+6dfv36NXNSAAAAAAAA4P0sX748d999d1q1apUdd9wxSTJ06NCsXLkyEydObDJ74YUXplQqvecv412XunXrll122SX/9V//1aSgev/99+fxxx9vMvuFL3whK1euzLnnnvuOdVasWJGFCxeu83xPPvlk5syZ06TAWltb+45dY2+88cY8//zza/WMvfbaK1tssUUuv/zyLFu2rHJ+8uTJ73inV155pclxq1atstNOO6VcLmf58uVr9XwAAAAAAACgGD70O8++l/nz52fSpEmZP39+unXrliQZO3Zspk6dmkmTJuX8889vMr9kyZJcc801Oe2006oRFwAAAAAAAPg3d955Z2UH2QULFuTaa6/N3Llzc9ppp6W+vj5Jcuihh2bgwIEZN25cnn322fTt2zd33313fvWrX2XMmDHZbrvtmi3v+eefn8985jM54IADcswxx+TVV1/NxIkTs8suuzQp1Pbv3z8jR47MBRdckJkzZ+ZTn/pUWrZsmblz5+bGG2/MhAkT8h//8R9rnWPFihX5xS9+kSRpbGzMs88+m8svvzyNjY359re/XZk75JBD8p3vfCfHHHNMPvaxj+Xxxx/PNddck2233XatntuyZcuMHz8+I0eOzCc+8YkcccQRmTdvXiZNmvSONT/1qU+lS5cuOeCAA7LlllvmiSeeyMSJE3PwwQc32UEYAAAAAAAA+PBRnn0Pjz/+eFauXJnevXs3Ob906dJsttlm75i/5ZZb8vrrr+foo49urogAAAAAAADAezjrrLMqf2/Tpk122GGHXHbZZRk5cmTlfE1NTW677bacddZZueGGGzJp0qT06NEj3//+93PyySc3a95DDz001113Xc4+++ycdtpp6dWrVyZPnpyf/exn+fOf/9xk9vLLL89HP/rR/OQnP8m3vvWttGjRIj169MiXvvSlHHDAAR8ox9KlS/PlL3+5clxfX5+99947P//5z3PggQdWzn/rW9/K4sWLc+211+aGG27InnvumSlTpnygXzg8YsSIrFy5Mt///vdzyimnZNddd81tt92WM888s8ncyJEjc8011+RHP/pRGhoastVWW2X06NE544wz1vrZAAAAAAAAQDGUyuVyudohNhSlUim33HJLDjvssCTJDTfckGHDhuXPf/5zamtrm8zW1dWlS5cuTc4deOCBqa+vzy233NJckQEAAAAAAIAPgd133z1bbLFF7rnnnmpHAQAAAAAAANjg2Xn2Peyxxx5ZuXJlFixYkH79+r3n7Lx583Lffffltttua6Z0AAAAAAAAQNEsX748pVIpLVr8v3/KnT59embNmpXx48dXMRkLine truncated
|
||||
"text/plain": [
|
||||
"<Figure size 4800x2400 with 1 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"# 假设你的 DataFrame 已经加载为 df,并且 df['a'] 是要计算布林带的数值列\n",
|
||||
"df = pd.read_csv(r\"D:\\BaiduNetdiskDownload\\主力连续\\tick生成的OF数据(5M)\\data_rs_merged\\中金所\\IM888\\IM888_rs_2022_5T_back_ofdata_dj_new.csv\") # 例如从CSV加载\n",
|
||||
"\n",
|
||||
"# 计算中轨线 (通常是20日简单移动平均线)\n",
|
||||
"window = 40 # 窗口大小,可以根据你的需求调整\n",
|
||||
"df['Middle Band'] = df['delta'].rolling(window=window).mean()\n",
|
||||
"\n",
|
||||
"# 计算标准差\n",
|
||||
"df['Std Dev'] = df['delta'].rolling(window=window).std()\n",
|
||||
"\n",
|
||||
"# 计算上轨线和下轨线\n",
|
||||
"df['Upper Band'] = df['Middle Band'] + (2 * df['Std Dev'])\n",
|
||||
"df['Lower Band'] = df['Middle Band'] - (2 * df['Std Dev'])\n",
|
||||
"\n",
|
||||
"# 绘制图形\n",
|
||||
"plt.figure(figsize=(48,24))\n",
|
||||
"plt.plot(df['delta'], label='Price', color='blue')\n",
|
||||
"plt.plot(df['Middle Band'], label='Middle Band', color='black', linestyle='--')\n",
|
||||
"plt.plot(df['Upper Band'], label='Upper Band', color='red', linestyle='--')\n",
|
||||
"plt.plot(df['Lower Band'], label='Lower Band', color='green', linestyle='--')\n",
|
||||
"plt.fill_between(df.index, df['Upper Band'], df['Lower Band'], color='gray', alpha=0.3)\n",
|
||||
"\n",
|
||||
"plt.title('Bollinger Bands')\n",
|
||||
"plt.legend(loc='best')\n",
|
||||
"plt.show()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"id": "75652a31",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9wAAAIQCAYAAABzDWZmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADyuUlEQVR4nOydd5gUxdPHv3v5CHfknKNEQVBAckZBUZIIKiBGQEVMoK9i5ieiIogiimREyQKSM5JzkpxzvCMel+b949y92dkJPTM9Yffq8zw+HrM93TU93T1d3dVVHkEQBBAEQRAEQRAEQRAEwZUwpwUgCIIgCIIgCIIgiFCEFG6CIAiCIAiCIAiCsABSuAmCIAiCIAiCIAjCAkjhJgiCIAiCIAiCIAgLIIWbIAiCIAiCIAiCICyAFG6CIAiCIAiCIAiCsABSuAmCIAiCIAiCIAjCAkjhJgiCIAiCIAiCIAgLIIWbIAiCIAiCIAiCICyAFG6CIIgQxOPxoF+/fk6L4UepUqXQs2dPp8UgQhBp21q1ahU8Hg9WrVrlu9azZ0+UKlXKdtnMsHnzZkRFReHkyZNOi6JJSkoKihcvjh9//NFpUQiCIFwFKdwEQRBBxNGjR/Hyyy+jTJkyiImJQVxcHOrXr4/vv/8ed+/edVo8W2nSpAk8Hg/Kly8v+/vSpUvh8Xjg8XgwY8YMm6Wzhv379+Pjjz/GiRMnnBZFFkEQMGnSJDRq1Ai5cuVCtmzZUK1aNXz66ae4ffu20+IZ5ssvv8ScOXNsL/eDDz7A008/jZIlSwb8Nnv2bDzyyCPIly8foqKiUKRIEXTp0gUrVqzwpfEuPHg8HkyePFm2jPr168Pj8aBq1aoBv6WkpGDEiBF48MEHkTNnTuTIkQMPPvggRowYgZSUFL+0kZGRGDBgAL744gskJSWZfHKCIIjQgRRugiCIIGHBggWoVq0a/vzzTzz22GMYOXIkhgwZghIlSuCdd97BG2+84bSIthMTE4MjR45g8+bNAb9NmTIFMTExDkhlHfv378cnn3ziSoU7LS0NXbt2xXPPPQcA+PjjjzF8+HDUqFEDn3zyCerWrYuLFy9aUvbBgwfxyy+/WJI34IzCvXPnTixbtgyvvPKK33VBENCrVy906NABFy9exIABAzB69Gj07dsXx44dQ/PmzbF+/Xq/e2JiYjB16tSAMk6cOIH169fL9pPbt2+jZcuWeOONN1CoUCH873//w9dff40iRYrgjTfeQMuWLQMWUXr16oUrV67IlkUQBJFViXBaAIIgCEKb48ePo2vXrihZsiRWrFiBwoUL+37r27cvjhw5ggULFjgooTOULVsWqamp+P333/HQQw/5riclJWH27Nlo27YtZs6c6aCEWYehQ4fizz//xNtvv42vv/7ad/2ll15Cly5d8MQTT6Bnz55YuHAh97Kjo6O552k1t2/fRvbs2RV/HzduHEqUKIG6dev6Xf/mm28wfvx49O/fH99++y08Ho/vtw8++ACTJk1CRIT/9O7RRx/FX3/9hStXriBfvny+61OnTkXBggVRvnx5XL9+3e+eAQMGYPXq1Rg5cqTf8ZRXX30Vo0aNQr9+/fD222/jp59+8v2WK1cutGrVCuPHj8fzzz+vr0IIgiBCFNrhJgiCCAKGDh2KW7duYezYsX7Ktpdy5crJ7nDPmTMHVatWRXR0NKpUqYJFixb5/X7y5En06dMHFStWRGxsLPLmzYvOnTsH7KCOHz8eHo8H//zzDwYMGID8+fMje/bsePLJJ3H58mW/tIIg4PPPP0exYsWQLVs2NG3aFPv27ZN9roSEBPTv3x/FixdHdHQ0ypUrh6+++grp6enMdfP000/jjz/+8Ltn3rx5uHPnDrp06SJ7z44dO/DII48gLi4OOXLkQPPmzbFx40bZZ163bh1ef/115M+fH7ly5cLLL7+M5ORkJCQk4LnnnkPu3LmRO3duvPvuuxAEwS+P9PR0DB8+HFWqVEFMTAwKFiyIl19+OUC5KVWqFNq1a4d169bhoYceQkxMDMqUKYOJEyf6ydO5c2cAQNOmTX2mwt5zyh6PBx9//HHAs0rPN/N4Lil3797F119/jQoVKmDIkCEBvz/22GPo0aMHFi1a5FfPW7duRevWrZEvXz7ExsaidOnSAYpaeno6vv/+e1SrVg0xMTHInz8/2rRpg61btyo+IyvDhg3Dww8/jLx58yI2Nha1atUKOH7g8Xhw+/ZtTJgwwVfn4rL0tKXVq1ejT58+KFCgAIoVK6Yq25w5c9CsWTM/hfru3bsYMmQI7rvvPgwbNszvNy/PPvus3+ITALRv3x7R0dGYPn263/WpU6eiS5cuCA8P97t+5swZjB07Fs2aNZP1BdG3b180bdoUv/76K86cOeP3W8uWLbFu3Tpcu3ZN9fkIgiCyCqRwEwRBBAHz5s1DmTJl8PDDDzPfs27dOvTp0wddu3bF0KFDkZSUhI4dO+Lq1au+NFu2bMH69evRtWtXjBgxAq+88gqWL1+OJk2a4M6dOwF5vvbaa9i1axcGDx6MV199FfPmzQuYkH/00Uf48MMPcf/99+Prr79GmTJl0KpVqwDz0zt37qBx48aYPHkynnvuOYwYMQL169fHoEGDMGDAAObn7NatG86fP+/nIGvq1Klo3rw5ChQoEJB+3759aNiwIXbt2oV3330XH374IY4fP44mTZpg06ZNss98+PBhfPLJJ3j88ccxZswYfPjhh3jssceQlpaGL7/8Eg0aNMDXX3+NSZMm+d378ssv45133vGds+/VqxemTJmC1q1bB5yBPXLkCDp16oSWLVvim2++Qe7cudGzZ0/fYkWjRo3w+uuvAwDef/99TJo0CZMmTUKlSpWY64rXc0lZt24drl+/jm7dugXsrnrxmprPnz8fAHDp0iW0atUKJ06cwMCBAzFy5Eh07949QFnt3bu3b1Hmq6++wsCBAxETExOQzgjff/89atasiU8//RRffvklIiIi0LlzZz9rkUmTJiE6OhoNGzb01fnLL78MQH9b6tOnD/bv34+PPvoIAwcOVJTr7NmzOHXqFB544AG/615Ftlu3bgFKshrZsmVD+/bt8fvvv/uu7dq1C/v27UO3bt0C0i9cuBBpaWm+dybHc889h9TU1IBFvFq1akEQhACzdoIgiCyLQBAEQbiaxMREAYDQvn175nsACFFRUcKRI0d813bt2iUAEEaOHOm7dufOnYB7N2zYIAAQJk6c6Ls2btw4AYDQokULIT093Xf9zTffFMLDw4WEhARBEATh0qVLQlRUlNC2bVu/dO+//74AQOjRo4fv2meffSZkz55dOHTokF/5AwcOFMLDw4VTp06pPmPjxo2FKlWqCIIgCLVr1xZ69+4tCIIgXL9+XYiKihImTJggrFy5UgAgTJ8+3XffE088IURFRQlHjx71XTt37pyQM2dOoVGjRgHP3Lp1a79nqVevnuDxeIRXXnnFdy01NVUoVqyY0LhxY9+1tWvXCgCEKVOm+Mm9aNGigOslS5YUAAhr1qzxXbt06ZIQHR0tvPXWW75r06dPFwAIK1euDKgPAMLgwYMDrpcsWdKv3s0+lxzDhw8XAAizZ89WTHPt2jUBgNChQwdBEARh9uzZAgBhy5YtivesWLFCACC8/vrrAb+JZZc+o/e9i+upR48eQsmSJf3ykLb/5ORkoWrVqkKzZs38rmfPnt0vfy9621KDBg2E1NRUxef1smzZMgGAMG/ePL/r33//vWY9ixG3//nz5wsej8fXr9555x2hTJkygiD49yVBEIT+/fsLAIQdO3Yo5r19+3YBgDBgwAC/6+fOnRMACF999RWTjARBEKEO7XATBEG4nBs3bgAAcubMqeu+Fi1aoGzZsr5/V69eHXFxcTh27JjvWmxsrO/vlJQUXL16FeXKlUOuXLmwffv2gDxfeuklPzPWhg0bIi0tzRe2aNmyZUhOTsZrr73ml65///4BeU2fPh0NGzZE7ty5ceXKFd9/LVq0QFpaGtasWcP8rN26dcOsWbOQnJyMGTNmIDw8HE8++WRAurS0NCxZsgRPPPEEypQp47teuHBhdOvWDevWrfPVt5fevXv7PUudOnUgCAJ69+7tuxYeHo7atWv71e306dMRHx+Pli1b+j1frVq1kCNHDqxcudKvnMqVK6Nhw4a+f+fPnx8VK1b0y5MnRp9Ljps3bwJQb6Pe37z1mytXLgAZO97S3X4vM2fOhMfjweDBgwN+kzOn1ou4/V+/fh2JiYlo2LChbNuXYqQtvfjii0w7014rlNy5c/tdNzoWAECrVq2QJ08eTJs2DYIgYNq0aXj66adl0xp5n168Ml+5ckW3jARBEKEIKdwEQRAuJy4uDkDmJJiVEiVKBFzLnTu33/nhu3fv4qOPPvKdoc6XLx/y58+PhIQEJCYmaubpnVx78/Qq3tJQXfnz5w9QHg4fPoxFixYhf/78fv+1aNECQIbJMStdu3ZFYmIiFi5ciClTpqBdu3ayysLly5dx584dVKxYMeC3SpUqIT09HadPn1Z95vj4eABA8eLFA66L6/bw4cNITExEgQIFAp7x1q1bAc/H8r54YvS55PDWtVoblSpxjRs3RseOHfHJJ58gX758aN++PcaNG4d79+757jl69CiKFCmCPHnyMD6VPubPn4+6desiJiYGefLkQf78+fHTTz/Jtn0pRtpS6dKldcknSM7OGx0LgIywXZ07d8bUqVOxZs0anD59WtacHDD2PqUy81gQIQiCCAXISzlBEITLiYuLQ5EiRbB3715d9yntpIkn8a+99hrGjRuH/v37o169eoiPj4fH40HXrl1lHZex5MlKeno6WrZsiXfffVf29woVKjDnVbhwYTRp0gTffPMN/vnnH66eyZWeWe66uB7S09NRoEABTJkyRfb+/PnzM5VjpG7FpKWlyV43+lxyeM+R7969G0888YRsmt27dwPI2MkH4IuPvnHjRsybNw+LFy/G888Line truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x600 with 1 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"# 假设你的 DataFrame 已经加载为 df,并且 df['a'] 是要计算CMO的数值列\n",
|
||||
"df = pd.read_csv(r\"D:\\BaiduNetdiskDownload\\主力连续\\tick生成的OF数据(5M)\\data_rs_merged\\中金所\\IM888\\IM888_rs_2022_5T_back_ofdata_dj_new.csv\") # 例如从CSV加载\n",
|
||||
"\n",
|
||||
"# 定义时间窗口,通常使用14天\n",
|
||||
"window = 14\n",
|
||||
"\n",
|
||||
"# 计算价格的变化\n",
|
||||
"df['Change'] = df['delta'].diff()\n",
|
||||
"\n",
|
||||
"# 计算上升动量 U 和下降动量 D\n",
|
||||
"df['U'] = np.where(df['Change'] > 0, df['Change'], 0)\n",
|
||||
"df['D'] = np.where(df['Change'] < 0, -df['Change'], 0)\n",
|
||||
"\n",
|
||||
"# 计算 U 和 D 的移动平均线\n",
|
||||
"df['SMA_U'] = df['U'].rolling(window=window).mean()\n",
|
||||
"df['SMA_D'] = df['D'].rolling(window=window).mean()\n",
|
||||
"\n",
|
||||
"# 计算CMO\n",
|
||||
"df['CMO'] = 100 * (df['SMA_U'] - df['SMA_D']) / (df['SMA_U'] + df['SMA_D'])\n",
|
||||
"\n",
|
||||
"# 绘制CMO图形\n",
|
||||
"plt.figure(figsize=(12,6))\n",
|
||||
"plt.plot(df['CMO'], label='CMO', color='purple')\n",
|
||||
"\n",
|
||||
"plt.title('Chande Momentum Oscillator (CMO)')\n",
|
||||
"plt.axhline(y=50, color='r', linestyle='--', label='Overbought') # 超买线\n",
|
||||
"plt.axhline(y=-50, color='g', linestyle='--', label='Oversold') # 超卖线\n",
|
||||
"plt.axhline(y=0, color='black', linestyle='-') # 中线\n",
|
||||
"\n",
|
||||
"plt.legend(loc='best')\n",
|
||||
"plt.show()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "8e7b22c6",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+IAAAIQCAYAAAAFN9TtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADkl0lEQVR4nOzdd3gUVdsG8Huz6b1ACCWEEHpHkF4FAWlSxIKiIoIF9QMUERAEURCQJqAIIlgAFRQERSmCdBB4pUjvnSSQ3svu98ewuzM7szWb3SR7/64r186cOTNzNtlAnjnnPEel1Wq1ICIiIiIiIiKn8HB1A4iIiIiIiIjcCQNxIiIiIiIiIidiIE5ERERERETkRAzEiYiIiIiIiJyIgTgRERERERGREzEQJyIiIiIiInIiBuJERERERERETsRAnIiIiIiIiMiJGIgTEREREREROREDcSKiIlKpVHjjjTdc3QyJatWq4cUXX3R1M6gMMv5s/f3331CpVPj777/1ZS+++CKqVavm9LYVxT///ANvb29cu3bN1U0hF7p//z4CAgKwefNmVzeFiMo4BuJERCZcunQJr7zyCqpXrw5fX18EBwejbdu2WLBgAbKzs13dPKfq1KkTVCoVatasqXh827ZtUKlUUKlUWLdunZNbVzxOnz6NKVOm4OrVq65uiiKtVovvvvsOHTp0QGhoKPz9/dGwYUN8+OGHyMzMdHXz7DZ9+nRs2LDB6fedOHEinnnmGcTExOjLOnXqhAYNGijWv3r1KlQqFT799FMAwgMK3e+Aua+VK1eabYfuwYY1XwCwcuVKSZmnpycqV66MF198Ebdu3ZJdX/e7rPRVp04dfT3ddX19fU1ex/h7I/4eeHh4IDQ0FA0bNsSIESNw6NAhxfdrzYNMc/d68803TX4Pxf8WGX+fjL8OHjwIAIiIiMDLL7+MSZMmmW0TEVFRebq6AUREJdHvv/+OQYMGwcfHB88//zwaNGiAvLw87N27F2PHjsWpU6ewdOlSVzfTqXx9fXHx4kX8888/aNGiheTYqlWr4Ovri5ycHBe1zvFOnz6NqVOnolOnTiWud7ewsBCDBw/GTz/9hPbt22PKlCnw9/fHnj17MHXqVKxduxbbt29HhQoVHH7vc+fOwcOj+J7jT58+HU888QT69etXbPcwduzYMWzfvh379++3+xrz589HRkaGfn/z5s1Ys2YN5s2bh3LlyunL27RpY/Y6devWxXfffScpGz9+PAIDAzFx4kST53344YeIjY1FTk4ODh48iJUrV2Lv3r3477//4OvrK6lbpUoVzJgxQ3aNkJAQWVlubi4++eQTLFy40Gy7dZo0aYK3334bAJCeno4zZ85g7dq1WLZsGUaPHo25c+dadR1rLVu2DOPHj0elSpWsqq/7PhmrUaOGfvvVV1/FZ599hh07duCRRx5xWFuJiMQYiBMRGbly5QqefvppxMTEYMeOHahYsaL+2MiRI3Hx4kX8/vvvLmyha8TFxaGgoABr1qyRBOI5OTlYv349evXqhZ9//tmFLXQfs2bNwk8//YR33nkHs2fP1pePGDECTz75JPr164cXX3wRf/zxh8Pv7ePj4/BrFrfMzEwEBASYPL5ixQpUrVoVrVq1svsexg8O7t69izVr1qBfv342PcipUKECnnvuOUnZJ598gnLlysnKxR577DE0b94cAPDyyy+jXLlymDlzJjZu3Ignn3xSUjckJMTstcSaNGliU7BbuXJl2bVnzpyJwYMHY968eahZsyZee+01q+5tSf369XHu3Dl88skn+Oyzz6w6R/x9MqVu3bpo0KABVq5cyUCciIoNh6YTERmZNWsWMjIysHz5ckkQrlOjRg383//9n6x8w4YNaNCgAXx8fFC/fn38+eefkuPXrl3D66+/jtq1a8PPzw8REREYNGiQbOizbgjlvn37MGbMGJQvXx4BAQHo378/EhMTJXW1Wi0++ugjVKlSBf7+/ujcuTNOnTql+L5SUlIwatQoREdHw8fHBzVq1MDMmTOh0Wis/t4888wz+PHHHyXnbNq0CVlZWbI/9nX+/fdfPPbYYwgODkZgYCC6dOmiHwZq/J737t2Lt956C+XLl0doaCheeeUV5OXlISUlBc8//zzCwsIQFhaGd999F1qtVnINjUaD+fPno379+vD19UWFChXwyiuvIDk5WVKvWrVq6N27N/bu3YsWLVrA19cX1atXx7fffitpz6BBgwAAnTt31g9f1c2DVqlUmDJliuy9Gs+fdsT7MpadnY3Zs2ejVq1air2affr0wQsvvIA///xT8n0+cuQIunfvjnLlysHPzw+xsbF46aWXZN/DBQsWoGHDhvD19UX58uXRo0cPHDlyxOR7tNann36KNm3aICIiAn5+fmjWrJlsGoNKpUJmZia++eYb/fdcfC9bPku7du3C66+/jsjISFSpUsVs2zZs2IBHHnlEP9y7LGjfvj0AYYpNUUyYMAGFhYX45JNP7L6Gn58fvvvuO4SHh+Pjjz+2+Bm3VrVq1fD8889j2bJluH37tkOuqfPoo49i06ZNDmsrEZExBuJEREY2bdqE6tWrWxxCKrZ37168/vrrePrppzFr1izk5ORg4MCBuH//vr7O4cOHsX//fjz99NP47LPP8Oqrr+Kvv/5Cp06dkJWVJbvmm2++iePHj+ODDz7Aa6+9hk2bNsnmUk6ePBmTJk1C48aNMXv2bFSvXh3dunWTzRHOyspCx44d8f333+P555/HZ599hrZt22L8+PEYM2aM1e9z8ODBuHPnjiQx1+rVq9GlSxdERkbK6p86dQrt27fH8ePH8e6772LSpEm4cuUKOnXqpDhn9M0338SFCxcwdepU9O3bF0uXLsWkSZPQp08fFBYWYvr06WjXrh1mz54tG777yiuvYOzYsfp5/EOHDsWqVavQvXt35OfnS+pevHgRTzzxBB599FHMmTMHYWFhePHFF/UPMTp06IC33noLgBCIfPfdd/juu+9Qt25dq79Xjnpfxvbu3Yvk5GQMHjwYnp7KA9uef/55AMBvv/0GAEhISEC3bt1w9epVvPfee1i4cCGeffZZWRA7bNgw/cOamTNn4r333oOvr6+snj0WLFiApk2b4sMPP8T06dPh6emJQYMGSUaXfPfdd/Dx8UH79u313/NXXnkFgO2fpddffx2nT5/G5MmT8d5775ls161bt3D9+nU89NBDiscLCwtx79492ZfxA56SRveALywsTHbM1HtSyi0QGxvrkGA3MDAQ/fv3x61bt3D69Gm7r2Ns4sSJKCgosPpBQWpqqux9i/+d1mnWrBlSUlJMPtgkIioyLRER6aWmpmoBaB9//HGrzwGg9fb21l68eFFfdvz4cS0A7cKFC/VlWVlZsnMPHDigBaD99ttv9WUrVqzQAtB27dpVq9Fo9OWjR4/WqtVqbUpKilar1WoTEhK03t7e2l69eknqTZgwQQtA+8ILL+jLpk2bpg0ICNCeP39ecv/33ntPq1artdevXzf7Hjt27KitX7++VqvVaps3b64dNmyYVqvVapOTk7Xe3t7ab775Rrtz504tAO3atWv15/Xr10/r7e2tvXTpkr7s9u3b2qCgIG2HDh1k77l79+6S99K6dWutSqXSvvrqq/qygoICbZUqVbQdO3bUl+3Zs0cLQLtq1SpJu//8809ZeUxMjBaAdvfu3fqyhIQErY+Pj/btt9/Wl61du1YLQLtz507Z9wOA9oMPPpCVx8TESL7vRX1fSubPn68FoF2/fr3JOklJSVoA2gEDBmi1Wq12/fr1WgDaw4cPmzxnx44dWgDat956S3ZM3Hbj96j7uYu/Ty+88II2JiZGcg3jz39eXp62QYMG2kceeURSHhAQILm+jq2fpXbt2mkLCgpMvl+d7du3awFoN23aJDvWsWNHLQCzX7Nnz1a87uzZs7UAtFeuXLHYBkvq169v8nOhe7/bt2/XJiYmam/cuKFdt26dtnz58lofHx/tjRs3rH5Pr7zyiuy6hw8f1l66dEnr6ekp+WyI/03QiYmJ0fbq1cvk+5g3b54WgPbXX3/VlwHQjhw50uz7t3SvoUOHan19fbW3b9/WarVaxX+LdO9H6cvHx0d2z/3792sBaH/88UezbSMishd7xImIRNLS0gAAQUFBNp3XtWtXxMXF6fcbNWqE4OBgXL58WV/m5+en387Pz8f9+/dRo0YNhIaG4n//+5/smiNGjJAMlW3fvj0KCwv1yytt374deXl5ePPNNyX1Ro0aJbvW2rVr0b59e4SFhUl6grp27YrCwkLs3r3b6vc6ePBg/PLLL8jLy8O6deugVqvRv39/Wb3CwkJs3boV/fr1Q/Xq1fXlFStWxODBg7F3717991tn2LBhkvfSsmVLaLVaDBs2TF+mVqvRvHlzyfd27dq1CAkJwaOPPip5f82aNUNgYCB27twpuU+9evX0Q3cBoHz58qhdu7bkmo5k7/tSkp6eDsD8Z1R3TPf9DQ0NBSD0kBuPDtD5+eefoVKp8MEHH8iOOWLItvjzn5ycjNTUVLRv317xs2/Mns/S8OHDoVarLV5b1xuq1HMMCMOft23bJvv6/vvvLV7bmbp27Yry5csjOjoaTzzxBAICArBx40bFYfmm3pPSvx0AUL16dQwZMgRLly7FnTt37G5jYGAgAMNn2FHef/99q3vFFy9eLHvfSrkUdJ+He/fuObStREQ6TNZGRCQSHBwMwPY/FKtWrSorCwsLkwxfzc7OxowZM7BixQrcunVLMvcwNTXV4jV1fxjqrqkLyI2XFCtfvrwsqLhw4QJOnDiB8uXLK7Y/ISHB5Hsz9vTTT+Odd97BH3/8gVWrVqF3796KQWFiYiKysrJQu3Zt2bG6detCo9Hgxo0bqF+/vr7c+D3rsjhHR0fLysXf2wsXLiA1NVVxeLzS+7Pm5+VI9r4vJbrvtbnPqHGw3rFjRwwcOBBTp07FvHnz0KlTJ/Tr1w+DBw/WJ1+Line truncated
|
||||
"text/plain": [
|
||||
"<Figure size 1200x600 with 1 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import talib as tb\n",
|
||||
"\n",
|
||||
"# 假设你的 DataFrame 已经加载为 df,并且 df['a'] 是要计算CMO的数值列\n",
|
||||
"df = pd.read_csv(r\"E:\\of_data\\主力连续\\tick生成的OF数据(5M)\\data_rs_merged\\中金所\\IM888\\IM888_rs_2023_5T_back_ofdata_dj.csv\") # 例如从CSV加载\n",
|
||||
"\n",
|
||||
"# 定义时间窗口,通常使用14天\n",
|
||||
"window = 14\n",
|
||||
"\n",
|
||||
"# 计算HT_TRENDLINE\n",
|
||||
"df['HT_TRENDLINE'] = tb.HT_TRENDLINE(df['close'])\n",
|
||||
"\n",
|
||||
"# 绘制CMO图形\n",
|
||||
"plt.figure(figsize=(12,6))\n",
|
||||
"plt.plot(df['HT_TRENDLINE'], label='HT_TRENDLINE', color='purple')\n",
|
||||
"plt.plot(df['close'], label='close', color='blue')\n",
|
||||
"\n",
|
||||
"plt.title('Chande Momentum Oscillator (HT_TRENDLINE)')\n",
|
||||
"# plt.axhline(y=50, color='r', linestyle='--', label='Overbought') # 超买线\n",
|
||||
"# plt.axhline(y=-50, color='g', linestyle='--', label='Oversold') # 超卖线\n",
|
||||
"# plt.axhline(y=0, color='black', linestyle='-') # 中线\n",
|
||||
"\n",
|
||||
"plt.legend(loc='best')\n",
|
||||
"plt.show()"
|
||||
]
|
||||
}
|
||||
],
|
||||
"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.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
@@ -0,0 +1,444 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "2d85dda4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import pandas as pd\n",
|
||||
"from merged_tickdata__BIT_20240522 import merged_old_tickdata, merged_new_tickdata, merged_new_unprocessed_tickdata,merged_old_unprocessed_tickdata, reinstatement_tickdata"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "fe51b707",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 相关文件保存路径,需要修改:csv_directory为需要处理的文件原始路径;out_up_path为csv_directory进行了按年份合并的文件保存路径;\n",
|
||||
"# out_up_path为按年份合并后处理了重复数据、清除了交易时间外数据和统一表头了的数据;out_rs_path为out_path文件进行了复权处理后的数据\n",
|
||||
"csv_directory = str(\"D:/tmp\") \n",
|
||||
"out_up_path = str('D:/data_transfer/data_up_merged/BIT')\n",
|
||||
"out_path = str('D:/data_transfer/data_merged/BIT')\n",
|
||||
"out_rs_path = str('D:/data_transfer/data_rs_merged/BIT')\n",
|
||||
"# 需要处理的年份数据,csv数据中有含有\"_year\"的文件名\n",
|
||||
"sp_old_chars = ['ETCUSDT']\n",
|
||||
"sp_new_chars = ['_2022', '_2023']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"id": "3356d8ff",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"csv_files: ['ETCUSDT\\\\ETCUSDT-5m-2023-05-01.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-02.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-03.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-04.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-05.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-06.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-07.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-08.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-09.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-10.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-11.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-12.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-13.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-14.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-15.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-16.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-17.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-18.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-19.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-20.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-21.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-22.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-23.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-24.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-25.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-26.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-27.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-28.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-29.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-30.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-05-31.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-01.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-02.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-03.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-04.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-05.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-06.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-07.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-08.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-09.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-10.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-11.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-12.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-13.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-14.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-15.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-16.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-17.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-18.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-19.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-20.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-21.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-22.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-23.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-24.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-25.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-26.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-27.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-28.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-29.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-06-30.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-01.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-02.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-03.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-04.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-05.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-06.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-07.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-08.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-09.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-10.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-11.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-12.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-13.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-14.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-15.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-16.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-17.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-18.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-19.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-20.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-21.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-22.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-23.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-24.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-25.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-26.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-27.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-28.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-29.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-30.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-07-31.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-01.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-02.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-03.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-04.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-05.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-06.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-07.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-08.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-09.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-10.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-11.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-12.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-13.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-14.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-15.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-16.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-17.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-18.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-19.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-20.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-21.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-22.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-23.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-24.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-25.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-26.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-27.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-28.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-29.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-30.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-08-31.csv', 'ETCUSDT\\\\ETCUSDT-5m-2023-09-01.csv', 'ETCUSDT\\\\ETCUSDT-Line truncated
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "KeyError",
|
||||
"evalue": "'合约代码'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||||
"File \u001b[1;32mc:\\veighna_elite_simulation\\lib\\site-packages\\pandas\\core\\indexes\\base.py:3800\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 3799\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 3800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3801\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n",
|
||||
"File \u001b[1;32mc:\\veighna_elite_simulation\\lib\\site-packages\\pandas\\_libs\\index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n",
|
||||
"File \u001b[1;32mc:\\veighna_elite_simulation\\lib\\site-packages\\pandas\\_libs\\index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n",
|
||||
"File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n",
|
||||
"File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n",
|
||||
"\u001b[1;31mKeyError\u001b[0m: '合约代码'",
|
||||
"\nThe above exception was the direct cause of the following exception:\n",
|
||||
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||||
"Cell \u001b[1;32mIn[5], line 20\u001b[0m\n\u001b[0;32m 17\u001b[0m csv_old_files \u001b[38;5;241m=\u001b[39m [sp_file \u001b[38;5;28;01mfor\u001b[39;00m sp_file \u001b[38;5;129;01min\u001b[39;00m all_csv_files \u001b[38;5;28;01mif\u001b[39;00m sp_old_char \u001b[38;5;129;01min\u001b[39;00m sp_file]\n\u001b[0;32m 18\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(csv_old_files) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m 19\u001b[0m \u001b[38;5;66;03m# 生成按年份未处理的CSV文件\u001b[39;00m\n\u001b[1;32m---> 20\u001b[0m old_up_df \u001b[38;5;241m=\u001b[39m \u001b[43mmerged_old_unprocessed_tickdata\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcsv_old_files\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msp_old_char\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m folder_up_path \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m%\u001b[39m(out_up_path))\n\u001b[0;32m 22\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mexists(folder_up_path):\n",
|
||||
"File \u001b[1;32md:\\Gitee_Code\\trading_strategy\\SS_Code\\SF08\\使用文档\\数据转换最终版\\merged_tickdata__BIT_20240522.py:224\u001b[0m, in \u001b[0;36mmerged_old_unprocessed_tickdata\u001b[1;34m(all_csv_files, sp_char)\u001b[0m\n\u001b[0;32m 221\u001b[0m \u001b[38;5;66;03m# 重置行索引\u001b[39;00m\n\u001b[0;32m 222\u001b[0m merged_up_df\u001b[38;5;241m.\u001b[39mreset_index(inplace\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, drop\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m--> 224\u001b[0m merged_up_df,alpha_chars,code_value \u001b[38;5;241m=\u001b[39m \u001b[43minsert_main_contract\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmerged_up_df\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 225\u001b[0m \u001b[38;5;66;03m# 打印提示信息\u001b[39;00m\n\u001b[0;32m 226\u001b[0m \u001b[38;5;66;03m# print(\"按年份未处理的CSV文件合并成功!\")\u001b[39;00m\n\u001b[0;32m 228\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m merged_up_df,alpha_chars,code_value\n",
|
||||
"File \u001b[1;32md:\\Gitee_Code\\trading_strategy\\SS_Code\\SF08\\使用文档\\数据转换最终版\\merged_tickdata__BIT_20240522.py:163\u001b[0m, in \u001b[0;36minsert_main_contract\u001b[1;34m(df)\u001b[0m\n\u001b[0;32m 161\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minsert_main_contract\u001b[39m(df):\n\u001b[0;32m 162\u001b[0m \u001b[38;5;66;03m# 添加主力连续的合约代码,主力连续为888,指数连续可以用999,次主力连续可以使用889,表头用“统一代码”\u001b[39;00m\n\u001b[1;32m--> 163\u001b[0m alpha_chars, numeric_chars \u001b[38;5;241m=\u001b[39m split_alpha_numeric(\u001b[43mdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloc\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m合约代码\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m)\n\u001b[0;32m 164\u001b[0m code_value \u001b[38;5;241m=\u001b[39m alpha_chars \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m888\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 165\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcode_value characters:\u001b[39m\u001b[38;5;124m\"\u001b[39m, code_value)\n",
|
||||
"File \u001b[1;32mc:\\veighna_elite_simulation\\lib\\site-packages\\pandas\\core\\indexing.py:1067\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1065\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(com\u001b[38;5;241m.\u001b[39mapply_if_callable(x, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m key)\n\u001b[0;32m 1066\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_is_scalar_access(key):\n\u001b[1;32m-> 1067\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_value\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtakeable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_takeable\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1068\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_tuple(key)\n\u001b[0;32m 1069\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1070\u001b[0m \u001b[38;5;66;03m# we by definition only have the 0th axis\u001b[39;00m\n",
|
||||
"File \u001b[1;32mc:\\veighna_elite_simulation\\lib\\site-packages\\pandas\\core\\frame.py:3915\u001b[0m, in \u001b[0;36mDataFrame._get_value\u001b[1;34m(self, index, col, takeable)\u001b[0m\n\u001b[0;32m 3912\u001b[0m series \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_ixs(col, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 3913\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m series\u001b[38;5;241m.\u001b[39m_values[index]\n\u001b[1;32m-> 3915\u001b[0m series \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_item_cache\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcol\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3916\u001b[0m engine \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39m_engine\n\u001b[0;32m 3918\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex, MultiIndex):\n\u001b[0;32m 3919\u001b[0m \u001b[38;5;66;03m# CategoricalIndex: Trying to use the engine fastpath may give incorrect\u001b[39;00m\n\u001b[0;32m 3920\u001b[0m \u001b[38;5;66;03m# results if our categories are integers that dont match our codes\u001b[39;00m\n\u001b[0;32m 3921\u001b[0m \u001b[38;5;66;03m# IntervalIndex: IntervalTree has no get_loc\u001b[39;00m\n",
|
||||
"File \u001b[1;32mc:\\veighna_elite_simulation\\lib\\site-packages\\pandas\\core\\frame.py:4272\u001b[0m, in \u001b[0;36mDataFrame._get_item_cache\u001b[1;34m(self, item)\u001b[0m\n\u001b[0;32m 4267\u001b[0m res \u001b[38;5;241m=\u001b[39m cache\u001b[38;5;241m.\u001b[39mget(item)\n\u001b[0;32m 4268\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 4269\u001b[0m \u001b[38;5;66;03m# All places that call _get_item_cache have unique columns,\u001b[39;00m\n\u001b[0;32m 4270\u001b[0m \u001b[38;5;66;03m# pending resolution of GH#33047\u001b[39;00m\n\u001b[1;32m-> 4272\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mitem\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 4273\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_ixs(loc, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 4275\u001b[0m cache[item] \u001b[38;5;241m=\u001b[39m res\n",
|
||||
"File \u001b[1;32mc:\\veighna_elite_simulation\\lib\\site-packages\\pandas\\core\\indexes\\base.py:3802\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 3800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[0;32m 3801\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m-> 3802\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[0;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[0;32m 3804\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3805\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3806\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3807\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n",
|
||||
"\u001b[1;31mKeyError\u001b[0m: '合约代码'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"'''\n",
|
||||
"Author: zhoujie2104231 [email protected]\n",
|
||||
"Date: 2024-05-24 00:01:21\n",
|
||||
"LastEditors: zhoujie2104231 [email protected]\n",
|
||||
"LastEditTime: 2024-05-24 00:14:06\n",
|
||||
"Description: \n",
|
||||
"\n",
|
||||
"'''\n",
|
||||
"os.chdir(csv_directory) \n",
|
||||
"for root, dirs, files in os.walk('.'):\n",
|
||||
" if len(dirs) > 0:\n",
|
||||
" for dir in dirs:\n",
|
||||
" # 获取二级子文件夹中的所有 CSV 文件\n",
|
||||
" all_csv_files = [os.path.join(dir, file) for file in os.listdir(dir) if file.endswith('.csv')] \n",
|
||||
" \n",
|
||||
" for sp_old_char in sp_old_chars:\n",
|
||||
" csv_old_files = [sp_file for sp_file in all_csv_files if sp_old_char in sp_file]\n",
|
||||
" if len(csv_old_files) > 0:\n",
|
||||
" # 生成按年份未处理的CSV文件\n",
|
||||
" old_up_df = merged_old_unprocessed_tickdata(csv_old_files, sp_old_char)\n",
|
||||
" folder_up_path = str('%s/%s'%(out_up_path))\n",
|
||||
" if not os.path.exists(folder_up_path):\n",
|
||||
" os.makedirs(folder_up_path) \n",
|
||||
" old_up_df.to_csv('%s/%s_up%s.csv'%(folder_up_path,sp_old_char), index=False)\n",
|
||||
" print(\"按年份未处理的%s_up%s.CSV文件合并成功!\"%(sp_old_char))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "4ff42c1f",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# import chardet\n",
|
||||
"# for root, dirs, files in os.walk('.'):\n",
|
||||
"# if len(dirs) > 0:\n",
|
||||
"# for dir in dirs:\n",
|
||||
"# all_csv_files = [os.path.join(dir, file) for file in os.listdir(dir) if file.endswith('.csv')]\n",
|
||||
"# fileNum_corrects = 0\n",
|
||||
"# fileNum_errors = 0\n",
|
||||
"\n",
|
||||
"# for csv_file in all_csv_files:\n",
|
||||
"# with open(csv_file, 'rb') as f:\n",
|
||||
"# data = f.read() \n",
|
||||
"# detected_encoding = chardet.detect(data)['encoding']\n",
|
||||
"\n",
|
||||
"# if (detected_encoding and detected_encoding != 'gbk') and (detected_encoding and detected_encoding != 'GB2312'):\n",
|
||||
"# fileNum_errors += 1\n",
|
||||
"# with open('output_error.txt', 'a') as f:\n",
|
||||
"# print(\"%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s\"%(csv_file,detected_encoding,fileNum_errors), file = f)\n",
|
||||
"# print(\"%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s\"%(csv_file,detected_encoding,fileNum_errors))\n",
|
||||
"# # print(\"%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式\"%(csv_file,detected_encoding))\n",
|
||||
"# else:\n",
|
||||
"# fileNum_corrects += 1\n",
|
||||
"# with open('output.txt', 'a') as f:\n",
|
||||
"# print(\"%s当前文件为gbk或者GB2312格式,无需要转换,正确总数为%s\"%(csv_file, fileNum_corrects), file = f)\n",
|
||||
"# if fileNum_errors >0:\n",
|
||||
"# print(\"存在错误文件,请核查!!!\")\n",
|
||||
" \n",
|
||||
"# print(\"查询完毕!!!\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "1f6e93e2",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"merged_rs_df = pd.read_csv('D:\\data_transfer\\data_up_merged\\大商所\\j888\\j888_up_2020.csv', encoding='utf', low_memory=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "33b31d28",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"merged_rs_df.replace([np.inf, -np.inf], np.nan)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "b2df07dd",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "febd8fc4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# # 检测NaN值\n",
|
||||
"# nan_mask = df['A'].isna()\n",
|
||||
"# print(df[nan_mask])\n",
|
||||
" \n",
|
||||
"# # 检测无穷值\n",
|
||||
"# inf_mask = df['A'].isinf()\n",
|
||||
"# print(df[inf_mask])\n",
|
||||
" \n",
|
||||
"# # 如果你想要在整个DataFrame中查找所有的NaN和无穷值,可以使用\n",
|
||||
"# nan_and_inf = df.isna() | df.isinf()\n",
|
||||
"# print(df[nan_and_inf])\n",
|
||||
"\n",
|
||||
"# 检测NaN值\n",
|
||||
"nan_mask = merged_rs_df.isna() # merged_rs_df['成交量']\n",
|
||||
"print(merged_rs_df[nan_mask])\n",
|
||||
"\n",
|
||||
"nan_index = merged_rs_df[nan_mask].index\n",
|
||||
"print(nan_index)\n",
|
||||
"# nan_index_in_column_A = merged_rs_df['成交量'].isna().index\n",
|
||||
"# print(\"NaN indices in column '成交量':\", nan_index_in_column_A)\n",
|
||||
" \n",
|
||||
"# 检测无穷值\n",
|
||||
"# inf_mask = pd.isinf(merged_rs_df['成交量'])\n",
|
||||
"# print(merged_rs_df[inf_mask])\n",
|
||||
" \n",
|
||||
"# 如果你想要在整个DataFrame中查找所有的NaN和无穷值,可以使用\n",
|
||||
"# nan_and_inf = df.isna() | df.isinf()\n",
|
||||
"# print(df[nan_and_inf])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "98b01523",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.iloc[nan_index]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "8efb7d08",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# merged_rs_df = merged_rs_df.drop(4017556)\n",
|
||||
"merged_rs_df = merged_rs_df.drop(merged_rs_df.index[nan_index])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "71702d76",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.iloc[nan_index]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "60c8bc6c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# merged_rs_df['成交量'].replace(np.nan,0,inplace=True)\n",
|
||||
"# merged_rs_df['成交量'].replace(np.inf,0,inplace=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "808dd229",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df['volume'] = merged_rs_df['成交量'].astype(int)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "0b07ec27",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df['volume'] = merged_rs_df['volume'].astype(int)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "2b4cd024",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"pd.set_option('mode.use_inf_as_na', True)\n",
|
||||
"nan_index_in_column_A = merged_rs_df['volume'].isna().index\n",
|
||||
"print(\"NaN indices in column 'A':\", nan_index_in_column_A)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "55655ddb",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"pd.set_option('mode.use_inf_as_na', True)\n",
|
||||
"inf_index_in_column_A = merged_rs_df['volume'].isinf().index\n",
|
||||
"print(\"Inf indices in column 'A':\", inf_index_in_column_A)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "4761b95d",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"not_int_values = merged_rs_df['成交量'].apply(lambda x: not isinstance(pd.to_numeric(x, errors='coerce'), float))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "f8b97f31",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(merged_rs_df.loc[not_int_values, '成交量'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "0f639067",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.tail()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "59b47b33",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df['main_contract'] = merged_rs_df['main_contract'].astype(str)\n",
|
||||
"merged_rs_df['symbol'] = merged_rs_df['symbol'].astype(str)\n",
|
||||
"merged_rs_df['datetime'] = pd.to_datetime(merged_rs_df['datetime'], errors='coerce', format='%Y-%m-%d %H:%M:%S.%f')\n",
|
||||
"merged_rs_df['lastprice'] = merged_rs_df['lastprice'].astype(float)\n",
|
||||
"merged_rs_df['volume'] = merged_rs_df['volume'].astype(int)\n",
|
||||
"merged_rs_df['bid_p'] = merged_rs_df['bid_p'].astype(float)\n",
|
||||
"merged_rs_df['ask_p'] = merged_rs_df['ask_p'].astype(float)\n",
|
||||
"merged_rs_df['bid_v'] = merged_rs_df['bid_v'].astype(int)\n",
|
||||
"merged_rs_df['ask_v'] = merged_rs_df['ask_v'].astype(int)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "8edc4f4e",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 要查找的值\n",
|
||||
"value_to_find = '0l4276.0'\n",
|
||||
" \n",
|
||||
"# 查找值的索引\n",
|
||||
"index_of_value = merged_rs_df.index[merged_rs_df['volume'] == value_to_find].tolist()\n",
|
||||
"print(index_of_value)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "4a2d43b8",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 要查找的值\n",
|
||||
"value_to_find = '3564.0<70'\n",
|
||||
" \n",
|
||||
"# 查找值的索引\n",
|
||||
"index_of_value = merged_rs_df.index[merged_rs_df['lastprice'] == value_to_find].tolist()\n",
|
||||
"print(index_of_value)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "35491aea",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.loc[9748911-5:9748911+5]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "e9bc02b5",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.loc[9748911,'volume'] = 0 \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "ac80c04d",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.loc[2079318-5:2079318+5]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "60a21f7a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"merged_rs_df.to_csv('D:/ag888_2019.csv', index=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "5fd5e0a8",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# 等差复权\n",
|
||||
"import numpy as np\n",
|
||||
"merged_rs_df['复权因子'] = np.where(merged_rs_df['symbol'] != merged_rs_df['symbol'].shift(), merged_rs_df['ask_p'].shift() - merged_rs_df['bid_p'], 0)\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.10.9"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
@@ -0,0 +1,342 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
from datetime import time as s_time
|
||||
from datetime import datetime
|
||||
import chardet
|
||||
import numpy as np
|
||||
|
||||
# 日盘商品期货交易品种
|
||||
commodity_day_dict = {'bb': s_time(15,00), 'jd': s_time(15,00), 'lh': s_time(15,00), 'l': s_time(15,00), 'fb': s_time(15,00), 'ec': s_time(15,00),
|
||||
'AP': s_time(15,00), 'CJ': s_time(15,00), 'JR': s_time(15,00), 'LR': s_time(15,00), 'RS': s_time(15,00), 'PK': s_time(15,00),
|
||||
'PM': s_time(15,00), 'PX': s_time(15,00), 'RI': s_time(15,00), 'SF': s_time(15,00), 'SM': s_time(15,00), 'UR': s_time(15,00),
|
||||
'WH': s_time(15,00), 'ao': s_time(15,00), 'br': s_time(15,00), 'wr': s_time(15,00),}
|
||||
|
||||
# 夜盘商品期货交易品种
|
||||
commodity_night_dict = {'sc': s_time(2,30), 'bc': s_time(1,0), 'lu': s_time(23,0), 'nr': s_time(23,0),'au': s_time(2,30), 'ag': s_time(2,30),
|
||||
'ss': s_time(1,0), 'sn': s_time(1,0), 'ni': s_time(1,0), 'pb': s_time(1,0),'zn': s_time(1,0), 'al': s_time(1,0), 'cu': s_time(1,0),
|
||||
'ru': s_time(23,0), 'rb': s_time(23,0), 'hc': s_time(23,0), 'fu': s_time(23,0), 'bu': s_time(23,0), 'sp': s_time(23,0),
|
||||
'PF': s_time(23,0), 'SR': s_time(23,0), 'CF': s_time(23,0), 'CY': s_time(23,0), 'RM': s_time(23,0), 'MA': s_time(23,0),
|
||||
'TA': s_time(23,0), 'ZC': s_time(23,0), 'FG': s_time(23,0), 'OI': s_time(23,0), 'SA': s_time(23,0),
|
||||
'p': s_time(23,0), 'j': s_time(23,0), 'jm': s_time(23,0), 'i': s_time(23,0), 'l': s_time(23,0), 'v': s_time(23,0),
|
||||
'pp': s_time(23,0), 'eg': s_time(23,0), 'c': s_time(23,0), 'cs': s_time(23,0), 'y': s_time(23,0), 'm': s_time(23,0),
|
||||
'a': s_time(23,0), 'b': s_time(23,0), 'rr': s_time(23,0), 'eb': s_time(23,0), 'pg': s_time(23,0), 'SH': s_time(23,00)}
|
||||
|
||||
# 金融期货交易品种
|
||||
financial_time_dict = {'IH': s_time(15,00), 'IF': s_time(15,00), 'IC': s_time(15,00), 'IM': s_time(15,00),'T': s_time(15,00), 'TS': s_time(15,00),
|
||||
'TF': s_time(15,00), 'TL': s_time(15,00)}
|
||||
|
||||
# 所有已列入的筛选品种
|
||||
all_dict = {k: v for d in [commodity_day_dict, commodity_night_dict, financial_time_dict] for k, v in d.items()}
|
||||
|
||||
def split_alpha_numeric(string):
|
||||
alpha_chars = ""
|
||||
numeric_chars = ""
|
||||
for char in string:
|
||||
if char.isalpha():
|
||||
alpha_chars += char
|
||||
elif char.isdigit():
|
||||
numeric_chars += char
|
||||
return alpha_chars, numeric_chars
|
||||
|
||||
def merged_old_tickdata(merged_up_df, sp_char, alpha_chars, code_value):
|
||||
# merged_up_df = pd.DataFrame()
|
||||
# merged_up_df,alpha_chars,code_value = merged_old_unprocessed_tickdata(all_csv_files, sp_char)
|
||||
|
||||
while alpha_chars not in all_dict.keys():
|
||||
print("%s期货品种未列入所有筛选条件中!!!"%(code_value))
|
||||
continue
|
||||
|
||||
merged_df = pd.DataFrame()
|
||||
|
||||
merged_df =pd.DataFrame({'main_contract':merged_up_df['统一代码'],'symbol':merged_up_df['合约代码'],'datetime':merged_up_df['时间'],'lastprice':merged_up_df['最新'],'volume':merged_up_df['成交量'],
|
||||
'bid_p':merged_up_df['买一价'],'ask_p':merged_up_df['卖一价'],'bid_v':merged_up_df['买一量'],'ask_v':merged_up_df['卖一量']})
|
||||
|
||||
del merged_up_df
|
||||
|
||||
merged_df['datetime'] = pd.to_datetime(merged_df['datetime'])
|
||||
merged_df['tmp_time'] = merged_df['datetime'].dt.strftime('%H:%M:%S.%f')
|
||||
merged_df['time'] = merged_df['tmp_time'].apply(lambda x: datetime.strptime(x, '%H:%M:%S.%f')).dt.time
|
||||
del merged_df['tmp_time']
|
||||
|
||||
merged_df = filter_tickdata_time(merged_df, alpha_chars)
|
||||
del merged_df['time']
|
||||
merged_df['datetime'] = sorted(merged_df['datetime'])
|
||||
print("%s%s数据生成成功!"%(code_value,sp_char))
|
||||
|
||||
return merged_df
|
||||
|
||||
def merged_new_tickdata(merged_up_df, sp_char, alpha_chars, code_value):
|
||||
# merged_up_df = pd.DataFrame()
|
||||
# merged_up_df,alpha_chars,code_value = merged_new_unprocessed_tickdata(all_csv_files, sp_char)
|
||||
|
||||
while alpha_chars not in all_dict.keys():
|
||||
print("%s期货品种未列入所有筛选条件中!!!"%(code_value))
|
||||
continue
|
||||
|
||||
#日期修正
|
||||
# merged_df['业务日期'] = pd.to_datetime(merged_df['业务日期'])
|
||||
# merged_df['业务日期'] = merged_df['业务日期'].dt.strftime('%Y-%m-%d')
|
||||
# merged_df['最后修改时间'] = pd.to_datetime(merged_df['最后修改时间'])
|
||||
merged_up_df['datetime'] = merged_up_df['业务日期'].astype(str) + ' '+merged_up_df['最后修改时间'].astype(str) + '.' + merged_up_df['最后修改毫秒'].astype(str) # merged_df['最后修改时间'].dt.time.astype(str)
|
||||
# 将'datetime' 列的数据类型更改为 datetime 格式,如果数据转换少8个小时,可以用timedelta处理
|
||||
merged_up_df['datetime'] = pd.to_datetime(merged_up_df['datetime'], errors='coerce', format='%Y-%m-%d %H:%M:%S.%f')
|
||||
#计算瞬时成交量
|
||||
merged_up_df['volume'] = merged_up_df['数量'] - merged_up_df['数量'].shift(1)
|
||||
merged_up_df['volume'] = merged_up_df['volume'].fillna(0)
|
||||
|
||||
merged_df = pd.DataFrame()
|
||||
|
||||
merged_df =pd.DataFrame({'main_contract':merged_up_df['统一代码'],'symbol':merged_up_df['合约代码'],'datetime':merged_up_df['datetime'],'lastprice':merged_up_df['最新价'],'volume':merged_up_df['volume'],
|
||||
'bid_p':merged_up_df['申买价一'],'ask_p':merged_up_df['申卖价一'],'bid_v':merged_up_df['申买量一'],'ask_v':merged_up_df['申卖量一']})
|
||||
|
||||
del merged_up_df
|
||||
|
||||
# merged_df['datetime'] = pd.to_datetime(merged_df['datetime'])
|
||||
merged_df['tmp_time'] = merged_df['datetime'].dt.strftime('%H:%M:%S.%f')
|
||||
merged_df['time'] = merged_df['tmp_time'].apply(lambda x: datetime.strptime(x, '%H:%M:%S.%f')).dt.time
|
||||
del merged_df['tmp_time']
|
||||
|
||||
merged_df = filter_tickdata_time(merged_df, alpha_chars)
|
||||
|
||||
del merged_df['time']
|
||||
# merged_df['datetime'] = sorted(merged_df['datetime'])
|
||||
sorted_merged_df = merged_df.sort_values(by = ['datetime'], inplace=True)
|
||||
print("%s%s数据生成成功!"%(code_value,sp_char))
|
||||
|
||||
return merged_df
|
||||
|
||||
def filter_tickdata_time(filter_df, alpha_chars):
|
||||
|
||||
if alpha_chars in financial_time_dict.keys():
|
||||
drop_index1 = pd.DataFrame().index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 0, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) | (filter_df['time'] < s_time(9, 30, 0, 000000))].index
|
||||
drop_index4 = pd.DataFrame().index
|
||||
print("按照中金所交易时间筛选金融期货品种")
|
||||
|
||||
elif alpha_chars in commodity_night_dict.keys():
|
||||
if commodity_night_dict[alpha_chars] == s_time(23,00):
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) & (filter_df['time'] < s_time(21, 0, 0, 000000))].index
|
||||
drop_index4 = filter_df.loc[(filter_df['time'] > s_time(23, 0, 0, 000000)) | (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
print("按照夜盘截止交易时间为23:00筛选商品期货品种")
|
||||
|
||||
elif commodity_night_dict[alpha_chars] == s_time(1,00):
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) & (filter_df['time'] < s_time(21, 0, 0, 000000))].index
|
||||
drop_index4 = filter_df.loc[(filter_df['time'] > s_time(1, 0, 0, 000000)) & (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
print("按照夜盘截止交易时间为1:00筛选商品期货品种")
|
||||
|
||||
elif commodity_night_dict[alpha_chars] == s_time(2,30):
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) & (filter_df['time'] < s_time(21, 0, 0, 000000))].index
|
||||
drop_index4 = filter_df.loc[(filter_df['time'] > s_time(2, 30, 0, 000000)) & (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
print("按照夜盘截止交易时间为2:30筛选商品期货品种")
|
||||
|
||||
else:
|
||||
print("夜盘截止交易时间未设置或者设置错误!!!")
|
||||
|
||||
elif alpha_chars in commodity_day_dict.keys():
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) | (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
drop_index4 = pd.DataFrame().index
|
||||
print("按照无夜盘筛选商品期货品种")
|
||||
|
||||
else:
|
||||
print("%s期货品种未执行时间筛选中!!!"%(alpha_chars))
|
||||
# 清理不在交易时间段的数据
|
||||
|
||||
# 数据清理
|
||||
filter_df.drop(labels=drop_index1, axis=0, inplace=True)
|
||||
filter_df.drop(drop_index2, axis=0, inplace=True)
|
||||
filter_df.drop(drop_index3, axis=0, inplace=True)
|
||||
filter_df.drop(drop_index4, axis=0, inplace=True)
|
||||
|
||||
return filter_df
|
||||
|
||||
def insert_main_contract(df):
|
||||
# 添加主力连续的合约代码,主力连续为888,指数连续可以用999,次主力连续可以使用889,表头用“统一代码”
|
||||
alpha_chars, numeric_chars = split_alpha_numeric(df.loc[0,'合约代码'])
|
||||
code_value = alpha_chars + "889"
|
||||
print("code_value characters:", code_value)
|
||||
df.insert(loc=0,column="统一代码", value=code_value)
|
||||
|
||||
return df, alpha_chars, code_value
|
||||
|
||||
def merged_old_unprocessed_tickdata(all_csv_files, sp_char):
|
||||
csv_files = [sp_file for sp_file in all_csv_files if sp_char in sp_file]
|
||||
print("csv_files:", csv_files)
|
||||
merged_up_df = pd.DataFrame()
|
||||
dir = os.getcwd()
|
||||
fileNum_errors = 0
|
||||
|
||||
# 循环遍历每个csv文件
|
||||
for file in csv_files:
|
||||
try:
|
||||
# 读取csv文件,并使用第一行为列标题,编译不通过可以改为gbk
|
||||
df = pd.read_csv(file,
|
||||
header=0,
|
||||
# usecols=[ 1, 2, 3, 7, 12, 13, 14, 15],
|
||||
# names=[
|
||||
# "合约代码",
|
||||
# "时间",
|
||||
# "最新",
|
||||
# "成交量",
|
||||
# "买一价",
|
||||
# "卖一价",
|
||||
# "买一量",
|
||||
# "卖一量",
|
||||
# ],
|
||||
encoding='gbk',
|
||||
low_memory= False,
|
||||
# skiprows=0,
|
||||
# parse_dates=['时间'] # 注意此处增加的排序,为了后面按时间排序
|
||||
)
|
||||
except:
|
||||
file_path = os.path.join(dir, file)
|
||||
fileNum_errors += 1
|
||||
with open(file_path, 'rb') as file:
|
||||
data = file.read()
|
||||
|
||||
# 使用chardet检测编码
|
||||
detected_encoding = chardet.detect(data)['encoding']
|
||||
# print("%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(file,detected_encoding,fileNum_errors))
|
||||
print("%s:%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),file_path,detected_encoding,fileNum_errors))
|
||||
|
||||
with open('output_error.txt', 'a') as f:
|
||||
print("%s:%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),file_path,detected_encoding,fileNum_errors), file = f)
|
||||
|
||||
|
||||
# 删除重复行
|
||||
df.drop_duplicates(inplace=True)
|
||||
# 将数据合并到新的DataFrame中
|
||||
merged_up_df = pd.concat([merged_up_df, df], ignore_index=True)
|
||||
|
||||
# 删除重复列
|
||||
merged_up_df.drop_duplicates(subset=merged_up_df.columns.tolist(), inplace=True)
|
||||
# 重置行索引
|
||||
merged_up_df.reset_index(inplace=True, drop=True)
|
||||
|
||||
merged_up_df,alpha_chars,code_value = insert_main_contract(merged_up_df)
|
||||
# 打印提示信息
|
||||
# print("按年份未处理的CSV文件合并成功!")
|
||||
|
||||
return merged_up_df,alpha_chars,code_value
|
||||
|
||||
def merged_new_unprocessed_tickdata(all_csv_files, sp_char):
|
||||
csv_files = [sp_file for sp_file in all_csv_files if sp_char in sp_file]
|
||||
print("csv_files:", csv_files)
|
||||
merged_up_df = pd.DataFrame()
|
||||
dir = os.getcwd()
|
||||
fileNum_errors = 0
|
||||
|
||||
# 循环遍历每个csv文件
|
||||
for file in csv_files:
|
||||
try:
|
||||
# 读取csv文件,并使用第一行为列标题,编译不通过可以改为gbk
|
||||
df = pd.read_csv(
|
||||
file,
|
||||
header=0,
|
||||
# usecols=[0, 1, 4, 11, 20, 21, 22, 23, 24, 25, 43],
|
||||
# names=[
|
||||
# "交易日",
|
||||
# "合约代码",
|
||||
# "最新价",
|
||||
# "数量",
|
||||
# "最后修改时间",
|
||||
# "最后修改毫秒",
|
||||
# "申买价一",
|
||||
# "申买量一",
|
||||
# "申卖价一",
|
||||
# "申卖量一",
|
||||
# "业务日期",
|
||||
# ],
|
||||
encoding='gbk',
|
||||
low_memory= False,
|
||||
# skiprows=0,
|
||||
# parse_dates=['业务日期','最后修改时间','最后修改毫秒'] # 注意此处增加的排序,为了后面按时间排序
|
||||
)
|
||||
except:
|
||||
file_path = os.path.join(dir, file)
|
||||
fileNum_errors += 1
|
||||
with open(file_path, 'rb') as file:
|
||||
data = file.read()
|
||||
|
||||
# 使用chardet检测编码
|
||||
detected_encoding = chardet.detect(data)['encoding']
|
||||
# print("%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(file_path,detected_encoding,fileNum_errors))
|
||||
print("%s:%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),file_path,detected_encoding,fileNum_errors))
|
||||
|
||||
|
||||
with open('output_error.txt', 'a') as f:
|
||||
print("%s:%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),file_path,detected_encoding,fileNum_errors), file = f)
|
||||
|
||||
# 删除重复行
|
||||
df.drop_duplicates(inplace=True)
|
||||
# 将数据合并到新的DataFrame中
|
||||
merged_up_df = pd.concat([merged_up_df, df], ignore_index=True)
|
||||
|
||||
# 删除重复列
|
||||
merged_up_df.drop_duplicates(subset=merged_up_df.columns.tolist(), inplace=True)
|
||||
# 重置行索引
|
||||
merged_up_df.reset_index(inplace=True, drop=True)
|
||||
|
||||
merged_up_df,alpha_chars,code_value = insert_main_contract(merged_up_df)
|
||||
# 打印提示信息
|
||||
# print("按年份未处理的CSV文件合并成功!")
|
||||
|
||||
return merged_up_df,alpha_chars,code_value
|
||||
|
||||
def reinstatement_tickdata(merged_rs_df):
|
||||
merged_rs_df['main_contract'] = merged_rs_df['main_contract'].astype(str)
|
||||
merged_rs_df['symbol'] = merged_rs_df['symbol'].astype(str)
|
||||
merged_rs_df['datetime'] = pd.to_datetime(merged_rs_df['datetime'], errors='coerce', format='%Y-%m-%d %H:%M:%S.%f')
|
||||
# merged_rs_df['lastprice'] = merged_rs_df['lastprice'].astype(float)
|
||||
merged_rs_df['volume'] = merged_rs_df['volume'].astype(int)
|
||||
# merged_rs_df['bid_p'] = merged_rs_df['bid_p'].astype(float)
|
||||
# merged_rs_df['ask_p'] = merged_rs_df['ask_p'].astype(float)
|
||||
merged_rs_df['bid_v'] = merged_rs_df['bid_v'].astype(int)
|
||||
merged_rs_df['ask_v'] = merged_rs_df['ask_v'].astype(int)
|
||||
|
||||
# 等比复权,先不考虑
|
||||
# df['复权因子'] = df['卖一价'].shift() / df['买一价']
|
||||
# df['复权因子'] = np.where(df['合约代码'] != df['合约代码'].shift(), df['卖一价'].shift() / df['买一价'], 1)
|
||||
# df['复权因子'] = df['复权因子'].fillna(1)
|
||||
# df['买一价_adj'] = df['买一价'] * df['复权因子'].cumprod()
|
||||
# df['卖一价_adj'] = df['卖一价'] * df['复权因子'].cumprod()
|
||||
# df['最新_adj'] = df['最新'] * df['复权因子'].cumprod()
|
||||
|
||||
# 等差复权
|
||||
merged_rs_df['复权因子'] = np.where(merged_rs_df['symbol'] != merged_rs_df['symbol'].shift(), merged_rs_df['ask_p'].shift() - merged_rs_df['bid_p'], 0)
|
||||
merged_rs_df['复权因子'] = merged_rs_df['复权因子'].fillna(0)
|
||||
merged_rs_df['bid_p_adj'] = merged_rs_df['bid_p'] + merged_rs_df['复权因子'].cumsum()
|
||||
merged_rs_df['ask_p_adj'] = merged_rs_df['ask_p'] + merged_rs_df['复权因子'].cumsum()
|
||||
merged_rs_df['lastprice_adj'] = merged_rs_df['lastprice'] + merged_rs_df['复权因子'].cumsum()
|
||||
|
||||
# 将调整后的数值替换原来的值
|
||||
merged_rs_df['bid_p'] = merged_rs_df['bid_p_adj'].round(4)
|
||||
merged_rs_df['ask_p'] = merged_rs_df['ask_p_adj'].round(4)
|
||||
merged_rs_df['lastprice'] = merged_rs_df['lastprice_adj'].round(4)
|
||||
|
||||
# 删除多余的值
|
||||
del merged_rs_df['复权因子']
|
||||
del merged_rs_df['bid_p_adj']
|
||||
del merged_rs_df['ask_p_adj']
|
||||
del merged_rs_df['lastprice_adj']
|
||||
|
||||
return merged_rs_df
|
||||
|
||||
# def find_files(all_csv_files):
|
||||
# all_csv_files = sorted(all_csv_files)
|
||||
# sp_old_chars = ['_2019','_2020','_2021']
|
||||
# sp_old_chars = sorted(sp_old_chars)
|
||||
# sp_new_chars = ['_2022','_2023']
|
||||
# sp_new_chars = sorted(sp_new_chars)
|
||||
# csv_old_files = [file for file in all_csv_files if any(sp_char in file for sp_char in sp_old_chars)]
|
||||
# csv_new_files = [file for file in all_csv_files if any(sp_char in file for sp_char in sp_new_chars)]
|
||||
|
||||
# return csv_old_files, csv_new_files
|
||||
@@ -0,0 +1,174 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
from datetime import time as s_time
|
||||
from datetime import datetime
|
||||
import chardet
|
||||
import numpy as np
|
||||
|
||||
# 日盘商品期货交易品种
|
||||
commodity_day_dict = {'bb': s_time(15,00), 'jd': s_time(15,00), 'lh': s_time(15,00), 'l': s_time(15,00), 'fb': s_time(15,00), 'ec': s_time(15,00),
|
||||
'AP': s_time(15,00), 'CJ': s_time(15,00), 'JR': s_time(15,00), 'LR': s_time(15,00), 'RS': s_time(15,00), 'PK': s_time(15,00),
|
||||
'PM': s_time(15,00), 'PX': s_time(15,00), 'RI': s_time(15,00), 'SF': s_time(15,00), 'SM': s_time(15,00), 'UR': s_time(15,00),
|
||||
'WH': s_time(15,00), 'ao': s_time(15,00), 'br': s_time(15,00), 'wr': s_time(15,00),}
|
||||
|
||||
# 夜盘商品期货交易品种
|
||||
commodity_night_dict = {'sc': s_time(2,30), 'bc': s_time(1,0), 'lu': s_time(23,0), 'nr': s_time(23,0),'au': s_time(2,30), 'ag': s_time(2,30),
|
||||
'ss': s_time(1,0), 'sn': s_time(1,0), 'ni': s_time(1,0), 'pb': s_time(1,0),'zn': s_time(1,0), 'al': s_time(1,0), 'cu': s_time(1,0),
|
||||
'ru': s_time(23,0), 'rb': s_time(23,0), 'hc': s_time(23,0), 'fu': s_time(23,0), 'bu': s_time(23,0), 'sp': s_time(23,0),
|
||||
'PF': s_time(23,0), 'SR': s_time(23,0), 'CF': s_time(23,0), 'CY': s_time(23,0), 'RM': s_time(23,0), 'MA': s_time(23,0),
|
||||
'TA': s_time(23,0), 'ZC': s_time(23,0), 'FG': s_time(23,0), 'OI': s_time(23,0), 'SA': s_time(23,0),
|
||||
'p': s_time(23,0), 'j': s_time(23,0), 'jm': s_time(23,0), 'i': s_time(23,0), 'l': s_time(23,0), 'v': s_time(23,0),
|
||||
'pp': s_time(23,0), 'eg': s_time(23,0), 'c': s_time(23,0), 'cs': s_time(23,0), 'y': s_time(23,0), 'm': s_time(23,0),
|
||||
'a': s_time(23,0), 'b': s_time(23,0), 'rr': s_time(23,0), 'eb': s_time(23,0), 'pg': s_time(23,0), 'SH': s_time(23,00)}
|
||||
|
||||
# 金融期货交易品种
|
||||
financial_time_dict = {'IH': s_time(15,00), 'IF': s_time(15,00), 'IC': s_time(15,00), 'IM': s_time(15,00),'T': s_time(15,15), 'TS': s_time(15,15),
|
||||
'TF': s_time(15,15), 'TL': s_time(15,15)}
|
||||
|
||||
# 所有已列入的筛选品种
|
||||
all_dict = {k: v for d in [commodity_day_dict, commodity_night_dict, financial_time_dict] for k, v in d.items()}
|
||||
|
||||
def split_alpha_numeric(string):
|
||||
alpha_chars = ""
|
||||
numeric_chars = ""
|
||||
for char in string:
|
||||
if char.isalpha():
|
||||
alpha_chars += char
|
||||
elif char.isdigit():
|
||||
numeric_chars += char
|
||||
return alpha_chars, numeric_chars
|
||||
|
||||
def merged_new_tickdata(merged_up_df, alpha_chars):
|
||||
merged_up_df['datetime'] = merged_up_df['交易日'].astype(str) + ' '+merged_up_df['最后修改时间'].astype(str) + '.' + merged_up_df['最后修改毫秒'].astype(str) # merged_df['最后修改时间'].dt.time.astype(str)
|
||||
# 将'datetime' 列的数据类型更改为 datetime 格式,如果数据转换少8个小时,可以用timedelta处理
|
||||
merged_up_df['datetime'] = pd.to_datetime(merged_up_df['datetime'], errors='coerce', format='%Y-%m-%d %H:%M:%S.%f')
|
||||
#计算瞬时成交量
|
||||
merged_up_df['volume'] = merged_up_df['数量'] - merged_up_df['数量'].shift(1)
|
||||
merged_up_df['volume'] = merged_up_df['volume'].fillna(0)
|
||||
|
||||
merged_df = pd.DataFrame()
|
||||
|
||||
merged_df =pd.DataFrame({'main_contract':merged_up_df['统一代码'],'symbol':merged_up_df['合约代码'],'datetime':merged_up_df['datetime'],'lastprice':merged_up_df['最新价'],'volume':merged_up_df['数量'],
|
||||
'bid_p':merged_up_df['申买价一'],'ask_p':merged_up_df['申卖价一'],'bid_v':merged_up_df['申买量一'],'ask_v':merged_up_df['申卖量一']})
|
||||
|
||||
del merged_up_df
|
||||
|
||||
# merged_df['datetime'] = pd.to_datetime(merged_df['datetime'])
|
||||
merged_df['tmp_time'] = merged_df['datetime'].dt.strftime('%H:%M:%S.%f')
|
||||
merged_df['time'] = merged_df['tmp_time'].apply(lambda x: datetime.strptime(x, '%H:%M:%S.%f')).dt.time
|
||||
del merged_df['tmp_time']
|
||||
|
||||
merged_df = filter_tickdata_time(merged_df, alpha_chars)
|
||||
|
||||
del merged_df['time']
|
||||
# merged_df['datetime'] = sorted(merged_df['datetime'])
|
||||
sorted_merged_df = merged_df.sort_values(by = ['datetime'], inplace=True)
|
||||
# print("%s%s数据生成成功!"%(code_value,sp_char))
|
||||
|
||||
return merged_df
|
||||
|
||||
def filter_tickdata_time(filter_df, alpha_chars):
|
||||
# 由于落到本地的时间有延迟,建议结束时间延迟1秒。
|
||||
if alpha_chars in financial_time_dict.keys():
|
||||
drop_index1 = pd.DataFrame().index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 500000)) & (filter_df['time'] < s_time(13, 0, 0, 000000))].index
|
||||
if alpha_chars in ['IH', 'IF', 'IC', 'IM']:
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 500000)) | (filter_df['time'] < s_time(9, 30, 0, 000000))].index
|
||||
print("按照中金所股指期货交易时间筛选金融期货品种")
|
||||
else:
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 15, 0, 500000)) | (filter_df['time'] < s_time(9, 30, 0, 000000))].index
|
||||
print("按照中金所国债期货交易时间筛选金融期货品种")
|
||||
drop_index4 = pd.DataFrame().index
|
||||
print("按照中金所交易时间筛选金融期货品种")
|
||||
|
||||
elif alpha_chars in commodity_night_dict.keys():
|
||||
if commodity_night_dict[alpha_chars] == s_time(23,00):
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) & (filter_df['time'] < s_time(21, 0, 0, 000000))].index
|
||||
drop_index4 = filter_df.loc[(filter_df['time'] > s_time(23, 0, 0, 000000)) | (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
print("按照夜盘截止交易时间为23:00筛选商品期货品种")
|
||||
|
||||
elif commodity_night_dict[alpha_chars] == s_time(1,00):
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) & (filter_df['time'] < s_time(21, 0, 0, 000000))].index
|
||||
drop_index4 = filter_df.loc[(filter_df['time'] > s_time(1, 0, 0, 000000)) & (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
print("按照夜盘截止交易时间为1:00筛选商品期货品种")
|
||||
|
||||
elif commodity_night_dict[alpha_chars] == s_time(2,30):
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) & (filter_df['time'] < s_time(21, 0, 0, 000000))].index
|
||||
drop_index4 = filter_df.loc[(filter_df['time'] > s_time(2, 30, 0, 000000)) & (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
print("按照夜盘截止交易时间为2:30筛选商品期货品种")
|
||||
|
||||
else:
|
||||
print("夜盘截止交易时间未设置或者设置错误!!!")
|
||||
|
||||
elif alpha_chars in commodity_day_dict.keys():
|
||||
drop_index1 = filter_df.loc[(filter_df['time'] > s_time(10, 15, 0, 000000)) & (filter_df['time'] < s_time(10, 30, 0, 000000))].index
|
||||
drop_index2 = filter_df.loc[(filter_df['time'] > s_time(11, 30, 0, 000000)) & (filter_df['time'] < s_time(13, 30, 0, 000000))].index
|
||||
drop_index3 = filter_df.loc[(filter_df['time'] > s_time(15, 0, 0, 000000)) | (filter_df['time'] < s_time(9, 0, 0, 000000))].index
|
||||
drop_index4 = pd.DataFrame().index
|
||||
print("按照无夜盘筛选商品期货品种")
|
||||
|
||||
else:
|
||||
print("%s期货品种未执行时间筛选中!!!"%(alpha_chars))
|
||||
# 清理不在交易时间段的数据
|
||||
|
||||
# 数据清理
|
||||
filter_df.drop(labels=drop_index1, axis=0, inplace=True)
|
||||
filter_df.drop(drop_index2, axis=0, inplace=True)
|
||||
filter_df.drop(drop_index3, axis=0, inplace=True)
|
||||
filter_df.drop(drop_index4, axis=0, inplace=True)
|
||||
|
||||
return filter_df
|
||||
|
||||
def insert_main_contract(df):
|
||||
# 添加主力连续的合约代码,主力连续为888,指数连续可以用999,次主力连续可以使用889,表头用“统一代码”
|
||||
alpha_chars, numeric_chars = split_alpha_numeric(df.loc[0,'合约代码'])
|
||||
code_value = alpha_chars + "889"
|
||||
print("code_value characters:", code_value)
|
||||
df.insert(loc=0,column="统一代码", value=code_value)
|
||||
|
||||
return df, alpha_chars, code_value
|
||||
|
||||
def reinstatement_tickdata(merged_rs_df):
|
||||
merged_rs_df['main_contract'] = merged_rs_df['main_contract'].astype(str)
|
||||
merged_rs_df['symbol'] = merged_rs_df['symbol'].astype(str)
|
||||
merged_rs_df['datetime'] = pd.to_datetime(merged_rs_df['datetime'], errors='coerce', format='%Y-%m-%d %H:%M:%S.%f')
|
||||
# merged_rs_df['lastprice'] = merged_rs_df['lastprice'].astype(float)
|
||||
merged_rs_df['volume'] = merged_rs_df['volume'].astype(int)
|
||||
# merged_rs_df['bid_p'] = merged_rs_df['bid_p'].astype(float)
|
||||
# merged_rs_df['ask_p'] = merged_rs_df['ask_p'].astype(float)
|
||||
merged_rs_df['bid_v'] = merged_rs_df['bid_v'].astype(int)
|
||||
merged_rs_df['ask_v'] = merged_rs_df['ask_v'].astype(int)
|
||||
|
||||
# 等比复权,先不考虑
|
||||
# df['复权因子'] = df['卖一价'].shift() / df['买一价']
|
||||
# df['复权因子'] = np.where(df['合约代码'] != df['合约代码'].shift(), df['卖一价'].shift() / df['买一价'], 1)
|
||||
# df['复权因子'] = df['复权因子'].fillna(1)
|
||||
# df['买一价_adj'] = df['买一价'] * df['复权因子'].cumprod()
|
||||
# df['卖一价_adj'] = df['卖一价'] * df['复权因子'].cumprod()
|
||||
# df['最新_adj'] = df['最新'] * df['复权因子'].cumprod()
|
||||
|
||||
# 等差复权
|
||||
merged_rs_df['复权因子'] = np.where(merged_rs_df['symbol'] != merged_rs_df['symbol'].shift(), merged_rs_df['ask_p'].shift() - merged_rs_df['bid_p'], 0)
|
||||
merged_rs_df['复权因子'] = merged_rs_df['复权因子'].fillna(0)
|
||||
merged_rs_df['bid_p_adj'] = merged_rs_df['bid_p'] + merged_rs_df['复权因子'].cumsum()
|
||||
merged_rs_df['ask_p_adj'] = merged_rs_df['ask_p'] + merged_rs_df['复权因子'].cumsum()
|
||||
merged_rs_df['lastprice_adj'] = merged_rs_df['lastprice'] + merged_rs_df['复权因子'].cumsum()
|
||||
|
||||
# 将调整后的数值替换原来的值
|
||||
merged_rs_df['bid_p'] = merged_rs_df['bid_p_adj'].round(4)
|
||||
merged_rs_df['ask_p'] = merged_rs_df['ask_p_adj'].round(4)
|
||||
merged_rs_df['lastprice'] = merged_rs_df['lastprice_adj'].round(4)
|
||||
|
||||
# 删除多余的值
|
||||
del merged_rs_df['复权因子']
|
||||
del merged_rs_df['bid_p_adj']
|
||||
del merged_rs_df['ask_p_adj']
|
||||
del merged_rs_df['lastprice_adj']
|
||||
|
||||
return merged_rs_df
|
||||
@@ -0,0 +1,68 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
from datetime import time as s_time
|
||||
from datetime import datetime
|
||||
import chardet
|
||||
import numpy as np
|
||||
|
||||
|
||||
def split_alpha_numeric(string):
|
||||
alpha_chars = ""
|
||||
numeric_chars = ""
|
||||
for char in string:
|
||||
if char.isalpha():
|
||||
alpha_chars += char
|
||||
elif char.isdigit():
|
||||
numeric_chars += char
|
||||
return alpha_chars, numeric_chars
|
||||
|
||||
|
||||
|
||||
def merged_old_unprocessed_tickdata(all_csv_files, sp_char):
|
||||
csv_files = [sp_file for sp_file in all_csv_files if sp_char in sp_file]
|
||||
print("csv_files:", csv_files)
|
||||
merged_up_df = pd.DataFrame()
|
||||
dir = os.getcwd()
|
||||
fileNum_errors = 0
|
||||
|
||||
# 循环遍历每个csv文件
|
||||
for file in csv_files:
|
||||
try:
|
||||
df = pd.read_csv(file,
|
||||
header=0,
|
||||
encoding='gbk',
|
||||
low_memory= False,
|
||||
# skiprows=0,
|
||||
# parse_dates=['时间'] # 注意此处增加的排序,为了后面按时间排序
|
||||
)
|
||||
except:
|
||||
file_path = os.path.join(dir, file)
|
||||
fileNum_errors += 1
|
||||
with open(file_path, 'rb') as file:
|
||||
data = file.read()
|
||||
|
||||
# 使用chardet检测编码
|
||||
detected_encoding = chardet.detect(data)['encoding']
|
||||
# print("%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(file,detected_encoding,fileNum_errors))
|
||||
print("%s:%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),file_path,detected_encoding,fileNum_errors))
|
||||
|
||||
with open('output_error.txt', 'a') as f:
|
||||
print("%s:%s当前文件不为gbk格式,其文件格式为%s,需要转换为gbk格式,错误总数为%s"%(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),file_path,detected_encoding,fileNum_errors), file = f)
|
||||
|
||||
|
||||
# 删除重复行
|
||||
df.drop_duplicates(inplace=True)
|
||||
# 将数据合并到新的DataFrame中
|
||||
merged_up_df = pd.concat([merged_up_df, df], ignore_index=True)
|
||||
|
||||
# 删除重复列
|
||||
merged_up_df.drop_duplicates(subset=merged_up_df.columns.tolist(), inplace=True)
|
||||
# 重置行索引
|
||||
merged_up_df.reset_index(inplace=True, drop=True)
|
||||
|
||||
# merged_up_df,alpha_chars,code_value = insert_main_contract(merged_up_df)
|
||||
# 打印提示信息
|
||||
# print("按年份未处理的CSV文件合并成功!")
|
||||
|
||||
return merged_up_df #,alpha_chars,code_value
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
import os
|
||||
|
||||
import requests
|
||||
import time
|
||||
from datetime import datetime
|
||||
from requests.adapters import HTTPAdapter
|
||||
import pandas as pd
|
||||
|
||||
pd.set_option('display.max_rows', 1000)
|
||||
pd.set_option('expand_frame_repr', False) # 当列太多时不换行
|
||||
# 设置命令行输出时的列对齐功能
|
||||
pd.set_option('display.unicode.ambiguous_as_wide', True)
|
||||
pd.set_option('display.unicode.east_asian_width', True)
|
||||
|
||||
|
||||
def requestForNew(url):
|
||||
session = requests.Session()
|
||||
session.mount('http://', HTTPAdapter(max_retries=3))
|
||||
session.mount('https://', HTTPAdapter(max_retries=3))
|
||||
session.keep_alive = False
|
||||
response = session.get(url, headers={'Connection': 'close'}, timeout=30)
|
||||
if response.content:
|
||||
return response
|
||||
else:
|
||||
print("链接失败", response)
|
||||
|
||||
|
||||
def getDate():
|
||||
url = 'http://hq.sinajs.cn/list=sh000001'
|
||||
response = requestForNew(url).text
|
||||
data_date = str(response.split(',')[-4])
|
||||
# 获取上证的指数日期
|
||||
return data_date
|
||||
|
||||
|
||||
# 通过新浪财经获取每日更新的股票代码
|
||||
def getStockCodeForEveryday():
|
||||
df = pd.DataFrame()
|
||||
for page in range(1, 100):
|
||||
# 1~100页,不用担心每天新增
|
||||
url = 'http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=' \
|
||||
+ str(page) + '&num=80&sort=changepercent&asc=0&node=hs_a&symbol=&_s_r_a=page'
|
||||
# print(url)
|
||||
content = requestForNew(url).json()
|
||||
if not content:
|
||||
# if content =[]: 这个写法也可以
|
||||
print("股票信息,获取完毕。")
|
||||
break
|
||||
print("正在读取页面" + str(page))
|
||||
time.sleep(3)
|
||||
df = df.append(pd.DataFrame(content, dtype='float'), ignore_index=True)
|
||||
|
||||
rename_dict = {'symbol': '股票代码', 'code': '交易日期', 'name': '股票名称', 'open': '开盘价',
|
||||
'settlement': '前收盘价', 'trade': '收盘价', 'high': '最高价', 'low': '最低价',
|
||||
'buy': '买一', 'sell': '卖一', 'volume': '成交量', 'amount': '成交额',
|
||||
'changepercent': '涨跌幅', 'pricechange': '涨跌额',
|
||||
'mktcap': '总市值', 'nmc': '流通市值', 'ticktime': '数据更新时间', 'per': 'per', 'pb': '市净率',
|
||||
'turnoverratio': '换手率'}
|
||||
df.rename(columns=rename_dict, inplace=True)
|
||||
tradeDate = getDate()
|
||||
df['交易日期'] = tradeDate
|
||||
df = df[['股票代码', '股票名称', '交易日期', '开盘价', '最高价', '最低价', '收盘价', '前收盘价', '成交量', '成交额', '流通市值', '总市值']]
|
||||
# 把转化成float的code替换成交易日期
|
||||
return df
|
||||
|
||||
|
||||
df = getStockCodeForEveryday()
|
||||
print(df)
|
||||
|
||||
for i in df.index:
|
||||
t = df.iloc[i:i + 1, :]
|
||||
stock_code = t.iloc[0]['股票代码']
|
||||
|
||||
# 构建存储文件路径
|
||||
path = './data/' \
|
||||
+ stock_code + '.csv'
|
||||
# 文件存在,不是新股
|
||||
if os.path.exists(path):
|
||||
t.to_csv(path, header=None, index=False, mode='a', encoding='gbk')
|
||||
# 文件不存在,说明是新股
|
||||
else:
|
||||
# 先将头文件输出
|
||||
pd.DataFrame(columns=['数据由邢不行整理']).to_csv(path, index=False, encoding='gbk')
|
||||
t.to_csv(path, index=False, mode='a', encoding='gbk')
|
||||
print(stock_code)
|
||||
Reference in new issue
Block a user