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()));
        }
Exemple #3
0
        /// <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;
 }
Exemple #6
0
        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);
        }
Exemple #15
0
        /// <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"));
        }
Exemple #19
0
        //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);
         }
     }
 }
Exemple #23
0
        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);
        }
Exemple #24
0
 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();
 }
Exemple #28
0
        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);
 }
Exemple #30
0
        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));
        }