文章目录
显示
如何创建股票数据库
主要是把远程服务器的数据本地化,存储起来。
一、为什么要存储?
1.1数据费用
数据服务商的收费标准都是按照“数据量”收费的。如果说不搭建数据库的时候,都是从对方的服务器每次获取大量的数据,指不定什么时候又收费了,数据量越大,费用越高,但是我们的数据之前都是获取过的,如果不存储起来,后期优惠重复收费。所以,通过每天获取增量数据,就可以避免数据费用的问题。
1.2获取进度
本地直接获取数据的速度是要远高于远程访问服务器的速度,包括稳定性。
二、如何创建和重获取股票数据库
2.1存储方式
- csv文件格式存储:每个表格放置一个数据,简单好用,存取很方便。
- MySql MangoDb等数据库
2.2 csv存储
实现思路:
- 获取股票列表
- 依次存储股票数据
- 每天以增量的形式获取数据()
2.2.1 每天以增量的形式获取数据
如何追加数据:a是append
的意思,追加数据
df.to_csv(mode=‘a’)
重复获取了 如何去重?
df.drop_duplicates
缺少数据怎么办?
startdate = 最后一个日期
三、实战
3.1用一隻股票做再次獲取測試
創建一個文件用於函數調用
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
import Data.Stock as st
code = '000001.XSHG'
#先获取初始数据用于验证
# data = st.get_single_price(stock_code=code, timefrequency='daily', start_date='2021-01-01', end_date='2021-02-01')
# #存入csv中
# st.export_data(data=data, filename=code, type='Price')
# 获取数据
st.update_daily_price(code, 'Price')
首先 在stock.py 補充默認值:
if end_date is None:
end_date = datetime.datetime.today()
# 导出股票相关的数据(type:存储的文件夹的名称[Finace/Price])
def export_data(data, filename, type, mode=None):
finalname = absolutePath + type + '\\' + filename + '.csv'
data.index.names = ['date']
if mode == 'a':
data.to_csv(finalname, mode=mode, header=False)
# 刪除重复值
data = pd.read_csv(finalname)
data = data.drop_duplicates(subset=['date']) # 以日期列为准
data.to_csv(finalname) # 再次写入
else:
data.to_csv(finalname)
print('保存成功,存储路径是:', finalname)
在stock.py
創建一個公共函数:
import datetime
import os
# 每日获取数据
def update_daily_price(stockCode, type):
# 0是否存在文件:不存在-再次获取,存在-3.2
finalname = absolutePath + type + '\\' + stockCode + '.csv'
if os.path.exists(finalname):
# 1获取增量数据(code, startdate=对应股票csv中日期,enddate=今天)
startdate = pd.read_csv(finalname, usecols=['date'])['date'].iloc[-1]
print(startdate)
df = get_single_price(stockCode, 'daily', startdate, datetime.datetime.today())
# 2追加到已有文件中(是否存在文件:创建csv,追加数据)
export_data(df, stockCode, 'Price', 'a')
else:
# 再次获取股票行情数据
df = get_single_price(stockCode, 'daily', None, None)
export_data(df, stockCode, 'Price')
3.2 多股票測試
封裝一個init_db的方法:
#初始化股票数据库
def init_db():
# 1.获取所有的股票代码
stocks = get_stock_list()
# 2.存储到csv文件中
for stockCode in stocks:
df = get_single_price(stockCode, 'daily', None, None)
export_data(df, stockCode, 'Price')
init_db方法只需在初始化運行時,调用1次后续只需要再次获取函数即可:
# st.init_db()
#获得所有股票的代码
stocks = st.get_stock_list()
for code in stocks:
st.update_daily_price(code, 'Price')
转载请注明:xuhss » Python量化交易实战-21创建股票数据库并增量获取