public ActionResult AddOrder(short[] DeviceId, short[] OrderNum, int[] UnitID, string[] Remark, string[] Title, string[] Unit) { var trader = (Traders)Session["traders"]; var orders = new List <OrderList>(); for (int i = 0; i < DeviceId.Length; i++) { if (DeviceId[i] == 0 || OrderNum[i] == 0) { continue; } orders.Add(new OrderList() { DeviceId = DeviceId[i], OrderNum = OrderNum[i], UnitID = UnitID[i], Remark = Remark[i], Title = Title[i], UnitName = Unit[i] }); } var op = TraderService.AddTrader(trader, orders); if (op.Successed) { Session["traders"] = null; } return(new OpActionResult(op)); }
public ActionResult AddTrader(Traders obj) { string msg = ""; if (!UserService.CheckUserByCode(obj.Assigner, obj.AssignerUID, ref msg)) { return(new OpActionResult(Utility.OpResult.Fail(msg))); } if (TraderService.ExistsTitle(obj.Title, obj.FullTitle)) { return(new OpActionResult(Utility.OpResult.Fail("客户简称或全称已存在!"))); } obj.TraderTypeId = ""; obj.Pay = Request["Pay"]; obj.BusinessScopeId = Request["BusinessScopeId"]; var citys = obj.Cities; if (!citys.IsNullOrEmpty()) { var cs = citys.Split(',').Select(o => short.Parse(o)).ToList(); if (cs.Count == 3) { obj.CurrentProvinceId = cs[0]; obj.CurrentCityId = cs[1]; obj.CurrentCounty = cs[2]; } } Session["traders"] = obj; return(new OpActionResult(Utility.OpResult.Success())); }
/// <summary> /// 爆仓准备 /// </summary> /// <param name="t">要爆仓的用户</param> /// <returns>true表示保证率满足要求,false表示保证率不满足要求</returns> public bool Blast(Trader t) { //撤单 while (t.GetMaintainRatio(m) < preBlastThreshold)//true保证率>1,false|保证率依旧<1 { var couldRedo = AutoRedo(t); if (!couldRedo) { break; } } //保证金自动转入 if (t.GetMaintainRatio(m) < preBlastThreshold) { if (t.IsAutoAddBailFromCache) { var delta = t.GetMaintain(m) * 1.1m - t.Account.BailAccount.Sum; if (t.Account.CacheAccount.CnyAccount.Sum <= 100) { delta = t.Account.CacheAccount.CnyAccount.Sum; } var r = TraderService.OperateAddBailFromCache(t, delta, null); Blaster.Log.Info(string.Format("保证金转入:{0}-金额{1}-自动转入{2}-转入结果{3}", t.Name, delta, t.IsAutoAddBailFromCache, r)); } } var rrr = t.GetMaintainRatio(m) >= preBlastThreshold; return(rrr); }
public void ShoulGetTraderStatusBlack() {// Arrange TraderService traderService = new TraderService( this.provider, this.traderRep, this.logger); var trader = new Trader() { Id = 0, name = "Evgeniy", surname = "Nikulin", phone = "+7()", money = -100, }; traderRep.GetTrader(0).Returns(trader); // Act var result = traderService.GetTraderStatus(0); // Assert Assert.AreEqual("Black status", result); }
public CredentialsHandler( Credentials credentials, ClientService clientService, TraderService traderService ) { Password = null; Credentials = credentials; ClientService = clientService; TraderService = traderService; }
public void TestAddOrder() { Trader trader = new TraderService().FindTraderById(1); Strategy strategy = new StrategyService().FindStrategyById(1); OrderBook orderBook = new OrderBookService().FindOrderBookById(1); Order order = new Order { DateTime = DateTime.Now, Execution = null, IsBuy = true, Price = 12.3, Quantity = 12, Trader = trader }; new OrderService().AddOrder(order); }
public void ShouldReturnOnlyUsersFromBlackZone() { // Arrange TraderService tradersService = new TraderService(this.repository); // Act var orangeZoneTraders = tradersService.GetTradersFromBlackZone(); // Assert this.repository.Received(1).GetAll(); Assert.IsTrue(orangeZoneTraders.Count == this.repository.GetAll().Where(t => t.Balance < 0).Count()); }
public void ShouldReturnAllTraders() { // Arrange TraderService tradersService = new TraderService(this.repository); // Act var allTraders = tradersService.GetAllTraders(); // Assert this.repository.Received(1).GetAll(); Assert.IsTrue(allTraders.Count == this.repository.GetAll().Count()); }
/// <summary> /// 保证金账户金额是否大于要付的金额和手续费,每次付钱都要付手续费 /// </summary> /// <param name="ba"></param> /// <param name="delta"></param> /// <returns></returns> public static bool CouldPay(this Trader t, decimal delta, Market m) { var maintain = GetMaintain(t, m); var usable = t.Account.BailAccount.Sum - maintain * SysPrm.Instance.MonitorParams.NormalMaintainRatio;//; var r = usable >= delta * (1 + TraderService.CommissionRatio); if (!r) { TraderService.RaiseOnPayWhenInsufficent(t, delta); } return(r); }
public void ShouldNotAddTraderWithIncorrectLongName() {// Arrange TraderService traderService = new TraderService( this.provider, this.traderRep, this.logger); // Act traderService.AddTrader("EvgeniyEvgeniy", "NikulinNikulin", "+7(981)000-00-00", "5000"); // Assert provider.Received(1).GetPhrase(Phrase.LongName); }
public void ShouldNotAddTraderWithIncorrectSurnameNotLetter() {// Arrange TraderService traderService = new TraderService( this.provider, this.traderRep, this.logger); // Act traderService.AddTrader("Evgeniy", "123", "+7(981)000-00-00", "5000"); // Assert provider.Received(1).GetPhrase(Phrase.NameNotLetter); }
public void ShouldNotAddTraderWithIncorrectMoneyIsNumber() {// Arrange TraderService traderService = new TraderService( this.provider, this.traderRep, this.logger); // Act traderService.AddTrader("Evgeniy", "Nikulin", "+7(981)000-00-00", "five thousands"); // Assert provider.Received(1).GetPhrase(Phrase.MoneyIsNumber); }
public void ShouldNotAddTraderWithIncorrectPhoneIsLetter() {// Arrange TraderService traderService = new TraderService( this.provider, this.traderRep, this.logger); // Act traderService.AddTrader("Evgeniy", "Nikulin", "My phone", "5000"); // Assert provider.Received(1).GetPhrase(Phrase.PhoneIsLetter); }
public void ShoulGetTradersTop10Page1() {// Arrange TraderService traderService = new TraderService( this.provider, this.traderRep, this.logger); var traders = new List <Trader>() { { new Trader() { name = "Brian", surname = "Kelly" } }, { new Trader() { name = "Yves", surname = "Guillemot" } }, { new Trader() { name = "Fusajiro", surname = "Yamauchi" } }, { new Trader() { name = "Trip", surname = "Hawkins" } }, { new Trader() { name = "Akio", surname = "Morita" } }, }; traderService.TradersList.Returns(traders); // Act var result = traderService.GetTradersPerPage(10, 1); // Assert Assert.AreEqual(5, result.Count); Assert.AreEqual("Brian", result[0].name); Assert.AreEqual("Kelly", result[0].surname); Assert.AreEqual("Yves", result[1].name); Assert.AreEqual("Guillemot", result[1].surname); Assert.AreEqual("Fusajiro", result[2].name); Assert.AreEqual("Yamauchi", result[2].surname); Assert.AreEqual("Trip", result[3].name); Assert.AreEqual("Hawkins", result[3].surname); Assert.AreEqual("Akio", result[4].name); Assert.AreEqual("Morita", result[4].surname); }
/// <summary> /// 成交后保证金操作:收款,付款,解冻 /// </summary> /// <param name="o"></param> /// <param name="count"></param> void MatchCache(Order o, int count) { o.Unfreeze(); if (o.IsCollect()) { bool r = TraderService.OperateAccount(o.Trader, o.DonePrice * o.DoneCount, AccountChangeType.保证金收款, "system", o); //if (r) { log.Info(string.Format("保证金收款成功,收款金额:{0}", o.DonePrice * o.DoneCount)); } } else { bool r = o.Trader.BailPay(o.DoneCount * o.DonePrice, m, o, AccountChangeType.保证金付款);// TraderService.BailPay(o.Trader, o.DoneCount * o.DonePrice, o); // if (r) { log.Info(string.Format("保证金付款成功,付款金额:{0}", o.DonePrice * o.DoneCount)); } } }
public void ShouldNotRegisterNewTraderWithIncorrectPhoneNumber() { // Arrange TraderService tradersService = new TraderService(this.repository); TraderInfo info = new TraderInfo { FirstName = "Artem", LastName = "Lozhechkin", PhoneNumber = "999asd9213", Balance = 100 }; // Act tradersService.RegisterNewUser(info); }
public void ShouldNotRegisterNewTraderWithEmptySurname() { // Arrange TraderService tradersService = new TraderService(this.repository); TraderInfo info = new TraderInfo { FirstName = "Artem", LastName = string.Empty, PhoneNumber = "79998887766", Balance = 100 }; // Act tradersService.RegisterNewUser(info); }
//Deal with the order public ActionResult SubmitOrder() { string strategyId = Request.Form["strategyId"]; string traderId = Request.Form["traderId"]; string orderBookId = Request.Form["orderBookId"]; string side = Request.Form["side"]; string quantity = Request.Form["quantity"]; string price = Request.Form["price"]; //Strategy strategy = new StrategyService().FindStrategyById(Convert.ToInt32(strategyId)); Trader trader = new TraderService().FindTraderById(Convert.ToInt32(traderId)); bool isBuy = false; if (side != null && side.Equals("B")) { isBuy = true; } //OrderBook orderBook = new OrderBookService().FindOrderBookById(Convert.ToInt32(orderBookId)); Order order = new Order(); order.DateTime = DateTime.Now; order.StrategyId = Convert.ToInt32(strategyId); order.Trader = trader; order.Quantity = Convert.ToInt32(quantity); order.IsBuy = isBuy; order.OrderBookId = Convert.ToInt32(orderBookId); if (price != null) { order.Price = Convert.ToDouble(price); } //orderService.AddOrder(order); //int id = orderService.GetOrderId(order); Execution execution = MakeTrade(order); executionService.AddExecution(execution); ViewData["orderExecution"] = execution; return(View("OrderDetail")); }
//TextLog log = new TextLog("jd.txt"); void HandleCache(SpotOrder so) { so.UnFreeze(); if (so.Direction == TradeDirectType.卖) { var ca = so.Trader.Account.CacheAccount.BtcAccount; //收款 TraderService.OperateAccount(so.Trader, so.DonePrice * so.DoneCount, AccountChangeType.现金收款, so.Trader.Name, null); TraderService.OperateAccount(so.Trader, so.DoneCount, AccountChangeType.BTC付款, so.Trader.Name, null); } else { TraderService.OperateAccount(so.Trader, so.DoneCount * so.DonePrice, AccountChangeType.现金付款, so.Trader.Name, null); TraderService.OperateAccount(so.Trader, so.DoneCount, AccountChangeType.BTC收款, so.Trader.Name, null); } }
public void ShouldAddTrader() {// Arrange TraderService traderService = new TraderService( this.provider, this.traderRep, this.logger); // Act string Name = "Evgeniy"; string Surname = "Nikulin"; string Phone = "+7(981)000-00-00"; string Money = "5000"; traderService.AddTrader(Name, Surname, Phone, Money); // Assert traderRep.Received(1).Push(Arg.Any <Trader>()); traderRep.Received(1).SaveChanges(); logger.Received(1).Info($"Trader {Name} {Surname} with {Phone} phone and {Money} money is added"); provider.Received(1).GetPhrase(Phrase.Success); }
public ConsoleManager( TraderService traderService, ShareService shareService, TransactionService transactionService, IRepository <TraderEntity> traderTableRepository, IRepository <ShareEntity> shareTableRepository, IRepository <CompanyEntity> companyTableRepository, IRepository <StockEntity> stockTableRepository, IRepository <ShareTypeEntity> shareTypeTableRepository, IRepository <TransactionEntity> transactionTableRepository) { this.traderService = traderService; this.shareService = shareService; this.transactionService = transactionService; this.traderTableRepository = traderTableRepository; this.shareTableRepository = shareTableRepository; this.companyTableRepository = companyTableRepository; this.stockTableRepository = stockTableRepository; this.shareTypeTableRepository = shareTypeTableRepository; this.transactionTableRepository = transactionTableRepository; }
/// <summary> /// 如果是平仓,直接支付;否则检查保证金是否足够 /// </summary> /// <param name="t"></param> /// <param name="delta"></param> /// <param name="m"></param> /// <param name="o"></param> /// <returns></returns> public static bool BailPay(this Trader t, decimal delta, Market m, Order o, AccountChangeType type) { lock (t.Account.BailAccount) { SystemAccount.Instance.Log.Info(string.Format("支付(可能借款):{0}-线程{1}-委托{2}", DateTime.Now.ToString("HH:mm:ss.fff"), Thread.CurrentThread.ManagedThreadId, o == null?"":o.Id.ToString())); if (o != null && o.OrderType == OrderType.平仓) { //系统借款记录处理 if (t.Account.BailAccount.Sum < delta) { var needed = delta * (TraderService.CommissionRatio + 1) - t.Account.BailAccount.Sum; var borrowResult = SystemAccount.Instance.Borrow(needed, o); } var r = t.Account.BailAccount.Sub(delta); TraderService.OperateAccount(t, delta, type, "system", o, t.Account.BailAccount.Total); return(r); } else { var maintain = GetMaintain(t, m); var remain = t.Account.BailAccount.Sum - maintain; if (t.Account.BailAccount.Sum < delta || remain < delta) { //执行保证金自动转入 var d1 = delta - t.Account.BailAccount.Sum; var d2 = delta - remain; var d = d1 >= d2 ? d1 : d2; var tr = TraderService.OperateAddBailFromCache(t, d, o); if (!tr) { return(false); } } var r = t.Account.BailAccount.Sub(delta);//划转保证金 TraderService.OperateAccount(t, delta, type, "system", o, t.Account.BailAccount.Total); return(r); } } }
public void AddDeal_CorrectDeal_AreEqualData() { //Arrange var seller = new Trader() { Name = "NameSeller", Surname = "SurnameSeller", PhoneNumber = "phoneNumberSeller", Balance = 0, }; var share = new Share() { Name = "TestSare", Owner = seller, Price = 100 }; seller.SharesCollection.Add(share); var buyer = new Trader() { Name = "NameBuyer", Surname = "SurnameBuyer", PhoneNumber = "phoneNumberBuyer", Balance = 80, }; //Act _businessService.AddDeal(buyer, seller, share); //Assert Assert.AreEqual(seller.SharesCollection.Contains(share), false); Assert.AreEqual(buyer.SharesCollection.Contains(share), true); Assert.AreEqual(TraderService.GetZone(seller), Zone.Green); Assert.AreEqual(TraderService.GetZone(buyer), Zone.Black); Assert.AreEqual(share.Owner, buyer); Assert.AreEqual(buyer.Balance, -20); Assert.AreEqual(seller.Balance, 100); }
public static void Unfreeze(this Order o) { if (o == null || o.Sign == null) { return; } lock (o.Sign) { if (o.IsNeedBailExceptMaintainBail()) { var c = o.GetSellOpenCountFrozen(); if (c > 0) { TraderService.OperateAccount(o.Trader, c, AccountChangeType.保证金解冻, "system", o); } if (o.State == OrderState.已撤销 || o.State == OrderState.已成交 || o.State == OrderState.已行权) { o.ClearSellOpenCount(); } } } }
public void ShouldNotRegisterTraderIfExists() { // Arrange TraderService tradersService = new TraderService(this.repository); TraderInfo info = new TraderInfo { FirstName = "Vasiliy", LastName = "Vasiliev", PhoneNumber = "1234557", Balance = -100 }; // Act tradersService.RegisterNewUser(info); this.repository.Contains(Arg.Is<TraderEntity>( t => t.FirstName == info.FirstName && t.LastName == info.LastName && t.PhoneNumber == info.PhoneNumber && t.Balance == info.Balance)).Returns(true); tradersService.RegisterNewUser(info); }
public void ShouldRegisterNewTrader() { // Arrange TraderService tradersService = new TraderService(this.repository); TraderInfo info = new TraderInfo { FirstName = "Artem", LastName = "Lozhechkin", PhoneNumber = "79998887766", Balance = 100 }; // Act tradersService.RegisterNewUser(info); // Assert this.repository.Received(1).Add(Arg.Is<TraderEntity> (w => w.FirstName == info.FirstName && w.LastName == info.LastName && w.PhoneNumber == info.PhoneNumber && w.Balance == info.Balance)); this.repository.Received(1).SaveChanges(); }
public void init() { service = new TraderService(); }
public OperationResult UpdateTrader(int traderId, TraderUpdateType type, object value) { return(Operate(() => { OperationResult r = null; var trader = Model.Traders.Where(a => a.Id == traderId).FirstOrDefault(); if (trader == null) { return new OperationResult(101, "无此用户"); } switch (type) { case TraderUpdateType.提现: case TraderUpdateType.充值: { if (!(value is decimal)) { return new OperationResult(301, "参数类型错误"); } var tv = (decimal)value; if (tv <= 0) { return new OperationResult(302, "充值提现事金额不能小于等于0"); } TraderService.OperateAccount(trader, tv, (AccountChangeType)(int)type, trader.Name, null); r = OperationResult.SuccessResult; } break; case TraderUpdateType.设置保证金自动转入: { if (!(value is bool)) { return new OperationResult(301, "参数类型错误"); } var sv = (bool)value; trader.IsAutoAddBailFromCache = sv; r = OperationResult.SuccessResult; } break; case TraderUpdateType.设置冻结用户: { if (!(value is bool)) { return new OperationResult(301, "参数类型错误"); } var sv = (bool)value; trader.IsFrozen = sv; r = OperationResult.SuccessResult; } break; case TraderUpdateType.设置自动买平: { if (!(value is bool)) { return new OperationResult(301, "参数类型错误"); } var sv = (bool)value; trader.IsAutoSellRight = sv; r = OperationResult.SuccessResult; } break; default: r = new OperationResult(303, "不允许此种类型的操作"); break; } return r; })); }
public void Execute(SpotOrder o) { TraderService.OperateAccount(o.Trader, Count * Ratio, ChangeType, o.Trader.Name + o.Id + "-" + o.Price, null); }
public PartialViewResult AuditIt(AuditModel am) { ViewData["sysBank"] = GetSysBank(); if (ModelState.IsValid && IsTranPwd(am.code)) { var r = db.BankRecords.Where(a => a.Id == am.BrId).FirstOrDefault(); if (r == null) { ViewBag.msg = "无此编号的记录"; return(PartialView(am)); } if (r.IsApproved == true) { ViewBag.msg = "已审核"; return(PartialView(am)); } // if (r.BankRecordType == BankRecordType.提现 && r.coin == "BTC") { } else if (r.BankRecordType == BankRecordType.充值 && r.coin == "BTC") { if (!rech.BtcRecharge(r.AppUserName, r.Num, r.Address)) { ViewBag.msg = "不符合审核条件"; return(PartialView(am)); } } var sa = AddSysBankRecord(am); r.IsApproved = true; r.AuditTime = DateTime.Now; r.ActualDelta = am.ActualDelta; r.ApproveDesc = am.Desc; r.ApprovedResult = am.IsApproved; r.SysRecord = sa; var t = db.SaveChanges() > 0; if (!t) { ViewBag.msg = "审核失败"; return(PartialView(am)); } else { var u = MvcApplication.OptionService.Model.Traders.Where(a => a.Name == r.AppUserName).FirstOrDefault(); if (u != null) { if (r.ApprovedResult.Value)//审核通过 { TraderService.OperateAccount( u, r.ActualDelta, r.BankRecordType == BankRecordType.提现 && r.coin == "CNY" ? AccountChangeType.CNY提现 : (r.BankRecordType == BankRecordType.充值 && r.coin == "CNY" ? AccountChangeType.CNY充值 : (r.BankRecordType == BankRecordType.提现 && r.coin == "BTC" ? AccountChangeType.BTC提现 : AccountChangeType.BTC充值)), User.Identity.Name, null ); var user = db.Users.Where(a => a.UserName == u.Name).FirstOrDefault(); if (user != null) { string str = string.Format("您的比权网账户于{0}发生了一笔{2}操作,目前已到账,到账金额为 {1} 元,请注意查收。【比权网】", r.AuditTime, am.ActualDelta, r.BankRecordType.ToString()); qes.SendMassage2(user.PhoneNumber.ToString(), str); } } else //审核不通过 { if (r.BankRecordType == BankRecordType.提现 && r.coin == "CNY") { TraderService.OperateAccount(u, r.Delta, AccountChangeType.现金解冻, "system", null); } } } ViewBag.msg = "审核成功"; return(PartialView()); } } return(PartialView(am)); }