金 融 量 化 分 析 • JoinQuant • 第 二 篇

这篇博客详细介绍了使用Python进行金融量化分析时的数据处理模块,包括获取A股列表、股票行情数据、数据导出、数据库初始化、增量数据获取、CSV和Excel文件读取、数据转换及各种财务、估值、行业专项指标的获取,以及涨跌幅计算和股池构建等。通过这些自定义模块,可以高效地进行金融数据分析。
摘要由CSDN通过智能技术生成


一、自定义数据处理模块

(一)、自定义获取所有A股列表模块

代码如下:

# 获取所有A股列表模块
def get_stock_list():
    """
    这是获取所有股票代码的函数 
    """
    # 使用获取股票基本信息函数——获取所有股票代码
    All_Stock_ID_List = list(get_all_securities(['stock']).index)
    # 返回所有股票代码
    return All_Stock_ID_List

(二)、自定义获取单个股票行情行情数据模块

代码如下:

# 获得单个股票行情数据模块
def get_single_price(stock_code,start_date = None, end_date =None, timefrequency='1d'):
    """ 
    stock_code :'股票代码'
    timefrequency : '1d'(每日)、'1m'(每分钟)
    start_date : '年-月-日'(开始时间)
    end_date : '年-月-日'(结束时间)
    """ 
    # 如果 start_date 为 None 时,则 start_date 取 上市时间
    if start_date is None:
        start_date = get_security_info(stock_code).start_date
    if end_date is None:
        end_date = datetime.datetime.today()
    # 使用获取行情函数
    data = get_price(security = stock_code, start_date = start_date, end_date = end_date, frequency = timefrequency, fill_paused = True, panel = True)
    # 返回目标行情数据
    return data


(三)、自定义导出股票相关数据模块

代码如下:

# 导出股票相关数据模块
def export_data(data,filename,type,mode = None):
    """ 
    type : 存储的文件夹的名称[Finace/Price]
    filename : 文件名称
    data : 数据    
    """
    finaPath = absolutePath + type + '\\' + filename + '.csv'
    data.index.names=['date']
    if mode == 'a':
        data.to_csv(finaPath, mode = mode ,header = False )
        # # 删除重复值
        # 读取已存在数据
        data = pd.read_csv(finaPath)
        # 删除重复值
        data = data.drop_duplicates(subset = ['date'])
        # 存储非重复数据
        data.to_csv(finaPath,index=False)
    else:
        data.to_csv(finaPath)
    print(f'股票 :【 {
     filename} 】 数据封装成功,封装路径:',finaPath)

(四)、自定义初始化股票行情数据库

代码如下:

def init_db():
    """ 
    注意 : 什么都不用填
    """
    # 获取所有股票代码
    stocks_codes = get_stock_list()
    # 存储为CSV文件
    for stock_code in stocks_codes:
            data = get_single_price(stock_code = stock_code)
            export_data(data = data,filename= stock_code, type = 'Price')

(五)、自定义以增量补全的方式获取行情数据模块

代码如下:

# 以增量补全的方式获取行情数据模块
def add_price_data(stock_Code, type):
    """  
    (1)finaPath : 文件路径名
    (2)判断文件是否存在 : 情况1,文件存在时以增量方式获取数据
                         情况2,文件不存在时全下载
    """
    # 查询文件存在情况
    finaPath = absolutePath + type + '\\' + stock_Code + '.csv'
    if os.path.exists(finaPath):
        # 获取已有行情数据的最新日期
        start_date = pd.read_csv(finaPath, usecols = ['date'])['date'].iloc[-1]
        # 判断最新日期
        print(start_date)
        if start_date == '2022-05-13':
            print(f'当前{
     stock_Code}行情数据为最新数据,不需要重复下载')
        else:
            # 获取已有行情数据的最新日期到当日时间的数据
            data = get_single_price(stock_code = stock_Code, start_date = start_date, end_date = datetime.datetime.today())
            # 以增量方式添加已有文件当中
            export_data(data = data, filename = stock_Code, type = type, mode = 'a')
            print(f'当前{
     stock_Code}行情数据已为最新数据')
    else:
        data = get_single_price(stock_code = stock_Code)
        export_data(data = data, filename = stock_Code, type = 'Price')
        print(f'当前{
     stock_Code}行情数据已为最新数据')

(六)、自定义读取【 C S V 】数据模块

代码如下:

# 读取【 C S V 】数据模块
def get_csv_data(filename,type = 'Price'):
    """ 
    name : 文件名称
    type : 存储的文件夹的名称[Finace/Price]   
    """
    finaPath = absolutePath + type + '\\' + filename + '.csv'
    return pd.read_csv(finaPath)

(七)、自定义按时间读取 【 C S V 】 数据模块

代码如下:

# 按时间读取 【 C S V 】 数据模块
def get_time_csv_data
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas_CC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值