Files
playbook/skills/tsl-api-reference/references/codegen/module/ts-rotation-strategy.md
T
2026-08-14 17:15:41 +08:00

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
```