VMware虚拟机SSH客户端安装——MobarXterm
2026/8/2 3:23:03
在importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt# 设置中文显示plt.rcParams["font.family"]=["SimHei","Microsoft YaHei","SimSun","KaiTi","FangSong"]plt.rcParams["axes.unicode_minus"]=Falseimportakshareasakfromdatetimeimportdatetime,timedeltadeffetch_stock_data(symbol,period='1y'):"""获取股票数据"""end_date=datetime.now().strftime('%Y%m%d')start_date=(datetime.now()-timedelta(days=365)).strftime('%Y%m%d')# 处理股票代码格式,确保符合akshare要求ifnotsymbol.startswith(('sh','sz')):ifsymbol.startswith(('6','9')):symbol=f"sh{symbol}"else:symbol=f"sz{symbol}"# 使用更稳定的stock_zh_a_hist函数获取股票日线数据data=ak.stock_zh_a_hist(symbol=symbol[2:],# 只传股票代码部分,不含sh/szperiod="daily",start_date=start_date,end_date=end_date,adjust="qfq")# 使用前复权价格# 检查数据是否获取成功ifdata.empty:print(f"获取股票{symbol}数据失败,请检查股票代码和网络连接")returnNone# 先转换日期格式if'日期'indata.columns:data[601288'日期']=pd.to_datetime(data['日期'])# 设置日期为索引data.set_index('日期',inplace=True)# 重命名收盘价列if'收盘'indata.columns:data=data.rename(columns={'收盘':'Close'})else:print("数据格式异常,无法处理")returnNonereturndatadefcalculate_ema(data,window=20):"""计算指数移动平均线 EMA"""ema=data['Close'].ewm(span=window,adjust=False).mean()returnemadefcalculate_std(data,window=20):"""计算标准差 STD"""std=data['Close'].rolling(window=window).std()returnstddefplot_analysis(data,ema,std,symbol):"""绘制图表分析结果"""plt.figure(figsize=(14,8))plt.subplot(2,1,1)plt.plot(data['Close'],label='收盘价',color='blue')plt.plot(ema,label='EMA(20)',color='orange')plt.title(f'{symbol}股票价格与EMA分析')plt.legend()plt.subplot(2,1,2)plt.plot(std,label='STD(20)',color='red')plt.title(f'{symbol}股票价格波动性(STD)分析')plt.legend()plt.tight_layout()plt.show()defmain():symbol=input("请输入股票代码(如 000001 或 600000):")data=fetch_stock_data(symbol)# 检查数据获取是否成功ifdataisnotNone:ema=calculate_ema(data)std=calculate_std(data)plot_analysis(data,ema,std,symbol)if__name__=='__main__':main()这里插入代码片我来为您详细解释这个股票分析程序输出的图表和EMA指标的用法:
程序运行后会生成一个包含两个子图的图表:
EMA(Exponential Moving Average)即指数移动平均线,是一种加权移动平均线,对最近的价格给予更多权重,反应更灵敏。
程序中使用的计算公式:
ema=data['Close'].ewm(span=window,adjust=False).mean()span=window:设置计算窗口大小(这里是20天)adjust=False:使用标准的指数移动平均计算公式,不进行调整数学公式:
EMA(t) = Price(t) × k + EMA(t-1) × (1 - k) 其中:k = 2 / (n + 1),n是窗口大小这个程序提供了基础的技术分析工具,您可以根据自己的交易策略进一步优化参数(如调整EMA的窗口大小)或结合其他技术指标(如MACD、RSI等)进行更全面的分析。