本文介绍如何使用 Python 的 akshare 包获取股票、指数和场内基金的收盘价,并进行数据处理,以获取线性回归的期望值、残差标准差、斜率、截距、相关系数、P 值和标准误差等相关数据。

通过对线性回归相关数据的分析,量化投资者可以更好地判断市场走向。具体步骤如下:

首先,使用 akshare 包获取所需数据,并将其存储在 pandas 数据框中。然后,使用 pandas 和 numpy 库进行数据处理,计算出线性回归所需的各项数据。最后,使用 statsmodels 库进行线性回归分析,并输出结果。

通过以上步骤,我们可以得到更加清晰、简洁和整体可读性的分析结果,帮助量化投资者更好地进行市场分析和投资决策。

整理代码

import akshare as ak import pandas as pd import numpy as np import csv from scipy import stats from datetime import datetime, timedelta # 获取指数、股票、场内基金的线性回归期望值和残差标准差等 def linear_regression_stock_multi(symbol, kind, years_list): # 参数分别为代码,种类和调取数据年份列表 df_list = [] for many_years in years_list: # 将调取年份列表放入循环 # 获取指定股票近多少年的收盘价数据 today = datetime.now().date() # 获取当前时间 start_date = (today - timedelta(days=365*many_years)).strftime('%Y%m%d') # 获取多少年之前的时间 end_date = today.strftime('%Y%m%d') # 对今天的时间设置取结束时间,总设定格式 if kind == '指数': # 种类包括指数、股票和场内基金,不同种类其函数不同,所以,设置了条件 df = ak.index_zh_a_hist(symbol=symbol, period="daily", start_date=start_date, end_date=end_date) elif kind == '股票': df = ak.stock_zh_a_hist(symbol=symbol, period="daily", start_date=start_date, end_date=end_date, adjust="qfq") # 参数分别表示代码、周期、开始时间,结束时间 是否复权 elif kind == '基金': df = ak.fund_etf_hist_em(symbol=symbol, period="daily", start_date=start_date, end_date=end_date, adjust="qfq") # 计算线性回归期望值和残差的标准差 y = df["收盘"] x = np.arange(len(y)) slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) expected_value = intercept + slope * len(y) # 计算期望值 residuals = y - (intercept + slope * x) # 残差 std_residuals = np.std(residuals) # 残差标准差 # 构建结果DataFrame index=[f"{many_years}year_expected_value", f"{many_years}year_std_residuals", f"{many_years}year_slope", f"{many_years}year_intercept", f"{many_years}year_r_value", f"{many_years}year_p_value", f"{many_years}year_std_err"] data = [expected_value, std_residuals, slope, intercept, r_value, p_value, std_err] # 上面数据分别表示线性回归期望值、残差标准差、斜率、截距、相关系数、P值、标准误差 result_df = pd.DataFrame(data=[data], index=[symbol], columns=index) df_list.append(result_df) result = pd.concat(df_list, axis=1) return result # 通过读取excel中的列“代码”(注意导入的是str,不是int),进行怎么,需要借助自定义函数dustom_functions(code, kind) def get_circulate_xslx_str(kind, file_index_code,sheet): # 参数为导入的excel表格和第几张表 codes = pd.read_excel(file_index_code, sheet_name=sheet, engine='openpyxl')['代码'].astype(str).tolist() # 读取csv文件,选择“代码”列,并将其转换为列表。int导入的是整数型 all_data = pd.DataFrame() for code in codes: ratios = dustom_functions(code,kind) # 假设有一个名为get_valuation_ratios的函数,返回指定股票的估值比率数据。 all_data = pd.concat([all_data, ratios]) return all_data # 调取自定义函数,进行循环获取数据 def dustom_functions(code, kind): if kind == '线性回归': return linear_regression_stock_multi(code, '股票', [7,3,1]) print(get_circulate_xslx_str('线性回归','测试.xlsx',0)) # print(linear_regression_stock_multi('000300', '指数', [7,3,1]))

此段代码主要是用于获取指数、股票、场内基金的线性回归期望值和残差标准差等,并通过读取 excel 中的列“代码”进行循环获取数据。

其中,linear_regression_stock_multi 函数用于获取指数、股票、场内基金的线性回归期望值和残差标准差等,get_circulate_xslx_str 函数用于通过读取 excel 中的列“代码”,进行怎么,需要借助自定义函数 dustom_functions(code, kind)。

最后,通过调用get_circulate_xslx_str函数,进行循环获取数据,并将结果打印输出。