Exemple #1
0
 private void InitHistoryOrder(DbDataSet.已发委托DataTable dt)
 {
     if (dt != null && dt.Count > 0)
     {
         foreach (var item in dt)
         {
             try
             {
                 int orderId = int.Parse(item.委托编号);
                 queueOrderTraderRelation.Enqueue(new OrderTrader(item.交易员, orderId, item.委托编号.ToUpper()));
                 queueOrder.Enqueue(new OrderOrTradeUpdatedMessage()
                 {
                     Orderid = orderId,
                     LastFilledTradeQuantity = item.成交数量,
                     Price            = item.委托价格,
                     OriginalQuantity = item.委托数量,
                     Symbol           = item.证券代码,
                     Status           = GetStatusByDescription(item.状态说明),
                     Side             = item.买卖方向 == 0 ? "BUY" : "SELL",
                     EventTime        = (long)(DateTime.Today.AddHours(9) - StartTime).TotalMilliseconds,
                 });
             }
             catch (Exception ex)
             {
                 Program.logger.LogInfo("BinanceAdapter.InitHistoryOrder Exception: {0}", ex.Message);
             }
         }
     }
 }
Exemple #2
0
        public static void SendWTDataToServer()
        {
            try
            {
                Program.logger.LogInfo("委托数据发送开始...");
                YJServiceReference.JyDataSet.已发委托DataTable new已发委托DataTable1 = new YJServiceReference.JyDataSet.已发委托DataTable();

                AASServer.DbDataSet.已发委托DataTable 已发委托DataTable1 = new DbDataSet.已发委托DataTable();
                已发委托DataTable1.LoadToday();

                foreach (AASServer.DbDataSet.已发委托Row 已发委托Row1 in 已发委托DataTable1)
                {
                    YJServiceReference.JyDataSet.已发委托Row 已发委托RowNew = new已发委托DataTable1.New已发委托Row();
                    new已发委托DataTable1.Add已发委托Row(已发委托RowNew);

                    已发委托RowNew.日期   = 已发委托Row1.日期;
                    已发委托RowNew.组合号  = 已发委托Row1.组合号;
                    已发委托RowNew.委托编号 = 已发委托Row1.委托编号;
                    已发委托RowNew.交易员  = 已发委托Row1.交易员;
                    已发委托RowNew.状态说明 = 已发委托Row1.状态说明;
                    已发委托RowNew.市场代码 = 已发委托Row1.市场代码;
                    已发委托RowNew.证券代码 = 已发委托Row1.证券代码;
                    已发委托RowNew.证券名称 = 已发委托Row1.证券名称;
                    已发委托RowNew.买卖方向 = 已发委托Row1.买卖方向;
                    已发委托RowNew.成交价格 = 已发委托Row1.成交价格;
                    已发委托RowNew.成交数量 = 已发委托Row1.成交数量;
                    已发委托RowNew.委托价格 = 已发委托Row1.委托价格;
                    已发委托RowNew.委托数量 = 已发委托Row1.委托数量;
                    已发委托RowNew.撤单数量 = 已发委托Row1.撤单数量;
                }

                if (Program.DataServiceClient != null)
                {
                    Program.DataServiceClient.SendWTDataAsync(new已发委托DataTable1, CommonUtils.Mac);
                    Program.logger.LogInfo("委托数据发送结束");
                }
                else
                {
                    Program.logger.LogInfo("委托数据发送失败");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #3
0
        public void Init(string apiKey, string secretKey, string accountName, string account, DbDataSet.已发委托DataTable dt)
        {
            if (!IsInited)
            {
                lock (sync)
                {
                    if (!IsInited && DateTime.Now > AutoBanTime)
                    {
                        ApiClient apiClient = new ApiClient(apiKey, secretKey);
                        binanceClient = new BinanceClient(apiClient);
                        binanceClient.ListenUserDataEndpoint(AccountHandler, TradesHandler, OrdersHandler);
                        Thread.Sleep(stopMiniSeconds);

                        QueryServerTime();

                        var accInfo = binanceClient.GetAccountInfo().Result;
                        Thread.Sleep(stopMiniSeconds);
                        foreach (var item in accInfo.Balances)
                        {
                            dictBalance[item.Asset] = item;
                        }
                        lastRequesTime = DateTime.Now;

                        if (exchangeInfo == null)
                        {
                            exchangeInfo = binanceClient.GetExchangeInfo().Result;
                            Thread.Sleep(stopMiniSeconds);
                        }

                        AccountName = accountName;
                        Account     = account;
                        InitHistoryOrder(dt);
                        historyOrder = dt;
                        IsInited     = true;
                    }
                }
            }
        }
Exemple #4
0
        public static void SendYJDataToServer()
        {
            Program.logger.LogInfo("业绩数据发送开始...");
            YJServiceReference.JyDataSet.业绩统计DataTable 业绩统计DataTable1 = new YJServiceReference.JyDataSet.业绩统计DataTable();
            StringBuilder sb = new StringBuilder();

            AASServer.DbDataSet.已发委托DataTable  已发委托DataTable1         = new DbDataSet.已发委托DataTable();
            AASServer.DbDataSet.已平仓订单DataTable 已平仓订单DataTable1        = new DbDataSet.已平仓订单DataTable();
            Dictionary <string, AASServer.DbDataSet.平台用户Row> dictUser = new Dictionary <string, DbDataSet.平台用户Row>();

            已平仓订单DataTable1.Load();
            已发委托DataTable1.LoadToday();

            foreach (AASServer.DbDataSet.已发委托Row 已发委托Row1 in 已发委托DataTable1.Where(r => r.成交数量 != 0))
            {
                decimal 交易费用 = 0;
                decimal 交易额度 = 0;
                try
                {
                    AASServer.DbDataSet.平台用户Row AASUser1;

                    if (dictUser.ContainsKey(已发委托Row1.交易员))
                    {
                        AASUser1 = dictUser[已发委托Row1.交易员];
                    }
                    else
                    {
                        AASUser1 = Program.db.平台用户.Get平台用户(已发委托Row1.交易员);
                        dictUser.Add(已发委托Row1.交易员, AASUser1);
                    }

                    var group = ShareLimitAdapter.Instance.GetLimitGroup(已发委托Row1.交易员);
                    if (group != null)
                    {
                        var stockLimitItem = group.GroupStockList.FirstOrDefault(_ => _.GroupAccount == 已发委托Row1.组合号 && _.StockID == 已发委托Row1.证券代码);
                        if (stockLimitItem != null)
                        {
                            交易费用 += ShareLimitAdapter.Instance.Get交易费用(已发委托Row1, decimal.Parse(stockLimitItem.Commission));
                            交易额度  = decimal.Parse(stockLimitItem.LimitCount);
                        }
                        else
                        {
                            Program.logger.LogInfo("业绩统计逻辑异常,额度共享逻辑未找到组合号{0}下证券代码{1}对应的配置项!");
                        }
                    }
                    else
                    {
                        AASServer.DbDataSet.额度分配Row AASPermition = Program.db.额度分配.Get额度分配(已发委托Row1.交易员, 已发委托Row1.证券代码);
                        if (AASPermition == null)
                        {
                            AASUser1 = Program.db.平台用户.Get平台用户(已发委托Row1.交易员);
                            交易费用     = 已发委托Row1.Get交易费用(AASUser1.手续费率);
                        }
                        else
                        {
                            交易费用 = 已发委托Row1.Get交易费用(AASPermition.手续费率);
                            交易额度 = AASPermition.交易额度;
                        }
                    }
                    if (!业绩统计DataTable1.Any(r => r.交易员 == 已发委托Row1.交易员 && r.组合号 == 已发委托Row1.组合号 && r.证券代码 == 已发委托Row1.证券代码))
                    {
                        #region 生成业绩统计Row
                        YJServiceReference.JyDataSet.业绩统计Row 业绩统计RowNew = 业绩统计DataTable1.New业绩统计Row();
                        业绩统计RowNew.交易员  = 已发委托Row1.交易员;
                        业绩统计RowNew.组合号  = 已发委托Row1.组合号;
                        业绩统计RowNew.证券代码 = 已发委托Row1.证券代码;
                        业绩统计RowNew.证券名称 = 已发委托Row1.证券名称;

                        业绩统计RowNew.交易额度 = 交易额度;

                        if (已发委托Row1.买卖方向 == 0)
                        {
                            #region 买单
                            业绩统计RowNew.买入数量 = 已发委托Row1.成交数量;
                            业绩统计RowNew.买入金额 = 已发委托Row1.成交价格 * 已发委托Row1.成交数量;
                            业绩统计RowNew.买入均价 = 已发委托Row1.成交价格;


                            业绩统计RowNew.卖出数量 = 0;
                            业绩统计RowNew.卖出金额 = 0;
                            业绩统计RowNew.卖出均价 = 0;

                            #endregion
                        }
                        else
                        {
                            #region 卖单
                            业绩统计RowNew.买入数量 = 0;
                            业绩统计RowNew.买入金额 = 0;
                            业绩统计RowNew.买入均价 = 0;

                            业绩统计RowNew.卖出数量 = 已发委托Row1.成交数量;
                            业绩统计RowNew.卖出金额 = 已发委托Row1.成交价格 * 已发委托Row1.成交数量;
                            业绩统计RowNew.卖出均价 = 已发委托Row1.成交价格;


                            #endregion
                        }


                        业绩统计RowNew.毛利   = 0;
                        业绩统计RowNew.交易费用 = 交易费用;
                        业绩统计RowNew.净利润  = 0;
                        业绩统计RowNew.分组   = Enum.GetName(typeof(分组), AASUser1.分组);
                        业绩统计RowNew.日期   = Convert.ToInt32(已发委托Row1.日期.ToString("yyyyMMdd"));
                        业绩统计DataTable1.Add业绩统计Row(业绩统计RowNew);

                        #endregion
                    }
                    else
                    {
                        #region 修改业绩统计Row
                        YJServiceReference.JyDataSet.业绩统计Row 业绩统计Row1 = 业绩统计DataTable1.First(r => r.交易员 == 已发委托Row1.交易员 && r.组合号 == 已发委托Row1.组合号 && r.证券代码 == 已发委托Row1.证券代码);

                        if (已发委托Row1.买卖方向 == 0)
                        {
                            #region 买单
                            业绩统计Row1.买入数量 += 已发委托Row1.成交数量;
                            业绩统计Row1.买入金额 += 已发委托Row1.成交价格 * 已发委托Row1.成交数量;
                            业绩统计Row1.买入均价  = Math.Round(业绩统计Row1.买入金额 / 业绩统计Row1.买入数量, 3, MidpointRounding.AwayFromZero);
                            #endregion
                        }
                        else
                        {
                            #region 卖单
                            业绩统计Row1.卖出数量 += 已发委托Row1.成交数量;
                            业绩统计Row1.卖出金额 += 已发委托Row1.成交价格 * 已发委托Row1.成交数量;
                            业绩统计Row1.卖出均价  = Math.Round(业绩统计Row1.卖出金额 / 业绩统计Row1.卖出数量, 3, MidpointRounding.AwayFromZero);
                            #endregion
                        }



                        业绩统计Row1.毛利    = 0;
                        业绩统计Row1.交易费用 += 交易费用;
                        业绩统计Row1.净利润   = 0;
                        #endregion
                    }
                }
                catch (Exception ex)
                {
                    Program.logger.LogInfo("已发委托.交易员=" + 已发委托Row1.交易员 + ",委托编号=" + 已发委托Row1.委托编号 + System.Environment.NewLine + ex.Message);
                }
            }
            foreach (YJServiceReference.JyDataSet.业绩统计Row 业绩统计Row1 in 业绩统计DataTable1)
            {
                if (已平仓订单DataTable1.Any(r => r.交易员 == 业绩统计Row1.交易员 && r.组合号 == 业绩统计Row1.组合号 && r.证券代码 == 业绩统计Row1.证券代码))
                {
                    业绩统计Row1.毛利  = 已平仓订单DataTable1.Where(r => r.交易员 == 业绩统计Row1.交易员 && r.组合号 == 业绩统计Row1.组合号 && r.证券代码 == 业绩统计Row1.证券代码).Sum(r => r.毛利);
                    业绩统计Row1.净利润 = 业绩统计Row1.毛利 - 业绩统计Row1.交易费用;
                }
            }

            if (Program.DataServiceClient != null)
            {
                Program.DataServiceClient.SendYJDataAsync(业绩统计DataTable1, CommonUtils.Mac);
                Program.logger.LogInfo("业绩数据发送结束");
            }
            else
            {
                Program.logger.LogInfo("业绩数据发送失败");
            }
        }