DSL 策略下单
DSL (Domain Specific Language) 条件单是 Deepcoin 提供的一种高级交易功能,允许用户通过 JSON 定义复杂的行情触发逻辑,并由系统自动执行。
1. 接口信息
- 接口名称: DSL 策略下单 (DSL Trigger Order)
- 请求方式:
POST - 请求 URL:
/deepcoin/trade/dsl-trigger-order - 内容类型:
application/json
2. 整体请求架构
请求体由**账户交易配置 (trade_info)与策略逻辑定义 (dsl_json)**两个核心对象组成:
{
"trade_info": { ... }, // 定义:去哪下单?用多少倍杠杆?什么保证金模式?
"dsl_json": { ... } // 定义:什么时候下单?买多少?如何止盈止损?
}
3. 详细参数定义
3.1 账户交易层 (trade_info)
| 参数名 | 必填 | 类型 | 描述 |
|---|---|---|---|
symbol | 是 | String | 交易对标识符 (如 BTC-USDT-SWAP) |
tradeMode | 是 | String | 保证金模式: isolated(逐仓), cross(全仓) |
mrgPosition | 否 | String | 持仓模式: merge(合仓), split(分仓);默认 merge |
3.2 策略逻辑层 (dsl_json)
| 参数名 | 必填 | 类型 | 描述 |
|---|---|---|---|
version | 否 | String | DSL版本,例如 "1.0" |
indicators | 是 | Array | 技术指标及其触发条件数组 (详见 3.2.1) |
then | 是 | Object | 条件满足后的执行动作:开仓/平仓 (详见 3.2.2) |
risk | 否 | Object | 订单自带的止盈止损保护 :stop_loss(止损)、take_profit(止盈) (详见 3.2.3) |
3.2.1 技术指标 (indicators)
系统会根据 indicators 中定义的条件进行逻辑评估(多个指标默认为 AND 逻辑)。
| 参数名 | 必填 | 类型 | 描述 |
|---|---|---|---|
name | 是 | String | 指标唯一标识名 (如:ma5, boll) |
type | 是 | String | 指标类型: BOLL, MA, EMA, KDJ, RSI, WR |
params | 是 | Object | 指标计算参数 (详见 3.2.1.1) |
condition | 是 | Object | 触发阈值 (详见 3.2.1.2) |
scope | 是 | String | 作用范围: entry(入场/开仓判断), exit(出场/平仓判断) |
3.2.1.1 指标计算参数 (params)
| 指标类型 | params 包含的参数 | 备注 |
|---|---|---|
| 通用 | interval | 必填。K线周期:1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w |
| BOLL | period, std ,interval | std 为布林带标准差倍数 |
| MA / EMA | period,interval | - |
| KDJ | n, k_smoothing, d_smoothing,interval | nKDJ参数, k_smoothingK平滑, d_smoothingd平滑 |
| RSI / WR | period,interval | - |
3.2.1.2 触发条件字段&示例 (condition)
condition 对象通过组合不同字段来定义精确的触发逻辑。
| 参数名 | 必填 | 类型 | 描述 |
|---|---|---|---|
ref | 是 | String | 指标引用字段(例如:boll.lower) |
op | 是 | String | 比较运算符(<,>) |
right | 否 | Number | 比较值(当指标类型为KDJ、RSI、WR时必填) |
diff_price | 否 | Number | 当前价格与指标值的价差 |
| 场景 | condition 示例 | 业务含义 |
|---|---|---|
| 指标与价格比较 ( boll省略 right仅支持市价比较) | {"ref": "boll.lower", "op": "<"} | 当前市价高于布林带下轨。 |
| 指标与固定值比较 (使用 right) | {"ref": "kdj.k", "op": ">", "right": 80} | KDJ 指标的 K 值大于 80。 |
| 指标与价差比较 (使用 diff_price) | {"ref": "ma", "op": ">", "diff_price": 100} | MA 均线值高于当前价格 100 点。 |
3.2.2 执行动作 (then)
包含 entry (入场) 或 exit (出场) 逻辑块。
动作分支 (on_true):
| 参数名 | 必填 | 类型 | 描述 |
|---|---|---|---|
action | 否 | String | 动作: open(开仓), close(平仓) |
side | 否 | String | 方向: long(多头), short(空头) |
volume | 是 | Number | 下单张数 |
3.2.3 风险控制 (risk)
| 参数名 | 必填 | 类型 | 描述 |
|---|---|---|---|
stop_loss | 否 | Object | 止损配置。{"value": 0.1} 表示 10% |
take_profit | 否 | Object | 止盈配置。{"value": 0.2} 表示 20% |
4. 响应参数
| 字段 | 类型 | 描述 |
|---|---|---|
sCode | Integer | 业务状态码。0: 成功;其他: 失败 |
sMsg | String | 错误或提示信息 |
5. 典型应用示例
5.1 组合指标 (BOLL + KDJ) 入场
当价格跌破布林下轨 且 KDJ 的 K 值低于 30 时,开多 100 张。
{
"trade_info": {"symbol": "BTC-USDT-SWAP","tradeMode": "cross","mrgPosition": "merge"}, // 全仓合仓模式
"dsl_json": {
"indicators": [
{
"name": "boll",
"type": "BOLL",
"params": { "period": 20, "std": 2, "interval": "1m" }, // 20周期布林带,2倍标准差,1分钟K线
"condition": { "ref": "boll.lower", "op": ">" }, // 当前价格跌破布林带下轨
"scope": "entry"
},
{
"name": "kdj",
"type": "KDJ",
"params": { "n": 9, "k_smoothing": 3, "d_smoothing": 3, "interval": "1m" }, // 9周期KDJ,3平滑K,3平滑D,1分钟K线
"condition": { "ref": "kdj.k", "op": "<", "right": 30 }, // KDJ K值低于30
"scope": "entry"
}
],
"then": {
"entry": {
"on_true": { "action": "open", "side": "long", "volume": 100 } // 开多100张
}
}
}
}
5.2 入场 + 出场 + 全方位风控
当前价格高于 MA5 时,开多 50 张。 当前价格低于 MA20 时,平多 50 张。
{
"trade_info": { "symbol": "ETH-USDT-SWAP", "tradeMode":"isolated" }, // 逐仓模式
"dsl_json": {
"indicators": [
{ "name": "ma5",
"type": "MA",
"params": { "period": 5, "interval": "1h" }, // 5周期MA,1小时K线
"condition": { "ref": "ma", "op": "<" }, // 当前价格高于MA5
"scope": "entry" },
{ "name": "ma20",
"type": "MA",
"params": { "period": 20, "interval": "1h" }, // 20周期MA,1小时K线
"condition": { "ref": "ma", "op": ">" }, // 当前价格低于MA20
"scope": "exit" }
],
"then": {
"entry": { "on_true": { "action": "open", "side": "long", "volume": 50 } }, // 开多50张
"exit": { "on_true": { "action": "close", "side": "long", "volume": 50 } } // 平多50张
},
"risk": {
"stop_loss": { "value": 0.05 }, // 止损5%
"take_profit": { "value": 0.15 } // 止盈15%
}
}
}
6. 使用注意事项
- 指标逻辑: 所有的
entry范围指标必须同时满足(AND)才会触发then.entry动作。 - 出场逻辑: 同理,所有
exit范围指标同时满足时触发then.exit动作。 - 回测支持: API 实时下单时目前仅支持
on_true。