FAQ > 金融建模 > 建模问题 > 交易日相关

Q:天软交易日序列及交易天数模型汇总    

  • 数据说明:
     交易日指交易发生的日期,对于交易日的判断数据主要来源于两类:
     1、根据已有行情数据判断
       a、这种仅支持历史日期,未来还未发生的时间段不支持。
       b、所有有行情的证券都支持。
     2、根据交易所发布的市场交易日历
       a、一般能判断到当年年底
       b、仅支持不同市场交易日,不支持个券,仅支持日线。
        目前支持的市场代码有:
        A股市场交易日:SH000001、国内期货市场:QI000001、银行间债券市场:CBICBA00301
        港股市场:HKHSI001、北向:HSG000002、南向:HSG000001
        更多可参考:FAQ:市场交易日历

    根据上述两类数据,我们开发了四类常用模型:
    类一:仅根据行情数据判断
    类二:仅根据交易日历判断
    类三:结合行情与交易日历判断
    类四:交易日历与踢除周末方式判断

    相关模型:
    功能取数模型支持范围交易日判断逻辑
    是否交易日IsTradeDay(Endt)周期:日线及低频,若设置高频,只日期有效
    区间:不支持未来日的判断
    证券:所有有行情的证券
    根据行情,指定日是否有日线
    市场是否交易日istradeday2(IndexID,EndT)周期:日线
    区间:支持历史及未来当年的判断
    证券:市场代码
    根据指定市场交易日历判断,否则使用istradeday
    是否交易日istradeday4()周期:任意周期
    区间:不支持未来日的判断
    证券:所有有行情的证券
    istradeday的扩展
    根据行情,指定日是否有日线,且有成交量
    ***********
    交易日序列StockTradeDayQk(BegT,EndT)周期:任意周期
    区间:不支持未来日的判断
    证券:所有有行情的证券
    根据行情,获取当前证券当前周期下交易时间序列
    市场交易日序列MarketTradeDayQk(BegT,EndT)周期:任意周期
    区间:不支持未来日的判断
    证券:无关,已指定SH000001
    根据行情,获取SH000001在当前周期下交易时间序列
    市场交易日序列MarketTradedayQK3(BegT,EndT)周期:日线
    区间:任意时间段
    证券:市场代码
    根据市场交易日历,
    1)日历表范围内,则获取交易日表中的交易日序列
    2)超过日历表范围的,则取剔除周末日期序列
    市场交易日序列markettradedayqk5(BegT,EndT)周期:日线
    区间:支持历史及未来当年的判断
    证券:市场代码
    根据指定市场交易日历,生成区间交易日序列
    ***********
    最近N个交易日序列StockTradeDayQk2(N)周期:任意周期
    区间:不支持未来日的判断
    证券:所有有行情的证券
    根据行情,获取当前证券在当前周期当前时间的最近N个交易日序列
    最近N个市场交易日序列MarketTradeDayQk2(N)周期:任意周期
    区间:不支持未来日的判断
    证券:无关,指定SH000001
    根据行情,获取SH000001在当前周期当前时间的最近N个交易日序列
    最近N个市场交易日序列markettradedayqk4(N,EndT)周期:日线
    区间:支持未来当年的判断
    证券:市场代码
    根据指定市场交易日历,生成指定日最近N个交易日序列
    ***********
    交易天数tradeDays(Begt,Endt)周期:任意周期
    区间:不支持未来日
    证券:所有有行情的证券
    根据行情,获取当前证券当前周期下交易时间点数量
    日线交易天数StockTradeDays(BegT,EndT)周期:日线
    区间:不支持未来日
    证券:所有有行情的证券
    根据行情,在截止日为交易日的情况下获取区间内日线交易天数
    市场交易天数MarketTradeDays(BegT,EndT)周期:任意周期
    区间:不支持未来日
    证券:无关,已指定SH000001
    根据行情,获取SH000001在当前周期下交易时间点数量
    市场日线交易天数MarketTradeDays2(BegT,EndT)周期:日线
    区间:任意时间段
    证券:市场代码
    根据市场交易日历,
    1)日历表范围内,则获取交易日表中的交易日数
    2)超过日历表范围的,则取剔除周末日期数


    历史交易日的取数范例:
    交易日序列:
    范例一:获取A股代码交易日序列(区间)
      //返回SZ000670从20190415到20190430的区间交易情况,该代码在20190423存在停牌
      SetSysParam(PN_Stock(),'SZ000670');
      SetSysParam(PN_Cycle(),cy_day());
      return StockTradeDayQk(20190415t,20190430t);
      //返回:11个交易日序列,ctrl+d 可查看字符串格式日期序列

    范例二:获取A股代码交易日序列(N日)
      //返回SZ000670在20190430最近11个交易日序列,该代码在20190423存在停牌
      SetSysParam(PN_Stock(),'SZ000670');
      SetSysParam(PN_Cycle(),cy_day());
      setsysparam(pn_date(),20190430t);
      return StockTradeDayQk2(11);
      //返回:11个交易日序列,ctrl+d 可查看字符串格式日期序列

    范例三:获取港股代码交易日序列(区间)
      //返回HK00001(长和)从20220401到20220415t的区间交易情况
      SetSysParam(PN_Stock(),'HK00001');
      SetSysParam(PN_Cycle(),cy_day());
      return StockTradeDayQk(20220401t,20220415t);
      //返回:9个交易日序列,ctrl+d 可查看字符串格式日期序列

    范例四:获取A股市场交易日序列(区间)
       //返回A股市场(SH000001)从20190415到20190430的区间交易情况
      SetSysParam(PN_Cycle(),cy_day());
      return MarketTradeDayQk(20190415t,20190430t);
      //返回:12个交易日序列,ctrl+d 可查看字符串格式日期序列

    范例五:获取A股市场交易日序列(N日)
       //返回A股市场(SH000001)在20190430最近N个交易日序列
      SetSysParam(PN_Cycle(),cy_day());
      setsysparam(pn_date(),20190430t);
      return MarketTradeDayQk2(12);
      //返回:12个交易日序列,ctrl+d 可查看字符串格式日期序列

    交易天数:
    范例六:获取A股代码区间交易天数
      //返回SZ000670从201904015到20190430的区间交易天数,该代码在20190423存在停牌
      SetSysParam(PN_Stock(),'SZ000670');
      SetSysParam(PN_Cycle(),cy_day());
      return TradeDays(20190415t,20190430t);
      //返回:11

    范例七:获取A股市场区间交易天数
      //返回A股市场(SH000001)从201904015到20190430的区间交易天数
      SetSysParam(PN_Cycle(),cy_day());
      return marketTradeDays(20190415t,20190430t);
      //返回:12

    未来交易日的取数范例:(以下案例是笔者在2022-5-12日运行的结果展示,仅供参考)
     未来交易日目前只能获取指定市场指数的,暂不能指定个股。
    交易日序列:
    范例八:获取指定市场(A股市场)未来一段时间交易日序列,在天软市场交易日历表中获取日期
      //返回A股市场从20220101到20231231的区间交易日序列,本次执行市场交易日历只含2022年的交易日
      SetSysParam(PN_Stock(),'SH000001');
      SetSysParam(PN_Cycle(),cy_day());
      return markettradedayqk5(20220101t,20231231t);
      //返回242个交易日序列,最后交易日为2022-12-30,ctrl+d 可查看字符串格式日期序列

    范例九:获取指定市场(A股市场)指定未来交易日最近N个交易日序列,在天软市场交易日历表中获取日期
      //返回A股市场指定20230131的最近60个交易日序列,本次执行市场交易日历只含2022年的交易日
      SetSysParam(PN_Stock(),'SH000001');
      SetSysParam(PN_Cycle(),cy_day());
      return markettradedayqk4(60,20230131t);
      //返回60个交易日序列,最后交易日为2022-12-30,ctrl+d 可查看字符串格式日期序列

    范例十:获取指定市场(A股市场)未来任意时间区间交易日序列
      //返回A股市场从20220101到20231231的区间交易日序列,本次执行市场交易日历只含2022年的交易日
      SetSysParam(PN_Stock(),'SH000001');
      SetSysParam(PN_Cycle(),cy_day());
      return markettradedayqk3(20220101t,20231231t);
      //返回502个交易日序列,最后交易日为2023-12-29,ctrl+d 可查看字符串格式日期序列

    交易天数:
    范例十一:获取指定市场(A股市场)未来一段时间交易天数,在天软市场交易日历表中获取日期
      //返回A股市场从20220101到20231231的区间交易天数,本次执行市场交易日历只含2022年的交易日
      SetSysParam(PN_Stock(),'SH000001');
      SetSysParam(PN_Cycle(),cy_day());
      return length(markettradedayqk5(20220101t,20231231t));
      //返回:242

    范例十二:获取指定市场(A股市场)未来任意时间区间交易天数
      //返回A股市场从20220101到20231231的区间交易天数,本次执行市场交易日历只含2022年的交易日
      SetSysParam(PN_Stock(),'SH000001');
      SetSysParam(PN_Cycle(),cy_day());
      return MarketTradeDays2(20220101t,20231231t);
      //返回:502

    范例十三:判断指定代码在指定日是否交易
      //判断SZ000002在20241205是否交易
      SetSysParam(PN_Stock(),'SZ000002');
      return istradeday(20241205t);
      //返回:1

    范例十四:判断港股市场在指定日是否交易
      //判断港股市场在20250901是否交易(执行日期:20241209)
      return istradeday2('HKHSI001',20250901t);
      //返回:1


    关于交易日的其它使用说明:
    FAQ:Q:如何取历史交易日序列
    FAQ:Q:获取交易日推移的几种方式(包括已公布假期日历的未来交易日)
    FAQ:Q:如何判断是否交易日