策略回测框架 TSBackTesting
文档类型:模块 API 事实页
是否可直接用于生成代码:是,但策略逻辑、交易数据来源、资金参数、费用参数和实际证券池必须来自用户需求或项目上下文
遇到不确定时:index.md、pytsl_api.md、../reference/catalog/datawarehouse.md、项目实际接口定义
本页整理 TSBackTesting 回测框架的对象模型、成员变量、必须重写的方法、交易数据字段和查询接口。它负责告诉智能体“回测框架怎么组织代码、哪些属性控制行为、哪些方法可调用”,不负责替用户创造策略、证券池、费用口径或交易信号。
智能体 TSBackTesting 决策规则
- 用户要“写回测 / 策略回测 / 回测框架 / 组合回测 / 绩效评价 / 持仓和交易结果”时,优先使用本页。
- 用户给的是目标持仓、目标比例、调仓、选股、多因子、行业中性,默认
FGroupType := 1。
- 用户给的是成交明细、成交量、成交价、动作、高频交易、真实交易回放,默认
FGroupType := 2。
- 用户做期权或期权组合策略回测时,只使用数量类组合,即
FGroupType := 2。
- 写代码时默认新建
TSBackTesting 子类并重写 GetTradeOrder(vEndT);只有自定义调仓周期时才重写 GetTimeSeries()。
- 初始化对象时默认使用
new MyBackTesting();CreateObject("MyBackTesting") 只作为兼容创建方式。
- 调用顺序固定为:声明子类 -> 设置成员变量 ->
BackTest() -> 查询结果。
- 不要把
BackTest() 当成会自动生成策略信号;策略信号必须由 GetTradeOrder(vEndT) 返回。
- 不要发明股票池、费用、基准、初始资金、调仓周期、成交价来源或结果指标;这些值必须来自用户需求或项目上下文。
最小代码骨架
下面骨架用于生成最小可运行结构;策略信号、资金参数和查询指标按用户需求替换。
type MyBackTesting = class(TSBackTesting)
public
function GetTradeOrder(vEndT); override;
end;
function MyBackTesting.GetTradeOrder(vEndT); override;
begin
return -1;
end;
function RunBackTest(begT, endT);
begin
obj := new MyBackTesting();
obj.FBegT := begT;
obj.FEndT := endT;
obj.FCycle := cy_day();
obj.FGroupType := 1;
obj.FIniCash := 10000000;
obj.FIndexId := "SH000300";
obj.BackTest();
return array(
"资产配置": obj.GetAssetData(begT, endT),
"持仓": obj.GetHoldData(begT, endT),
"区间收益": obj.GetPortfolioReturn(begT, endT)
);
end;
返回规则:
GetTradeOrder(vEndT) 返回二维数组:表示当前时点的目标持仓或交易明细。
GetTradeOrder(vEndT) 返回空数组:比例类组合表示完全清仓。
GetTradeOrder(vEndT) 返回 -1:表示当前时点不调仓或不交易。
回测开发流程
| 步骤 |
动作 |
决策点 |
| 1 |
继承 TSBackTesting |
必须声明子类 |
| 2 |
重写 GetTradeOrder(vEndT) |
必须返回比例类目标持仓或数量类交易明细 |
| 3 |
设置 FBegT、FEndT、FCycle、FGroupType、FIniCash 等成员变量 |
按策略类型设置 |
| 4 |
调用 BackTest() |
触发时间序列循环、交易数据获取和清算 |
| 5 |
调用查询接口 |
读取资产、持仓、交易、收益、风险指标 |
组合类别
FGroupType |
组合类别 |
用户提供 |
典型场景 |
1 |
比例类组合 |
目标持仓、方向、目标比例;成交量由框架计算 |
单因子、多因子、行业选股、配置类策略 |
2 |
数量类组合 |
成交明细、成交价、成交量、动作 |
技术指标、高频交易、真实交易回放、期权组合 |
交易数据字段
比例类组合字段
FGroupType := 1 时,GetTradeOrder(vEndT) 返回目标持仓和目标比例。
| 字段 |
必填 |
接收类型 |
说明 |
截止日 |
是 |
DateTime |
通常等于 vEndT |
代码 |
是 |
字符串 |
目标持仓证券代码 |
方向 |
是 |
整数 |
1 多单;0 空单;缺省时按多单处理 |
比例(%) |
是 |
数值 |
目标持仓比例;FRateType <> -1 时可由框架按配比方式计算 |
成交价 |
否 |
数值 |
比例类通常由 FPriceType 或 FPriceRateTo0 决定 |
乘数 |
否 |
数值 |
默认 1 |
保证金比例(%) |
否 |
数值 |
默认 100 |
开仓费率(%) |
是 |
数值 |
开仓费率;股票、基金常见默认 0.1 |
平仓费率(%) |
是 |
数值 |
平仓费率;期货常见默认 0.01 |
比例类方向值:
| 方向 |
含义 |
常见对应 |
1 |
多单 |
股票多头、融资买入、融资偿还、期货买开、期货卖平 |
0 |
空单 |
融券卖出、融券偿还、期货卖开、期货买平 |
比例类规则:
- 动作不由用户给定,框架根据目标持仓和当前持仓差值生成交易。
FRateType := -1 时,返回数据必须包含 比例(%)。
- 一期比例合计不得超过
100。
- 只想配置
80% 仓位时,直接让比例合计为 80;不要额外添加现金代码。
- 完全清仓可返回空数组。
数量类组合字段
FGroupType := 2 时,GetTradeOrder(vEndT) 返回交易明细。
| 字段 |
必填 |
接收类型 |
说明 |
截止日 |
是 |
DateTime |
通常等于 vEndT |
代码 |
是 |
字符串 |
交易证券代码 |
方向 |
是 |
整数 |
1 多单;0 空单;缺省时按多单处理 |
动作 |
是 |
整数 |
0 开仓;1 平仓;缺省时按开仓处理 |
成交量 |
条件必填 |
数值 |
FOpenVolType := 1 或 FCloseVolType := 1 时提供 |
资金 |
条件必填 |
数值 |
FOpenVolType := 2 时提供 |
剩余资金占比(%) |
条件必填 |
数值 |
FOpenVolType := 3 时提供 |
平仓数量占比(%) |
条件必填 |
数值 |
FCloseVolType := 2 时提供 |
成交价 |
是 |
数值 |
交易成交价 |
乘数 |
否 |
数值 |
默认 1 |
保证金比例(%) |
否 |
数值 |
默认 100 |
费率(%) |
条件必填 |
数值 |
FFeeType := 1 时提供 |
费用 |
条件必填 |
数值 |
FFeeType := 2 时提供;只适合数量类 |
数量类方向和动作:
| 交易含义 |
方向 |
动作 |
| 买开 / 开多单 |
1 |
0 |
| 卖平 / 平多单 |
1 |
1 |
| 卖开 / 开空单 |
0 |
0 |
| 买平 / 平空单 |
0 |
1 |
股票常见方向和动作:
| 交易含义 |
方向 |
动作 |
| 买入、融资买入 |
1 |
0 |
| 卖出、融资偿还 |
1 |
1 |
| 融券卖出 |
0 |
0 |
| 融券偿还 |
0 |
1 |
期权组合策略字段
期权组合策略使用数量类组合。
| 字段 |
必填 |
接收类型 |
说明 |
组 ID |
是 |
字符串 |
同一组合内成分合约使用同一个组 ID |
截止日 |
是 |
DateTime |
交易时点 |
代码 |
是 |
字符串 |
期权或期货合约代码 |
方向 |
是 |
整数 |
1 权利仓或多单;0 义务仓或空单 |
动作 |
是 |
整数 |
0 开仓;1 平仓;32 构建期权组合;33 解锁期权组合 |
成交价 |
是 |
数值 |
构建、解锁交易中可为任意大于 0 的实数 |
成交量 |
是 |
数值 |
合约数量 |
费率(%) 或 费用 |
条件必填 |
数值 |
由 FFeeType 决定 |
乘数 |
否 |
数值 |
按品种设置 |
保证金比例(%) |
否 |
数值 |
按品种设置 |
组合类型 |
条件必填 |
字符串 |
组合策略标识,如 CNSJC、STD 等 |
期权组合动作:
| 动作 |
含义 |
0 |
开仓 |
1 |
平仓 |
32 |
申请构建期权组合策略 |
33 |
期权组合策略解锁 |
成员变量
基本设置
| 成员变量 |
类型 |
默认值 |
说明 |
FBegT |
DateTime |
当前系统时间往前推 1 年 |
回测开始时间 |
FEndT |
DateTime |
当前系统时间 |
回测截止时间 |
FCycle |
字符串或周期值 |
月线 |
调仓或交易周期 |
FGroupType |
整数 |
1 |
1 比例类;2 数量类 |
FIndexId |
字符串 |
SH000300 |
基准代码 |
FIniCash |
实数 |
10000000 |
初始资金,单位元 |
成交和费用
| 成员变量 |
类型 |
默认值 |
取值 |
FPriceType |
整数 |
3 |
-1 自定义;1 时点价格;2 收盘价;3 日均价;4 开盘价;5 系统昨收 |
FPriceType1 |
整数 |
3 |
多头开仓价 |
FPriceType2 |
整数 |
3 |
多头平仓价 |
FPriceType3 |
整数 |
3 |
空头开仓价 |
FPriceType4 |
整数 |
3 |
空头平仓价 |
FVolModType |
整数 |
-1 |
0 不取整;-1 按证券类型自适应取整 |
FFeeType |
整数 |
1 |
1 费率法;2 费用法 |
FLowestFeeType |
整数 |
0 |
0 不考虑最低费用;1 启用最低费用限制 |
FLowestFee |
实数 |
5.0 |
最低费用 |
FOLowestFee |
实数 |
5.0 |
开仓最低费用 |
FCLowestFee |
实数 |
5.0 |
平仓最低费用 |
取整规则:
FVolModType |
股票买入 |
股票卖出 |
期货 |
基金 |
债券 |
-1 |
100 的整数倍 |
1 的整数倍 |
1 的整数倍 |
小数点后三位 |
10 的整数倍 |
0 |
不取整 |
不取整 |
不取整 |
不取整 |
不取整 |
比例类专用
| 成员变量 |
类型 |
默认值 |
说明 |
FRateType |
整数 |
4 |
比例类组合配比方式 |
FSumOfRate |
数值 |
100 |
比例类配比之和;可用于非满仓 |
FFeeType2 |
整数 |
1 |
比例类费率来源 |
FPriceRateTo0 |
整数 |
3 |
自定义成交价且目标持仓没有旧持仓证券时的清仓价类别 |
FIndustryMethod |
整数 |
0 |
0 不行业中性;1 行业中性 |
FIndustryType |
整数 |
1 |
行业分类 |
FAdjustPositionPrice |
整数 |
等于 FPriceType |
比例类调仓价 |
FAdjustPriceType |
整数 |
0 |
0 调仓价等于成交价;1 用户自设调仓价 |
FRateType 取值:
| 值 |
含义 |
规则 |
-1 |
用户自定义 |
GetTradeOrder 必须返回 比例(%) |
0 |
总市值加权 |
按总市值分配 |
1 |
流通市值加权 |
按流通市值分配 |
4 |
等权重 |
每只证券等比例 |
5 |
等股数 |
按等股数分配 |
6 |
流通市值平方根加权 |
按流通市值平方根分配 |
7 |
总市值平方根加权 |
按总市值平方根分配 |
FPriceRateTo0 取值:
| 值 |
含义 |
1 |
时点价格 |
2 |
收盘价 |
3 |
日均价 |
4 |
开盘价 |
5 |
系统昨收 |
-1 |
用户重写 GetClearancePrice |
数量类专用
| 成员变量 |
类型 |
默认值 |
说明 |
FOpenVolType |
整数 |
1 |
开仓数量类别 |
FCloseVolType |
整数 |
1 |
平仓数量类别 |
FOpenVolType 取值:
| 值 |
含义 |
GetTradeOrder 字段 |
1 |
固定成交量法 |
成交量 |
2 |
固定金额法 |
资金 |
3 |
剩余资金占比法 |
剩余资金占比(%) |
FCloseVolType 取值:
| 值 |
含义 |
GetTradeOrder 字段 |
1 |
固定成交量法 |
成交量 |
2 |
可平仓数量占比法 |
平仓数量占比(%) |
分红、配股和止盈止损
| 成员变量 |
类型 |
默认值 |
说明 |
FDividendType |
整数 |
0 |
0 分红不再投资;1 分红再投资;-1 用户重载 |
FDividendType2 |
整数 |
1 |
货币基金是否分红再投资 |
FAllotmentType |
整数 |
0 |
0 不自动参与配股;1 自动参与配股;-1 用户重载 |
FGLType |
整数 |
-1 |
-1 不止盈止损;0 低频止盈止损;1 日内止盈止损 |
FMaxGainRatio |
整数 |
10^8 |
止盈率,FGLType 为 0 或 1 时有效 |
FMaxLossRatio |
整数 |
-100 |
止损率,FGLType 为 0 或 1 时有效 |
FMaxGainCondition |
字符串 |
"CBJ" |
止盈基准价表达式 |
FMaxLossCondition |
字符串 |
"CBJ" |
止损基准价表达式 |
FGainName |
字符串 |
"止盈" |
止盈交易备注 |
FLossName |
字符串 |
"止损" |
止损交易备注 |
止盈止损规则:
FGLType := 0:低频止盈止损,按交易日判断。
FGLType := 1:日内止盈止损,按当前时点价格判断。
- 期权及期权组合策略不参与止盈止损。
交易约束
| 成员变量 |
类型 |
默认值 |
说明 |
FTradeOption |
整数 |
0 |
0 非交易日可交易;1 非交易日不可交易 |
FNoZT |
整数 |
0 |
0 涨停可买入;1 涨停不可买入 |
FNoDT |
整数 |
0 |
0 跌停可卖出;1 跌停不可卖出 |
FNoOverSold |
整数 |
0 |
0 允许超卖;1 不允许超卖 |
FPartialjy |
整数 |
0 |
0 超卖时可部分成交;1 超卖时不可卖出 |
FMinVol |
实数 |
-1 |
最小成交量 |
FMinAmount |
实数 |
-1 |
最小成交金额 |
FMaxVolPercent |
实数 |
-1 |
最大成交量占比 |
FMaxAmountPercent |
实数 |
-1 |
最大成交金额占比 |
FMinBuyVol |
实数 |
-1 |
最小买入数量 |
FMinSellVol |
实数 |
-1 |
最小卖出数量 |
FMinBuyCash |
实数 |
-1 |
最小买入金额 |
FMinSellCash |
实数 |
-1 |
最小卖出金额 |
FMinBuyRatio |
实数 |
-1 |
最小买入占比 |
FMinSellRatio |
实数 |
-1 |
最小卖出占比 |
被交易约束剔除的交易,通过 GetDelTradeData(vBegT, vEndT) 查询。
期权、衍生品和主力合约
| 成员变量 |
类型 |
默认值 |
说明 |
FOptionRs |
整数 |
0 |
0 盘后不自动构成备兑组合;1 盘后自动构成备兑组合 |
FAMType |
整数 |
0 |
0 盘中不追加资金;1 盘中追加资金 |
FAMType2 |
整数 |
0 |
0 盘后不追加资金;1 盘后追加资金 |
FWithdrawableRatio |
数值 |
100 |
衍生品可提资金比例 |
FTradeOfDelist |
整数 |
1 |
0 到期不自动平仓;1 到期自动平仓 |
FMainFutureMap |
整数 |
0 |
0 主力连续合约不映射;1 映射到实际合约交易 |
输出和基准
| 成员变量 |
类型 |
默认值 |
说明 |
FHisFlag |
整数 |
1 |
0 不输出历史持仓;1 输出历史持仓 |
FVersionID |
整数 |
1 |
1 不输出本地;2 每日一个文件;3 所有数据一个文件 |
FDestDir |
字符串 |
"C:\\Test\\MyPortfolio\\" |
本地输出目录 |
FDateToStr |
整数 |
0 |
0 日期型;1 查询结果日期转字符串 |
FHFDataOutPut |
整数 |
0 |
0 不输出高频每周期清算数据;1 输出 |
FisCashToAdjust |
整数 |
0 |
0 不调整;1 现金小于 0 时调整买入量 |
FOrdertype |
整数 |
3 |
买入量调整顺序 |
FBMType |
整数 |
0 |
0 单一基准;1 复合基准 |
FBMDetail |
数组 |
array() |
复合基准成分,字段为 代码、比例(%) |
FBMOption |
整数 |
0 |
0 累乘;1 累加 |
FOrdertype 取值:
| 值 |
资金分配顺序 |
0 |
资金先分配给符合交易约束的买入交易 |
1 |
按交易约束后的交易顺序分配 |
2 |
比例类按目标比例从小到大;数量类按成交金额从小到大 |
3 |
比例类按目标比例从大到小;数量类按成交金额从大到小 |
复合基准示例:
obj.FBMType := 1;
obj.FBMDetail := array(
("代码": "SH000001", "比例(%)": 40),
("代码": "SH000300", "比例(%)": 60)
);
obj.FBMOption := 0;
成员方法
BackTest()
用途:回测主函数。
参数个数:0
返回值:数组;结果读取通常通过查询接口完成。
执行行为:
- 调用
GetTimeSeries() 获取回测时间序列。
- 对每个时间点调用
GetTradeOrder(vEndT)。
- 根据交易数据、当前持仓、资产、费用和约束清算。
- 生成最新持仓、资产配置和绩效数据。
GetTimeSeries()
用途:获取调仓或交易时间序列。
参数个数:0
返回值:一维时间序列数组。
重写规则:
- 基类默认按
FBegT、FEndT、FCycle 生成市场交易日序列。
- 自定义调仓日、事件驱动调仓、非固定周期交易时重写。
- 比例类组合返回需要发生调仓的时点。
- 数量类组合返回需要发生交易的时点。
GetTradeOrder(vEndT)
用途:获取当前时点目标持仓或交易明细。
参数个数:1
返回值:二维数组、空数组或 -1。
| 参数位置 |
参数名 |
必填 |
接收类型 |
说明 |
| 1 |
vEndT |
是 |
DateTime |
当前调仓或交易时点,由 BackTest() 从 GetTimeSeries() 结果传入 |
重写规则:
- 必须在子类中重写。
- 不要在
GetTradeOrder(vEndT) 中修改 vEndT。
- 如果要使用历史区间,从
vEndT 推导,例如 stockzf(incMonth(vEndT, -1), vEndT)。
可重写方法
| 方法 |
参数个数 |
返回值 |
用途 |
GetTA(vEndT) |
1 |
二维数组 |
获取申购赎回、资金转入转出数据 |
StockFee(stockId, vEndT, actionId, position) |
4 |
实数 |
获取证券交易费率 |
GetPercent(t, vEndT) |
2 |
二维数组 |
比例类组合中计算目标持仓比例 |
ReturnBenchmark(vBegT, vEndT, t) |
3 |
二维数组 |
获取区间基准收益率序列;复合基准或高频基准可重写 |
GetOtherData(vEndT) |
1 |
二维数组 |
自定义分红、送股、配股数据 |
GetClearancePrice(t, vEndT, ptype) |
3 |
实数 |
比例类自定义清仓价 |
GetIntVol(stype, actionId, modType, vJYSL) |
4 |
实数 |
自定义成交量取整 |
当前状态读取方法
| 方法 |
参数个数 |
返回值 |
用途 |
GetSurplusFund() |
0 |
实数 |
最新剩余资金 |
GetNetAssetValue() |
0 |
实数 |
最新资产净值 |
GetAssetData() |
0 |
二维数组 |
最新资产配置 |
GetAssetJZValue() |
0 |
实数 |
最新单位净值 |
GetHoldData() |
0 |
二维数组 |
最新持仓 |
GetSellpool() |
0 |
二维数组 |
当前可卖品种和数量 |
CalcashByTradeData(tjy) |
1 |
一维数组 |
根据指定日交易数据计算交易资金变动和交易后剩余资金 |
GetTA(vEndT) 返回字段:
| 字段 |
必填 |
接收类型 |
说明 |
截止日 |
是 |
DateTime |
资金发生日期 |
业务类型 |
是 |
整数 |
2 出金;3 入金 |
成交金额 |
是 |
数值 |
出入金额 |
备注 |
是 |
字符串 |
出金或入金说明 |
GetOtherData(vEndT) 返回字段:
| 字段 |
必填 |
接收类型 |
说明 |
截止日 |
是 |
DateTime |
事件日期 |
代码 |
是 |
字符串 |
证券代码 |
方向 |
是 |
整数 |
1 多单;0 空单 |
动作 |
是 |
整数 |
2 分红;3 送股;4 配股 |
成交量 |
是 |
数值 |
动作为 2 时为 0 |
成交价 |
是 |
数值 |
动作为 2、3 时为 0 |
成交金额 |
是 |
数值 |
分红金额或配股金额 |
乘数 |
否 |
数值 |
默认 1 |
保证金比例(%) |
否 |
数值 |
默认 100 |
费率(%) |
否 |
数值 |
默认 0 |
备注 |
否 |
字符串 |
分红、配股等说明 |
查询接口
资产和持仓
| 方法 |
参数个数 |
返回值 |
用途 |
GetAssetData(vEndT) |
1 |
二维数组 |
指定日资产配置 |
GetAssetData(vBegT, vEndT) |
2 |
二维数组 |
区间资产配置 |
GetAssetJZData(vEndT) |
1 |
实数 |
指定日单位净值 |
GetAssetJZData(vBegT, vEndT) |
2 |
二维数组 |
区间单位净值 |
GetHoldData(vEndT) |
1 |
二维数组 |
指定日持仓 |
GetHoldData(vBegT, vEndT) |
2 |
二维数组 |
区间持仓 |
GetOptionGroupData() |
0 |
二维数组 |
当前期权组合持仓 |
GetOptionGroupData(vEndT) |
1 |
二维数组 |
指定日期权组合持仓 |
GetOptionGroupData(vBegT, vEndT) |
2 |
二维数组 |
区间期权组合持仓 |
交易和剔除数据
| 方法 |
参数个数 |
返回值 |
用途 |
GetTradeData(vBegT, vEndT) |
2 |
二维数组 |
区间交易数据 |
GetDelTradeData(vBegT, vEndT) |
2 |
二维数组 |
被成交量约束、交易约束、期权组合构建或解锁失败剔除的交易 |
GetTAData(vBegT, vEndT) |
2 |
二维数组 |
区间资金进出数据 |
GetPortfolioPercent(vBegT, vEndT) |
2 |
二维数组 |
区间组合配比;比例类专用 |
GetJyByPercent(pfInfoData, tPercent) |
2 |
二维数组 |
根据 T-1 调整后持仓和 T 日目标比例生成 T 日交易 |
盈亏和收益
| 方法 |
参数个数 |
返回值 |
用途 |
GetGainandLoss(vBegT, vEndT) |
2 |
二维数组 |
区间组合、分类资产每日盈亏和累计盈亏 |
GetTradingAmount(vBegT, vEndT) |
2 |
二维数组 |
区间每日买入、卖出、分红、净买卖金额 |
GetGainandLossBySecurity(vBegT, vEndT) |
2 |
二维数组 |
区间按个券汇总盈亏 |
GetTradingAmountBySecurity(vBegT, vEndT) |
2 |
二维数组 |
区间按个券汇总交易金额 |
GetPortfolioReturn() |
0 |
实数 |
最新组合收益率 |
GetPortfolioReturn(vBegT, vEndT) |
2 |
实数 |
区间组合收益率 |
GetPortfolioAccumulativeReturn() |
0 |
实数 |
组合成立以来收益率 |
GetPortfolioReturn2(vBegT, vEndT) |
2 |
二维数组 |
区间组合和基准每日收益率序列 |
GetTrailingReturn(vEndT) |
1 |
二维数组 |
指定日阶段收益率 |
GetRollingReturn(vBegT, vEndT, cy) |
3 |
二维数组 |
区间滚动收益率 |
GetStockBuyandHoldReturn(vBegT, vEndT) |
2 |
二维数组 |
区间持仓不动收益和交易贡献 |
GetIRRReturn(vBegT, vEndT, vAnnual) |
3 |
实数 |
区间现金流内部收益率 |
风险评价和行业配置
| 方法 |
参数个数 |
返回值 |
用途 |
GetSectorAllocation(vEndT) |
1 |
二维数组 |
指定日行业配置 |
GetReturnandRisk(vBegT, vEndT) |
2 |
二维数组 |
区间累计收益、标准差、夏普等风险回报 |
GetRelativePerformance(vBegT, vEndT) |
2 |
二维数组 |
区间超额收益、alpha、beta、跟踪误差等相对表现 |
通用日期参数:
| 参数位置 |
参数名 |
必填 |
接收类型 |
说明 |
| 1 |
vBegT |
视签名而定 |
DateTime |
开始日 |
| 2 |
vEndT |
视签名而定 |
DateTime |
截止日 |
查询结果关键字段
GetAssetData
| 字段 |
说明 |
截止日 |
资产配置日期 |
现金市值 |
当前现金 |
股票市值 |
股票资产市值 |
基金市值 |
基金资产市值 |
债券市值 |
债券资产市值 |
金融衍生品市值 |
金融衍生品保证金市值 |
资产净值 |
组合资产净值 |
股票占净值比例(%) |
股票市值 / 资产净值 * 100 |
现金占净值比例(%) |
现金市值 / 资产净值 * 100 |
GetHoldData
| 字段 |
说明 |
组 ID |
期权组合或组合持仓标识;全为空时不返回 |
截止日 |
持仓日期 |
代码 |
证券代码 |
方向 |
多单或空单 |
数量 |
持仓数量 |
收盘 |
收盘价格 |
市值 |
收盘 * 数量 |
保证金占用 |
收盘 * 数量 * 保证金比例 |
占净值比例(%) |
保证金占用 / 资产净值 * 100 |
总成本 |
持仓总成本 |
成本价 |
持仓成本价 |
浮动盈亏 |
市值 - 总成本 |
浮盈率(%) |
浮动盈亏 / 总成本 |
证券类别 |
证券类型 |
行业名称 |
行业分类名称 |
组合类型 |
期权组合策略类型;全为空时不返回 |
GetTradeData
| 字段 |
说明 |
组 ID |
期权组合或组合交易标识 |
截止日 |
交易日期 |
代码 |
证券代码 |
名称 |
证券名称 |
方向 |
多单或空单 |
动作 |
开仓、平仓、构建、解锁等 |
成交价 |
成交价格 |
成交量 |
成交数量 |
费率(%) |
交易费率 |
成交金额(税前) |
成交价 * 成交量 |
费用 |
手续费 |
成交金额 |
税后成交金额 |
组合类型 |
期权组合策略类型 |
备注 |
交易备注 |
止盈止损基准价 |
有止盈止损交易时可能返回 |
止盈止损成交价 |
有止盈止损交易时可能返回 |
常见专项规则
高频回测
- 高频策略通常设置
FCycle 为分钟线或秒线周期。
- 高频策略若要以当前时点价格成交,设置
FPriceType := 1。
- 高频回测需要返回每个周期清算数据时,设置
FHFDataOutPut := 1。
- 高频并且重写
ReturnBenchmark 时,基准收益率也要按每个时点计算。
现金不足调整
- 全股票组合经过涨停、跌停、停牌、超卖、最大最小成交量和成交金额约束后,如果可用资金小于
0,可设置 FisCashToAdjust := 1。
FOrdertype 决定买入量调整顺序。
- 调整后仍应通过
GetAssetData() 检查现金市值。
主力连续合约
FMainFutureMap := 0 时,不对期货主力连续合约做映射。
FMainFutureMap := 1 时,将主力连续合约映射到当时实际合约。
- 比例类组合中,主力变更日若是调仓日,以当日调仓数据为准。
- 数量类组合中,主力变更日无论是否为交易时点,都需要处理主力换仓交易。
自定义成交价
- 比例类目标持仓使用自定义成交价时,设置
FPriceType := -1。
GetTradeOrder(vEndT) 返回目标持仓中可提供 成交价。
- 原持仓证券在本期目标持仓中不存在时,清仓价由
FPriceRateTo0 决定。
FPriceRateTo0 := -1 时,重写 GetClearancePrice(t, vEndT, ptype)。
缺失输入处理
| 情况 |
生成处理 |
| 只有“写回测框架”,没有策略逻辑 |
生成 TSBackTesting 子类骨架,GetTradeOrder(vEndT) 先返回 -1 |
| 没有证券池、调仓规则或交易明细 |
只生成框架和参数入口,不生成具体交易信号 |
| 没有期权需求 |
使用比例类或数量类普通字段,不加入期权组合字段 |
FGroupType := 1 |
GetTradeOrder(vEndT) 返回目标持仓和目标比例字段 |
FGroupType := 2 |
GetTradeOrder(vEndT) 返回成交明细、成交价、成交量和动作字段 |
| 高频且要求当前时点价格成交 |
设置 FPriceType := 1 |
FDateToStr := 1 |
查询结果里的日期按字符串处理;后续日期计算先转换回日期值 |