Skip to content

Commit 0e3b4f7

Browse files
committed
fixed bugs in Bitfinex.OnGetCompletedOrderDetailsWebSocket()
- fixes #314
1 parent a7c5c4d commit 0e3b4f7

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

ExchangeSharp/API/Exchanges/Bitfinex/ExchangeBitfinexAPI.cs

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,11 @@ protected override IWebSocket OnGetCompletedOrderDetailsWebSocket(Action<Exchang
539539
return ConnectWebSocket(string.Empty, (_socket, msg) =>
540540
{
541541
JToken token = JToken.Parse(msg.ToStringFromUTF8());
542-
if (token is JArray array && array.Count > 1 && array[2] is JArray && array[1].ToStringInvariant() == "os")
542+
if (token[1].ToStringInvariant() == "hb")
543+
{
544+
// heartbeat
545+
}
546+
else if (token is JArray array && array.Count > 1 && array[2] is JArray && array[1].ToStringInvariant() == "os")
543547
{
544548
foreach (JToken orderToken in array[2])
545549
{
@@ -888,9 +892,9 @@ private ExchangeOrderResult ParseOrder(JToken order)
888892
};
889893
}
890894

891-
private ExchangeOrderResult ParseOrderWebSocket(JToken order)
892-
{
893-
/*
895+
private ExchangeOrderResult ParseOrderWebSocket(JToken order)
896+
{
897+
/*
894898
[ 0, "os", [ [
895899
"<ORD_ID>",
896900
"<ORD_PAIR>",
@@ -907,22 +911,31 @@ private ExchangeOrderResult ParseOrderWebSocket(JToken order)
907911
] ] ];
908912
*/
909913

910-
decimal amount = order[2].ConvertInvariant<decimal>();
911-
return new ExchangeOrderResult
912-
{
913-
Amount = amount,
914-
AmountFilled = amount,
915-
Price = order[6].ConvertInvariant<decimal>(),
916-
AveragePrice = order[7].ConvertInvariant<decimal>(),
917-
IsBuy = (amount > 0m),
918-
OrderDate = CryptoUtility.UnixTimeStampToDateTimeMilliseconds(order[8].ConvertInvariant<long>()),
919-
OrderId = order[0].ToStringInvariant(),
920-
Result = ExchangeAPIOrderResult.Filled,
921-
MarketSymbol = order[1].ToStringInvariant()
922-
};
923-
}
924-
925-
private IEnumerable<ExchangeOrderResult> ParseOrderV2(Dictionary<string, List<JToken>> trades)
914+
decimal amount = order[2].ConvertInvariant<decimal>();
915+
/*
916+
ACTIVE, EXECUTED @ PRICE(AMOUNT) e.g. "EXECUTED @ 107.6(-0.2)", PARTIALLY FILLED @ PRICE(AMOUNT), INSUFFICIENT MARGIN was: PARTIALLY FILLED @ PRICE(AMOUNT), CANCELED, CANCELED was: PARTIALLY FILLED @ PRICE(AMOUNT)
917+
*/
918+
string orderStatusString = order[5].ToStringInvariant().Split(' ')[0];
919+
return new ExchangeOrderResult
920+
{
921+
Amount = amount,
922+
AmountFilled = amount,
923+
Price = order[6].ConvertInvariant<decimal>(),
924+
AveragePrice = order[7].ConvertInvariant<decimal>(),
925+
IsBuy = (amount > 0m),
926+
OrderDate = order[8].ToDateTimeInvariant(),
927+
OrderId = order[0].ToStringInvariant(),
928+
Result = orderStatusString == "ACTIVE" ? ExchangeAPIOrderResult.Pending
929+
: orderStatusString == "EXECUTED" ? ExchangeAPIOrderResult.Filled
930+
: orderStatusString == "PARTIALLY" ? ExchangeAPIOrderResult.FilledPartially
931+
: orderStatusString == "INSUFFICIENT" ? ExchangeAPIOrderResult.Canceled
932+
: orderStatusString == "CANCELED" ? ExchangeAPIOrderResult.Canceled
933+
: ExchangeAPIOrderResult.Unknown,
934+
MarketSymbol = order[1].ToStringInvariant(),
935+
};
936+
}
937+
938+
private IEnumerable<ExchangeOrderResult> ParseOrderV2(Dictionary<string, List<JToken>> trades)
926939
{
927940

928941
/*
@@ -941,7 +954,7 @@ FEE_CURRENCY string Fee currency
941954
],
942955
*/
943956

944-
foreach (var kv in trades)
957+
foreach (var kv in trades)
945958
{
946959
ExchangeOrderResult order = new ExchangeOrderResult { Result = ExchangeAPIOrderResult.Filled };
947960
foreach (JToken trade in kv.Value)

0 commit comments

Comments
 (0)