FAQ > 金融建模 > 建模问题 > 期权相关

Q:如何获取期权主力平值合约行情数据?    

  • A:期权主力平值合约在不同日期会发生调整,需要在指定日获取对应的主力合约行情后合并

    获取指定日期权主力平值合约参考:FAQ:Q:如何获取期权主力、平值、虚值与实值合约代码?
    其中:
       1.获取商品期权主力平值合约需要使用标的主力合约代码
       2.获取指数期权主力平值合约需要使用指数代码
       3.获取ETF期权主力平值合约需要使用ETF代码

    获取所有期权标的代码:FAQ:OP_GetUnderlyingSecurity
    获取期货标的主力代码:FAQ:Q:期货代码、名称(连续合约、主力合约、指数合约)编制规则
    实现模型:opMarket
    function opMarket(begt,endt,cy,stockid);
    begin
    {
      说明:获取指定标的品种期权主力平值合约在指定日期序列与周期下的行情数据
      参数:
      begt:datetime 开始日期
      endt: datetime 截止日期
      cy:string 周期
      stockid:string 标的品种代码
      返回:数组,行情数据列表
    }
      tarr := specall(MarketTradeDayQk(begt,endt),array(pn_cycle():cy_day()));
      
      rt := array();
      for i,t in tarr do
      begin
        lt := specall(ref(sp_time(),1),array(pn_cycle():cy_day(),pn_stock():"SH000001",PN_Date():t));
        zlid := spec(base(708004),stockid); //主力代码
        bdstock := zlid?ZLToFuturesID(zlid,t):stockid; //标的合约
        
        SetSysParam(pn_cycle(),cy_day());
        stock := OptionFlatZLId(bdstock,t,1,0); //认沽期权平值主力合约
        if not isstock(stock)then continue;
        
        SetSysParam(pn_cycle(),cy);
        rt &= select stockid as "标的品种",
          bdstock as "标的合约",
          stock as "期权主力平值合约",
          FormatDateTime("YYYY-MM-DD hh:nn:ss:zzz",["date"])as "datetime",
          ["open"],
          ["high"],
          ["low"],
          ["close"]
          from markettable datekey lt+16/24 to t+16/24 of stock end;
      end
      return rt;
    end


    使用范例
    范例一:获取商品期权主力平值合约行情
    return opMarket(20231214t,20231215t,cy_30m(),"c");

    范例二:获取指数期权主力平值合约行情
    return opMarket(20231214t,20231215t,cy_30m(),"SH000300");

    范例三:获取ETF期权主力平值合约行情
    return opMarket(20231214t,20231215t,cy_30m(),"SH510300");