量化交易技术篇系列-数据采集

搭建一套量化交易系统涉及多个模块和组件的协同工作,包括数据采集、量化策略、可视化模块、数据处理、回测评估、自动交易等等,本文重点介绍数据采集。
要做量化分析,首先是获取数据,量化交易系统的数据获取和处理通常包括以下步骤:

1. 数据源选择:选择合适的数据源,可以是交易所提供的实时数据、历史数据供应商、财经新闻网站等。

2. 数据下载:从数据源获取数据,可以使用API、数据下载工具或网络爬虫。

3. 数据清洗:对获取的数据进行清洗,包括处理缺失值、异常值和重复数据,确保数据质量。

4. 数据存储:将数据存储在适当的数据存储介质中,如数据库、CSV文件或数据框架。

量化交易中,数据对我们来说非常的主要,尤其在我们实时自动化交易中,实时数据对我们来说非常的主要,数据获取我们可以通过网络爬虫,从东方财富,新浪财经,腾讯财经,同花顺财经获取数据,包括实时股票数据,我们也可以通过金融数据库比如akshare,tushare,baostock调用金融数据接口,以下是

baostock获取数据方法。
import baostock as bs
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import mplfinance as mpf
import datetime

def login_baostock():
    # 登录系统

    lg = bs.login()
    print('login respond error_code:'+lg.error_code)
    print('login respond error_msg:'+lg.error_msg)

def get_info(code, start_date, end_date, frequency="d", adjustflag="3"):
    # 获取历史K线数据

    if frequency == 'd':  # 非日频数据只记录每个时间段末的价格,w=周、m=月、5=5分钟、15=15分钟、30=30分钟、60=60分钟
        fields = "date,open,high,low,close,preclose,volume,amount,turn,pctChg,peTTM,pbMRQ"
    else:
        fields = "date,close,volume,amount,turn,pctChg"
    rs = bs.query_history_k_data_plus(code=code,
        fields=fields,  
        start_date=start_date, end_date=end_date,    
        frequency=frequency, adjustflag=adjustflag)   
        # adjustflag 复权类型,默认不复权:3;后复权;1;前复权:2
    print('query_history_k_data_plus respond error_code:'+rs.error_code)
    print('query_history_k_data_plus respond error_msg:'+rs.error_msg)
    return rs

def get_profit_info(code, year, quarter):
    # 获取个股季频盈利能力数据(还可获取季频营运和偿债能力等各类数据,在这里不重复列举)

    profit_list = []
    rs_profit = bs.query_profit_data(code=code, year=year, quarter=quarter)
    while (rs_profit.error_code == '0') & rs_profit.next():
        profit_list.append(rs_profit.get_row_data())
    result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields)
    return result_profit

def get_result(rs):
    # 打印数据结果

    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    result = pd.DataFrame(data_list, columns=rs.fields)
    return result

def get_fig(result, im_type='candle'):
    # 绘制可视化图表

    data_kline = result.loc[:,('date','open','high','low','close','volume')]
    data_kline.columns = ['Date','Open','High','Low','Close','Volume']
    data_kline.index = pd.DatetimeIndex(data_kline['Date'])
    data_kline[['Open','High','Low','Close','Volume']] = data_kline[['Open','High','Low','Close','Volume']].apply(pd.to_numeric)
    if im_type == 'candle':
        mpf.plot(data_kline, type='candle', volume=True, style='yahoo', mav= (5, 10, 20,30))
    elif im_type == 'line':
        mpf.plot(data_kline, type='line')

def save_to_csv(result, code, frequency, path="D:\\Dataset\\baostocks\\"):
    # 将获取的个股K线数据保存到本地

    if frequency == 'd':
        freq = 'day'
    elif frequency == 'w':
        freq = 'week'
    else:
        freq = 'month'
    name = code[-6:] + '_' + freq + '_kline_info.csv'
    result.to_csv(path + name, index=False)

def save_profit_to_csv(result_profit, path="D:\\Dataset\\baostocks\\"):
    # 保存季频指标

    name = code[-6:] + '_profit_info.csv'
    result_profit.to_csv(path + name, encoding="gbk", index=False)

def logout_baostock():
    # 退出登录

    bs.logout()

if __name__ == '__main__' :
    
    # 参数设置
    code = "sz.002415"   # 以海康为例
    start_date = '2022-01-01'
    date_today = datetime.datetime.now().strftime('%Y-%m-%d') # 当前日期2023年8月13日
    end_date = date_today
    freq = "d"
    ending_year = 2023
    
    login_baostock()
    
    # 获取股票基本数据
    rs1 = get_info(code, start_date, end_date, frequency=freq)
    result_kline = get_result(rs1)
    
    # 获取企业各类季频数据(以季频盈利能力数据为例,获取从设置日期开始往前5年的数据)
    result_profit = get_profit_info(code, ending_year, 4)
    result_profit = result_profit.drop(index=result_profit.index)   
    
    for i in range(5):
        for j in range(4):
            temp = get_profit_info(code, ending_year-i, 4-j)
            result_profit = pd.concat([result_profit,temp])
    
    save_to_csv(result_kline, code, frequency=freq)    # 保存个股基本数据
    save_profit_to_csv(result_profit, path="D:\\Dataset\\baostocks\\")     # 保存季度盈利数据

    get_fig(result_kline)

图片

这个脚本初步实现了数据获取的功能,目前还不太完善,图像不太容易根据需要调整,也暂未包含市盈率等常用技术指标,未来会进一步优化,最终将它集成到整个量化分析代码中。

如果需要详细了解,可以关注微信公众号:老年程序员俱乐部,或加微信号:HUBANG-ClUB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值