FAQ > 金融建模 > 数据提取 > 行情数据

Q:期货连续合约的实际合约交割后,会更换合约,涨幅的计算是怎么处理的?    

  • 目前天软已经提供期货主力与连续合约的复权数据,可以直接使用stockzf计算该类虚拟合约的收益,比如:

    stockid:="IF01";
    begt:=20150416T;
    endt:=20150423T;
    setsysparam(pn_stock(),stockid);
    setsysparam(pn_date(),endt);
    n:=tradedays(begt,endt);
    t2:= Nday(N,'date2',sp_time(),'zf2',stockzf3());
    return t2;

    返回:
     
    复权算法相关说明请参考:FAQ:Q:期货主力与连续合约的复权算法说明
    2020年10月以前,期货主力与连续合约的收益率算法: 
    计算涨幅的模型stockzf系列(如stockzf3/stockzf/stockzf2等)没有对期货连续合约换合约问题进行处理。如果直接使用stockzf系列函数进行连续合约的涨幅,不做任何处理,涨幅或两天之间的收盘,会出现一个跳跃值。偏离实际。所以用户需要自行对涨幅的计算进行处理。连续合约的涨幅,取对应的实际合约的涨幅,而不是直接用IF01的收盘进行计算。
     
      这里提供一个函数,修正连续合约的涨幅。
      函数见附件:附件:QHZF_XZ(tsfinancialmodel).fun

      函数定义:QHZF_XZ(StockID,begt,endt,cy);
      参数:
        stockID:字符串型,连续合约代码,如:"IF01"
        BegT:日期型,开始日期,如:42122 或者用 20150428T 或者用inttodate(20150428)等
        EndT:日期型,截止日期,如:42122 或者用 20150428T 或者用inttodate(20150428)等
        cy:字符串型,周期,如:"日线"或者用函数cy_day()

      范例:
        stockid:="IF01";
        begt:=20150416T;
        endt:=20150423T;
        cy:=cy_day();
        return QHZF_XZ(StockID,begt,endt,cy);

      说明:IF01 在 4月17日之前的实际合约是IF1504,4月17日是IF1504的最后交易日(第3个星期5),4月20日开始,IF01对应的实际合约是IF1505。IF01 在 4月20日 的涨幅,应该是4月20日对应的实际合约IF1505的涨幅。

      返回: