跳到主要内容

运行回测

DSL(领域特定语言)回测是 Deepcoin 提供的高级交易功能,允许用户通过 JSON 定义复杂的市场触发策略,并针对历史数据进行回测。


1. API 信息

  • 接口名称: DSL 回测运行(Backtest Run)
  • 请求方法: POST
  • 请求 URL: /deepcoin/trade/backtest-run
  • Content-Type: application/json

2. 整体请求架构

请求体由两个核心对象组成:策略逻辑定义(dsl历史数据配置(data_source

{
"dsl": {...},// 定义:策略逻辑、指标、执行动作、风险控制
"data_source": {...}// 定义:哪个交易对?什么时间段进行回测?
}

3. 详细参数定义

3.1 策略逻辑层(dsl)

参数名必填类型描述
versionStringDSL 版本,例如 "1.0"
indicatorsArray技术指标及其触发条件数组(详见 3.1.1
thenObject条件满足后的执行动作:开仓/平仓(详见 3.1.2
riskObject订单自带的止盈止损保护:stop_loss(止损)、take_profit(止盈)(详见 3.1.3
executionObject执行配置(可选,见 3.1.4

3.1.1 技术指标(indicators)

系统会根据 indicators 中定义的条件进行逻辑评估(多个指标默认为 AND 逻辑)。

参数名必填类型描述
nameString指标唯一标识名 (如:ma5, boll)
typeString指标类型:BOLL, MA, EMA, KDJ, RSI, WR
paramsObject指标计算参数(详见 3.1.1.1
conditionObject触发阈值(详见 3.1.1.2
scopeString作用范围:entry(入场/开仓判断), exit(出场/平仓判断)
3.1.1.1 指标计算参数(params)
指标类型params 包含的参数备注
通用interval必填。K 线周期:1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w
BOLLperiod, std ,intervalstd 为布林带标准差倍数
MA / EMAperiod,interval-
KDJn, k_smoothing, d_smoothing,intervalnKDJ 参数,k_smoothingK 平滑,d_smoothingd 平滑
RSI / WRperiod,interval-
3.1.1.2 触发条件字段&示例(condition)

condition 对象通过组合不同字段来定义精确的触发逻辑。

参数名必填类型描述
refString指标引用字段(例如:boll.lower
opString比较运算符(<,>
rightNumber比较值(当指标类型为 KDJ、RSI、WR 时必填)
diff_priceNumber当前价格与指标值的价差
场景condition 示例业务含义
指标与价格比较
(boll省略 right仅支持市价比较)
{"ref": "boll.lower", "op": "<"}当前市价高于布林带下轨。
指标与固定值比较
(使用 right)
{"ref": "kdj.k", "op": ">", "right": 80}KDJ 指标的 K 值大于 80。
指标与价差比较
(使用 diff_price)
{"ref": "ma5.value", "op": ">", "diff_price": 100}MA 均线值高于当前价格 100 点。

3.1.2 执行动作(then)

包含 entry (入场) 或 exit (出场) 逻辑块。

动作分支 (on_true):

参数名必填类型描述
actionString动作:open(开仓), close(平仓)
sideString方向:long(多头), short(空头)
volumeNumber下单张数

3.1.3 风险控制(risk)

参数名必填类型描述
stop_lossObject止损配置。{"value": 0.1} 表示 10%
take_profitObject止盈配置。{"value": 0.2} 表示 20%

3.1.4 执行配置(execution)

参数是否必需类型描述
fee_bpsNumber手续费(基点,例如:5 表示 0.05%)

3.2 数据源配置(data_source)

参数是否必需类型描述
symbolString交易对标识(例如:BTC-USDT-SWAP
from_tsInteger开始时间戳(Unix 时间戳,秒级)
to_tsInteger结束时间戳(Unix 时间戳,秒级)

4. 响应参数

4.1 基础响应

字段类型描述
codeInteger业务状态码。0:成功;其他:失败
msgString错误或提示信息
dataObject回测结果数据(见 4.2

4.2 回测结果数据

字段类型描述
summaryObject回测汇总统计(见 4.2.1
tradesArray交易记录数组(见 4.2.2

4.2.1 回测汇总

字段类型描述
realized_pnlNumber实际盈亏
symbolString交易对符号
total_feeNumber总手续费
tradesInteger交易次数

4.2.2 交易记录

字段类型描述
feeNumber该笔交易的手续费
order_idString订单 ID
priceNumber成交价格
qtyNumber成交数量
reasonString交易原因
sideString交易方向:buysell
tsInteger交易时间戳

5. 典型应用示例

5.1 完整请求示例

展示 BOLL 策略回测的所有可用参数的综合示例。

{
"dsl": {
"version": "1.0",
"indicators": [
{
"name": "boll",
"type": "BOLL",
"scope": "entry",
"params": {
"period": 15,
"std": 2,
"interval": "1m"
},
"condition": {
"ref": "boll.lower",
"op": "<",
"right": "price.close",
"diff_price": 10
}
}
],
"then": {
"entry": {
"on_true": {
"action": "open",
"side": "long",
"volume": 0.1
},
"on_false": {
"action": "none",
"side": "long",
"volume": 0
}
},
"exit": {
"on_true": {
"action": "close",
"side": "long",
"volume": 100
},
"on_false": {
"action": "none",
"side": "long",
"volume": 0
}
}
},
"execution": {
"fee_bps": 5
},
"risk": {
"stop_loss": {
"value": 0.1
},
"take_profit": {
"value": 0.1
}
}
},
"data_source": {
"symbol": "BTC-USDT-SWAP",
"from_ts": 1772054911,
"to_ts": 1772090911
}
}

5.2 组合指标(BOLL + KDJ)回测

回测当价格跌破布林带下轨KDJ 的 K 值低于 30 时开多的策略。

{
"dsl": {
"version": "1.0",
"indicators": [
{
"name": "boll",
"type": "BOLL",
"scope": "entry",
"params": {
"period": 20,
"std": 2,
"interval": "1m"
},
"condition": {
"ref": "boll.lower",
"op": "<",
"right": "price.close"
}
},
{
"name": "kdj",
"type": "KDJ",
"scope": "entry",
"params": {
"n": 9,
"k_smoothing": 3,
"d_smoothing": 3,
"interval": "1m"
},
"condition": {
"ref": "kdj.k",
"op": "<",
"right": 30
}
}
],
"then": {
"entry": {
"on_true": {
"action": "open",
"side": "long",
"volume": 100
},
"on_false": {
"action": "none",
"side": "long",
"volume": 0
}
},
"exit": {
"on_true": {
"action": "close",
"side": "long",
"volume": 0
},
"on_false": {
"action": "none",
"side": "long",
"volume": 0
}
}
},
"risk": {
"stop_loss": {
"value": 0.1
},
"take_profit": {
"value": 0.5
}
}
},
"data_source": {
"symbol": "BTC-USDT-SWAP",
"from_ts": 1704067200,
"to_ts": 1706745600
}
}

5.3 MA 交叉策略带完整风控

回测使用 MA 交叉作为进出场信号的策略。

{
"dsl": {
"version": "1.0",
"indicators": [
{
"name": "ma5",
"type": "MA",
"scope": "entry",
"params": {
"period": 5,
"interval": "1h"
},
"condition": {
"ref": "ma5.value",
"op": "<",
"right": "price.close"
}
},
{
"name": "ma20",
"type": "MA",
"scope": "exit",
"params": {
"period": 20,
"interval": "1h"
},
"condition": {
"ref": "ma20.value",
"op": ">",
"right": "price.close"
}
}
],
"then": {
"entry": {
"on_true": {
"action": "open",
"side": "long",
"volume": 50
},
"on_false": {
"action": "none",
"side": "long",
"volume": 0
}
},
"exit": {
"on_true": {
"action": "close",
"side": "long",
"volume": 50
},
"on_false": {
"action": "none",
"side": "long",
"volume": 0
}
}
},
"execution": {
"fee_bps": 5
},
"risk": {
"stop_loss": {
"value": 0.05
},
"take_profit": {
"value": 0.15
}
}
},
"data_source": {
"symbol": "ETH-USDT-SWAP",
"from_ts": 1704067200,
"to_ts": 1706745600
}
}

6. 使用注意事项

  1. 指标逻辑:所有 scope: "entry" 的指标必须同时满足才会触发 then.entry 动作。
  2. 出场逻辑:同样,所有 scope: "exit" 的指标必须满足才会触发 then.exit 动作。
  3. 数据范围:确保 from_tsto_ts 覆盖足够的历史数据以获得有意义的回测结果。
  4. 风险管理:始终配置适当的止损和止盈水平以管理策略风险。
  5. 回测局限性:过往表现不保证未来结果。将回测作为策略验证的众多工具之一。