#!/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-06-21'
data0 = this_data = get_data('sh.601003', 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)
# rsi_14 = talib.RSI(close, timeperiod=14)
# # 绘制均线与价格对比
# plt.figure(figsize=(20, 12))
# plt.plot(data.index, close*8, label='Close Price')
# plt.plot(data.index, sma_5*8, label='5-day SMA', color='red')
# plt.plot(data.index, sma_20*8, label='20-day SMA', color='green')
# plt.plot(data.index, rsi_14, label='RSI-14')
# plt.axhline(y=70, color='red', linestyle='--', label='Overbought (70)')
# plt.axhline(y=30, color='green', linestyle='--', label='Oversold (30)')
# plt.legend()
# plt.title('AAPL Price with Moving Averages')
# plt.show()
# 计算14日RSI
rsi_14 = talib.RSI(close, timeperiod=14)
# 绘制RSI与超买超卖线
plt.figure(figsize=(12, 6))
plt.plot(data.index, rsi_14, label='RSI-14')
plt.axhline(y=70, color='red', linestyle='--', label='Overbought (70)')
plt.axhline(y=30, color='green', linestyle='--', label='Oversold (30)')
plt.legend()
plt.title('AAPL RSI Technical Indicator')
plt.show()
02-23
2704

04-13
4681

11-13
1036

11-23
2157
