# 金融 / 金融工程 / CAPM

## `bkRiskAndReturn_pgm(bk_name, index_id, beg_t, end_t, show_type)`

声明：function

返回组合的贝塔值与风险(组合采取等资金加权)

<!-- tags: 金融 金融工程 CAPM 返回 获取 -->

| 参数        | 类型     | 说明     |
| ----------- | -------- | -------- |
| `bk_name`   | string   | 板块名称 |
| `index_id`  | string   | 指数代码 |
| `beg_t`     | datetime | 开始日期 |
| `end_t`     | datetime | 截止日期 |
| `show_type` | integer  | 显示设置 |

返回：array

### 示例

范例01：返回深证A股板块及其下个股加权beta/alpha/平均收益率/标准差/残差标准差/相关系数

```tsl
bkname := "深证A股";
indexid := 'SH000001';
begt := inttodate(20120425);
endt := inttodate(20121017);
return BkRiskAndReturn_Pgm(bkname, indexid, begt, endt, 1);
// 输出：深证A股板块及其下个股加权beta/alpha/平均收益率/标准差/残差标准差/相关系数
```

## `bksRiskAndReturn_pgm(bk_names, index_id, beg_t, end_t)`

声明：function

返回不同组合的贝塔值与风险比较(组合采取等资金加权)

<!-- tags: 金融 金融工程 CAPM 返回 获取 -->

| 参数       | 类型     | 说明     |
| ---------- | -------- | -------- |
| `bk_names` | string   | 板块列表 |
| `index_id` | string   | 基准代码 |
| `beg_t`    | datetime | 开始日期 |
| `end_t`    | datetime | 截止日期 |

返回：array

### 示例

范例01：返回深证A股及上证A股的风险指标

```tsl
bkname := "深证A股;上证A股";
indexid := 'SH000001';
begt := inttodate(20120425);
endt := inttodate(20121017);
return BksRiskAndReturn_Pgm(bkname, indexid, begt, endt);
// 输出：深证A股及上证A股的风险指标
```

## `stocksAlpha(alpha_arr, w)`

声明：function

返回组合Alpha

<!-- tags: 金融 金融工程 CAPM 返回 获取 -->

| 参数        | 类型  | 说明         |
| ----------- | ----- | ------------ |
| `alpha_arr` | array | 一维数字数组 |
| `w`         | array | 一维数字数组 |

返回：real

### 示例

范例01：调用函数

```tsl
o_v := BackupSystemParameters2();
// 假设组合为申万采掘，先计算其下个股的区间alpha
stock_arr := getBk('申万采掘');
index_id := 'SH000001';
beg_t := intToDate(20110101);
end_t := intToDate(20110630);
t := array();
n := 0;
for i := 0 to length(stock_arr)-1 do
begin
    stockid := stock_arr[i];
    setSysParam(pn_stock(), stockid);
    if not isStockGoMarket(begt) then continue;
    tmp := stockBetaAlpha2(index_id, beg_t, end_t);
    t[n]['代码'] := stockid;
    t[n]['名称'] := stockName(stockid);
    t[n]['alpha'] := tmp['Alpha'];
    n++;
end
// 按总股本加权，计算组合alpha
t2 := pf_percent(t[:, '代码'], end_t, 0);
t := select [1].['alpha'], [2].['比例(%)'] from t
left join t2 with([1].['代码'] on [2].['代码'])
end;
return stocksAlpha(t[:, 'alpha'], t[:, '比例(%)']);
// 输出：0.0374
```

## `stocksBeta(beta_arr, w)`

声明：function

返回组合Beta

<!-- tags: 金融 金融工程 CAPM 返回 获取 -->

| 参数       | 类型  | 说明         |
| ---------- | ----- | ------------ |
| `beta_arr` | array | 一维数字数组 |
| `w`        | array | 一维数字数组 |

返回：real

### 示例

范例01：调用函数

```tsl
o_v := BackupSystemParameters2();
// 假设组合为申万采掘，先计算其下个股的区间beta
stock_arr := getBk('申万采掘');
index_id := 'SH000001';
beg_t := intToDate(20110101);
end_t := intToDate(20110630);
t := array();
n := 0;
for i := 0 to length(stock_arr)-1 do
begin
    stockid := stock_arr[i];
    setSysParam(pn_stock(), stockid);
    if not isStockGoMarket(begt) then continue;
    tmp := stockBetaAlpha2(index_id, beg_t, end_t);
    t[n]['代码'] := stockid;
    t[n]['名称'] := stockName(stockid);
    t[n]['beta'] := tmp['Beta'];
    n++;
end
// 按总股本加权，计算组合beta
t2 := pf_percent(t[:, '代码'], end_t, 0);
t := select [1].['beta'], [2].['比例(%)'] from t
left join t2 with([1].['代码'] on [2].['代码']) end;
return stocksBeta(t[:, 'beta'], t[:, '比例(%)']);
// 输出：1.0095
```

## `stocksBetaAlpha(stock_arr, index_id, begt, end_t, sim_rm)`

声明：function

获取一组股票的α系数，β系数，平均收益率，收益率标准差，残差标准差

<!-- tags: 金融 金融工程 CAPM 获取 查询 -->

| 参数        | 类型       | 说明           |
| ----------- | ---------- | -------------- |
| `stock_arr` | array      | 一维字符串数组 |
| `index_id`  | string     | 字符串         |
| `begt`      | tdate_time | 日期，开始时间 |
| `end_t`     | tdate_time | 日期，截止时间 |
| `sim_rm`    | real       | 实数（无用）   |

返回：array

### 示例

范例01：返回一组股票的α系数、β系数、平均收益率、收益率标准差、残差标准差及相关系数

```tsl
StockArr := array("SH600460", "SZ000920", "SH600718");
IndexId := 'SH000300';
begt := inttodate(20110101);
endt := inttodate(20110630);
// 剔除begt还没上市的股票
delete from stockArr where spec(IsStockGoMarket(begt), thisrow)=0;
return StocksBetaAlpha(StockArr, IndexId, begt, endt);
// 输出：一组股票的α系数、β系数、平均收益率、收益率标准差、残差标准差及相关系数
```

## `stocksExpectedReturn(ri_arr, w)`

声明：function

返回SIM法投资组合的期望率，计算公式：E(Rp)= W[nI]\*Ri[nI]

<!-- tags: 金融 金融工程 CAPM 返回 获取 SIM -->

| 参数     | 类型  | 说明         |
| -------- | ----- | ------------ |
| `ri_arr` | array | 一维数字数组 |
| `w`      | array | 一维数字数组 |

返回：real

### 示例

范例01：调用函数

```tsl
o_v := BackupSystemParameters2();
// 假设组合为申万采掘，先计算其下个股的区间收益率
stock_arr := getBk('申万采掘');
beg_t := intToDate(20110101);
end_t := intToDate(20110630);
t := array();
n := 0;
for i := 0 to length(stock_arr)-1 do
begin
    stockid := stock_arr[i];
    setSysParam(pn_stock(), stockid);
    if not isStockGoMarket(begt) then continue;
    tmp := stockZf(beg_t, end_t);
    t[n]['代码'] := stockid;
    t[n]['名称'] := stockName(stockid);
    t[n]['涨幅(%)'] := tmp;
    n++;
end
// 按总股本加权，计算组合收益率
t2 := pf_percent(t[:, '代码'], end_t, 0);
t := select [1].['涨幅(%)'], [2].['比例(%)'] from t
left join t2 with([1].['代码'] on [2].['代码'])
end;
return stocksExpectedReturn(t[:, '涨幅(%)'], t[:, '比例(%)']);
// 输出：3.8980
```

## `stocksResidual(rd_ri, w)`

声明：function

返回组合残差标准差

<!-- tags: 金融 金融工程 CAPM 返回 获取 -->

| 参数    | 类型  | 说明         |
| ------- | ----- | ------------ |
| `rd_ri` | array | 一维数字数组 |
| `w`     | array | 一维数字数组 |

返回：real

### 示例

范例01：调用函数

```tsl
o_v := BackupSystemParameters2();
// 假设组合为申万采掘，先计算其下个股的区间残差标准差
stock_arr := getBk('申万采掘');
index_id := 'SH000001';
beg_t := intToDate(20110101);
end_t := intToDate(20110630);
t := array();
n := 0;
for i := 0 to length(stock_arr)-1 do
begin
    stockid := stock_arr[i];
    setSysParam(pn_stock(), stockid);
    if not isStockGoMarket(begt) then continue;
    tmp := stockBetaAlpha2(index_id, beg_t, end_t);
    t[n]['代码'] := stockid;
    t[n]['名称'] := stockName(stockid);
    t[n]['Residual'] := tmp['Residual'];
    n++;
end
// 按总股本加权，计算组合残差标准差
t2 := pf_percent(t[:, '代码'], end_t, 0);
t := select [1].['Residual'], [2].['比例(%)'] from t
left join t2 with([1].['代码'] on [2].['代码'])
end;
return stocksAlpha(t[:, 'Residual'], t[:, '比例(%)']);
// 输出：1.230
```
