在快节奏的金融世界中,获取最新的市场数据对交易者和投资者至关重要。随着算法交易的出现,快速收集、分析并根据市场数据采取行动的能力已成为关键优势。本文将深入探讨一个用于自动化收集和分析股票市场数据的 Python 脚本,突出其在当今金融领域的应用价值。
脚本功能概述此 Python 脚本的主要功能是调用掘金量化 API,实时获取股票市场的集合竞价行情数据,并对这些数据进行预处理和保存。通过分析市场的开盘前几分钟的行情数据,交易者可以更好地理解市场趋势,为当天的交易决策提供数据支持。
代码# coding=utf-8from __future__ import print_function, absolute_importfrom gm.api import *import pandas as pdfrom email.mime.text import MIMETextfrom datetime import datetime, timedeltaimport os# 调用掘金量化api,获取集合竞价每3秒钟的行情数据def prepare_and_save_data(symbol): data = get_instruments(symbols=symbol, df=True)[['pre_close', 'sec_name']] pre_close_value = data['pre_close'].iloc[0] sec_name_value = data['sec_name'].iloc[0] # 获取当前日期的前一天 # current_date = datetime.now().date() - timedelta(days=2) # 获得今日日期 current_date = datetime.now().date() # 将日期转换为字符串 date_str = current_date.strftime('%Y-%m-%d') # 插入到start_time和end_time df = history(symbol=symbol, frequency='tick', start_time=date_str + ' 09:15:00', end_time=date_str + ' 09:25:00', fields='', adjust=ADJUST_PREV, df=True) # print(df) # 打印数据的表头 # print(df.columns) # 定义需要添加到每个 quotes DataFrame 中的列 additional_columns = ['created_at', 'open', 'cum_volume'] # 为每行中的 quotes 创建一个 DataFrame,并添加额外的列 quotes_dfs = [] for index, row in df.iterrows(): quotes_df = pd.DataFrame(row['quotes']) for col in additional_columns: quotes_df[col] = row[col] quotes_dfs.append(quotes_df) # 合并所有的 quotes DataFrame all_quotes_df = pd.concat(quotes_dfs, ignore_index=True) # 根据时间列进行分组,并取每组的第一行 first_rows = all_quotes_df.groupby('created_at').first().reset_index() # 时间转换为没有时区的时间 first_rows['created_at'] = pd.to_datetime(first_rows['created_at']).dt.tz_localize(None) # 计算从 start_time 开始每3秒钟的时间序列 start_time = pd.to_datetime(date_str + ' 09:15:00') end_time = pd.to_datetime(date_str + ' 09:25:00') # end_time = first_rows['created_at'].max() time_series = pd.date_range(start=start_time, end=end_time, freq='3S') # 重建 DataFrame,使用新的时间序列为索引,并前向填充数据 first_rows.set_index('created_at', inplace=True) filled_first_rows = first_rows.reindex(time_series, method='ffill').fillna(0).reset_index() filled_first_rows.rename(columns={'index': 'created_at'}, inplace=True) # 将symbol增加到表中 filled_first_rows['symbol'] = symbol # 添加 pre_close 列和计算 change_ratio 列 filled_first_rows['pre_close'] = pre_close_value filled_first_rows['sec_name'] = sec_name_value filled_first_rows['change_ratio'] = (filled_first_rows['ask_p'] - filled_first_rows['pre_close']) / filled_first_rows['pre_close'] # filled_first_rows.loc[filled_first_rows.index[-1], 'change_ratio'] = (filled_first_rows.loc[filled_first_rows.index[-1], 'open'] - pre_close_value) / pre_close_value return filled_first_rows # 返回填充后的数据if __name__ == '__main__': # 设置token set_token(os.getenv('JJLH_API_KEY')) print(prepare_and_save_data('SZSE.000001'))脚本详细解析初始化和数据获取: 脚本首先通过 gm.api 引入必要的库和函数,然后定义 prepare_and_save_data 函数,该函数负责获取特定股票的预处理数据。使用 get_instruments 函数获取股票的基本信息,如前一交易日的收盘价和股票名称。数据预处理: 根据当前日期生成所需的时间范围,并调用 history 函数获取指定时间内的 tick 数据。然后,脚本遍历这些数据,为每个数据点创建一个包含额外信息的 DataFrame,如创建时间、开盘价和累计成交量。数据整合和分析: 通过合并所有单独的 DataFrame 并对其进行分组和前向填充,脚本生成了一个完整的数据集,该数据集按每 3 秒钟一次的时间序列进行索引。这允许交易者观察到股票价格和成交量在开盘前几分钟内的详细变化。计算变化率: 脚本计算了股票价格相对于前一交易日收盘价的变化比率,为交易者提供了一个重要的市场动态指标。脚本的实际应用通过自动化收集和分析股票市场的集合竞价数据,交易者可以迅速获得开盘前的市场情绪和趋势指标。这些信息对于制定当日的交易策略至关重要,可以帮助交易者在竞争激烈的市场中保持优势。
总结本文介绍的 Python 脚本是金融科技领域自动化数据分析的一个典型例子。通过精确地收集和分析股票市场数据,该脚本提供了一个强大的工具,帮助交易者和投资者做出更加明智的决策。