一位朋友告诉我,他每天要打开手机数十次,只为一分钟级的微交易。“股价涨超 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]单元测试效果:
- 真实下一分钟低:1776.40
- 预测:1776.39
预测误差不到 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 运行一次(避开隔夜跳空风险)。部署步骤:
安装框架
npm i -g serverless serverless create --template aws-python3 --name ai_trading_system定义
serverless.ymlservice: 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 * * ? *)本地打包 & 部署
pip install -r requirements.txt -t . serverless deploy
函数触发后:拉数据 → ARIMA 预测 → 券商下单 → 通过 Telegram Bot 向我汇报。
5. 监控:一条 Telegram 即知盈亏
关键词:BotFather、消息模板
用 BotFather 创建 Bot,把 CHAT_ID 与 BOT_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%。原型的小火苗已点燃,未来可用:
- 用 Prophet、XGBoost 或 LSTM 取代 ARIMA,提升 预测精度
- 用日线+分钟线双级数据做 多时间 windows
- 把训练片段迁移到 SageMaker Endpoint,用 GPU 加速特征工程
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.BytesIO → bot.send_photo(),只需 4 行代码。
Q6:系统如何与风控系统对接?
A6:每笔订单下达前,跑 CRSP 与 VaR 检查,发现 杠杆超限 直接抛异常转向 Telegram 报错,确保账号安全。
8. 结语:让时间回归生活
朋友在部署这套原型后,第 3 天就把券商 App 卸载了。他说,原来 量化交易系统 并不需要华尔街级别的复杂度,只要踩住 80/20 法则:用免费数据、经典时序模型、云函数与机器人监控,就能把时间从盯盘中夺回来。
当你把规则和代码固化到云端,行情波动再也无法牵动你的神经——屏幕熄灭,AI 替你守候。
祝各位在自动化交易之路上一路出奇制胜,但永远记得:模型只是交易的起点,纪律才是盈利的终点。