交易机器人开机之后,它一整天到底在忙什么
- 能用「值班盯盘的人」这个类比,说清自动交易的执行循环每一轮在做什么
- 能把循环里的每一步对应回自己手工下单时的具体动作,知道机器替你做了哪些、没替你做哪些
- 能说出执行循环明确不负责的边界,不再把「跑起来了」误当成「能赚钱」
你大概见过这样的截图:有人贴出一个终端窗口,黑底白字滚着一行行日志,配文「机器人已上线,睡觉去了」。你盯着那堆日志看了半天,只看懂两个词——某某币对、某某价格。剩下的什么 bot_loop_start、什么 confirm_trade_entry,像是另一个星球的语言。
更让人心里没底的是这个问题:它现在到底在干嘛? 它是一直死死盯着盘,还是隔一会儿看一眼?它看到信号就立刻下单吗?我手上已经有的那笔单子,它管不管?
这篇不教你怎么装、怎么配置——那是软件说明书的活。这篇要做的是另一件事:把一个自动交易程序「每一轮循环」的动作序列,翻译成你能对照自己手工操作看懂的语言。用的标本是开源交易框架 freqtrade(一个用 Python 写的、开源的自动交易执行框架),但读完你会发现,换一个框架,骨架其实是同一副。
先别管代码,想象一个值班的人
假设你雇了一个人替你看盘。他不是神仙,不能同时看住所有东西,所以你和他约法三章,定下一套死板的值班流程:
每隔一小会儿,他抬头看一眼。 不是眼睛一秒不眨地黏在屏幕上——那样人会累死,也没必要。他定了个节奏,比如每过一小段时间抬一次头。两次抬头之间,市场当然在动,但他不看。
抬头之后,第一件事不是找新机会,而是先看自己手上有什么。 桌上摊着几张单子:哪些是已经买进去的持仓,哪些是挂出去还没成交的委托。这些是「存量」,是已经花了钱、已经承担了风险的东西。存量没料理清楚,谈什么新机会。
然后他更新自己的判断。 他去看最新的行情,重新算一遍自己那套判断标准——均线拐头没有、这根K线收在哪里。注意:他不是每抬一次头就重算一遍,只有当出现了新的一根K线,重算才有意义;如果这根K线还没走完,重算出来的还是同一个数。
接着才是动手,而且顺序固定。 先看已有的持仓要不要平掉(止损到了吗、目标到了吗、离场信号出来了吗),再看挂着没成交的委托要不要撤要不要改价,最后才轮到「要不要开新仓」。而且开新仓之前他还要数一遍:约定的仓位格子是不是已经占满了?占满了就不开,再好的机会也不开。
做完这一轮,他趴下休息一小会儿,然后重复上面全部动作。 一天几千遍,永远是这个顺序,永远不多想一步。
这就是执行循环。它的本质不是「智能」,而是把一套人容易忘、容易乱序、容易在情绪上头时跳过的动作,固化成一个永不走样的流程。
这个循环里的每一步,你手工操作时都在做
把上面那个值班的人拆开,你会发现每一步都能在你自己的操作里找到对应动作。
「抬头看一眼」对应你打开行情软件。 你不是 24 小时盯屏幕,你也有自己的节奏——收盘前看一眼,或者中午看一眼。差别只在于:机器的节奏是写死的,你的节奏取决于今天开不开会、孩子闹不闹。
「先看手上有什么」对应你打开持仓页。 老手打开软件的第一个动作几乎都是看持仓,不是看涨幅榜。这个顺序不是习惯问题,是风控问题:已经承担的风险优先级永远高于还没发生的机会。而新手最常见的动作恰恰相反——先看有什么在涨。
「重新算一遍判断标准」对应你更新自己的看法。 你可能是画一条趋势线,可能是看一眼估值到了什么位置。关键是这一步和下一步(动手)是分开的:先形成判断,再决定动作。人最容易犯的错,是把这两步搅在一起——先想买,再去找支持买的理由。
「先平后开」对应资金的先后。 你手上的钱是有限的,不先把该退出的仓位退出来,新机会来了你也没子弹。更要紧的是:如果一笔单子已经触发了你的离场条件,那它就该走,跟别处有没有更香的机会毫无关系。把这两件事绑在一起想,就是典型的「舍不得割肉,除非发现了更好的标的」——这是拿机会成本给情绪找台阶。
「数格子」对应你的仓位纪律。 你事先说好最多同时持有几只,那就是几只。第六个机会再好,格子满了就是满了。人做这一步最容易松口,机器不会。
「挂单不等于成交」对应你挂了单去吃饭。 你挂了一个价格然后忙别的去了,回来发现根本没成交,价格已经跑了。你是撤单?还是追价改单?还是就这么挂着?——这个决策手工操作时经常被拖成「忘了」,而循环里它是一个必经的检查点。
到了系统里,它长什么样
现在再回头看那份让人一行读不下去的官方说明。freqtrade 的文档里,执行循环写成了一串动作列表;如果你去翻它的主程序(freqtradebot.py 里那个每轮跑一次的 process 方法),会看到同样的顺序被老老实实地写成了十几行调用。
有价值的不是那些函数名,而是藏在顺序和结构里的三个设计判断。
第一,看盘的节奏和决策的节奏是两回事。 循环本身跑得很勤——间隔由配置里的一个节流参数决定,当前默认是几秒量级,可配置;但行情数据的下载被刻意限制成「每根K线只取一次」,避免毫无意义地反复请求交易所。更进一步,策略里那些指标计算默认只在「出现了没见过的新K线」时才重算(源码里靠记住每个品种「上次见过的最后一根K线时间」来判断,这个行为本身也是可配置的)。
翻译成人话:醒得勤,不等于想得勤。 频繁醒来是为了不错过订单状态的变化和止损的触发,而重新做判断这件事,只在有新信息时才做才有意义。很多人手工操作恰恰反过来——盯着分时图,每一次跳动都要重新想一遍要不要卖。信息没变,想法却在变,这就是纯粹的情绪消耗。
第二,顺序本身就是风控。 源码里的动作序列是:先把已有持仓的离场判断跑完并落库,再处理加减仓,最后在「还有空格子」的前提下才去找新的入场机会。这个顺序不是随手排的,它把「保护已有的」放在「追逐新的」前面。你可以把它当成一条可以抄走的手工纪律:每次打开软件,强制自己按这个顺序过一遍。
第三,到处都留着「最后一次否决」的口子。 在真正把入场委托发出去之前,框架会再问一次策略:这单还确认要下吗?离场之前同样再问一次。这个设计的意思是:信号成立和真的该下这一单,是两个不同的问题。中间隔着的东西可能是——现在的价差是不是宽得离谱、这个品种是不是刚出过异常、我是不是刚刚在同一个品种上连亏三次。
还有一个容易被忽略的细节:框架把用户自己写的那部分代码包在一层安全外壳里调用,你写的判断逻辑抛出异常时,程序会记下来继续跑,而不是整个崩掉。这背后是一个很朴素的工程假设——执行系统必须假定策略作者会写错。这个假设,对你手工交易同样成立:你的规则一定有你没想到的边角情况,问题只在于出错时是整套体系停摆,还是有个兜底。
回测的循环,跟实盘的循环长得不一样
这是本篇最值得记住的一点。
回测(用历史数据把策略跑一遍,看看假设中的表现)也有循环,但它是另一副骨架:指标先一次性对整段历史全部算好,然后按K线一根一根往前推,模拟成交。它只做上面那套逻辑的一部分,因为交易行为全是模拟出来的。
差异藏在调用频率上。文档里明确提示:回测中每个判断点在每根K线上最多被调用一次,而实盘里同样的判断点在一根K线的生命周期内会被反复触发很多次。这不是实现瑕疵,是两种时间观的必然冲突——历史数据是一格一格的离散快照,真实时间是连续流淌的。
所以一个策略在回测里「每根K线只有一次机会做决定」,到了实盘变成「这根K线走完之前有几十次机会做决定」。同样的规则,行为可能完全不同。这是回测与实盘结果对不上的机制层面的根源之一,而不是运气问题。这条线索还能往下挖很深,两种循环的完整对照放在回测与实盘的差异总览里讲。
它明确不负责的那些事
看完循环,最容易产生的错觉是:这套东西这么严密,装上它就该赚钱了吧。恰恰相反,执行循环的严密,正是因为它把「赚不赚钱」这件事完全推给了你。
- 它不产生观点。 什么时候该买、什么时候该卖,全部来自你写进策略里的规则。循环只负责在正确的时刻问你的规则一句话,然后忠实执行答案。规则是错的,它就忠实地、不知疲倦地、以毫秒级的效率执行一个错误的答案。
- 它不判断你的策略好不好。 循环里没有任何一处在评估「这套规则合不合理」。它对一套注定亏钱的规则和一套久经考验的规则,态度完全一致。
- 它不保证成交价。 委托发出去到底成交在哪里、成不成交,是交易所那边的事。框架能做的只是在超时后帮你撤单或改价——这恰恰说明「没成交」是常态,不是意外。
- 它不替你决定投多少钱。 单笔投多少、最多同时开几个仓位,都是配置和策略里的输入项,不是它算出来的结论。真正决定你活多久的仓位问题,它一个字都不帮你想。
- 它不理解市场。 循环不知道今晚有议息会议,不知道这家公司昨天换了 CEO。它只认你喂给它的数据列。
说到底,把执行交给程序,省掉的是「手抖」「忘了」「舍不得」这些执行环节的损耗;至于判断本身对不对,它一分钱的忙都帮不上。执行的确定性,从来不能替代判断的正确性。
小结
- 执行循环的骨架就四件事:隔一会儿醒一次、更新判断、料理已有的仓位和委托、最后才找新机会——顺序固定,永不走样。
- 醒的频率和重新判断的频率是两回事:醒得勤是为了不漏掉状态变化,判断只在有新信息时更新才有意义。
- 「先保护已有的,再追逐新的」这个顺序本身就是风控,手工操作可以直接抄。
- 回测循环和实盘循环结构不同、调用频率不同,这是两者结果对不上的机制根源,细节见回测与实盘的差异总览。
- 循环不产生观点、不评价策略、不保证成交、不替你定仓位——它把赚不赚钱这件事,原封不动地留给了你。
一句话说完这篇:所谓自动交易,就是把一个人「每过一会儿看一眼、先管手上的、再看有没有新事做」的值班流程,写成了一个永远不会偷懒也永远不会多想的固定套路。
本文基于开源仓库的源码与文档快照做概念讲解,未实际运行该程序,也不构成任何投资建议或软件使用建议;相关边界见免责声明。想系统看这一卷的其他内容,回到量化与 AI 投研卷。
本文为投资教育整理,关键数据与结论请结合下列权威来源验证。