背景
前面几天,我们一起封装了 BigONE 提供的身份验证与资产账户部分的 API。
现在,离搭建咱们的自动化交易系统更近一步了。
本次,大家一起来封装有关订单的 API。
技术分析
BigOne 的订单系统包括:<u>创建订单、取消指定订单、取消所有订单、获取指定订单、获取全部订单等</u>,对应的 API 说明如下:
创建订单的 API:

取消指定订单的 API:

取消所有订单的 API:

获取指定订单的 API:

获取全部订单的 API:


代码实现
Step1 对创建订单 API 的封装。
<u>构造创建订单的参数结构 OrderCreate</u>。
public class OrderCreate
{
/// <summary>
/// market id,EOS-BTC
/// </summary>
public string market_id { get; set; }
/// <summary>
/// order side one of "ASK"/"BID"
/// </summary>
public string side { get; set; }
/// <summary>
/// order price string
/// </summary>
public string price { get; set; }
/// <summary>
/// order amount string, must larger than 0
/// </summary>
public string amount { get; set; }
}
<u>构造接收“创建订单”返回的数据结构 OrderResponse</u>。

public class OrderResponseData
{
public string updated_at { get; set; }
/// <summary>
/// one of "FILLED"/"PENDING"/"CANCLED"
/// </summary>
public string state { get; set; }
/// <summary>
/// one of ASK/BID
/// </summary>
public string side { get; set; }
/// <summary>
/// order price
/// </summary>
public string price { get; set; }
public string market_uuid { get; set; }
/// <summary>
/// id of market
/// </summary>
public string market_id { get; set; }
public string inserted_at { get; set; }
/// <summary>
/// id of order
/// </summary>
public string id { get; set; }
/// <summary>
/// already filled amount
/// </summary>
public string filled_amount { get; set; }
/// <summary>
/// average price of the deal
/// </summary>
public string avg_deal_price { get; set; }
/// <summary>
/// order amount
/// </summary>
public string amount { get; set; }
/// <summary>
/// 格式化输出
/// </summary>
/// <returns></returns>
public override string ToString()
{
DateTime dt1 = DateTime.Parse(inserted_at);
DateTime dt2 = DateTime.Parse(updated_at);
string result =
"inserted_at:" + LSGOComFun.TranslateToStdDateTime(dt1) + ","
+ "updated_at:" + LSGOComFun.TranslateToStdDateTime(dt2) + ","
+ "market_id:" + market_id + ","
+ "id:" + id + ","
+ "state:" + state + ","
+ "side:" + side + ","
+ "price:" + price + ","
+ "amount:" + amount;
return result;
}
}
public class OrderResponse
{
//{"errors":[{"message":"invalid token","code":10018}],"data":null}
public OrderResponseData data { get; set; }
public List<Errors> errors { get; set; }
}
side属性:
- Ask:卖家喊出来的价(卖价)
- Bid:买家愿意出的最高价(买价)
<u>创建订单的方法 CreatOrders</u>。
public static List<OrderResponse> CreatOrders(List<OrderCreate> lst)
{
if (lst == null)
throw new ArgumentNullException();
List<OrderResponse> result = new List<OrderResponse>();
string url = ApiEntryPoint + "viewer/orders";
for (int i = 0, len = lst.Count; i < len; i++)
{
string token = "Bearer " + GetToken();
RestClient client = new RestClient(url);
RestRequest request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("authorization", token);
string json = JsonConvert.SerializeObject(lst[i]);
request.AddParameter("application/json", json,
ParameterType.RequestBody);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
IRestResponse response = client.Execute(request);
string str = response.Content;
StringReader sr = new StringReader(str);
JsonTextReader jsonReader = new JsonTextReader(sr);
JsonSerializer serializer = new JsonSerializer();
OrderResponse order = serializer.Deserialize<OrderResponse>(jsonReader);
if (order!=null)
result.Add(order);
}
return result;
}
Step2 对取消指定订单 API 的封装。
<u>构造取消订单的参数结构 OrderCancel</u>。
public class OrderCancel
{
/// <summary>
/// id of the order
/// </summary>
public string order_id { get; set; }
}
<u>取消给定订单的方法 CancelOrder</u>。
public static List<OrderResponse> CancelOrder(List<OrderCancel> lst)
{
if (lst == null)
throw new ArgumentNullException();
List<OrderResponse> result = new List<OrderResponse>();
for (int i = 0, len = lst.Count; i < len; i++)
{
string token = "Bearer " + GetToken();
string url = ApiEntryPoint + "viewer/orders/"
+ lst[i].order_id + "/cancel";
RestClient client = new RestClient(url);
RestRequest request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("authorization", token);
string json = JsonConvert.SerializeObject(lst[i]);
request.AddParameter("application/json", json,
ParameterType.RequestBody);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
IRestResponse response = client.Execute(request);
string str = response.Content;
StringReader sr = new StringReader(str);
JsonTextReader jsonReader = new JsonTextReader(sr);
JsonSerializer serializer = new JsonSerializer();
OrderResponse order = serializer.Deserialize<OrderResponse>(jsonReader);
if (order != null)
result.Add(order);
}
return result;
}
Step3 对取消所有订单 API 的封装。
<u>构造取消所有订单的参数结构 OrderAllCancel</u>。
public class OrderAllCancel
{
public string market_id { get; set; }
}
<u>取消所有订单的方法 CancelAllOrder</u>。
public static bool CancelAllOrder(List<OrderAllCancel> lst)
{
if (lst == null)
throw new ArgumentNullException();
for (int i = 0, len = lst.Count; i < len; i++)
{
string token = "Bearer " + GetToken();
string url = ApiEntryPoint + "viewer/orders/cancel_all";
RestClient client = new RestClient(url);
RestRequest request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("authorization", token);
string json = JsonConvert.SerializeObject(lst[i]);
request.AddParameter("application/json", json,
ParameterType.RequestBody);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
IRestResponse response = client.Execute(request);
if (response.StatusCode != HttpStatusCode.OK)
{
return false;
}
}
return true;
}
Step4 对获取指定订单 API 的封装。
<u>构造获取指定订单的参数结构 OrderGet</u>。
public class OrderGet
{
/// <summary>
/// id of the order
/// </summary>
public string order_id { get; set; }
}
<u>获取指定订单的方法 GetOrder</u>。
public static List<OrderResponse> GetOrder(List<OrderGet> lst)
{
if (lst == null)
throw new ArgumentNullException();
List<OrderResponse> result = new List<OrderResponse>();
for (int i = 0, len = lst.Count; i < len; i++)
{
string token = "Bearer " + GetToken();
string url = ApiEntryPoint + "viewer/orders/"
+ lst[i].order_id;
RestClient client = new RestClient(url);
RestRequest request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("authorization", token);
string json = JsonConvert.SerializeObject(lst[i]);
request.AddParameter("application/json", json,
ParameterType.RequestBody);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
IRestResponse response = client.Execute(request);
string str = response.Content;
StringReader sr = new StringReader(str);
JsonTextReader jsonReader = new JsonTextReader(sr);
JsonSerializer serializer = new JsonSerializer();
OrderResponse order = serializer.Deserialize<OrderResponse>(jsonReader);
if (order != null)
result.Add(order);
}
return result;
}
Step5 对获取全部订单 API 的封装。
<u>构造获取全部订单的参数结构 orderAllGet</u>。
public class OrderAllGet
{
public string market_id { get; set; }
}
<u>构造接收“获取全部订单”返回的数据结构 GetOrderAllJson</u>。
internal class GetOrderAllJasonDataNode
{
public OrderResponseData node;
}
internal class GetOrderAllJsonData
{
public List<GetOrderAllJasonDataNode> edges;
}
internal class GetOrderAllJson
{
public GetOrderAllJsonData data;
}
<u>获取全部订单的方法 GetAllOrder</u>。
public static List<OrderResponseData> GetAllOrder(OrderAllGet orderAllGet)
{
string token = "Bearer " + GetToken();
string url = ApiEntryPoint + "viewer/orders";
RestClient client = new RestClient(url);
RestRequest request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("authorization", token);
string json = JsonConvert.SerializeObject(orderAllGet);
request.AddParameter("application/json", json, ParameterType.RequestBody);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
IRestResponse response = client.Execute(request);
string str = response.Content;
StringReader sr = new StringReader(str);
JsonTextReader jsonReader = new JsonTextReader(sr);
JsonSerializer serializer = new JsonSerializer();
GetOrderAllJson order = serializer.Deserialize<GetOrderAllJson>(jsonReader);
List<OrderResponseData> result = new List<OrderResponseData>();
if (order.data.edges != null)
{
for (int i = 0; i < order.data.edges.Count; i++)
result.Add(order.data.edges[i].node);
}
return result;
}
总结
至此,有关订单的 API 就全部封装完毕了。
下篇图文大家一起“基于网格交易法”来做一个简单的自动化交易系统。今天就到这里吧!See You!
相关图文:
- 如何利用 C# 实现 K 最邻近算法?
- 如何利用 C# 实现 K-D Tree 结构?
- 如何利用 C# + KDTree 实现 K 最邻近算法?
- 如何利用 C# 对神经网络模型进行抽象?
- 如何利用 C# 实现神经网络的感知器模型?
- 如何利用 C# 实现 Delta 学习规则?
- 如何利用 C# 爬取带 Token 验证的网站数据?
- 如何利用 C# 向 Access 数据库插入大量数据?
- 如何利用 C# 开发「桌面版百度翻译」软件!
- 如何利用 C# 开发「股票数据分析软件」(上)
- 如何利用 C# 开发「股票数据分析软件」(中)
- 如何利用 C# 开发「股票数据分析软件」(下)
- 如何利用 C# 爬取「财报说」中的股票数据?
- 如何利用 C# 爬取 One 持有者返利数据!
- 如何利用 C# 爬取Gate.io交易所的公告!
- 如何利用 C# 爬取BigOne交易所的公告!
- 如何利用 C# 爬取 ONE 的交易数据?
- 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
- 如何利用 C# 爬取「当当 - 计算机与互联网图书销量榜」!
- 如何利用 C# 爬取「互动出版网 - 计算机图书销量榜」!
- 如何利用 C# 爬取「中国图书网 - 计算机与互联网图书销量榜」!
- 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
- 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!
- 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
- 如何利用BigOne的API制作自动化交易系统 -- 身份验证
- 如何利用BigOne的API制作自动化交易系统 -- 获取账户资产