📘 目录

  1. 量化交易概述与系统架构
  2. 开发环境准备与常用库介绍
  3. 策略开发与回测:使用 backtrader 与 bt
  4. 实时数据获取与行情订阅
  5. 对接实盘交易接口(Tushare、米筐 RiceQuant、掘金、聚宽)
  6. 交易信号执行模块设计
  7. 风险控制体系搭建
  8. 实盘部署架构(本地/云端)
  9. 实盘日志、监控与预警系统
  10. 常见问题与安全性注意事项

1. 量化交易概述与系统架构

一个完整的量化交易实盘系统通常包括:

  • 策略模块:买卖逻辑,进出场规则
  • 数据模块:行情、财报、技术指标、新闻等
  • 回测模块:评估策略好坏
  • 实盘交易模块:订单发送、确认、撤单等
  • 风控模块:止损止盈、仓位管理、异常处理
  • 日志/监控模块:交易记录、邮件/短信告警

架构如下:

              +---------------+
              | 策略模块      |
              +-------+-------+
                      |
              +-------v--------+
              | 数据获取模块   |
              +-------+--------+
                      |
        +-------------v-----------------+
        |  回测模块  <--> 实盘交易模块  |
        +-------------+-----------------+
                      |
              +-------v--------+
              | 风险控制模块   |
              +-------+--------+
                      |
              +-------v--------+
              | 日志与监控模块 |
              +----------------+

2. 开发环境准备与常用库

📦 安装推荐库

pip install pandas numpy matplotlib backtrader tushare requests schedule pymongo

常用库用途说明:

库名用途
backtrader回测 + 实时数据交易
tushareA股数据接口(需 token)
schedule定时任务控制
requestsREST 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泄露)配置环境变量保存敏感信息,不写死代码中

📚 参考资料与推荐项目