1

我在Github上使用以下库

我需要从 GDAX 获取订单簿。我通过执行以下操作来做到这一点:

$getOrderBook = $exchange->getOrderBook($exchangeProduct);
echo '<pre>';
print_r($getOrderBook);
echo '<pre>';

使用上面的方法,我只得到 1 级,根据 GDAX,我将得到“只有最好的出价和要价”,输出是这样的:

Array
(
    [sequence] => 2402392394
    [bids] => Array
        (
            [0] => Array
                (
                    [0] => 3857.13
                    [1] => 0.14
                    [2] => 1
                )

        )

    [asks] => Array
        (
            [0] => Array
                (
                    [0] => 3859.99
                    [1] => 0.0475099
                    [2] => 2
                )

        )

该文档指出“默认情况下,仅返回内部(即最佳)买入和卖出。这相当于 1 级的账簿深度。如果您想查看更大的订单簿,请指定级别查询参数。”

该文档还指出,第 2 级获得“前 50 名出价和要价(汇总)”,第 3 级获得“完整订单簿(非汇总)”。

Github 上的类包含以下与我的查询相关的代码:

  public function getOrderBook($product = 'BTC-USD') {
        //$this->validate('product', $product);
        return $this->request('book', array('id' => $product));
    }

对于“书”:

public $endpoints = array(
    'book' => array('method' => 'GET', 'uri' => '/products/%s/book'),
);

现在我想$getOrderBook = $exchange->getOrderBook($exchangeProduct)为第 2 级或第 3 级调用我的函数。

请问如何在不修改从 Github 导入的代码的情况下做到这一点?

使用 URL,输出应如下所示:

https://api.gdax.com/products/BTC-EUR/book?level=2

谢谢。

4

2 回答 2

0

恐怕这样做的唯一方法是扩展类并覆盖相关方法。

目前,属性中指定的 URI$endpointsgetEndpoint方法填充。这填补了%s您在问题标题中提到的内容。您可以扩展此类并覆盖该方法:

protected function getEndpoint($key, $params) {
    // Check if the level has been specified and pull it from the $params
    $level = null;
    if (isset($params['level'])) {
        $level = $params['level'];
        unset($params['level']);
    }
    // Run the existing endpoint parse
    $endpoint = parent::getEndpoint($key, $params);
    // Add on the level
    if ($level !== null) {
        $endpoint['uri'] .= '?level='.$level;
    }

    return $endpoint
}

然后您还必须覆盖该orderBook方法:

public function getOrderBook($product = 'BTC-USD', $level = null) {
    return $this->request('book', array('id' => $product, 'level' => $level));
}

或者,您可以向 Github 库提交拉取请求,调整代码以支持level.

于 2017-08-29T22:58:19.590 回答
0

您可以覆盖端点,因为它已声明public

$exchange = new CoinbaseExchange;
// ...
$exchange->endpoints['book']['uri'] = '/products/%s/book?level=2';
$getOrderBook = $exchange->getOrderBook($exchangeProduct);

不过,最好按照Scopey 的回答中的建议创建一个扩展 API 的 PR 。

于 2017-08-29T23:11:53.837 回答