背景
前几天我们介绍了如何使用 BigONE Developer API V2 来获取身份令牌的方法「如何利用BigOne的API制作自动化交易系统 -- 身份验证」。一旦获取了身份令牌,我们就可以在网络请求的 header
中加入令牌来获取自己的账户数据,创建买入、卖出订单,撤销未成交的订单,查询订单状态等,为自己的自动化交易系统搭建底层框架。
有人会问,如果做高频交易这个接口是否满足要求呢?我们来看文档说明:
- 针对每个独立IP访问限额为: 每5秒钟/500次请求。
- 针对每个用户账号访问限额为:每小时/2000次请求。

BigONE Developer API V2 每秒钟可以处理大约100次请求,对普通的交易系统应该够用了,我最近利用网格交易法做自动化交易,30秒轮询一遍订单状态,每天平均能有两笔成交,跟预期的差不多。
上次解决了身份验证的问题,本次向大家介绍如何实现账户资产的查询问题。
技术分析
<u>我们先看一下文档中关于账户资产Account
的数据结构</u>。
- asset_uuid:表示资产的通用唯一识别码(Universally Unique Identifier,uuid)。
- balance:账户余额
- locked_balance:冻结的账户余额

调用 API 返回的结构与文档给出的结构有所出入,除了该三项属性之外,还有一项 asset_id
属性,表示资产的标示,如我们常见的BTC
、EHT
、USDT
、ONE
等等。
<u>我们再看一下文档中获取资产的 API</u>。
通过该 API 可以获得自己账户中所有资产的集合。

代码实现
Step1:构造账户资产的结构 AccountItem
。
public class AccountItem
{
// 资产标识
public string asset_id { get; set; }
// 通用唯一识别码(Universally Unique Identifier)的缩写
public string asset_uuid { get; set; }
// 账户余额
public string balance { get; set; }
// 冻结的账户余额
public string locked_balance { get; set; }
//格式化输出
public override string ToString()
{
string result = "asset_id:" + asset_id + ","
+ "balance:" + balance + ","
+ "locked_balance:" + locked_balance;
return result;
}
}
Step2:构造网络请求发生错误时接收信息的结构 Errors
。
public class Errors
{
public string message { get; set; }
public string code { get; set; }
}
下图列举了部分错误信息以及对应的编码:

Step3:构造接收账户资产的结构 Account
。
public class Account
{
// 资产元素的集合
public List<AccountItem> data { get; set; }
// 错误信息
public List<Errors> errors { get; set; }
}
Account
由两部分组成:
- 第一部分是关于账户资产的集合
List<AccountItem> data
,即获取账户中所有的数字货币以及这些数字货币的数量信息。 - 第二部分是接收网络请求发生错误后返回的错误信息
List<Errors> errors
。

Step4:获取账户全部资产的方法 GetAccount
。
private string ApiEntryPoint = "https://big.one/api/v2/";
private static Account GetAccount()
{
string url = ApiEntryPoint + "viewer/accounts";
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
if (request != null)
{
request.Method = "GET";
string token = "Bearer " + GetToken();
request.Headers.Add("authorization", token);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
IHtmlDocument document = new JumonyParser().LoadDocument(request.GetResponse());
List<IHtmlNode> nos = document.Nodes().ToList();
string str = nos[0].ToString();
StringReader sr = new StringReader(str);
JsonTextReader jsonReader = new JsonTextReader(sr);
JsonSerializer serializer = new JsonSerializer();
return serializer.Deserialize<Account>(jsonReader);
}
return null;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
Step5:获取账户指定资产的方法 GetAccount
。
public static List<AccountItem> GetAccount(string[] assetId)
{
List<AccountItem> lst = GetAccount().data;
List<AccountItem> result = new List<AccountItem>();
if (lst == null)
return result;
for (int i = 0, len = assetId.Length; i < len; i++)
{
List<AccountItem> temp = lst.Where(
a =>
string.Equals(a.asset_id, assetId[i],
StringComparison.CurrentCultureIgnoreCase)
).ToList();
if (temp.Count != 0)
{
result.AddRange(temp);
}
}
return result;
}
Step6:使用方法举例。
string info = @"账户余额数据:" + Environment.NewLine;
string[] strs = new string[] {"ONE", "USDT", "BTC"};
List<AccountItem> lstAccount = GetAccount(strs);
for (int i = 0, len = lstAccount.Count; i < len; i++)
{
info += lstAccount[i] + Environment.NewLine;
}
Console.WriteLine(info);
Console.WriteLine(@"------------------");
以上代码演示了获取自己账户中 ONE、USDT、BTC 数量的方法。这里主要是介绍自动化交易系统的代码实现而非显摆自己的账户余额,我就不贴 BigONE 的余额啦,见谅!(其实是穷!!)
总结
到此为止,获取账户资产余额的方法就介绍完毕了。通过该方法可以得到自己账户中各项资产的余额,下篇图文是有关订单API的封装,订单搞定之后就可以尝试着验证自己的交易策略了。
今天就到这里吧!如果大家对自动化交易感兴趣,我们可以一起来完善该交易系统。欢迎与我联系啊,See You!
相关图文:
网友评论