chenditc / investment_data

Scripts and doc for https://www.dolthub.com/repositories/chenditc/investment_data
286 stars 52 forks source link

增加每日涨跌停价格 #11

Open chenditc opened 1 year ago

chenditc commented 1 year ago

https://tushare.pro/document/2?doc_id=183

便于回测时更精确地判断是否达到涨跌停

chenditc commented 1 year ago

Tushare 的涨跌停价格只有 2007 年开始的数据。暂定逻辑:

  1. 持续更新数据可以从 Tushare 中获取。
  2. 历史数据来源1 Tushare
  3. 历史数据来源2,Baostock 获取 ST 股票,将对应股票设置为涨跌停价格 = 前一日收盘价的 +- 5%.
    • 从 final_a_stock_eod_price 中把 tradedate, symbol 加入 final_a_stock_limit,补全股票池
    • 从 final_a_stock_eod_price 中通过 lag() 函数补充 preclose 价格
    • 从 baostock 中提取 preclose 价格与 final_a_stock_limit 不同,且 final_a_stock_limit 的涨停价为空,且 baostock 前一日的 volume 不为空的,设置 preclose 价格。
  4. 通用逻辑,对于 2009年以前的股票,如果没有涨跌停价格的,设置涨停价为前一日收盘价的 +- 10%,如果价格超过该区间的,设置为 null
  5. 删除 1996年12月16日 以前的数据,在 1996年12月16日 之前,A股没有涨跌停限制
  6. 最高价高于涨停价 1% 以内,最低价低于跌停价 1% 以内的,将涨跌停价格设为最高/最低价。大概率是因为部分数据源精度不同导致的,应该不影响最终投资效果。
  7. 最高价高于涨停价1%,最低价低于跌停价1%以上的,说明理论计算的涨跌停价格不适用,例如停牌复牌,删除该数据,表示没有涨跌停。

数据校验:

  1. 最高价 <= 涨停价
  2. 最低价 >= 跌停价
  3. tushare 和 baostock 的 preclose 价格应当相同
chenditc commented 1 year ago

验证了一下 baostock 的数据集:

  1. 和 tushare 相比,早期的 preclose 数据不准确,因为 preclose 数据是从前一个交易日获取的,但是前一个交易日的数据有错误。
  2. 部分数据例如 tradedate = "2010-02-23" AND symbol = "SH600313",volume = 0, amount =0, turn 为 NULL,close 为 6.97。对照东方财富等数据源,当日收盘价应为 6.99。
  3. baostock 中收盘价数据确实的时间对 ST 股的标记仍然是正确的。

结论:

  1. 可以用 baostock 的 isST 标志,但是要谨慎使用 preclose 数据。