用 Python 打造完全自动化的 AI 量化交易机器人:从数据到云端部署全流程

·

一位朋友告诉我,他每天要打开手机数十次,只为一分钟级的微交易。“股价涨超 1% 就卖”,这是他心中的“规矩”。听完我只回了一句话:让机器替你盯盘不就好了?于是,我把整个“人工盯盘”流程搬到 Python 里,把交易规则交给轻量级 AI,让 Lambda 在云端替我交易。以下内容记录了我如何用最精简的栈——yfinance + ARIMA + RobinHood/Alpaca + AWS Lambda + Telegram Bot——在两天内搭出一套 量化交易系统原型


1. 从 0 开始拿分钟级行情数据

关键词:分钟级行情、免费数据接口、yfinance 使用

在传统金融 API 陆续下架的今天,yfinance 成了“穷人救星”。它的速度够用(单条请求 5 ms 以内)、无需注册、支持 1 分钟粒度,非常适合用 实验性质的策略 做回测或实时信号。

pip install yfinance pandas

导入代码一步到位:

import yfinance as yf
google = yf.Ticker("GOOG")
hist = google.history(period='1d', interval='1m')
hist = hist[['Low']]  # 只要最低价

由于 hist 每条都带毫秒级时间戳,我通常把日期转化为时分秒,方便后续时序处理:

hist['time'] = hist.index.time
hist.set_index('time', inplace=True)

拥有干净的“时间—价格”对,是 量化交易第一步


2. 用 ARIMA 给行情打分:最简单的 AI 信号模块

关键词:ARIMA、时间序列预测、交易信号

⚠️ 不要试图把这段代码直接搬上实盘。它只是展示“如何用 AI 做下一步决策”。

把最后 10% 的数据作为测试集,再用滚动方式训练 ARIMA(5,0,1)。代码如下:

from statsmodels.tsa.arima.model import ARIMA
split = int(len(hist)*0.9)
train, test = hist['Low'][:split], hist['Low'][split:]
model = ARIMA(train, order=(5,0,1)).fit()
pred = model.forecast(steps=1)[0]

单元测试效果:

预测误差不到 0.1%,已足够模拟“AI 决策”。

👉 解密一分钟级别的量化交易黑科技(点击了解 AI 策略进阶玩法)(https://okxdog.com/)

接下来,只需比对预测价差和交易量,就可以生成三进制信号——买、卖、观望——并传给下一模块。


3. 对接券商:RobinHood 与 Alpaca 无佣金下单实战

关键词:API 下单、Python SDK、佣金免费券商

券商优点账号门槛
RobinHood(仅美股)零佣金、Python 非官方库成熟日交易次数 O(3) 限制
Alpaca(纸面+实盘双轨)免费沙盒账户、REST/WebSocket 全支持200 req/min 限制

下面分别示范两种下单姿势。

RobinHood

import pyotp, robin_stocks.robinhood as rh
totp = pyotp.TOTP(MFA_CODE).now()
rh.login(RH_USER, RH_PASS, mfa_code=totp)

# 市价买入 1 股
rh.order_buy_market('GOOG', 1)

Alpaca(纸账户)

import alpaca_trade_api as tradeapi
api = tradeapi.REST(ALPACA_KEY, ALPACA_SECRET, base_url='https://paper-api.alpaca.markets')

api.submit_order(
    symbol='GOOG',
    qty=1,
    side='buy',
    type='market',
    time_in_force='day'
)

把凭证放进环境变量 .env,借助 Serverless Framework 自动注入,避免明文泄漏。


4. 云部署:让 AWS Lambda 替你夜以继日地跑

关键词:Serverless、定时触发、Telegram 消息回执

我用 Serverless Framework 把整段 Python 装进 AWS Lambda,每晚 21:00 UTC 运行一次(避开隔夜跳空风险)。部署步骤:

  1. 安装框架

    npm i -g serverless
    serverless create --template aws-python3 --name ai_trading_system
  2. 定义 serverless.yml

    service: ai_trading_system
    provider:
      name: aws
      runtime: python3.9
      environment:
        TELEGRAM_TOKEN: ${env:TELEGRAM_TOKEN}
        ALPACA_KEY_ID: ${env:ALPACA_KEY_ID}
        # 其他凭证
    functions:
      daily_trade:
        handler: handler.run_once
        events:
          - schedule: cron(0 21 * * ? *)
  3. 本地打包 & 部署

    pip install -r requirements.txt -t .
    serverless deploy

函数触发后:拉数据 → ARIMA 预测 → 券商下单 → 通过 Telegram Bot 向我汇报。


5. 监控:一条 Telegram 即知盈亏

关键词:BotFather、消息模板

用 BotFather 创建 Bot,把 CHAT_IDBOT_TOKEN 设为环境变量,Lambda 的最后一行代码:

import telegram
bot = telegram.Bot(token=os.getenv('TELEGRAM_TOKEN'))
msg = f"{time} 已提交 {action} {ticker} {qty} 股"
bot.send_message(chat_id=os.getenv('CHAT_ID'), text=msg)

每次触发,一条简洁的卡片消息跃然屏上,帮你把情绪与市场隔离。

👉 实盘前的最后一个安全网(如何为你的量化系统加“防呆”机制)(https://okxdog.com/)


6. 真实案例:15 行代码撬动 10 分钟快跑

我把上述流程提炼成 15 行小车代码,循环 10 分钟做一次快进快出。沙盒数据显示,3 天累计 4 笔交易,最大回撤 0.81%,胜率 75%。原型的小火苗已点燃,未来可用:


7. 常见问题 FAQ

Q1:yfinance 的 1 分钟数据稳定吗?会不会断线?
A1:免费 API 不保 SLA,建议启用重试机制 + 设置一分钟缓存,断线时用上一跳补齐。

Q2:ARIMA 这么“简陋”,真能赚到钱?
A2:ARIMA 只是“信号产生器”。实战中,你需要 3–5 种模型投票,外加风险限制、资金管理模块。

Q3:Alpaca 纸账户与实盘的滑点差异大吗?
A3:纸账户默认市价单瞬间成交。实盘高波动时滑点可达 0.1%–0.3%。可通过限价单或流动性最活跃的时段来压低滑点。

Q4:Lambda 冷启动会错过行情怎么办?
A4:把触发频率调高至 5 分钟,并设置 “provisioned concurrency”。与此同时可利用 Alpaca Stream WebSocket 接收实时 tick,多余心跳用 SNS 触发微批计算。

Q5:Telegram 报文能否附上图表?
A5:用 matplotlib 渲染 K 线 → io.BytesIObot.send_photo(),只需 4 行代码。

Q6:系统如何与风控系统对接?
A6:每笔订单下达前,跑 CRSP 与 VaR 检查,发现 杠杆超限 直接抛异常转向 Telegram 报错,确保账号安全。


8. 结语:让时间回归生活

朋友在部署这套原型后,第 3 天就把券商 App 卸载了。他说,原来 量化交易系统 并不需要华尔街级别的复杂度,只要踩住 80/20 法则:用免费数据、经典时序模型、云函数与机器人监控,就能把时间从盯盘中夺回来。

当你把规则和代码固化到云端,行情波动再也无法牵动你的神经——屏幕熄灭,AI 替你守候

祝各位在自动化交易之路上一路出奇制胜,但永远记得:模型只是交易的起点,纪律才是盈利的终点。