Skip to content

Commit f8985e9

Browse files
Support Amending Orders in Bulk (#532)
1 parent 65f3843 commit f8985e9

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

src/ExchangeSharp/API/Exchanges/BitMEX/ExchangeBitMEXAPI.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ public async Task CancelAllOrdersAsync(string marketSymbol = null)
596596
JToken token = await MakeJsonRequestAsync<JToken>(query, BaseUrl, payload, "DELETE");
597597
}
598598

599-
public async Task Deadman(int timeoutMS)
599+
public async Task DeadmanAsync(int timeoutMS)
600600
{
601601
Dictionary<string, object> payload = await GetNoncePayloadAsync();
602602
payload["timeout"] = timeoutMS;
@@ -611,7 +611,7 @@ protected override async Task<ExchangeOrderResult> OnPlaceOrderAsync(ExchangeOrd
611611
return ParseOrder(token);
612612
}
613613

614-
protected override async Task<ExchangeOrderResult[]> OnPlaceOrdersAsync(params ExchangeOrderRequest[] orders)
614+
private async Task<ExchangeOrderResult[]> PlaceOrdersAsync(string requestMethod, params ExchangeOrderRequest[] orders)
615615
{
616616
List<ExchangeOrderResult> results = new List<ExchangeOrderResult>();
617617
Dictionary<string, object> payload = await GetNoncePayloadAsync();
@@ -623,23 +623,39 @@ protected override async Task<ExchangeOrderResult[]> OnPlaceOrdersAsync(params E
623623
orderRequests.Add(subPayload);
624624
}
625625
payload["orders"] = orderRequests;
626-
JToken token = await MakeJsonRequestAsync<JToken>("/order/bulk", BaseUrl, payload, "POST");
626+
JToken token = await MakeJsonRequestAsync<JToken>("/order/bulk", BaseUrl, payload, requestMethod);
627627
foreach (JToken orderResultToken in token)
628628
{
629629
results.Add(ParseOrder(orderResultToken));
630630
}
631631
return results.ToArray();
632632
}
633633

634+
protected override async Task<ExchangeOrderResult[]> OnPlaceOrdersAsync(params ExchangeOrderRequest[] orders)
635+
{
636+
return await PlaceOrdersAsync("POST", orders);
637+
}
638+
639+
public async Task<ExchangeOrderResult[]> AmendOrdersAsync(params ExchangeOrderRequest[] orders)
640+
{
641+
return await PlaceOrdersAsync("PUT", orders);
642+
}
643+
634644
private void AddOrderToPayload(ExchangeOrderRequest order, Dictionary<string, object> payload)
635645
{
636646
payload["symbol"] = order.MarketSymbol;
637647
payload["ordType"] = order.OrderType.ToStringInvariant();
638648
payload["side"] = order.IsBuy ? "Buy" : "Sell";
639649
payload["orderQty"] = order.Amount;
640650

651+
if(order.OrderId != null)
652+
payload["orderID"] = order.OrderId;
653+
654+
if(order.ClientOrderId != null)
655+
payload["clOrdID"] = order.ClientOrderId;
656+
641657
if(order.OrderType!=OrderType.Market)
642-
payload["price"] = order.Price;
658+
payload["price"] = order.Price;
643659

644660
if (order.ExtraParameters.TryGetValue("execInst", out var execInst))
645661
{
@@ -696,6 +712,7 @@ private ExchangeOrderResult ParseOrder(JToken token)
696712
IsBuy = token["side"].ToStringInvariant().EqualsWithOption("Buy"),
697713
OrderDate = token["transactTime"].ConvertInvariant<DateTime>(),
698714
OrderId = token["orderID"].ToStringInvariant(),
715+
ClientOrderId = token["clOrdID"].ToStringInvariant(),
699716
MarketSymbol = token["symbol"].ToStringInvariant()
700717
};
701718

src/ExchangeSharp/Model/ExchangeOrderRequest.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ public class ExchangeOrderRequest
5454
/// </summary>
5555
public bool IsMargin { get; set; }
5656

57+
/// <summary>Order id</summary>
58+
public string OrderId { get; set; }
59+
60+
/// <summary>
61+
/// Client Order id
62+
/// Order IDs put here will be returned in the Order Result returned by the exchange
63+
/// Not all exchanges support this
64+
/// </summary>
65+
public string ClientOrderId { get; set; }
66+
5767
/// <summary>
5868
/// Whether the amount should be rounded - set to false if you know the exact amount, otherwise leave
5969
/// as true so that the exchange does not reject the order due to too many decimal places.

src/ExchangeSharp/Model/ExchangeOrderResult.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ public sealed class ExchangeOrderResult
2020
/// <summary>Order id</summary>
2121
public string OrderId { get; set; }
2222

23+
/// <summary>
24+
/// Client Order id
25+
/// Order IDs put here in the Request will be returned by the exchange
26+
/// Not all exchanges support this
27+
/// </summary>
28+
public string ClientOrderId { get; set; }
29+
2330
/// <summary>Result of the order</summary>
2431
public ExchangeAPIOrderResult Result { get; set; }
2532

0 commit comments

Comments
 (0)