Beispiel #1
0
        /// <summary>
        /// 取消订单
        /// </summary>
        /// <param name="currency">货币类型</param>
        /// <param name="tradeId">内部交易订单ID</param>
        /// <param name="orderId">远程服务器订单ID</param>
        /// <returns></returns>
        public static bool CancelTrade(CurrencyType currency, long tradeId, string orderId)
        {
            var remoteResult = TradeServices.CancelOrder(orderId, currency);
            var localResult  = TradeBookRepository.CancelOrder(tradeId);

            return(remoteResult.Code == "1000" && localResult == 1);
        }
Beispiel #2
0
        public static AssetModel GetAssetInfo(CurrencyType currency)
        {
            var asset   = new AssetModel();
            var account = TradeServices.GetAccountInfo();

            if (account == null || account.AssetsList == null || !account.AssetsList.Any())
            {
                return(new AssetModel());
            }
            asset.Currency = currency.ToString().Replace("_cny", "").ToUpper();
            var currentAsset = account.AssetsList[asset.Currency];

            asset.AvailableVol = currentAsset.Amount;
            asset.NetAssets    = account.NetAssets;
            asset.TotalAssets  = account.TotalAssets;
            asset.AvailableBuy = 0;
            asset.FrozenCNY    = account.AssetsList["CNY"].FrozenAmount;
            asset.AvailableCNY = account.AssetsList["CNY"].Amount;
            return(asset);
        }
        public void AccountInfoTest()
        {
            var data = TradeServices.GetAccountInfo();

            Assert.IsTrue(data.AuthGoogleEnabled);
        }
        public void GetRemoteActiveOrderTest()
        {
            var list = TradeServices.GetOrdersIgnoreTradeType(CurrencyType.bcc_cny, 1, 99);

            Assert.IsTrue(list.Any());
        }
Beispiel #5
0
        public static bool CheckTradeOrder(CurrencyType currency)
        {
            //是否更新过订单状态
            bool enableUpdate       = false;
            bool isUpdate           = false;
            var  localActiveOrders  = TradeBookRepository.GetActiveTrade();
            var  remoteActiveOrders = TradeServices.GetOrdersIgnoreTradeType(currency, 1, 100);
            var  currencSetting     = CurrencyRepository.GetCurrency(currency.ToString().Replace("_cny", "").ToUpper());

            foreach (var lOrder in localActiveOrders)
            {
                var rOrder = remoteActiveOrders.FirstOrDefault(q => q.Id == lOrder.BuyOrderId || q.Id == lOrder.SellOrderId);
                try
                {
                    //如果匹配不到,则直接通过订单Id查询远程订单详情
                    var orderId = TradeStatus.买单中.ToString() == lOrder.Status ? lOrder.BuyOrderId : lOrder.SellOrderId;
                    rOrder = rOrder ?? TradeServices.GetOrder(orderId, currency);
                    //如果最后还是匹配不到,则说明不是通过助手创建的订单,不做任何处理,直接跳过。
                    if (rOrder == null)
                    {
                        continue;
                    }
                    ;
                    //无论买单、卖单,如果是部分交易完成,则直接取消远程订单
                    if (rOrder.Status == 3)
                    {
                        var result = TradeServices.CancelOrder(rOrder.Id, currency);
                        if (result.Code != "1000")
                        {
                            Logger.Info($"远程订单[{rOrder.Id}]取消失败,返回结果:{result.ToJson()}");
                        }
                    }
                    if (new[] { 2, 3 }.Contains(rOrder.Status) && rOrder.TradeType == TradeType.buy && lOrder.Status == TradeStatus.买单中.ToString())
                    {
                        //公式: 买单手续费= 已成交量 * 成交均价 * 委托挂单费率;
                        var buyFee = rOrder.TradeAmount * rOrder.TradePrice * currencSetting.MakerRate;
                        //预估卖单价格
                        var sellPrice = BudgetaryPrice(rOrder.TradeAmount, currencSetting.DefaultProfit, rOrder.Price, buyFee, currencSetting.MakerRate);

                        var result = TradeServices.Order(sellPrice, rOrder.TradeAmount, TradeType.sell, currency);
                        if (result.Code == "2009")
                        {
                            Logger.Info($"账户余额不足,取消订单[{lOrder.TradeId}],返回结果:{result.ToJson()}");
                            TradeBookRepository.CancelOrder(lOrder.TradeId ?? 0);
                            enableUpdate = true;
                            continue;
                        }
                        if (result.Code != "1000")
                        {
                            Logger.Info($"创建远程卖单失败,对应本地订单[{lOrder.TradeId}],返回结果:{result.ToJson()}");
                            continue;
                        }
                        lOrder.BuyTradeVolume = rOrder.TradeAmount;
                        lOrder.BuyTradePrice  = rOrder.TradePrice;
                        lOrder.BuyTradeAmount = rOrder.TradeAmount * rOrder.TradePrice;
                        lOrder.SellOrderId    = result.Id;
                        lOrder.SellPrice      = sellPrice;
                        lOrder.SellVolume     = rOrder.TradeAmount;
                        lOrder.Status         = TradeStatus.卖单中.ToString();
                        enableUpdate          = true;
                        isUpdate = true;
                    }
                    else if (new[] { 2, 3 }.Contains(rOrder.Status) && rOrder.TradeType == TradeType.sell && lOrder.Status == TradeStatus.卖单中.ToString())
                    {
                        lOrder.SellTradePrice  = rOrder.Price;
                        lOrder.SellTradeVolume = rOrder.TradeAmount;
                        lOrder.SellTradeAmount = rOrder.Price * rOrder.TradeAmount;
                        lOrder.Status          = TradeStatus.已完成.ToString();
                        enableUpdate           = true;
                        isUpdate = true;
                    }
                    if (rOrder.Status == 1)
                    {
                        lOrder.Status = TradeStatus.已取消.ToString();
                        TradeBookRepository.CancelOrder(lOrder.TradeId ?? 0);
                        enableUpdate = true;
                        //isUpdate = true;
                    }
                    if (isUpdate)
                    {
                        //根据匹配结果,更新本地订单状态
                        if (TradeBookRepository.UpdateOrder(lOrder) != 1)
                        {
                            Logger.Error($"更新本地订单[{lOrder.TradeId}]状态失败:买单中==>卖单中");
                        }
                        isUpdate = false;
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error($"LocalOrder:{lOrder.ToJson()},RemoteOrder:{rOrder.ToJson()},Ex:{ex.ToJson()}");
                }
            }
            return(enableUpdate);
        }