从零搭建一个能实盘跑的加密货币量化交易系统
目录
手动盯盘太累,尤其是夜里波动大,白天又要上班。折腾了一套能自动跑起来的系统,现在基本稳定跑几个月了,来整理一下全过程。
1 一、项目初衷:为了解放双手 + 控制情绪
手动交易最大的问题是受情绪影响大,经常一冲动就追涨杀跌。我想要的系统目标只有三个:
- 能自动拉行情;
- 能自动判断买卖信号;
- 满足条件就自动下单。
其他都可以慢慢补。
2 二、准备工作:环境、平台、语言选型
我选的是 币安(Binance) 做交易平台,因为接口文档清晰,手续费低。
语言我用的是 Python,理由也很简单:
- 熟悉;
- 第三方库多,像
ccxt
就能搞定大部分交易所 API; - 部署也方便。
环境是阿里云的轻量应用服务器,配置 2C2G,够用了。
3 三、系统架构和模块设计
整个系统拆分成几个模块:
3.1 1. 数据模块:拉取实时行情
这里用 ccxt
封装了一层,支持币安现货和合约:
import ccxt
exchange = ccxt.binance({
'apiKey': '你的APIKey',
'secret': '你的Secret',
})
def get_price(symbol='BTC/USDT'):
ticker = exchange.fetch_ticker(symbol)
return ticker['last']
我设置的是每 10 秒更新一次价格,写了个 loop + sleep。
3.2 2. 策略模块:双均线 or 布林带
我先试了最经典的双均线交叉(短期均线上穿长期均线买入,反之卖出),后面又加了 RSI 滤波。
指标计算用的是 ta-lib
,但有点难装,我就手撸了:
def moving_average(data, window):
return sum(data[-window:]) / window
建议你先别搞太复杂,简单逻辑才能先跑起来。 后面很多数据处理 很多指标,效率有点跟不上。要更快 ,用了 ta-lib。
3.3 3. 下单模块
下单用的也是 ccxt
:
exchange.create_market_buy_order('BTC/USDT', 0.001)
这里必须做下单前的余额检查,不然容易报错:
balance = exchange.fetch_free_balance()
if balance['USDT'] > 20:
# 才去挂单
3.4 4. 风控模块
我设置了几个安全开关:
- 单日最大交易次数;
- 单笔最大金额;
- 异常断线自动暂停。
系统运行时自动写日志和 Telegram 报警。
4 四、部署和守护进程配置
4.1 本地测试没问题后,我把代码部署到云服务器
- 创建 Python 虚拟环境;
- 安装依赖;
- 用
screen
或pm2
守护脚本; - 用 crontab 做每日自动重启。
screen -S bot
python3 main.py
或者你也可以用 supervisor
来做守护,方便监控和重启。
5 五、实际运行效果
跑了大概三个月,开始用了 500 USDT 做实盘测试。
- 第一个月小亏:调参中,滑点太大。
- 第二个月稍微盈利:加入 RSI 过滤,胜率上升。
- 第三个月稳定盈利中:风控+策略改进,避免频繁交易。
收益不高,但系统跑得稳,不用天天看盘。
6 六、遇到的一些坑
问题 | 解决方法 |
---|---|
API 请求频繁被限制 | 加 time.sleep + 设置节流 |
下单失败未处理 | 加 retry + failover 机制 |
Python 脚本偶尔死掉 | 用 supervisor 保活 |
网络异常数据不准 | 加时间同步(ntp)脚本 |
- 别一开始就追求复杂策略,先让它跑起来;
- 系统稳定优先,逻辑可以慢慢优化;
- 实盘和回测差异大,要做好心理准备;
- 加密交易风险高,控制仓位最重要。