📘 目录
- 量化交易概述与系统架构
- 开发环境准备与常用库介绍
- 策略开发与回测:使用
backtrader
与bt
- 实时数据获取与行情订阅
- 对接实盘交易接口(Tushare、米筐 RiceQuant、掘金、聚宽)
- 交易信号执行模块设计
- 风险控制体系搭建
- 实盘部署架构(本地/云端)
- 实盘日志、监控与预警系统
- 常见问题与安全性注意事项
1. 量化交易概述与系统架构
一个完整的量化交易实盘系统通常包括:
- 策略模块:买卖逻辑,进出场规则
- 数据模块:行情、财报、技术指标、新闻等
- 回测模块:评估策略好坏
- 实盘交易模块:订单发送、确认、撤单等
- 风控模块:止损止盈、仓位管理、异常处理
- 日志/监控模块:交易记录、邮件/短信告警
架构如下:
+---------------+
| 策略模块 |
+-------+-------+
|
+-------v--------+
| 数据获取模块 |
+-------+--------+
|
+-------------v-----------------+
| 回测模块 <--> 实盘交易模块 |
+-------------+-----------------+
|
+-------v--------+
| 风险控制模块 |
+-------+--------+
|
+-------v--------+
| 日志与监控模块 |
+----------------+
2. 开发环境准备与常用库
📦 安装推荐库
pip install pandas numpy matplotlib backtrader tushare requests schedule pymongo
常用库用途说明:
库名 | 用途 |
---|---|
backtrader | 回测 + 实时数据交易 |
tushare | A股数据接口(需 token) |
schedule | 定时任务控制 |
requests | REST API 请求 |
pymongo | 日志数据库存储 |
3. 策略开发与回测(以 backtrader
为例)
import backtrader as bt
class MyStrategy(bt.Strategy):
def __init__(self):
self.sma = bt.indicators.SimpleMovingAverage(period=20)
def next(self):
if self.data.close[0] > self.sma[0]:
self.buy()
elif self.data.close[0] < self.sma[0]:
self.sell()
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(dataname="AAPL", fromdate=datetime(2022,1,1), todate=datetime(2023,1,1))
cerebro.adddata(data)
cerebro.addstrategy(MyStrategy)
cerebro.run()
cerebro.plot()
4. 实时数据获取(示例:Tushare)
import tushare as ts
ts.set_token('你的Token')
pro = ts.pro_api()
df = pro.daily(ts_code='000001.SZ', start_date='20240501', end_date='20240601')
print(df[['trade_date', 'close']])
5. 实盘交易接口对接(以掘金/JQData为例)
from jqdatasdk import auth, get_price
auth('你的账户', '你的密码')
data = get_price('000001.XSHE', count=10, frequency='daily')
print(data)
如需接入券商真实交易接口(如华泰、银河),建议使用:
易量化 ricequant
(支持 A股模拟 + 实盘)vn.py
(支持期货、股票、加密币等多交易所接入)
6. 信号执行模块设计(核心)
def execute_trade(signal, symbol, amount):
if signal == "buy":
# 调用 API 下买单
print(f"买入:{symbol},数量:{amount}")
elif signal == "sell":
print(f"卖出:{symbol},数量:{amount}")
搭配策略输出信号判断:
if ma_5 > ma_10:
execute_trade("buy", "000001.XSHE", 100)
7. 风险控制体系搭建
常见风险控制方法:
- 最大回撤限制(如 10% 自动平仓)
- 仓位比例管理(如不超 30%)
- 止盈止损策略(如涨跌 5% 触发)
max_drawdown = 0.1
if current_nav < (1 - max_drawdown) * start_nav:
close_all_positions()
8. 实盘部署架构
✅ 本地部署建议:
- 用
schedule
每日定时运行 - 配合本地日志系统(如 loguru)
✅ 云端部署(推荐):
平台 | 优势 |
---|---|
阿里云 ECS | 可运行长期脚本,支持 Python |
腾讯云函数 SCF | 轻量,适合轻策略 |
Render/Vercel | 适合做可视化 Dashboard |
9. 日志与监控系统
日志模块(loguru):
from loguru import logger
logger.add("trading.log", rotation="1 MB")
logger.info("策略启动")
logger.warning("仓位过高")
logger.error("网络请求失败")
邮件告警:
import smtplib
from email.mime.text import MIMEText
def send_alert(msg):
message = MIMEText(msg)
message["Subject"] = "交易系统告警"
message["From"] = "your@email.com"
message["To"] = "alert@email.com"
smtp = smtplib.SMTP_SSL("smtp.example.com", 465)
smtp.login("your@email.com", "密码")
smtp.send_message(message)
smtp.quit()
10. 常见问题与安全建议
问题 | 建议 |
---|---|
网络异常中断 | 使用重试机制(如 retrying 库) |
接口限速/封禁 | 加代理池或切换备用 API |
实盘大额交易失败 | 加入滑点容忍度,批量分单处理 |
策略 bug 导致满仓或反向下单 | 加入逻辑校验、异常监控、回测前测试 |
安全问题(API泄露) | 配置环境变量保存敏感信息,不写死代码中 |
发表回复