コード例 #1
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)); }
            }
        }
コード例 #2
0
ファイル: SpotMatch.cs プロジェクト: 810912015/option
        //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);
            }
        }
コード例 #3
0
 /// <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);
         }
     }
 }
コード例 #4
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();
             }
         }
     }
 }
コード例 #5
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));
        }
コード例 #6
0
ファイル: EntitySvcImp.cs プロジェクト: 810912015/option
        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;
            }));
        }
コード例 #7
0
 public void Execute(SpotOrder o)
 {
     TraderService.OperateAccount(o.Trader, Count * Ratio, ChangeType, o.Trader.Name + o.Id + "-" + o.Price, null);
 }
コード例 #8
0
 //行权
 void Execute(PositionSummary up, Trader ts, decimal exeBasePrice, bool isManual = false)
 {
     up.Contract.IsNotInUse = true;
     //if (up.Order == null) return;
     if (!isManual)
     {
         if (up.Contract.ExcuteTime.Date != DateTime.Now.Date)
         {
             return;
         }
     }
     if (up.Contract.OptionType == OptionType.认购期权)  //认购期权:跌了不行权
     {
         if (exeBasePrice > up.Contract.ExcutePrice) //涨了
         {
             var d = exeBasePrice - up.Contract.ExcutePrice;
             var t = d * up.Count * up.Contract.CoinCount;
             if (up.PositionType == "权利仓")          //权利方
             {
                 ts.Account.BailAccount.Collect(t); //收钱
                 handler.SaveRecord(ts, up.Contract, PositionType.权利仓, up.Count, exeBasePrice, true, t);
                 TraderService.OperateAccount(ts, t, AccountChangeType.行权划入, "系统操作", null, ts.Account.BailAccount.Total);
             }
             else//义务方
             {
                 ts.BailPay(t, ts.GetMarket(), null, AccountChangeType.行权划出);
                 handler.SaveRecord(ts, up.Contract, PositionType.义务仓, up.Count, exeBasePrice, false, t);
             }
         }
         else
         {
             if (up.PositionType == "权利仓")//权利方
             {
                 handler.SaveRecord(ts, up.Contract, PositionType.权利仓, up.Count, exeBasePrice, true, 0);
             }
             else//义务方
             {
                 handler.SaveRecord(ts, up.Contract, PositionType.义务仓, up.Count, exeBasePrice, false, 0);
             }
         }
     }
     else//认沽期权:涨了不行权
     {
         if (exeBasePrice < up.Contract.ExcutePrice)//跌了
         {
             var d = up.Contract.ExcutePrice - exeBasePrice;
             var t = d * up.Count * up.Contract.CoinCount;
             if (up.PositionType == "权利仓")          //权利方
             {
                 ts.Account.BailAccount.Collect(t); //收钱
                 handler.SaveRecord(ts, up.Contract, PositionType.权利仓, up.Count, exeBasePrice, true, t);
                 TraderService.OperateAccount(ts, t, AccountChangeType.行权划入, "系统操作", null, ts.Account.BailAccount.Total);
             }
             else//义务方
             {
                 ts.BailPay(t, ts.GetMarket(), null, AccountChangeType.行权划出);
                 handler.SaveRecord(ts, up.Contract, PositionType.义务仓, up.Count, exeBasePrice, false, t);
             }
         }
         else
         {
             if (up.PositionType == "权利仓")//权利方
             {
                 handler.SaveRecord(ts, up.Contract, PositionType.权利仓, up.Count, exeBasePrice, true, 0);
             }
             else//义务方
             {
                 handler.SaveRecord(ts, up.Contract, PositionType.义务仓, up.Count, exeBasePrice, false, 0);
             }
         }
     }
 }