使用tushare pro获取上证仍在交易股票列表,并获取列表中所有股票历时k线数据,一次性保存至另一台电脑(192.168.1.5)mysql中,如果mysql中没有该数据则创建数据库,以后每天下午18点更新当天或缺失的k线数据。
时间: 2024-04-29 10:20:56 浏览: 223
以下是Python代码实现:
```python
import tushare as ts
import pymysql
from datetime import datetime, timedelta
# MySQL数据库连接信息
MYSQL_HOST = "192.168.1.5"
MYSQL_PORT = 3306
MYSQL_USER = "root"
MYSQL_PASSWORD = "password"
MYSQL_DATABASE = "stock_data"
# 获取交易日历
pro = ts.pro_api()
trade_cal = pro.trade_cal(exchange="SSE", start_date="20000101", end_date=datetime.now().strftime("%Y%m%d"))
trade_cal = trade_cal[trade_cal["is_open"] == 1]["cal_date"].tolist()
# 获取上证仍在交易股票列表
stock_list = pro.stock_basic(exchange="SSE", list_status="L", fields="ts_code")["ts_code"].tolist()
# 连接MySQL数据库
conn = pymysql.connect(host=MYSQL_HOST, port=MYSQL_PORT, user=MYSQL_USER, password=MYSQL_PASSWORD)
cursor = conn.cursor()
# 创建数据库
create_database_sql = f"CREATE DATABASE IF NOT EXISTS {MYSQL_DATABASE} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
cursor.execute(create_database_sql)
conn.commit()
# 切换至指定数据库
use_database_sql = f"USE {MYSQL_DATABASE};"
cursor.execute(use_database_sql)
# 获取所有股票历时k线数据并保存至MySQL数据库
for ts_code in stock_list:
# 查询是否已有该股票数据
query_sql = f"SELECT ts_code FROM daily WHERE ts_code='{ts_code}';"
cursor.execute(query_sql)
result = cursor.fetchone()
# 如果没有该股票数据则新建数据表
if not result:
create_table_sql = f"CREATE TABLE IF NOT EXISTS daily (id INT(11) NOT NULL AUTO_INCREMENT, ts_code VARCHAR(10) NOT NULL, trade_date DATE NOT NULL, open FLOAT(10,2) NOT NULL, high FLOAT(10,2) NOT NULL, low FLOAT(10,2) NOT NULL, close FLOAT(10,2) NOT NULL, pre_close FLOAT(10,2) NOT NULL, change FLOAT(10,2) NOT NULL, pct_chg FLOAT(10,2) NOT NULL, vol FLOAT(20,2) NOT NULL, amount FLOAT(20,2) NOT NULL, PRIMARY KEY (id));"
cursor.execute(create_table_sql)
conn.commit()
# 获取该股票历史k线数据
start_date = "20000101"
query_sql = f"SELECT MAX(trade_date) FROM daily WHERE ts_code='{ts_code}';"
cursor.execute(query_sql)
result = cursor.fetchone()
if result[0]:
start_date = (datetime.strptime(result[0], "%Y-%m-%d") + timedelta(days=1)).strftime("%Y%m%d")
daily_data = pro.daily(ts_code=ts_code, start_date=start_date)
# 插入数据至MySQL数据库
for index, row in daily_data.iterrows():
trade_date = datetime.strptime(row["trade_date"], "%Y-%m-%d").strftime("%Y-%m-%d")
open_price = row["open"]
high_price = row["high"]
low_price = row["low"]
close_price = row["close"]
pre_close_price = row["pre_close"]
change_price = row["change"]
pct_chg = row["pct_chg"]
vol = row["vol"]
amount = row["amount"]
insert_sql = f"INSERT INTO daily (ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, vol, amount) VALUES ('{ts_code}', '{trade_date}', {open_price}, {high_price}, {low_price}, {close_price}, {pre_close_price}, {change_price}, {pct_chg}, {vol}, {amount});"
cursor.execute(insert_sql)
conn.commit()
# 关闭MySQL连接
cursor.close()
conn.close()
```
以上代码会将股票历史k线数据保存至名为`daily`的数据表中,数据表结构如下:
| 列名 | 数据类型 | 描述 |
| --- | --- | --- |
| id | INT(11) | 自增编号 |
| ts_code | VARCHAR(10) | 股票代码 |
| trade_date | DATE | 交易日期 |
| open | FLOAT(10,2) | 开盘价 |
| high | FLOAT(10,2) | 最高价 |
| low | FLOAT(10,2) | 最低价 |
| close | FLOAT(10,2) | 收盘价 |
| pre_close | FLOAT(10,2) | 昨收价 |
| change | FLOAT(10,2) | 涨跌额 |
| pct_chg | FLOAT(10,2) | 涨跌幅 |
| vol | FLOAT(20,2) | 成交量(手) |
| amount | FLOAT(20,2) | 成交额(千元) |
每天下午18点更新当天或缺失的k线数据可以通过设置定时任务实现,例如在Linux系统中使用`crontab`命令:
```
0 18 * * * /usr/bin/python3 /path/to/python/script.py
```
以上命令会在每天下午18点自动执行Python脚本,更新当天或缺失的k线数据。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)