Skip to content

Yuxiang1990/SQuanTrack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StockQuan - 股票量化分析框架

一个用于股票分析和研究的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/              # 日志目录

安装

  1. 克隆或下载项目

  2. 安装依赖包:

pip install -r requirements.txt

注意:如果使用ta-lib,可能需要额外安装系统依赖:

# Ubuntu/Debian
sudo apt-get install ta-lib

# macOS
brew install ta-lib

快速开始

命令行使用(推荐)

框架提供了统一的命令行入口 main.py,支持多种分析功能:

1. 分析单只股票

# 分析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 --quiet

2. 批量分析多只股票

python main.py batch 600519.SS 000001.SZ AAPL
python main.py batch 600519.SS 000001.SZ --start-date 2023-01-01

3. 查看已记录的股票数据

# 查看所有记录
python main.py records

# 查看指定股票的记录
python main.py records 600519.SS

# 指定显示记录数
python main.py records 600519.SS --limit 20

4. 获取实时行情数据

# 查询单只股票的实时行情
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

5. 获取市场数据(资金流向、板块、情绪因子)

# 获取个股资金流向
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

5. 查看帮助

python main.py help
#
python main.py

Python API使用

from 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'])

使用main.py模块

from main import analyze_stock, analyze_multiple_stocks

# 分析单只股票
result = analyze_stock("600519.SS")

# 批量分析
results = analyze_multiple_stocks(["600519.SS", "000001.SZ"])

模块说明

1. DataFetcher (数据获取)

支持从yfinance等数据源获取股票数据,并自动缓存。

fetcher = DataFetcher(source="yfinance")
data = fetcher.fetch_stock_data("AAPL", start_date="2020-01-01")

2. TechnicalAnalysis (技术分析)

计算各种技术指标:

  • 移动平均线 (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()     # 生成交易信号

3. StockAnalyzer (统计分析)

提供各种统计指标:

  • 收益率(简单收益率、对数收益率)
  • 波动率(滚动波动率、年化波动率)
  • 夏普比率
  • 最大回撤
  • 策略回测
analyzer = StockAnalyzer(data)
stats = analyzer.get_summary_statistics()
sharpe = analyzer.calculate_sharpe_ratio()

4. StockVisualizer (可视化)

生成各种图表:

  • 价格图表(含技术指标)
  • MACD图表
  • 收益率分布图
  • 相关性矩阵(多股票)
visualizer = StockVisualizer(data, "AAPL")
visualizer.plot_price_chart(indicators=['MA20', 'BB_Upper', 'BB_Lower'])
visualizer.plot_macd()

5. StockRecorder (数据记录)

自动记录所有分析过的股票数据到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.SS600519(自动识别)
  • 深圳证券交易所: 000001.SZ000001(自动识别)
  • 北交所: 830946.BJ830946(自动识别,但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文件格式

每个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直接打开)
  • 独立文件: 每个股票一个文件,便于管理和查看

注意事项

  1. 数据源限制:
    • yfinance是免费数据源,可能有频率限制,建议使用缓存功能
    • yfinance不支持北交所股票数据,需要使用akshare或tushare
  2. 时区问题: 数据时间可能涉及时区,注意处理
  3. 数据质量: 不同数据源的数据质量可能不同,建议验证
  4. 回测准确性: 当前回测功能较简单,实际交易需要考虑更多因素(滑点、流动性等)
  5. 数据记录: 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

生成的图表:

  1. 权益曲线图 - 展示策略权益变化和回撤情况
  2. 交易点位图 - 展示所有买卖交易点位
  3. 性能指标汇总图 - 展示各项关键性能指标

图表文件组织

所有图表按照股票代码保存在对应的子文件夹中,便于查看和管理。

文件夹结构:

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。

About

QuanTrack

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published