跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

200 行 Python 构建 AI 量化交易系统

介绍使用 Python 构建轻量级 AI 量化交易系统的完整流程,涵盖数据获取、特征工程、LightGBM 模型训练、事件驱动回测及实盘部署。系统基于 ccxt 连接交易所,利用技术指标与情绪代理生成特征,通过二分类预测涨跌。回测显示在 BTC 15 分钟周期下实现正收益,强调风控模块的重要性。代码约 200 行,适合快速验证策略。

二进制发布于 2026/3/26更新于 2026/7/2850 浏览

架构概览

┌-------------┐    ┌-------------┐    ┌-------------┐    ┌-------------┐
│  数据层      │───▶│  特征工程   │───▶│  模型层     │───▶│  执行层     │
│             │    │             │    │             │    │             │
│ ① REST/WebSocket │ ② 技术指标 + 情绪 │ ③ LightGBM  │ ④ 现货/合约报单 │
│ 历史 + 实时   │    │ 时序交叉特征  │    │ 二分类/回归  │    │ 风控 + 仓位 + 滑点 │
└-------------┘    └-------------┘    └-------------┘    └-------------┘

环境准备

依赖版本一键安装
Python3.10+conda create -n ai_quant python=3.10
ccxt4.2.xpip install ccxt
LightGBM4.xpip install lightgbm
ta0.10pip install ta
pandas/numpylatestpip install pandas numpy

提示:Win/Mac/Linux 均可;火币/OKX 均提供国内直连 REST 端点。

数据层:30 秒拉取 2 年 K 线

import ccxt, pandas as pd, time

def fetch_ohlcv(exchange='okx', symbol='BTC/USDT', timeframe='15m', limit=1000):
    ex = getattr(ccxt, exchange)({'hostname': 'okx.com'})  # 国内线路
    ohlcv = ex.fetch_ohlcv(symbol, timeframe, limit=limit)
    df = pd.DataFrame(ohlcv, columns=['ts','open','high','low','close','vol'])
    df['ts'] = pd.to_datetime(df['ts'], unit='ms')
    return df

df = fetch_ohlcv()
print(df.tail())

特征工程:把 K 线变成'AI 看得懂'的表格

特征类别具体字段说明
基础价格return_1, return_5, return_151/5/15 根 K 线累收益
技术指标rsi_14, macd, atr_14ta 库一行代码
时序交叉ma_5/ma_30, macd_signal多周期共振
情绪代理vol_pct(成交量 5 日均比)放量突破信号

核心代码(向量化,无 for 循环):

import ta

def add_feature(df):
    df = df.copy()
    df['ret'] = df['close'].pct_change()
    for i in [1,5,15]:
        df[f'ret_{i}'] = df['ret'].rolling(i).sum()
    df['rsi'] = ta.momentum.rsi(df['close'], 14)
    macd = ta.trend.MACD(df['close'])
    df['macd'] = macd.macd()
    df['atr'] = ta.volatility.AverageTrueRange(df['high'],df['low'],df['close']).average_true_range()
    df['vol_pct'] = df['vol']/df['vol'].rolling(5).mean()
    return df.dropna()

模型层:LightGBM 二分类'涨跌'

目标:预测下一根 K 线涨跌(分类),或收益率(回归)。这里用分类,胜率高且好调仓。

import lightgbm as lgb
from sklearn.model_selection import train_test_split

def build_label(df, horizon=1):
    df['label'] = (df['close'].shift(-horizon) > df['close']).astype(int)
    return df.dropna()

feature_cols = [c for c in df.columns if c not in ['ts','label','close']]
X, y = df[feature_cols], df['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
clf = lgb.LGBMClassifier(n_estimators=300, max_depth=-1, learning_rate=0.05)
clf.fit(X_train, y_train, eval_set=[(X_test, y_test)], early_stopping_rounds=50, verbose=0)
print('AUC:', clf.best_score_['valid_0']['auc'])

回测:200 行完整事件驱动框架

不依赖 backtrader,纯 pandas 向量化,1 秒回测 5 年 15 min 数据。

class EventBacktest:
    def __init__(self, df, clf, initial=10_000, fee=0.0005):
        self.df = df
        self.clf = clf
        self.cash, self.pos = initial, 0.
        self.fee = fee
        self.records = []
    
    def run(self):
        for i, row in self.df.iterrows():
            if i < 200: continue  # 冷启动
            feat = row[feature_cols].values.reshape(1,-1)
            pred = self.clf.predict_proba(feat)[0,1]
            price = row['close']
            # 10U 战神打法:信号>0.55 满仓,<0.45 清仓
            if pred > 0.55 and self.pos == 0:
                self.pos = (self.cash * 0.99) / price
                self.cash -= self.pos * price * (1+self.fee)
                self.records.append(('buy', price, self.pos, self.cash))
            elif pred < 0.45 and self.pos > 0:
                self.cash += self.pos * price * (1-self.fee)
                self.records.append(('sell', price, 0, self.cash))
                self.pos = 0
            # 强平
            if self.pos > 0:
                price = self.df['close'].iloc[-1]
                self.cash += self.pos * price * (1-self.fee)
        return self.cash

bt = EventBacktest(df, clf)
final = bt.run()
print('最终净值:', final)

风控模块:3 条红线保本金

规则参数触发动作
最大回撤10%暂停交易 24h
单日亏损5%降半仓
连续亏损次数3强制冷静期

代码仅 20 行,直接嵌入 EventBacktest 即可。

实盘部署:火币/OKX 双向挂单

  • 使用 ccxt 统一接口,现货/合约切换只需改一行 symbol
  • 采用'异步心跳 + 队列'模式,滑点 < 0.02%(实测 ETH/USDT 15 min)
  • 支持'测试网'一键切换,0 成本验证策略

核心下单函数:

def place_order(ex, symbol, side, amount, price=None, type_='market'):
    if price: type_ = 'limit'
    return ex.create_order(symbol, type_, side, amount, price)

结果展示:BTC 15 min 模拟 30 天

指标数值
初始资金100 USDT
期末净值128.4 USDT
最大回撤6.2%
胜率58.7%
夏普2.1(无风险利率 0)

净值曲线图

后续优化方向

  1. 引入限价簿 + 成交切片做高频特征
  2. 采用强化学习动态调仓位
  3. 多币种协整套利池化

免责声明

本文仅为技术分享,不构成任何投资建议。量化交易有风险,回测收益不代表未来表现。

目录

  1. 架构概览
  2. 环境准备
  3. 数据层:30 秒拉取 2 年 K 线
  4. 特征工程:把 K 线变成“AI 看得懂”的表格
  5. 模型层:LightGBM 二分类“涨跌”
  6. 回测:200 行完整事件驱动框架
  7. 风控模块:3 条红线保本金
  8. 实盘部署:火币/OKX 双向挂单
  9. 结果展示:BTC 15 min 模拟 30 天
  10. 后续优化方向
  11. 免责声明
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • VRC-Notifier 开源好友状态监控与通知工具
  • Kotlin 中的扩展函数与属性示例详解
  • Python 编程基础与实战应用指南
  • Git 版本控制核心命令与实战指南
  • C++ 植物大战僵尸项目配置与编译说明
  • 基于FPGA的CARRY4抽头延迟链TDC延时仿真
  • 无人机 5.8G 模拟图传电路设计方案及性能分析
  • FPGA 时序约束入门:常用 SDC 模板与工程实战
  • Python 实现屏幕爱心弹窗效果
  • C++ STL vector 底层原理与模拟实现
  • 图论寻路算法:深度优先搜索 (DFS) 实现
  • Python IGRF 库本地环境配置与使用指南
  • C++未定义行为(UB)详解与解决方案
  • Windows下安装运用高效轻量本地龙虾机器人ZeroClaw
  • Visual Studio 关闭 GitHub Copilot 代码提示的设置方法
  • Mac mini 静音低功耗配置:OpenClaw 卧室运行指南
  • AI 编程工具深度对比:Cursor、Copilot、Trae 与 Claude Code
  • 机器人 DH 参数模型与正运动学详解
  • Flutter 组件 tavily_dart 适配鸿蒙 HarmonyOS 进阶:聚合搜索与语义降噪
  • jsPDF 中文显示解决方案:字体引入与配置指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online