272 lines
5.6 KiB
Markdown
272 lines
5.6 KiB
Markdown
# 量化策略 / 轮动
|
|
|
|
## `TSRotationStrategy`
|
|
|
|
声明:class
|
|
|
|
轮动策略框架
|
|
|
|
<!-- tags: 资产轮动 择时 轮动策略 -->
|
|
|
|
### `fRotateSampleData`
|
|
|
|
声明:field
|
|
|
|
区间轮动样本数据 空
|
|
|
|
可见性:`public`
|
|
|
|
类型:array
|
|
|
|
### `fBegT`
|
|
|
|
声明:field
|
|
|
|
轮动开始日期 前推 1 年
|
|
|
|
可见性:`public`
|
|
|
|
类型:date_time
|
|
|
|
### `fEndT`
|
|
|
|
声明:field
|
|
|
|
轮动截止日期 当前
|
|
|
|
可见性:`public`
|
|
|
|
类型:date_time
|
|
|
|
### `fRotateSampleDataExp`
|
|
|
|
声明:field
|
|
|
|
单期轮动样本数据模型 ""
|
|
|
|
可见性:`public`
|
|
|
|
类型:string
|
|
|
|
### `fRotateCycle`
|
|
|
|
声明:field
|
|
|
|
轮动周期 月线
|
|
|
|
可见性:`public`
|
|
|
|
类型:string
|
|
|
|
### `fConStr`
|
|
|
|
声明:field
|
|
|
|
剔除条件 ""
|
|
|
|
可见性:`public`
|
|
|
|
类型:string
|
|
|
|
### `fStockArr`
|
|
|
|
声明:field
|
|
|
|
轮动样本空间,用于各期固定初始样本 空
|
|
|
|
可见性:`public`
|
|
|
|
类型:array
|
|
|
|
### `fRotateDateType`
|
|
|
|
声明:field
|
|
|
|
轮动选样交易日期类型 0
|
|
|
|
可见性:`public`
|
|
|
|
类型:integer
|
|
|
|
### `fMaxHoldNum`
|
|
|
|
声明:field
|
|
|
|
最大持仓个数 30
|
|
|
|
可见性:`public`
|
|
|
|
类型:integer
|
|
|
|
### `fIfTiming`
|
|
|
|
声明:field
|
|
|
|
是否考虑择时 0
|
|
|
|
可见性:`public`
|
|
|
|
类型:bool
|
|
|
|
### `fIfTiming2`
|
|
|
|
声明:field
|
|
|
|
轮动选样后首期是否考虑择时 0
|
|
|
|
可见性:`public`
|
|
|
|
类型:bool
|
|
|
|
### `fBuyCond`
|
|
|
|
声明:field
|
|
|
|
买入条件 ""
|
|
|
|
可见性:`public`
|
|
|
|
类型:string
|
|
|
|
### `fSellCond`
|
|
|
|
声明:field
|
|
|
|
卖出条件 "" 同上
|
|
|
|
可见性:`public`
|
|
|
|
类型:string
|
|
|
|
### `getInitSampleArrByEndt(endt)`
|
|
|
|
声明:function
|
|
|
|
获取单期轮动初始样本池,仅当模式 2 轮动模型模式有效,适用于各期非固定初始样本池
|
|
|
|
<!-- tags: 查询 初始化 证券池 -->
|
|
|
|
可见性:`public`
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ------ | -------- | ---------------------------- |
|
|
| `endt` | datetime | 计算或查询使用的日期时间边界 |
|
|
|
|
### `getRotateSampleArrByEndt(stock_arr, endt)`
|
|
|
|
声明:function
|
|
|
|
获取单期轮动目标样本池,仅模式 2 轮动模型模式需用户重写
|
|
|
|
<!-- tags: 查询 轮动目标池 单期样本 轮动策略 -->
|
|
|
|
可见性:`public`
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ----------- | -------- | -------------------------------------------- |
|
|
| `stock_arr` | array | 一维数组,当前设置的轮动样本空间 `fStockArr` |
|
|
| `endt` | datetime | 计算或查询使用的日期时间边界 |
|
|
|
|
### `getBuySampleData(rotate_data, vendt)`
|
|
|
|
声明:function
|
|
|
|
获取当期择时买入池。仅当 FIfTiming=1 时有效(即考虑择时),如果择时买卖条件较为复杂
|
|
|
|
<!-- tags: 查询 择时买入池 轮动策略 买入信号 -->
|
|
|
|
可见性:`public`
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ------------- | -------- | -------------------------------------------------- |
|
|
| `rotate_data` | array | 二维数组,当期最新轮动样本池;已排除当期已持有证券 |
|
|
| `vendt` | datetime | 当期择时判断日期 |
|
|
|
|
### `getSellSampleData(hold_data, vendt)`
|
|
|
|
声明:function
|
|
|
|
获取当期择时卖出池。仅当 FIfTiming=1 时有效(即考虑择时)。重写后,卖出条件表达式
|
|
|
|
<!-- tags: 查询 择时卖出池 轮动策略 卖出信号 -->
|
|
|
|
可见性:`public`
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ----------- | -------- | -------------------------------------------------------------------- |
|
|
| `hold_data` | array | 二维数组,当期最新持仓池;已排除不在本期轮动池及已触发止盈止损的证券 |
|
|
| `vendt` | datetime | 当期择时判断日期 |
|
|
|
|
### `getRotateSampleData()`
|
|
|
|
声明:function
|
|
|
|
获取当期最新轮动样本池
|
|
|
|
<!-- tags: 查询 轮动样本池 资产轮动 目标持仓 -->
|
|
|
|
可见性:`public`
|
|
|
|
### `getRotateSampleData(vbegt, vendt)`
|
|
|
|
声明:function
|
|
|
|
获取区间轮动样本池
|
|
|
|
<!-- tags: 查询 轮动样本池 资产轮动 目标持仓 -->
|
|
|
|
可见性:`public`
|
|
|
|
| 参数 | 类型 | 说明 |
|
|
| ------- | -------- | -------------------- |
|
|
| `vbegt` | datetime | 轮动样本区间开始日期 |
|
|
| `vendt` | datetime | 轮动样本区间结束日期 |
|
|
|
|
#### 示例
|
|
|
|
范例01:调用示例
|
|
|
|
```tsl
|
|
BegT := minvalue(RotateSampleData[:,"截止日"]);
|
|
EndT := maxvalue(RotateSampleData[:,"截止日"]);
|
|
obj := new TSRotationStrategy();
|
|
|
|
//轮动设置
|
|
obj.FRotateSampleData := RotateSampleData;
|
|
obj.FMaxHoldNum := 4;
|
|
obj.FRotateDateType := 0;
|
|
|
|
//择时设置
|
|
obj.FIfTiming := 1;
|
|
obj.FIfTiming2 := 1;
|
|
obj.FBuyCond := "cross(close(),MA(close(),5))=1";//当日金叉则买入
|
|
obj.FSellCond := "cross(close(),MA(close(),5))=-1"; //当日死叉则卖出
|
|
//回测
|
|
obj.BackTest();
|
|
//获取返回结果(返回结果可根据需要选择)
|
|
// // 返回样式同范例1
|
|
```
|
|
|
|
范例02:调用示例
|
|
|
|
```tsl
|
|
BegT := minvalue(RotateSampleData[:,"截止日"]);
|
|
EndT := maxvalue(RotateSampleData[:,"截止日"]);
|
|
obj := new TSRotationStrategy();
|
|
|
|
//轮动设置
|
|
obj.FRotateSampleData := RotateSampleData;
|
|
obj.FMaxHoldNum := 4;
|
|
obj.FRotateDateType := 1;//T+1 日
|
|
obj.FParamCfg := array(
|
|
"调仓成交价类别":2,//调仓成交价类型 0:日均价,1:收盘价,2:
|
|
开盘价
|
|
"开仓费率(%)":0.03,
|
|
"平仓费率(%)":0.2,
|
|
);
|
|
//回测
|
|
obj.BackTest();
|
|
//获取返回结果(返回结果可根据需要选择)
|
|
// // 返回样式同范例1
|
|
```
|