# 金融 / 金融工程 / 投资组合 / Common

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

声明：function

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

<!-- tags: 金融 金融工程 投资组合 Common 排序 sort 计算 求解 -->

| 参数           | 类型        | 说明                                                                             |
| -------------- | ----------- | -------------------------------------------------------------------------------- |
| `bk_name`      | striong     | 字符串，板块名称                                                                 |
| `beg_t`        | t_date_time | 日期型时间，开始时间                                                             |
| `money`        | real        | 实数，初始资金                                                                   |
| `eval_exp`     | expression  | 表达式                                                                           |
| `sort_dir`     | boolean     | 真假，排序方向                                                                   |
| `range_type`   | integer     | 整数，范围类型                                                                   |
| `range_beg`    | real        | 实数，范围上限                                                                   |
| `range_end`    | real        | 实数，范围下限                                                                   |
| `percent_type` | integer     | 整数，资金分配方法，用户自定义，含义如下表: 显示名 值 流通股 0 总股本 1 等资金 2 |
| `condition`    | expression  | 表达式，条件选择                                                                 |

返回：table_array

### 示例

范例01：调用 AdjustSampleByAny

```tsl
Return AdjustSampleByAny(
    "深证A股",
    inttodate(20120916),
    500,
    @close(),
    false,
    0,
    7,
    9,
    0,
    @true);
```

## `getTrueRp()`

声明：function

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

<!-- tags: 金融 金融工程 投资组合 Common 计算 求解 -->

返回：table_array

### 示例

范例01：调用 GetTrueRp

```tsl
a := array(2, 3, 4, 5, 8);
SetSysParam('TZZHRiMatrix', a);
w := array(1, 4, 6, 3, 7);
Return GetTrueRp(w);
// 输出：5.19048
```

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

声明：function

判断起始日期加上指定间隔天数后是否落在当前日期范围内

<!-- tags: 金融 金融工程 投资组合 Common 调仓 样本 日期间隔 判断 -->

| 参数           | 类型        | 说明         |
| -------------- | ----------- | ------------ |
| `beg_t`        | t_date_time | 起始日期     |
| `current_date` | t_date_time | 当前日期     |
| `adjust_days`  | integer     | 调仓间隔天数 |

返回：boolean

### 示例

范例01：判断两个日期是否达到 9 天调仓间隔

```tsl
return needAdjustSampleByDays(20121018T, 20121026T, 9);
// 输出：0
```

## `pf_callBack1(w, r)`

声明：function

计算投资组合的约束1：所有投资组合的比例和，公式为1

<!-- tags: 金融 金融工程 投资组合 Common 计算 求解 -->

| 参数 | 类型  | 说明         |
| ---- | ----- | ------------ |
| `w`  | array | 一维数字数组 |
| `r`  | float | 实数         |

返回：integer

### 示例

范例01：调用 pf_CallBack1

```tsl
Return pf_CallBack1(Array(3, 4, 5), 2);
// 输出：0.3872
```

## `pf_incomeMaxCallBack(w, r)`

声明：function

返回投资组合收益最大回调

<!-- tags: 金融 金融工程 投资组合 Common 返回 获取 -->

| 参数 | 类型  | 说明                             |
| ---- | ----- | -------------------------------- |
| `w`  | array | 一维数字数组,投资品种的比例(%)   |
| `r`  | float | 实数，使用SUMT时候，使用的罚因子 |

返回：float

### 示例

范例01：调用 pf_IncomeMaxCallBack

```tsl
a := array(2, 3, 4, 5, 8);
SetSysParam('TZZHRiMatrix', a);
setSysParam('TZZHRp', 3);
w := array(1, 4, 6, 3, 7);
Return pf_IncomeMaxCallBack(w, 2);
// 输出：-4.87843
```

## `pf_outPut(x, beg_time, end_time)`

声明：function

返回投资组合结果输出

<!-- tags: 金融 金融工程 投资组合 Common 返回 获取 -->

| 参数       | 类型              | 说明              |
| ---------- | ----------------- | ----------------- |
| `x`        | array,table_array | 投资品种的比例(%) |
| `beg_time` | datetime          | 开始时间          |
| `end_time` | datetime          | 截止时间          |

返回：float

## `pf_riskMinCallBack(w, r)`

声明：function

返回风险最小回调，兼顾风险和收益的投资组合回调，与'TZZHMethodType'该自定义的系统变量有关，计算组合方差的方法，如果为0 则为马可维兹法，此时与'MarkowitzCoMatrix'自定义的系统变量有关，1表示单指数法，此时与'SIMVarRm'自定义的系统变量有关，回调过程中是否卖空与'TZZHYxmk'有关，该函数用于投资组合中间计算风险

<!-- tags: 金融 金融工程 投资组合 Common 返回 获取 -->

| 参数 | 类型  | 说明           |
| ---- | ----- | -------------- |
| `w`  | array | 一维字符串数组 |
| `r`  | float | 实数           |

返回：table_array

## `portfolioByAny(stock_arr, end_t, eval_exp, sort_dir, range_type, range_beg, range_end, condition)`

声明：function

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

<!-- tags: 金融 金融工程 投资组合 Common 排序 sort 计算 求解 -->

| 参数         | 类型        | 说明                                     |
| ------------ | ----------- | ---------------------------------------- |
| `stock_arr`  | table_array | 数据表，股票列表，必须含有’代码’，’股数’ |
| `end_t`      | t_date_time | 日期型时间，当前时间                     |
| `eval_exp`   | expression  | 表达式                                   |
| `sort_dir`   | boolean     | 真假，排序方向                           |
| `range_type` | integer     | 整数，范围类型                           |
| `range_beg`  | real        | 实数，范围上限                           |
| `range_end`  | real        | 实数，范围下限                           |
| `condition`  | expression  | 表达式，条件选择                         |

返回：table_array

### 示例

范例01：调用函数

```tsl
return portfolioByAny(
    array("SH600718", "SZ000920"),
    intToDate(20120916),
    @open(),
    1, 0, 7, 8, @true);
```

## `stocksPortfolio(stock_arr, beg_t, end_t, methodtype, predict_yield, max_risk, show_hist_yield, call_back)`

声明：function

返回股票投资组合计算及结果输出

<!-- tags: 金融 金融工程 投资组合 Common 返回 获取 -->

| 参数              | 类型        | 说明                     |
| ----------------- | ----------- | ------------------------ |
| `stock_arr`       | array       | 一维字符串数组，股票列表 |
| `beg_t`           | t_date_time | 日期型时间，开始日期     |
| `end_t`           | t_date_time | 日期型时间，结束日期     |
| `methodtype`      | intger      | 用户自定义，投资组合方法 |
| `predict_yield`   | real        | 实数，预期收益率         |
| `max_risk`        | real        | 实数，风险限定           |
| `show_hist_yield` | boolean     | 布尔类型，显示历史收益率 |
| `call_back`       | string      | 字符串，回调函数         |

返回：table_array

### 示例

范例01：调用函数

```tsl
return stocksPortfolio(
    array('SH600001', 'SH600000'),
    intToDate(20120721),
    intToDate(20121002),
    0,
    0,
    0,
    true,
"");
```
