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

Q:天软部分期货合约代码与交易所的有区别,如何获取交易所提供的期货原始合约代码    

简述
期货合约中,各交易所上期货合约代码规则不一致,天软中会做统一规范处理,主要郑商所存在这类差异问题(如苹果期货交易所代码AP103,天软代码AP2103)
  • A:
    天软关于期货合约代码的编码规则
     商品期货的编码规则:“品种”+合约到期年份+合约到期月份;
    为什么存在天软代码与交易所代码不一致?
     1、AP103如果该期货品种较早上市的话,用三位数字“103”并不能很直观明确地表示是哪一年的合约,可能是2011年的AP1103,也可能是2021年AP2103;
     2、各交易所规范可能也不一样,像中金所,就是IF2102这种,与天软这边表现规范一致了
    具体可查看FAQ:Q:期货代码、名称(连续合约、主力合约、指数合约)编制规则

    如何把天软合约代码转成交易所代码
    范例一:用stockname获取

      // 获取'AP2103'的交易所代码
      return stockname('AP2103');
      // 返回:AP103

    注:只有盘口的名称才有保留交易所的这个原始代码,已经退市的则取不到)

    范例二:按郑商所规则,封装函数进行转换
    比如先封装一个函数getJYSCode:

    Function getJYSCode(stockID);
    Begin
    //-只郑商所 有区别
      if spec(base(703027),stockID)='郑州商品交易所' then
       return stockID[1:length(stockID)-4]+stockID[length(stockID)-2:];
      else return stockID;
    End;


      再在使用时进行调用该函数:

    // 获取国内商品期货的交易所代码
    stocks:=getbk('国内商品期货'); //当前正在交易的
    //加入已退市的商品期货
    stocks:=stocks union2 sselect thisrow from getbk('退市期货') where spec(base(703028),thisrow)='商品期货' end;
    return select thisrow as 'TSCode',getJYSCode(thisrow) as '交易所代码'
       from stocks end;

    返回结果: