FAQ > 金融建模 > 建模问题 > 天软因子

Q:技术指标数据如何提取    

  • A:可根据需求先查找到所需要的技术指标计算模型,方式可参考:FAQ:Q:如何查找技术指标模型

    比如,需要提取KDJ与Boll技术指标,已查找到计算模型分别为KDJ_f与Boll_f。

    下面给出几种常用场景的指标数据提取提取示例:

    范例01:取最近20日的日线KDJ与BoLL指标值-不复权
    //取贵州茅台截止到2025-11-13日的最近20个交易日的指标数据
    SetSysParam(pn_stock(),'SH600519');
    SetSysParam(pn_date(),20250113T);
    setsysparam(pn_cycle(),cy_day());//日线
    setsysparam(pn_rate(),0); //不复权
    setsysparam(pn_Nday(),20);//设置N日序列长度
    V:=KDJ_f(9,3,3,1);//取N日值
    B:=boll_f(20,1);//取N日值
    D:=Nday2("Date",datetostr(sp_time())); //N日时间序列
    Return D|V[0]|V[1]|V[2]|B[0]|B[1]|B[2]|B[3];



    范例02:取最近20日的日线KDJ与BoLL指标值-前复权
    //取贵州茅台截止到2025-11-13日的最近20个交易日的指标数据
    SetSysParam(pn_stock(),'SH600519');
    SetSysParam(pn_date(),20250113T);
    setsysparam(pn_cycle(),cy_day());//日线
    setsysparam(pn_rate(),1); //比例复权
    setsysparam(pn_rateday(),20250113T);//指定日前复权

    setsysparam(pn_Nday(),20);//设置N日序列长度
    V:=KDJ_f(9,3,3,1);//取N日值
    B:=boll_f(20,1);//取N日值
    D:=Nday2("Date",datetostr(sp_time())); //N日时间序列
    Return D|V[0]|V[1]|V[2]|B[0]|B[1]|B[2]|B[3];



    范例03:取指定日的1分钟线的KDJ与BoLL指标值-不复权
    //取贵州茅台在025-11-13日的1分钟线指标数据
    SetSysParam(pn_stock(),'SH600519');
    SetSysParam(pn_date(),20250113.16T); //指定时间精确到具体时间点
    setsysparam(pn_cycle(),cy_1m());//1分钟线
    setsysparam(pn_rate(),0); //不复权
    setsysparam(pn_Nday(),240);//1日240条分钟线
    V:=KDJ_f(9,3,3,1);//取N日值
    B:=boll_f(20,1);//取N日值
    D:=Nday2("Date",datetimetostr(sp_time())); //N日时间序列
    Return D|V[0]|V[1]|V[2]|B[0]|B[1]|B[2]|B[3];



    范例04:取指定日一组股票的日线KDJ与BoLL指标值-不复权
    endt:=20250114T;
    stocks:=getbkbydate("SH000300",endt);
    setsysparam(pn_date(),endt);
    setsysparam(pn_rate(),0); //不复权
    setsysparam(pn_cycle(),cy_day());
    ret:=array();
    for i,StockID in stocks do
    begin
       SetSysParam(pn_stock(),StockID);
       V:=KDJ_f(9,3,3,0);//取当前值
       B:=boll_f(20,0);//取当前值
       ret[i,"StockID"]:=StockID;
       ret[i,"Date"]:=datetoint(Endt);
       ret[i,array("K","D","J")]:=V;
       //也可改用ret[i,"K"]=V[0];ret[i,"D"]=V[1];ret[i,"J"]=V[2];
       ret[i,array("BOLL","UPR","DWN","CLOSE")]:=B;
    end
    return ret;