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

Q:如何通过期货品种代码,获取一段时间内主力、次主力等对应的实际合约?    

  • A:可以先通过FAQ:期货品种代码对照表获取到对应的主力、次主力代码,再通过模型FAQ:ZLToFuturesID获取指定日的实际合约。
    示例一:提取一段时间内指定期货品种主力、次主力等代码对应的实际合约
      pz:="AL";
      begt:=20260401T;
      endt:=20260420T;
      //期货品种对应的主力、次主力等代码
      codes:=spec(array(base(708004),base(708011),base(708007),base(708008)),pz);
      //根据主力合约,提取交易日序列
      dayList:=spec(StockTradeDayQk(begt,endt),codes[0]);
      ret:=array();
      for i,day in dayList do
      begin
        ret[i]:=array(
          "品种":pz,
          "日期":datetostr(day),
          "主力":ZLToFuturesID(codes[0],day),
          "次主力":ZLToFuturesID(codes[1],day),
          "连一":ZLToFuturesID(codes[2],day),
          "连二":ZLToFuturesID(codes[3],day),
        );
      end
      return ret;


    示例二:提取一段时间内指定期货品种708表中所有对应代码的实际合约
      pz:="AL";
      begt:=20260401T;
      endt:=20260420T;
      //期货品种对应的主力、次主力等代码
      codes:=select ["主力代码"],
             ["主力代码2"],
             ["次主力代码"],
             ["连续代码"],
             ["连一代码"],
             ["连二代码"],
             ["连三代码"],
             ["连四代码"] from infotable 708 of pz end;
      //根据主力合约,提取交易日序列
      dayList:=spec(StockTradeDayQk(begt,endt),codes[0,"主力代码"]);
      cols:=mCols(codes,1);
      ret:=array();
      for i,day in dayList do
      begin
        ret[i,"品种"]:=pz;
        ret[i,"日期"]:=datetostr(day);
        for j,col in cols do
        begin
          ret[i,col]:=codes[0,col]?ZLToFuturesID(codes[0,col],day):nil;
        end
      end
      return ret;