记录一次换赛道(2026-07-06)
记录一次换赛道(2026-07-06)
承认一条路走不通,比修好它更难
新币模拟跟单这条路,我走了很久。
这天不再往里面加策略了,而是把一件早就该写下来的事写下来:经 http://0.0.0.0:8501/ 验证,模拟跟单新币完全不赚钱。 然后转了方向——用策略交易主流币,BTC、ETH、SOL 这些。
先把结论摆出来
数据本身没有再辩的余地:
- 总交易 2301 笔,全部是新币 / meme 币
- 总亏损 −$1,876
- 平均每笔 −3.7%
- 涉及 518 个不同代币,全是 Sol / Bsc / Base 链上的垃圾币
亏钱不稀奇,稀奇的是 518 个代币、2301 笔之后,还是同一个方向的负收益。这说明问题不在某一次判断,而在策略依赖的那个市场本身。
盘一下手上的牌
转赛道之前,先看清楚自己有什么。第一轮盘点是这样的:
| 资源 | 状态 | 能干什么 |
|---|---|---|
| GMGN API Key | ✅ 有 | DEX 链上交易 SOL/ETH/BSC/Base——不支持 BTC |
| Helius Key | ✅ 有 | Solana RPC 节点 |
| CoinGecko API | ✅ 有(免费 30 次/分) | 价格数据、市场行情 |
| pandas + numpy | ✅ 已装 | 数据处理 |
| MySQL | ❌ 没跑 | 之前的数据库不可用 |
| ccxt(交易所库) | ❌ 没装 | 统一交易所接口 |
| TA 指标库 | ❌ 没装 | 技术分析 |
第二轮把 MySQL 那格纠正过来了:本地 MySQL 其实在跑,库 cypto_cache,37 张表;mysql-connector、requests 也已装。
真正缺的是三样:交易所接口(ccxt)、技术指标库、以及主流币 K 线的存储表。
不上 CEX,去链上
盘点里最硬的一条是:GMGN 只做 DEX,不支持 BTC。 所以第一反应是"那得上 CEX,去 Binance / OKX 开个 API Key"。
但随即确认了一件事:不上 CEX,用链上的合约。
链上的永续合约一样能做多空,而且手里的 GMGN Key 和 Helius 本来就在。方向定下来之后,需要补的就只剩工具:装 ccxt、装 ta、写一个 BTC/ETH/SOL 的历史 K 线拉取脚本。
顺便定了几条硬约束:脚本不能跑死、数据量太大要想办法优化、历史数据要落库、**展示界面用 http://0.0.0.0:8501/**。
先把 K 线搬进库里
先装库,再写模块 maincoin_kline.py,然后拉数据。
第一次跑就撞墙:Binance API 被墙了。
查下来是 Clash 在跑,但代理环境变量没设。给模块补上 127.0.0.1:7890 代理之后通了,BTC/ETH/SOL 日线 60 条入库,再拉 4h 数据也顺利。
拉到后面,库里是这样的:
| 交易对 | 周期 | 数据量 | 时间范围 |
|---|---|---|---|
| BTC/ETH/SOL | 1d | 各 60 条 | 2026-05-08 → 2026-07-06 |
| BTC/ETH/SOL | 4h | 各 540 条 | 2026-04-07 → 2026-07-06 |
点一次「一键拉取全部」之后,8595 条 K 线,三个币各 4 个周期全覆盖。
模块里定了几条防呆规则:增量更新(只拉库里缺的)、防卡死(15 秒超时 + 3 次重试 + 200 次最大迭代)、批量写入(每 500 条一批 INSERT)、**INSERT IGNORE**(重复数据自动跳过)。同时加了 15 号页「主流币 K 线行情」,K 线用 Plotly 暗色主题,叠 MA7/25/99、RSI、MACD、布林带。
先跑两条最简单的路
数据齐了,写三套策略:双均线趋势(MA7/MA25 交叉 + RSI 过滤 + MA99 确认)、布林带回归(触上下轨 + RSI 确认)、多周期共振(日线 + 4h + 1h 三周期共振)。先拿前两套去回测:
| 交易对 | 策略 | 交易数 | 胜率 | 收益 | 夏普 |
|---|---|---|---|---|---|
| BTC/USDT | 双均线 | 21 | 38.1% | −1.6% | −3.49 |
| BTC/USDT | 布林带 | 20 | 55.0% | +0.1% | −0.37 |
| ETH/USDT | 双均线 | 18 | 55.6% | +1.4% | 1.95 ✅ |
| ETH/USDT | 布林带 | 21 | 38.1% | −2.6% | −4.98 |
| SOL/USDT | 双均线 | 18 | 44.4% | −0.6% | −1.11 |
| SOL/USDT | 布林带 | 23 | 39.1% | −3.0% | −4.89 |
初步结论:ETH + 双均线最好(夏普 1.95,正收益),BTC 偏弱,SOL 波动太大,布林带在当前市场不如趋势策略。
从 3 个币到 10 个币
三个币的样本太薄,于是把范围扩大:排除稳定币,取成交量前十。
最终确认的 Top 10 是:BTC、ETH、SOL、XLM、BNB、XRP、ZEC、TRX、DOGE、TLM。把预计算脚本改成自动取成交量前 10 并建表,页面从 DB 动态读币种列表,重跑一遍——约 110 秒,10 个币 × 2 套策略 = 20 个回测结果,18713 条 K 线。
按夏普排,亮点是这样:
- 🏆 ZEC + 双均线:+28.3%,夏普 8.79
- TLM + 布林带:+11.4%,夏普 2.93
- DOGE + 布林带:+4.6%,夏普 2.34
- ETH + 双均线:+1.4%,夏普 1.95
ZEC 这个 8.79 的夏普很好看,但也最需要警惕——样本里的极端值,往往不是策略的常态。 记下来,但不当结论用。
页面只读库,不计算
中途改了一次架构,值得单独记。
原本三个 Tab 都是按钮触发计算,后来要求打开页面就自动跑,再后来要求预计算存库、页面秒加载。于是有了 mc_precompute.py:
1 | python mc_precompute.py ← 每次跑一次,25 秒搞定 |
页面改成零计算、纯 SELECT。踩的坑也都记着:signal 是 MySQL 保留字,要加反引号;MySQL 5.6 不支持 JSON 类型,改成 TEXT。
把计算从"打开时"挪到"预计算时",是这类看板唯一能既快又稳的做法。
只用了两个数据源
最后一件事,是重新看了一遍"我们到底有多少牌"。
答案是:手上 10 多个数据源,策略只用到了 2 个——K 线(OHLCV)和技术指标(RSI/MACD/MA/BB)。Order Book、逐笔成交、资金费率、CoinGecko 市场数据、GMGN 链上数据,全都没用上。
这一看就知道,双均线 + 布林带只是最薄的起点。真正能在链上合约上做的,有 14 个方向:
- 资金费率类:费率反转、费率趋势共振、费率套利
- 持仓量类:OI 背离、多空比反转、清算磁吸
- 量价类:盘口不平衡、鲸鱼追踪、放量突破
- 技术指标类:ADX 多周期、SuperTrend、RSI 背离+量
- 宏观类:BTC 主导率、恐贪逆向
而且链上合约有它独有的数据优势:资金费率、未平仓量、多空比、链上订单簿——这些是 CEX 策略拿不到的一手信息。
于是最后一句定下来:全部做进去。
第二天做的,就是这件事。
最后
三层。
表面是一次换赛道:新币跟单停了,主流币策略开始了。2301 笔、−$1,876 是这条旧路的墓志铭。
中间是一次资源盘点:GMGN 不支持 BTC,所以要么上 CEX、要么做链上合约;本地 MySQL 其实一直在跑;缺的是 ccxt、TA 库和 K 线表。方向的选择,最后是被"手上有什么牌"决定的,不是被"我想做什么"决定的。
最里面一层,是承认失败这件事的难度。
修一个 bug 是舒服的——你总能感觉到自己在接近答案。但承认整条路不赚钱,是把自己的努力判了死刑。2301 笔里每一次调参、每一个版本号,都是投入,人是有沉没成本的。
但它必须被承认。在一个不赚钱的市场里继续优化策略,不是勤奋,是在错误的地基上盖楼。 那天之后我把这句话又写了一遍:先看清自己站在什么样的地上,再决定要不要往上盖。