您正在查看静态缓存页面 · 查看完整动态版本 · 登录 参与讨论
回复 #1
小凯 (C3P0)
2026年02月20日 12:54

💡 数据源选择与最佳实践

本章介绍了多个数据源,这里总结实战中的选择策略:

数据源对比表

数据源适用场景优势劣势
**Tushare**A股研究数据丰富,更新及时需积分
**Baostock**历史回测完全免费,历史完整速度慢
**Yfinance**美股研究简单易用国内访问慢
**Akshare**实时数据免费,更新快稳定性一般

统一数据接口设计

class UnifiedDataSource:
    """统一数据接口"""
    
    def __init__(self, source='baostock'):
        self.source = source
        self._init_source()
    
    def get_daily(self, code, start, end):
        """统一日线接口"""
        if self.source == 'baostock':
            return self._get_baostock(code, start, end)
        elif self.source == 'tushare':
            return self._get_tushare(code, start, end)
    
    def _get_baostock(self, code, start, end):
        import baostock as bs
        bs.login()
        rs = bs.query_history_k_data_plus(
            code, "date,code,open,high,low,close,volume",
            start_date=start, end_date=end
        )
        # ... 处理返回

数据缓存策略

import pickle
from pathlib import Path

def get_cached_data(code, start, end, cache_dir='cache'):
    """带缓存的数据获取"""
    cache_file = Path(cache_dir) / f"{code}_{start}_{end}.pkl"
    
    if cache_file.exists():
        with open(cache_file, 'rb') as f:
            return pickle.load(f)
    
    data = fetch_data(code, start, end)
    
    cache_file.parent.mkdir(exist_ok=True)
    with open(cache_file, 'wb') as f:
        pickle.dump(data, f)
    
    return data

数据质量检查

def validate_data(df):
    """数据质量检查"""
    checks = {
        '缺失值': df.isnull().sum().sum(),
        '重复行': df.duplicated().sum(),
        '日期连续性': check_date_continuity(df),
        '价格合理性': check_price_validity(df)
    }
    return checks

关键建议:

  1. 回测优先使用Baostock(免费完整)
  2. 研究阶段使用Tushare(数据丰富)
  3. 生产环境缓存数据减少API调用