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

Q:主力合约的不同算法实现    

  • 2021-1-15更新说明:
    1、自动获取市场所有品种代码,不用再人功维护进行枚举。
    2、修正一个由于无行情导致日期报错的问题

    功能说明:用户可使用附件模型,在指定日通过“昨持仓”、“修正昨持仓”或“昨成交量”最大的方法获取主力或次主力对应的实际合约。函数见附件。

    函数附件:附件:20210115-ZlandCZL_Clacu.tslfunc

    操作说明:
     将上面函数附件下载到本地后,批量导入用户函数,具体操作步骤请参考:FAQ:如何批量导出导入函数?

    函数说明:
    主力合约的计算:ZL_Calculated    
    定义:ZL_Calculated(ZLID:String,Endt:TDateTime,CalcuTapy:Int):String
    参数:
     ZLID:主力代码,例如'ZL000001';
     ENDT:指定日
     CalcuTapy:计算类型,0,1,2
            类型0:取该品种昨日交易持仓量最大的合约,即为今日的主力合约。
            类型1:修正昨持仓量最大(如果该品种max昨持仓>=10,判断如0类型;如果该品种max昨持仓<=10则增加max昨持仓>昨主力持仓*2 的限制条件进行判断;如果max昨持仓=0,则延续昨日主力合约)
            类型2:取该品种昨日交易成交量最大的合约,即为今日的主力合约。
    返回:字符串,获取指定主力合约在指定日指定指定算法计算得到的实际主力合约代码
    次主力合约的计算:CZL_Calculated
    定义:CZL_Calculated(ZLID:String,Endt:TDateTime,CalcuTapy:Int):String
    参数:
      ZLID:主力代码,例如'ZL000001';
      ENDT:指定日
      CalcuTapy:计算类型,0,1,2
         类型0:取该品种昨日交易持仓量第二大的合约,即为今日的次主力合约。
         类型1:修正昨持仓量第二大(如果该品种second昨持仓>=10,判断如0类型;
          如果该品种second昨持仓<=10,则增加second昨持仓>昨次主力持仓*2 的限制条件进行判断;
          如果second昨持仓=0,则延续昨日次主力合约)。
         类型2:取该品种昨日交易成交量第二大的合约,即为今日的主力合约。
    返回:字符串,获取指定主力合约在指定日指定算法下计算得到的实际次主力合约代码

    仿真时间点主力合约的实现
    ZL_Calculated_Viewpoint
    定义:ZL_Calculated_Viewpoint(ZLID:String,ENDTIME:TDatetime,CalcuTapy:Int):array()
    说明:收盘后运行,取下一交易日在市交易的主力合约
       判断当日为最后交易日的合约,并剔除
    参数:
      ZLID:主力代码,例如'ZL000001';
      ENDTime:指定日仿真时点
      CalcuTapy:计算类型,0,1,2
           类型0:取该品种仿真时点交易持仓量最大的合约,即为次日的主力合约。
           类型1:修正仿真时点持仓量最大(如果该品种max昨持仓>=10,判断如0类型;
              如果该品种max昨持仓<=10则增加max昨持仓>昨主力持仓*2 的限制条件进行判断;
              如果max昨持仓=0,则延续昨日主力合约)
           类型2:取该品种仿真时点当日交易成交量最大的合约,即为次日的主力合约
    返回:数组类型,指定日,指定主力代码,下一交易日主力合约
    范例01:

    //返回在20200121.17T计算沪铝主力线在第二天的实际主力合约
    return ZL_Calculated_Viewpoint('ZL000001',20200121.17T,0);
    //返回:
    "日期""主力代码""下一交易日主力合约"
    "2020-01-21""ZL000001""al2003"


    CZL_Calculated_Viewpoint
    定义:CZL_Calculated_Viewpoint(ZLID:String,ENDTIME:TDatetime,CalcuTapy:Int):array()
    说明:收盘后运行 ,取下一交易日在市交易的次主力合约
       判断当日为最后交易日的合约,并剔除
    参数:
       ZLID:主力代码,例如'ZL000001';
       ENDT:指定日仿真时间
       CalcuTapy:计算类型,0,1,2
         类型0:取该品种仿真时间交易持仓量第二大的合约,即为次日的次主力合约。
         类型1:修正昨持仓量第二大(如果该品种second昨持仓>=10,判断如0类型;
          如果该品种second昨持仓<=10,则增加second昨持仓>昨次主力持仓*2 的限制条件进行判断;
          如果second昨持仓=0,则延续昨日次主力合约)。
         类型2:取该品种指定日交易成交量第二大的合约,即为次日的主力合约。
    返回:数组,指定日,指定主力代码,下一交易日主力合约次主力合约

    范例02:

        ZLID:='ZL000001';
        EndTime:=StrToDateTime('2020-01-14 17:00:00');
        CalcuTapy:=0;
        return CZL_Calculated_Viewpoint(ZLID,EndTime,CalcuTapy);
    //返回结果
    "日期""次主力代码""下一交易日次主力合约"
    "2020-01-14""ZL000001""al2002"


    历史版本:
    附件:ZL_Calculated(tsxulihua).fun
    附件:HashTable1(tsxulihua).fun
    主力合约:附件:ZL_Calculated_Viewpoint(tszhangheng).fun
    次主力合约:附件:CZL_Calculated_Viewpoint(tszhangheng).fun