Python量化交易实战-21创建股票数据库并增量获取

auto-trade xuhss 1038℃ 0评论

如何创建股票数据库

主要是把远程服务器的数据本地化,存储起来。

一、为什么要存储?

1.1数据费用

数据服务商的收费标准都是按照“数据量”收费的。如果说不搭建数据库的时候,都是从对方的服务器每次获取大量的数据,指不定什么时候又收费了,数据量越大,费用越高,但是我们的数据之前都是获取过的,如果不存储起来,后期优惠重复收费。所以,通过每天获取增量数据,就可以避免数据费用的问题。

1.2获取进度

本地直接获取数据的速度是要远高于远程访问服务器的速度,包括稳定性。

二、如何创建和重获取股票数据库

2.1存储方式

  1. csv文件格式存储:每个表格放置一个数据,简单好用,存取很方便。
  2. MySql MangoDb等数据库

2.2 csv存储

实现思路:

  1. 获取股票列表
  2. 依次存储股票数据
  3. 每天以增量的形式获取数据()

2.2.1 每天以增量的形式获取数据

如何追加数据:a是append的意思,追加数据

df.to_csv(mode=‘a’)

重复获取了 如何去重?

df.drop_duplicates

缺少数据怎么办?

startdate = 最后一个日期

三、实战

3.1用一隻股票做再次獲取測試

創建一個文件用於函數調用

20210615194016 - Python量化交易实战-21创建股票数据库并增量获取

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 補充默認值:

20210616191758 - Python量化交易实战-21创建股票数据库并增量获取

    if end_date is None:
        end_date = datetime.datetime.today()

20210616204810 - Python量化交易实战-21创建股票数据库并增量获取

# 导出股票相关的数据(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創建一個公共函数:

20210616185024 - Python量化交易实战-21创建股票数据库并增量获取

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的方法:

20210616210435 - Python量化交易实战-21创建股票数据库并增量获取

#初始化股票数据库
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创建股票数据库并增量获取

喜欢 (8)

您必须 登录 才能发表评论!