# 数据仓库 / 系统参数名称函数

## `pn_changedDateMode()`

声明：function

设置获取股本数据模式： 0：考虑变动日和公布日 1：仅考虑变动日 2：通过生效日判断。 1）变动日>公布日,生效日=变动日 2）变动日<=公布日,生效日=公布日+1 取endt最近一条生效日的数据。 默认为0，即考虑变动日和公布日

<!-- tags: 数据仓库 系统参数名称函数 设置 修改 -->

返回：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

周期，相关数据为字符串类型（见周期函数）或整数。当周期为整数的时候，表示为滚动秒数的自由周期

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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、调用的函数，函数说明中有提到与时间相关时，需要在调用该函数之前设置该系统参数

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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

<!-- tags: 数据仓库 系统参数名称函数 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

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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)来设置

<!-- tags: 数据仓库 系统参数名称函数 转换 编码 COM EXCEL INT64 -->

返回：string

## `pn_nDay()`

声明：function

Nday2执行的周期数目，相关数据为整数类型，一般在使用nday2函数的时候使用pn_nday设置当前的交易日数据，否则默认180天

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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

<!-- tags: 数据仓库 系统参数名称函数 转换 编码 NIL COM EXCEL NULL -->

返回：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之前执行，所以精度的设置需要在系统参数备份之前设置

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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）主要使用的是交易所发送的系统昨收计算，系统昨收考虑了分红送股的数据

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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()一起使用

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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 返回调整前、调整后（即：全表数据）

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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

报告类型，用于控制财务数据取数的报告源与优先级

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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、调用的函数，函数说明中有提到与证券相关时，需要在调用该函数之前设置该系统参数

<!-- tags: 数据仓库 系统参数名称函数 -->

返回：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等实时函数，访问到的行情数据均会推移到这一时刻

<!-- tags: 数据仓库 系统参数名称函数 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());
```
