# 因子与量化 / 其他

## `adjustSmaple(bk_name, beg_t, from_no, to_no)`

根根据FromNo，ToNo选取StockArr在EndT的市盈率升序后的股票组合，再根据PercentType确定股票的比例，根据比例分配资金，返回股票的资金分配及购买股数

| 参数      | 类型     | 说明                                                                                          |
| --------- | -------- | --------------------------------------------------------------------------------------------- |
| `bk_name` | string   | 字符串，板块名称，在第二次跟踪时要选股的板块名称StockArr:数据表，初始股票组合                 |
| `beg_t`   | datetime | 日期型时间，开始跟踪日期EndT:日期型时间，结束跟踪日期AdjustMonth:整数，在跟踪期间调整的月份数 |
| `from_no` | int      | 整数，起始行号                                                                                |
| `to_no`   | int      | 整数，截止行号                                                                                |

返回：array

## `bsByMacd(short, _type)`

MACD买入条件选股，DIF上穿（即突破）DEA。与系统证券pn_stock()、系统时间pn_date()和系统周期pn_cycle()有关。调用时需注意设置系统参数。

| 参数    | 类型 | 说明                                                                                        |
| ------- | ---- | ------------------------------------------------------------------------------------------- |
| `short` | int  | 整数，计算MACD指标线的短线Long:整数，计算MACD指标线的长线M:整数，计算MACD指标线的交易日长度 |
| `_type` | int  | 结果类型                                                                                    |

返回：bool

### 示例

```tsl
oV:=BackUpSystemParameters();
setsysparam(pn_stock(),'SH600004');
setsysparam(pn_date(),inttodate(20110913));
setsysparam(pn_cycle(),cy_day());
Short:=12;
Long:=26;
M:=9;
Type:=2;
v:= SsByMACD(Short,Long,M,type);
RestoreSystemParameters(oV);
return v;
```

## `CB_BalanceRatio()`

1）当指定日不在在计息日与实际到期日之间，转债余额比例为nil； 2）当指定日在在计息日与实际到期日之间，返回转债余额比例。

返回：float

## `class()`

策略回测框架。 提供天软策略回测框架、策略清算、策略绩效评价。用户只需： a)设置回测时的基本属性（成员变量） b)重载GetTimeSeries方法提供调仓周期 c)重载GetTradeOrder方法提供目标比例（比例类组合）或交易明细（数量类组合） d)调用BackTest方法进行回测 e)调用查询结果，获得资产配置、持仓、交易、绩效评价等常见评价类指标 详细说明及相关范例见专题，如下链接。

返回：any

## `FI_rt_To_DrawdownUnderwater(r)`

高点回撤序列(%)

| 参数 | 类型  | 说明                                                                               |
| ---- | ----- | ---------------------------------------------------------------------------------- |
| `r`  | array | 数组，收益率(%)，可为一维数字数组，或者用一列表示一个资产收益率（%）序列的二维数组 |

返回：array

## `frameCov_RBLW(data, alpha)`

协方差RBLW压缩估计

| 参数    | 类型  | 说明                                                                         |
| ------- | ----- | ---------------------------------------------------------------------------- |
| `data`  | array | 二维数据表，T×N，T期样本数量，N个股票                                        |
| `alpha` | float | 实数，压缩系数，0到1，缺省时系统自动计算(推荐)，计算方式见RBLW协方差压缩估计 |

返回：array

## `indexDataToShowable(index_table, base_value)`

把计算存贮好的指数数据转换

| 参数          | 类型  | 说明                                            |
| ------------- | ----- | ----------------------------------------------- |
| `index_table` | array | 数据表，指数结果表，必须含有’Date’，’Close’字段 |
| `base_value`  | float | 实数，基准值                                    |

返回：array

### 示例

```tsl
SetSysParam(PN_Stock(),'SZ000002');
SetSysParam(PN_DATE(),IntToDate(20121026));
t:=Nday(20,'Date',sp_time(),'Close',close());
Return array('转换前':t,'转换后':IndexDataToShowable(t,1000));
```

## `kline(n1, n2, n3, n4)`

K线；蜡烛线

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `n1` | int  | 整数 |
| `n2` | int  | 整数 |
| `n3` | int  | 整数 |
| `n4` | int  | 整数 |

返回：Graph

### 示例

```tsl
SetSysParam(pn_stock(),'SH000001');
SetSysParam(pn_date(),inttodate(20140123));
Return KLine(5,10,20,60);
```

## `MF_isMissValue(a, _type, zero_eps)`

是否缺失值判断

| 参数       | 类型  | 说明                                   |
| ---------- | ----- | -------------------------------------- |
| `a`        | float | 实数, 可以为数组或者标量               |
| `_type`    | any   | 整数,                                  |
| `zero_eps` | float | 实数, 与0的差距范围，实数；默认 epsi() |

返回：array

## `MICD_f(n, n1, n2, _type)`

异同离差动力指数，与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()、复权基准日pn_rateday()和执行点数PN_nDay()相关。调用时需注意设置系统参数。

| 参数    | 类型 | 说明             |
| ------- | ---- | ---------------- |
| `n`     | any  | 整数，交易日天数 |
| `n1`    | any  | 整数，交易日天数 |
| `n2`    | any  | 整数，交易日天数 |
| `_type` | any  | 结果类型         |

返回：array

## `OBVMa_v(n, m)`

能量潮的M日移动平均，与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()和复权基准日pn_rateday()相关。调用时需注意设置系统参数。

| 参数 | 类型 | 说明             |
| ---- | ---- | ---------------- |
| `n`  | any  | 整数，交易日天数 |
| `m`  | any  | 整数，交易日天数 |

返回：float

## `Options_SkewCal_Detail(option_arr, op_type)`

多个期权Skew计算详情，与系统时间、周期相关，返回每个期权的隐含波动率、期权类型、Delta

| 参数         | 类型  | 说明                     |
| ------------ | ----- | ------------------------ |
| `option_arr` | array | 多个期权代码，数组类型   |
| `op_type`    | any   | 期权类型，整型，取值如下 |

返回：array

## `pf_InverstmentRatio(wp, wb)`

投资比例与超配。总表为wb左连接wp，超配比例=wp表’比例’字段-wb表’比例’字段，若不存在该字段则用0代替。

| 参数 | 类型  | 说明             |
| ---- | ----- | ---------------- |
| `wp` | array | 数据表类型，组合 |
| `wb` | array | 数据表类型，基准 |

返回：any

## `pf_Rachev(t, fname1, alpha, beta, rf)`

Rachev比率。

| 参数     | 类型   | 说明                  |
| -------- | ------ | --------------------- |
| `t`      | array  | 数据表类型            |
| `fname1` | string | 字符串，列名          |
| `alpha`  | float  | 实数，盈利置信度      |
| `beta`   | float  | 实数，亏损的置信度    |
| `rf`     | float  | 实数，无风险收益率(%) |

返回：float

## `RCCD_f(n, n1, n2, _type)`

异同离差变化率指数，与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()、复权基准日pn_rateday()和执行点数PN_nDay()相关。调用时需注意设置系统参数。

| 参数    | 类型 | 说明             |
| ------- | ---- | ---------------- |
| `n`     | any  | 整数，交易日天数 |
| `n1`    | any  | 整数，交易日天数 |
| `n2`    | any  | 整数，交易日天数 |
| `_type` | any  | 结果类型         |

返回：array

## `Schmidt_orth(data, if_std)`

施密特正交化，对矩阵进行正交，区别于SymOrthogonal，不会改变第一列

| 参数     | 类型  | 说明                                                  |
| -------- | ----- | ----------------------------------------------------- |
| `data`   | array | 二维数字数组, 二维数组 行下标为数字或字符串的二维数组 |
| `if_std` | any   | 用户自定义, 是否标准化                                |

返回：array

## `ssByMtm(n, m)`

MTM卖出条件选股，MTM的M日均线下穿（即跌破）0。与系统证券pn_stock()、系统时间pn_date()和系统周期pn_cycle()有关。调用时需注意设置系统参数。

| 参数 | 类型 | 说明                          |
| ---- | ---- | ----------------------------- |
| `n`  | int  | 整数，统计天数                |
| `m`  | int  | 整数，计算MTM均线的交易日长度 |

返回：bool

### 示例

```tsl
oV:=BackUpSystemParameters();
setsysparam(pn_stock(),'SH600004');
setsysparam(pn_date(),inttodate(20110913));
setsysparam(pn_cycle(),cy_day());
N:=12;
M:=6;
v:=SsByMTM(N,M);
RestoreSystemParameters(oV);
return v;
```

## `Stocks_Assoc_Concept(stocksarr, endt, concept_bk_arr)`

基于概念的股票关联网络

| 参数             | 类型     | 说明                                           |
| ---------------- | -------- | ---------------------------------------------- |
| `stocksarr`      | array    | 一维数组类型，股票序列                         |
| `endt`           | datetime | 日期类型，截止日                               |
| `concept_bk_arr` | array    | 一维数组类型，概念板块代码序列，默认为全部板块 |

返回：array

## `VOSC_v(short, long)`

成交量震荡，与系统证券pn_stock()、系统时间pn_date()、系统周期pn_cycle()、复权方式pn_rate()和复权基准日pn_rateday()相关。调用时需注意设置系统参数。

| 参数    | 类型 | 说明                 |
| ------- | ---- | -------------------- |
| `short` | any  | 整数，短期交易日天数 |
| `long`  | any  | 整数，长期交易日天数 |

返回：float

## `getDateArr(begt, endt, days_interval, show_cycle, t)`

获取时间序列。生成字段’计算指标开始日’,’持仓截止日’,其中’计算指标开始日’为begt到Endt的时间往前推一年，’持仓截止日’为begt到endt。

| 参数            | 类型      | 说明                               |
| --------------- | --------- | ---------------------------------- |
| `begt`          | TdateTIME | TdateTIME 开始日期                 |
| `endt`          |           | Tdatetime 截止日期                 |
| `days_interval` | integer   | integer 指标开始计算日向前推移年份 |
| `show_cycle`    | String    | String 周期                        |
| `t`             |           | 数据表类型,源数据                  |

返回：any

### 示例

```tsl
return getDateArr(20111230T,20120914T,1,'日线');
返回:
```

## `splitDiv(len, n)`

网格参数划分，分不平均时，余数给最后一个网格

| 参数  | 类型 | 说明           |
| ----- | ---- | -------------- |
| `len` | int  | 整型，参数个数 |
| `n`   | int  | 整型，网格个数 |

返回：array

### 示例

```tsl
return unit(multi_proc_unit).splitDiv(14,5); // array(0,2,4,6,8,14)
```

## `splitDiv2(len, n)`

网格参数划分，分不平均时，前面M个网格加一

| 参数  | 类型 | 说明           |
| ----- | ---- | -------------- |
| `len` | int  | 整型，参数长度 |
| `n`   | int  | 整型，网格个数 |

返回：array

### 示例

```tsl
return unit(multi_proc_unit).splitDiv2(14,5); // array(0,3,6,9,12,14)
```

## `splitArrayQk(arr)`

数组等分区间，余数给最后一个网格

| 参数  | 类型  | 说明             |
| ----- | ----- | ---------------- |
| `arr` | array | 数组，要划分数组 |

返回：array

### 示例

```tsl
arr := array(2,1,3,4,9,5,7,8,9,10,11,12,13,15);
return unit(multi_proc_unit).splitArrayQk(arr,5); //array((2,1),(3,4),(9,5),(7,8),(9,15))
```

## `splitArrayQk2(arr)`

数组等分区间，分不平均时，前面M个网格加一

| 参数  | 类型  | 说明             |
| ----- | ----- | ---------------- |
| `arr` | array | 数组，要划分数组 |

返回：array

### 示例

```tsl
arr := array(2,1,3,4,9,5,7,8,9,10,11,12,13,15);
return unit(multi_proc_unit).splitArrayQk2(arr,5);
// array((2,3),(4,5),(7,9),(10,12),(13,15))
```

## `addTitle(t, title)`

增加表头。

| 参数    | 类型   | 说明              |
| ------- | ------ | ----------------- |
| `t`     | array  | 数据表类型,源数据 |
| `title` | String | 字符串,表头       |

返回：any

### 示例

```tsl
return addTitle(``array('a':1),'b');
返回:
```

## `gridLogo(str, dir)`

网格写日志，一个网格id一个文件

| 参数  | 类型   | 说明                                              |
| ----- | ------ | ------------------------------------------------- |
| `str` | string | 字符串型，任务名称                                |
| `dir` | string | 字符串型，日志文件路径 ，默认为:C:\\temp\\Gridlog |

返回：int

### 示例

```tsl
//在C:\\temp\\Gridlog默认路径下写日志文件
return unit(multi_proc_unit).gridLogo('测试');
```

## `setToFirstValue(t1, t2)`

归一处理，用于在计算复合指数时，在基准数据t2的基础上对t1归一化

| 参数 | 类型       | 说明                        |
| ---- | ---------- | --------------------------- |
| `t1` | TableArray | 数据表，必须含有’close’字段 |
| `t2` | TableArray | 数据表，必须含有’close’字段 |

返回：TableArray

## `wacc(rf, rm, beta, kd, delta)`

加权资本成本WACC（%）

| 参数    | 类型 | 说明                      |
| ------- | ---- | ------------------------- |
| `rf`    | Real | 实数，无风险利率（%）     |
| `rm`    | Real | 实数，市场预期收益率（%） |
| `beta`  | Real | 实数，β系数               |
| `kd`    | Real | 实数，债务成本（%）       |
| `delta` | Real | 实数，资产负债率（%）     |

返回：Real

### 示例

```tsl
return wacc(3.84,10.84,0.637,4.1,40); //结果：6.6194
```

## `getTrueRp(w)`

计算资产组合的期望收益率，与自定义的系统变量’TZZHRiMatrix’有关，调用之前先设置该系统变量。并且w的长度必须跟该系统变量的值的长度一致

| 参数 | 类型  | 说明                       |
| ---- | ----- | -------------------------- |
| `w`  | Array | 一位数字数组，投资品种比例 |

返回：TableArray

### 示例

```tsl
a:=array(2,3,4,5,8);
setSysParam('TZZHRiMatrix',a);
w:=array(1,4,6,3,7);
return getTrueRp(w); //结果：5.19048
```

## `adjustSampleByAny(bk_name, beg_t, money, eval_exp, sort_dir, range_type, range_beg, range_end, percent_type, condition)`

计算满足条件Condition的股票的EvalExp，选取值在RangeBeg跟RangeEnd之间，按照不同的RangeType类型选择股票，并分配资金

| 参数           | 类型       | 说明                                        |
| -------------- | ---------- | ------------------------------------------- |
| `bk_name`      | Striong    | 字符串，板块名称                            |
| `beg_t`        | TDateTime  | 日期型时间，开始时间                        |
| `money`        | Real       | 实数，初始资金                              |
| `eval_exp`     | Expression | 表达式                                      |
| `sort_dir`     | Boolean    | 真假，排序方向                              |
| `range_type`   | Integer    | 整数，范围类型                              |
| `range_beg`    | Real       | 实数，范围上限                              |
| `range_end`    | Real       | 实数，范围下限                              |
| `percent_type` | Integer    | 整数，资金分配方法，用户自定义，含义如下表: |
| `condition`    | Expression | 表达式，条件选择                            |

返回：TableArray

### 示例

```tsl
return adjustSampleByAny(
"深证A股",
intToDate(20120916),
500,
@close(),
false,
0,
7,
9,
0,
@true);
//结果：
```

## `needAdjustSampleByDays(beg_t, current_date, adjust_days)`

判断起始日期BegT间隔相应天数AdjustDays是否在系统限定的当前日期CurrentDate内

| 参数           | 类型 | 说明                 |
| -------------- | ---- | -------------------- |
| `beg_t`        |      | 日期型时间，起始日期 |
| `current_date` |      | 日期型时间，当前时间 |
| `adjust_days`  |      | 整数                 |

返回：Boolean

### 示例

```tsl
begt:=intToDate(20121018);
endt:=intToDate(20121026);
return needAdjustSampleByDays(begt,endt,9); //结果：0
```

## `encodePortfolioName(name, beg_t, end_t, method_type, yh_type, predict_yield, max_risk)`

用于生成投资组合的结果保存的名称

| 参数            | 类型      | 说明                                               |
| --------------- | --------- | -------------------------------------------------- |
| `name`          | String    | 字符串,股票列表                                    |
| `beg_t`         | TDateTime | 日期型时间，开始时间                               |
| `end_t`         | TDateTime | 日期型时间，结束时间                               |
| `method_type`   | Ingteger  | 整数,0表示’Markowitz法’，1表示’单指数法’           |
| `yh_type`       | Integer   | 整数，0表示’收益，风险最小’，1表示’风险，收益最大’ |
| `predict_yield` | Real      | 实数                                               |
| `max_risk`      | Real      | 实数                                               |

返回：String

### 示例

```tsl
return encodePortfolioName(
"某股票",
intToDate(20120618),i
nttodate(20120919),0,0,0,0);
//结果：’某股票,从20120618到20120919,Markowitz法,限定收益为0求风险最小’
```

## `allBkYieldAndRisk(period, start_date)`

所有板块Period期的预期收益和风险

| 参数         | 类型      | 说明                 |
| ------------ | --------- | -------------------- |
| `period`     | Integer   | 整数，做足period期   |
| `start_date` | TDateTime | 日期型时间，开始时间 |

返回：TableArray

### 示例

```tsl
return allBkYieldAndRisk(20,intToDate(20120628));
//结果：
```

## `needAdjustSmaple(beg_t, current_date, adjust_month)`

判断CurrentDate是否还在BegT往后推AdjustMonth\*30的日期内

| 参数           | 类型      | 说明                             |
| -------------- | --------- | -------------------------------- |
| `beg_t`        | TDateTime | 日期型时间，起始时间             |
| `current_date` | TDateTime | 日期型时间，当前时间             |
| `adjust_month` | Integer   | 整数，往后推的月份数，月份间隔数 |

返回：TableArray

### 示例

```tsl
return needAdjustSmaple(intToDate(20120618),intToDate(20120926),4);
//结果：0
```

## `emptyvalue()`

返回受pn_emptymode控制的空值（实数）

返回：Real

## `riskFreeRateofReturnDayly(rf, cy, rate_type, days_in1y)`

年化无风险收益率转换非年化收益率，与系统参数(股票,时间)相关。

| 参数        | 类型    | 说明                                         |
| ----------- | ------- | -------------------------------------------- |
| `rf`        | real    | 实数，年化无风险收益率(%)                    |
| `cy`        | String  | 周期，非年化收益率周期                       |
| `rate_type` | Integer | 用户自定义，年化收益率折算为非年化收益率方法 |
| `days_in1y` | Integer | 用户自定义                                   |

返回：real

### 示例

```tsl
setSysParam(pn_stock(),'sz000001');
setSysParam(PN_Date(),20180801T);
return riskFreeRateofReturnDayly(3,cy_day(),'单利',250);
//返回：0.01
```

## `fastmap(grid_no, func, parms, parmstype)`

调用网格执行func

| 参数        | 类型   | 说明                                                    |
| ----------- | ------ | ------------------------------------------------------- |
| `grid_no`   | int    | 整型，网格个数，表示另开的网格数，0表示只使用本地服务器 |
| `func`      | string | 字符串型或函数指针，要调用网格计算的函数                |
| `parms`     | array  | 数组，func的参数列表                                    |
| `parmstype` | array  | 数组，parms的对应类型                                   |

返回：array

## `gettablebyReg(reg)`

通过正则表达式匹配名称，获取用户数据

| 参数  | 类型   | 说明                   |
| ----- | ------ | ---------------------- |
| `reg` | string | 字符串型，匹配的字符串 |

返回：array

### 示例

```tsl
return unit(multi_proc_unit).gettablebyReg('test');
```

## `tryInsetTable(path, value)`

添加用户数据，如果用户数据存在同名，则插入，否则新建

| 参数    | 类型   | 说明                       |
| ------- | ------ | -------------------------- |
| `path`  | string | 字符串型，用户数据存储路径 |
| `value` | array  | 数组，要存储的数据         |

返回：int

### 示例

```tsl
return unit(multi_proc_unit).tryInsetTable('test',array(1,2,3));
```

## `getAllThemespools(end_t, details)`

默认主题池：主题关键字及其对应的代表指数、成分股

| 参数      | 类型   | 说明                                   |
| --------- | ------ | -------------------------------------- |
| `end_t`   | Date   | 日期, 截止日                           |
| `details` | DBData | 数据表类型, 返回参数，包含主题详情信息 |

返回：array

### 示例

```tsl
end_t := 20230919T;
return getAllThemespools(end_t);
```

## `fileterValue(v, w)`

找出需要过滤处理的日期

| 参数 | 类型       | 说明                       |
| ---- | ---------- | -------------------------- |
| `v`  | TableArray | 数据表，必须含有’time’字段 |
| `w`  | Array      | 一维日期型时间数组         |

返回：TableArray

### 示例

```tsl
v:=array(('s':0,'time':41201),('s':6,'time':41202),('s':2,'time':41203),('s':8,'time':41204),('s':2,'time':41207),('s':3,'time':41208));
w:=array(41101,41202,41205,41206,41207,41209);
fileterValue(v,w);
//结果：
```
