# 金融 / 金融工程 / CAPM ## `bkRiskAndReturn_pgm(bk_name, index_id, beg_t, end_t, show_type)` 声明:function 返回组合的贝塔值与风险(组合采取等资金加权) | 参数 | 类型 | 说明 | | ----------- | -------- | -------- | | `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 返回不同组合的贝塔值与风险比较(组合采取等资金加权) | 参数 | 类型 | 说明 | | ---------- | -------- | -------- | | `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 | 参数 | 类型 | 说明 | | ----------- | ----- | ------------ | | `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 | 参数 | 类型 | 说明 | | ---------- | ----- | ------------ | | `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 获取一组股票的α系数,β系数,平均收益率,收益率标准差,残差标准差 | 参数 | 类型 | 说明 | | ----------- | ---------- | -------------- | | `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] | 参数 | 类型 | 说明 | | -------- | ----- | ------------ | | `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 返回组合残差标准差 | 参数 | 类型 | 说明 | | ------- | ----- | ------------ | | `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 ```