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));
            }
Пример #3
0
            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++}");
                }
            }