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

如何使用Python接入Coinbase Advanced Trade REST API开发交易机器人

Coinbase Advanced Trade Python 接入与技术指标获取示例代码

一、官方REST API核心概述(中文翻译)

Coinbase Advanced Trade REST API 为开发者提供了与平台交互的完整能力,涵盖订单创建、账户资产查询、市场行情获取、技术指标调取等全流程交易功能。API基于REST架构,通过HTTPS协议通信,所有私有接口请求必须使用API密钥进行身份验证,并遵循HMAC-SHA256签名规则。平台支持调取TradingView兼容的技术指标,为自定义交易策略提供数据支撑。

二、Python 接入示例代码

1. 依赖安装

首先安装必要依赖:

pip install requests python-dotenv

2. 核心工具类(身份验证与请求封装)

创建coinbase_client.py文件,封装签名逻辑与请求方法:

import os
import time
import hmac
import hashlib
import requests
from dotenv import load_dotenv

# 加载环境变量(建议将API密钥存放在.env文件中)
load_dotenv()
API_KEY = os.getenv("COINBASE_API_KEY")
API_SECRET = os.getenv("COINBASE_API_SECRET")
BASE_URL = "https://api.coinbase.com/api/v3/brokerage"

def generate_signature(method, path, body=""):
    """生成Coinbase API要求的HMAC签名"""
    timestamp = str(int(time.time()))
    message = timestamp + method.upper() + path + body
    signature = hmac.new(
        API_SECRET.encode("utf-8"),
        message.encode("utf-8"),
        hashlib.sha256
    ).hexdigest()
    return timestamp, signature

def send_request(method, path, params=None, body=None):
    """发送经过身份验证的API请求"""
    url = BASE_URL + path
    timestamp, signature = generate_signature(method, path, body or "")
    
    headers = {
        "Content-Type": "application/json",
        "CB-ACCESS-KEY": API_KEY,
        "CB-ACCESS-SIGN": signature,
        "CB-ACCESS-TIMESTAMP": timestamp
    }
    
    try:
        if method.upper() == "GET":
            response = requests.get(url, headers=headers, params=params)
        elif method.upper() == "POST":
            response = requests.post(url, headers=headers, json=body)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        return None

3. 获取账户信息(私有接口示例)

# 查询账户资产列表
def get_accounts():
    return send_request("GET", "/accounts")

# 调用示例
if __name__ == "__main__":
    accounts = get_accounts()
    if accounts:
        print("账户资产信息:", accounts)

4. 获取市场行情数据(公共/私有接口)

# 获取指定交易对的当前行情
def get_product_ticker(product_id="BTC-USD"):
    return send_request("GET", f"/products/{product_id}/ticker")

# 获取K线数据(用于技术指标计算或可视化)
def get_candles(product_id="BTC-USD", granularity="ONE_HOUR", start=None, end=None):
    params = {"granularity": granularity}
    if start:
        params["start"] = start
    if end:
        params["end"] = end
    return send_request("GET", f"/products/{product_id}/candles", params=params)

# 调用示例
if __name__ == "__main__":
    ticker = get_product_ticker()
    if ticker:
        print("当前BTC-USD行情:", ticker)
    
    candles = get_candles()
    if candles:
        print("最近10条K线数据:", candles[:10])

5. 获取TradingView兼容技术指标

Coinbase API支持直接调取多种TradingView标准指标,如RSI、MACD、BOLLINGER_BANDS等:

# 获取指定交易对的技术指标
def get_technical_indicator(product_id="BTC-USD", metric="RSI", window_size=14):
    params = {
        "product_id": product_id,
        "metric": metric,
        "window_size": str(window_size)
    }
    return send_request("GET", "/market/metrics/technical", params=params)

# 调用示例
if __name__ == "__main__":
    rsi_data = get_technical_indicator(metric="RSI", window_size=14)
    if rsi_data:
        print("BTC-USD 14周期RSI指标:", rsi_data)
    
    macd_data = get_technical_indicator(metric="MACD")
    if macd_data:
        print("BTC-USD MACD指标:", macd_data)

三、策略开发提示

  • 可基于获取的技术指标(如RSI低于30时买入,高于70时卖出)编写条件判断逻辑,结合订单创建接口实现自动交易
  • 订单创建接口示例:使用send_request("POST", "/orders", body=order_params),其中order_params需包含product_id、side(BUY/SELL)、order_configuration等字段,具体格式参考官方文档
  • 建议先使用模拟交易环境测试策略,避免真实资产损失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:03:35