一个用于股票分析和研究的Python框架,为后续量化交易系统开发提供基础。
# 分析单只股票
python main.py analyze 600519.SS
# 批量分析
python main.py batch 600519.SS 000001.SZ
# 查看记录
python main.py records
# 获取实时行情
python main.py realtime AAPL
python main.py realtime AAPL MSFT GOOGL
# 实时监控(每60秒更新)
python main.py realtime AAPL MSFT --monitor
# 获取市场数据
python main.py market fundflow 600519.SS # 资金流向
python main.py market sector # 板块数据
python main.py market sentiment # 市场情绪
python main.py market overview # 市场概况
# 查看帮助
python main.py help- 📊 数据获取: 支持从多种数据源获取股票历史数据和实时数据
- ✅ 历史数据:支持yfinance(美股、部分A股)
- ✅ 实时数据:支持yfinance(美股)、akshare(A股)、tushare(A股)
- ✅ 支持美股、A股(上海、深圳)
- ✅ 支持北交所股票代码识别(yfinance不支持数据,需其他数据源)
- ✅ 自动识别和规范化股票代码格式
- ✅ 实时行情查询和监控功能
- 💰 市场数据: 资金流向、板块数据、情绪因子等风向标数据
- ✅ 个股资金流向(主力、超大单、大单、中单、小单)
- ✅ 板块资金流向和涨跌幅
- ✅ 市场情绪因子(涨停跌停、连板高度、市场热度)
- ✅ 市场整体概况(涨跌统计、成交额)
- 📈 技术分析: 计算各种技术指标(MA、RSI、MACD、布林带、ATR等)
- 📉 统计分析: 收益率、波动率、夏普比率、最大回撤等统计指标
- 🎨 数据可视化: 价格图表、技术指标图、相关性分析等
- 🔍 交易信号: 自动生成基于技术指标的交易信号
- 🧪 策略回测: 简单的策略回测功能
- 💾 数据记录: 自动将所有分析过的股票数据记录到CSV文件
- ✅ 以天为单位记录每日价格、成交量、技术指标等
- ✅ 支持多只股票记录,自动去重
- ✅ 提供查看和查询已记录数据的功能
StockQuan/
├── config.py # 配置文件
├── data_fetcher.py # 数据获取模块
├── technical_analysis.py # 技术分析模块
├── visualization.py # 可视化模块
├── analysis.py # 统计分析模块
├── stock_recorder.py # 股票记录模块
├── realtime_data.py # 实时数据获取模块
├── market_data.py # 市场数据获取模块(资金流向、板块、情绪因子)
├── main.py # 主程序入口(统一分析入口)
├── view_records.py # 查看记录模块
├── analyze_a_stock.py # A股分析脚本(已整合到main.py,保留用于兼容)
├── requirements.txt # 依赖包
├── README.md # 说明文档
├── BEIJING_EXCHANGE.md # 北交所支持说明
├── REALTIME_DATA.md # 实时数据获取指南
├── MARKET_DATA.md # 市场数据获取指南(资金流向、板块、情绪因子)
├── data/ # 数据目录
│ ├── cache/ # 数据缓存
│ └── records/ # 股票分析记录(每个股票一个CSV文件)
├── figures/ # 图表输出目录
└── logs/ # 日志目录
-
克隆或下载项目
-
安装依赖包:
pip install -r requirements.txt注意:如果使用ta-lib,可能需要额外安装系统依赖:
# Ubuntu/Debian
sudo apt-get install ta-lib
# macOS
brew install ta-lib框架提供了统一的命令行入口 main.py,支持多种分析功能:
# 分析A股
python main.py analyze 600519.SS
python main.py analyze 000001.SZ
# 分析美股
python main.py analyze AAPL
python main.py analyze MSFT
# 指定开始日期
python main.py analyze 600519.SS --start-date 2023-01-01
# 静默模式(减少输出)
python main.py analyze 600519.SS --quietpython main.py batch 600519.SS 000001.SZ AAPL
python main.py batch 600519.SS 000001.SZ --start-date 2023-01-01# 查看所有记录
python main.py records
# 查看指定股票的记录
python main.py records 600519.SS
# 指定显示记录数
python main.py records 600519.SS --limit 20# 查询单只股票的实时行情
python main.py realtime AAPL
python main.py realtime 600519.SS --source akshare
# 批量查询多只股票
python main.py realtime AAPL MSFT GOOGL TSLA
# 实时监控模式(持续更新)
python main.py realtime AAPL MSFT --monitor
python main.py realtime AAPL MSFT --monitor --interval 30 # 每30秒更新
# 指定数据源
python main.py realtime 600519.SS --source akshare # A股推荐使用akshare详细说明请参考:REALTIME_DATA.md
# 获取个股资金流向
python main.py market fundflow 600519.SS
# 获取板块数据
python main.py market sector # 所有板块
python main.py market sector --name 新能源 # 特定板块
# 获取市场情绪因子
python main.py market sentiment # 市场整体情绪
python main.py market sentiment 600519.SS # 个股情绪
# 获取市场整体概况
python main.py market overview详细说明请参考:MARKET_DATA.md
python main.py help
# 或
python main.pyfrom data_fetcher import DataFetcher
from technical_analysis import TechnicalAnalysis
from visualization import StockVisualizer
from analysis import StockAnalyzer
# 1. 获取数据
fetcher = DataFetcher()
data = fetcher.fetch_stock_data("AAPL", start_date="2020-01-01")
# 2. 计算技术指标
ta = TechnicalAnalysis(data)
data_with_indicators = ta.calculate_all_indicators()
# 3. 统计分析
analyzer = StockAnalyzer(data_with_indicators)
stats = analyzer.get_summary_statistics()
print(stats)
# 4. 可视化
visualizer = StockVisualizer(data_with_indicators, "AAPL")
visualizer.plot_price_chart(indicators=['MA20', 'MA60'])from main import analyze_stock, analyze_multiple_stocks
# 分析单只股票
result = analyze_stock("600519.SS")
# 批量分析
results = analyze_multiple_stocks(["600519.SS", "000001.SZ"])支持从yfinance等数据源获取股票数据,并自动缓存。
fetcher = DataFetcher(source="yfinance")
data = fetcher.fetch_stock_data("AAPL", start_date="2020-01-01")计算各种技术指标:
- 移动平均线 (MA): MA5, MA10, MA20, MA60, MA120, MA250
- 相对强弱指标 (RSI): 默认14周期
- MACD: 快线、慢线、信号线、柱状图
- 布林带 (Bollinger Bands): 上轨、中轨、下轨
- 平均真实波幅 (ATR): 默认14周期
- 成交量指标: 成交量MA、价量比
ta = TechnicalAnalysis(data)
ta.calculate_all_indicators() # 计算所有指标
signals = ta.get_signals() # 生成交易信号提供各种统计指标:
- 收益率(简单收益率、对数收益率)
- 波动率(滚动波动率、年化波动率)
- 夏普比率
- 最大回撤
- 策略回测
analyzer = StockAnalyzer(data)
stats = analyzer.get_summary_statistics()
sharpe = analyzer.calculate_sharpe_ratio()生成各种图表:
- 价格图表(含技术指标)
- MACD图表
- 收益率分布图
- 相关性矩阵(多股票)
visualizer = StockVisualizer(data, "AAPL")
visualizer.plot_price_chart(indicators=['MA20', 'BB_Upper', 'BB_Lower'])
visualizer.plot_macd()自动记录所有分析过的股票数据到CSV文件:
- 以天为单位记录每日数据
- 包含价格、成交量、技术指标等
- 自动去重,避免重复记录
from stock_recorder import StockRecorder
recorder = StockRecorder()
# 记录股票数据(分析时自动调用)
recorder.record_stock_data(
symbol="600519.SS",
stock_name="贵州茅台",
data=data_with_indicators
)
# 查看已记录的股票
stocks = recorder.get_recorded_stocks()
# 获取指定股票的记录
records = recorder.get_stock_records("600519.SS")在 config.py 中可以修改:
- 默认股票代码
- 数据源配置
- 技术指标参数(MA周期、RSI周期等)
- 目录路径
在 data_fetcher.py 中添加新的数据源方法:
def _fetch_from_new_source(self, symbol, start_date, end_date):
# 实现新数据源的获取逻辑
pass在 technical_analysis.py 中添加新方法:
def calculate_new_indicator(self, period=14):
# 实现新指标的计算逻辑
self.data['NewIndicator'] = ...
return self.data['NewIndicator']在 visualization.py 中添加新方法:
def plot_new_chart(self, save_path=None):
# 实现新的图表绘制逻辑
pass- 美股:
AAPL,MSFT,GOOGL等 - 上海证券交易所:
600519.SS或600519(自动识别) - 深圳证券交易所:
000001.SZ或000001(自动识别) - 北交所:
830946.BJ或830946(自动识别,但yfinance不支持数据)
from data_fetcher import DataFetcher
fetcher = DataFetcher()
# 支持多种格式,会自动规范化
data1 = fetcher.fetch_stock_data("600519") # 自动转换为 600519.SS
data2 = fetcher.fetch_stock_data("600519.SS") # 直接使用
data3 = fetcher.fetch_stock_data("000001") # 自动转换为 000001.SZ
data4 = fetcher.fetch_stock_data("830946") # 自动转换为 830946.BJ(但yfinance不支持)框架已支持北交所股票代码的识别和规范化,但由于yfinance不支持北交所数据,需要使用其他数据源(如akshare、tushare)。
详细说明请参考:BEIJING_EXCHANGE.md
框架会自动将所有分析过的股票数据记录到独立的CSV文件中,每个股票一个文件,避免文件过大。
每个股票都有独立的CSV文件,保存在 data/records/ 目录下:
- 文件命名格式:
{股票代码}_records.csv - 例如:
600519_SS_records.csv,000001_SZ_records.csv,AAPL_records.csv - 特殊字符(如
.)会被替换为下划线
每个CSV文件包含以下列:
- 日期: 交易日期
- 股票代码: 股票代码
- 股票名称: 股票名称
- 价格数据: 开盘价、最高价、最低价、收盘价
- 成交量: 成交量
- 技术指标: MA5/10/20/60/120/250, RSI14, MACD系列, 布林带, ATR14等
- 收益率: 收益率、对数收益率
- 记录时间: 数据记录的时间戳
# 分析股票时会自动记录
python main.py analyze 600519.SS
# 查看所有记录
python main.py records
# 查看指定股票记录
python main.py records 600519.SS --limit 10- 默认位置:
data/records/目录 - 文件命名:
{股票代码}_records.csv(特殊字符替换为下划线) - 自动去重: 相同日期的记录不会重复
- 编码格式: UTF-8 with BOM(支持Excel直接打开)
- 独立文件: 每个股票一个文件,便于管理和查看
- 数据源限制:
- yfinance是免费数据源,可能有频率限制,建议使用缓存功能
- yfinance不支持北交所股票数据,需要使用akshare或tushare
- 时区问题: 数据时间可能涉及时区,注意处理
- 数据质量: 不同数据源的数据质量可能不同,建议验证
- 回测准确性: 当前回测功能较简单,实际交易需要考虑更多因素(滑点、流动性等)
- 数据记录: CSV文件会随着分析次数增加而增大,建议定期备份或清理
框架提供了完善的策略回测功能,支持多种策略类型和详细的性能评估。
# 单股票回测
python main.py backtest 600519.SS --strategy ma
# 带止损止盈的回测
python main.py backtest 600519.SS --strategy rsi --stop-loss 0.05 --take-profit 0.10
# 组合回测(多股票、不同策略和资金比例)
python main.py backtest 600487.SS 600519.SS \
--strategy-list ma rsi \
--capital-ratio 0.6 0.4
# 策略对比
python main.py compare 600519.SS- MA策略 (
ma): 移动平均线交叉策略 - RSI策略 (
rsi): 相对强弱指标策略 - MACD策略 (
macd): MACD指标策略 - 组合策略 (
combined): 多指标组合策略
- ✅ 策略基类: 易于扩展自定义策略
- ✅ 多种预定义策略: MA、RSI、MACD、组合策略
- ✅ 风险管理: 支持止损、止盈、仓位管理
- ✅ 性能评估: 全面的性能指标(收益率、夏普比率、最大回撤、胜率等)
- ✅ 可视化: 权益曲线、交易点位、性能指标图表
- ✅ 策略对比: 同时对比多个策略表现
from backtest import BacktestEngine, MAStrategy
from data_fetcher import DataFetcher
from technical_analysis import TechnicalAnalysis
# 获取数据
fetcher = DataFetcher()
data = fetcher.fetch_stock_data("600519.SS", start_date="2020-01-01")
# 计算指标
ta = TechnicalAnalysis(data)
data_with_indicators = ta.calculate_all_indicators()
# 创建策略
strategy = MAStrategy(fast_period=5, slow_period=20)
# 运行回测
engine = BacktestEngine(
initial_capital=100000,
commission=0.001,
stop_loss=0.05, # 5%止损
take_profit=0.10 # 10%止盈
)
result = engine.run(data_with_indicators, strategy)
# 查看结果
print(f"总收益率: {result['total_return']:.2f}%")
print(f"夏普比率: {result['performance']['sharpe_ratio']:.4f}")from backtest import Strategy
import pandas as pd
class MyStrategy(Strategy):
def generate_signals(self, data: pd.DataFrame) -> pd.DataFrame:
signals = pd.DataFrame(index=data.index)
signals['signal'] = 0
# 实现你的策略逻辑
# signal: 1=买入, -1=卖出, 0=持有
return signals详细示例请参考:backtest_example.py
支持同时对多只股票进行回测,每只股票可以使用不同的策略和资金比例:
# 组合回测示例
python main.py backtest 600487.SS 600519.SS \
--strategy-list ma rsi \
--capital-ratio 0.6 0.4 \
--start-date 2023-01-01功能特性:
- ✅ 支持多股票同时回测
- ✅ 每只股票可使用不同策略
- ✅ 可自定义资金分配比例
- ✅ 自动汇总组合整体表现
- ✅ 显示各股票独立表现和组合表现
详细说明请参考:PORTFOLIO_BACKTEST.md
回测完成后会生成3类图表,详细说明请参考:BACKTEST_VISUALIZATION_GUIDE.md
生成的图表:
- 权益曲线图 - 展示策略权益变化和回撤情况
- 交易点位图 - 展示所有买卖交易点位
- 性能指标汇总图 - 展示各项关键性能指标
所有图表按照股票代码保存在对应的子文件夹中,便于查看和管理。
文件夹结构:
figures/
├── 600487_SS/ # 股票 600487.SS 的所有图表
│ ├── 600487.SS_price_chart.png
│ ├── 600487.SS_MA交叉策略_equity.png
│ └── ...
└── 600519_SS/ # 股票 600519.SS 的所有图表
└── ...
详细说明请参考:FIGURES_STRUCTURE.md
- 更完善的策略回测框架
- 支持更多数据源(tushare、akshare等)
- 实时数据获取(支持yfinance、akshare、tushare)参考
- 机器学习模型集成
- 组合优化
- 风险管理模块
- Web界面 参考
- 数据库存储
- 实盘交易 参考
MIT License
欢迎提交Issue和Pull Request!
如有问题或建议,请创建Issue。