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、数据供应商返回的历史行情都是这五个字段,量化系统只是直接沿用了这套已有的数据契约。 ...

Created 8086-07-08 · Updated 9096-07-09 · 2 min · 416 words · -

开仓、平仓与仓位:Position 相关术语溯源

写量化策略参数时经常会碰到 entryPct、open_long、close_short 这类字段,背后对应的中文术语是"开仓"“平仓"“仓位”。这几个词看起来直白,但第一次接触时容易只知道怎么用、不知道具体指什么,这里把关联的概念和来源梳理一下。 entryPct 是什么 entryPct 配置的是信号触发、需要新建一个仓位时,用账户资金的百分之多少去下单。比如 entryPct 0.25 表示每次开仓用账户当前资金的 25%。它和止损止盈参数(stopLossPct、takeProfitPct)分工不同:一个管"怎么建仓”,一个管"怎么离场"。 开仓是什么意思 “开仓"是期货/合约交易术语,指建立一个新的持仓头寸,对应的还有"平仓”(结束、关闭持仓)。以 EMA 快慢线交叉策略为例: 开多仓(open_long):预期价格上涨,买入建仓做多,对应金叉(快线上穿慢线)触发 开空仓(open_short):预期价格下跌,卖出/做空建仓,对应死叉(快线下穿慢线)触发 平多仓(close_long):把之前开的多仓平掉、了结,对应死叉出现时 平空仓(close_short):把之前开的空仓平掉,对应金叉出现时 通俗类比: “开仓” ≈ 买入一只股票、建立持仓(不管做多还是做空) “平仓” ≈ 卖出手里的持仓、结束这笔交易(不管盈亏) 英文对应与开仓、建仓的区别 “开仓"对应的英文是 open a position,平仓是 close a position。 “开仓"和"建仓"意思基本相同,都指建立一笔新持仓,但实践中有细微差别: 开仓:更常用、更通用的说法,指做一笔新的买入/卖出建立头寸的动作,可以一次性完成,也可以分多次 建仓:更强调"逐步构建"一个完整仓位的过程,比如分批买入、慢慢加到目标仓位,常用在偏长线、大资金场景,节奏感更强 短线择时、单次触发开一笔仓的场景下用哪个词都可以,代码/文档里英文统一用 open(如 open_long、open_short),中文口语里"开仓"更常用、更中性。 为什么叫"仓”:从粮仓到仓位 “仓"字面上确实来自"粮仓/仓库”,这不是巧合,而是期货交易的历史渊源。期货交易最早从大宗商品(粮食、棉花、金属等)交易发展而来,买卖双方签订合约、约定未来某个时间交割实物商品,这些商品在交割前需要存放在仓库里: 开仓 = 建立一份合约,相当于在仓库里"占用"了一块存储空间(为将来要交割的商品预留仓位) 平仓 = 了结这份合约,相当于把仓库里的那块空间清空、了结掉(不用交割实物了) 后来期货交易发展出金融期货、股票、外汇、加密货币等品种,早已不涉及真实的仓库和实物存储,但"仓"这个词和"占用资金/头寸"的概念保留了下来,变成了一个隐喻: 把账户资金想象成一个"仓库”(总容量) 仓位(position)就是已经用掉的"仓库空间"占总容量的比例,比如"半仓"是用了 50% 资金持有头寸,“满仓"是 100% 都用上了 开仓是开始占用这块空间(建立新持仓),平仓是把这块空间腾出来(卖出/结束持仓) 所以英文 open/close a position 翻译成中文"开仓/平仓”,本质上是把期货交易里"仓库存储空间"这个具象概念,类比到了"资金/头寸占用"这个抽象概念上。

Created 9096-07-09 · Updated 9096-07-09 · 1 min · 61 words · -