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"); } } }
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); } }
public async Task TradeCheckStops([FromBody] TradeTransInfo trade, double CheckPrice) { await Task.Run(() => manager.TradeCheckStops(trade, CheckPrice)); }
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); }