如何使用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
相关产品推荐
相关产品推荐

