前面几天,我们一起封装了 BigONE 提供的“身份验证”与“资产账户”部分的 API。
现在,离搭建咱们的自动化交易系统更近一步了。
本次,大家一起来封装有关“订单”的 API。
BigOne 的订单系统包括:创建订单、取消指定订单、取消所有订单、获取指定订单、获取全部订单等,对应的 API 说明如下:
创建订单的 API:
取消指定订单的 API:
取消所有订单的 API:
获取指定订单的 API:
获取全部订单的 API:
Step1 对创建订单 API 的封装。
构造创建订单的参数结构 OrderCreate
。
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; }
}
构造接收“创建订单”返回的数据结构 OrderResponse
。
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:买家愿意出的最高价(买价)
创建订单的方法 CreatOrders
。
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 的封装。
构造取消订单的参数结构 OrderCancel
。
public class OrderCancel
{
/// <summary>
/// id of the order
/// </summary>
public string order_id { get; set; }
}
取消给定订单的方法 CancelOrder
。
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 的封装。
构造取消所有订单的参数结构 OrderAllCancel
。
public class OrderAllCancel
{
public string market_id { get; set; }
}
取消所有订单的方法 CancelAllOrder
。
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 的封装。
构造获取指定订单的参数结构 OrderGet
。
public class OrderGet
{
/// <summary>
/// id of the order
/// </summary>
public string order_id { get; set; }
}
获取指定订单的方法 GetOrder
。
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 的封装。
构造获取全部订单的参数结构 orderAllGet
。
public class OrderAllGet
{
public string market_id { get; set; }
}
构造接收“获取全部订单”返回的数据结构 GetOrderAllJson
。
internal class GetOrderAllJasonDataNode
{
public OrderResponseData node;
}
internal class GetOrderAllJsonData
{
public List<GetOrderAllJasonDataNode> edges;
}
internal class GetOrderAllJson
{
public GetOrderAllJsonData data;
}
获取全部订单的方法 GetAllOrder
。
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!
相关图文:
经过8年多的发展,LSGO软件技术团队在「地理信息系统」、「数据统计分析」、「计算机视觉」等领域积累了丰富的研发经验,也建立了人才培养的完备体系,目前深耕的领域为「机器学习与量化金融」,欢迎对计算机技术感兴趣的同学加入,与我们共同成长进步。
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码: