记录一次主流币系统的落地(2026-07-07)
记录一次主流币系统的落地(2026-07-07)
把"想做"变成"在做",中间隔的是一个能自己跑起来的系统
前一天定了方向:做链上合约可用的 14 个高级策略,全部做进去。
这天就是落地——数据采集层、14 个策略引擎、回测引擎、预计算脚本、展示页,以及第一批真实仓位。
14 个策略,分五类
策略清单这么落:
| 类别 | 策略 |
|---|---|
| A. 资金费率类 | 1. 费率反转 · 2. 费率趋势共振 · 3. 费率套利 |
| B. 持仓量类 | 4. OI 背离 · 5. 多空比反转 · 6. 清算磁吸 |
| C. 量价类 | 7. 盘口不平衡 · 8. 鲸鱼追踪 · 9. 放量突破 |
| D. 技术指标类 | 10. ADX 多周期 · 11. SuperTrend · 12. RSI 背离+量 |
| E. 宏观情绪类 | 13. BTC 主导率 · 14. 恐贪逆向 |
有几条是链上独有的:资金费率、未平仓量、多空比、链上订单簿——数据透明、CEX 拿不到。这也是"链上合约"这个选择真正的价值所在。
从数据到页面,一共六个模块
落地的文件是这些:
| 文件 | 功能 |
|---|---|
maincoin_data.py |
数据采集层(费率 / OI / 多空比 / 订单簿 / 大单 / 全球情绪 / 高级指标) |
maincoin_strategy.py |
14 个策略引擎 + 兼容旧策略 |
maincoin_backtest.py |
回测引擎(兼容新旧策略) |
mc_precompute.py |
预计算脚本(采集 + 策略 + 回测) |
pages/16_maincoin_strategy.py |
策略中心展示页(4 个 Tab) |
pages/17_maincoin_paper.py |
独立模拟交易页 |
写的过程中撞了几个必须记的坑:
signal是 MySQL 保留字——建表时报1064语法错误,加反引号解决;后来替换成新策略引擎时,又批量修了一轮- 表缺
adx列——14 个策略里新增的技术指标字段 - 回测
PARAMS缺旧 key——新策略引擎替换了旧函数名,回测报参数缺失,加回兼容函数才跑通 - SuperTrend 的 Series 比较问题——DataFrame 操作下比较 Series 出问题,最后把这条策略简化成 MA 交叉的实现
改的时候守了一条:只动新建的表,不碰原有页面的任何代码。 一个新模块不该以打坏旧页面为代价。
库里多出来的那几张表
预计算跑完,多了这么几张表:
| 表名 | 用途 |
|---|---|
mc_top_coins |
成交量前 10 币种列表 |
mc_perp_data |
链上合约实时数据(费率、OI、多空比等) |
mc_bt_results |
回测结果 + 净值曲线 + 交易记录 |
mc_signals_latest |
14 个策略最新信号 |
mc_sim_account |
模拟账户 |
mc_sim_positions |
实时持仓 |
mc_sim_trades |
已平仓交易记录 |
信号跑完一共 140 条,分布是 35 LONG / 5 SHORT / 100 HOLD。当前最强的几条:
| 信号 | 置信度 | 原因 |
|---|---|---|
| BTC funding_trend LONG | 90% | 趋势多头 + 费率正 + ADX=32 |
| ETH funding_trend LONG | 90% | 趋势多头 + 费率正 + ADX=45 |
| ZEC whale_tracking LONG | 90% | 鲸鱼买入 买卖比=15.5 |
| BTC orderbook_imbalance SHORT | 85% | 卖盘强势 imbalance=−0.77 |
从"点按钮"到"打开就有"
展示层的要求一路在变,最后定型成一句话:页面只读库,零计算。
策略概览、实时信号、回测三个 Tab 全部改成打开即显示,不再有任何 st.button()。数据由 python mc_precompute.py 提前算好写库。
这样做的好处很直接:打开页面是秒级,而且每次看到的是同一份"快照",不用怀疑两个人刷出来的数不一样。
5 个初始仓位
系统跑起来了,但模拟交易里一笔交易都没有。查下来是个典型的"没接线"问题:
模拟交易读的是旧表 mc_sim_signals(0 条),而 14 个策略的结果在 mc_signals_latest(40 条活跃信号)。两个系统根本没打通。
修 maincoin_paper.py 改成读 mc_signals_latest,同时让它跳过没有合约的币种(TLM 就会卡住),然后跑了一轮,开出 5 个多头仓位:
| 交易对 | 方向 | 入场价 | 仓位 | 策略 |
|---|---|---|---|---|
| BTC/USDT | LONG | $61,634 | $1,500(15%) | 费率趋势共振 |
| ETH/USDT | LONG | $1,734 | $1,500(15%) | 费率趋势共振 |
| BNB/USDT | LONG | $571 | $1,500(15%) | 费率趋势共振 |
| XRP/USDT | LONG | $1.11 | $1,500(15%) | 费率趋势共振 |
| TRX/USDT | LONG | $0.33 | $1,500(15%) | 鲸鱼追踪 |
账户:现金 $2,500 + 持仓 $7,500 = 总资产 $10,000。策略来源是 funding_trend(4 个)加 whale_tracking(1 个)。
顺带算了个粗账:按当前仓位和信号频率,每年大概 50-100 笔交易,预期年化 15-30%——但这个数字只是估算,先记着,别当真。
一个 account_id 的错
仓位开好了,页面却显示"无持仓"。
数据库里明明有 5 条 OPEN 记录。查到最后:是手动开仓时参数传错了——account_id 填成了 10000(余额值),应该是 1(账户 ID)。数据修正到 account_id=1 之后,页面上就正常了。
页面这边也顺手做了调整:16 号页去掉重复的「模拟交易」Tab(和 17 号页功能完全重复,而且原来还缺 load_kline_df 导入会报错),现在只留策略概览 / 实时信号 / 回测;17 号页把交易记录从 st.write() 文本行改成 st.dataframe() 结构化表格,列包括币种、方向、入场价、出场价、盈亏、盈亏%、策略、原因、平仓时间。
最后
三层。
表面是 14 个策略、7 张表、5 个仓位——一夜之间,系统从"两个技术指标"长成了一个有点像样的策略中心。
中间是一条工程规律:一个新系统能不能自己跑起来,不取决于策略写得多漂亮,而取决于那些接缝有没有接上。模拟交易读错表、account_id 传错、signal 撞保留字——每一个都是小得不能再小的错,但每一个都足以让整个系统看起来"是坏的"。
最里面一层,是那 5 个 $1,500 的仓位。
它们全部来自实证出来的信号,而不是我拍的脑袋。可即便如此,它们也只是模拟——是这套系统第一次真的把钱当成有重量的东西去用。从这天起,14 个策略不再是一份清单,而是要在真实价格上接受检验的十几个赌注。
一个策略系统真正的起点,不是它跑通的那一刻,而是它第一次需要为自己的仓位负责的那一刻。