# 回测 / 市场状态轮盘

## `ts_MarketStateAnalysis`

声明：class

基于市场状态的轮盘配置框架

<!-- tags: 分析 统计 状态识别 市场行情 市场状态 轮盘策略 资产配置 -->

### `FBegT`

声明：field

开始日 incyear(today(),-1)

可见性：`public`

类型：date

### `FEndT`

声明：field

截止日 today()

可见性：`public`

类型：date

### `FCycle`

声明：field

调仓周期 cy_month()

可见性：`public`

类型：string

### `FIndexID`

声明：field

基准指数 SH000300

可见性：`public`

类型：string

### `FStateData`

声明：field

状态数据 Array()

可见性：`public`

类型：array

### `FuStateName`

声明：field

未定义状态名称 "未定义"

可见性：`public`

类型：string

### `FAllocationMethod`

声明：field

配置方法 0

可见性：`public`

类型：int

### `FAllocationData`

声明：field

配置数据 Array()

可见性：`public`

类型：array

### `GetAssetWeight(v_beg_t, v_end_t, cy, typ)`

声明：function

获取指定区间与周期的资产权重序列

<!-- tags: 查询 组合权重 资产配置 -->

可见性：`public`

| 参数      | 类型     | 说明                                                                                               |
| --------- | -------- | -------------------------------------------------------------------------------------------------- |
| `v_beg_t` | datetime | DateTime，区间开始日                                                                               |
| `v_end_t` | datetime | DateTime，区间截止日                                                                               |
| `cy`      | string   | String，周期                                                                                       |
| `typ`     | integer  | Int，资产列名输出格式，具体如下表： 取值 含义 备注 1 代码 如：SH000300【默认】 2 名称 如：沪深 300 |

返回：array

### `GetAssetReturn(v_beg_t, v_end_t, typ)`

声明：function

此方法用于获取各资产区间收益率与累计收益率序列，此收益为资产加入组合后的收益，未

<!-- tags: 查询 回报率 投资收益 -->

可见性：`public`

| 参数      | 类型     | 说明                                                                                                                                                                                             |
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `v_beg_t` | datetime | DateTime，区间开始日                                                                                                                                                                             |
| `v_end_t` | datetime | DateTime，区间截止日                                                                                                                                                                             |
| `typ`     | integer  | Int，资产列名输出格式，具体如下表： 取值 含义 备注 1 代码 如：SH000300，SH000300->累计 【默认】 2 名称 如：沪深 300，沪深 300->累计 3 代码+名称 如：沪深 300(SH000300)，沪深 300(SH000300)->累计 |

返回：array

### `GetAssetAttriResult()`

声明：function

此方法用于获取资产归因数据，包含代码，名称，收益贡献(%)（累计、累计年化、贡献比例

<!-- tags: 查询 收益分解 贡献分析 影响度 -->

可见性：`public`

返回：array

### `GetAssetContriDetail(v_beg_t, v_end_t, typ)`

声明：function

此方法用于获取区间资产累计贡献数据

<!-- tags: 查询 影响度 收益分解 -->

可见性：`public`

| 参数      | 类型     | 说明                                                                                                                                  |
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `v_beg_t` | datetime | DateTime，区间开始日                                                                                                                  |
| `v_end_t` | datetime | DateTime，区间截止日                                                                                                                  |
| `typ`     | integer  | Int，资产列名输出格式，具体如下表： 取值 含义 备注 1 代码 如：SH000300【默认】 2 名称 如：沪深 300 3 代码+名称 如：沪深 300(SH000300) |

返回：array

### `GetPerformance(v_beg_t, v_end_t, qk_type, cy)`

声明：function

获取不同区间的收益与风险评价指标

<!-- tags: 查询 评估 绩效 业绩表现 风险管理 风控 -->

可见性：`public`

| 参数      | 类型     | 说明                                                                                                                                                  |
| --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `v_beg_t` | datetime | DateTime，区间开始日                                                                                                                                  |
| `v_end_t` | datetime | DateTime，区间截止日                                                                                                                                  |
| `qk_type` | integer  | Int，区间类型 取值 含义 备注 0 固定周期 如：年线、季线、月线，与参数 cy 相关 1 滚动周期 包括：本月/季/半年/年、最近 1/3/6 月、最近 1/3/5 年、成立以来 |
| `cy`      | string   | String，固定周期                                                                                                                                      |

返回：array

### `GetPortBenchReturn(v_beg_t, v_end_t)`

声明：function

返回区间组合与基准的收益、累计收益、最大回撤序列

<!-- tags: 查询 回报率 投资收益 亏损幅度 比较基准 业绩基准 -->

可见性：`public`

| 参数      | 类型     | 说明                 |
| --------- | -------- | -------------------- |
| `v_beg_t` | datetime | DateTime，区间开始日 |
| `v_end_t` | datetime | DateTime，区间截止日 |

返回：array

### `GetHoldData(v_beg_t, v_end_t, cy)`

声明：function

与父类回测框架相比，此接口新增 cy 参数，控制持仓明细返回的周期，支持返回最新、固定

<!-- tags: 查询 历史模拟 策略验证 仓位 -->

可见性：`public`

| 参数      | 类型     | 说明                                                          |
| --------- | -------- | ------------------------------------------------------------- |
| `v_beg_t` | datetime | DateTime，区间开始日                                          |
| `v_end_t` | datetime | DateTime，区间截止日                                          |
| `cy`      | string   | String，周期，若 cy 为 nil 或空字符串，表示获取最新的持仓明细 |

返回：array

### `GetStateByEndT(v_end_t)`

声明：function

此方法用于获取指定日状态数据，用户可重写，字段包含【截止日】、【状态】

<!-- tags: 查询 市场状态 状态识别 指定日 -->

可见性：`public`

| 参数      | 类型     | 说明             |
| --------- | -------- | ---------------- |
| `v_end_t` | datetime | DateTime，截止日 |

返回：array

### `GetAllocationByEndT(v_end_t)`

声明：function

此方法用于获取配置数据，用户可重写，默认为输入的成员变量 FAllocationData

<!-- tags: 查询 状态配置 资产配置 指定日 -->

可见性：`public`

| 参数      | 类型     | 说明             |
| --------- | -------- | ---------------- |
| `v_end_t` | datetime | DateTime，截止日 |

返回：array

### `GetStateDetail(beg_t, end_t, cycle)`

声明：function

此方法用于获取按周期划分的每个周期状态，字段包含【截止日】、【状态】

<!-- tags: 查询 拆分 分割 -->

可见性：`public`

| 参数    | 类型     | 说明                 |
| ------- | -------- | -------------------- |
| `beg_t` | datetime | DateTime，区间开始日 |
| `end_t` | datetime | DateTime，区间截止日 |
| `cycle` | string   | String，周期         |

返回：array

### `GetStateStatistics(beg_t, end_t, if_annual)`

声明：function

统计各市场状态的次数、占比及对应组合和基准的收益风险指标

<!-- tags: 查询 汇总 风险管理 风控 状态识别 比较基准 业绩基准 市场行情 -->

可见性：`public`

| 参数        | 类型     | 说明                                         |
| ----------- | -------- | -------------------------------------------- |
| `beg_t`     | datetime | DateTime，区间开始日                         |
| `end_t`     | datetime | DateTime，区间截止日                         |
| `if_annual` | boolean  | Bool，是否年化，默认为 0，表示输出指标不年化 |

返回：array

### `GetStateNAV(beg_t, end_t)`

声明：function

此方法用于获取各状态区间每日收益数据，包含净值收益率(%)、基准收益率(%)、超额收益

<!-- tags: 查询 回报率 投资收益 主动收益 单位净值 资产净值 比较基准 业绩基准 -->

可见性：`public`

| 参数    | 类型     | 说明                 |
| ------- | -------- | -------------------- |
| `beg_t` | datetime | DateTime，区间开始日 |
| `end_t` | datetime | DateTime，区间截止日 |

返回：array

### `GetTradeData(beg_t, end_t)`

声明：function

此方法用于获取回测交易明细数据

<!-- tags: 查询 历史模拟 策略验证 买卖 交易策略 -->

可见性：`public`

| 参数    | 类型     | 说明                 |
| ------- | -------- | -------------------- |
| `beg_t` | datetime | DateTime，区间开始日 |
| `end_t` | datetime | DateTime，区间截止日 |

返回：array

### `GetHoldData(beg_t, end_t)`

声明：function

此方法用于获取回测持仓明细

<!-- tags: 查询 历史模拟 策略验证 仓位 -->

可见性：`public`

| 参数    | 类型     | 说明                 |
| ------- | -------- | -------------------- |
| `beg_t` | datetime | DateTime，区间开始日 |
| `end_t` | datetime | DateTime，区间截止日 |

返回：array

### `GetPortfolioReturn(beg_t, end_t)`

声明：function

此方法用于获取区间组合累计收益率

<!-- tags: 查询 回报率 投资收益 投资组合 资产组合 -->

可见性：`public`

| 参数    | 类型     | 说明                 |
| ------- | -------- | -------------------- |
| `beg_t` | datetime | DateTime，区间开始日 |
| `end_t` | datetime | DateTime，区间截止日 |

返回：real

### `GetStateGroupNAV(beg_t, end_t, return_type)`

声明：function

获取不同状态下，组合与基准的收益情况

<!-- tags: 查询 分组 聚合 单位净值 资产净值 比较基准 业绩基准 -->

可见性：`public`

| 参数          | 类型     | 说明                                                                             |
| ------------- | -------- | -------------------------------------------------------------------------------- |
| `beg_t`       | datetime | DateTime，区间开始日                                                             |
| `end_t`       | datetime | DateTime，区间截止日                                                             |
| `return_type` | integer  | 返回收益类型 取值 含义 0 仅返回收益（默认） 1 仅返回累计收益 2 返回收益+累计收益 |

返回：array

### `GetStateGroupAttri(if_annual, return_type)`

声明：function

获取不同状态下，各个资产对组合绝对收益、风险的贡献情况

<!-- tags: 查询 分组 聚合 收益分解 贡献分析 影响度 风险管理 风控 -->

可见性：`public`

| 参数          | 类型    | 说明                                                                                                                                      |
| ------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `if_annual`   | boolean | Bool，是否年化，默认为 0，表示输出指标不年化                                                                                              |
| `return_type` | integer | 返回类型 取值 含义 0 按照"状态"横排展示，仅输出收益贡献(%)与风险贡献(%) 1 按照"状态"竖排展示，输出收益和风险贡献(%)相关的多个指标（默认） |

返回：array
