5.6 KiB
量化策略 / 轮动
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:调用示例
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:调用示例
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