CCXT-09-查询交易数据

1. 查询公共交易数据-fetchTrades

你可以调用ccxt的统一API方法fetchTrades / fetch_trades来获取指定交易对的最近交易记录。 fetchTrades方法声明如下:

async fetchTrades (symbol, since = undefined, limit = undefined, params = {})

例如,如果你希望逐个打印所有交易对的近期交易(别忘了交易所的限流!), 可以使用以下代码。 JavaScript示例代码:

if (exchange.has['fetchTrades']) {
    let sleep = (ms) => new Promise (resolve => setTimeout (resolve, ms));
    for (symbol in exchange.markets) {
        await sleep (exchange.rateLimit) // milliseconds
        console.log (await exchange.fetchTrades (symbol))
    }
}

Python示例代码:

import time
if exchange.has['fetchTrades']:
    for symbol in exchange.markets:  # ensure you have called loadMarkets() or load_markets() method.
        time.sleep (exchange.rateLimit / 1000)  # time.sleep wants seconds
        print (symbol, exchange.fetch_trades (symbol))

PHP示例代码:

if ($exchange->has['fetchTrades']) {
    foreach ($exchange->markets as $symbol => $market) {
        usleep ($exchange->rateLimit * 1000); // usleep wants microseconds
        var_dump ($exchange->fetch_trades ($symbol));
    }
}

上面展示的fetchTrades方法返回一个按时间戳升序排列的交易数组,最早的交易在第一个,最新的交易在最后一个。交易数组结构如下:

[
    {
        'info':       { ... },                  // the original decoded JSON as is
        'id':        '12345-67890:09876/54321', // string trade id
        'timestamp':  1502962946216,            // Unix timestamp in milliseconds
        'datetime':  '2017-08-17 12:42:48.000', // ISO8601 datetime with milliseconds
        'symbol':    'ETH/BTC',                 // symbol
        'order':     '12345-67890:09876/54321', // string order id or undefined/None/null
        'type':      'limit',                   // order type, 'market', 'limit' or undefined/None/null
        'side':      'buy',                     // direction of the trade, 'buy' or 'sell'
        'price':      0.06917684,               // float price in quote currency
        'amount':     1.5,                      // amount of base currency
    },
    ...
]

大多数交易所返回上述交易对象中的大部分字段,虽然也有些交易所不会返回type, side, 交易id或委托单id这些字段 。 大多数时候可以保证你能拿到一个交易的以下字段:timestamp, datetime,symbol, price 和amount 。 第二个可选参数since可以按时间戳削减结果数组,第三个参数limit可以削减返回的交易数量。 如果用户不指定since,那么fetchTrade方法将返回交易所默认的公开交易时间范围,这是交易所特定的, 有些交易所会返回自交易对上市开始的所有交易,另一些交易所则会返回缩减集合,例如最近24小时、或者最近100个交易等等。如果用户希望更精确地控制时间窗口,那么应当指定 since参数。 ccxt的统一API中的大多数方法都会返回一个对象或对象数组。然而,也有极少数交易所会一次返回所有的交易。通常来说交易所的API会限制仅返回最近的一定数量的交易。你不能只用 一个调用就返回自交易对上市依赖的所有交易对象,实际上,很少有交易所会容忍或允许这种调用行为。 要查询历史交易,开发者需要按页遍历数据。分页通常暗示着使用循环分块提取数据。大多数情况下,开发者需要使用至少某种类型的分页来获得一致的结果。另一方面,有些交易所不支持公开交易的分页查询。总体来说交易所会提供最近的交易。 fetchTrades () / fetch_trades() 方法也可以接收一个额外的关联数组作为其第四个参数。 你可以用这个关联数组传入特定交易所支持的额外的参数。请查询交易所的API文档获取详细信息。

2. 查询个人的历史交易 - fetchMyTrade

ccxt库的统一API中的大部分方法会返回单个交易对象或交易对象数组。但是,极少数交易所会一次返回全部个人交易。大多数情况下,交易所的API会限制返回结果的数量。你不应该在一个调用中读取所有交易对象。 实际上,极少有交易所会容忍或允许这种行为。 要查询历史交易,用户需要分页遍历数据。分页通常隐含着使用循环 分批获取数据的意思。在大多数情况下,用户需要提供至少某种类型的分页以便可以一致地获取期望的结果。 使用fetchMyTrade/fetch_my_trade方法获取个人的历史交易,其方法原型与调用的示例代码如下。 JavaScript:

// fetchMyTrades (symbol = undefined, since = undefined, limit = undefined, params = {})
if (exchange.has['fetchMyTrades']) {
    const trades = await exchange.fetchMyTrades (symbol, since, limit, params)
}

Python:

# fetch_my_trades (symbol = None, since = None, limit = None, params = {})
if exchange.has['fetchMyTrades']:
    exchange.fetch_my_trades (symbol = None, since = None, limit = None, params = {})

PHP:

// fetch_my_trades ($symbol = null, $since = null, $limit = null, $params = array ())
if ($exchange->has['fetchMyTrades']) {
    $trades = $exchange->fetch_my_trades ($symbol, $since, $limit, $params);
}

fetchMyTrade方法返回一个有序的交易对象数组,最近产生的交易排在最后。