DSL 策略语言

Pine Script 风格策略语言,编写交易策略

DSL 策略语言

Pine Script 风格策略语言,编写交易策略

XQuant 的 DSL 策略语言,Pine Script 风格,用于编写单标的交易策略并回测。在量化研究页面的「DSL 回测」中使用。

基本结构

每个策略以 strategy("名称") 开头,然后写变量定义和交易逻辑:

行情变量

变量说明
close当前收盘价
open当前开盘价
high当前最高价
low当前最低价
volume当前成交量
bar_index当前 K 线序号

持仓状态

变量说明
strategy.position_size当前持仓数量(0 表示空仓)
strategy.position_avg_price当前持仓平均成本

技术指标(ta.*)

函数说明示例
ta.sma(source, length)简单移动平均ta.sma(close, 5)
ta.lowest(source, length)N 周期最低值ta.lowest(low, 20)
ta.highest(source, length)N 周期最高值ta.highest(high, 20)
ta.rsi(source, length)RSI 指标ta.rsi(close, 14)
ta.crossover(a, b)a 上穿 b(金叉)ta.crossover(fast, slow)
ta.crossunder(a, b)a 下穿 b(死叉)ta.crossunder(fast, slow)

交易函数(strategy.*)

函数说明示例
strategy.entry(id, direction, qty)开仓信号strategy.entry(id="long", direction=strategy.long, qty=0)
strategy.close(id)平仓信号strategy.close(id="long")
strategy.exit(id)平仓信号(同 close)strategy.exit(id="long")

qty=0 表示用 95% 可用资金全仓买入。

其他内置函数

函数说明
plot(series, title=...)输出序列(调试/绘图)
nz(value, default)把 NaN 替换为默认值
na(value)判断是否为 NaN
math.min(a, b)取最小值
math.max(a, b)取最大值
limit.up(close)是否涨停(主板 10%,创业板/科创板 20%,北交所 30%)
limit.down(close)是否跌停
limit.up_price(close)涨停价
limit.down_price(close)跌停价

基本面因子(factor.*)

从特征数据读取基本面因子(需特征数据,缺失返回 NaN,可用 nz() 处理):

函数说明
factor.pe_ttm市盈率(TTM)
factor.pb市净率
factor.ps_ttm市销率(TTM)
factor.market_cap总市值
factor.momentum_5d / 20d / 60d5/20/60 日动量
factor.rsi_14RSI(14)
factor.macdMACD
factor.hv10 / 20 / 6010/20/60 日历史波动率
factor.atr_14ATR(14)

完整示例

双均线 + 止盈止损

低位放量

注意事项

  • 单标的:DSL 回测只针对一个标的(如 sh600519)
  • 全仓进出qty=0 表示用 95% 可用资金全仓买入
  • 缩进if 语句块用缩进表示,不要用 { }
  • 语法校验:页面有「校验语法」按钮,可先校验再回测
  • 历史记录:回测结果会保存,可回看 DSL 源码和交易明细