# 数据仓库 / 系统参数名称函数 ## `pn_changedDateMode()` 声明:function 设置获取股本数据模式: 0:考虑变动日和公布日 1:仅考虑变动日 2:通过生效日判断。 1)变动日>公布日,生效日=变动日 2)变动日<=公布日,生效日=公布日+1 取endt最近一条生效日的数据。 默认为0,即考虑变动日和公布日 返回:string ### 示例 范例01:结果:array(11039152001.0,11302143001.0) ```tsl 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_cycle()` 声明:function 周期,相关数据为字符串类型(见周期函数)或整数。当周期为整数的时候,表示为滚动秒数的自由周期 返回:string ### 示例 范例01:取万科A在2019-02-18 11:25:00时的五分钟线成交量 ```tsl // 取万科A在2019-02-18 11:25:00时的五分钟线成交量 setsysparam(pn_stock(), 'SZ000002'); setsysparam(pn_date(), 20190218.1125T); setsysparam(pn_cycle(), cy_5m()); return vol(); // 输出:1389725 ``` 范例02:取上证指数一段时间内的5分钟线数据 ```tsl // 取上证指数一段时间内的5分钟线数据 setsysparam(pn_cycle(), cy_5m()); return select ['date'], ['close'], ['vol'] from markettable datekey 20190218.1030T to 20190218.1120T of 'SH000001' end; ``` ## `pn_date()` 声明:function 当前时间,相关数据为日期时间类型 在什么时候需要设置当前时间? 1、取行情数据、财务数据时需要。 2、调用的函数,函数说明中有提到与时间相关时,需要在调用该函数之前设置该系统参数 返回:string ### 示例 范例01:设置当前时间为2019-2-18 ```tsl // 设置当前时间为2019-2-18 setsysparam(pn_date(), 20190218T); return sp_time(); // 或return getsysparam(pn_date());//获取当前时间 // 输出:43514,即2019-02-18 ``` 范例02:取指定证券SH60000在指定日2019-02-18这一天的收盘价 ```tsl // 取指定证券SH60000在指定日2019-02-18这一天的收盘价 setsysparam(pn_stock(), 'SH600000'); setsysparam(pn_date(), 20190218T); // 设置当前时间 return close(); // 取收盘价 // 输出:10.84 ``` ## `pn_emptymode()` 声明:function 当前空记录模式,系统参数选项,对应系统参数下标'EmptyMode',可以设定当记录不存在的时候report和base返回的数据表示形式的缺省行为。该系统参数取值如下: 取值 说明 0 缺省值,设置为整数0 1 设置为Nil 2 根据字段的数据类型设定,浮点为0.0 3 设置为短杠字符串 4 设置为N/A字符串 5 设置为浮点NAN 6 根据类型设定,浮点为NAN 返回:string ### 示例 范例01:取万科A在2019年的三季报与年报的股东权益合计,笔者执行日期为20191224日,年报还未出 ```tsl // 取万科A在2019年的三季报与年报的股东权益合计,笔者执行日期为20191224日,年报还未出 setsysparam(pn_emptymode(), 5); // 空记录设置为浮点NAN setsysparam(pn_stock(), 'SZ000002'); t1 := reportofall(44111, 20190930); t2 := reportofall(44111, 20191231); return array(t1, t2); ``` ## `pn_freeCycle()` 声明:function 设为自由周期模式,系统参数的值为真假值。设置自由周期模式后,分钟线和秒线从固定截止时间的周期变换为滚动周期,也就是周期为设置的pn_date的时间往前滚动周期的长度。例如当设置pn_FreeCycle()参数为1时,设置pn_Cycle()为cy_1m(),设置pn_date()为11:03:05秒,则时间序列为以11:03:05为截止点,一分钟为单位(会自动跳过非交易时段)的时序。 采用设置pn_FreeCycle()为1,设置周期为cy_1m()的效果与直接设置pn_cycle()为60是一样的,而cy_FreeCycle(60)的值亦为60 返回:string ## `pn_i64Trans()` 声明:function Int64在COM中转换的行为。 假如用户在其他的本地应用中与外部COM打交道,例如调用EXCEL,那么用户可以在TSL中设置该系统参数的方式来调整INT64对COM数据类型转换的行为。 设置的值可为下列值(默认为0): 0:转换为64位整数。默认值 1:转换为32位整数。可能会溢出。 2:转换为双精度浮点数。可能会丢失精度。 以上增强是因为目前买卖盘量已经转换为64位整数,而某些COM前端不支持64位整数,例如Matlab2009等。用户可以设置该属性来控制转换的行为。如Matlab中用ts.SetSysParam('I64Trans ',2)来设置 返回:string ## `pn_nDay()` 声明:function Nday2执行的周期数目,相关数据为整数类型,一般在使用nday2函数的时候使用pn_nday设置当前的交易日数据,否则默认180天 返回:string ### 示例 范例01:调用 pn_nDay ```tsl setsysparam(pn_stock(), 'SZ000001'); setsysparam(pn_date(), inttodate(20140115)); setsysparam(pn_nday(), 250); return nday2('time', datetostr(sp_time()), 'close', close()); ``` ## `pn_nilTrans()` 声明:function NIL在COM中转换的行为。 假如用户在其他的本地应用中与外部COM打交道,例如调用EXCEL,那么用户可以在TSL中设置该系统参数的方式来调整NIL对COM数据类型转换的行为。 设置的值可为下列值(默认为0): 0: 转换为Unassigned 1: 转换为Empty 2: 转换为NULL 3: 转换为NaN 4: 转换为整数0 5: 转换为浮点0 6: 转换为空字符串 7: 转换为'NIL'字符串 8: 转换为'NULL'字符串 9: 转换为'-'字符串 10: 转换为'/'字符串 其他值: 转换为Unassigned 返回:string ### 示例 范例01:matlab代码 ```tsl // matlab代码 ts=actxserver('TSExpert.CoExec') ts.SetSysParam('NilTrans', 9) ts.RemoteExecute('return array((1,2,nil,4),(2,nil,3,nil));') ``` ## `pn_precision()` 声明:function 保留小数点位数,-1表示保留所有小数。 对返回的结果保留小数点位数,即return时生效。例如BackupSystemParameters2()中系统参数的恢复是在return之前执行,所以精度的设置需要在系统参数备份之前设置 返回:string ### 示例 范例01:返回结果保留3位小数: ```tsl setsysparam(PN_Precision(), 3); // 设置有效 ov := BackupSystemParameters2(); setsysparam(PN_Precision(), 2); // 设置无效,在return 之前被恢复到备份之前的状态 return rand(2, 3); // 输出:保留3位小数: ``` 范例02:提取万科A2019-2-19日的5分钟线收盘价,并保留2位小数结果输出 ```tsl // 提取万科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; ``` ## `pn_rate()` 声明:function 复权方式,0为不复权;1为比例复权(考虑股改),计算一个复权因子,通过与除权发生日的复权因子相乘,得到比例复权数据;2为采用分红送配数据除权,该种除权算法不仅仅考虑送股的比例关系,还考虑了诸如分红的加减关系;3为比例复权(不考虑股改),同样通过计算复权因子,后与除权发生日的复权因子相乘,得到比例复权数据,但是不考虑股改时发生权益变动。 注意,比例复权(1和3)主要使用的是交易所发送的系统昨收计算,系统昨收考虑了分红送股的数据 返回:string ### 示例 范例01:以第一个交易日为基准进行复杂复权后的截止20110909万科A的收盘价时间序列 ```tsl // 以第一个交易日为基准进行复杂复权后的截止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()); ``` ## `pn_rateDay()` 声明:function 复权基准日,0为最后交易日为基准日,-1为上市日为基准日,其他为TDateTime类型的指定的复权基准日。一般与pn_rate()一起使用 返回:string ### 示例 范例01:设置2018-08-20为复权基准日,小于这个日期的前复权,大于这个日的后复权 ```tsl // 设置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()); ``` ## `pn_reportMode()` 声明:function 设定报表数据规则模式。对报告期相关的表格数据(Infotable、InfoArray)进行取调整前调整后的数据选择。该系统参数取值如下: 赋值 说明 1 只返回调整前(即:未调整数据) 0 如果有调整后,则返回;否则,返回调整前(即:取最新可取得到的) -1 返回调整前、调整后(即:全表数据) 返回:string ### 示例 范例01:pn_ReportMode()=-1,返回调整前、调整后 ```tsl 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 ``` ## `pn_reportType()` 声明:function 报告类型,用于控制财务数据取数的报告源与优先级 返回:string ### 示例 范例01:返回结果:20220930, 财报2022年三季报已公布,年报未公布 ```tsl EndT := 20230121T; ov := BackupSystemParameters2(); SetSysParam(pn_stock(), 'SH688699'); SetSysParam(pn_date(), EndT); SetSysParam(pn_ReportType(), 0); // 财报最新报告期,等价于不设置该系统参数 RDate := NewReportDateOfEndT2(EndT); return RDate; // 输出:20220930, 财报2022年三季报已公布,年报未公布 ``` 范例02:返回结果:20221231, 财报和快报2022年年报未公布,预测已公布 ```tsl EndT := 20230121T; ov := BackupSystemParameters2(); SetSysParam(pn_stock(), 'SH688699'); SetSysParam(pn_date(), EndT); SetSysParam(pn_ReportType(), 1); // 财报>快报>预测 RDate := NewReportDateOfEndT2(EndT); return RDate; // 输出:20221231, 财报和快报2022年年报未公布,预测已公布 ``` 范例03:返回结果:20220930,财报和快报2022年年报未公布,财报2022年三季报已公布 ```tsl EndT := 20230121T; ov := BackupSystemParameters2(); SetSysParam(pn_stock(), 'SH688699'); SetSysParam(pn_date(), EndT); SetSysParam(pn_ReportType(), 2); // 财报>快报 RDate := NewReportDateOfEndT2(EndT); return RDate; // 输出:20220930,财报和快报2022年年报未公布,财报2022年三季报已公布 ``` 范例04:返回结果:20221231,财报2022年年报未公布,预测已公布 ```tsl EndT := 20230121T; ov := BackupSystemParameters2(); SetSysParam(pn_stock(), 'SH688699'); SetSysParam(pn_date(), EndT); SetSysParam(pn_ReportType(), 3); // 财报>预测 RDate := NewReportDateOfEndT2(EndT); return RDate; // 输出:20221231,财报2022年年报未公布,预测已公布 ``` 范例05:返回结果:20220930, 按财报公布规则20230121t,2022年年报未公布在4月底才公布,2022年三季报已在2022年10月公布了 ```tsl EndT := 20230121T; ov := BackupSystemParameters2(); SetSysParam(pn_ReportType(), 90); // 财报按财报发布规则 RDate := NewReportDateOfEndT2(EndT); return RDate; // 输出:20220930, 按财报公布规则20230121t,2022年年报未公布在4月底才公布,2022年三季报已在2022年10月公布了 ``` 范例06:返回结果:20220930, 20230121T指定报告期2022年年报未公布,2022年三季报已公布 ```tsl EndT := 20230121T; ov := BackupSystemParameters2(); SetSysParam(pn_stock(), 'SH688699'); SetSysParam(pn_ReportType(), 20221231); // 财报指定报告期已公布 RDate := NewReportDateOfEndT2(EndT); return RDate; // 输出:20220930, 20230121T指定报告期2022年年报未公布,2022年三季报已公布 ``` ## `pn_stock()` 声明:function 当前股票,相关数据为字符串类型。 在什么时候需要设置当前股票?1、取行情数据、基本面数据、财务数据时需要。2、调用的函数,函数说明中有提到与证券相关时,需要在调用该函数之前设置该系统参数 返回:string ### 示例 范例01:设置当前证券为万科A ```tsl // 设置当前证券为万科A setsysparam(pn_stock(), 'SZ000002'); return getsysparam(pn_stock()); // 获取当前的证券代码 // 输出:字符串SZ000002 ``` 范例02:取指定证券SH60000在指定日2019-02-18这一天的收盘价 ```tsl // 取指定证券SH60000在指定日2019-02-18这一天的收盘价 setsysparam(pn_stock(), 'SH600000'); setsysparam(pn_date(), 20190218T); // 设置当前时间 return close(); // 取收盘价 // 输出:10.84 ``` ## `pn_viewPoint()` 声明:function 设定时点仿真的时点,系统参数的值为一个精确的仿真时间,如果仿真时间为0表示不进行仿真历史。设置时点仿真以后,各类周期均不会访问到未来数据,例如设置时点为11:03:05秒,访问日线、周线、分钟线、秒线等均会和11:03:05秒的时刻访问相同。此外,对于RD等实时函数,访问到的行情数据均会推移到这一时刻 返回:string ### 示例 范例01:调用 pn_ViewPoint ```tsl 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()); ```