关于 ccxt
面向 ccxt 开发者的文档型技能,可协助解答 API 问题、实现方案、调试代码并查阅实践建议。
主要功能
- 01ccxt API 指引
- 02实现方案支持
- 03代码调试指引
- 04实践建议参考
适用场景
- 01了解 ccxt 订单方法
- 02排查交易所 API 调用
- 03规划 ccxt 实现方案
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ 2025emma/ vibe-coding-cn --skill ccxt安装后在 Claude Code 中输入/ccxt确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/cli.mdexchanges.mdfaq.mdgetting_started.mdindex.mdmanual.mdother.mdpro.mdspecification.md详细介绍
Ccxt 技能
基于官方文档生成,提供全面的 ccxt 开发协助。
何时使用此技能
在以下情况下应触发此技能:
- 使用 ccxt
- 询问 ccxt 的功能或 API
- 实现 ccxt 解决方案
- 调试 ccxt 代码
- 学习 ccxt 最佳实践
快速参考
常见模式
模式 1: 常见问题解答
我想运行代码,但它无法正常工作,该如何修复?
如果你的问题像上面那样简短,我们不会提供帮助。我们不教编程。如果你无法阅读和理解 Manual,或者无法严格按照 CONTRIBUTING 文档中的指南报告问题,我们也不会提供帮助。请阅读 CONTRIBUTING 中关于如何报告问题的指南,并阅读 Manual。在没有仔细通读整本 Manual 之前,不要让任何人承担金钱和时间上的风险。如果你不习惯阅读大量细节,也不要冒险。此外,如果你对所用的编程语言不够自信,还有更好的地方可以学习编程基础并进行练习。搜索 python 教程、js 视频,动手尝试示例,其他人就是这样逐步提升的。想学东西,就没有捷径。
需要提供哪些信息才能获得帮助?
提问时:
先使用搜索按钮查找重复问题!
以详细模式发布你的请求和响应!
在遇到问题的代码行前添加 exchange.verbose = true,并复制粘贴屏幕上显示的内容。关于这一点,Troubleshooting 部分、README 以及之前的问题和拉取请求中的许多类似回答里都写得到处都是。不要找借口。
详细输出应包含此次交互中的请求和响应。
附上完整的错误调用堆栈!
写明你使用的编程语言及其版本号
写明 CCXT / CCXT Pro 库的版本号
写明使用的是哪个交易所
写明你尝试调用哪个方法
贴出能复现问题的代码。请提供一个完整、简短、可运行的程序,代码尽可能紧凑(5-10 行),并包含交易所实例化代码。删除所有无关部分,只保留复现问题所需的核心代码。
不要发布代码或错误的截图,请以纯文本发布输出和代码!用三个反引号括起代码和输出:GOOD。不要把反引号()和单引号(')弄混:'''BAD'''。不要把单个反引号和三个反引号弄混:BAD`
不要发布你的 apiKey 和 secret!请妥善保管(发布前将其删除)!
我调用某个方法时遇到了错误,是哪里做错了?
你没有正确报告问题。请帮助社区为你提供帮助。请阅读并按照以下步骤操作:https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-submit-an-issue。再次强调,能复现问题的代码以及详细的请求和响应是必需的。仅提供错误回溯、响应、请求或代码都不够!
我调用某个方法后得到了错误的结果,可以帮忙吗?
基本上和上一个问题的回答相同。请阅读并严格遵循:https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-submit-an-issue。再次强调,能复现问题的代码以及详细的请求和响应是必需的。仅提供错误回溯、响应、请求或代码都不够!
你们能为交易所 bar 实现功能 foo 吗?
可以,而且如果没人先实现,我们就会实现。提出这类问题意义不大,因为答案总是肯定的。有人问我们能否实现某项功能时,问题并不在于我们的能力,而在于实现所有积累下来的功能请求所需的时间和管理工作。此外,这是一个持续开发中的开源库。这意味着,该项目旨在由正在使用它的用户社区共同开发。你问的并不是我们能不能实现,实际上是在让我们去完成那项具体任务,而这并不是我们看待自愿协作的方式。欢迎你贡献代码、提交 PR 和 commit:https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code。对于免费的开源工作,我们不会作出承诺或提供时间预估。如果你希望加快进度,欢迎通过 [email protected] 联系我们。
你们什么时候会为交易所 bar 添加功能 foo?预计要多久?我们应该什么时候能等到?
对于开源工作,我们不会作出承诺或提供时间预估。原因已在上一段中说明。
你们什么时候会添加 Issues 中请求的交易所支持?
同样,由于上述原因,我们无法承诺何时添加某个交易所。答案始终不变:只要我们能做到,就会尽快添加。
我应该等多久才能添加某项功能?我需要决定是自己实现,还是等 CCXT Dev Team 替我实现。
请你自己实现,不要等我们。我们会尽快添加。此外,我们非常欢迎你贡献代码:https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
之前请求的功能 foo 目前进展如何?你们是如何实现交易所 bar 的?
这类问题通常是在浪费时间,因为回答它们往往需要花费大量时间切换上下文,而且回答这些问题所需的时间通常比直接编写代码来满足请求、实现新功能或支持新交易所还要长。这个开源项目的进展也是公开的,所以你想了解进展时,可以查看 commit 历史。
这个 PR 的状态如何?有更新吗?
如果尚未合并,就意味着 PR 中存在需要先修复的问题。如果它可以直接合并,我们就会合并,也就不会有这个问题了。PR 未能合并最常见的原因是违反了 CONTRIBUTING 中的任一指南。如果想让 PR 尽快合并,就必须严格遵循这些指南,不能跳过其中任何一行或一个词。符合指南的代码贡献几乎会立即合并(通常在几小时内)。
你能指出我的 PR 中有哪些错误,或者我需要修改什么才能将它合并到 master 分支吗?
很遗憾,我们并不总是有时间快速列出阻碍代码合并的每一个错误。相比解释应该如何修复,直接动手修复通常更简单、更快。大多数问题已经在 CONTRIBUTING 指南中说明。最重要的原则是严格遵守所有指南。
嘿!你上传的修复是 TypeScript 写的,能不能也修复 JavaScript / Python / PHP?
我们的构建系统会自动为我们生成针对各个交易所的 JavaScript、Python 和 PHP 代码,因此这些代码是从 TypeScript 转译而来的,不需要逐一单独修复所有语言。因此,只要在 TypeScript 中修复了问题,JavaScript NPM、Python pip 和 PHP Composer 中也就修复了。自动构建通常需要 15-20 分钟。新版本发布后,只需通过 npm、pip 或 composer 升级版本即可。
更多信息请见:https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#multilanguage-support https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#transpiled-generated-files
如何创建带有止盈和止损的订单?
一些交易所支持通过 createOrder 创建附加了“挂单”止损和止盈子订单的订单,请参阅“附加到仓位的止损和止盈订单”。但也有一些交易所可能不支持该功能,你需要单独调用 createOrder 方法,在已开仓位上添加条件订单(例如 *触发订单 | 止损订单 | 止盈订单),请参阅 [条件订单](Manual.md#Conditional Orders)。你也可以检查 exchange.has['createOrderWithTakeProfitAndStopLoss']、exchange.has['createStopLossOrder'] 和 exchange.has['createTakeProfitOrder'],但它们不如 .features 属性准确。
如何使用成本创建现货市价买单?
要使用成本创建市价买单,首先需要检查交易所是否支持该功能(exchange.has['createMarketBuyOrderWithCost'])。如果支持,就可以使用 createMarketBuyOrderWithCost 方法。例如:order = await exchange.createMarketBuyOrderWithCost(symbol, cost)
createMarketBuyRequiresPrice 选项是什么意思?
许多交易所在下达现货市价买单时,要求使用计价货币的金额(不接受基准货币的金额)。在这种情况下,交易所的 createMarketBuyRequiresPrice 选项会设为 true。例如:如果你想用市价买单购买 BTC/USDT,就需要提供 amount = 5 USDT,而不是 0.000X。我们会通过检查来防止错误,因为用户通常会提供基准货币的金额。因此,默认情况下,如果你执行 create_order(symbol, 'market,' 'buy,' 10),且交易所启用了该选项,就会抛出错误(市价买单的 createOrder() 需要 price 参数,以计算总支出成本(amount * price);或者将 createMarketBuyOrderRequiresPrice 选项或参数设为 false……)。
如果交易所要求提供成本,而用户提供的是基准货币的金额,我们就需要额外请求一个 price 参数并将两者相乘,以得到成本。如果你了解此行为,可以直接禁用 createMarketBuyOrderRequiresPrice,并在 amount 参数中传入成本;但禁用该选项并不意味着你可以改用基准货币金额下单。如果你执行 create_order(symbol, 'market', 'buy', 0.001, 20000),ccxt 会使用所需的 price 计算成本,即计算 0.01*20000,然后将该值发送给交易所。
如果你想直接在 amount 参数中提供成本,可以设置 exchange.options['createMarketBuyOrderRequiresPrice'] = False(这表示你确认 amount 是市价买单的成本),然后执行 create_order(symbol, 'market', 'buy', 10)。
这样做主要是为了避免用户执行 create_order('SHIB/USDT', market, buy, 1000000),以为自己要买 1kk 个 SHIB,但实际上买的是价值 1kk USDT 的 SHIB。因此,默认情况下,ccxt 始终将 amount 参数视为基准货币金额。或者,如果可用,你也可以使用 createMarketBuyOrderWithCost / createMarketSellOrderWithCost 函数。
更多信息:市价买单
现货交易与掉期/永续期货交易有什么区别?
现货交易是指立即交割金融工具(如加密货币)的买入或卖出。这种交易方式很直接,涉及资产的直接交换。另一方面,掉期交易涉及衍生品合约,双方根据标的资产,在未来某个约定日期交换金融工具或现金流。掉期通常用于杠杆交易、投机或对冲,在合约到期之前不一定涉及标的资产的交换。
此外,如果你交易掉期,处理的是合约而不是基准货币(例如 BTC),因此如果你创建一个 amount = 1 的订单,BTC 数量会根据 contractSize 而变化。你可以这样检查合约大小:
await exchange.loadMarkets()
symbol = 'XRP/USDT:USDT'
market = exchange.market(symbol)
print(market['contractSize'])
如何下达只减仓订单?
只减仓订单是一种只能减少仓位、不能增加仓位的订单。要下达只减仓订单,通常需要调用 createOrder 方法,并将 reduceOnly 参数设为 true。这样可以确保只有在订单会减少未平仓位时才会执行;如果执行订单会增加仓位,则订单会部分成交或完全不成交。
Javascript
const params = {
'reduceOnly': true, // 如果要平仓,请设为 true;如果要开新仓,请设为 false
}
const order = await exchange.createOrder (symbol, type, side, amount, price, params)
Python
params = {
'reduceOnly': True, # 如果要平仓,请设为 True;如果要开新仓,请设为 False
}
order = exchange.create_order (symbol, type, side, amount, price, params)
PHP
$params = {
'reduceOnly': true, // 如果要平仓,请设为 true;如果要开新仓,请设为 false
}
$order = $exchange->create_order ($symbol, $type, $side, $amount, $price, $params);
更多信息:追踪订单
如何检查统一方法使用的端点?
要检查 CCXT 库中某个统一方法使用的端点,通常需要查看你所关注的特定交易所实现的库源代码。CCXT 中的统一方法会抽象掉其所调用的具体端点,因此无法通过库的 API 直接获取此信息。若要详细检查,可以在 GitHub 上查看 CCXT 库中该交易所对应方法的实现。
更多信息:统一 API
如何区分资金费率结构中的 previousFundingRate、fundingRate 和 nextFundingRate?
资金费率结构中可能返回三个不同的资金费率值:
previousFundingRate 指最近一次已完成的费率。
fundingRate 是即将到来的费率。该值会持续变化,直到资金费率结算时间到达,之后它就会变成 previousFundingRate。
nextFundingRate 仅在少数交易所受支持,表示即将到来的费率之后的预测资金费率。该值对应未来第二个资金费率周期的费率。
例如,假设现在是 12:30。previousFundingRate 对应 12:00 的费率,而我们可以通过查看 fundingRate 的值来了解即将到来的资金费率。在这个例子中,如果结算间隔为 4 小时,fundingRate 将在未来的 4:00 结算,而 nextFundingRate 是预计在 8:00 结算的费率。
python tutorials
模式 2: 要创建带有成本的市价买单,首先需要检查交易所是否支持此功能(exchange.has['createMarketBuyOrderWithCost'])。如果支持,就可以使用 createMarketBuyOrderWithCost` 方法。示例:
exchange.has['createMarketBuyOrderWithCost']). If it does, then you can use the
模式 3: 示例:如果要以市价买入 BTC/USDT,需要提供 amount = 5 USDT,而不是 0.000X。我们会进行检查,防止出现错误:明确要求提供价格,因为用户通常会以基础货币提供 amount。
create_order(symbol, 'market,' 'buy,' 10)
模式 4: 有关所有交易所及其支持方法的完整列表,请参考此示例:https://github.com/ccxt/ccxt/blob/master/examples/js/exchange-capabilities.js
exchange.rateLimit
模式 5: ccxt 库支持在 Python 3.5 及更高版本中使用 async/await 语法实现异步并发模式。异步 Python 版本使用纯 asyncio 和 aiohttp。在异步模式下,你可以使用相同的属性和方法,但大多数方法都带有 async 关键字。如果要使用异步模式,应链接到 ccxt.async_support 子包,如以下示例所示:
ccxt.async_support
参考文件
此技能在 references/ 中包含全面的文档:
- cli.md - Cli 文档
- exchanges.md - Exchanges 文档
- faq.md - Faq 文档
- getting_started.md - Getting Started 文档
- manual.md - Manual 文档
- other.md - Other 文档
- pro.md - Pro 文档
- specification.md - Specification 文档
需要详细信息时,使用 view 阅读特定参考文件。
使用此技能
入门指南
从 getting_started 或 tutorials 参考文件开始,了解基础概念。
特定功能
使用相应类别的参考文件(api、guides 等)获取详细信息。
代码示例
上方的快速参考部分包含从官方文档中提取的常见模式。
资源
references/
从官方来源提取并整理的文档。这些文件包含:
- 详细说明
- 带语言注释的代码示例
- 指向原始文档的链接
- 便于快速导航的目录
scripts/
在此处添加常见自动化任务的辅助脚本。
assets/
在此处添加模板、样板代码或示例项目。
备注
- 此技能由官方文档自动生成
- 参考文件保留了源文档的结构和示例
- 代码示例包含语言检测,可实现更好的语法高亮
- 快速参考模式摘自文档中的常见用法示例
更新
要使用更新后的文档刷新此技能:
- 使用相同配置重新运行 scraper
- 技能将使用最新信息重新构建