Files
NewStock/main/data/daily_data.ipynb
liaozhaorun dc29f153ca 1、load model
2、修改update data相关函数
2025-10-13 15:04:48 +08:00

353 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "initial_id",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-10T15:46:10.320268Z",
"start_time": "2025-02-10T15:46:10.310270Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world\n"
]
}
],
"source": [
"print('hello world')\n",
"\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f294ba92-512a-48e6-bbaa-e19401c691ba",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-10T15:46:11.019636Z",
"start_time": "2025-02-10T15:46:10.330271Z"
}
},
"outputs": [],
"source": [
"import tushare as ts\n",
"import pandas as pd\n",
"import time\n",
"\n",
"ts.set_token('3a0741c702ee7e5e5f2bf1f0846bafaafe4e320833240b2a7e4a685f')\n",
"pro = ts.pro_api()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f403cc963e1d39b",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-10T15:47:42.715615Z",
"start_time": "2025-02-10T15:46:11.085042Z"
},
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"任务 000002.SZ 完成\n",
"任务 000004.SZ 完成\n",
"任务 000001.SZ 完成\n",
"任务 000006.SZ 完成\n",
"任务 000007.SZ 完成\n",
"任务 000008.SZ 完成\n",
"任务 000010.SZ 完成\n",
"任务 000009.SZ 完成\n",
"任务 000011.SZ 完成\n",
"任务 000012.SZ 完成\n",
"任务 000016.SZ 完成\n",
"任务 000014.SZ 完成\n",
"任务 000019.SZ 完成\n",
"任务 000020.SZ 完成\n",
"任务 000017.SZ 完成\n",
"任务 000021.SZ 完成\n",
"任务 000025.SZ 完成\n",
"任务 000026.SZ 完成\n",
"任务 000027.SZ 完成\n",
"任务 000028.SZ 完成\n",
"任务 000029.SZ 完成\n",
"任务 000030.SZ 完成\n",
"任务 000031.SZ 完成\n",
"任务 000032.SZ 完成\n",
"任务 000034.SZ 完成\n",
"任务 000035.SZ 完成\n",
"任务 000036.SZ 完成\n",
"任务 000037.SZ 完成\n",
"任务 000039.SZ 完成\n",
"任务 000042.SZ 完成\n",
"任务 000040.SZ 完成\n",
"任务 000045.SZ 完成\n",
"任务 000048.SZ 完成\n",
"任务 000049.SZ 完成\n",
"任务 000050.SZ 完成\n",
"任务 000055.SZ 完成\n",
"任务 000056.SZ 完成\n",
"任务 000060.SZ 完成\n",
"任务 000058.SZ 完成\n",
"任务 000059.SZ 完成\n",
"任务 000061.SZ 完成\n",
"任务 000065.SZ 完成\n",
"任务 000062.SZ 完成\n",
"任务 000063.SZ 完成\n",
"任务 000066.SZ 完成\n",
"任务 000068.SZ 完成\n",
"任务 000069.SZ 完成\n",
"任务 000070.SZ 完成\n",
"任务 000078.SZ 完成\n",
"任务 000088.SZ 完成\n",
"任务 000089.SZ 完成\n",
"任务 000090.SZ 完成\n",
"任务 000096.SZ 完成\n",
"任务 000099.SZ 完成\n",
"任务 000100.SZ 完成\n",
"任务 000151.SZ 完成\n",
"任务 000153.SZ 完成\n",
"任务 000155.SZ 完成\n",
"任务 000156.SZ 完成\n",
"任务 000157.SZ 完成\n",
"任务 000158.SZ 完成\n",
"任务 000159.SZ 完成\n",
"任务 000301.SZ 完成\n",
"任务 000166.SZ 完成\n",
"任务 000333.SZ 完成\n",
"任务 000338.SZ 完成\n",
"任务 000400.SZ 完成\n",
"任务 000401.SZ 完成\n",
"任务 000402.SZ 完成\n",
"任务 000403.SZ 完成\n",
"任务 000404.SZ 完成\n",
"任务 000407.SZ 完成\n",
"任务 000408.SZ 完成\n",
"任务 000409.SZ 完成\n",
"任务 000410.SZ 完成\n",
"任务 000411.SZ 完成\n",
"任务 000415.SZ 完成\n",
"任务 000417.SZ 完成\n",
"任务 000419.SZ 完成\n",
"任务 000420.SZ 完成\n",
"任务 000421.SZ 完成\n",
"任务 000422.SZ 完成\n",
"任务 000423.SZ 完成\n",
"任务 000425.SZ 完成\n",
"任务 000428.SZ 完成\n",
"任务 000426.SZ 完成\n",
"任务 000429.SZ 完成\n",
"任务 000430.SZ 完成\n",
"任务 000488.SZ 完成\n",
"任务 000498.SZ 完成\n",
"任务 000501.SZ 完成\n",
"任务 000503.SZ 完成\n",
"任务 000504.SZ 完成\n",
"任务 000505.SZ 完成\n",
"任务 000506.SZ 完成\n",
"任务 000507.SZ 完成\n",
"任务 000509.SZ 完成\n",
"任务 000510.SZ 完成\n",
"任务 000513.SZ 完成\n",
"任务 000514.SZ 完成\n",
"任务 000516.SZ 完成\n",
"任务 000517.SZ 完成\n",
"任务 000518.SZ 完成\n",
"任务 000519.SZ 完成\n",
"任务 000520.SZ 完成\n",
"任务 000521.SZ 完成\n",
"任务 000523.SZ 完成\n",
"任务 000525.SZ 完成\n",
"任务 000524.SZ 完成\n",
"任务 000526.SZ 完成\n",
"任务 000528.SZ 完成\n",
"任务 000530.SZ 完成\n",
"任务 000529.SZ 完成\n",
"任务 000531.SZ 完成\n",
"任务 000532.SZ 完成\n",
"任务 000533.SZ 完成\n",
"任务 000534.SZ 完成\n",
"任务 000536.SZ 完成\n",
"任务 000537.SZ 完成\n",
"任务 000539.SZ 完成\n",
"任务 000538.SZ 完成\n",
"任务 000541.SZ 完成\n",
"任务 000543.SZ 完成\n",
"任务 000545.SZ 完成\n",
"任务 000544.SZ 完成\n",
"任务 000546.SZ 完成\n",
"任务 000547.SZ 完成\n",
"任务 000550.SZ 完成\n",
"任务 000548.SZ 完成\n",
"任务 000551.SZ 完成\n",
"任务 000552.SZ 完成\n",
"任务 000553.SZ 完成\n",
"任务 000554.SZ 完成\n",
"任务 000555.SZ 完成\n",
"任务 000557.SZ 完成\n",
"任务 000558.SZ 完成\n",
"任务 000559.SZ 完成\n",
"任务 000560.SZ 完成\n",
"任务 000561.SZ 完成\n",
"任务 000563.SZ 完成\n",
"任务 000564.SZ 完成\n",
"任务 000565.SZ 完成\n",
"任务 000566.SZ 完成\n"
]
}
],
"source": [
"\n",
"\n",
"# 读取本地保存的股票列表 CSV 文件(假设文件名为 stocks_data.csv\n",
"from concurrent.futures import ThreadPoolExecutor, as_completed\n",
"\n",
"\n",
"stocks_df = pd.read_csv('/mnt/d/PyProject/NewStock/stocks_list.csv', encoding='utf-8-sig')\n",
"\n",
"# 用于存放所有股票的日线数据(每次获取的 DataFrame\n",
"daily_data_list = []\n",
"\n",
"# API 调用计数和时间控制变量\n",
"api_call_count = 0\n",
"batch_start_time = time.time()\n",
"\n",
"def get_data(ts_code):\n",
" start_time = time.time()\n",
" daily_data = ts.pro_bar(ts_code=ts_code, adj='hfq', start_date='20170101')\n",
" # 如果返回数据不为空,则添加一列标识股票代码\n",
" if time.time() - start_time < 0.15:\n",
" time.sleep(0.5)\n",
" if daily_data is not None and not daily_data.empty:\n",
" return daily_data\n",
"\n",
"\n",
"# 循环遍历每个股票代码并获取数据\n",
"with ThreadPoolExecutor(max_workers=4) as executor:\n",
" future_to_date = {executor.submit(get_data, row['ts_code']): row['ts_code'] for idx, row in stocks_df.iterrows()}\n",
"\n",
" for future in as_completed(future_to_date):\n",
" ts_code = future_to_date[future]\n",
" try:\n",
" result = future.result()\n",
" daily_data_list.append(result)\n",
" print(f\"任务 {ts_code} 完成\")\n",
" except Exception as e:\n",
" print(f\"获取 {ts_code} 数据时出错: {e}\")\n",
" # 计数一次 API 调用\n",
" api_call_count += 1\n",
"\n",
" # 每调用300次检查时间是否少于1分钟如果少于则等待剩余时间\n",
" if api_call_count % 150 == 0:\n",
" elapsed = time.time() - batch_start_time\n",
" if elapsed < 60:\n",
" sleep_time = 60 - elapsed\n",
" print(f\"已调用300次API等待 {sleep_time:.2f} 秒以满足速率限制...\")\n",
" time.sleep(sleep_time)\n",
" # 重置批次起始时间\n",
" batch_start_time = time.time()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "85bdf760cb83fbd3",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-10T15:47:42.761559200Z",
"start_time": "2025-02-07T16:24:09.366158Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"所有日线数据已保存到 daily_data.h5\n"
]
}
],
"source": [
"# 合并所有获取到的日线数据\n",
"if daily_data_list:\n",
" all_daily_data = pd.concat(daily_data_list, ignore_index=True)\n",
" # 使用 HDF5 格式保存到本地文件文件名daily_data.h5key设为 'daily_data'\n",
" all_daily_data.to_hdf('/mnt/d/PyProject/NewStock/data/daily_data.h5', key='daily_data', mode='w', format='table')\n",
" print(\"所有日线数据已保存到 daily_data.h5\")\n",
"else:\n",
" print(\"未获取到任何日线数据。\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3443425bc25f02",
"metadata": {
"ExecuteTime": {
"end_time": "2025-02-10T15:47:42.781521100Z",
"start_time": "2025-02-07T16:25:19.768620Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ts_code trade_date open high low close pre_close \\\n",
"0 000001.SZ 20250822 1601.22 1603.86 1578.82 1589.36 1601.22 \n",
"1 000001.SZ 20250821 1588.04 1606.49 1585.41 1601.22 1590.68 \n",
"2 000001.SZ 20250820 1589.36 1597.27 1578.82 1590.68 1589.36 \n",
"3 000001.SZ 20250819 1594.63 1597.27 1584.09 1589.36 1592.00 \n",
"4 000001.SZ 20250818 1589.36 1601.22 1585.41 1592.00 1592.00 \n",
"\n",
" change pct_chg vol amount \n",
"0 -11.86 -0.74 1644259.77 1979461.311 \n",
"1 10.54 0.66 1217418.25 1477053.292 \n",
"2 1.32 0.08 1048738.53 1265435.773 \n",
"3 -2.64 -0.17 892859.89 1077380.173 \n",
"4 0.00 0.00 1239058.37 1496527.039 \n"
]
}
],
"source": [
"print(all_daily_data[all_daily_data['ts_code'] == '000001.SZ'].head())"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "stock",
"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.13.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}