02_获取期权数据列出符合要求的合约.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # 获取期权数据,列出符合要求的合约
  2. # 参考资料:
  3. # - 原始策略来源: https://www.joinquant.com/view/community/detail/a8f4ad443448f4246260ea221c3d77ea
  4. # - 研究网址: https://www.joinquant.com/research?target=research&url=/user/75474983526/notebooks/Options/%E8%8E%B7%E5%8F%96%E6%9C%9F%E6%9D%83%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%88%97%E5%87%BA%E7%AC%A6%E5%90%88%E8%A6%81%E6%B1%82%E7%9A%84%E5%90%88%E7%BA%A6.ipynb
  5. # TODO: 添加期权数据获取和合约筛选相关代码
  6. from jqdata import *
  7. import pandas as pd
  8. import numpy as np
  9. ## 日期数据处理
  10. trade_days = pd.Series(index=get_trade_days('2024-2-1','2024-3-26'))
  11. trade_days.index = pd.to_datetime(trade_days.index)
  12. month_split = list(trade_days.resample('M',label='left').mean().index) + [pd.to_datetime('20240201')]
  13. holding_contract2 = pd.Series(index=trade_days.index)
  14. # 获取期权合约数据
  15. q_contract_info = query(opt.OPT_CONTRACT_INFO.code, opt.OPT_CONTRACT_INFO.trading_code, opt.OPT_CONTRACT_INFO.name, #合约代码,合约交易代码,合约简称
  16. opt.OPT_CONTRACT_INFO.exercise_price, opt.OPT_CONTRACT_INFO.last_trade_date,
  17. opt.OPT_CONTRACT_INFO.list_date
  18. ).filter(opt.OPT_CONTRACT_INFO.contract_type == 'CO', # CO认购期权、PO认沽期权
  19. opt.OPT_CONTRACT_INFO.exchange_code == 'XSHG', # XSHG 上交所。XZCE 郑商所
  20. opt.OPT_CONTRACT_INFO.last_trade_date > month_split[0], # 时间-到期月开始
  21. opt.OPT_CONTRACT_INFO.last_trade_date < month_split[1], # 时间-到期月结束
  22. opt.OPT_CONTRACT_INFO.list_date < trade_days.index[0]) # 在交易前上市
  23. contract_info = opt.run_query(q_contract_info)
  24. etf_cls = get_price('510050.XSHG',trade_days.index[0],trade_days.index[0],fields=['close']).values[0][0]
  25. contract_info['price_spread'] = contract_info['exercise_price'] - etf_cls
  26. if contract_info['price_spread'].max() > 0:
  27. contract_info = contract_info[contract_info['price_spread'] > 0] #选出虚值期权
  28. contract_info = contract_info.sort_values('exercise_price')
  29. else: #全是实值期权
  30. contract_info = contract_info.sort_values('exercise_price',ascending=False)
  31. holding_contract2[trade_days.index[0]] = contract_info['code'].iloc[0]
  32. newest_exercise_price = contract_info['exercise_price'].iloc[0]
  33. newest_expire_date = contract_info['last_trade_date'].iloc[0]
  34. contract_info