Files
sanguo_quant_live/zhaoyun-data/strategies/pure-breakout-20260327/data

纯突破策略数据目录

📊 数据需求说明

1. 核心数据需求

1.1 行情数据

  • 数据源: AKShare/Tushare/聚宽
  • 时间范围: 2015-01-01 至 2026-03-27
  • 覆盖范围: 全市场A股(流动性筛选后)
  • 数据频率: 日频(突破检测)+ 分钟频(信号确认)
  • 数据字段:
    • 开高低收价格
    • 成交量、成交额
    • 复权因子
    • 涨跌幅

1.2 技术指标数据

  • 移动平均线: 5日、10日、20日、60日、200日
  • 布林带: 20日布林带(上轨、中轨、下轨)
  • 相对强弱指数: RSI(14)
  • 成交量指标: 成交量均线、成交量比率

1.3 突破信号数据

  • 价格突破: N日新高、N日新低
  • 成交量突破: 成交量异常放大
  • 技术形态: 头肩顶、双底、三角形等

2. 数据目录结构

data/
├── raw/                          # 原始数据
│   ├── daily/                    # 日线数据
│   │   ├── 2015/
│   │   ├── 2016/
│   │   └── ... 按年份分区
│   ├── minute/                   # 分钟数据(赵云负责)
│   │   ├── 1min/
│   │   ├── 5min/
│   │   └── 15min/
│   └── financial/                # 财务数据(用于过滤)
│       ├── balance_sheet/
│       ├── income_statement/
│       └── cash_flow/
├── processed/                    # 处理后的数据
│   ├── indicators/               # 技术指标
│   │   ├── moving_averages/
│   │   ├── bollinger_bands/
│   │   └── oscillators/
│   ├── breakout_signals/         # 突破信号
│   │   ├── new_high_breakouts/
│   │   ├── range_breakouts/
│   │   └── pattern_breakouts/
│   └── trading_signals/          # 交易信号
│       ├── buy_signals/
│       ├── sell_signals/
│       └── position_signals/
├── intermediate/                 # 中间数据
│   ├── cleaned/                  # 清洗后的数据
│   ├── normalized/               # 标准化数据
│   └── aggregated/               # 聚合数据
└── metadata/                     # 元数据
    ├── stock_list.json           # 股票列表
    ├── industry_classification.json  # 行业分类
    └── data_quality_report.json  # 数据质量报告

3. 数据质量要求

3.1 完整性要求

  • 交易日连续性: 不缺失交易日数据
  • 股票代码完整性: 全市场股票覆盖
  • 数据字段完整性: 必需字段不缺失

3.2 准确性要求

  • 价格逻辑检查: 开<高>低<收
  • 成交量一致性: 成交额 ≈ 成交量 × 价格
  • 财务数据一致性: 三表勾稽关系

3.3 时效性要求

  • 日线数据: 当日18:00前更新
  • 分钟数据: 实时采集(赵云负责)
  • 突破信号: 每日收盘后计算

3.4 数据清洗规则

# data/cleaner.py
class DataCleaner:
    """数据清洗器"""
    
    def clean_price_data(self, df: pd.DataFrame) -> pd.DataFrame:
        """清洗价格数据"""
        # 1. 处理缺失值
        df = df.fillna(method='ffill')
        
        # 2. 价格逻辑检查
        df = df[(df['high'] >= df['low']) & 
                (df['high'] >= df['close']) & 
                (df['low'] <= df['close'])]
        
        # 3. 异常值处理
        price_changes = df['close'].pct_change()
        df = df[price_changes.abs() < 0.20]  # 过滤单日涨跌超过20%
        
        # 4. 成交量异常处理
        volume_ratio = df['volume'] / df['volume'].rolling(20).mean()
        df = df[volume_ratio < 10]  # 过滤异常成交量
        
        return df
    
    def check_data_quality(self, df: pd.DataFrame) -> Dict:
        """检查数据质量"""
        quality_report = {
            'completeness': self._check_completeness(df),
            'consistency': self._check_consistency(df),
            'accuracy': self._check_accuracy(df),
            'timeliness': self._check_timeliness(df)
        }
        return quality_report

4. 数据处理流程

4.1 数据获取流程

# data/acquisition.py
class DataAcquisition:
    """数据获取模块"""
    
    def fetch_daily_data(self, date: str) -> pd.DataFrame:
        """获取日线数据"""
        # 从数据源获取数据
        pass
    
    def fetch_minute_data(self, stock_code: str, timeframe: str) -> pd.DataFrame:
        """获取分钟数据"""
        # 赵云负责的分钟数据采集
        pass
    
    def update_data(self, data_type: str) -> None:
        """更新数据"""
        # 定时更新数据
        pass

4.2 技术指标计算

# data/indicators.py
class TechnicalIndicators:
    """技术指标计算"""
    
    def calculate_moving_averages(self, df: pd.DataFrame) -> pd.DataFrame:
        """计算移动平均线"""
        df['ma5'] = df['close'].rolling(window=5).mean()
        df['ma10'] = df['close'].rolling(window=10).mean()
        df['ma20'] = df['close'].rolling(window=20).mean()
        df['ma60'] = df['close'].rolling(window=60).mean()
        df['ma200'] = df['close'].rolling(window=200).mean()
        return df
    
    def calculate_bollinger_bands(self, df: pd.DataFrame) -> pd.DataFrame:
        """计算布林带"""
        df['bb_middle'] = df['close'].rolling(window=20).mean()
        df['bb_std'] = df['close'].rolling(window=20).std()
        df['bb_upper'] = df['bb_middle'] + 2 * df['bb_std']
        df['bb_lower'] = df['bb_middle'] - 2 * df['bb_std']
        return df
    
    def calculate_rsi(self, df: pd.DataFrame, period: int = 14) -> pd.DataFrame:
        """计算RSI"""
        delta = df['close'].diff()
        gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
        loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
        rs = gain / loss
        df['rsi'] = 100 - (100 / (1 + rs))
        return df

4.3 突破信号检测

# data/breakout_detector.py
class BreakoutDetector:
    """突破信号检测"""
    
    def detect_new_high_breakouts(self, df: pd.DataFrame, period: int = 55) -> pd.DataFrame:
        """检测新高突破"""
        df['new_high'] = df['close'] > df['high'].rolling(window=period).max().shift(1)
        return df
    
    def detect_range_breakouts(self, df: pd.DataFrame, range_period: int = 20) -> pd.DataFrame:
        """检测区间突破"""
        # 计算区间
        df['range_high'] = df['high'].rolling(window=range_period).max()
        df['range_low'] = df['low'].rolling(window=range_period).min()
        
        # 检测突破
        df['range_breakout_up'] = df['close'] > df['range_high'].shift(1)
        df['range_breakout_down'] = df['close'] < df['range_low'].shift(1)
        
        return df
    
    def detect_volume_breakouts(self, df: pd.DataFrame) -> pd.DataFrame:
        """检测成交量突破"""
        df['avg_volume'] = df['volume'].rolling(window=20).mean()
        df['volume_breakout'] = df['volume'] > df['avg_volume'] * 1.5
        return df

5. 数据存储策略

5.1 存储格式

  • Parquet格式: 列式存储,高压缩比
  • 分区存储: 按年份、股票代码分区
  • 压缩算法: Snappy或Zstd压缩

5.2 存储优化

# data/storage.py
class DataStorage:
    """数据存储管理"""
    
    def save_to_parquet(self, df: pd.DataFrame, path: str) -> None:
        """保存为Parquet格式"""
        df.to_parquet(
            path,
            engine='pyarrow',
            compression='snappy',
            index=False
        )
    
    def load_from_parquet(self, path: str) -> pd.DataFrame:
        """从Parquet加载"""
        return pd.read_parquet(path)
    
    def optimize_storage(self, data_dir: str) -> None:
        """优化存储结构"""
        # 合并小文件
        # 重新分区
        # 清理临时文件
        pass

6. 数据API接口

6.1 数据查询接口

# api/data_api.py
class DataAPI:
    """数据API接口"""
    
    def get_stock_data(self, stock_code: str, start_date: str, end_date: str) -> pd.DataFrame:
        """获取股票数据"""
        pass
    
    def get_breakout_signals(self, date: str) -> pd.DataFrame:
        """获取突破信号"""
        pass
    
    def get_market_status(self) -> Dict:
        """获取市场状态"""
        pass
    
    def get_indicators(self, stock_code: str, indicator_type: str) -> pd.DataFrame:
        """获取技术指标"""
        pass

6.2 实时数据流

# api/streaming.py
class DataStreaming:
    """实时数据流"""
    
    def stream_market_data(self, callback):
        """流式传输市场数据"""
        pass
    
    def stream_breakout_signals(self, callback):
        """流式传输突破信号"""
        pass
    
    def stream_trading_signals(self, callback):
        """流式传输交易信号"""
        pass

7. 数据监控

7.1 数据质量监控

# monitoring/data_monitor.py
class DataMonitor:
    """数据监控"""
    
    def monitor_data_quality(self) -> Dict:
        """监控数据质量"""
        quality_metrics = {
            'completeness': self._check_data_completeness(),
            'timeliness': self._check_data_timeliness(),
            'accuracy': self._check_data_accuracy(),
            'consistency': self._check_data_consistency()
        }
        return quality_metrics
    
    def alert_on_data_issues(self, issues: List[str]) -> None:
        """数据问题告警"""
        for issue in issues:
            self._send_alert(f"数据问题: {issue}")

7.2 性能监控

# monitoring/performance_monitor.py
class PerformanceMonitor:
    """性能监控"""
    
    def monitor_query_performance(self) -> Dict:
        """监控查询性能"""
        pass
    
    def monitor_storage_performance(self) -> Dict:
        """监控存储性能"""
        pass
    
    def monitor_processing_performance(self) -> Dict:
        """监控处理性能"""
        pass

8. 当前状态

已完成

  • 数据需求分析
  • 数据目录结构设计
  • 数据清洗规则设计

🔄 进行中 (赵云负责)

  • 分钟数据采集(正在运行)
  • 日线数据整理
  • 技术指标计算

待开始

  • 突破信号数据计算
  • 数据API开发
  • 数据监控系统

9. 联系人

数据负责人: 赵云(数据工程将军)
当前任务: 分钟数据采集、技术指标计算
联系方式: 通过庞统副军师协调

数据更新时间: 2026-03-27
数据状态: 分钟数据采集进行中,日线数据准备就绪