QuantDinger: 策略与指标模型
QuantDinger 部署在 homelab 的 k8s 环境里,UI 上可以直接完成交易所的挂单和平仓操作。要开发策略并测试自动交易,需要先理清"策略"“指标"“交易引擎"这几个概念之间的关系。 指标(Indicator)是什么 指标很容易被理解成常见的技术指标,比如一条均线。实际上 QuantDinger 里的指标是一段 Python 脚本,同时做两件事: 计算,用来在图表上画线(比如 EMA、RSI); 产出四列交易信号,这才是核心: df['open_long'] # open long signal df['close_long'] # close long signal df['open_short'] # open short signal df['close_short'] # close short signal 策略执行引擎读的就是这四列。止损止盈、仓位比例这些风控参数通过 # @strategy 注解声明,由引擎统一执行,回测和实盘共用一套逻辑。 一个最简单的例子,快慢均线交叉: my_indicator_name = "Agent SMA" my_indicator_description = "SMA crossover" df = df.copy() fast = close.rolling(10).mean() slow = close.rolling(30).mean() cross_up = (fast > slow) & (fast.shift(1) <= slow.shift(1)) cross_dn = (fast < slow) & (fast.shift(1) >= slow.shift(1)) df['open_long'] = cross_up.fillna(False).astype(bool) df['close_long'] = cross_dn.fillna(False).astype(bool) df['open_short'] = False df['close_short'] = False output = {'name': my_indicator_name, 'plots': [], 'signals': []} 指标脚本本身是无状态的:每次被调用时拿到一批 K 线数据(df),一次性向量化算出所有信号,不记得上一次调用发生了什么,也不会自己去拉数据或者下单。 df 里的 OHLCV 是什么 df 这个变量是引擎注入进来的 K 线(OHLCV)数据,一个 pandas DataFrame,至少包含这五列: Open:开盘价,这根 K 线周期开始时的成交价 High:最高价,这根 K 线周期内出现过的最高成交价 Low:最低价,这根 K 线周期内出现过的最低成交价 Close:收盘价,这根 K 线周期结束时的成交价 Volume:成交量,这根 K 线周期内一共成交了多少数量的标的 每一行对应一根 K 线(一个 bar),按时间顺序排列,具体周期由策略的 timeframe 决定(比如 1 小时线就是每行一根 1 小时 K 线)。OHLCV 不是量化领域独有的发明,而是股票、期货这类传统市场里画 K 线图、做技术分析时就在用的行业标准术语,交易所 API、数据供应商返回的历史行情都是这五个字段,量化系统只是直接沿用了这套已有的数据契约。 ...