public void OpenAndCloseOrder()
        {
            var ticketList  = new List <int>();
            var testAccount = 1111;// int.Parse(ConfigurationManager.AppSettings["testaccount"]);

            using (var mt = TestHelpers.CreateWrapper())
            {
                for (int i = 0; i < 10; i++)
                {
                    //arrange
                    var tti = new TradeTransInfo();
                    tti.Cmd     = TradeCommand.Buy;
                    tti.Type    = TradeTransactionType.BrOrderOpen;
                    tti.Symbol  = "EURUSD";
                    tti.Comment = "unit test";
                    tti.OrderBy = testAccount;
                    tti.Price   = 1.16033;
                    tti.Volume  = 10;

                    //act
                    var result = mt.TradeTransaction(tti);

                    //assert
                    Assert.AreEqual(0, result);
                    Assert.IsTrue(tti.Order > 0);
                    ticketList.Add(tti.Order);
                }

                foreach (var item in ticketList)
                {
                    //arrange
                    var tti = new TradeTransInfo();
                    tti.Cmd     = TradeCommand.Buy;
                    tti.Type    = TradeTransactionType.BrOrderClose;
                    tti.Symbol  = "EURUSD";
                    tti.Comment = "unit test";
                    tti.OrderBy = testAccount;
                    tti.Price   = 1.16033;
                    tti.Volume  = 10;
                    tti.Order   = item;

                    //act
                    var result = mt.TradeTransaction(tti);

                    //assert
                    Assert.AreEqual(0, result, $"close order {tti.Order} error");
                }
            }
        }
Пример #2
0
        public void TradeTransaction_ParametersToOpenTradeProvided_TradeOpened()
        {
            using (var mt = TestHelpers.CreateWrapper())
            {
                //Arrange
                var tti = new TradeTransInfo
                {
                    Cmd     = TradeCommand.Balance,
                    OrderBy = 1000,
                    Comment = "Test deposit",
                    Price   = 1,
                    Type    = TradeTransactionType.BrBalance
                };

                //Act
                var result = mt.TradeTransaction(tti);

                //Assert
                Assert.AreEqual(0, result);
                Assert.IsTrue(tti.Order > 1000);
            }
        }
Пример #3
0
 public async Task TradeCheckStops([FromBody] TradeTransInfo trade, double CheckPrice)
 {
     await Task.Run(() => manager.TradeCheckStops(trade, CheckPrice));
 }
Пример #4
0
 public async Task <TradeTransInfo> TradeTransaction([FromBody] TradeTransInfo trade)
 {
     return(await Task.Run(() => manager.TradeTransaction(trade)));
 }
        /// <summary>
        /// Demonstration of new order opening process using regular and pumping connection simultaneously
        /// </summary>
        /// <returns></returns>
        public static ResultCode OpenTrade()
        {
            ResultCode result;

            var prices = new Dictionary <string, SymbolInfo>();

            var mgr = new Manager(Constants.Server,
                                  Constants.Login,
                                  Constants.Password,
                                  (ctx, type, message, exception) =>
            {
                if (exception != null)
                {
                    Log.Error(exception);
                }
                else
                {
                    Log.Info($"[{type}] {message}");
                }
            });

            Log.Trace("Connect...");
            result = mgr.Connect();
            Log.Trace($"Connect result: {result}");

            if (result != ResultCode.Ok)
            {
                return(result);
            }

            // create instance
            var pump = new ManagerPumpEx(Constants.Server,
                                         Constants.Login,
                                         Constants.Password,
                                         (ctx, type, message, exception) =>
            {
                if (exception != null)
                {
                    Log.Error(exception);
                }
                else
                {
                    Log.Info($"[{type}] {message}");
                }
            })
            {
            };

            pump.Start += sender =>
            {
                Log.Info("Pumping started");
            };

            pump.Stop += sender =>
            {
                Log.Info("Pumping stopped");
            };

            pump.BidAsk += sender =>
            {
                lock (prices)
                {
                    // get last received quotes
                    foreach (var pi in sender.SymbolInfoUpdated())
                    {
                        // Debug.Print($"{DateTime.Now} - {pi.Key}, {pi.Value.Bid}");

                        prices[pi.Key] = pi.Value;
                    }
                }
            };


            Log.Trace("Connect...");
            result = pump.Connect();
            Log.Trace($"Connect result: {result}");

            if (result != ResultCode.Ok)
            {
                return(result);
            }

            try
            {
                // await for prices
                do
                {
                    Thread.Sleep(100);

                    lock (prices)
                    {
                        SymbolInfo si;
                        if (!prices.TryGetValue("EURUSD", out si))
                        {
                            continue;
                        }

                        break;
                    }
                } while (true);

                var tti = new TradeTransInfo()
                {
                    Price                = prices["EURUSD"].Ask,
                    Comment              = "opened by demo app",
                    OrderBy              = 1000, // put there client account number
                    Symbol               = "EURUSD",
                    Volume               = 10,   // 0.1 lots
                    TradeCommand         = TradeCommand.Buy,
                    TradeTransactionType = TradeTransactionType.BrOpen
                };

                Log.Trace("TradeTransaction...");
                result = mgr.TradeTransaction(ref tti);
                Log.Trace($"TradeTransaction result: {result}");

                if (result != ResultCode.Ok)
                {
                    return(result);
                }
            }
            finally
            {
                Log.Trace("Disconnect...");
                result = pump.Disconnect();
                Log.Trace($"Disconnect result: {result}");

                Log.Trace("Disconnect...");
                result = mgr.Disconnect();
                Log.Trace($"Disconnect result: {result}");
            }

            return(result);
        }