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

Q:如何取有夜盘交易合约的完整一天的高频数据?    

  • A:在天软行情中,有夜盘的情况下,一个完整的日线周期为昨日夜盘开盘到今天白盘收盘。我们可以依据这个规则,确定数据的开始时间点与截止时间点。
    例如,取豆粕认购期权合约m2001-C-2900在20190122这一天的完整分钟线数据,夜盘+白盘:
    //确定起止时间点
    vEndT:=20190122T;            //指定日
    stockID:="m2001-C-2900";

    SetSysParam(pn_stock(),stockID); //指定合约
    SetSysParam(PN_Cycle(),cy_day());   //日线
    SetSysParam(PN_date(),vEndT);     //当前时间
    refT:=ref(sp_time(),1);       //上一个日线交易日
    if refT=0 then     //当前时间为上市日,不存在上个交易日,则向前推三天为起点
      refT:=sp_time()-3;

    begT:=refT+16/24;    //设置开始时间点为上一个日线交易日的收盘时间点
    endT:=vEndT+16/24;   //设置截止时间点为当天收盘时间点-与begt形成完整时间周期
    setsysparam(pn_cycle(),cy_1m());//修改当前周期为分钟线

    //取数,有了开始时间截止时间,可以直接用markettable提取
    return select ['date'],['close'],['vol'],['low'],['cjbs'] from markettable datekey begt to endt of stockID end;

    ---------------------------------------------------------------------
    //若需要用nday提取,去掉上一句代码后,接着实现如下
    N :=tradedays(begT,endT); //取分钟线下的时间区间交易周期数
    setsysparam(pn_date(),endT);//不可省,nday的起始点靠这个确定
    return nday(N,"time",datetimetostr(sp_time()),"open",open(),"close",close(),"settle",settlement(),"vol",vol());

    注:markettable的用法,可参考:FAQ:MARKETTABLE