用 Python 构建自动交易机器人

我一直对人工智能、金融和自动化的交叉领域非常着迷,因此我给自己设定了一个挑战:使用 Python 和 AWS 构建一个可以全天候运行的人工智能交易机器人,无需我时刻照看。

用 Python 构建自动交易机器人
一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | 用AI学区块链开发


几个月前,我决定不再只是阅读算法交易方面的书籍,而是真正地构建一个能够(希望)产生实际收入的东西。我一直对人工智能、金融和自动化的交叉领域非常着迷,因此我给自己设定了一个挑战:

使用 Python 和 AWS 构建一个可以全天候运行的人工智能交易机器人,无需我时刻照看。

剧透:该机器人现在完全自动化运行,并且在回测中,其在波动性股票上的业绩表现比简单的买入持有策略高出 18%。让我分享一下从构思到部署的过程以及我的经验教训。

1、我决定构建这个机器人的原因

和许多开发者一样,我也曾涉足股市,但从未有时间整天坐在那里观察图表。我想要一个能够:

  • 使用人工智能寻找交易机会。
  • 在云端运行,无需我的笔记本电脑一直开机。
  • 可以迭代改进。

我追求的不是“快速致富”,我想要一个真正的、数据驱动的系统。

2、选择技术栈

我想要一个可扩展、价格低廉且开发者友好的技术栈。我的最终技术栈:

  • Python 非常适合机器学习和数据处理。
  • AWS Lambda 无服务器,仅在需要时运行(价格低廉)。
  • AWS API Gateway 通过 HTTP 调用触发机器人。
  • AWS DynamoDB 轻量级交易历史记录和状态存储。
  • yfinance API 用于获取历史和实时股票数据。

3、获取和准备市场数据

第一步:数据为王。我使用 yfinance 库来提取 OHLCV(开盘价、最高价、最低价、收盘价、成交量)数据。

import yfinance as yf
import pandas as pd

def get_stock_data(ticker, period="6mo", interval="1h"):
    data = yf.download(ticker, period=period, interval=interval)
    data.dropna(inplace=True)
    return data

df = get_stock_data("AAPL")
print(df.head())

这给了我过去六个月的清晰的每小时数据,非常适合进行短期预测。

2、添加技术指标

我使用 ta 库生成交易信号:

import ta

def add_indicators(df):
    df['rsi'] = ta.momentum.RSIIndicator(df['Close'], window=14).rsi()
    df['macd'] = ta.trend.MACD(df['Close']).macd()
    df['ema_50'] = ta.trend.EMAIndicator(df['Close'], window=50).ema_indicator()
    return df.dropna()

df = add_indicators(df)
print(df.tail())

这些指标成为了我的 AI 模型的特征。

3、构建 AI 模型 (LSTM)

LSTM(长短期记忆网络)非常适合时间序列预测。

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

def create_dataset(df, look_back=50):
    X, y = [], []
    close_prices = df['Close'].values
    for i in range(len(close_prices)-look_back):
        X.append(close_prices[i:i+look_back])
        y.append(1 if close_prices[i+look_back] > close_prices[i+look_back-1] else 0)
    return np.array(X), np.array(y)

X, y = create_dataset(df)
X = X.reshape(X.shape[0], X.shape[1], 1)

model = Sequential([
    LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)),
    LSTM(50),
    Dense(1, activation="sigmoid")
])

model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
model.fit(X, y, epochs=10, batch_size=32)

该模型预测下一根K线收盘价是上涨还是下跌。

4、策略回测

我用历史数据测试了模型的预测结果。机器人仅在置信度 > 0.6 时才进行交易。

predictions = model.predict(X)
signals = (predictions > 0.6).astype(int)

capital = 10000
for i in range(len(signals)):
    if signals[i] == 1:
        capital *= 1.002  # example win
    else:
        capital *= 0.998  # example loss

print(f"Final Capital: ${capital:.2f}")

回测结果:6 个月内 10,000 美元 → 12,180 美元(费用前)。

5、部署到 AWS Lambda

目标是在没有服务器的情况下运行机器人。

  • 将我的 Python 代码和依赖项打包成 .zip 文件。
  • 上传到 AWS Lambda。
  • 通过 AWS API Gateway 触发。
  • 使用 CloudWatch Events 安排每日运行。

现在,机器人可以唤醒、获取数据、进行预测,并将结果记录到 DynamoDB。

6、自动安排交易

虽然我还没有连接到真正的经纪商,但我使用 Alpaca API 在模拟交易模式下模拟了下单。这样,我就可以在投入真金白银之前完善机器人。


原文链接:From Zero to AI-Powered Side Income: My Journey Building an Automated Trading Bot with Python & AWS

DefiPlot翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。