📝 docs(tsl-api): resolve backtesting return contract

This commit is contained in:
csh
2026-08-25 13:16:45 +08:00
parent d1568c02cd
commit 9c8d77e1c4
7 changed files with 834 additions and 56 deletions
+47 -35
View File
@@ -30,7 +30,7 @@ end;
function MyBackTesting.GetTradeOrder(vEndT); override;
begin
return -1;
return array(); // 占位:实际策略替换为目标持仓或交易明细
end;
function RunBackTest(begT, endT);
@@ -54,8 +54,9 @@ end;
返回规则:
- `GetTradeOrder(vEndT)` 返回二维数组:表示当前时点的目标持仓或交易明细。
- `GetTradeOrder(vEndT)` 返回空数组:比例类组合表示完全清仓
- `GetTradeOrder(vEndT)` 返回 `-1`:表示当前时点不调仓或不交易
- 数量类组合返回空数组:表示当前时点没有交易
- 比例类组合返回空数组:表示完全清仓
- 比例类某个调仓日不调仓:返回非数组控制值。
## 回测开发流程
@@ -76,21 +77,25 @@ end;
## 交易数据字段
下表把标准字段要求与框架允许的省略默认分开:`标准非空` 表示标准输入形状要求,`配置/省略规则` 表示配置替代或兼容默认。
### 比例类组合字段
`FGroupType := 1` 时,`GetTradeOrder(vEndT)` 返回目标持仓和目标比例。
| 字段 | 必填 | 接收类型 | 说明 |
| --------------- | ---- | ---------- | -------------------------------------------------------- |
| `截止日` | 是 | `DateTime` | 通常等于 `vEndT` |
| `代码` | 是 | 字符串 | 目标持仓证券代码 |
| `方向` | 是 | 整数 | `1` 多单;`0` 空单;缺省时按多单处理 |
| `比例(%)` | 是 | 数值 | 目标持仓比例;`FRateType <> -1`可由框架按配比方式计算 |
| `成交价` | 否 | 数值 | 比例类通常由 `FPriceType` `FPriceRateTo0` 决定 |
| `乘数` | 否 | 数值 | 默认 `1` |
| `保证金比例(%)` | 否 | 数值 | 默认 `100` |
| `开仓费率(%)` | 是 | 数值 | 开仓费率;股票、基金常见默认 `0.1` |
| `平仓费率(%)` | 是 | 数值 | 平仓费率;期货常见默认 `0.01` |
| 字段 | 标准非空 | 接收类型 | 配置/省略规则 |
| --------------- | -------- | ---------- | -------------------------------------------------------- |
| `截止日` | 是 | `DateTime` | 通常等于 `vEndT` |
| `代码` | 是 | 字符串 | 目标持仓证券代码 |
| `方向` | 是 | 整数 | `1` 多单;`0` 空单;兼容省略时默认多单 |
| `比例(%)` | 是 | 数值 | `FRateType := -1`必须提供;其它配比方式由框架计算 |
| `成交价` | 否 | 数值 | 通常由 `FPriceType` 获取;自定义成交价时必须提供 |
| `乘数` | 否 | 数值 | 省略时按品种或默认 `1` |
| `保证金比例(%)` | 否 | 数值 | 省略时按品种或默认 `100` |
| `开仓费率(%)` | 是 | 数值 | 省略时使用品种默认费率 |
| `平仓费率(%)` | 是 | 数值 | 省略时使用品种默认费率 |
`名称` 可出现在用户导入数据或示例中,但不属于比例类必需契约字段。
比例类方向值:
@@ -111,21 +116,23 @@ end;
`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`提供;只适合数量类 |
| 字段 | 标准非空 | 接收类型 | 配置/省略规则 |
| ----------------- | -------- | ---------- | ------------------------------------------------------------ |
| `截止日` | 是 | `DateTime` | 通常等于 `vEndT` |
| `代码` | 是 | 字符串 | 交易证券代码 |
| `方向` | 是 | 整数 | `1` 多单;`0` 空单;兼容省略时默认多单 |
| `动作` | 是 | 整数 | `0` 开仓;`1` 平仓;兼容省略时默认开仓 |
| `成交量` | | 数值 | 固定成交量时提供;期权动作 `0``32``33` 必须提供 |
| `成交价` | 是 | 数值 | 标准交易明细应提供;系统价可由 `FPriceType` 取得,自定义时必须提供 |
| `乘数` | 否 | 数值 | 省略时按品种或默认值处理 |
| `保证金比例(%)` | 否 | 数值 | 省略时按品种或默认值处理 |
| `费率(%)` | 是 | 数值 | `FFeeType := 1`;省略时使用品种默认费率 |
| `资金` | 条件 | 数值 | 开仓且 `FOpenVolType := 2` |
| `剩余资金占比(%)` | 条件 | 数值 | 开仓且 `FOpenVolType := 3` |
| `平仓数量占比(%)` | 条件 | 数值 | 平仓且 `FCloseVolType := 2` |
| `费用` | 条件 | 数值 | `FFeeType := 2`直接提供单笔费用;只适合数量类 |
`FOpenVolType`/`FCloseVolType` 决定成交量替代字段:开仓模式为 `2/3` 时分别提供 `资金`/`剩余资金占比(%)`,平仓模式为 `2` 时提供 `平仓数量占比(%)`,这些模式下不再把 `成交量` 作为用户输入列。`名称` 只属于常见导入/展示列,不是数量类必需契约字段。
数量类方向和动作:
@@ -151,17 +158,19 @@ end;
| 字段 | 必填 | 接收类型 | 说明 |
| ------------------- | -------- | ---------- | -------------------------------------------------------- |
| `组 ID` | 是 | 字符串 | 同一组合内成分合约使用同一个组 ID |
| `组 ID` | 是 | 字符串 | 未构成组合时为空;同一组合内成分合约使用同一个组 ID |
| `截止日` | 是 | `DateTime` | 交易时点 |
| `代码` | 是 | 字符串 | 期权或期货合约代码 |
| `方向` | 是 | 整数 | `1` 权利仓或多单;`0` 义务仓或空单 |
| `动作` | 是 | 整数 | `0` 开仓;`1` 平仓;`32` 构建期权组合;`33` 解锁期权组合 |
| `成交价` | 是 | 数值 | 构建、解锁交易中可为任意大于 `0` 的实数 |
| `成交量` | | 数值 | 合约数量 |
| `费率(%)``费用` | 条件必填 | 数值 | 由 `FFeeType` 决定 |
| `成交量` | 条件必填 | 数值 | 动作 `0``32``33` 必须提供;动作 `1` 可改用平仓占比 |
| `费率(%)``费用` | 条件字段 | 数值 | 由 `FFeeType` 决定;动作 `32/33` 时对应值为 `0` |
| `乘数` | 否 | 数值 | 按品种设置 |
| `保证金比例(%)` | 否 | 数值 | 按品种设置 |
| `组合类型` | 条件必填 | 字符串 | 组合策略标识,如 `CNSJC``STD` |
| `组合类型` | | 字符串 | 组合策略标识,如 `CNSJC``STD`;单腿或未识别时可为空 |
同一组合必须返回全部成分合约,且各行的 `组 ID``动作``成交量` 相同。
期权组合动作:
@@ -232,6 +241,7 @@ end;
| `5` | 等股数 | 按等股数分配 |
| `6` | 流通市值平方根加权 | 按流通市值平方根分配 |
| `7` | 总市值平方根加权 | 按总市值平方根分配 |
| `8` | 剩余资金等比例分配 | 先处理平仓,再把剩余资金等分给开仓证券 |
`FPriceRateTo0` 取值:
@@ -396,7 +406,7 @@ obj.FBMOption := 0;
用途:获取当前时点目标持仓或交易明细。
参数个数:1
返回值:二维数组、空数组或 `-1`
返回值:通常为二维数组;比例类当前调仓日不调仓时,可返回非数组控制值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | ---------- | ----------------------------------------------------------------- |
@@ -407,6 +417,8 @@ obj.FBMOption := 0;
- 必须在子类中重写。
- 不要在 `GetTradeOrder(vEndT)` 中修改 `vEndT`
- 如果要使用历史区间,从 `vEndT` 推导,例如 `stockzf(incMonth(vEndT, -1), vEndT)`
- 数量类空数组表示当前时点无交易;比例类空数组表示完全清仓。
- 比例类当前调仓日不调仓时返回非数组控制值。
### 可重写方法
@@ -606,7 +618,7 @@ obj.FBMOption := 0;
| 情况 | 生成处理 |
| ------------------------------ | ----------------------------------------------------------------- |
| 只有“写回测框架”,没有策略逻辑 | 生成 `TSBackTesting` 子类骨架,`GetTradeOrder(vEndT)` 先返回 `-1` |
| 只有“写回测框架”,没有策略逻辑 | 生成 `TSBackTesting` 子类骨架,比例类 `GetTradeOrder(vEndT)` 使用空数组占位 |
| 没有证券池、调仓规则或交易明细 | 只生成框架和参数入口,不生成具体交易信号 |
| 没有期权需求 | 使用比例类或数量类普通字段,不加入期权组合字段 |
| `FGroupType := 1` | `GetTradeOrder(vEndT)` 返回目标持仓和目标比例字段 |