#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Jun 20 14:12:58 2025
@author: lg
"""
import baostock as bs
import pandas as pd
import talib
import numpy as np
import talib
# import yfinance as yf # 用于获取股票数据
import matplotlib.pyplot as plt
def get_data(code ,start,end):
#### 登陆系统 ####
# 显示登陆返回信息
# print('login respond error_code:'+lg.error_code)
# print('login respond error_msg:'+lg.error_msg)
#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
rs = bs.query_history_k_data_plus(code,
"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
start_date=start, end_date=end,
frequency="d", adjustflag="3")
# print('query_history_k_data_plus respond error_code:'+rs.error_code)
# print('query_history_k_data_plus respond error_msg:'+rs.error_msg)
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
#### 结果集输出到csv文件 ####
# result.to_csv("D:\\history_A_stock_k_data.csv", index=False)
# print(result)
#### 登出系统 ####
return result
def turn_df_float(df):
df1=df[['open', 'high', 'low', 'close', 'preclose', 'volume',
'amount', 'adjustflag', 'turn', 'tradestatus', 'pctChg', 'isST']]
df2=df1.astype(float)
return df2
code_list= ['sh.600992',
'sh.600993',
'sh.600995',
'sh.600996',
'sh.600997',
'sh.600998',
'sh.600999',
'sh.601000',
'sh.601001',
'sh.601002',
'sh.601003',
'sh.601005']
start='2021-01-01'
end='2025-05-21'
data0= this_data=get_data('sh.601002',start,end)
data=turn_df_float(data0)
close = data['close'].values
high = data['high'].values
low = data['low'].values
volume = data['volume'].values
# 简单移动平均线(SMA)
sma_5 = talib.SMA(close, timeperiod=5)
sma_20 = talib.SMA(close, timeperiod=20)
# 指数移动平均线(EMA)
ema_12 = talib.EMA(close, timeperiod=12)
ema_26 = talib.EMA(close, timeperiod=26)
# 绘制均线与价格对比
plt.figure(figsize=(12, 6))
plt.plot(data.index, close, label='Close Price')
plt.plot(data.index, sma_5, label='5-day SMA', color='red')
plt.plot(data.index, sma_20, label='20-day SMA', color='green')
plt.legend()
plt.title('AAPL Price with Moving Averages')
plt.show()
python +baostock +talib 计算移动 平均 ma
于 2025-06-20 15:11:14 首次发布