|
👉博__主👈:米码收割机👉技__能👈:C++/Python语言👉公众号👈:测试开发自动化【获取源码+商业合作】👉荣__誉👈:阿里云博客专家博主、51CTO技术博主👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】目录【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】一、设计要求二、设计思路预测股票走势马科维茨资产组合理论时间序列分析配对交易回测三因子策略一、设计要求选三只股票2024年2月1日至2024年5月30日的数据进行如下分析:1.分析三只股票的价格走势,并对未来价格走势进行预测。(1)从公司、行业、宏观角度进行分析2)从技术指标角度定性预测其走势并。2.对所选数据,利用马科维茨资产组合理论求其最小方差前沿。(1)对其收益率进行作图和相关系数分析;(5分)(2)绘制最小方差前沿曲线;(3)将数据分为测试集与训练集,用训练集的数据得到最优资产配比,利用测试集来验证最优资产配比是否有效并进行分析。3.选取其中一只股票进行时间序列分析(1)对股票数据进行分析,建立适合的模型(2)对该股票未来一个月的价格进行预测👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈4.以上述股票进行配对交易(1)设定形成期和交易期,在形成期对两只股票对数价格进行协整检验(2)找出配对比例和配对价差,计算价差的平均值和标准差;(3)设定阈值,构造开平仓区间;(4)模拟交易并进行分析。5.使用“聚宽”量化投资平台,回测三因子策略,并对回测结果进行分析。(1)选取2024年2月1日至2024年5月30日为回测区间,展示三因子策略的回测收益图。(2)分析三因子策略的回测收益,包含策略收益、策略阿尔法值、贝塔值、夏普比率、最大回撤等指标。👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈二、设计思路预测股票走势数据预处理转换交易日期为datetime格式df1['trade_date']=pd.to_datetime(df1['trade_date'],format='%Y%m%d')df2['trade_date']=pd.to_datetime(df2['trade_date'],format='%Y%m%d')df3['trade_date']=pd.to_datetime(df3['trade_date'],format='%Y%m%d')123这里的pd.to_datetime函数将三只股票的交易日期字段从字符串格式转换为datetime格式。这一步非常重要,因为它将日期字符串转换为pandas可以理解和操作的日期时间对象,这对后续的时间序列分析非常有用。设置交易日期为索引df1.set_index('trade_date',inplace=True)df2.set_index('trade_date',inplace=True)df3.set_index('trade_date',inplace=True)123接着将交易日期设置为数据框的索引。这一步的目的是为了方便后续的时间序列操作,比如绘图和时间序列分析。通过将日期设为索引,可以更容易地按照时间顺序来处理和展示数据。绘制股票收盘价格走势👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈plt.figure(figsize=(14,7))plt.plot(df1['close'],label='平安银行')plt.plot(df2['close'],label='国农科技')plt.plot(df3['close'],label='世纪星源')plt.title('股票收盘价格走势')plt.xlabel('日期')plt.ylabel('收盘价格')plt.legend()plt.show()123456789绘制了三只股票的收盘价格走势图:1.创建绘图窗口👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈plt.figure(figsize=(14,7))plt.figure函数创建一个新的绘图窗口,并设置图形的大小为14x7英寸。122.绘制每只股票的收盘价格plt.plot(df1['close'],label='平安银行')plt.plot(df2['close'],label='国农科技')plt.plot(df3['close'],label='世纪星源')123plt.plot函数绘制三只股票的收盘价格曲线,并使用label参数为每条曲线添加标签。3.设置图形和轴标签plt.title('股票收盘价格走势')plt.xlabel('日期')plt.ylabel('收盘价格')plt.title函数设置图形的,plt.xlabel和plt.ylabel函数分别设置X轴和Y轴的标签。12344.添加图例plt.legend()plt.legend函数显示图例,以便区分不同股票的价格走势。125.显示图形plt.show()plt.show函数显示图形。12👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈马科维茨资产组合理论收益率作图和相关系数分析plt.figure(figsize=(14,7))plt.plot(returns)plt.title('股票每日收益率')plt.xlabel('日期')plt.ylabel('收益率')plt.legend(returns.columns)plt.show()1234567这部分代码绘制了三只股票的每日收益率图表,以直观地展示不同股票在各个时间点上的收益变化情况。计算相关系数矩阵corr_matrix=returns.corr()print('相关系数矩阵:')12👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈2.2.3最小方差组合mean_returns=returns.mean()cov_matrix=returns.cov()num_assets=len(returns.columns)args=(mean_returns,cov_matrix)defmin_variance(weights):returnportfolio_statistics(weights,mean_returns,cov_matrix)[1]#略....#略....#略....#略....opt_results=minimize(min_variance,init_weights,method='SLSQP',bounds=bounds,constraints=constraints)min_var_weights=opt_results.xmin_var_return,min_var_volatility,_=portfolio_statistics(min_var_weights,mean_returns,cov_matrix)12345678910111213141516通过优化函数minimize求解最小方差组合的权重。设置约束条件保证权重和为1,设置权重边界在0到1之间。最终得到最小方差组合的权重、收益和波动率。👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈2.2.4绘制最小方差前沿曲线defefficient_frontier(mean_returns,cov_matrix,returns_range):efficient_results=[]forretinreturns_range:constraints=({'type':'eq','fun':lambdax:portfolio_return(x,mean_returns)-ret},{'type':'eq','fun':lambdax:np.sum(x)-1})result=minimize(lambdaw:portfolio_volatility(w,cov_matrix),init_weights,method='SLSQP',bounds=bounds,constraints=constraints)efficient_results.append(result)returnefficient_results#略....#略....plt.figure(figsize=(14,7))plt.scatter(efficient_volatilities,returns_range,c='blue',marker='o')plt.scatter(min_var_volatility,min_var_return,c='red',marker='*',s=100)plt.title('最小方差前沿曲线')plt.xlabel('波动率')plt.ylabel('收益率')plt.show()123456789101112131415161718192021👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈print(f'训练集最优资产配比:{train_min_var_weights}')print(f'测试集投资组合的预期收益率:{test_portfolio_return}')print(f'测试集投资组合的预期波动率:{test_portfolio_volatility}')123时间序列分析代码的目的是绘制平安银行的收盘价格时间序列图。通过将交易日期作为横坐标,收盘价格作为纵坐标,直观展示了股票价格随时间的变化情况。这一步有助于初步了解股票价格的趋势和波动情况。建立ARIMA模型使用ARIMA模型对平安银行的股票价格进行拟合。ARIMA(df1[‘close’],order=(5,1,0)):指定ARIMA模型的参数(p,d,q),其中p=5表示自回归部分的阶数,d=1表示差分次数,q=0表示移动平均部分的阶数。使用ARIMA模型进行拟合model=ARIMA(df1['close'],order=(5,1,0))model_fit=model.fit()123👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈plt.figure(figsize=(14,7))plt.plot(df1['close'],label='原始数据')plt.plot(model_fit.fittedvalues,color='red',label='拟合值')plt.title('平安银行收盘价格与ARIMA模型拟合结果')plt.xlabel('日期')plt.ylabel('收盘价格')plt.legend()plt.show()12345678👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈绘制了原始数据和ARIMA模型拟合值的对比图。通过可视化展示模型的拟合效果,可以直观地看到模型是否能够较好地捕捉股票价格的变化趋势。预测未来价格预测未来一个月的价格forecast_steps=30forecast=model_fit.forecast(steps=forecast_steps)12在这里,使用ARIMA模型预测未来30天(一个月)的股票价格。model_fit.forecast(steps=forecast_steps):生成未来30天的价格预测值。1绘制预测结果👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈plt.figure(figsize=(14,7))plt.plot(df1['close'],label='原始数据')plt.plot(pd.date_range(start=df1.index[-1],periods=forecast_steps,freq='D'),forecast,color='red',label='预测值')plt.title('平安银行未来一个月的价格预测')plt.xlabel('日期')plt.ylabel('收盘价格')plt.legend()plt.show()12345678绘制了原始数据和预测值的对比图。通过这张图,可以直观地看到模型对未来一个月股票价格的预测情况。1.绘制时间序列图:直观展示平安银行股票收盘价格的历史变化情况。2.建立ARIMA模型:对股票数据进行拟合,并评估模型的拟合效果。3.预测未来价格:使用ARIMA模型预测未来一个月的股票价格,并绘制预测结果图。👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈设计逻辑清晰,步骤完整,通过对股票价格进行时间序列分析和预测,为进一步的投资决策提供了科学依据。配对交易log_price1=np.log(df1_formation)log_price2=np.log(df2_formation)12这里使用自然对数转换股票的收盘价格,以便进行协整检验。对数转换有助于平滑时间序列数据,并使得结果更具稳定性。协整检验score,pvalue,_=coint(log_price1,log_price2)print(f'协整检验p-value:{pvalue}')12计算价差的平均值和标准差👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈mean_spread=spread.mean()std_spread=spread.std()print(f'配对比例:{hedge_ratio}')print(f'价差平均值:{mean_spread}')print(f'价差标准差:{std_spread}')12345通过计算价差的平均值和标准差,可以得到价差的统计特性。这些统计特性在后续的开平仓决策中非常重要。1.设定形成期和交易期:划分时间段用于计算配对比例和价差的统计特性,以及进行实际交易。2.计算对数价格并进行协整检验:确定两只股票是否存在长期均衡关系。3.找出配对比例和价差,计算价差的统计特性:通过线性回归计算配对比例,并得到价差的平均值和标准差。这些步骤为后续的配对交易策略提供了坚实的基础,特别是在确定开平仓区间和进行模拟交易时,这些统计特性将发挥关键作用。👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈回测三因子策略合并收益率数据returns=pd.concat([df1['returns'],df2['returns'],df3['returns']],axis=1)returns.columns=['平安银行','国农科技','世纪星源']returns=returns.dropna()123合并了三只股票的收益率数据,并去掉了缺失值。这样可以得到一个包含所有股票收益率的完整数据框,方便后续的计算和分析。2.三因子策略回测平等分配权重weights=np.array([1/3,1/3,1/3])returns['组合收益']=returns.dot(weights)12这里三只股票在组合中的权重相等,每只股票的权重为1/3,并计算组合的收益率。展示三因子策略的回测收益图这里使用平安银行作为市场基准,通过线性回归计算组合收益与市场收益之间的关系,得到阿尔法值和贝塔值。add_constant函数为回归模型添加常数项。OLS函数进行线性回归分析,得到回归模型。alpha表示策略的超额收益,beta表示策略的市场风险。👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈计算夏普比率sharpe_ratio=returns['组合收益'].mean()/returns['组合收益'].std()*np.sqrt(252)1夏普比率用于衡量单位风险所获得的超额回报。这里使用年化收益率和标准差来计算夏普比print(f'策略收益:{cumulative_returns[-1]}')print(f'阿尔法值:{alpha}')print(f'贝塔值:{beta}')print(f'夏普比率:{sharpe_ratio}')print(f'最大回撤:{max_drawdown}')12345👉👉👉源码获取关注【测试开发自动化】公众号,回复“量化策略”获取。👈👈👈
|
|