### 数据仓库函数 #### 内容 - 系统参数名称函数 - 多市场支撑函数 - 时间相关函数 - 判定函数 - 盘中相关 - 盘后相关(在当日可用于盘中) - 时间序列统计 - 成交明细数据函数 - 交易明细字段标识函数 - 查询和轮询函数 - 市场和板块函数 - 取行情数据序列函数 - 引用指定函数 - 系统参数设置和获取函数 - 复权类型函数 - 复权基准日函数 - 周期函数 - 财务函数 - 选股与取数 - 向导函数 - 条件判定 #### 系统参数名称函数 ##### 内容 - cyclefilter - pn_Stock - pn_Date - pn_Rate - pn_RateDay - pn_nDay - pn_Cycle - pn_Precision - pn_NilTrans - Pn_I64Trans - pn_ViewPoint - pn_FreeCycle - pn_ReportMode - Pn_Emptymode - pn_ChangedDateMode - pn_ReportType - pn_NoRaiseNoData - pn_CalcCTRLWord ##### cyclefilter 主要用于过滤假期的分时数据。 参数值说明: 0: 没有过滤器,可用于取消设置的参数 1: 过滤掉期货放假期间的夜盘 3: 新增集合竞价周期点 范例1: ```text //结果集将只有20161010的数据,没有假期的夜盘数据。 setsysparam("cyclefilter", 1); setsysparam(pn_cycle(), cy_15m()); return select * from markettable datekey 20161007T to 20161010.1600T of "ag1612" end; ``` 范例2: ```text //结果将会新增20161010T08:59:00的集合竞价数据 //(期货夜盘有两个集合竞价时点,正常夜盘是20:59:00,放假无夜盘是8:59:00) setsysparam("cyclefilter", 3); setsysparam(pn_cycle(), cy_15m()); return select * ,datetimetostr(["date"]) as "date" from markettable datekey 20161007T to 20161010.1600T of "ag1612" end; ``` 返回: ##### pn_Stock 范例 范例1: ```text //设置当前证券为万科A setsysparam(pn_stock(),'SZ000002'); return getsysparam(pn_stock());//获取当前的证券代码 //返回字符串SZ000002 ``` 范例2: ```text //取指定证券SH60000在指定日2019-02-18这一天的收盘价 setsysparam(pn_stock(),'SH600000'); setsysparam(pn_date(),20190218T);//设置当前时间 return close();//取收盘价 //返回10.84 ``` 参考SetSysParam GetSysParam pn_Date pn_Rate pn_RateDay pn_nDay pn_Cycle pn_Precision pn_ViewPoint pn_FreeCycle pn_ReportMode ##### pn_Date 范例 范例1: ```text //设置当前时间为2019-2-18 setsysparam(pn_date(),20190218T); return sp_time();//或return getsysparam(pn_date());//获取当前时间 //返回43514,即2019-02-18 ``` 范例2: ```text //取指定证券SH60000在指定日2019-02-18这一天的收盘价 setsysparam(pn_stock(),'SH600000'); setsysparam(pn_date(),20190218T);//设置当前时间 return close();//取收盘价 //返回10.84 ``` 参考SetSysParam GetSysParam pn_Stock pn_Rate pn_RateDay pn_nDay pn_Cycle pn_Precision pn_ViewPoint pn_FreeCycle pn_ReportMode ##### pn_Rate 范例 ```text //以第一个交易日为基准进行复杂复权后的截止20110909万科A的收盘价时间序列 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); setsysparam(pn_rate(),rt_complex());//复权方式:复杂复权 setsysparam(pn_rateday(),rd_firstday());//复权基准日:第一个交易日 return nday(30,'date',datetostr(sp_time()), 'close',close()); ``` 结果(部分): 参考SetSysParam GetSysParam pn_Stock pn_Date pn_RateDay pn_nDay pn_Cycle pn_Precision 复权基准日函数 pn_ViewPoint pn_FreeCycle pn_ReportMode ##### pn_RateDay 范例 ```text //设置2018-08-20为复权基准日,小于这个日期的前复权,大于这个日的后复权。 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), 20180905T); setsysparam(pn_rate(),1);//复权方式:比例复权 setsysparam(pn_rateday(),20180820T);//复权基准日 return nday(30,'date',datetostr(sp_time()),'close',close()); ``` 参考SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_nDay pn_Cycle pn_Precision 复权类型函数 pn_ViewPoint pn_FreeCycle pn_ReportMode ##### pn_nDay 范例 ```text setsysparam(pn_stock(),'SZ000001'); setsysparam(pn_date(),inttodate(20140115)); setsysparam(pn_nday(),250); return nday2('time',datetostr(sp_time()),'close',close()); ``` 结果: 参考SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_Cycle pn_Precision pn_ViewPoint pn_FreeCycle pn_ReportMode ##### pn_Cycle 范例 范例1: ```text //取万科A在2019-02-18 11:25:00时的五分钟线成交量 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), 20190218.1125T); setsysparam(pn_cycle(),cy_5m()); return vol(); //返回:1389725 ``` 范例2: ```text //取上证指数一段时间内的5分钟线数据 setsysparam(pn_cycle(),cy_5m()); return select ['date'],['close'],['vol'] from markettable datekey 20190218.1030T to 20190218.1120T of 'SH000001' end; //返回结果: ``` 参考周期函数 SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_nDay pn_Precision pn_ViewPoint pn_FreeCycle pn_ReportMode 自由周期 ##### pn_Precision 范例 范例1:设置与生效 ```text setsysparam(PN_Precision(),3);//设置有效 ov:=BackupSystemParameters2(); setsysparam(PN_Precision(),2); //设置无效,在return 之前被恢复到备份之前的状态 return rand(2,3); //返回结果保留3位小数: ``` 范例2: ```text //提取万科A2019-2-19日的5分钟线收盘价,并保留2位小数结果输出 setsysparam(PN_Precision(),2);//有效 setsysparam(pn_cycle(),cy_30m()); return select datetimetostr(['date']) as 'date',['close'] from markettable datekey 20190219T to 20190219.16T of 'SZ000002' end; //返回结果: ``` 参考SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_nDay pn_Cycle pn_ViewPoint pn_FreeCycle pn_ReportMode ##### pn_NilTrans 范例 matlab调用 ```text //matlab代码 ts=actxserver('TSExpert.CoExec') ts.SetSysParam('NilTrans',9) ts.RemoteExecute('return array((1,2,nil,4),(2,nil,3,nil));') //返回: ``` 参考SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_nDay pn_Cycle pn_ViewPoint pn_FreeCycle pn_ReportMode ##### Pn_I64Trans 参考SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_nDay pn_Cycle pn_ViewPoint pn_FreeCycle pn_ReportMode ##### pn_ViewPoint 范例在分钟线下,指定仿真时间为10点29分42秒,求仿真下10点30分的分钟线价量 ```text setsysparam(pn_stock(),"SH600519"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_ViewPoint(),20240702.102942T); //仿真时间为10:29:42 setsysparam(pn_date(),20240702.1030T);//取分钟线十点半时的价量 return array(close(),vol()); ``` 结果: 参见专题:非整周期行情数据提取陷阱和时点真实行情数据回溯参考SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_nDay pn_Cycle pn_FreeCycle pn_ReportMode ##### pn_FreeCycle 参考SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_nDay pn_Cycle pn_ReportMode 自由周期 ##### pn_ReportMode 范例 ```text SetSysParam(PN_Stock(),'SH600170'); // pn_ReportMode()=-1,返回调整前、调整后 SetSysParam(pn_ReportMode(),-1); return Select ['StockID'],['StockName'],['截止日'],['公布日'],['营业收入'],['归属于母公司所有者净利润'] from infotable 46 of 'SH600170' where ['截止日']>=20171231 end; //返回结果 StockID StockName 截止日 公布日 营业收入 归属于母公司所有者净利润 SH600170 上海建工 20171231 20180328 142,082,638,561.83 2,584,465,203.87 SH600170 上海建工 20171231 20190329 142,082,638,561.83 2,584,465,203.87 SH600170 上海建工 20180331 20180428 31,075,378,878.24 532,834,340.41 SH600170 上海建工 20180331 20190430 31,075,378,878.24 532,834,340.41 SH600170 上海建工 20180630 20180829 78,290,436,984.83 1,289,780,254.93 SH600170 上海建工 20180930 20181031 115,410,360,329.49 1,811,096,340.58 SH600170 上海建工 20181231 20190329 170,545,783,102.81 2,779,866,799.83 SH600170 上海建工 20190331 20190430 47,099,976,904.12 1,317,287,587.90 ``` 参考财务数据调整的处理专题 财务函数 SetSysParam GetSysParam pn_Stock pn_Date pn_Rate pn_RateDay pn_nDay pn_Cycle pn_FreeCycle pn_ReportMode ##### Pn_Emptymode 范例 ```text //取万科A在2019年的三季报与年报的股东权益合计,笔者执行日期为20191224日,年报还未出 setsysparam(pn_emptymode(),5);//空记录设置为浮点NAN setsysparam(pn_stock(),'SZ000002'); t1:= reportofall(44111,20190930); t2:= reportofall(44111,20191231); return array(t1,t2); ``` 返回:
244,851,895,300.25
NAN
##### pn_ChangedDateMode 范例 提取万科A的在20190404日的总股本数据 ```text endt:=20190404T; setsysparam(pn_stock(),'SZ000002'); v1:=StockTotalShares(endt);//考虑变动日及公布日 setsysparam(PN_ChangedDateMode(),1); v2:=StockTotalShares(endt);//仅考虑变动日 return array(v1,v2); //结果:array(11039152001.0,11302143001.0) ``` ##### pn_ReportType pn_ReportType取值说明:
取值含义涉及报表应用范围是否与pn_stock/pn_date相关
0(默认)提取最新公布的报告期正式财报应用最广泛与pn_stock、pn_date相关
1优先级:正式财报>业绩快报>业绩预测正式财报、业绩快报、业绩预测适用于实时财务数据提取与pn_stock、pn_date相关
2优先级:正式财报>业绩快报正式财报、业绩快报适用于实时财务数据提取与pn_stock、pn_date相关
3优先级:正式财报>业绩预测正式财报、业绩预测适用于实时财务数据提取与pn_stock、pn_date相关
90按正式财报发布规则提取正式财报定期更新,所有股票规则相同与pn_stock、pn_date无关
>=19000101指定报告期,若指定报告期未发布,取最新发布报告期正式财报指定报告期与pn_stock相关,与pn_date无关
相关专题文档 实时财务数据相关:2025-11-21-量化数据-因子研究09:关于利用实时财务信息的财务数据提取说明(更新版) 正式财报发布规则说明 发布规则:
财报类型公布日期
一季报4月底全部公布(4月最后一天开盘前已全部公布)
中报8月底全部公布(8月最后一天开盘前已全部公布)
三季报10月底全部公布(10月最后一天开盘前已全部公布)
年报次年4月底全部公布(次年4月最后一天开盘前已全部公布)
按财报发布规则获取最新报告期与最新年度报告期案例:
截止日最新报告期最新年度报告期
2023-01-01~2023-04-292022093020211231
2023-04-30~2023-08-302023033120221231
2023-08-31~2023-10-302023063020221231
2023-10-31~2023-12-312023093020221231
范例: 范例1:pn_ReportType()=0 ```text EndT:=20230121T; ov:=BackupSystemParameters2(); SetSysParam(pn_stock(),'SH688699'); SetSysParam(pn_date(),EndT); SetSysParam(pn_ReportType(),0); //财报最新报告期,等价于不设置该系统参数 RDate:=NewReportDateOfEndT2(EndT); return RDate; //返回结果:20220930, 财报2022年三季报已公布,年报未公布 ``` 范例2:pn_ReportType()=1 ```text EndT:=20230121T; ov:=BackupSystemParameters2(); SetSysParam(pn_stock(),'SH688699'); SetSysParam(pn_date(),EndT); SetSysParam(pn_ReportType(),1); //财报>快报>预测 RDate:=NewReportDateOfEndT2(EndT); return RDate; //返回结果:20221231, 财报和快报2022年年报未公布,预测已公布 ``` 范例3:pn_ReportType()=2 ```text EndT:=20230121T; ov:=BackupSystemParameters2(); SetSysParam(pn_stock(),'SH688699'); SetSysParam(pn_date(),EndT); SetSysParam(pn_ReportType(),2); //财报>快报 RDate:=NewReportDateOfEndT2(EndT); return RDate; //返回结果:20220930,财报和快报2022年年报未公布,财报2022年三季报已公布 ``` 范例4:pn_ReportType()=3 ```text EndT:=20230121T; ov:=BackupSystemParameters2(); SetSysParam(pn_stock(),'SH688699'); SetSysParam(pn_date(),EndT); SetSysParam(pn_ReportType(),3); //财报>预测 RDate:=NewReportDateOfEndT2(EndT); return RDate; //返回结果:20221231,财报2022年年报未公布,预测已公布 ``` 范例5:pn_ReportType()=90,发布规则提取 ```text EndT:=20230121T; ov:=BackupSystemParameters2(); SetSysParam(pn_ReportType(),90); //财报按财报发布规则 RDate:=NewReportDateOfEndT2(EndT); return RDate; //返回结果:20220930, 按财报公布规则20230121t,2022年年报未公布在4月底才公布,2022年三季报已在2022年10月公布了 ``` 范例6:pn_ReportType()=20221231,指定报告期 ```text EndT:=20230121T; ov:=BackupSystemParameters2(); SetSysParam(pn_stock(),'SH688699'); SetSysParam(pn_ReportType(),20221231); //财报指定报告期已公布 RDate:=NewReportDateOfEndT2(EndT); return RDate; //返回结果:20220930, 20230121T指定报告期2022年年报未公布,2022年三季报已公布 ``` ##### pn_NoRaiseNoData 范例 范例1:获取当前禁用无数据异常模式 ```text setsysparam(pn_noraisenodata(),1); return getsysparam(pn_noraisenodata()); ``` 返回:1 范例2:当指定证券无数据时,不报错,通过close()取价格返回0 ```text setsysparam(pn_noraisenodata(),1); return spec(close(),"abc"); ``` 返回:0 范例3:当指定证券无数据时,不报错,通过Rd取盘口时返回nil ```text setsysparam(pn_noraisenodata(),1); return spec(rd(-1),"abc"); ``` 返回:nil ##### pn_CalcCTRLWord 说明: 设置系统参数"CalcCTRLWord"可以控制程序中若有nil参与计算以及浮点除0时,进行警告或者程序抛出异常。 设置语法:setsysparam(pn_CalcCTRLWord(),v); 此为全局变量,对设置后的所有程序有效,默认为0,不启动。 系统参数值说明: 异常值运算报错与警告:警告是指在运行信息中运行时打印提醒信息,报错即出现该类运算时直接报错,终止当前程序。 该参数值类型为二进制:(ps:天软中0b开头表示二进制数) 从低位到高位(位值为1则为启动,为0则为不启动,默认都不启动,则默认值为0): 第一位:浮点除0警告 第二位:浮点除0报错 第三位:Nil计算警告 第四位:Nil计算报错 第五位:Nil大小比较警告 第六位:Nil大小比较报错 第七位:Nil等于不等于警告 第八位:Nil等于不等于报错 第九位:Nil.与[]操作返回nil,并警告 第十位:Nil.与[]操作返回nil,不报错也不警告 使用范例01:只提醒,不报错 ```text Echo #127;//清除掉客户端ECHO窗口中的内容 //启动:浮点除0警告,Nil计算警告,Nil大小比较警告,Nil等于不等于警告 setsysparam("CalcCTRLWord",0b01010101); //等同setsysparam("CalcCTRLWord",85); return array(0/0, 1/0, Nil*2, Nil>0, 1+1); //程序不报错,不终止,且有返回值,打印提醒信息为: float division by zero at:noname86(TSCheckModel) line: 5 float division by zero at:noname86(TSCheckModel) line: 6 NIL calculation at:noname86(TSCheckModel) line: 7 NIL Numerical great/less comparison at:noname86(TSCheckModel) line: 8 ``` 使用范例02:报错+提醒 ```text Echo #127; setsysparam("CalcCTRLWord",0b11111111); //报错+提醒 return array(0/0, 1/0, Nil*2, Nil>0, 1+1); ``` 程序报错:提示第5行出现除0操作 使用范例03:Nil的.与[]操作不报错 ```text setsysparam(pn_CalcCTRLWord(),0x100); //默认是会报错的,设置后不报错只提醒 t:=nil; return array(t.a,t[1]); ``` 程序不报错,返回数组:array(nil,nil),会打印信息如 NIL invoke at:NoName339(xxx) line: 6 NIL [] get at:NoName339(xxx) line: 6 报错类型有以下六类,分别对应如下: 1、float division by zero :出现除0运算 2、NIL calculation:存在Nil运算 3、NIL Numerical great/less comparison:存在Nil大小比较运算 4、NIL Numerical eq/neq comparison:存在Nil等于或不等于运算 5、NIL invoke:存在Nil.操作 6、NIL [] get:存在Nil[n]操作 #### 多市场支撑函数 天软平台支持多市场数据的接入,每个市场都是独立开盘和收盘,用户可以获得所在市场的相关信息。 ##### 内容 - MarketID - MarketInfo - MarketOpenCloseTime - DefaultTimeZone - TSPeriod ##### MarketID ##### MarketInfo 范例 ```text //获取SH60000所属市场的市场相关信息 return MarketInfo(MarketID("SH600000")); ``` 返回结果: 交易的分段信息结构details字段的内容如下: 34200对应的时间是9:30分,41400对应的时间是11:30分。46800对应的是13:00,54000对应的是15:00。 注意:在details中的相应的minutes字段,该分钟数不是当前区间内的分钟数,而是截止到当前区间为止包含的分钟数。 ##### MarketOpenCloseTime ##### DefaultTimeZone ##### TSPeriod 范例 范例一:取万科A在2023年6月28日的一分钟线交易时间序列 ```text stockid:="SZ000002"; cycle:=cy_1m(); dt:=20230628T; return tsperiod(stockid,cycle,dt); ``` //结果: 范例二:取期货合约i2307在2023年6月28日的一分钟线交易时间序列,包含夜盘 ```text stockid:="i2307"; cycle:=cy_1m(); dt:=20230628T; return tsperiod(stockid,cycle,dt); ``` //结果: 范例三:传入自由周期,取万科A在2023年6月28日的8秒线交易时间序列 ```text stockid:="SZ000002"; cycle:=8; dt:=20230628T; return tsperiod(stockid,cycle,dt); ``` //结果: 范例四:传入自由周期以及基准时间点,取万科A在2023年6月28日的8秒线交易时间序列 ```text stockid:="SZ000002"; cycle:=8; dt:=20230628.133015T; return tsperiod(stockid,cycle,dt); ``` //结果: #### 时间相关函数 ##### 内容 - sp_time - tradeDays - FirstDay - LastDay ##### sp_time 范例 范例一:设置的日期为交易日时sp_time()的结果 ```text //系统证券代码对应的交易时间 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20140103));//2014-01-03是一个交易日 a := sp_time(); return a; // 返回41642 (2014-01-03); ``` 范例二:设置的日期为非交易日时sp_time(0)和sp_time(1)的结果对比 ```text //如果设置日期是一个非交易日(2014-01-05周日),sp_time被设定为离指定日最新的一个交易日 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20140105)); b := sp_time(); c:=sp_time(1); return array(b,c); //返回:array(41642,41644),即(2014-01-03和2014-01-05); ``` 范例三:对比sp_time(2)与sp_time(0)、sp_time(1)返回日期的差异 ```text //如果要返回设定的日期,例如(2014-01-05),1月5日是周日,不受交易日的影响。 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20140105)); d := sp_time(1);//返回:41644 (2014-01-05); e:=Nday(1,”t”,sp_time(),”t1”,sp_time(1),”t2”,sp_time(2)); //e中的t列和t1列一致,而t2列可以访问到2014-01-05的日期值41644 ``` 范例四:sp_time 在NDay中的使用 ```text //sp_time 在NDay中的使用; setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20140105)); c := nday(10,'date',datetostr(sp_time()),'close',close()); ``` 结果: 参考SpecDate GetSysParam SetSysParam ##### tradeDays 范例 范例一: ```text setsysparam(pn_stock(),'SZ000002'); beg_date := inttodate(20100101); end_date := inttodate(20101231); //end_date 必须大于beg_date return tradedays(beg_date,end_date);//返回240 ``` 范例二: ```text StockID := "SZ000002"; BegT := inttodate(20130101); EndT := inttodate(20130122); setsysparam(pn_stock(),StockID); setsysparam(pn_cycle(),cy_1m()); return tradedays(BegT,EndT); //结果:240 //万科A在2012年12月26日至2013年1月18日停牌,以上只取到2013-01-21 00:00:00 至2013-01-22 00:00:00之间的交易日数据,即240个分钟周期 ``` 参考TDateTime ##### FirstDay 范例 ```text setsysparam(pn_stock(),'SZ000002'); //获得系统品种的第一个交易日 Return firstday();//33240(1991-01-02); //获得指定参数品种的第一个交易日 Return firstday('SH600086'); //结果:35587(1997-06-06); ``` 参考TDateTime ##### LastDay 范例 ```text //获取某只股票的最后一个交易日。 setsysparam(pn_stock(),'SZ000002'); return lastday();//40794 (2011-09-08) return lastday('SH600001'); //结果:40162(2009-12-15)该股已经下市 ``` 参考TDateTime #### 判定函数 ##### 内容 - IsStock - IsTradeDay - TestStock - IsValidCode - ValidFullCode - IsCashFlowInfoId - IsMainReportId - AnalyseStockArr - IsBalanceInfoId - IsInterestInfoId - IsFundBalanceSheetInfoId - IsFundInterestInfoId - IsStockFinancialItem - IsFinancialInfoID ##### IsStock 范例 ```text //判定一个代码是否为有效的股票代码。 Return IsStock('SZ000001'); //返回1 Return IsStock('SZ100002'); //返回0 ``` ##### IsTradeDay 范例 ```text //判定系统品种在指定时间是否有交易。 setsysparam(pn_stock(),'SZ000002'); return IsTradeDay(inttodate(20110828));//返回0 return IsTradeDay(inttodate(20110826));//返回1 ``` ##### TestStock 范例 ```text //判定是否存在该股票的历史或者实时数据。 Return TestStock('SZ000002'); //返回1 ``` ##### IsValidCode 范例 ```text //判定指定的品种代码是否为合法有效。 return IsValidCode('600036'); //返回1 return IsValidCode('SH600036'); //返回1 return IsValidCode('s600036');//返回0 ``` ```text //获得完整的代码。 return isValidCode('SZ000002',ID);//'SZ000002'是有效的代码,ID为'SZ000002' return IsValidCode('S600',ID);//'S600'不是有效的代码,ID为0 ``` 参考isstock ##### ValidFullCode 范例 ```text //返回一个有效股票代码的完整代码。 stock_id:='000002'; _id:= ValidFullCode(stock_id); Return _id; //返回:'SZ000002' ``` ##### IsCashFlowInfoId 范例 ```text return IsCashFlowInfoId(48003); //返回:1 ``` ##### IsMainReportId 范例 ```text return IsMainReportId(46002); //返回:1 ``` ##### AnalyseStockArr 范例 ```text return AnalyseStockArr('上证50','IF01;IF02'); ``` 返回: ##### IsBalanceInfoId 范例 ```text return IsBalanceInfoId(44003); //返回:1 ``` ##### IsInterestInfoId 范例 ```text return IsInterestInfoId(46003); //返回:1 ``` ##### IsFundBalanceSheetInfoId 范例 ```text return IsFundBalanceSheetInfoId(312002); //返回:1 ``` ##### IsFundInterestInfoId 范例 ```text return IsFundInterestInfoId(314002); //返回:1 ``` ##### IsStockFinancialItem 范例 ```text return IsStockFinancialItem(62003); //返回:1 ``` ##### IsFinancialInfoID - IsStock - IsTradeDay - TestStock - IsValidCode - ValidFullCode - IsCashFlowInfoId - IsMainReportId - AnalyseStockArr - IsBalanceInfoId - IsInterestInfoId - IsFundBalanceSheetInfoId - IsFundInterestInfoId - IsStockFinancialItem - IsFinancialInfoID #### 盘中相关 ##### 内容 - Rd ##### Rd 范例 范例01:取个股盘口行情 ```text setsysparam(pn_stock(),'SZ000002'); rds := array(datetimetostr(sp_time()), rd(0),//股票代码 rd(1),//股票名称 rd(2),//开盘价 rd(3) //昨收 ); return rds; ``` 返回结果: 范例02:取多个股票盘口行情 ```text stocks:=getbk('A股');//所有A股个股 ret:=array(); for i:=0 to length(stocks)-1 do begin setsysparam(Pn_stock(),stocks[i]); ret[i,'StockID']:=stocks[i]; ret[i,'StockName']:=StockName(stocks[i]); ret[i,'盘口时间']:=datetimetostr(rd(-1)); ret[i,'价格']:=rd(6); ret[i,'成交量']:=rd(8);//可以类似新增其它指标 end return ret; ``` 范例03:与行情函数的对比 //默认与现在指标函数对比 ```text SetSysParam(pn_stock(),'SZ000002'); SetSysParam(pn_cycle(),cy_detail()); return array(rd(6),close());//两者返回的结果相同 ``` //与指定日函数取数对比 ```text SetSysParam(pn_stock(),'SZ000002'); SetSysParam(pn_cycle(),cy_detail()); SetSysParam(pn_date(),inttodate(20121212)); return array(rd(6),close());//两者返回的结果不同,rd(6)返回的是最新价格,而close()返回的是20121212这天万科A的收盘价。 ``` 差别在与rd只是得到实盘的价格数据,close()可以通过设置系统时间得到历史某个时点的价格。 //默认当前时间对比 ```text SetSysParam(pn_stock(),'SZ000002'); SetSysParam(pn_cycle(),cy_detail()); return array(rd(-1),sp_time());//两者返回的结果相同 ``` //指定日当前时间对比 ```text SetSysParam(pn_stock(),'SZ000002'); SetSysParam(pn_cycle(),cy_detail()); SetSysParam(pn_date(),inttodate(20121212)); return array(rd(-1),sp_time());//两者返回的结果不同。 ``` 第一个程序都是取到万科A最新的成交时间。在第二个程序中rd(-1)取到的是当前万科A的最新成交时间,但是sp_time()取到的是2012/12/12 00:00:00这个时刻前万科A最新的成交时间。 综上rd得到的就是程序运行这个时间点的行情的最新值,系统参数的设置对rd不起作用。 #### 盘后相关(在当日可用于盘中) ##### 内容 - Low - SseSyl2 - Sys_PrevClose - Open - Close - BuyVol3 - Vol - Buy2 - TradeCount - 行情数据说明 - BuyVol2 - Buy1 - Amount - BuyVol1 - High - SseSyl1 - Buy3 - SectionOpen - Sale2 - SaleVol3 - Sale5 - SectionVol - Buy4 - SaleVol4 - SectionLow - SectionHigh - BuyVol5 - SectionPrevClose - VolRate - Sale3 - SectionAmount - Buy5 - SaleVol1 - Sale1 - SectionTradeCount - SaleVol5 - BuyVol4 - SaleVol2 - Sale4 - InitialtiveBuyVol - SectionalInitialtiveSaleVol - SubmitBuyVol - SectionalInitialtiveBuyAmount - Advance - Prev_Settlement - SectionTradeWay - SubmitSaleVol - Decline - SectionalSubmitBSR - InitialtiveSaleAmount - OpenInterest - SectionalInitialtiveBuyVol - SectionOpenInterest - InitialtiveBuyAmount - SectionalSubmitBuyVol - SectionalSubmitSaleVol - InitialtiveSaleVol - SectionalInitialtiveSaleAmount - SubmitBSR - Settlement - IsEqual - Flat - IsDown - IsUp ##### Low 范例 ```text //返回平安银行最低价 setsysparam(pn_stock(),"SZ000001"); setsysparam(pn_date(),inttodate(20140122)); return low();//返回11.35 ``` 参考High Close Open Vol Amount Sys_PrevClose ##### SseSyl2 范例 ```text //返回股指期货IF1401在2014年1月15日的昨结算价 setsysparam(pn_stock(),"IF1401"); setsysparam(pn_date(),inttodate(20140115)); return SseSyl2 ();//返回2213.6 ``` ##### Sys_PrevClose 范例 ```text //返回平安银行系统昨收 setsysparam(pn_stock(),"SZ000001"); setsysparam(pn_date(),inttodate(20140122)); return Sys_PrevClose ();//返回11.36 ``` 参考High Close Open Vol Low Amount ##### Open 范例 ```text //取平安银行在2025年4月29日的开盘价 setsysparam(pn_stock(),"SZ000001"); setsysparam(pn_date(),20250429T); setsysparam(pn_cycle(),cy_day()); return open();//结果11 ``` ```text //获取万科A ,2014年1月22日当天的复权开盘价,复权方式为比例复权,复权基准日是上市日。 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),strtodate('2014-01-22')); setsysparam(pn_rate(),1); setsysparam(pn_rateday(),-1); return open(); //结果:615.24 ``` ```text //获取万科A ,2014年1月22日14:00:00,1分钟线的复权开盘价,复权方式为比例复权,复权基准日是上市日。 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime('2014-01-22 14:00:00')); setsysparam(pn_rate(),1); setsysparam(pn_rateday(),-1); return open(); //结果:648.38 ``` 参考Close High Low Vol Amount Sys_PrevClose SectionOpen ##### Close 范例 范例一: ```text //不设置股票、时间、周期、复权,默认取上证指数的最近交易日的日线不复权数据 //执行日期2014年1月27日,取当天的数据 return close(); //结果:2033.3 ``` 范例二: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_date(),inttodate(20140115)); return close(); //结果:7.17 ``` 范例三: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 10:00:00,周期为1分钟线,该数据取的是09:59:01至10:00:00区间的最后一笔的价格 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime('2014-01-15 10:00:00')); return close(); //结果:7.18 ``` 范例四: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 10:00:00,周期为1分钟线,比例复权,复权基准日为上市日 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_rate(),1); setsysparam(pn_rateday(),-1); setsysparam(pn_date(),strtodatetime("2014-01-15 10:00:00")); c:=close(); return c; //结果:610.14 ``` 范例五: ```text //应用于nday,取一段时间的收盘,10日均价,20日均价 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_cycle(),cy_day()); setsysparam(pn_date(),strtodate("2014-01-15")); r:=nday(100,'time',datetostr(sp_time()),'close',close(),'ma10',ma(close(),10),'ma20',ma(close(),20)); return r; ``` 结果: 参考Open High Low Vol Amount Sys_PrevClose ##### BuyVol3 范例参见BuyVol1。 ##### Vol 范例 范例一: ```text //不设置股票、时间、周期、复权,默认取上证指数的最近交易日的日线不复权数据 //执行日期2014年1月27日,取当天的数据 return vol(); //结果:8881542144 ``` 范例二: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_date(),inttodate(20140115)); return vol(); //结果:49175340 ``` 范例三: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 10:00:00,周期为1分钟线,该数据取的是09:59:01至10:00:00区间加总的数据 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime('2014-01-15 10:00:00')); return vol(); //结果:307063 ``` 范例四: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 10:00:00,周期为1分钟线,比例复权,复权基准日为上市日 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_rate(),1); setsysparam(pn_rateday(),-1); setsysparam(pn_date(),strtodatetime("2014-01-15 10:00:00")); v:=vol(); return v; //结果:3613.47 ``` 参考High Close Open Amount Low Sys_PrevClose ##### Buy2 范例参见Buy1。 ##### TradeCount 范例 ```text //返回平安银行实际成交笔数 setsysparam(pn_stock(),"SZ000001"); setsysparam(pn_date(),inttodate(20140122)); return TradeCount ();//返回28778 ``` ##### 行情数据说明 行情数据一般与股票pn_stock、周期pn_cycle、当前时间pn_date、复权pn_rate、复权基准日pn_rateday相关。取行情数据相关函数,一般需要先设置当前股票、周期、时间、复权、基准日等系统参数,否则取默认值。默认当前股票为上证指数SH000001、当前周期为日线cy_day()、当前时间为今天today()、不复权、复权基准日为最后交易日。 周期说明: 分钟线的时间分割:从上一时间的01秒开始,到指定周期点的00秒结束。比如1分钟线,取10:00:00的时间区间:[09:59:01,10:00:00]。 其中,close、buy1、buyvol1、buy2、buyvol2、buy3、buyvol3、buy4、buyvol4、buy2、buyvol5、sale1、salevol1、sale2、salevol2、sale3、salevol3、sale4、salevol4、sale5、salevol5、VolRate、InitiativeBuyAmount、InitiativeBuyVol、InitiativeSaleAmount、InitiativeSaleVol以及当日时点累计数据,取的都是该周期内最后一笔的数据。 high、low、open、vol、Amount、TradeCount、SubmitBuyVol、SubmitSaleVol等取区间统计数据。 时间说明: 如果取分时数据,时间设置时,需要加上时间部分,如setsysparam(pn_date(),strtodatetime("2014-01-02 10:00:00")); 如果不指定时间部分,如setsysparam(pn_date(),strtodate ("2014-01-02")),则默认取当天0点0分的数据,即会取到前一个交易日的最后一个分时周期的数据。 ##### BuyVol2 范例参见BuyVol1。 ##### Buy1 范例 ```text //返回平安银行买一价 setsysparam(pn_stock(),"SZ000001"); setsysparam(pn_date(),inttodate(20140122)); return Buy1();//返回11.78,当天收盘时的买一价 ``` ##### Amount 范例 范例一: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 10:00:00,周期为1分钟线,该数据取的是09:59:01至10:00:00区间加总的数据 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime('2014-01-15 10:00:00')); return Amount(); //结果:2204439.5 ``` 范例二: ```text //设置当前股票为‘万科A’,当前时间为2014-01-15 10:00:00,周期为1分钟线,比例复权,复权基准日为上市日 //跟复权无关,复权之后与范例一中不复权的结果相同 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_rate(),1); setsysparam(pn_rateday(),-1); setsysparam(pn_date(),strtodatetime("2014-01-15 10:00:00")); A:=Amount(); return A; //结果:2204439.5 ``` 参考High Close Open Vol Low Sys_PrevClose ##### BuyVol1 范例 ```text //返回平安银行买一量 setsysparam(pn_stock(),"SZ000001"); setsysparam(pn_date(),inttodate(20140122)); return BuyVol1 ();//返回480265,当天收盘时的买一量 ``` ##### High 范例 ```text //返回平安银行最高价 setsysparam(pn_stock(),"SZ000001"); setsysparam(pn_date(),inttodate(20140122)); return High(); //返回11.86 ``` 参考Close Open Low Vol Amount Sys_PrevClose ##### SseSyl1 范例 ```text //返回股指期货IF1401在2014年1月15日的结算价 setsysparam(pn_stock(),"IF1401"); setsysparam(pn_date(),inttodate(20140115)); return SseSyl1 ();//返回2210.4 ``` ##### Buy3 范例参见Buy1。 ##### SectionOpen 范例 通过范例一和范例二,可以比较SectionOpen和open的区别 范例一: ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 10:00:00")); SO:=SectionOpen(); O:=open(); return array(SO,O); //返回array(2220.2,2212.2) ``` 范例二: ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 14:00:00")); SO:=SectionOpen(); O:=open(); return array(SO,O); //返回array(2220.2,2206.6) ``` 参考High close Open Vol Amount Sys_PrevClose ##### Sale2 范例参见Buy1。 ##### SaleVol3 范例参见BuyVol1。 ##### Sale5 范例参见Buy1。 ##### SectionVol 范例 ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 14:00:00")); SV:=SectionVol (); return SV; //返回372927,截止至14:00:00止,1月15日的成交量 ``` 参考High close Open Amount Low Sys_PrevClose ##### Buy4 范例参见Buy1。 ##### SaleVol4 范例参见BuyVol1。 ##### SectionLow 范例 ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 14:00:00")); SL:=SectionLow (); return SL; //返回2196,截止至14:00:00止,1月15日的最低价 ``` 参考High close Open Vol Amount Sys_PrevClose ##### SectionHigh 范例 ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 14:00:00")); SH:=SectionHigh (); return SH; //返回2221.8,截止至14:00:00止,1月15日的最高价 ``` 参考High close Open Vol Amount Sys_PrevClose ##### BuyVol5 范例参见BuyVol1。 ##### SectionPrevClose 范例参见SectionOpen。参考High close Open Vol Low Amount ##### VolRate 范例参见Close。 ##### Sale3 范例参见Buy1。 ##### SectionAmount 范例 ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 14:00:00")); SA:=SectionAmount (); return SA; //返回247128702720,截止至14:00:00止,1月15日的成交金额 ``` 参考High close Open Vol Low Sys_PrevClose ##### Buy5 范例参见Buy1。 ##### SaleVol1 范例参见BuyVol1。 ##### Sale1 范例参见Buy1。 ##### SectionTradeCount 范例 ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 14:00:00")); STC:=SectionTradeCount (); return STC; //返回73643,截止至14:00:00止,1月15日的成交比数 ``` ##### SaleVol5 范例参见BuyVol1。 ##### BuyVol4 范例参见BuyVol1。 ##### SaleVol2 范例参见BuyVol1。 ##### Sale4 范例参见Buy1。 ##### InitialtiveBuyVol 范例参见Close。参考High Close Open Vol Low Sys_PrevClose ##### SectionalInitialtiveSaleVol 范例参见Close。参考High close Open Vol Low Sys_PrevClose ##### SubmitBuyVol 范例参见Vol。参考High Close Open Vol Low Sys_PrevClose ##### SectionalInitialtiveBuyAmount 范例参见Close参考High close Open Vol Low Sys_PrevClose ##### Advance 范例 ```text //获得上证A股板块的涨跌情况; setsysparam(pn_stock(),'SH000001'); setsysparam(pn_date(),inttodate(20110908)); market_ad := array('上涨家数':advance(), '下跌家数':decline(), '平盘家数':flat() ); return market_ad; ``` 结果: 参考Decline Flat ##### Prev_Settlement 范例 //返回沪深300股指期货当月合约在20110907的前结算价 ```text SetSysParam(PN_Stock(),'IF01'); SetSysParam(PN_Date(),inttodate(20110907)); SetSysParam(PN_Cycle(),cy_day()); return Prev_Settlement(); //返回2011年9月7日的前结算价2726.6 ``` ##### SectionTradeWay ##### SubmitSaleVol 范例参见Vol。参考High close Open Vol Low Sys_PrevClose ##### Decline 范例参见Advance参考Advance Flat ##### SectionalSubmitBSR 范例参见Close参考High close Open Vol Low Sys_PrevClose ##### InitialtiveSaleAmount 范例参见Close。参考High Close Open Vol Low Sys_PrevClose ##### OpenInterest 范例 ```text setsysparam(pn_stock(),"IF1401"); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 10:00:00")); OI:=OpenInterest(); return OI; //结果18 ``` ##### SectionalInitialtiveBuyVol 范例参见Close。参考High Close Open Vol Low Sys_PrevClose ##### SectionOpenInterest 范例参见Close。 ##### InitialtiveBuyAmount 范例参见close。参考High close Open Vol Low Sys_PrevClose ##### SectionalSubmitBuyVol 范例参见Close。参考High close Open Vol Low Sys_PrevClose ##### SectionalSubmitSaleVol 范例参见Close。参考High close Open Vol Low Sys_PrevClose ##### InitialtiveSaleVol 范例参见close。参考High close Open Vol Low Sys_PrevClose ##### SectionalInitialtiveSaleAmount 范例参见Close。参考High close Open Vol Low Sys_PrevClose ##### SubmitBSR 范例参见Close。参考High Close Open Vol Low Sys_PrevClose ##### Settlement 范例参见Close。 ##### IsEqual 范例参见IsUp参考IsUp IsDown ##### Flat 范例参见Advance参考Advance Decline ##### IsDown 范例参见IsUp。参考IsUp IsEqual ##### IsUp 范例 ```text //万科在指定区间内的上涨下跌情况; setsysparam(pn_stock(),'SZ000002'); end_date := inttodate(20110909); beg_date := IncWeek(end_date,-1); //end_date 前推一个 r := array(); i := 0; for d := end_date downto beg_date do begin if not istradeday(d) then continue; setsysparam(pn_date(),d); r[i]['date'] := datetostr(d); if IsUp() then r[i]['ud_state'] := '涨'; else if IsDown() then r[i]['ud_state'] := '跌'; else if IsEqual() then r[i]['ud_state'] := '平'; i++; end; return r; ``` 返回结果如下图: 参考IsDown IsEqual #### 时间序列统计 此处的时间序列统计是直接对天软数据仓库中的时间序列数据的统计。如果需要对其他类型的数据进行统计,可以使用统计函数或者TS-SQL的时间序列统计功能。 ##### 内容 - HHV - LLV - MA - EMA - SMA - Count - SumN - SP_STD - SP_STDP - SP_VAR - SP_VARP - SP_AVEDEV - SP_DEVSQ - Cross - sp_large - sp_small - sp_percentile - sp_percentrank - sp_quartile - sp_rank - sp_trimmean - sp_frequency - sp_geomean - sp_harmean - sp_median - sp_mode - sp_product - sp_totalvariance - sp_norm - sp_skewness - sp_kurtosis - sp_skewness2 - sp_kurtosis2 - 双序列统计 - 时间序列统计缓存标志与性能加速 ##### HHV 范例 ```text //获取万科A(SZ000002)截止2011-09-09日14个交易日内的最高,最低的收盘价以及 //发生日期。 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); N := 14; r :=array('h_value':hhv(close(),N), 'h_date':datetostr(GetSysParam('hhvtime')), 'l_value':llv(close(),N), 'l_date':datetostr(GetSysparam('llvtime')) ); return r; ``` 结果: 参考LLV ##### LLV 范例参见HHV 参考HHV ##### MA 范例 范例一: ```text //获得万科A(SZ000002)在2011-09-09日的10日均价 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); N := 10; return ma(close(),N); //返回8.103 ``` 范例二: ```text //获取万科A一段时间的10日均价 setsysparam(pn_stock(),"SZ000002"); setsysparam(pn_date(),strtodate("2014-01-15")); t:=nday(100,'time',sp_time(),'close',close(),'ma10',ma(close(),10),'ma20',ma(close(),20)); return t; ``` 结果: ##### EMA 算法函数EMA算法说明: Y=EMA(X,N) 则Y=[2*X+(N-1)*Y']/(N+1), 其中Y'表示上一周期Y值,它的初值为X的第一个数据,一般推到上市日当天 手算可参考: 附件:ema手算.xlsx 范例 ```text //获得万科A(SZ000002)在2011-09-09日的10日平滑移动均价 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); N := 10; return ema(close(),N); // 结果:8.1158 ``` ##### SMA 算法若Y=SMA(X,N,M),则Y=[M*X+(N-M)*Y']/N,其中Y'表示上一周期Y值,N必须大于M。范例 ```text //获得万科A(SZ000002)在2011-09-09日的10日平滑移动均价,3为权重 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); N := 10; M :=3; return sma(close(),N,M);//返回8.0914 ``` ##### Count 范例 ```text //上证指数在最近100天内的上涨天数; setsysparam(pn_stock(),'SH000001'); setsysparam(pn_date(),inttodate(20140122)); return count(isup(),100); //返回47。 ``` ##### SumN 范例 ```text //获得万科A(SZ000002)在2011-09-09日的5日总成交量 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); return sumn(VOL(),5); // 返回152502152 ``` ##### SP_STD 范例 ```text //计算万科A截止20110909前30个交易日股价的统计信息 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); _stat := array(); _stat := array('标准差':sp_std(close(),30), '总体标准差':sp_stdp(close(),30), '方差':sp_var(close(),30), '总体方差':sp_varp(close(),30), '平均绝对偏差':sp_avedev(close(),30), '偏差平方和':sp_devsq(close(),30)); return _stat; ``` 结果: 参考时间序列统计 ##### SP_STDP 范例 ```text //计算万科截止20110909前30个交易日股票的总体标准差 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); return sp_stdp(close(),30);//返回0.1456 ``` 参考时间序列统计 ##### SP_VAR 范例 ```text //计算万科截止20110909前30个交易日股票的样本方差 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); return sp_var(close(),30);//返回0.0219 ``` 参考时间序列统计 ##### SP_VARP 范例参见SP_VAR参考时间序列统计 ##### SP_AVEDEV 范例参见SP_VAR参考时间序列统计 ##### SP_DEVSQ 范例参见SP_VAR参考时间序列统计 ##### Cross 范例 ```text //万科在指定区间内的均线穿越情况; setsysparam(pn_stock(),'SZ000002'); end_date := inttodate(20110829); beg_date := IncWeek(end_date,-1); //end_date 前推一个 r := array(); i := 0; for d := end_date downto beg_date do begin if not istradeday(d) then continue; setsysparam(pn_date(),d); r[i]['date'] := datetostr(d); case cross(close(),ma(close(),5)) of 1:begin r[i]['cross_state'] := '突破5日均线'; end -1:begin r[i]['cross_state'] := '跌破5日均线'; end 0:begin r[i]['cross_state'] := ''; end end; i++; end; return r; ``` 返回结果: ##### sp_large 算法 备注:指定表达式与系统当前时间相关,M的取值数据小于N.范例 万科A在2018/10/30最近10个日线交易日内分时数据成交量的最大值 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"分钟线最大成交量",Specall(SP_Large(Vol(),1,240),Array(Pn_Cycle():Cy_1m(),pn_date():SP_time()+0.99))); ``` ##### sp_small 范例 万科A在2018/10/30最近12月中月末最后5个日线交易日的最小值价格序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); Setsysparam(pn_Cycle(),cy_Month()); return Nday(12,"日期",SP_time(),"月末5日最小价格",Specall(SP_Small(Close(),1,5),Array(Pn_Cycle():Cy_day()))); ``` ##### sp_percentile 范例 万科A在2018/10/30最近10个日线交易日中每天分钟线收盘价格第0.8百分比对应的价格数据序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); Return Nday(10,"日期",SP_time(),"价格",SpecAll(SP_percentile(close(),0.8,240),Array(pn_Cycle():Cy_1m(),pn_date():SP_time()+0.99))); ``` ##### sp_percentrank 范例万科A在2018/10/30日最近10个交易的收盘价在每天分时价格的百分比排名 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); Return Nday(10,"日期",SP_time(),"百分比",SpecAll(SP_percentRank(close(),close(),240),Array(pn_Cycle():Cy_1m(),pn_date():SP_time()+0.99))); ``` ##### sp_quartile 范例万科A在2018/10/30日最近10个交易日的收盘价在每天第2个四分位的价格序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"价格",Specall(SP_quartile(Close(),2,4800),Array(Pn_Cycle():Cy_3s(),pn_date():SP_time()+0.99))); ``` ##### sp_rank 范例万科A在2018/10/30最近10个交易日的收盘价在每日分时价格序列中的排名 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); Return Nday(10,"日期",SP_time(),"排名",SpecAll(SP_Rank(close(),close(),240),Array(pn_Cycle():Cy_1m(),pn_date():SP_time()+0.99))); ``` ##### sp_trimmean 范例万科A在2018/10/30最近10个交易日每天交易价格去除掉首尾比例占10%后的平均价格序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"平均价格",Specall(SP_trimmean(Close(),0.8,4800),Array(Pn_Cycle():Cy_3s(),pn_date():SP_time()+0.99))); ``` ##### sp_frequency 范例万科A在2018/10/30最近20个交易日每天涨幅在(-7,-3,0,3,7)的分布情况 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return sp_frequency(Stockzf3(),Array(-7,-3,0,3,7),20); ``` ##### sp_geomean 范例万科A在2018/10/30最近10个交易日每天60分钟线的几何平均价格序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(), "几何平均价格",Specall(SP_geomean(Close(),4), Array(Pn_Cycle():Cy_60m(),pn_date():SP_time()+0.99))); ``` ##### sp_harmean 范例万科A在2018/10/30最近10个交易日每天交易价格的调和平均价格序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"调和平均价格",Specall(SP_Harmean(Close(),4800),Array(Pn_Cycle():Cy_3s(),pn_date():SP_time()+0.99))); ``` ##### sp_median 范例万科A在2018/10/30前30个交易日中每天交易价格的中位数序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(30,"日期",SP_time(),"众数",Specall(Sp_Median(Close(),tradedays(SP_time(),SP_time()+14/24+57/24/60)),Array(pn_date():SP_Time()+14/24+57/24/60,pn_Cycle():Cy_3s()))); ``` ##### sp_mode 范例万科A在2018/10/30前30个交易日中每天交易价格的众数序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(30,"日期",SP_time(),"众数",Specall(Sp_Mode(Close(),tradedays(SP_time(),SP_time()+14/24+57/24/60)),Array(pn_date():SP_Time()+14/24+57/24/60,pn_Cycle():Cy_3s()))); ``` ##### sp_product 范例万科A在2018/10/30最近12个月中每月最后5个日线交易日累计涨幅序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); Setsysparam(pn_Cycle(),cy_Month()); return Nday(12,"日期",SP_time(),"最后一周累计涨幅",Specall((SP_product(1+stockzf3()/100,5))*100-100,array(pn_date():SP_time(),pn_Cycle():Cy_day()))); ``` ##### sp_totalvariance 范例万科A在2018/10/30最近10个交易日每天交易价格的总体偏差 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"偏差",Specall(SP_totalvariance(Close(),4800),array(pn_date():SP_time()+0.99,pn_Cycle():Cy_3s()))); ``` ##### sp_norm 范例万科A在2018/10/30最近10个交易日每天成交价格相对平均价格波动的标准差 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(10,"日期",SP_time(),"标准差",1/SQRT(4800)*Specall(sp_Norm(Close()-StockPJCJ4(SP_time()),4800),Array(pn_Cycle():Cy_3s(),pn_date():SP_time()+0.99))); ``` ##### sp_skewness 范例万科A在2018/10/30最近10个交易日每天交易价格的偏度序列,其中偏度的计算用的是3秒线的价格序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"偏度",Specall(SP_skewness(Close(),4800),array(pn_date():SP_time()+0.99,pn_Cycle():Cy_3s()))); ``` ##### sp_kurtosis 范例万科A在2018/10/30最近10个交易日每天交易价格的峰度序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"峰度",Specall(SP_kurtosis(Close(),4800),array(pn_date():SP_time()+0.99,pn_Cycle():Cy_3s()))); ``` ##### sp_skewness2 范例万科A在2018/10/30最近10个交易日每天交易价格的偏度序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"偏度",Specall(SP_skewness2(Close(),4800),array(pn_date():SP_time()+0.99,pn_Cycle():Cy_3s()))); ``` ##### sp_kurtosis2 范例 万科A在2018/10/30最近10个交易日每天交易价格的峰度序列 ```text Setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return Nday(10,"日期",SP_time(),"峰度",Specall(SP_kurtosis2(Close(),4800),array(pn_date():SP_time()+0.99,pn_Cycle():Cy_3s()))); ``` ##### 双序列统计 ###### 内容 - sp_cov - sp_correl - sp_slope - sp_intercept - sp_rsq - sp_steyx - sp_slopeandintercept ###### sp_cov 范例2018/10/30万科与大盘最近10天每天与大盘走势的协方差序列 ```text setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(10,"日期",SP_time(),"协方差",Specall(SP_Cov(close(),Spec(Close(),"SH000001"),4800),Array(pn_date():SP_time()+0.99,pn_Cycle():cy_3s()))); ``` ###### sp_correl 范例2018/10/30万科与大盘最近10天每天与大盘走势的相关系数序列 ```text setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(10,"日期",SP_time(),"相关系数",Specall(SP_Correl(close(),Spec(Close(),"SH000001"),4800),Array(pn_date():SP_time()+0.99,pn_Cycle():cy_3s()))); ``` ###### sp_slope 范例2018/10/30万科与大盘最近10天每天与大盘走势的回归斜率 ```text setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(10,"日期",SP_time(),"回归斜率",Specall(SP_slope(close(),Spec(Close(),"SH000001"),4800),Array(pn_date():SP_time()+0.99,pn_Cycle():cy_3s()))); ``` ###### sp_intercept 范例2018/10/30万科与大盘最近10天每天与大盘走势的回归截距 ```text setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(10,"日期",SP_time(),"回归截距",Specall(SP_intercept(close(),Spec(Close(),"SH000001"),4800),Array(pn_date():SP_time()+0.99,pn_Cycle():cy_3s()))); ``` ###### sp_rsq 范例2018/10/30万科与大盘最近10天每天与大盘走势的Pearson乘积矩相关系数的平方 ```text setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(10,"日期",SP_time(),"系数平方",Specall(SP_RSQ(close(),Spec(Close(),"SH000001"),4800),Array(pn_date():SP_time()+0.99,pn_Cycle():cy_3s()))); ``` ###### sp_steyx 范例2018/10/30万科与大盘最近10天每天与大盘走势的相对标准偏差 ```text setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday(10,"日期",SP_time(),"相对标准偏差",Specall(SP_steyx(close(),Spec(Close(),"SH000001"),4800),Array(pn_date():SP_time()+0.99,pn_Cycle():cy_3s()))); ``` ###### sp_slopeandintercept 范例2018/10/30万科与大盘最近10天每天与大盘走势的回归斜率和截距 ```text setsysparam(pn_Stock(),"SZ000002"); Setsysparam(pn_date(),20181030T); return nday3(10,Specall(SP_slopeandintercept(close(),Spec(Close(),"SH000001"),4800),Array(pn_date():SP_time()+0.99,pn_Cycle():cy_3s()))); ``` ##### 时间序列统计缓存标志与性能加速 技术时间序列统计相关函数会自动进行数据缓存以进行加速,例如: EMA(Close(),30)在执行的时候,如果存在在Nday或者MA,EMA等序列函数中,每一步计算均会利用前一个交易日计算的缓存。这样效率可以得到大大的提高,但是这个时候产生了一个问题,例如: EMA(EMA(Close(),N),30),在这个外围EMA的计算中,由于内层EMA的参数N是不定的,所以外层EMA的缓存无法知道按照什么规则进行缓存,如果直接缓存的话,有可能在N的不同参数的调用时得到错误的结果。这个时候,我们通过给每个时间序列统计函数(CROSS除外)增加了一个可选的参数,即一个缓存的字符串标志。这个字符串标志作用域仅仅用于当前调用的时间序列统计函数,和其他调用的标志定义无关(也就是说可以和其他调用的标志定义重复也可以)。 这样说起来很拗口,我们可以来一个例子来说明: DEA:=EMA(EMA(Close(),Short)-EMA(Close(),Long),M,""$Short$" "$Long); 这个上述代码是MACD的定义中的一段代码,我们可以看到,对于DEA而言,由于EMA的内还有两个EMA的计算,分别和SHORT参数和LONG参数有关,我们可以将SHORT参数和LONG参数组成一个字符串来作为外层EMA的缓存标志串,这样,当具有缓存的时候,当SHORT和LONG进行了改变,我们不会利用其他参数组存贮的缓存数据来进行EMA的计算,也就是说我们只会用SHORT和LONG相同的计算缓存,这样就避免了缓存错误的问题。 对于上述的除CROSS函数以外的时间序列统计函数而言,我们均支持在最后增加一个可选的缓存标志串。 由于缓存会占据存贮空间,而且还因为不会因数据变化而改变而得到不正确的结果,因此缓存仅仅在NDAY以及上述时间序列函数中被打开,在执行完最外层的时间序列统计函数之后缓存会被清除。 我们有时候会在策略回测多因素模型等开发的时候,希望利用到技术指标加速,但我们又不是使用NDAY等序列函数来提取数据,而是通过循环来提取数据,这个时候,我们需要利用相应的指令来打开这个缓存。有的时候,我们又或许不希望使用缓存。 ###### 内容 - TechCacheDo打开技术类缓存 - NoTechCacheDo禁用技术类缓存 ###### TechCacheDo打开技术类缓存 范例 ```text TechCacheDo Begin for i:=0 to length(Days)-1 do begin setsysparam(pn_Date(),Days[i]); Kdj:=kdj_f(9,3,3,0);//在时间循环中,需要在KDJ计算中进行加速: .......................... end; End; ``` ###### NoTechCacheDo禁用技术类缓存 #### 成交明细数据函数 ##### 内容 - toverData - toverDataEx - TD - TDByIndex - TDCount - TDCountEx - TDInfo - TDInfoByIndex - TDSum ##### toverData 范例 ```text //获得万科A(SZ000002)当日(交易日)的成交明细; setsysparam(pn_stock(),'SZ000002'); t:=toverdata(inttodate(20140115)); update t set ['time']=datetimetostr(['time']) end; return t; ``` 结果: ##### toverDataEx 范例 ```text //获得万科A(SZ000002)在2014-1-15日13点至15点之间,成交量在10000~90000 //成交金额0~9000000,价格7.00~8.00之间的交易明细 setsysparam(pn_stock(),'SZ000002'); fields := 0; d := inttodate(20140115); trade_flag := 0; beg_time := strtotime('13:00:00'); end_time := strtotime('15:00:00'); min_vol := 10000; min_amount := 0; min_price := 7.00; max_vol := 90000; max_amount := 9000000; max_price := 8.00; return toverdataex(fields,d,trade_flag,beg_time,end_time, min_vol,min_amount,min_price,max_vol,max_amount,max_price); ``` 结果: ##### TD 范例 ```text //获得万科A(SZ0000002)在2011-09-09 14:15:33的10s setsysparam(pn_stock(),'SZ000002'); setsysparam(PN_Cycle(),cy_10s()); setsysparam(pn_date(),strtodatetime('2011-09-09 14:15:33')); tds := array( datetimetostr(td(0)),//时间 td(1),//价格 td(2),//成交金额 td(3) //成交量 ); return tds; ``` 返回结果: ##### TDByIndex 范例 ```text //返回万科A在20110909日第100条交易记录的时间、价格、成交金额和成交量。 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); tds := array( datetimetostr(tdbyindex(0,100)),//日期时间 tdbyindex(1,100),//价格 tdbyindex(2,100),//成交金额 tdbyindex(3,100) //成交量 ); return tds; ``` 返回结果如下图: ##### TDCount 范例 ```text //获取万科A(SZ000002)截止2011-09-09的5天内系统记录的交易记录数量 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); return nday(5,'date',datetostr(sp_time()),'系统记录交易点数量',tdcount()); ``` 返回结果如下图: ##### TDCountEx 范例 ```text //获得万科A(SZ000002)在2014-1-15日13点至15点之间,成交量在10000~90000 //成交金额0~9000000,价格7.00~8.00之间的主买的交易记录个数 setsysparam(pn_stock(),'SZ000002'); fields := 0; d := inttodate(20140115); trade_flag := 1; beg_time := strtotime('13:00:00'); end_time := strtotime('15:00:00'); min_vol := 10000; min_amount := 0; min_price := 7.00; max_vol := 90000; max_amount := 9000000; max_price := 8.00; return tdcountex(d,trade_flag,beg_time,end_time, min_vol,min_amount,min_price, max_vol,max_amount,max_price); //返回221 ``` ##### TDInfo 范例 ```text //获得万科A(SZ000002)在2014-1-15 10:00:00时间点的交易明细数组 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_cycle(),cy_1m()); setsysparam(pn_date(),strtodatetime("2014-01-15 10:00:00")); return TDInfo(); ``` 返回结果: ##### TDInfoByIndex 范例 ```text //获得万科A(SZ000002)在2011-9-9日最后一条交易明细数组 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20110909)); return TDInfoByIndex(-1); ``` 返回结果如下图: ##### TDSum 范例 ```text //对万科A(SZ000002)在2011-9-9日统计满足以下条件的成交量,成交金额: //13点至15点之间、成交量在10000~90000 //成交金额0~9000000、价格8.00~8.50之间且是主买 setsysparam(pn_stock(),'SZ000002'); d := inttodate(20110909); trade_flag := 1; beg_time := strtotime('13:00:00'); end_time := strtotime('15:00:00'); min_vol := 10000; min_amount := 0; min_price := 8.00; max_vol := 90000; max_amount := 9000000; max_price := 8.50; TDSum(sumVol,sumAmount,d,trade_flag,beg_time,end_time, min_vol,min_amount,min_price, max_vol,max_amount,max_price); return array(sumVol,sumAmount); ``` 返回结果如下图: #### 交易明细字段标识函数 ##### 内容 - tdf_buy2 - tdf_sale3 - tdf_vol - tdf_buy5 - tdf_time - tdf_price - tdf_buy3 - tdf_amount - tdf_sale1 - tdf_lb - tdf_sale4 - tdf_buy4 - tdf_sale5 - tdf_buy1 - tdf_sale2 - tdf_buy3count - tdf_tradecount - tdf_sale2count - tdf_buy5count - tdf_buy2count - tdf_sale3count - tdf_sale5count - tdf_buy1count - tdf_buy4count - tdf_syl2 - tdf_sale1count - tdf_sale4count - tdf_syl1 ##### tdf_buy2 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale3 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_vol 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy5 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_time 范例 ```text //获得万科A(SZ000002)在2011-9-9日13点至15点之间,成交量在10000~90000 //成交金额0~9000000,价格8.00~8.50之间的时间序列 setsysparam(pn_stock(),'SZ000002'); fields := 0; d := inttodate(20110909); trade_flag := 0; beg_time := strtotime('13:00:00'); end_time := strtotime('15:00:00'); min_vol := 10000; min_amount := 0; min_price := 8.00; max_vol := 90000; max_amount := 9000000; max_price := 8.50; return toverdataex(tdf_time(),d,trade_flag,beg_time,end_time, min_vol,min_amount,min_price,max_vol,max_amount,max_price); ``` 返回结果如下图: 参考toverDataEx ##### tdf_price 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy3 范例参见tdf_time。参考toverDataEx ##### tdf_amount 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale1 范例参见tdf_time。参考toverDataEx ##### tdf_lb 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale4 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy4 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale5 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy1 范例参见tdf_time。参考toverDataEx ##### tdf_sale2 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy3count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_tradecount 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale2count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy5count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy2count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale3count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale5count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy1count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_buy4count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_syl2 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale1count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_sale4count 范例参见tdf_time。参考toverDataEx tdf_time ##### tdf_syl1 范例参见tdf_time。参考toverDataEx tdf_time #### 查询和轮询函数 ##### 内容 - Query - Foreach ##### Query 范例 ```text //查询指定日期,在板块上证A股;创业板以及SZ000001;SZ000002;SZ000997中满足 //收盘价大于10日均线的股票的以下信息:证券代码、证券名称,收盘价。 setsysparam(pn_date(),inttodate(20110909)); data:=Query('上证A股;创业板','SZ000001;SZ000002;SZ000997', close()>ma(close(),10),'', '证券代码',DefaultStockID(), '证券名称',CurrentStockName(), '收盘价',close()); return data; ``` 结果: ##### Foreach #### 市场和板块函数 ##### 内容 - GetBK - GetUserBKList - GetBKList - GetUserBKList2 - GetBKList2 ##### GetBK 范例 ```text stocks := GetBk('上证A股;创业板'); return stocks; ``` 返回结果如下图: 参考GetUserBKList GetBKList GetUserBKList2 GetBKList2 getbkbydate ##### GetUserBKList 范例 //范例一:获取所有的用户板块名称 ```text my_sectors := GetUserbkList (); return my_sectors; ``` //范例二:获取指定目录下的用户板块名称 ```text //用户板块的申万行业下,有多个子目录,用户需要指定子目录获取子目录下的用户板块 my_sectors := GetUserbkList ("申万行业\\申万金融业"); return my_sectors; ``` 参考GetBK GetBKList GetUserBKList2 GetBKList2 ##### GetBKList 范例 范例01: ```text //获得申万行业列表,其中,“申万行业”是申万相关行业板块的目录名称或父板块名称。 bk_list := GetBKList('申万行业'); return bk_list; ``` 返回结果如下: 范例02: ```text //获得申万行业-采掘业子行业列表 bk_list2 := GetBKList('申万行业\\申万采掘'); return bk_list2; ``` 返回结果如下: 参考GetBK GetUserBKList GetUserBKList2 GetBKList2 ##### GetUserBKList2 范例 ```text //获得用户板块的申万行业下的所有板块及其所属的行业组别 my_sectors :=GetUserBKList2("申万行业"); return my_sectors; ``` 结果: 参考GetBK GetBKList GetUserBKList GetBKList2 ##### GetBKList2 范例 ```text //返回所有系统板块列表 return GetBklist2(); ``` 返回结果如下图: 范例二: ```text //返回系统申万行业板块列表 return GetBklist2('申万行业'); ``` 结果(部分): 参考GetBK GetUserBKList GetUserBKList2 GetBKList #### 取行情数据序列函数 ##### 内容 - NDay - NDay2 - NDay3 ##### NDay 范例 ```text //返回万科A历史2天的收盘价 setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(),inttodate(20140115)); Table:=NDay( 2, 'close' , Close() ); {默认当前周期为日线,设置当前时间为2014年1月15日,当前股票的昨天的收盘价格为7.23,今天的当前价格为7.17,则返回的结果相当于 Table:= Array (('close': 7.23),('close': 7.17)); 也就是说X相当于 Table[0]['close']:=7.23; Table[1]['close']:=7.17; } ``` ```text //取得万科截止20110909前30个交易日的若干行情信息; setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); return nday(30,'时间',datetimetostr(sp_time()), '收盘价',close(), '当日高价',high(), '30日均线',ma(close(),30)); ``` 结果(部分): 参考NDay2 NDay3 ##### NDay2 范例 ```text //用NDAY2取得万科截止20110909前30个交易日的若干行情信息; setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); setsysparam(pn_nDay(),30); return nday2('时间',datetimetostr(sp_time()), '收盘价',close(), '当日高价',high(), '30日均线',ma(close(),30)); ``` 返回结果(部分): 参考NDay NDay3 ##### NDay3 范例 ```text //取得万科截止20110909前30个交易日的价格序列(按交易日升序排列); setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); return nday3(30,close()); ``` 结果: 参考NDay NDay2 #### 引用指定函数 ##### 内容 - Ref - SpecDate - Spec - SpecAll ##### Ref 范例 ```text setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); r := array(); r := array('设定日价格':close(),//20110909 '设定日前1交易日收盘':ref(close(),1),//20110908 '设定日后1交易日收盘':ref(close(),-1));//20110913 return r; ``` 结果: ##### SpecDate 范例 ```text setsysparam(pn_stock(),'SZ000002'); setsysparam(pn_date(), inttodate(20110909)); return nday(30,'date',datetostr(sp_time()), 'close',close(), //使用年初价格作为参照。 'close_20110101',specdate(close(),inttodate(20110101))); ``` 结果(部分): 参考Spec TDateTime ##### Spec 范例 ```text //获得两个指数时间序列净值曲线 setsysparam(pn_stock(),'SH000904'); setsysparam(pn_date(), inttodate(20110909)); N := 30; beg_close1 := ref(close(),N-1);//SH000904 N日前收盘 beg_close2 := spec(ref(close(),N-1),'SH000300');//SH000300 N日前收盘 return nday(N,'date',datetostr(sp_time()), '中证200',1000*close()/beg_close1, '沪深300',1000*spec(close(),'SH000300')/beg_close2); ``` 结果(部分): 参考SpecDate ##### SpecAll 范例 ```text return specall(close(), array(pn_stock():'SZ000001', pn_date():inttodate(20140117), pn_rate():1, pn_rateday():-1)); //获取SZ000001的2014年01月17日的复权价格,复权方式为比例复权,复权基准日为上市日。 ``` 参考SpecDate Spec #### 系统参数设置和获取函数 ##### 内容 - GetSysParam - SetSysParam - sp_s - sp_g ##### GetSysParam 范例 ```text //获取当前的股票代码 Return GetSysParam(pn_stock());//返回’SH000001’; ``` 参考SetSysParam 系统参数名称函数 块环境设置语句 SYSPARAMS ##### SetSysParam 范例 范例1:设置及提取 ```text setsysparam('Abc',123);//自定义参数名为'Abc',并赋值为123 return getsysparam('Abc');//提取参数名为'Abc'的值。 //返回123 //或 setsysparam('Abc',123); return sysparams['Abc'];//提取参数名为'Abc'的值。 ``` 范例2:常用于设置系统参数如证券,时间,周期等。 ```text setsysparam(pn_stock(),'SZ000002');//设置当前证券为万科A setsysparam(pn_date(),20190218T);//设置当前时间为2019-2-18 setsysparam(pn_cycle(),cy_day());//设置周期为日线 return close();//提取收盘价 //返回27.2 ``` 范例3: ```text //设置当前的股票为平安银行SZ000001,设置当前的时间为2014-01-15 Setsysparam(pn_stock(),'SZ000001'); Setsysparam(pn_date(),inttodate(20140115)); return close(); ``` 参考GetSysParam 系统参数名称函数 块环境设置语句 SYSPARAMS ##### sp_s 范例 范例一:设置及提取 ```text sp_s ('Abc',123);//自定义参数名为'Abc',并赋值为123 return sp_g('Abc');//提取参数名为'Abc'的值。 //返回123 ``` 范例二:常用于设置系统参数如证券,时间,周期等。 ```text sp_s (pn_stock(),'SZ000002');//设置当前证券为万科A sp_s (pn_date(),20190218T);//设置当前时间为2019-2-18 sp_s (pn_cycle(),cy_day());//设置周期为日线 return close();//提取收盘价 //返回27.2 ``` ##### sp_g 范例 ```text //获取当前的股票代码 Return sp_g (pn_stock());//返回’SH000001’; ``` #### 复权类型函数 ##### 内容 - rt_none - rt_scale - rt_complex ##### rt_none 参考pn_Rate ##### rt_scale 参考pn_Rate ##### rt_complex 参考pn_Rate #### 复权基准日函数 ##### 内容 - rd_lastday - rd_firstday ##### rd_lastday 参考pn_RateDay ##### rd_firstday 参考pn_RateDay #### 周期函数 周期函数为设置周期系统参数的常量函数。 周期有四类,第一类是日、周、月、季、半年、年,第一类是分钟为单位的周期,第三类是秒为单位的周期,第四类是以成交明细里的点为单位。 从2014年7月起,天软平台开始提供了对自由周期的支持,自由周期分为两种类型,一种是任意秒滚动周期,另外一种是任意交易日滚动周期。对于任意秒滚动周期而言,周期是不跨天的,也就是说任意一个周期区间均在同一个交易天内。此外,在设置原有固定类型秒或者分钟周期的时候,我们可以用设置pn_FreeCycle()系统参数来转换为任意秒滚动周期。 参见:Q:天软自由周期 ##### 内容 - Cy_month - Cy_20m - Cy_1m - Cy_HalfYear - Cy_5m - Cy_60m - Cy_Year - Cy_week - Cy_2m - Cy_10m - Cy_Quarter - Cy_120m - Cy_day - Cy_30m - Cy_3m - Cy_40m - Cy_TwoYear - Cy_15m - cy_trailingseconds - Cy_6s - cy_trailingdays - Cy_15s - Cy_Detail - Cy_30s - Cy_5s - Cy_2s - Cy_12s - Cy_1s - Cy_10s - Cy_20s - Cy_4s - Cy_FreeCycle - Cy_3s - Cy_Halfs ##### Cy_month 参考pn_Cycle 周期函数 ##### Cy_20m 参考pn_Cycle 周期函数 ##### Cy_1m 参考pn_Cycle 周期函数 ##### Cy_HalfYear 参考pn_Cycle 周期函数 ##### Cy_5m 参考pn_Cycle 周期函数 ##### Cy_60m 参考pn_Cycle 周期函数 ##### Cy_Year 参考pn_Cycle 周期函数 ##### Cy_week 参考pn_Cycle 周期函数 ##### Cy_2m 参考pn_Cycle 周期函数 ##### Cy_10m 参考pn_Cycle 周期函数 ##### Cy_Quarter 参考pn_Cycle 周期函数 ##### Cy_120m 参考pn_Cycle 周期函数 ##### Cy_day 参考pn_Cycle 周期函数 ##### Cy_30m 参考pn_Cycle 周期函数 ##### Cy_3m 参考pn_Cycle 周期函数 ##### Cy_40m 参考pn_Cycle 周期函数 ##### Cy_TwoYear 范例 ```text Return Cy_TwoYear(); //结果:’两年’ ``` ##### Cy_15m 参考pn_Cycle 周期函数 ##### cy_trailingseconds 参考pn_Cycle 周期函数 自由周期 ##### Cy_6s 参考pn_Cycle 周期函数 ##### cy_trailingdays 参考pn_Cycle 周期函数 自由周期 ##### Cy_15s 参考pn_Cycle 周期函数 ##### Cy_Detail 参考pn_Cycle 周期函数 ##### Cy_30s 参考pn_Cycle 周期函数 ##### Cy_5s 参考pn_Cycle 周期函数 ##### Cy_2s 参考pn_Cycle 周期函数 ##### Cy_12s 参考pn_Cycle 周期函数 ##### Cy_1s 参考pn_Cycle 周期函数 ##### Cy_10s 参考pn_Cycle 周期函数 ##### Cy_20s 参考pn_Cycle 周期函数 ##### Cy_4s 参考pn_Cycle 周期函数 ##### Cy_FreeCycle 参考pn_Cycle 周期函数 自由周期 ##### Cy_3s 参考pn_Cycle 周期函数 ##### Cy_Halfs 参考pn_Cycle 周期函数 #### 财务函数 ##### 内容 - Report - ReportOfAll - ReportOfDiy - ReportExists - ReportHist - ReportHistExists - LastQuarterData - Last12MData - Base - BaseExists - InfoArray - InfoArrayExt - InfoArrayExists - bName - idtType - idfType - BasicIDExists - BaseArray ##### Report 范例 ```text //提取平安银行2017年3季报的营业收入 setsysparam(pn_stock(),'SZ000001'); setsysparam(pn_date(),20171031); return report(46002,20170930); //结果:79833000000 ``` ##### ReportOfAll 范例 范例1:提取平安银行2017年3季报的营业收入,与report一致 ```text setsysparam(pn_stock(),'SZ000001'); setsysparam(pn_date(),20171031); return reportofall(46002,20170930); //结果:79833000000 ``` 范例2:提取平安银行2017年3季报的每股收益,report不能获取该指标,是report功能的扩展 ```text setsysparam(pn_stock(),'SZ000001'); setsysparam(pn_date(),20171031); return reportofall(9900000,20170930); //结果:1.12 ``` ##### ReportOfDiy 范例 (注:实际的结果不一定和下同) ```text Setsysparam(pn_stock(),"SZ000002"); return ReportOfDiy(8025001, 20091231,now(),'刘研究员');//假定8025001为预测每股收益,则返回最新的刘研究员的2009年年度的预测每股收益。 return ReportOfDiy(8025001, 20091231,now(),"");//则返回最新的任何研究员的2009年年度的预测每股收益。 ``` ##### ReportExists 范例 ```text //通过红利比(18007)判断SH601888在2011年是否分红 setsysparam(pn_stock(),'SH601888'); return ReportExists(18007,20101231); //返回1,是 ``` ##### ReportHist 范例 ```text //获取SH601888公布的利润分配表的所有报告期ID列表 setsysparam(pn_stock(),'SH601888'); //营业收入ID(利润分配表的一个科目) infoid:=DataBaseRatioId(1); return ReportHist(infoid); ``` //返回结果如下图: ```text //获取SH601888公布的利润分配表的最接近20140331的报告期 setsysparam(pn_stock(),'SH601888'); //营业收入ID(利润分配表的一个科目) infoid:=DataBaseRatioId(1); return ReportHist(infoid,20140331); //返回20130930(执行时间20140117,未公布2013年报及2014一季报) ``` ##### ReportHistExists 范例 ```text //检查SZ300002在曾经发生过分红 setsysparam(pn_stock(),'SZ300002'); return ReportHistExists(18007); //返回1,表示历史有分红 ``` ##### LastQuarterData 范例 ```text //提取平安银行2017年3季度的营业收入 setsysparam(pn_stock(),'SZ000001'); setsysparam(pn_date(),20171031T); return LastQuarterData(20170930,46002,0); //结果:25760000000 ``` ##### Last12MData 范例 ```text //提取平安银行2017年3季报TTM的营业收入 setsysparam(pn_stock(),'SZ000001'); setsysparam(pn_date(),20171031T); return Last12MData(20170930,46002); //结果:105580000000 ``` ##### Base 范例 ```text //获取SZ000002的公司全称 setsysparam(pn_stock(),'SZ000002'); return base(10002);//返回”万科企业股份有限公司” ``` ##### BaseExists 范例 ```text //获取SZ000002的公司全称 setsysparam(pn_stock(),'SZ000002'); if BaseExists(10002) then return base(10002); else return ""; //返回万科企业股份有限公司 ``` ##### InfoArray 范例 ```text //获取万科A分红送股表数据 setsysparam(pn_stock(),'SZ000002'); //分红送股表ID infoid:=DatabaseInfoArrayId(21); return infoarray(infoid); ``` 结果: ##### InfoArrayExt 范例 (注:实际的结果不一定和下同) 下表是深长城的股本变更表 记录号变动日总股本 A股未流通股已流通股流通A股变动原因 0 19940921 56300000 56300000 43300000 13000000 13000000 1 1995041056300000 56300000 40000000 16300000 16300000 职工股上市 2 19950607 106970000 106970000 76000000 30970000 30970000 送股上市 3 19960715 139061000 139061000 98800000 40261000 40261000 送股上市 4 19970512 171045030 171045030 121523999 49521031 49521031 配股上市 5 19970708 239463040 239463040 170133598 69329442 69329442 送股上市 如: (1)InfoArrayExt(12,'变动日',19970512,-1) 返回的记录是第4条 (2)InfoArrayExt(12,'变动日',19970512,0) 返回的记录是第0条 (3)InfoArrayExt(12,'变动日',19970512,2) 返回的记录是第1条 (4) InfoArrayExt(12,'变动日',19970512,2,”总股本”,Shares) 返回的值为56300000。 ```text //第4个参数缺省,满足条件的最后一条记录,即返回股权登记日<=20130516的最后一条记录 setsysparam(pn_stock(),'SZ000002'); infoid:=DatabaseInfoArrayId(21); return InfoArrayExt(infoid,'股权登记日',20130516); ``` 结果: ##### InfoArrayExists 范例 ```text //判断是否存在配股 setsysparam(pn_stock(),'SH601888'); return InfoArrayExists(20); //返回0表示不存在配股数据。 ``` ##### bName 范例 ```text return bName(18007); //返回”红利比”,即用18007可提取红利比数据。 ``` ##### idtType 范例 ```text TYPES := array( '','报告期相关','报告期无关','报表'); TYPES[-1] := '未知'; return array('公司全称':TYPES[idttype(10002)], '红利比':TYPES[idttype(18007)], '分红送股表':TYPES[idttype(18)], '未知':TYPES[idttype(99)]); ``` 结果: ##### idfType 范例 ```text TYPES := array( '整型','实数','字符','表格'); TYPES[-1] := '未知'; return array('公司全称':TYPES[idftype(10002)], '红利比':TYPES[idftype(18007)], '分红送股表':TYPES[idftype(18)], '未知':TYPES[idftype(99)]); ``` 返回结果: ##### BasicIDExists 范例 ```text infoid:= DatabaseInfoArrayId(21); return BasicIDExists(infoid); //返回1,表示存在 ``` ##### BaseArray 范例 ```text SetSysParam(pn_stock(),'sz000001'); return BaseArray(46002,20151231); //返回:96163000000 ``` #### 选股与取数 ##### 内容 - QueryBk - QueryBkWithPeriod - QueryWithPeriod - DefaultRepID - QWPMaxCount - evalstring ##### QueryBk 范例 ```text return QueryBK("深证A股;上证A股;中小企业板","",@True,"","板块名",@DefaultBKName(), "指定日流通市值和(万)(20120930,只考虑A股)",@Bk_MarketValue(41182,1), "指定日总股本和(万)(20120930,只考虑A股)",@Bk_TotalShares(41182,1), "每股主营收入(20111231,总股本加权,只考虑A股,全部,绩差股标准=0)",@Bk_MainincomePS(20111231,0,1,0,0)); ``` ##### QueryBkWithPeriod 范例 ```text //返回板块一段时间的成交数据 setsysparam(pn_begt(),inttodate(20120801)); setsysparam(pn_endt(),inttodate(20121001)); setsysparam("TimeIndex",1); return QueryBKWithPeriod("深证A股","",@True,"","换手率(%)(加权,只考虑A股)",@Bk_HSL3(0,1), "成交量(万)(只考虑A股)",@Bk_VolSum3(1), "成交金额(万)(只考虑A股)",@Bk_AmountSum3(1)); ``` ##### QueryWithPeriod 范例 ```text //返回一组股票一段时间的行情数据 oV:=BackUpSystemParameters2(); setsysparam(pn_begt(),inttodate(20120801)); setsysparam(pn_endt(),inttodate(20121001)); setsysparam("TimeIndex",1); return QueryWithPeriod("","SZ000002;SZ000001;SH600000;SH600004",@True,"","收盘价",@close(), "成交量",@vol(), "成交金额",@amount()); ``` ##### DefaultRepID 范例 ```text //返回万科A默认报告期的营业收入 oV:=BackUpSystemParameters2(); setsysparam(pn_stock(),'SZ000002'); //获取默认报告期 RDate:= DefaultRepID(); V:=ReportNew(46002,RDate); return v; ``` ##### QWPMaxCount 范例 ```text return QWPMaxCount(); //返回:50000 ``` ##### evalstring 范例 ```text return evalstring('1+3'); //返回:4 ``` #### 向导函数 ##### 内容 - RelativeStrengthOfIndustry - SpecSysParams - RelativeStrengthOfSector - ReportOfListed - ReportPerShareOfListed - Derivative1 - PositionOfSector - ReduceWithHighestOfPeriod - OccuredRepIdOfRepPeriod - ContinuedMatchOfRepPeriod - GrowthOfRepPeriod - RelativeStrengthOfSectorDesc - PositionOfSectorDesc - GrowthWithLowestOfPeriod - SumOfSector - PositionOfIndustry - AvgOfSector - OccuredTimeOfPeriod - SpecDateValue - Derivative2 - N期 - N日 - 历史遗留 - 区间 - 中间函数 - N季 - 当日 - StockTrailingAvgByEndT - StockTrailingStdByEndT ##### RelativeStrengthOfIndustry ##### SpecSysParams 范例 ```text return SpecSysParams(@SpecSysParamsdemo(),20180801T,cy_day(),0,0);//其中SpecSysParamsdemo()函数定义股票为平安银行,返回收盘价 //返回:9.15 ``` ##### RelativeStrengthOfSector 算法 1、获得板块Sector成分股 2、统计成分股中个券exp值>当前证券的exp值再加1,为result 3、相对强弱(%)= (1- result/成分股总个数)\*100范例 ```text // 统计A股板块与沪深300指数相比的相对强弱。结果得到A股中涨幅小于沪深300涨幅的个券占比 SetSysParam(pn_stock(),'SH000300'); SetSysParam(pn_date(),20180801T); return RelativeStrengthOfSector(@stockzf3(),'A股'); //结果:41.4621 ``` ##### ReportOfListed 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return ReportOfListed(46002,20160331);//平安银行在2016年一季报的营业收入 //返回:27532000000 ``` ##### ReportPerShareOfListed 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return ReportPerShareOfListed(46033,20160331);//平安银行在2016年一季报的每股收益(净利润/总股本) //返回:0.43 ``` ##### Derivative1 算法 指标趋势= (3*前N日指标值-4*前(N+1)日指标值+前(N+2)日指标值)/2\*100范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801T); return Derivative1(@close(),0);//指标值为收盘价 //返回:-42 ``` ##### PositionOfSector 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801T); return PositionOfSector(@close(),'A股'); //返回:1778 ``` ##### ReduceWithHighestOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return ReduceWithHighestOfPeriod(@close(),20180801T,20180803T,0); //返回:-0.24 ``` ##### OccuredRepIdOfRepPeriod 范例 ```text //从2010年开始到2018年,每年年报每股收益大于1.5的报告期 SetSysParam(pn_stock(),'SZ000002'); return OccuredRepIdOfRepPeriod(@reportofall(42002,GetSysParam('DefaultRepID'))>1.5,20101231,2018); ``` 返回: ##### ContinuedMatchOfRepPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return ContinuedMatchOfRepPeriod(@reportofall(46002,GetSysParam('DefaultRepID')),20140331,2018); //返回:1 ``` ##### GrowthOfRepPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return GrowthOfRepPeriod(@reportofall(46002,GetSysParam('DefaultRepID')),20150331,1);//返回平安银行在2015一季报中营业收入的同比增长 //返回:28.39 ``` ##### RelativeStrengthOfSectorDesc 算法 1、获得板块Sector成分股 2、统计成分股中个券exp<当前证券的exp值再加1,为result 3、相对强弱(%)= (1- result/成分股总个数)\*100范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801T); return RelativeStrengthOfSectorDesc(@close(),'A股'); //返回:50.25 ``` ##### PositionOfSectorDesc 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801T); return PositionOfSectorDesc(@close(),'A股'); //返回:1761 ``` ##### GrowthWithLowestOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return GrowthWithLowestOfPeriod(@close(),20180801T,20180903T,0); //返回:1.41 ``` ##### SumOfSector 范例 ```text setsysparam(pn_bk(),"上证A股"); setsysparam(Pn_date(),20180801T); return SumOfSector(@close(),20180801T,20180801T,1,0,0,0); //返回在2018年8月1日上证A股板块在当日已经上市的股票收盘价的和。 //返回:19495.45 ``` ##### PositionOfIndustry ##### AvgOfSector 范例 ```text return AvgOfSector(@close(),2,20180801T,20180801T,1,0,0,0);//返回在2018年8月1日所有A股在当日已经上市的股票收盘价的算术平均。 //返回:12.27 ``` ##### OccuredTimeOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return OccuredTimeOfPeriod(@close(),20180801T,20180810T);//返回平安银行在2018年8月1日至2018年8月10日存在行情数据(收盘价)的日期 ``` 返回: ##### SpecDateValue 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180917T); return SpecDateValue(20180801T,@close());//返回2018年8月1号平安银行的收盘价 //返回:9.15 ``` ##### Derivative2 算法 加速度=(2*当日指标-5*一日前指标+4*二日前指标-三日前指标)*100;范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801T); return Derivative2(@close());//指标值为收盘价 //返回:-49 ``` ##### N期 ###### 内容 - OccuredOfNReport - ContinuedMatchOfNReport - OccuredRepIdOfNReport - SumOfNReport - AvgOfNReport - RefReportValue - GrowthOfNReport - ACCOfNReport - RobustGrowthOfNReport - RobustACCOfNReport - HighestOfNReport - lowestOfNReport - StandGrowthOfNReport - EAVOfNReport - EAAOfNReport - TurnPositiveOfNReport - SecondOrderGrowthOfNReport - HighGrowthOfNReport ###### OccuredOfNReport 范例返回平安银行截止到2015年12月31日的所有年报数量 ```text SetSysParam(pn_stock(),'SZ000001'); returnOccuredOfNReport(@reportofall(46002,GetSysParam('DefaultRepID')),20151231,100); //返回:25 ``` ###### ContinuedMatchOfNReport 范例判断2014到2015这两年平安银行年报是否全部存在 ```text SetSysParam(pn_stock(),'SZ000001'); return ContinuedMatchOfNReport(@reportofall(46002,GetSysParam('DefaultRepID')),20151231,2); //返回:1 ``` ###### OccuredRepIdOfNReport 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return OccuredRepIdOfNReport(@reportofall(46002,GetSysParam('DefaultRepID')),20001231,20); ``` 返回结果: ###### SumOfNReport 范例计算平安银行2015年报与2014年报营业收入的和 ```text SetSysParam(pn_stock(),'SZ000001'); return SumOfNReport(@reportofall(46002,GetSysParam('DefaultRepID')),20151231,2); //返回:169570000000 ``` ###### AvgOfNReport 范例返回平安银行2015年报与2014年报营业收入的平均 ```text SetSysParam(pn_stock(),'SZ000001'); return AvgOfNReport(@reportofall(46002,GetSysParam('DefaultRepID')),20151231,2); //返回:84785000000 ``` ###### RefReportValue 范例返回平安银行2015年年报营业收入额 ```text SetSysParam(pn_stock(),'SZ000001'); return RefReportValue(@reportofall(46002,GetSysParam('DefaultRepID')),20161231,1); //返回:96163000000 ``` ###### GrowthOfNReport 范例返回平安银行2014年与2015年报营业收入增长比例 ```text SetSysParam(pn_stock(),'SZ000001'); return GrowthOfNReport(@reportofall(46002,GetSysParam('DefaultRepID')),20151231,1,1); //返回:34.00 ``` ###### ACCOfNReport 算法 过去N期数据,对期数t的二次方程进行回归,取二次项系数作为业绩增长加速度。以净利润为例,回归公式如下:NPt= a*t^2+b*t+c。其中,NPt表示过去第t期的净利润,t取值为[1,2,……,N]。 假设当前报告期为20201231,取季度报告期,N=8,则最近连续8个季度报告期为[20190331,20190630,20190930,20191231, 20200331,20200630,20200930,20201231],对应的期数t为[1,2,3,4,5,6,7,8],回归二次项系数a即为净利润增长加速度。 为消除回归数据与期数t数量级差异对结果的影响,模型支持对回归数据,如净利润与t进行标准化处理(z-value),二次项系数a为加速度,二次回归抛物线的最低点为-b/(2\*a)。范例 范例01:返回加速度,不标准化 ```text setsysparam(pn_stock(),"SH600519");? return ACCOfNReport(@Last12MData(DefaultRepID(),46078),20201231,8,1); //3004419.44946277 ``` 范例02:返回加速度,标准化 ```text setsysparam(pn_stock(),"SH600519"); return ACCOfNReport(@Last12MData(DefaultRepID(),46078),20201231,8,1,1); //0.006 ``` ###### RobustGrowthOfNReport 算法过去N期的净利润增速均值除以净利润增速标准差,刻画过去一段时间内净利润增速的稳定性,当指标值比较高的时候,表示过去一段时间内上市公司的业绩保持了稳定增长的态势。范例 ```text setsysparam(pn_stock(),"SH600519"); return RobustGrowthOfNReport(@Last12MData(DefaultRepID(),9900604), 20201231,8,0); // 0.916987656203954 ``` ###### RobustACCOfNReport 算法 N期稳健加速度=N期稳健增速一阶差分 ,即本期N期稳健增速- 上期N期稳健增速 上期:由参数LastReportType确定,0表示同比报告期,1表示环比报告期范例 ```text setsysparam(pn_stock(),"SH600519"); return RobustACCOfNReport(@Last12MData(DefaultRepID(),9900604),20201231,8,0); // -0.0878801178157446 ``` ###### HighestOfNReport 范例 ```text //对SH600585在22年年报前5个年度报告期最高的总营业收入。 SetSysParam(pn_stock(),"SH600585"); return HighestOfNReport(@ReportOfAll(46080,DefaultRepID()),20221231,5,0); //返回:176294715308 ``` ###### lowestOfNReport 范例 ```text //对SH600585在22年年报前5个年度报告期最低的总营业收入。 SetSysParam(pn_stock(),"SH600585"); return lowestOfNReport(@ReportOfAll(46080,DefaultRepID()),20221231,5,0); //返回:128402625696 ``` ###### StandGrowthOfNReport 算法N期标准化增长率=(当期-去年同期)/过去N期标准差范例 ```text setsysparam(pn_stock(),"SH600519"); Exp:=@LastQuarterData(GetSysParam('DefaultRepID'),46078); ReportID:=20211231; N:=8; ReportType:=1; //0:年度,1:季度 t:=StandGrowthOfNReport(Exp,ReportID,N,ReportType); return t; //1.265 ``` ###### EAVOfNReport 算法 N期加速度EAV=当期标准化增长率-上期标准化增长率 当期标准化增长率=(当期数据-去年同期数据)/过去N期标准差 上期:由参数LastReportType确定,0表示同比报告期【默认】,1表示环比报告期范例 ```text setsysparam(pn_stock(),"SH600519"); Exp:=@LastQuarterData(DefaultRepID(),46078); ReportID:=20200930; N:=8; ReportType:=1; //0:年度,1:季度 LastReportType:=0; t:=EAVOfNReport(Exp,ReportID,N,ReportType,LastReportType); return t; //-0.45 ``` ###### EAAOfNReport 算法 N期加速度EAA=当期同比增长率-上期同比增长率 当期同比增长率=(当期数据-去年同期数据)/abs(去年同期数据) 上期:由参数LastReportType确定,0表示同比报告期【默认】,1表示环比报告期范例 ```text setsysparam(pn_stock(),"SH600519"); Exp:=@LastQuarterData(DefaultRepID(),46078); ReportID:=20211231; LastReportType:=0; t:=EAAOfNReport(Exp,ReportID,LastReportType); return t; //-0.016 ``` ###### TurnPositiveOfNReport 范例 ```text setsysparam(pn_stock(),"SH600110"); Exp:=@LastQuarterData(GetSysParam('DefaultRepID'),42017); //季度扣非净利润 ReportID:=20210331; N:=5; ReportType:=1; //0:年度,1:季度 t:=TurnPositiveOfNReport(Exp,ReportID,N,ReportType); return t; //1 ``` ###### SecondOrderGrowthOfNReport 范例 ```text setsysparam(pn_stock(),"SZ000636"); Exp:=@LastQuarterData(GetSysParam('DefaultRepID'),9900604); ReportID:=20200331; N:=5; ReportType:=1; //0:年度,1:季度 t:=SecondOrderGrowthOfNReport(Exp,ReportID,N,ReportType); return t; //1 ``` ###### HighGrowthOfNReport 范例 ```text setsysparam(pn_stock(),"SZ002340"); Exp:=@LastQuarterData(GetSysParam('DefaultRepID'),9900604); ReportID:=20210331; N:=5; ReportType:=1; //0:年度,1:季度 Range:=3; t:=HighGrowthOfNReport(Exp,ReportID,N,ReportType,Range); return t; //1 ``` ##### N日 ###### 内容 - HighestOfNDay - RefValue - OccuredOfNDay - GrowthOfNDay - SwingOfNDay - ContinuedMatchOfNDay - StdOfNDay - SumOfNDay - LowestOfNDay - OccuredTimeOfNDay - AvgOfNDay - GrowthWithHighestOfNDay - GrowthWithLowestOfNDay - TimeOfHighestOfNDay - TimeOfLowestOfNDay - MedianOfNDay - KurtosisOfNDay - SkewnessOfNDay - CovOfNDay - RSQOfNDay - SteyxOfNDay - SlopeOfNDay2 - CorrelOfNDay2 - InterceptOfNDay2 - CorrelOfNDay - DecayAvgOfNDay - DeltaOfNDay - HHVBarsOfNDay - interceptofNday - LLVBarsOfNDay - PercentRankOfNDay - SignedPower - SlopeofNday - CovarOfNDay - ProductOfNDay - WmaofNday - SumifofNday - SmaofNDay - 中间函数 ###### HighestOfNDay 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return HighestOfNDay(@close(),5); //返回:9.42 ``` ###### RefValue 范例返回上证指数在2018年7月18号的收盘价 ```text SetSysParam(pn_stock(),'SH000001'); SetSysParam(pn_date(),20180801t); return RefValue(@close(),10); //返回:2787.257 ``` ###### OccuredOfNDay 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return OccuredOfNDay(@close(),10); //返回:10 ``` ###### GrowthOfNDay 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return GrowthOfNDay(@close(),5,0); //返回:-0.23 ``` ###### SwingOfNDay 算法 振幅=指标N日最大值-指标N日最小值 振幅(百分比)=abs(指标N日最大值-指标N日最小值)/(指标N日最小值)范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return SwingOfNDay(@close(),5,0); //返回:0.27 ``` ###### ContinuedMatchOfNDay 范例 ```text SetSysParam(pn_stock(),'SH000001'); SetSysParam(pn_date(),20180801t); return ContinuedMatchOfNDay(@close(),3); //返回:1 ``` ###### StdOfNDay 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return StdOfNDay(@close(),5); //返回:0.11 ``` ###### SumOfNDay 范例计算平安银行截止2018年8月1日最近10个交易日的成交量和 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return SumOfNDay(@vol(),10); //结果: 962645765 ``` ###### LowestOfNDay 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return LowestOfNDay(@close(),5); //返回:9.15 ``` ###### OccuredTimeOfNDay 范例 ```text SetSysParam(pn_stock(),'SZ000063'); SetSysParam(pn_date(),20180615t); return OccuredTimeOfNDay(@vol(),10); ``` 返回: ###### AvgOfNDay 范例 ```text SetSysParam(pn_stock(),'SZ000001'); SetSysParam(pn_date(),20180801t); return AvgOfNDay(@close(),5); //返回:9.292 ``` ###### GrowthWithHighestOfNDay 范例 ```text //对SH600585在20231010T的100日价格N日最大与当前的偏离值。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return GrowthWithHighestOfNDay(@close(),100,0); //返回:-2.21 ``` ###### GrowthWithLowestOfNDay 范例 ```text //对SH600585在20231010T的100日价格N日最小与当前的偏离值。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return GrowthWithLowestOfNDay(@close(),100,0); //返回:1.82 ``` ###### TimeOfHighestOfNDay 范例 ```text //对SH600585在20231010T的100日价格最高时间。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return TimeOfHighestOfNDay(@close(),100); //返回:2023-05-15 ``` ###### TimeOfLowestOfNDay 范例 ```text //对SH600585在20231010T的100日价格最低时间。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return TimeOfLowestOfNDay(@close(),100); //返回:2023-07-12 ``` ###### MedianOfNDay 范例 ```text //对SH600585在20231010T的100日价格中位数。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return MedianOfNDay(@close(),100); //返回:26.705 ``` ###### KurtosisOfNDay 范例 ```text //对SH600585在20231010T的100日价格峰度。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return KurtosisOfNDay(@close(),100); //返回:-0.73 ``` ###### SkewnessOfNDay 范例 ```text //对SH600585在20231010T的100日价格偏度。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return SkewnessOfNDay(@close(),100); //返回:-0.65 ``` ###### CovOfNDay 范例 ```text //20231010T,SH600585前10日收盘与SH000001收盘的协方差。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return CovOfNDay(@close(),10,"SH000001"); //返回:5.7123 ``` ###### RSQOfNDay 范例 ```text //20231010T,SH600585前10日收盘与SH000001收盘的相关系数平方。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return RSQOfNDay(@close(),10,"SH000001"); //返回:0.437 ``` ###### SteyxOfNDay 范例 ```text //20231010T,SH600585前10日收盘与SH000001收盘的相对标准偏差。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return SteyxOfNDay(@close(),10,"SH000001"); //返回:13.72035 ``` ###### SlopeOfNDay2 范例 ```text //20231010T,SH600585前10日收盘与SH000001收盘的回归斜率。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return SlopeOfNDay2(@close(),10,"SH000001"); //返回:20.4608 ``` ###### CorrelOfNDay2 范例 ```text //20231010T,SH600585前10日收盘与SH000001收盘的相关系数。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return CorrelOfNDay2(@close(),10,"SH000001"); //返回:0.661 ``` ###### InterceptOfNDay2 范例 ```text //20231010T,SH600585前10日收盘与SH000001收盘的回归截距。 SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return InterceptOfNDay2(@close(),10,"SH000001"); //返回:2569.49 ``` ###### CorrelOfNDay 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return CorrelOfNDay(@stockpjcj3(),@RefValue(@close(),5),10,""); //结果:-0.61 ``` ###### DecayAvgOfNDay 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return DecayAvgOfNDay(@close(),5); //结果:25.61 ``` ###### DeltaOfNDay 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return DeltaOfNDay(@close(),5); //结果:-1.39 ``` ###### HHVBarsOfNDay 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return HHVBarsOfNDay(@close(),10,""); //结果:8 ``` ###### interceptofNday 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231010T); return interceptofNday(@close(),@open(),100,""); //结果:1.36 ``` ###### LLVBarsOfNDay - SumOfNDay - RefValue - ContinuedMatchOfNDay - OccuredTimeOfNDay - HighestOfNDay - StdOfNDay - LowestOfNDay - SwingOfNDay - GrowthOfNDay - AvgOfNDay - OccuredOfNDay - GrowthWithHighestOfNDay - GrowthWithLowestOfNDay - TimeOfHighestOfNDay - TimeOfLowestOfNDay - MedianOfNDay - KurtosisOfNDay - SkewnessOfNDay - CovOfNDay - RSQOfNDay - SteyxOfNDay - SlopeOfNDay2 - CorrelOfNDay2 - InterceptOfNDay2 - CorrelOfNDay - DecayAvgOfNDay - DeltaOfNDay - HHVBarsOfNDay - interceptofNday - LLVBarsOfNDay - PercentRankOfNDay - SignedPower - SlopeofNday - CovarOfNDay - ProductOfNDay - WmaofNday - SumifofNday - SmaofNDay - 中间函数 ###### PercentRankOfNDay 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return PercentRankOfNDay(@close(),10,""); //结果:0.56 ``` ###### SignedPower 算法SignedPower(x,n)=sign(x)\*(abs(x)^n)范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return SignedPower(@close(),3); //结果:14402.12 ``` ###### SlopeofNday 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return SlopeofNday(@close(),@open(),30,""); //结果:0.97 ``` ###### CovarOfNDay 算法cov=mean(x*y)-mean(x)*mean(y)范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return CovarOfNDay(@close(),@open(),30,""); //结果:0.79 ``` ###### ProductOfNDay 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return ProductOfNDay(@close(),3,""); //结果:14359.59 ``` ###### WmaofNday 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return WmaofNday(@open(),30,""); //结果:25.04 ``` ###### SumifofNday 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return SumifofNday(@open(),30,"@open()>@close()",""); //结果:763.47 ``` ###### SmaofNDay 范例 ```text SetSysParam(pn_stock(),"SH600585"); SetSysParam(pn_date(),20231030T); return SmaofNDay(@open(),30,1,""); //结果:25.44 ``` ###### 中间函数 ####### 内容 - GetExpCaceStr - TechCal_Unit ####### GetExpCaceStr - GetExpCaceStr - TechCal_Unit ####### TechCal_Unit - GetExpCaceStr - TechCal_Unit ##### 历史遗留 ###### 内容 - SumOfSectorExceptNoTrade - AvgOfSectorExceptNoTrade ###### SumOfSectorExceptNoTrade 范例 ```text SetSysParam(pn_bk(),'安徽'); SetSysParam(pn_date(),20180801t); return SumOfSectorExceptNoTrade(@close()); //返回:1261.95 ``` ###### AvgOfSectorExceptNoTrade 范例 ```text SetSysParam(pn_bk(),'安徽'); SetSysParam(pn_date(),20180801t); return AvgOfSectorExceptNoTrade(@close(),0); //返回:9.77 ``` ##### 区间 ###### 内容 - SumOfPeriod - SwingOfPeriod - HighestOfPeriod - TimeOfHighestOfPeriod - OccuredOfPeriod - AvgOfPeriod - OccuredOfRepPeriod - ContinuedMatchOfPeriod - LowestOfPeriod - AvgOfRepPeriod - SumOfRepPeriod - GrowthOfPeriod - TimeOfLowestOfPeriod - HHVBarsOfPeriod - LLVBarsOfPeriod - HighestOfRepPeriod2 - LowestOfRepPeriod2 - MedianOfPeriod - PercentRankOfPeriod - SkewnessOfPeriod - KurtosisOfPeriod - GrowthOfRepPeriod2 - SumOfRepPeriod2 - AvgOfRepPeriod2 - StdOfPeriod - StdOfRepPeriod2 - CorrelOfPeriod - RSQOfPeriod - SlopeOfPeriod - InterceptOfPeriod - CovOfPeriod - SteyxOfPeriod ###### SumOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return SumOfPeriod(@close(),20180801T,20180802T); //返回:18.09 ``` ###### SwingOfPeriod 算法 振幅=指标区间最大值-指标区间最小值 振幅(百分比)=abs(指标区间最大值-指标区间最小值)/(指标区间最小值)范例 ```text SetSysParam(pn_stock(),'SZ000001'); return SwingOfPeriod(@close(),20180801T,20180802T,0); //返回:0.21 ``` ###### HighestOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return HighestOfPeriod(@close(),20180801T,20180802T); //返回:9.15 ``` ###### TimeOfHighestOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return TimeOfHighestOfPeriod(@close(),20180801T,20180802T); //返回:2018-08-01 ``` ###### OccuredOfPeriod 范例 ```text //SH600585在20230101T至20231010T上涨次数。 SetSysParam(pn_stock(),"SH600585"); return OccuredOfPeriod(@IsUp(),20230101T,20231010T); //返回:84 ``` ###### AvgOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return AvgOfPeriod(@close(),20180801T,20180802T); //返回:9.045 ``` ###### OccuredOfRepPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return OccuredOfRepPeriod(@reportofall(46002,GetSysParam('DefaultRepID')),20150331,2018);//即返回2015年到2018年一季报的数量 //返回:4 ``` ###### ContinuedMatchOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return ContinuedMatchOfPeriod(@close(),20180801T,20180803T); //返回:1 ``` ###### LowestOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return LowestOfPeriod(@close(),20180801T,20180803T); //返回:8.91 ``` ###### AvgOfRepPeriod 范例平安银行2015到2018四个一季报营业收入的平均值 ```text SetSysParam(pn_stock(),'sz000001'); return AvgOfRepPeriod(@reportofall(46002,GetSysParam('DefaultRepID')),20150331,2018); //返回:25988750000 ``` ###### SumOfRepPeriod 范例平安银行2015到2018四个一季报营业收入的和 ```text SetSysParam(pn_stock(),'sz000001'); return SumOfRepPeriod(@reportofall(46002,GetSysParam('DefaultRepID')),20150331,2018); //返回:103955000000 ``` ###### GrowthOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); return GrowthOfPeriod(@close(),20180801T,20180803T,1); //返回:-2.62 ``` ###### TimeOfLowestOfPeriod 范例 ```text SetSysParam(pn_stock(),'SZ000001'); returnTimeOfLowestOfPeriod(@close(),20180801T,20180802T); //返回:2018-08-02 ``` ###### HHVBarsOfPeriod 范例 ```text //SH600585在20230101T至20231010T最高点到当前的周期数。 SetSysParam(pn_stock(),"SH600585"); return HHVBarsOfPeriod(@close(),20230101T,20231010T); //返回:153 ``` ###### LLVBarsOfPeriod 范例 ```text //SH600585在20230101T至20231010T最低点到当前的周期数。 SetSysParam(pn_stock(),"SH600585"); return LLVBarsOfPeriod(@close(),20230101T,20231010T); //返回:58 ``` ###### HighestOfRepPeriod2 范例 ```text //对SZ000001在2020年年报至2022年报的最高营业收入。 SetSysParam(pn_stock(),"SZ000001"); return HighestOfRepPeriod2(@reportofall(46002,GetSysParam('DefaultRepID')),20201231,20221231,0); //返回:179895000000 ``` ###### LowestOfRepPeriod2 范例 ```text //对SZ000001在2020年年报至2022年报的最低营业收入。 SetSysParam(pn_stock(),"SZ000001"); return LowestOfRepPeriod2(@reportofall(46002,GetSysParam('DefaultRepID')),20201231,20221231,0); //返回:153542000000 ``` ###### MedianOfPeriod 范例 ```text //SH600585在20230101T至20231010T的价格中位数。 SetSysParam(pn_stock(),"SH600585"); return MedianOfPeriod(@close(),20230101T,20231010T); //返回:25.78 ``` ###### PercentRankOfPeriod 范例 ```text //SH600585在20230101T至20231010T的价格分位数。 SetSysParam(pn_stock(),"SH600585"); return PercentRankOfPeriod(@close(),20230101T,20231010T); //返回:0.1476 ``` ###### SkewnessOfPeriod 范例 ```text //SH600585在20230101T至20231010T的价格偏度。 SetSysParam(pn_stock(),"SH600585"); return SkewnessOfPeriod(@close(),20230101T,20231010T); //返回:0.1796 ``` ###### KurtosisOfPeriod 范例 ```text //SH600585在20230101T至20231010T的价格峰度。 SetSysParam(pn_stock(),"SH600585"); return KurtosisOfPeriod(@close(),20230101T,20231010T); //返回:-0.602 ``` ###### GrowthOfRepPeriod2 范例 ```text //对SZ000001在2020年年报至2022年报的营业收入增长率。 SetSysParam(pn_stock(),"SZ000001"); return GrowthOfRepPeriod2(@reportofall(46002,GetSysParam('DefaultRepID')),20201231,20221231,1); //返回:17.16 ``` ###### SumOfRepPeriod2 范例 ```text //对SZ000001在2020年年报至2022年报的营业收入和。 SetSysParam(pn_stock(),"SZ000001"); return SumOfRepPeriod2(@reportofall(46002,GetSysParam('DefaultRepID')),20201231,20221231,0); //返回:502820000000 ``` ###### AvgOfRepPeriod2 范例 ```text //对SZ000001在2020年年报至2022年报的平均营业收入。 SetSysParam(pn_stock(),"SZ000001"); return AvgOfRepPeriod2(@reportofall(46002,GetSysParam('DefaultRepID')),20201231,20221231,0); //返回:167606666666.667 ``` ###### StdOfPeriod 范例 ```text //SH600585在20230101T至20231010T的价格标准差。 SetSysParam(pn_stock(),"SH600585"); return StdOfPeriod(@close(),20230101T,20231010T); //返回:2.1048 ``` ###### StdOfRepPeriod2 范例 ```text //对SZ000001在2020年年报至2022年报的营业收入标准差。 SetSysParam(pn_stock(),"SZ000001"); return StdOfRepPeriod2(@reportofall(46002,GetSysParam('DefaultRepID')),20201231,20221231,0); //返回:13265996846.57 ``` ###### CorrelOfPeriod 范例 ```text //20230901T至20231010T,SH600585收盘与SH000001收盘的相关系数。 SetSysParam(pn_stock(),"SH600585"); return CorrelOfPeriod(@close(),20230901T,20231010T,"SH000001"); //返回:0.45 ``` ###### RSQOfPeriod 范例 ```text //20230901T至20231010T,SH600585收盘与SH000001收盘的相关系数平方。 SetSysParam(pn_stock(),"SH600585"); return RSQOfPeriod(@close(),20230901T,20231010T,"SH000001"); //返回:0.21 ``` ###### SlopeOfPeriod 范例 ```text //20230901T至20231010T,SH600585收盘与SH000001收盘的回归斜率。 SetSysParam(pn_stock(),"SH600585"); return SlopeOfPeriod(@close(),20230901T,20231010T,"SH000001"); //返回:21.84 ``` ###### InterceptOfPeriod 范例 ```text //20230901T至20231010T,SH600585收盘与SH000001收盘的回归截距。 SetSysParam(pn_stock(),"SH600585"); return InterceptOfPeriod(@close(),20230901T,20231010T,"SH000001"); //返回:2550.63 ``` ###### CovOfPeriod 范例 ```text //20230901T至20231010T,SH600585收盘与SH000001收盘的协方差。 SetSysParam(pn_stock(),"SH600585"); return CovOfPeriod(@close(),20230901T,20231010T,"SH000001"); //返回:4.93 ``` ###### SteyxOfPeriod 范例 ```text //20230901T至20231010T,SH600585收盘与SH000001收盘的相对标准偏差。 SetSysParam(pn_stock(),"SH600585"); return SteyxOfPeriod(@close(),20230901T,20231010T,"SH000001"); //返回:21.40 ``` ##### 中间函数 ###### 内容 - RatioValueByType - isValidValue - FilterSampleByCriterion_Wiz - CompositeRatioValue - SimplyRatioValue - isNull - isValidPositiveValue - ReportValueOfPeriod ###### RatioValueByType 算法 增长=V2-V1 增长率=(V2-V1)/V1\*100% 复合增长率= (Sign(V2/V1)*Power(abs(V2/V1),1/N)-1)*100%, 其中sign为条件判断,依据给定参数的正/0/负返回1/0/-1,power为幂为1/N的幂函数范例 ```text return RatioValueByType(1,2,1,2); //返回:100 ``` ###### isValidValue 范例 ```text return isValidValue(10); //返回:1 ``` ###### FilterSampleByCriterion_Wiz 范例 ```text stockarr:=GetBK('A股'); FilterSampleByCriterion_Wiz(stockarr,20150101,0,0,20180801); return stockarr; ``` 返回: ###### CompositeRatioValue 算法复合增长率= (Sign(V2/V1)*Power(abs(V2/V1),1/N)-1)*100%, 其中sign为条件判断,依据给定参数的正/0/负返回1/0/-1,power为幂为1/N的幂函数范例 ```text return CompositeRatioValue(1,4,2); //返回:100 ``` ###### SimplyRatioValue 算法增长率=(V2-V1)/V1\*100%范例 ```text return SimplyRatioValue(1,2); //返回:100 ``` ###### isNull 范例 ```text return isNull(0); //返回:1 ``` ###### isValidPositiveValue 范例 ```text returnisValidPositiveValue(1); //返回:1 ``` ###### ReportValueOfPeriod - RatioValueByType - isValidValue - FilterSampleByCriterion_Wiz - CompositeRatioValue - SimplyRatioValue - isNull - isValidPositiveValue - ReportValueOfPeriod ##### N季 ###### 内容 - SumOfNReport2 - AvgOfNReport2 - StdOfNReport2 - ACCOfNReport2 - RobustGrowthOfNReport2 - RobustACCOfNReport2 ###### SumOfNReport2 范例 ```text setsysparam(pn_stock(),"SH600000"); Exp:=@reportofall(46002,GetSysParam('DefaultRepID')); ReportID:=20211231; N:=8; return SumOfNReport2(Exp,ReportID,N); //983299000000 ``` ###### AvgOfNReport2 范例 ```text setsysparam(pn_stock(),"SH600000"); Exp:=@reportofall(46002,GetSysParam('DefaultRepID')); ReportID:=20211231; N:=8; return AvgOfNReport2(Exp,ReportID,N); //122912375000 ``` ###### StdOfNReport2 范例 ```text setsysparam(pn_stock(),"SH600000"); Exp:=@reportofall(46002,GetSysParam('DefaultRepID')); ReportID:=20211231; N:=8; return StdOfNReport2(Exp,ReportID,N); //56286669451.8528 ``` ###### ACCOfNReport2 范例 ```text setsysparam(pn_stock(),"SH600000"); Exp:=@reportofall(9900002,GetSysParam('DefaultRepID')); ReportID:=20211231; N:=8; return RobustACCOfNReport2(Exp,ReportID,N); //-0.2568 ``` ###### RobustGrowthOfNReport2 范例 ```text setsysparam(pn_stock(),"SH600000"); Exp:=@reportofall(9900002,GetSysParam('DefaultRepID')); ReportID:=20211231; N:=8; return RobustGrowthOfNReport2(Exp,ReportID,N); //-0.3269 ``` ###### RobustACCOfNReport2 范例 ```text setsysparam(pn_stock(),"SH600000"); Exp:=@reportofall(9900002,GetSysParam('DefaultRepID')); ReportID:=20211231; N:=8; return RobustACCOfNReport2(Exp,ReportID,N); //-0.2568 ``` ##### 当日 ###### 内容 - PercentRankOftheReport - PercentRankOftheDay3 - RankOftheReport - RankOftheDay3 - ScaleOfSeries3 - ScaleOfSeriesOftheReport - IndNeutralize4 - IndNeutralizeOftheReport - IndNeutralize - IndNeutralize2 - PercentRankOftheDay - PercentRankOftheDay2 - RankOftheDay - RankOftheDay2 - ScaleOfSeries - ScaleOfSeries2 - 中间函数 ###### PercentRankOftheReport 范例 ```text //SH600519,2022年报营业收入在沪深300成分股的分位排名。 endt:=20221231T; SetSysParam(pn_stock(),"SH600519"); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return PercentRankOftheReport(@ReportOfAll(46002,DefaultRepID()),20221231); //返回:0.7525 ``` ###### PercentRankOftheDay3 范例 ```text //20231010T,SH600519收盘价在沪深300成分股的分位排名。 endt:=20231010T; SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return PercentRankOftheDay3(@close(),"",1); //返回:1 ``` ###### RankOftheReport 范例 ```text //SH600519,2022年报营业收入在沪深300成分股的排名。 endt:=20221231T; SetSysParam(pn_stock(),"SH600519"); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return RankOftheReport(@ReportOfAll(46002,DefaultRepID()),20221231,0); //返回:75 ``` ###### RankOftheDay3 范例 ```text //20231010T,SH600519收盘价在沪深300成分股的排名。 endt:=20231010T; SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return RankOftheDay3(@close(),0,"",1); //返回:1 ``` ###### ScaleOfSeries3 范例 ```text //20231010T,SH600519收盘价在沪深300成分股的标准化。 endt:=20231010T; SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return ScaleOfSeries3(@close(),1,"",1); //返回:0.1267 ``` ###### ScaleOfSeriesOftheReport 范例 ```text //SH600519,2022年报在沪深300成分股的营业收入标准化。 endt:=20221231T; SetSysParam(pn_stock(),"SH600519"); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return ScaleOfSeriesOftheReport(@ReportOfAll(46002,DefaultRepID()),20221231,1); //返回:0.00298 ``` ###### IndNeutralize4 范例 ```text //20231010T,SH600519收盘价在沪深300成分股的中性化。 endt:=20231010T; SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return IndNeutralize4(@close(),0,"",1); //返回:1723.43 ``` ###### IndNeutralizeOftheReport 范例 ```text //SH600519,2022年报在沪深300成分股的营业收入中性化。 endt:=20221231T; SetSysParam(pn_stock(),"SH600519"); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return IndNeutralizeOftheReport(@ReportOfAll(46002,DefaultRepID()),20221231,0); //返回:-14699034441.7286 ``` ###### IndNeutralize 范例 ```text SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",20231010T)); return IndNeutralize(@open(),0,""); //结果:1735.87966666667 ``` ###### IndNeutralize2 范例 ```text SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",20231010T)); return IndNeutralize2(@open(),0,""); //结果:1735.87966666667 ``` ###### PercentRankOftheDay 范例 ```text sp_s(PN_Stock(),'SH600000'); endt := 20190701T; sp_s(PN_Date(),endt); sp_s(PN_Rate(),1); sp_s(PN_RateDay(),endt); sp_s(pn_StockArr(),GetBKByDate('SH000300',endt)); Exp:=@close(); return PercentRankOftheDay(exp); //结果:0.4615 ``` ###### PercentRankOftheDay2 范例 ```text sp_s(PN_Stock(),'SH600000'); endt := 20190701T; sp_s(PN_Date(),endt); sp_s(PN_Rate(),1); sp_s(PN_RateDay(),endt); sp_s(pn_StockArr(),GetBKByDate('SH000300',endt)); Exp:=@close(); return PercentRankOftheDay2(exp); //结果:0.4615 ``` ###### RankOftheDay 范例 ```text sp_s(PN_Stock(),'SH600000'); endt := 20190701T; sp_s(PN_Date(),endt); sp_s(PN_Rate(),1); sp_s(PN_RateDay(),endt); sp_s(pn_StockArr(),GetBKByDate('SH000300',endt)); Exp:=@close(); return RankOftheDay(exp,0); //结果:161 ``` ###### RankOftheDay2 范例 ```text sp_s(PN_Stock(),'SH600000'); endt := 20190701T; sp_s(PN_Date(),endt); sp_s(PN_Rate(),1); sp_s(PN_RateDay(),endt); sp_s(pn_StockArr(),GetBKByDate('SH000300',endt)); Exp:=@close(); return RankOftheDay2(exp,0); //结果:161 ``` ###### ScaleOfSeries 范例 ```text //20231010T,SH600519收盘价在沪深300成分股的标准化。 endt:=20231010T; SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return ScaleOfSeries(@close(),1,""); //返回:0.1267 ``` ###### ScaleOfSeries2 范例 ```text //20231010T,SH600519收盘价在沪深300成分股的标准化。 endt:=20231010T; SetSysParam(pn_stock(),"SH600519"); SetSysParam(Pn_date(),20231010T); setsysparam(pn_StockArr(),getbkbydate("SH000300",endt)); return ScaleOfSeries2(@close(),1,""); //返回:0.1267 ``` ###### 中间函数 ####### 内容 - CacheStrMerge - pn_StockArrName - GetParm_StockArr_ByEndt - GetParm_GroupIndustry_ByEndt - GetHBCacheStr - SetParm_StockArrFunc - pn_StockArrFunc ####### CacheStrMerge 范例 ```text return CacheStrMerge('1',2,20231020T); //结果:["1"][2][45219] ``` ####### pn_StockArrName 范例 ```text Return pn_StockArrName(); //结果:CurrentStockArrName ``` ####### GetParm_StockArr_ByEndt 范例 ```text A:=function (endt); begin return GetBKByDate('SH000300', endt); end B:=function (endt); begin return GetBKByDate('SH000905', endt); end SetParm_StockArrFunc(B, 'ZZ500'); SetParm_StockArrFunc(A,'HS300'); sp_s(pn_StockArrName(),'HS300'); stocks1:=GetParm_StockArr_ByEndt(sp_time(1)); sp_s(pn_StockArrName(),'ZZ500'); stocks2:=GetParm_StockArr_ByEndt(sp_time(1)); return array(stocks1, stocks2); ``` ####### GetParm_GroupIndustry_ByEndt 范例 ```text Return GetParm_GroupIndustry_ByEndt(GetBKByDate('SH000300',20231010T),20231010T,1); ``` ####### GetHBCacheStr - CacheStrMerge - pn_StockArrName - GetParm_StockArr_ByEndt - GetParm_GroupIndustry_ByEndt - GetHBCacheStr - SetParm_StockArrFunc - pn_StockArrFunc ####### SetParm_StockArrFunc 范例 ```text A:=function (endt); begin return GetBKByDate('SH000300', endt); end B:=function (endt); begin return GetBKByDate('SH000905', endt); end SetParm_StockArrFunc(B, 'ZZ500'); SetParm_StockArrFunc(A,'HS300'); sp_s(pn_StockArrName(),'HS300'); stocks1:=GetParm_StockArr_ByEndt(sp_time(1)); sp_s(pn_StockArrName(),'ZZ500'); stocks2:=GetParm_StockArr_ByEndt(sp_time(1)); return array(stocks1, stocks2); ``` [/code] ####### pn_StockArrFunc 范例 ```text Return pn_StockArrFunc(); //结果:CurrentStockArrFunc ``` ##### StockTrailingAvgByEndT 范例 范例01 ```text 获取万科A过去1年的日均成交金额 setsysparam(pn_stock(),"SZ000002"); endt := 20210714t; RefType := 4;//过去1年 exp := "Amount()"; return StockTrailingAvgByEndT(Endt,RefType,Exp); // 2172484158.52 ``` 范例02 ```text 获取厦门银行过去1年的日均成交金额(剔除上市日3天) setsysparam(pn_stock(),"SH601187"); endt := 20210714t; RefType := 4;//过去1年 exp := "Amount()"; IsExcludeIPO := 1;//考虑剔除上市日影响 N := 3;//上市行情3天 return StockTrailingAvgByEndT(Endt,RefType,Exp,IsExcludeIPO,N); // 444243617.69 ``` ##### StockTrailingStdByEndT 范例 ```text 获取万科A过去1年的日收益率标准差 setsysparam(pn_stock(),"SZ000002"); endt := 20210714t; RefType := 4;//过去1年 exp := "stockzf3()"; return StockTrailingStdByEndT(Endt,RefType,Exp); // 1.69 ``` #### 条件判定 ##### 内容 - IsTimePeriodInfoId ##### IsTimePeriodInfoId 范例 ```text return IsTimePeriodInfoId(150003); //结果:1 ```