![图片[1] - 100个实用小工具第3——股票分析系统 - 宋马](https://pic.songma.com/blogimg/20251120/34e6037c391b4ff9984b05ba9ff22705.png)
股票分析系统技术文档
项目概述
本项目是一个基于Python的桌面股票分析应用,使用PySide6作为GUI框架,pyqtgraph进行图表绘制,baostock作为数据源。该应用支持股票数据下载、技术指标计算(MACD、KDJ、WR)、图表显示、主题切换等功能。
技术架构
核心技术栈
GUI框架: PySide6 (Qt for Python)
图表库: pyqtgraph
数据源: baostock
数据存储: SQLite
技术指标计算: talib
配置管理: QSettings
项目结构
plaintext
stock_analysis_app/
├── main.py # 应用入口
├── config.py # 配置管理
├── requirements.txt # 依赖包列表
├── ui/
│ ├── main_window.py # 主窗口界面
│ ├── navigation_panel.py # 导航面板
│ ├── parameter_panel.py # 参数面板
│ ├── chart_layout.py # 图表布局
│ ├── download_dialog.py # 下载对话框
│ └── stylesheet_manager.py # 样式表管理
├── logic/
│ ├── baostock_client.py # Baostock客户端封装
│ └── indicators.py # 指标计算
├── widgets/
│ ├── custom_chart.py # 自定义图表组件
│ └── custom_date_axis.py # 自定义日期坐标轴
└── data/
├── stock.db # SQLite数据库
└── cache/ # 缓存目录
核心功能实现
1. 数据下载与缓存
应用使用Baostock作为数据源,通过多线程下载股票数据并存储到SQLite数据库中。为了提高性能,系统实现了数据缓存机制:
python
在DownloadThread中实现数据预处理和缓存
def run(self):
# 下载数据
rs = bs.query_history_k_data_plus(
self.code,
“date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST”,
start_date=self.start_date,
end_date=self.end_date,
frequency=“d”,
adjustflag=“3”
)
# 按年份分组处理并缓存
df['year'] = pd.to_datetime(df['date']).dt.year
years = df['year'].unique()
for year in years:
year_data = df[df['year'] == year].copy()
if not year_data.empty:
# 计算技术指标
year_data = calc.calculate_all_indicators(year_data)
# 保存处理好的数据到缓存文件
self.client.save_processed_data(self.code, year, year_data)
2. 技术指标计算
使用talib库计算MACD、KDJ、WR等技术指标:
python
class IndicatorCalculator:
def calculate_macd(self, data, short=12, long=26, signal=9):
"""计算MACD指标"""
close_prices = np.array(data['close'], dtype=float)
macd, signal_line, hist * 2 = talib.MACD(
close_prices,
fastperiod=short,
slowperiod=long,
signalperiod=signal
)
return macd, signal_line, hist
def calculate_kdj(self, data, n=9, m1=3, m2=3):
"""计算KDJ指标"""
high_prices = np.array(data['high'], dtype=float)
low_prices = np.array(data['low'], dtype=float)
close_prices = np.array(data['close'], dtype=float)
k, d = talib.STOCH(
high_prices, low_prices, close_prices,
fastk_period=n,
slowk_period=m1,
slowk_matype=0,
slowd_period=m2,
slowd_matype=0
)
j = 3 * k - 2 * d
return k, d, j
def calculate_wr(self, data, n=14):
"""计算威廉指标"""
high_prices = np.array(data['high'], dtype=float)
low_prices = np.array(data['low'], dtype=float)
close_prices = np.array(data['close'], dtype=float)
wr = talib.WILLR(high_prices, low_prices, close_prices, timeperiod=n)
return wr
3. 图表显示
使用pyqtgraph绘制K线图和技术指标图表:
python
class CustomChart(QWidget):
def plot_candlestick(self, x_data, open_data, high_data, low_data, close_data):
"""绘制K线图"""
for i in range(len(x_data)):
x = x_data[i]
high = high_data[i]
low = low_data[i]
open_price = open_data[i]
close_price = close_data[i]
# 影线
self.plot_widget.plot([x, x], [low, high], pen=pg.mkPen(color='k', width=1))
# 实体
if close_price > open_price:
# 阳线(上涨)
color = 'g'
else:
# 阴线(下跌)
color = 'r'
self.plot_widget.plot([x, x], [open_price, close_price],
pen=pg.mkPen(color=color, width=3))
4. 主题切换
实现了深色和浅色主题切换功能:
python
class StyleSheetManager:
def apply_theme(self, theme):
"""应用主题"""
app = QApplication.instance()
if theme == "dark":
app.setStyleSheet(self.dark_stylesheet)
elif theme == "light":
app.setStyleSheet(self.light_stylesheet)
5. 年份跳转
实现了年份选择和跳转功能,支持在不同年份间快速切换数据:
python
def sync_year_spinboxes(self, year):
"""同步两个年份选择器的值"""
# 阻止信号循环触发
self.param_panel.year_spinbox.blockSignals(True)
self.chart_layout.year_spinbox.blockSignals(True)
# 同步值
if self.sender() == self.param_panel.year_spinbox:
self.chart_layout.year_spinbox.setValue(year)
elif self.sender() == self.chart_layout.year_spinbox:
self.param_panel.year_spinbox.setValue(year)
# 恢复信号
self.param_panel.year_spinbox.blockSignals(False)
self.chart_layout.year_spinbox.blockSignals(False)
性能优化
数据缓存: 预处理后的数据保存到缓存文件,避免重复计算
多线程: 数据下载使用独立线程,避免阻塞UI
防抖动: 参数调整使用防抖动机制,避免频繁刷新
使用说明
安装依赖: pip install -r requirements.txt
运行应用: python main.py
首次使用会提示下载默认股票数据
可通过参数面板调整技术指标参数
支持深色/浅色主题切换
总结
本项目展示了如何使用Python构建一个功能完整的股票分析应用,涵盖了数据获取、处理、可视化和用户交互等各个方面。通过合理的架构设计和性能优化,提供了流畅的用户体验。




















暂无评论内容