#api-bindings #exchange #crypto #api-calls

btcturk

非官方BtcTurk交易所API绑定

1个不稳定版本

0.1.0 2022年3月1日

#51#api-calls

MIT/Apache

99KB
2.5K SLoC

非官方BtcTurk交易所 API绑定。

使用此crate向公共和私有端点进行API调用。WebSocket数据流尚未实现。这是一个异步crate,不支持阻塞调用。

此crate是在以下文档的帮助下制作的

有关更多信息和方法,请参阅crate的文档。


lib.rs:

非官方BtcTurk交易所 API绑定。

使用此crate向publicprivate端点进行API调用。WebSocket数据流尚未实现。这是一个异步crate,不支持阻塞调用。

此crate是在以下文档的帮助下制作的

示例

获取报价

use btcturk::Client;

#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Use `Client` to make API calls.
    // You may optionally pass API keys and a client identifier.
    // API keys are not needed for public endpoints.
    // Client identifier is passed as an additional parameter for API calls
    // which require it and is optional.
    let client = Client::new(None, None)?;

    // This method will return a data structure if it succeeds.
    // If there is a network error or an error either in the parameters
    // or in the response, a wrapping error will be returned.
    let ticker = client.ticker("BTCTRY").await?;

    println!("Last price of BTCTRY pair is {}", ticker.last);

    Ok(())
}

提交和取消订单

    use btcturk::{Client, ApiKeys};
    use rust_decimal_macros::dec;

    // In this example, we are going to use the private endpoints so
    // we will need API keys.
    let keys = ApiKeys::new("PUBLIC_KEY", "PRIVATE_KEY")?;
    
    // We can pass the API keys here or set it later. For the sake of the
    // example, we pass the keys here and set the client identifier later.
    let mut client = Client::new(Some(keys), None)?;
    client.set_id(Some("test"));

    // In financial applications, rounding errors in floating-point
    // arithmetic may not be acceptable. Instead of `f32` or `f64`, we use
    // `Decimal` types which are more suitable for such applications.
    let price = dec!(500000);
    let quantity = dec!(0.01);
    let new_order = client.limit_buy("BTCTRY", price, quantity).await?;

    println!("New order with id {} has been submitted", new_order.id);

    client.cancel_order(new_order.id).await?;

    println!("New order with id {} has been cancelled", new_order.id);

    # Ok(())

测试

有很多测试,但其中许多都有ignored属性,这意味着只运行cargo test命令不会触发它们运行。这些测试被忽略,因为它们需要网络连接,其中一些甚至需要API密钥。我们将讨论如何运行此类测试。

单独运行忽略的测试,因为一次性运行所有测试可能会因为超出速率限制而被封禁IP,如https://docs.btcturk.com/rate-limits中所述。

测试端点

https://api-dev.btcturk.com/端点用于测试配置。使用此基本端点时,私有API调用(例如购买、销售)不会有实际效果。

重要说明:正常API密钥无法与测试端点一起使用。您必须从https://pro-dev.btcturk.com/获取测试账户API密钥,如在此页面上所述,或者,更改api-dev部分的端点,只需在url_cache模块的源代码中将api部分替换即可。
请注意,如果您使用常规端点,测试将提交/取消真实订单。

日志记录

在测试中支持日志记录。传递RUST_LOG环境变量,并将其设置为所需的日志级别(例如,RUST_LOG=trace)。

日志通常只有在测试失败时才可见。

$ RUST_LOG=debug cargo test

测试公共API调用

以下示例将运行get_ohlc测试或任何包含该名称的测试。

$ cargo test get_ohlc -- --ignored

测试私有API调用

私有端点需要API密钥,因此需要进行测试。

  • 创建一个名为keys.txt的文本文件。
  • 将您的公钥放在文件的第1行。
  • 将您的私钥放在文件的第2行。
  • 保存并记录文件的路径。
  • KEYS_PATH环境变量传递给cargo test,并将其设置为文件路径。
$ KEYS_PATH=~/keys.txt cargo test get_all_orders -- --ignored

依赖项

~8–11MB
~219K SLoC