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

## `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());
```
