prd.md 4.6 KB

需求文件

这是这个项目的需求文件

项目目标

这个项目的目标是通过解析一批pdf文件,抽取里面每天的持仓表格,然后生成对应的买入卖出的数据表格。最后根据查询对应日期的股票价格计算获取资金曲线的项目。

具体流程

  1. 直接在配置文件里配置要解析的pdf的目录和要输出买入卖出表格数据的存储目录
  2. context\20250421投资早参(和谈).pdf是一个示例文档,也就是需要解析的pdf文件
  3. 首先读取所有pdf目录里的pdf文件,抽取文件名的前8位,其实是日期。这个pdf发布时间是每个股票交易日的早上,所以应该记录两个日期,一个是文件名里的"记录日期",一个则是对应的"交易日期",也就是上一个文件名的记录日期。这里要注意,因为周末和节假日不交易,所以周末和节假日没有数据是正常的。
  4. 其次解析对应的文件,找到里面表格数据的所在位置,如果有多个表格,应该是最后一个表格,表格应该有4-5列的数据。这里的pdf可能是扫描件格式的。
  5. 表格里有一列叫"代码",对应的是股票代码,结合前面的"交易日期",就可以获得每个交易日的持仓股票代码。
  6. 利用每个交易日的持仓股票代码,则可以进一步核算出每一个股票的买入交易日和卖出交易日。方法应该是遍历每一个股票代码,把所有出现过的日期罗列出来,找到中间中断的时间段。注意1,这里的中断要和前面通过解析文件名的日期列表进行对比,如果日期压根没出现过,说明那个不是交易日,这不算中断。除此以外那就是真正的中断,那么每一段第一次出现的日期就是买入日期,最后一次出现的日期就是卖出日期。注意2,可能同一个股票被多次买卖。
  7. 到这里先可以保存交易结果的数据了。

项目目录结构

check_ss_strategy_stock/
├── config/
│   └── config.yaml             # 配置文件,包含PDF目录和输出目录路径
├── data/
│   ├── pdfs/                   # 存放输入的PDF文件
│   │   └── 20250421投资早参(和谈).pdf # 示例PDF文件
│   └── output/                 # 存放输出的交易数据文件
│       └── transactions.csv    # 示例输出文件(或其他格式)
├── src/
│   ├── __init__.py
│   ├── config_loader.py
│   │   └── load_config(config_path) # 函数:加载配置文件
│   ├── pdf_processor.py
│   │   └── PdfProcessor          # 类:处理单个PDF文件
│   │       ├── __init__(self, pdf_path)
│   │       ├── extract_record_date(self) # 方法:从文件名提取记录日期
│   │       └── extract_holdings(self)    # 方法:解析PDF,提取持仓表格中的股票代码 (需要处理扫描件)
│   ├── trading_calculator.py
│   │   └── TradingCalculator     # 类:计算交易日期和买卖点
│   │       ├── __init__(self, pdf_files_info) # pdf_files_info: [{'record_date': date, 'codes': [code1, ...]}, ...]
│   │       ├── calculate_trading_dates(self) # 方法:根据记录日期计算交易日期列表,处理非交易日
│   │       └── determine_buy_sell_dates(self, trading_dates) # 方法:根据每日持仓和交易日历,计算每个股票的买入卖出日期
│   ├── data_exporter.py
│   │   └── export_data(data, output_path) # 函数:将计算结果导出到文件
│   └── main.py
│       └── main()                # 主函数:协调整个流程
├── tests/                      # 单元测试目录 (可选)
│   ├── __init__.py
│   ├── test_pdf_processor.py
│   └── test_trading_calculator.py
├── requirements.txt            # 项目依赖库
├── README.md                   # 项目说明文件
└── prd.md                      # 需求文档 (已存在)

流程图

graph TD
    A[开始] --> B{读取配置};
    B --> C[获取PDF文件列表];
    C --> D{遍历PDF文件};
    D -- 对每个PDF --> E[提取文件名中的记录日期];
    E --> F[解析PDF,提取持仓股票代码];
    F --> G{收集所有PDF的记录日期和持仓};
    D -- 完成遍历 --> H[计算实际交易日期列表];
    H --> I[根据每日持仓和交易日计算买卖日期];
    I --> J{保存交易结果到文件};
    J --> K[结束];

    subgraph PDF处理
        E
        F
    end

    subgraph 交易计算
        H
        I
    end