在 tushare 用python获取600159历史1分钟k线数据
时间: 2024-03-22 16:38:41 浏览: 132
以下是使用 tushare 获取600159历史1分钟k线数据的 Python 代码:
```python
import tushare as ts
# 设置 Token
ts.set_token('your_token_here')
# 初始化接口
pro = ts.pro_api()
# 获取600159历史1分钟k线数据
df = pro.daily(ts_code='600159.SH', start_date='20220103', end_date='20220103', freq='1min')
```
其中,`set_token` 方法需要传入你在 tushare 官网上申请的 Token,`pro_api` 方法则是初始化 tushare 接口。`daily` 方法可以获取股票的日线数据,需要传入股票代码、起止时间和数据频率等参数,返回的是一个 pandas DataFrame 对象,包含了该股票在指定时间范围内的1分钟线数据。在这个例子中,我们将 `start_date` 和 `end_date` 都设置为 '20220103',以获取该股票在2022年1月3日的1分钟线数据。
相关问题
Python如何用tushare获取数据文件
要使用tushare获取数据文件,需要先安装tushare库并在代码中导入。
安装tushare库的命令为:
```
pip install tushare
```
导入tushare库的代码为:
```
import tushare as ts
```
获取数据文件的方法有很多种,以下是几个示例:
1. 获取某只股票历史K线数据,并保存成csv文件
```
# 获取000001股票的历史K线数据,保存成csv文件
df = ts.get_hist_data('000001')
df.to_csv('000001.csv')
```
2. 获取某只股票的实时行情数据,并保存成csv文件
```
# 获取000001股票的实时行情数据,保存成csv文件
df = ts.get_realtime_quotes('000001')
df.to_csv('000001.csv')
```
3. 获取某个日期范围内的交易日历数据,并保存成csv文件
```
# 获取2021年1月1日到2021年12月31日的交易日历数据,保存成csv文件
df = ts.trade_cal(start_date='20210101', end_date='20211231')
df.to_csv('trade_cal.csv')
```
以上仅是几个示例,tushare库还提供了很多其他的数据获取方法,具体可以查看官方文档。
使用tushare pro获取上证仍在交易股票列表,并获取列表中所有股票历时k线数据,一次性保存至另一台电脑(192.168.1.5)mysql中,如果mysql中没有该数据则创建数据库,以后每天下午18点更新当天或缺失的k线数据。
以下是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线数据。
阅读全文