public void SetMarketSellOrderTest() { var orderId = Guid.NewGuid().ToString("N"); var marketOrder = FixHelpers.CreateNewOrder(orderId, isBuy: false); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>()); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.PENDING_NEW)); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.PENDING_NEW)); response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>()); ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.FILLED)); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.TRADE)); Assert.That(ex.LastQty.Obj, Is.EqualTo(marketOrder.OrderQty.Obj)); Assert.That(ex.LastPx.Obj, Is.GreaterThan(0)); }
public void LimitOrderVolumeLessThenMinAssetVolumeTest() { var assetPairs = privateApi.Assets.GetAssetPairs().GetResponseObject().FindAll(a => a.IsDisabled == false); var validAssets = privateApi.Assets.GetAssets(false).GetResponseObject(). FindAll(a => a.IsDisabled == false).FindAll(a => a.IsTradable == true); assetPairs = assetPairs.FindAll(a => a.IsDisabled == false ).FindAll(a => validAssets.Any(va => va.Id == a.BaseAssetId) ).FindAll(a => validAssets.Any(va => va.Id == a.QuotingAssetId) ); var assetPair = assetPairs.Find(a => a.MinVolume > 0); var orderId = Guid.NewGuid().ToString(); var price = 0.01m; var quantity = 0.01m; var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: true, qty: (decimal)(assetPair.MinVolume / 2), price: price, assetPairId: assetPair.Id); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null, $"unexpected response: {response.ToString().Replace("\u0001", "|")}"); Assert.That(response, Is.TypeOf <ExecutionReport>(), $"unexpected response type response: {response.ToString().Replace("\u0001", "|")}"); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.REJECTED)); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.REJECTED)); }
public void WrongCredentialsTest() { Environment.SetEnvironmentVariable("FIXWrongPassword", TestData.GenerateString(6)); var fixClient2 = new FixClient("LYKKE_T", "SENDER_T", Init.LocalConfig()["TestClient"]["ServiceUrl"].ToString(), 12357); fixClient2.Init(); var orderId = Guid.NewGuid().ToString(); var price = 0.01m; var quantity = 0.01m; var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: true, qty: quantity, price: price); try { fixClient2.Send(marketOrder); Assert.Fail("First instance on FIXClient has not been disconnected after second has been created"); } catch (Exception) { fixClient2.GetResponse <Message>(); } finally { Environment.SetEnvironmentVariable("FIXWrongPassword", null); } }
public void AllMEssagesStoredInAzureTest() { var price = 0.01m; var quantity = 0.01m; var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: true, qty: quantity, price: price); fixClient.Send(marketOrder); var jss = marketOrder.ToString(); var messageStringRepresentation = jss.Replace("\u0001", "|"); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>(), $" response: {JsonRepresentation(response)}"); //because message has timestamp and seems to be uniq - use First. var azureMessage = GetValueFromAzure(messageStringRepresentation); int timer = 60; while (timer > 0) { if (azureMessage.Count == 0) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); azureMessage = GetValueFromAzure(messageStringRepresentation); } else { timer = 60; break; } } Assert.That(azureMessage.Count, Is.GreaterThan(0), $"Unexpected azure message count. Expected azure message '{messageStringRepresentation}'"); Assert.That(azureMessage.First().StringValue, Is.EqualTo(messageStringRepresentation), "Unexpected Azure value"); var responseStringRepresentation = response.ToString().Replace("\u0001", "|"); var responseFromAzure = GetValueFromAzure(responseStringRepresentation); while (timer > 0) { if (responseFromAzure.Count == 0) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); responseFromAzure = GetValueFromAzure(responseStringRepresentation); } else { timer = 60; break; } } Assert.That(responseFromAzure.Count, Is.GreaterThan(0), $"Unexpected azure message count. Expected azure message '{responseStringRepresentation}'"); Assert.That(responseFromAzure.First().StringValue, Is.EqualTo(responseStringRepresentation), "Unexpected Azure value"); }
public void SetMarketSellOrderWrongAssetPairTest() { var orderId = Guid.NewGuid().ToString("N"); var marketOrder = FixHelpers.CreateNewOrder(orderId, isBuy: false, assetPairId: "FakeAssetId"); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>()); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.REJECTED)); }
public void LimitOrderPriceLessThenMinAssetPriceTest() { Environment.SetEnvironmentVariable("WalletApiUrl", "https://api-dev.lykkex.net/api"); var assetPairs = privateApi.Assets.GetAssetPairs().GetResponseObject().FindAll(a => a.IsDisabled == false); var validAssets = privateApi.Assets.GetAssets(false).GetResponseObject(). FindAll(a => a.IsDisabled == false).FindAll(a => a.IsTradable == true); assetPairs = assetPairs.FindAll(a => a.IsDisabled == false ).FindAll(a => validAssets.Any(va => va.Id == a.BaseAssetId) ).FindAll(a => validAssets.Any(va => va.Id == a.QuotingAssetId) ); var assetPair = assetPairs.Find(a => a.MinVolume > 0); var orderId = Guid.NewGuid().ToString(); var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: false, qty: (decimal)(assetPair.MinVolume), price: (decimal)(assetPair.MinVolume / (2 * Math.Pow(10, assetPair.Accuracy))), assetPairId: assetPair.Id); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null, $"unexpected response: {response.ToString().Replace("\u0001", "|")}"); Assert.That(response, Is.TypeOf <ExecutionReport>(), $"unexpected response type response: {response.ToString().Replace("\u0001", "|")}"); var ex = (ExecutionReport)response; // Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.REJECTED)); // Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.REJECTED)); AuthenticateModel auth = new AuthenticateModel() { ClientInfo = "<android>;Model:<LENOVO S860>;Os:<android>;Screen:<720x1184>", Email = Init.LocalConfig()["User"].ToString(), Password = Init.LocalConfig()["Pass"].ToString() }; var authResponse = walletApi.Auth.PostAuthResponse(auth); var obook = walletApi.LimitOrders.GetOffchainLimitList(authResponse.GetResponseObject().Result.Token, assetPair.Id).GetResponseObject().Result.Orders.ToList().Find(o => o.Id == ex.OrderID.ToString()); }
public void LimitOrderWrongPriceTest(object p) { var orderId = Guid.NewGuid().ToString(); var price = Decimal.Parse(p.ToString()); var quantity = 0.01m; var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: true, qty: quantity, price: price); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null, $"unexpected response: {response.ToString().Replace("\u0001", "|")}"); Assert.That(response, Is.TypeOf <ExecutionReport>(), $"unexpected response type response: {response.ToString().Replace("\u0001", "|")}"); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.REJECTED)); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.REJECTED)); }
public void LimitOrderWrongAssetPairTest(string assetPair) { var orderId = Guid.NewGuid().ToString(); var price = 0.01m; var quantity = 0.01m; var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: true, qty: quantity, price: price, assetPairId: assetPair); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null, $"unexpected response: {JsonRepresentation(response)}"); Assert.That(response, Is.TypeOf <ExecutionReport>(), $"unexpected response type. response: {JsonRepresentation(response)}"); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.REJECTED)); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.REJECTED)); }
public void CancelLimitSellTest() { var orderId = Guid.NewGuid().ToString(); var price = 0.01m; var quantity = 0.01m; var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: false, qty: quantity, price: price); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>()); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.PENDING_NEW)); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.PENDING_NEW)); var cancelRequest = new OrderCancelRequest { ClOrdID = new ClOrdID(Guid.NewGuid().ToString()), OrigClOrdID = new OrigClOrdID(orderId), TransactTime = new TransactTime(DateTime.UtcNow) }; fixClient.Send(cancelRequest); response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null, $"unexpected response: {JsonRepresentation(response)}"); Assert.That(response, Is.TypeOf <ExecutionReport>()); ex = (ExecutionReport)response; if (ex.OrdStatus.Obj != OrdStatus.CANCELED) { response = fixClient.GetResponse <Message>(); } ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.CANCELED), "Unexpected order status"); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.CANCELED), "Unexpected exectype status"); }
public void SetLimitOrderBuyTest() { var price = 0.01m; var quantity = 0.01m; var limitOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: true, qty: quantity, price: price); fixClient.Send(limitOrder); var response = fixClient.GetResponse <Message>(); Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>(), $" response: {JsonRepresentation(response)}"); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.PENDING_NEW)); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.PENDING_NEW)); Assert.That(ex.AvgPx.Obj, Is.EqualTo(0m), "Price should be 0 in case of Pending status"); Assert.That(ex.OrdType.Obj, Is.EqualTo('2'), "Should be 2, this is Limit order"); Assert.That(ex.OrderQty.Obj, Is.EqualTo(quantity), "unexpected quantity"); }
void CreateLimitOrderWithAssetPair(string assetPair, decimal volume) { try { var orderId = Guid.NewGuid().ToString(); var price = 0.01m; var quantity = volume + 0.5m; var marketOrder = FixHelpers.CreateNewOrder(orderId, isMarket: false, isBuy: true, qty: quantity, price: price, assetPairId: assetPair); fixClient.Send(marketOrder); var response = fixClient.GetResponse <Message>(); int aa = 60; while (aa-- > 0) { if (((ExecutionReport)response).ClOrdID.Obj.ToString() == orderId) { break; } response = fixClient.GetResponse <Message>(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); } Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>()); var ex = (ExecutionReport)response; Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.PENDING_NEW), $"unexpected response status for assetPair {assetPair}. response: {response.ToString().Replace("\u0001", "|")}"); Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.PENDING_NEW), $"unexpected response type for assetPair {assetPair}. response: {response.ToString().Replace("\u0001", "|")}"); // clean myself var cancelRequest = new OrderCancelRequest { ClOrdID = new ClOrdID(Guid.NewGuid().ToString()), OrigClOrdID = new OrigClOrdID(orderId), TransactTime = new TransactTime(DateTime.UtcNow) }; fixClient.Send(cancelRequest); response = fixClient.GetResponse <Message>(); int a = 60; while (a-- > 0) { if (((ExecutionReport)response).ClOrdID.Obj.ToString() == cancelRequest.ClOrdID.Obj.ToString()) { break; } response = fixClient.GetResponse <Message>(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); } Assert.That(response, Is.Not.Null); Assert.That(response, Is.TypeOf <ExecutionReport>(), $"unexpected response type for assetPair {assetPair}. response: {response.ToString().Replace("\u0001", "|")}"); ex = (ExecutionReport)response; //Assert.That(ex.OrdStatus.Obj, Is.EqualTo(OrdStatus.PENDING_CANCEL), $"unexpected response status for assetPair {assetPair}. response: {response.ToString().Replace("\u0001", "|")}"); //Assert.That(ex.ExecType.Obj, Is.EqualTo(ExecType.PENDING_CANCEL), $"unexpected response type for assetPair {assetPair}. response: {response.ToString().Replace("\u0001", "|")}"); int time = 120; while (time-- > 0) { if (ex.OrdStatus.Obj != OrdStatus.CANCELED) { response = fixClient.GetResponse <Message>(); ex = (ExecutionReport)response; System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); } else { break; } } } catch (Exception) { //Assert.Fail($"An error occured with assetPair {assetPair}. Number of Exceptions {i++}"); } }