# 金融 / 金融工程 / 策略验证 / 指数基金中间函数

## `portfolioBackTesting_indexFund_dataCheck(pf_info_data, index_id)`

声明：function

返回策略验证-指数基金-数据检查, 对组合信息和所有交易明细信息的缺省数据检查，若缺省，则添加默认值

<!-- tags: 金融 金融工程 策略验证 指数基金中间函数 返回 获取 -->

| 参数           | 类型        | 说明                         |
| -------------- | ----------- | ---------------------------- |
| `pf_info_data` | table_array | 数据表类型，组合基本信息(in) |
| `index_id`     | string      | 字符串类型，指数代码         |

返回：table_array

### 示例

范例01：调用 PortfolioBackTesting_IndexFund_DataCheck

```tsl
PfInfoData := array();
return PortfolioBackTesting_IndexFund_DataCheck(PFInfoData, 'SH000300');
```

## `portfolioBackTesting_indexFund_getIndexSamples(pf_info_data, index_id, end_t, r)`

声明：function

返回策略验证-指数基金-得到t-1日指数成分，根据PfInfoData中的字段'指数成分数据来源'来获取指数成分，获取成功，返回1，否则0

<!-- tags: 金融 金融工程 策略验证 指数基金中间函数 返回 获取 -->

| 参数           | 类型        | 说明                                                                                                                                                                                                                         |
| -------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pf_info_data` | table_array | 数据表类型，组合基本信息(in),必须含有’指数成分数据来源’字段，其中:；0表示使用天软提供的指数成分和权重:即使用流通市值计算权重；1表示使用用户自定义的指数成分和权重(文件格式)；2表示使用用户自定义的指数成分和权重(数据库格式) |
| `index_id`     | string      | 字符串类型，指数代码                                                                                                                                                                                                         |
| `end_t`        | datetime    | 日期型时间                                                                                                                                                                                                                   |
| `r`            | table_array | 数据表类型，返回参数，指数成分数据(out)                                                                                                                                                                                      |

返回：bool

### 示例

范例01：调用 PortfolioBackTesting_IndexFund_GetIndexSamples

```tsl
PfInfoData := array(
    ("初始资金":2000000000.00, "指数成分数据来源":0.00, "初始建仓策略":0.00, "首日建仓比例(%)":20.00, "每日建仓比例变化(%)":0.00, "目标建仓比例(%)":0.00, "涨停不交易":1.00, "跌停不交易":1.00, "停牌不交易":1.00, "成交价类别":1.00, "成交量取整模式":1.00, "分红再投资":0.00, "最大成交金额占可交易金额比例(%)":5.00, "最小调仓比例(%)":0.01, "开仓费率(%)":0.1, "平仓费率(%)":0.1, "指数成分源数据目录":"C:\\Test\\指数成分-输入\\", "指数成分输出目录":"C:\\Test\\指数成分-输出\\", "指数每日交易输出目录":"C:\\Test\\指数交易-输出\\")); PortfolioBackTesting_IndexFund_GetIndexSamples(PfInfoData, 'SH000300', 39086, r);
return r;
```

## `portfolioBackTesting_indexFund_getIndexSamplesByMarketValue(index_id, prev_end_t, end_t)`

声明：function

返回策略验证-指数基金-得到指数IndexId成份股的t-1日流通市值和比例

<!-- tags: 金融 金融工程 策略验证 指数基金中间函数 返回 获取 -->

| 参数         | 类型     | 说明                 |
| ------------ | -------- | -------------------- |
| `index_id`   | string   | 字符串类型，指数代码 |
| `prev_end_t` | datetime | 日期型时间，t-1日    |
| `end_t`      | datetime | 日期型时间，t日      |

返回：table_array

### 示例

范例01：调用 PortfolioBackTesting_IndexFund_GetIndexSamplesByMarketValue

```tsl
return PortfolioBackTesting_IndexFund_GetIndexSamplesByMarketValue(
    'SH000300',
    inttodate(20121029),
    inttodate(20121030));
```

## `portfolioBackTesting_indexFund_getIndexSamplesPercent(pf_info_data, index_id, beg_t, end_t, tp_is)`

声明：function

返回策略验证-指数基金-得到组合配置比例

<!-- tags: 金融 金融工程 策略验证 指数基金中间函数 返回 获取 -->

| 参数           | 类型        | 说明                                                                                                                                                                                                                     |
| -------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `pf_info_data` | table_array | 数据表类型，组合基本信息(in),必须含有’初始建仓策略’,‘首日建仓比例(%)’’每日建仓比例变化(%)’’目标建仓比例(%)’,字段，其中’初始建仓策略’字段取值有下面两种情况:；0表示等比例建仓策略；1表示每日递增建仓策略&每日递减建仓策略 |
| `index_id`     | string      | 字符串类型，指数代码                                                                                                                                                                                                     |
| `beg_t`        | datetime    | 日期型时间，减仓起始日                                                                                                                                                                                                   |
| `end_t`        | datetime    | 日期型时间                                                                                                                                                                                                               |
| `tp_is`        | table_array | 数据表类型，配置比例表                                                                                                                                                                                                   |

返回：table_array

### 示例

范例01：调用 PortfolioBackTesting_IndexFund_GetIndexSamplesPercent

```tsl
PfInfoData := array(
    ("初始资金":2000000000.00, "指数成分数据来源":0.00, "初始建仓策略":0.00, "首日建仓比例(%)":20.00, "每日建仓比例变化(%)":0.00, "目标建仓比例(%)":95.00));
tpIS := array(array('比例(%)':30));
PortfolioBackTesting_IndexFund_GetIndexSamplesPercent(PfInfoData, 'SH000300', INTTODATE(20121029), INTTODATE(20121031), TPIS);
return tpIS;
```

## `portfolioBackTesting_indexFund_getTradingData(pf_info_data, index_id, prev_end_t, end_t, tp_zcpz, t_src, t_dest, t_ts)`

声明：function

根据上期资产配置、调仓前后数据和辅助计算表生成指定日的指数基金调仓记录

<!-- tags: 金融 金融工程 策略验证 指数基金 调仓 调仓记录 交易明细 资产配置 指数成分 -->

| 参数           | 类型        | 说明                                                         |
| -------------- | ----------- | ------------------------------------------------------------ |
| `pf_info_data` | table_array | 组合基本信息，需包含指数成分数据来源和交易明细输出目录等字段 |
| `index_id`     | string      | 指数代码                                                     |
| `prev_end_t`   | t_date_time | 调仓前日期                                                   |
| `end_t`        | t_date_time | 调仓日期                                                     |
| `tp_zcpz`      | table_array | 调仓前资产配置                                               |
| `t_src`        | table_array | 调仓前源数据                                                 |
| `t_dest`       | table_array | 调仓后的目标数据                                             |
| `t_ts`         | table_array | 调仓计算使用的辅助数据                                       |

调用过程中会通过 `RDo2 ExportFile` 将交易明细写入 `pf_info_data` 指定的交易明细输出目录，调用端需允许该文件导出

返回：table_array

### 示例

范例01：生成空输入对应的调仓记录

```tsl
pf_info_data := array((
    "初始资金":2000000000.0,
    "指数成分数据来源":0,
    "交易明细输出目录":"C:\\Test\\000300\\交易明细-输出\\"));
prev_end_t := intToDate(20070103);
end_t := intToDate(20070104);
tp_zcpz := array();
t_src := array();
t_dest := array();
t_ts := array();
return portfolioBackTesting_indexFund_getTradingData(
    pf_info_data,
    "SH000300",
    prev_end_t,
    end_t,
    tp_zcpz,
    t_src,
    t_dest,
    t_ts);
```
