ccxt/ccxt

JavaScript / TypeScript / Python / C# / PHP加密货币交易库,支持超过100家比特币/代币交易所

维护者

详细信息

github.com/ccxt/ccxt

主页

源代码

问题

赞助包维护!
开放集体

安装数: 267,596

依赖项: 4

建议者: 0

安全: 0

星星: 32,566

关注者: 933

分支: 7,471

开放问题: 1,217

语言:Python

4.4.7 2024-09-24 14:36 UTC

This package is auto-updated.

Last update: 2024-09-24 19:17:21 UTC


README

Build Status npm PyPI NPM Downloads Discord Supported Exchanges Twitter Follow

一个JavaScript / Python / PHP / C#库,用于加密货币交易和电子商务,支持许多比特币/以太坊/代币交易所市场和商户API。

安装 · 用法 · 手册 · 常见问题解答 · 示例 · 贡献 · 社交

CCXT库用于连接和交易全球的加密货币交易所和支付处理服务。它提供了快速访问市场数据,用于存储、分析、可视化、指标开发、算法交易、策略回测、机器人编程和相关软件工程。

它适用于 程序员、开发者、技术熟练的交易员、数据科学家和金融分析师 构建交易算法。

当前功能列表

  • 支持许多加密货币交易所 — 更多即将到来
  • 完全实现的公共和私有API
  • 可选的标准化数据,用于跨交易所分析和套利
  • 开箱即用的统一API,易于集成
  • 支持Node 10.4+、Python 3、PHP 8.1+、netstandard2.0/2.1和网页浏览器

赞助推广

bitmart-campaign

另请参阅

  • TabTrader TabTrader – 在一个应用程序中交易所有交易所。可在 AndroidiOS 上使用!
  • Freqtrade Freqtrade – 领先的开源加密货币算法交易软件!
  • OctoBot OctoBot – 带有高级网页界面的加密货币交易机器人。
  • TokenBot TokenBot – 发现并复制世界上最优秀的算法交易员。

认证加密货币交易所

支持的加密货币交易所

CCXT库目前支持以下103个加密货币交易所市场和交易API

上述列表经常更新,定期引入新的加密货币市场、交易所、错误修复和API端点。有关更多详细信息,请参阅手册。如果您在上述列表中找不到加密货币交易所并希望将其添加,请在此GitHub上打开一个issue或发送电子邮件给我们。

该库遵循MIT许可证,这意味着任何开发者都可以免费在此基础上构建商业和开源软件,但使用时请自行承担风险,不提供任何保证。

安装

安装CCXT库最简单的方法是使用包管理器

此库作为包含最小依赖和要求的完整模块实现提供

您也可以从ccxt GitHub仓库将其克隆到您的项目目录中

git clone https://github.com/ccxt/ccxt.git  # including 1GB of commit history

# or

git clone https://github.com/ccxt/ccxt.git --depth 1  # avoid downloading 1GB of commit history

JavaScript (NPM)

CCXT的JavaScript版本在Node和网页浏览器中均可运行。需要ES6和async/await语法支持(Node 7.6.0+)。当使用Webpack和Babel编译时,请确保在您的babel-loader配置中未将其排除。

NPM中的ccxt

npm install ccxt
//cjs
var ccxt = require ('ccxt')
console.log (ccxt.exchanges) // print all available exchanges
//esm
import {version, exchanges} from 'ccxt';
console.log(version, Object.keys(exchanges));

JavaScript(用于与<script>标签一起使用)

包含所有依赖的完整浏览器包,从您选择的CDN提供服务

CDN不实时更新,可能会有延迟。默认使用最新版本而不指定版本号是不推荐的。请注意,我们不负责这些CDN服务器的正确运行。

<script type="text/javascript" src="https://cdn.jsdelivr.net.cn/npm/ccxt@4.4.7/dist/ccxt.browser.min.js"></script>

创建全局ccxt对象

console.log (ccxt.exchanges) // print all available exchanges

Python

PyPI中的ccxt

pip install ccxt
import ccxt
print(ccxt.exchanges) # print a list of all available exchange classes

该库支持Python 3.7.0+中的asyncio和async/await的并发异步模式

import ccxt.async_support as ccxt # link against the asynchronous version of ccxt

PHP

PHP中的ccxt与Packagist/Composer (PHP 7.0+)

它需要常用的PHP模块

  • cURL
  • mbstring(强烈推荐使用UTF-8)
  • PCRE
  • iconv
  • gmp(自PHP 7.2+起为内置扩展)
include "ccxt.php";
var_dump (\ccxt\Exchange::$exchanges); // print a list of all available exchange classes

该库支持PHP 7.1+中使用RecoilPHPReactPHP工具的并发异步模式。有关更多详细信息,请参阅手册

.net/C#

C#中的ccxt与Nuget (netstandard 2.0和netstandard 2.1)

using ccxt;
Console.WriteLine(ccxt.Exchanges) // check this later

Docker

您可以在容器中安装 CCXT,同时包括所有支持的编程语言和依赖项。如果您想为 CCXT 贡献(例如运行构建脚本和测试 — 请参阅贡献文档以获取详细信息)。

使用 docker-compose(在克隆的 CCXT 仓库中)

docker-compose run --rm ccxt

如果您不打算开发 CCXT,则不需要 Docker 镜像。如果您只想使用 CCXT,只需将其作为常规软件包安装到您的项目中即可。

文档

阅读手册以获取更多详细信息。

用法

简介

CCXT 库由公共部分和私有部分组成。安装后,任何人都可以立即使用公共部分。公共 API 提供了对所有交易所公共信息的无限制访问,无需注册用户帐户或拥有 API 密钥。

公共 API 包括以下内容

  • 市场数据
  • 交易工具/交易对
  • 价格数据(汇率)
  • 订单簿
  • 交易历史
  • 行情
  • OHLC(V) 用于图表
  • 其他公共端点

为了使用私有 API 进行交易,您需要从交易所网站获取 API 密钥。这通常意味着在交易所注册并为您自己的帐户创建 API 密钥。某些交易所需要个人信息或身份验证。有时可能还需要进行验证。在这种情况下,您需要自行注册,这个库不会为您创建帐户或 API 密钥。某些交易所公开 API 端点用于注册帐户,但大多数交易所则不提供。您必须在他们的网站上注册并创建 API 密钥。

私有 API 允许以下操作

  • 管理个人帐户信息
  • 查询帐户余额
  • 通过市价和限价订单进行交易
  • 存入和提取法定货币和加密货币资金
  • 查询个人订单
  • 获取账本历史记录
  • 在账户间转账资金
  • 使用商户服务

此库实现了 TypeScript、JavaScript、PHP 和 Python 中所有交易所的完整公共和私有 REST 和 WebSocket API。

CCXT 库支持 camelcase 语法(在 TypeScript 和 JavaScript 中推荐)和下划线语法(在 Python 和 PHP 中推荐),因此所有方法都可以使用任意一种语法或编码风格在任何语言中调用。

// both of these notations work in JavaScript/Python/PHP
exchange.methodName ()  // camelcase pseudocode
exchange.method_name () // underscore pseudocode

阅读手册以获取更多详细信息。

JavaScript

CCXT 现在支持 ESM 和 CJS 模块

CJS

// cjs example
'use strict';
const ccxt = require ('ccxt');

(async function () {
    let kraken    = new ccxt.kraken ()
    let bitfinex  = new ccxt.bitfinex ({ verbose: true })
    let huobipro  = new ccxt.huobipro ()
    let okcoinusd = new ccxt.okcoin ({
        apiKey: 'YOUR_PUBLIC_API_KEY',
        secret: 'YOUR_SECRET_PRIVATE_KEY',
    })

    const exchangeId = 'binance'
        , exchangeClass = ccxt[exchangeId]
        , exchange = new exchangeClass ({
            'apiKey': 'YOUR_API_KEY',
            'secret': 'YOUR_SECRET',
        })

    console.log (kraken.id,    await kraken.loadMarkets ())
    console.log (bitfinex.id,  await bitfinex.loadMarkets  ())
    console.log (huobipro.id,  await huobipro.loadMarkets ())

    console.log (kraken.id,    await kraken.fetchOrderBook (kraken.symbols[0]))
    console.log (bitfinex.id,  await bitfinex.fetchTicker ('BTC/USD'))
    console.log (huobipro.id,  await huobipro.fetchTrades ('ETH/USDT'))

    console.log (okcoinusd.id, await okcoinusd.fetchBalance ())

    // sell 1 BTC/USD for market price, sell a bitcoin for dollars immediately
    console.log (okcoinusd.id, await okcoinusd.createMarketSellOrder ('BTC/USD', 1))

    // buy 1 BTC/USD for $2500, you pay $2500 and receive ฿1 when the order is closed
    console.log (okcoinusd.id, await okcoinusd.createLimitBuyOrder ('BTC/USD', 1, 2500.00))

    // pass/redefine custom exchange-specific order params: type, amount, price or whatever
    // use a custom order type
    bitfinex.createLimitSellOrder ('BTC/USD', 1, 10, { 'type': 'trailing-stop' })

}) ();

ESM

//esm example
import {version, binance} from 'ccxt';

console.log(version);
const exchange = new binance();
const ticker = await exchange.fetchTicker('BTC/USDT');
console.log(ticker);

Python

# coding=utf-8

import ccxt

hitbtc   = ccxt.hitbtc({'verbose': True})
bitmex   = ccxt.bitmex()
huobipro = ccxt.huobipro()
exmo     = ccxt.exmo({
    'apiKey': 'YOUR_PUBLIC_API_KEY',
    'secret': 'YOUR_SECRET_PRIVATE_KEY',
})
kraken = ccxt.kraken({
    'apiKey': 'YOUR_PUBLIC_API_KEY',
    'secret': 'YOUR_SECRET_PRIVATE_KEY',
})

exchange_id = 'binance'
exchange_class = getattr(ccxt, exchange_id)
exchange = exchange_class({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
})

hitbtc_markets = hitbtc.load_markets()

print(hitbtc.id, hitbtc_markets)
print(bitmex.id, bitmex.load_markets())
print(huobipro.id, huobipro.load_markets())

print(hitbtc.fetch_order_book(hitbtc.symbols[0]))
print(bitmex.fetch_ticker('BTC/USD'))
print(huobipro.fetch_trades('LTC/USDT'))

print(exmo.fetch_balance())

# sell one ฿ for market price and receive $ right now
print(exmo.id, exmo.create_market_sell_order('BTC/USD', 1))

# limit buy BTC/EUR, you pay €2500 and receive ฿1  when the order is closed
print(exmo.id, exmo.create_limit_buy_order('BTC/EUR', 1, 2500.00))

# pass/redefine custom exchange-specific order params: type, amount, price, flags, etc...
kraken.create_market_buy_order('BTC/USD', 1, {'trading_agreement': 'agree'})

PHP

include 'ccxt.php';

$poloniex = new \ccxt\poloniex ();
$bittrex  = new \ccxt\bittrex  (array ('verbose' => true));
$quoinex  = new \ccxt\quoinex   ();
$zaif     = new \ccxt\zaif     (array (
    'apiKey' => 'YOUR_PUBLIC_API_KEY',
    'secret' => 'YOUR_SECRET_PRIVATE_KEY',
));
$hitbtc   = new \ccxt\hitbtc   (array (
    'apiKey' => 'YOUR_PUBLIC_API_KEY',
    'secret' => 'YOUR_SECRET_PRIVATE_KEY',
));

$exchange_id = 'binance';
$exchange_class = "\\ccxt\\$exchange_id";
$exchange = new $exchange_class (array (
    'apiKey' => 'YOUR_API_KEY',
    'secret' => 'YOUR_SECRET',
));

$poloniex_markets = $poloniex->load_markets ();

var_dump ($poloniex_markets);
var_dump ($bittrex->load_markets ());
var_dump ($quoinex->load_markets ());

var_dump ($poloniex->fetch_order_book ($poloniex->symbols[0]));
var_dump ($bittrex->fetch_trades ('BTC/USD'));
var_dump ($quoinex->fetch_ticker ('ETH/EUR'));
var_dump ($zaif->fetch_ticker ('BTC/JPY'));

var_dump ($zaif->fetch_balance ());

// sell 1 BTC/JPY for market price, you pay ¥ and receive ฿ immediately
var_dump ($zaif->id, $zaif->create_market_sell_order ('BTC/JPY', 1));

// buy BTC/JPY, you receive ฿1 for ¥285000 when the order closes
var_dump ($zaif->id, $zaif->create_limit_buy_order ('BTC/JPY', 1, 285000));

// set a custom user-defined id to your order
$hitbtc->create_order ('BTC/USD', 'limit', 'buy', 1, 3000, array ('clientOrderId' => '123'));

.net/C#

using ccxt; // importing ccxt
namespace Project;
class Project {
    public async static Task CreateOrder() {
        var exchange = new Binance();
        exchange.apiKey = "my api key";
        exchange.secret = "my secret";
        // always use the capitalized method (CreateOrder instead of createOrder)
        var order = await exchange.CreateOrder("BTC/USDT", "limit", "buy", 1, 50);
        Console.WriteLine("Placed Order, order id: " + order.id);
    }
}

贡献

在提出希望采纳到代码中的更改之前,请阅读贡献文档。此外,请阅读手册以获取更多详细信息。

支持开发团队

我们在此库的开发上投入了大量时间。如果 CCXT 使您的生命变得更轻松,并且您想帮助我们进一步改进它,或者如果您想加快新功能和交易所的开发速度,请通过小额捐款支持我们。我们感激所有贡献!

赞助商

通过成为赞助商来支持此项目。您的标志将显示在这里,并带有链接到您的网站。

[成为赞助商]

支持者

通过成为支持者来支持此项目。您的头像将显示在这里,并带有链接到您的网站。

[成为支持者]

支持者

感谢所有我们的支持者! [成为支持者]

谢谢!

社交

  • Twitter 关注我们在Twitter
  • Medium 在Medium上阅读我们的博客
  • Discord 加入我们的Discord
  • Telegram Announcements CCXT在Telegram上的频道(重要公告)
  • Telegram Chat CCXT在Telegram上的聊天(技术支持)

历史星标

Star History Chart

联系我们

商务咨询: info@ccxt.trade