Type/to search
2
Follow
480
Followers
X上爆火的“飞轮”交易系统,从量化角度复现成策略?
Original
Created 2026-05-29 11:00:13  Updated 2026-06-08 09:50:11
 0
 104

img

最近在 X 上刷到一篇挺有意思的文章。

img

作者讲的是自己这些年怎么靠一套“飞轮”慢慢滚起来的:三个轮子——现金流、核心资产、Alpha——互相反哺。剥到最里头,其实就一句话:先想办法活下来,活得够久,再谈复利。

这套东西是作者一路手动实操出来的,靠的是个人经验和盘感。但看完冒出一个念头:它说到底是一套纪律,而纪律这种东西,恰恰是人最容易失守、程序最容易守住的。从量化的角度,能不能把它复现出来?

复现的思路不是从零发明什么新策略,而是翻箱倒柜:我们以前已经做过、也跑过的几套现成东西——DCA 定投策略滚仓策略选币引擎(harness)——哪一套的天然行为,正好就是某个轮子要求的行为?对得上,就拿来填进去,再用资金流把它们串成一个闭环。

这篇的重点,是把“为什么选这三套、各自逻辑是什么、怎么对上了那个轮子”说清楚。

原文理念它要求的行为对应的策略
现金流极端行情不被迫卖出储备线机制
核心资产只买不卖、做时间的朋友DCA 定投策略
Alpha极小成本博极大收益、利润输送核心选币引擎找标的 + 滚仓策略做交易

img


轮子二:核心资产 ← DCA 定投策略

理念要求什么

原文对核心资产的定位是:用来复利,做时间的朋友,极端行情也不被迫卖出。它不是用来“做交易”的,是用来“持有并等待”的。隐含的动作只有一个——持续买入、永不主动卖出。

DCA 是什么

DCA 是 Dollar Cost Averaging 的缩写,中文叫“定期定额投资”,也就是通常说的“定投”。逻辑极其简单:每隔固定时间(比如每 7 天),不管当下价格高低,买入固定金额的资产。

它真正的威力在于市场下跌时:同样 200 美元,价格低时能买到更多份额,价格高时买得少,长期执行下来成本自然被摊平到一个合理位置。不需要判断高低点,不需要择时,只要持续执行。

更重要的是,DCA 从设计上就没有主动卖出的动作——它天然只会买,买完就拿着。这让它本质上是一台“只进不出、慢慢积累”的机器。

为什么是它:行为等价

“做时间的朋友”翻译成机器能执行的指令,就是“到点买、永不卖”。这和 DCA 删掉卖出逻辑之后剩下的全部内容,是行为等价的。不需要任何额外设计,把原本 DCA 里的止盈卖出功能拿掉,它就成了核心资产轮子的实现。

对应代码:

javascript
// 每隔 N 天,定额买入核心资产,只买不卖 if (now - lastDca >= DcaIntervalDays * 86400000) { var amount = sizeByCash(CoreSymbol, DcaAmount, CoreLeverage, price); marketOrder(CoreSymbol, "buy", amount); coreInvested += DcaAmount; // 记录累计成本,从不出现对应的减法 }

整个策略里找不到任何卖出核心资产的逻辑——这是刻意的,对应的就是“极端行情也不被迫卖出”。


轮子一:现金流 ← 储备线机制

理念要求什么

原文把现金流排在第一位,但它的意义不是用来发财,而是“在你最该上车的时候不被迫下车”。说白了:有稳定的现金流进账,就算市场暴跌、账面大幅缩水,你也不需要卖出资产去维持生活——熬过去,等到复利发生。

这是整套系统能运转的前提。没有这个保障,就算核心资产选得再好,遇到大跌被迫割了也是白搭。

在量化里怎么等价

现金流本质是账户之外的东西——工资、副业、打新收入。代码没有办法凭空造出收入。

但代码可以复现它的核心效果:永远不被迫卖出核心资产。做法是在账户里设一条储备线——账户中永远保留一定比例的缓冲资金,任何下单操作都不许动它。定投节奏本身加上这条线,就模拟了“现金流源源不断、从不断供”的状态。

实盘里,这条线的充裕程度,实际上就取决于你真实的外部现金流是否稳定。这一环也是三个里复现得最间接的——我们复现的是它的作用,不是它本身。

javascript
// 每次下单前检查:余额扣掉本次金额后不能低于储备线 var reserve = equity * ReserveFloorRatio; // 例如保留权益的 10% if (balance - DcaAmount < reserve) return; // 触线就跳过,守住最后的缓冲

轮子三:Alpha ← 选币引擎 + 滚仓策略

img

Alpha 这个轮子最复杂,需要拆成两半看:标的从哪来、拿到标的之后怎么交易。这两件事分别对应两套策略。

理念要求什么

原文说 Alpha 的意义是“用极小成本换取极大收益”,且强调:赚到的钱不能花掉,要全部输送到核心资产里,用来放大本金。

两个关键词:“极小成本”——意味着每一笔的亏损上限必须被封死,不能因为一次失误伤筋动骨;“极大收益”——意味着一旦做对,要让利润尽可能跑远,而不是小赚就跑。这是一个天然的不对称结构:坏的情况损失小,好的情况收益大。

上半:选币引擎(harness)——找到对的标的

加密市场有几百上千个永续合约品种,随机选一个套用策略,结果大概率是浪费时间甚至亏钱。选币引擎解决的就是“应该在哪些币上交易”这个问题。

第一层——成交量过滤

把所有 USDT 永续合约按美元成交量(价格 × 成交量)降序排列,保留前 120 名。

为什么用成交量做第一道筛?成交量大的币有两个好处:一是流动性足够,下单不会因为买卖价差大而被吃掉太多成本;二是有足够多的参与者在博弈,更容易形成可被捕捉的趋势。成交量小的山寨,价格容易被操控,再好的策略跑上去也无效。

第二层——均线回测打分

对每一个入围的币,用多组均线参数组合(比如 MA5/20、MA10/30、MA20/60)跑历史回测,计算每组参数的核心指标:胜率(盈利笔数占比)、盈亏比(平均盈利额 / 平均亏损额)、最大回撤、信号次数。再把结果加权为一个综合评分。

这一步是为了找出“均线策略在这个币上历史上是否真的有效”。不是每个币都趋势分明,有些币长期横盘震荡,均线信号全是假突破——这种币提前踢掉,不浪费子弹。

第三层——爆发潜力加分

在评分里额外加入两个动态因子:

  • 波动率分位:当前 ATR(平均真实振幅,衡量价格波动幅度的指标)处于历史数据的百分位。越靠近高位,说明当前波动相对历史偏大,更容易出现大行情。
  • 量能爆发系数:近 5 根 K 线的均量 ÷ 近 50 根 K 线的均量。如果这个值明显大于 1,说明近期成交量相对过去异常放大,可能正在发生资金涌入,是“潜力爆发”的早期信号。

这两个因子叠加,是为了在静态历史表现之外,额外偏向那些“当下正在发生异动”的标的。

最终输出一个白名单,通常是 3 到 5 个当前阶段综合得分最高的币。

javascript
// 选币引擎:成交量过滤 → 回测打分 → 爆发因子 → 白名单 var pool = tickers .filter(t => t.Symbol.endsWith("USDT.swap")) .sort(byQuoteVolumeDesc) .slice(0, TopVolumeN); for (var coin of pool) { var volPct = calcVolPct(records); // 波动率历史分位 var surge = calcVolumeSurge(records); // 近期量能爆发系数 var bt = bestBacktestScore(records, maParamsList); // 均线回测综合得分 var score = bt * 0.56 + volPct * VolSurgeBonus + surge * VolSurgeBonus; if (score >= threshold) whitelist.push(coin); }

下半:滚仓策略——以小博大

有了白名单,还需要一套交易方法。这里用的是我们之前写过的滚仓策略,它的机制和 Alpha 的不对称要求高度吻合。

什么是滚仓策略

它是一套基于均线交叉信号的期货趋势跟踪策略。

首先理解均线:把过去 N 根 K 线的收盘价做加权平均,就是 EMA(指数移动平均线)。EMA 给近期的价格更高权重,比普通均线反应更快。交叉信号是这样的:短周期 EMA(如 EMA5)从下方穿过长周期 EMA(如 EMA10),叫“金叉”,意味着短期涨势强于长期,是做多信号;反过来叫“死叉”,是做空信号。

“滚仓”指的是:每次止盈之后,如果均线方向仍然维持(说明趋势还在),就立刻重新开仓,继续跟着趋势持有。在一段强趋势里,这套方法可以把利润一轮一轮地滚动复利,不是赚一波就走。

每笔交易都有硬止损:价格反向运动超过设定幅度(比如 -8%)就强制平仓。这个止损把每一笔的最大亏损封了顶——不管行情多糟,单笔损失不会超过这个数字。这就是“极小成本”的机制来源。

为什么是它:不对称结构的匹配

Alpha 要求“成本极小且封顶 + 盈利尽可能大”——这是一个不对称的收益结构。滚仓策略天然具备这个结构:

  • 硬止损 = 每次下注的“票价”,输了最多亏这么多,不会再多
  • 移动止盈 + 滚动续仓 = 如果做对了,让利润跟着趋势跑,理论上没有固定上限

两者在结构上是同一件事的不同说法。具体代码:

javascript
// 成本封顶:触到硬止损立即离场——这是每笔下注的票价上限 if (pnlPct <= -AlphaStopPct) close("硬止损"); // 让利润奔跑:峰值越高,允许的回撤空间越大,给大赢家足够的呼吸室 var giveback = Math.max(15, maxPnl * 0.3); if (maxPnl - pnlPct >= giveback) close("移动止盈"); // 止盈后如果趋势仍在,滚仓继续持有——把利润复利 if (shouldRoll(records, direction)) openAlpha(direction, price);

有机整合:把 Alpha 的利润接回核心

选币引擎找到标的,滚仓策略产生收益,但这还不够——回到原文,Alpha 真正的价值是“给核心资产输送本金”。所以必须有一条资金线:Alpha 赚到的钱,单向买回核心资产;亏的时候,绝对不反过来动核心的本金。

javascript
// Alpha 已实现利润累计到一定额度,就买回核心资产 if (alphaPnlBank >= AlphaSweepMin) { var amt = sizeByCash(CoreSymbol, alphaPnlBank, 1, price); marketOrder(CoreSymbol, "buy", amt); // 利润流向核心,放大本金基数 coreInvested += alphaPnlBank; alphaPnlBank = 0; }

正是这条线,让三套各自独立的老策略,从“分别在跑”变成了“互相反哺的一个轮子”:定投持续喂核心,选币引擎挑出候选,滚仓以小博大,盈利再喂回核心,核心越来越大,后面要求的倍数越来越小。


量化在这里真正做了什么

总结一句话:复现的价值不在于“更聪明”,而在于“更守纪律”。

原文那套之所以难,不是逻辑难懂,而是人太难执行:暴跌时手痒想卖、大赚时 FOMO 追入、亏一点就想停手、急用钱时被迫割掉了本该拿着的核心资产。这些失误不是因为不懂道理,而是因为情绪。

代码不会被迫卖出(储备线兜底),不会 FOMO(只按白名单和信号动),不会停轮(亏光 Alpha 的小成本就等下一笔,绝不碰核心)。我们没有把这套理论变得更厉害,只是把里面最反人性的那几条,交给了一个不带情绪的执行者。


这只是一个比较浅的尝试

得说清楚,这远不是终点,而且有一环明显是不同路径的落地方式。

原文里真正的 Alpha——打新、预售、早期结构性机会——是依靠信息与资源实现以小搏大。而滚仓 + 均线选币,属于以小搏大的另一种实现形式,依托趋势行情赚取收益,二者路径不一样,但内核逻辑完全相通。震荡行情中,这套趋势策略难免会遭遇反复小止损的损耗,它和原生机会互为补充,共同构成 Alpha 收益来源。真正的稀缺机会还是要靠人去判断,赚到之后再手动按同一条线喂回核心。

另外,回测好看不代表实盘能赚。手续费、资金费、滑点,这些在回测里容易被忽略,实盘里会一点点吃掉边际。代码守住了纪律,但它不会在该保守的时候本能地踩刹车。

所以接下来该做的,不是急着上大资金,而是先用模拟盘和小仓位长期地跑:那几个轮子有没有在互相反哺,Alpha 那部分到底是在加分还是白忙。然后拿真实的数据,一轮一轮地修。

原文里那句话,用在打磨这套系统上同样成立——可以很慢,但是不能停。

(以上只是一种思路的记录,不构成投资建议。)

原文链接:我从零到千万的飞轮系统:现金流 · 核心资产 · Alpha

策略源码:飞轮量化系统

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)