# 金融 / 金融工程 / 投资组合 / 投资组合历史验证

## `portfolioByPe(stock_arr, end_t, from_no, to_no)`

声明：function

按指定日期的市盈率升序排列股票列表并返回给定名次范围内的股票

<!-- tags: 金融 金融工程 投资组合 历史验证 市盈率 PE 排序 选股 排名 -->

| 参数        | 类型        | 说明             |
| ----------- | ----------- | ---------------- |
| `stock_arr` | array       | 待筛选的股票代码 |
| `end_t`     | t_date_time | 市盈率对应日期   |
| `from_no`   | integer     | 起始名次         |
| `to_no`     | integer     | 截止名次         |

返回：table_array

### 示例

范例01：返回市盈率最低的两只股票

```tsl
stock_arr := array("SH600718", "SZ000920", "SH600000");
end_t := intToDate(20120828);
return portfolioByPe(stock_arr, end_t, 1, 2);
```

## `portfolioGraph(t)`

声明：function

返回组合收盘和指数收盘的图

<!-- tags: 金融 金融工程 投资组合 投资组合历史验证 返回 获取 -->

| 参数 | 类型        | 说明                                           |
| ---- | ----------- | ---------------------------------------------- |
| `t`  | table_array | 数据表，包含’日期’，’组合指数’与’指数’字段的表 |

返回：table_array

### 示例

范例01：调用函数

```tsl
setSysParam(PN_DATE(), intToDate(20121029));
t := nDay(100, '日期', sp_time(), '指数', spec(close(), 'SZ000002'), '组合指数', spec(close(), 'SZ000001'));
return portfolioGraph(t);
```

## `portfolioPercent(stock_arr, beg_t, money, percent_type)`

声明：function

按指定权重为股票组合分配资金并计算可购买股数

<!-- tags: 金融 金融工程 投资组合 历史验证 资金分配 投资比例 权重 股数 -->

| 参数           | 类型        | 说明                 |
| -------------- | ----------- | -------------------- |
| `stock_arr`    | array       | 投资组合的股票代码   |
| `beg_t`        | t_date_time | 投资开始日期         |
| `money`        | real        | 总投资金额，单位万元 |
| `percent_type` | integer     | 权重类型，取值见下   |

percent_type 取值

- `0` — 流通股本加权
- `1` — 总股本加权
- `2` — 等资金加权

返回：table_array

### 示例

范例01：按流通股本权重分配 500 万元

```tsl
stock_arr := array("SH600718", "SZ000920");
beg_t := intToDate(20120918);
return portfolioPercent(stock_arr, beg_t, 500, 0);
```

## `portfolioTrack_pgm(zh_result, tmoney, beg_t, end_t)`

声明：function

对已经建立好的投资组合进行跟踪，返回投资组合的组合市值，涨幅等

<!-- tags: 金融 金融工程 投资组合 投资组合历史验证 -->

| 参数        | 类型     | 说明                            |
| ----------- | -------- | ------------------------------- |
| `zh_result` | string   | 数据表，组合结果，数据格式如下: |
| `tmoney`    | float    | 实数，总共投资金额<万元>        |
| `beg_t`     | datetime | 日期型时间，开始投资日期        |
| `end_t`     | datetime | 日期型时间，结束投资日期        |

返回：table_array

### 示例

范例01：调用 PortfolioTrack_Pgm

```tsl
Return PortfolioTrack_Pgm("data", 500,
    inttodate(20120718),
    inttodate(20121019));
```

## `portfolioTracking(bk_name, stock_arr, beg_t, end_t, adjust_month, from_no, to_no)`

声明：function

跟踪股票组合每日市值和收益，并与指定指数比较，调仓时按市盈率名次重新选股

<!-- tags: 金融 金融工程 投资组合 历史验证 组合跟踪 市值 收益 指数 调仓 市盈率 -->

| 参数           | 类型        | 说明                             |
| -------------- | ----------- | -------------------------------- |
| `bk_name`      | string      | 调仓时用于重新选股的板块名称     |
| `stock_arr`    | table_array | 初始持仓，包含代码和股数字段     |
| `beg_t`        | t_date_time | 跟踪开始日期                     |
| `end_t`        | t_date_time | 跟踪结束日期                     |
| `adjust_month` | integer     | 两次调仓之间的月份数             |
| `from_no`      | integer     | 调仓时按市盈率升序选股的起始名次 |
| `to_no`        | integer     | 调仓时按市盈率升序选股的截止名次 |

返回：table_array

### 示例

范例01：跟踪三只股票组成的组合

```tsl
stock_arr := array(
    ("代码":"SZ000002", "股数":10),
    ("代码":"SH600000", "股数":30),
    ("代码":"SZ000001", "股数":20));
beg_t := intToDate(20120912);
end_t := intToDate(20121022);
return portfolioTracking(
    "沪深300", stock_arr, beg_t, end_t, 4, 2, 5);
```
