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

使用CCXT调用Phemex接口获取持仓无输出问题求助

问题分析与解决方案

可能的问题原因

  1. 未捕获的异常:API调用过程中可能抛出错误(如密钥无效、权限不足、参数错误),但代码没有异常处理逻辑,导致程序直接崩溃,无任何输出。
  2. 参数格式错误:Phemex API对参数的要求与你当前使用的code参数不匹配,导致请求失败。
  3. 符号格式不匹配:CCXT中Phemex合约的符号格式为BTC/USDT:USDT,而非BTCUSDT,参数中的符号格式错误会导致无法获取持仓。

修复步骤

1. 添加异常处理

在API调用处添加try-except块,捕获并打印错误信息,明确程序失败的原因。

2. 修正API请求参数

  • fetch_balance参数:Phemex API使用currency而非code来指定币种,将params改为{"type": "swap", "currency": "USDT"}。
  • fetch_positions参数:使用正确的合约符号格式BTC/USDT:USDT,或直接获取所有持仓再筛选(更灵活)。

3. 调整持仓筛选逻辑

确保筛选的符号与CCXT返回的格式一致,避免遗漏持仓。

修正后的代码

import ccxt
import api
import time

exchange = ccxt.phemex({
    'apiKey': api.contract_apiKey,
    'secret': api.contract_secret,
    'enableRateLimit': True,
    'options': {
        'defaultType': 'swap',  # 设置默认类型为合约,简化后续调用
    },
})

def get_balance():
    try:
        params = {"type": "swap", "currency": "USDT"}
        response = exchange.fetch_balance(params=params)
        return response
    except Exception as e:
        print(f"获取余额失败: {str(e)}")
        return None

def get_positions():
    try:
        # 指定符号获取单个合约持仓,或不传参数获取所有合约持仓
        positions = exchange.fetch_positions(symbols=['BTC/USDT:USDT'])
        return positions
    except Exception as e:
        print(f"获取持仓失败: {str(e)}")
        return []

def print_balance():
    balance = get_balance()
    if balance is None:
        return
    print("Egyenleg:")
    for currency, amount in balance['total'].items():
        print(f"{currency}: {amount}")

def print_positions():
    positions = get_positions()
    if len(positions) > 0:
        print("Aktuális pozíciók:")
        for position in positions:
            print(f"Pozíció: {position['symbol']}")
            print(f"  Méret: {position['info']['size']}")
            print(f"  Átlagos nyitási ár: {position['info']['avgEntryPrice']}")
            print(f"  Nyitott oldal: {'Long' if position['info']['side'] == 'buy' else 'Short'}")
            print("---------------")
    else:
        print("Nincsenek aktuális pozíciók.")

while True:
    print_balance()
    print_positions()
    print("------------------------------")
    time.sleep(10)

额外检查项

  • 确认API密钥具有合约账户的读取权限(在Phemex后台设置)。
  • 检查api.py中的contract_apiKey和contract_secret是否正确,无多余空格或拼写错误。
  • 确保网络连接正常,能够访问Phemex的API服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:50:20