背景

前几天我们介绍了如何使用 BigONE Developer API V2 来获取身份令牌的方法「如何利用BigOne的API制作自动化交易系统 – 身份验证」。一旦获取了身份令牌,我们就可以在网络请求的 header 中加入令牌来获取自己的账户数据,创建买入、卖出订单,撤销未成交的订单,查询订单状态等,为自己的自动化交易系统搭建底层框架。

有人会问,如果做高频交易这个接口是否满足要求呢?我们来看文档说明:

  • 针对每个独立IP访问限额为: 每5秒钟/500次请求。
  • 针对每个用户账号访问限额为:每小时/2000次请求。

技术图文:如何利用BigOne的API制作自动化交易系统 — 获取账户资产-编程知识网

BigONE Developer API V2 每秒钟可以处理大约100次请求,对普通的交易系统应该够用了,我最近利用网格交易法做自动化交易,30秒轮询一遍订单状态,每天平均能有两笔成交,跟预期的差不多。

上次解决了身份验证的问题,本次向大家介绍如何实现账户资产的查询问题。


技术分析

我们先看一下文档中关于账户资产Account的数据结构

  • asset_uuid:表示资产的通用唯一识别码(Universally Unique Identifier,uuid)。
  • balance:账户余额
  • locked_balance:冻结的账户余额

技术图文:如何利用BigOne的API制作自动化交易系统 — 获取账户资产-编程知识网

调用 API 返回的结构与文档给出的结构有所出入,除了该三项属性之外,还有一项 asset_id 属性,表示资产的标示,如我们常见的BTCEHTUSDTONE等等。

我们再看一下文档中获取资产的 API

通过该 API 可以获得自己账户中所有资产的集合。

技术图文:如何利用BigOne的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; }
}

下图列举了部分错误信息以及对应的编码:

技术图文:如何利用BigOne的API制作自动化交易系统 — 获取账户资产-编程知识网

Step3:构造接收账户资产的结构 Account

public class Account
{// 资产元素的集合public List<AccountItem> data { get; set; }// 错误信息public List<Errors> errors { get; set; }
}

Account由两部分组成:

  • 第一部分是关于账户资产的集合 List<AccountItem> data,即获取账户中所有的数字货币以及这些数字货币的数量信息。
  • 第二部分是接收网络请求发生错误后返回的错误信息List<Errors> errors

技术图文:如何利用BigOne的API制作自动化交易系统 — 获取账户资产-编程知识网

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(@"------------------");

以上代码演示了获取自己账户中 ONEUSDTBTC 数量的方法。这里主要是介绍自动化交易系统的代码实现而非显摆自己的账户余额,我就不贴 BigONE 的余额啦,见谅!(其实是穷!!)


总结

到此为止,获取账户资产余额的方法就介绍完毕了。通过该方法可以得到自己账户中各项资产的余额,下篇图文是有关订单API的封装,订单搞定之后就可以尝试着验证自己的交易策略了。

今天就到这里吧!如果大家对自动化交易感兴趣,我们可以一起来完善该交易系统。欢迎与我联系啊,See You!


相关图文

  • 数字货币 One 的投资价值分析
  • 赚钱是刚需,如何正确的交易股票?
  • 我们能否效仿李笑来的投资策略?
  • 如何利用 C# 爬取 One 的交易数据?
  • 如何利用 C# 爬取 One 持有者返利数据?
  • 如何利用 C# 爬取BigOne交易所的公告?
  • 如何利用 C# 爬取Gate.io交易所的公告?
  • 如何利用 C# 爬取带 Token 验证的网站数据?
  • 如何利用 C# 开发「股票数据分析软件」(上)
  • 如何利用 C# 开发「股票数据分析软件」(中)
  • 如何利用 C# 开发「股票数据分析软件」(下)
  • 如何利用 C# 爬取「财报说」中的股票数据?
  • 如何利用BigOne的API制作自动化交易系统 – 身份验证