You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助AWS实现Python交易机器人仅在特定时段自动启停?

基于AWS实现Python交易机器人定时启停方案

方案1:EC2实例 + EventBridge(推荐,适合持续运行的机器人)

这种方案适配需要长时间运行的交易机器人,通过定时启停EC2实例控制运行时段,同时确保实例启动后自动拉起机器人。

步骤1:配置EC2实例自动启动机器人

将Python交易机器人注册为系统服务,保证EC2实例启动后自动运行:

  1. 在EC2实例上创建systemd服务文件 /etc/systemd/system/trading-bot.service,内容如下:
[Unit]
Description=Trading Bot Service
After=network.target

[Service]
User=ec2-user  # 根据你的实例用户调整
WorkingDirectory=/home/ec2-user/trading-bot  # 机器人代码所在目录
ExecStart=/usr/bin/python3 bot.py  # 机器人启动命令
Restart=on-failure  # 机器人崩溃时自动重启
RestartSec=5
StandardOutput=journal+console
StandardError=journal+console

[Install]
WantedBy=multi-user.target
  1. 启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable trading-bot
sudo systemctl start trading-bot

验证服务状态:sudo systemctl status trading-bot

步骤2:用EventBridge创建定时启停规则

EventBridge(原CloudWatch Events)可按指定时间触发EC2实例的启动/停止操作,务必设置交易时段对应的时区(比如美股交易用America/New_York):

创建启动规则

  • 规则名称:Start-Trading-Bot-Instance
  • 规则类型:Schedule expression
  • 调度表达式:cron(25 9 ? * MON-FRI *)(每周一到周五9:25启动,提前5分钟确保实例就绪)
  • 目标:选择EC2实例,动作选启动实例,指定你的EC2实例ID
  • 时区:设置为America/New_York

创建停止规则

  • 规则名称:Stop-Trading-Bot-Instance
  • 规则类型:Schedule expression
  • 调度表达式:cron(35 16 ? * MON-FRI *)(每周一到周五16:35停止,延后5分钟让机器人完成收尾)
  • 目标:选择EC2实例,动作选停止实例,指定你的EC2实例ID
  • 时区:设置为America/New_York

方案2:ECS Fargate + EventBridge(更灵活,按运行时长计费)

若不想长期占用EC2实例,可将机器人打包为Docker镜像,用ECS Fargate运行,通过EventBridge定时启动/停止任务:

步骤1:打包机器人为Docker镜像

创建Dockerfile:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY bot.py .
CMD ["python", "bot.py"]

构建并推送到ECR(AWS容器镜像仓库)。

步骤2:配置ECS任务定义

创建Fargate类型的任务定义,指定你的镜像、资源配置(CPU/内存)。

步骤3:EventBridge定时触发任务

  • 启动规则:调度表达式cron(30 9 ? * MON-FRI *),目标选择ECS任务,指定集群、任务定义、启动数量1
  • 停止规则:调度表达式cron(30 16 ? * MON-FRI *),目标选择ECS任务,动作选停止任务,指定集群和任务标识

补充:代码层面的时段校验(双重保障)

为避免意外情况(比如实例提前启动),可在机器人代码中加入时段检查逻辑,不在交易时段时自动退出:

import datetime
import time
import pytz

def is_trading_hours():
    tz = pytz.timezone('America/New_York')
    now = datetime.datetime.now(tz)
    # 周一到周五,9:30-16:30
    if now.weekday() not in range(5):
        return False
    start_time = datetime.time(9, 30)
    end_time = datetime.time(16, 30)
    return start_time <= now.time() <= end_time

while True:
    if not is_trading_hours():
        print("不在交易时段,退出机器人")
        break
    # 机器人核心逻辑
    run_trading_strategy()
    time.sleep(60)  # 按需求调整间隔

内容的提问来源于stack exchange,提问作者Nicolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:26:02