# 量化策略 / 轮动 ## `TSRotationStrategy` 声明:class 轮动策略框架 ### `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 轮动模型模式有效,适用于各期非固定初始样本池 可见性:`public` | 参数 | 类型 | 说明 | | ------ | -------- | ---------------------------- | | `endt` | datetime | 计算或查询使用的日期时间边界 | ### `getRotateSampleArrByEndt(stock_arr, endt)` 声明:function 获取单期轮动目标样本池,仅模式 2 轮动模型模式需用户重写 可见性:`public` | 参数 | 类型 | 说明 | | ----------- | -------- | -------------------------------------------- | | `stock_arr` | array | 一维数组,当前设置的轮动样本空间 `fStockArr` | | `endt` | datetime | 计算或查询使用的日期时间边界 | ### `getBuySampleData(rotate_data, vendt)` 声明:function 获取当期择时买入池。仅当 FIfTiming=1 时有效(即考虑择时),如果择时买卖条件较为复杂 可见性:`public` | 参数 | 类型 | 说明 | | ------------- | -------- | -------------------------------------------------- | | `rotate_data` | array | 二维数组,当期最新轮动样本池;已排除当期已持有证券 | | `vendt` | datetime | 当期择时判断日期 | ### `getSellSampleData(hold_data, vendt)` 声明:function 获取当期择时卖出池。仅当 FIfTiming=1 时有效(即考虑择时)。重写后,卖出条件表达式 可见性:`public` | 参数 | 类型 | 说明 | | ----------- | -------- | -------------------------------------------------------------------- | | `hold_data` | array | 二维数组,当期最新持仓池;已排除不在本期轮动池及已触发止盈止损的证券 | | `vendt` | datetime | 当期择时判断日期 | ### `getRotateSampleData()` 声明:function 获取当期最新轮动样本池 可见性:`public` ### `getRotateSampleData(vbegt, vendt)` 声明:function 获取区间轮动样本池 可见性:`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 ```