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,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+fmjWrJlsGoNK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 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
|
||||
|
||||
Reference in new issue
Block a user