コード例 #1
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);
        }
コード例 #2
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);
         }
     }
 }