1个不稳定版本
0.1.0 | 2022年3月1日 |
---|
#51 在 #api-calls
99KB
2.5K SLoC
非官方BtcTurk交易所 API绑定。
使用此crate向公共和私有端点进行API调用。WebSocket数据流尚未实现。这是一个异步crate,不支持阻塞调用。
此crate是在以下文档的帮助下制作的
有关更多信息和方法,请参阅crate的文档。
lib.rs
:
非官方BtcTurk
交易所 API绑定。
使用此crate向public
和private
端点进行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