Esempio n. 1
0
        public void Initialize()
        {
            EnableRunning          = true;
            PumpServer.OnNewQuote += WhenNewQuote;
            CopyServer.OnNewTrade += WhenNewTrade;
            if (_quoteTimer == null)
            {
                _quoteTimer          = new Timer(10000);
                _quoteTimer.Elapsed += SaveQuoteProc;
                SaveQuoteProc(_quoteTimer, null);
            }
            if (_tradeThread == null)
            {
                _tradeThread = new System.Threading.Thread(
                    () =>
                {
                    while (Utils.SignalWait(ref EnableRunning, _tradeSignal))
                    {
                        TradeInfoEventArgs item = null;
                        _queTrades.TryDequeue(out item);
                        PushTrade(item);
                    }
                    foreach (var item in _queTrades.ToArray())
                    {
                        PushTrade(item);
                    }
                    ServerContainer.FinishStop();
                });
                _tradeThread.IsBackground = true;
                _tradeThread.Start();
            }
            var logger = Utils.CommonLog;

            logger.Info("订单与报价同步服务已经启动");
        }
Esempio n. 2
0
 void WhenNewTrade(object sender, TradeInfoEventArgs e)
 {
     if (EnableRunning)
     {
         _queTrades.Enqueue(e);
         _tradeSignal.Release();
     }
 }
Esempio n. 3
0
 void gw_TradeChanged(object sender, TradeInfoEventArgs e)
 {
     if (e.TradeInfo.Mode == TradeInfoMode.NewTrade)
     {
         _logger.Log(e.TradeInfo.ToString());
         _logger.Log(e.TradeInfoDetails.ToString());
     }
 }
Esempio n. 4
0
 private void Trade2Social(TradeInfoEventArgs e)
 {
     try
     {
         if (e.TradeType != TRANS_TYPE.TRANS_DELETE)
         {
             return;
         }
         var key          = RedisSocialTradeKey;
         var recordString = JsonConvert.SerializeObject(e);
         TradeSource.RedisSocial.LPush(key, recordString);
     }
     catch (Exception excp)
     {
         Utils.CommonLog.Error("同步到social数据库失败,{0},{1}", excp.Message, excp.StackTrace);
     }
 }
Esempio n. 5
0
        public void PushTrade(TradeInfoEventArgs aTrade)
        {
            string symbolPattern     = @"^(?<symbol>[A-Za-z]+)(?<leverage>\d*)$";
            string symbolPattern_CFD = @"^(?<symbol>[A-Za-z]+)_(?<number>\d*)$";
            var    recordString      = string.Empty;

            try
            {
                foreach (Match j in Regex.Matches(aTrade.Trade.symbol, symbolPattern))
                {
                    var leverage = 100;
                    var match    = j.Groups;
                    if (!string.IsNullOrWhiteSpace(match["leverage"].ToString()))
                    {
                        leverage = int.Parse(match["leverage"].ToString());
                    }
                    //Trade2Social(aTrade);
                    Trade2Mysql(aTrade.TradeType, aTrade.Trade, j, leverage, 100000, 1.0f,
                                aTrade.FromUsercode, aTrade.ToUsercode);
                }
                foreach (Match j in Regex.Matches(aTrade.Trade.symbol, symbolPattern_CFD))
                {
                    var match  = j.Groups;
                    var symbol = match["symbol"].ToString();
                    var pov    = ForexMath.GetPOV(symbol);
                    //Trade2Social(aTrade);
                    Trade2Mysql(aTrade.TradeType, aTrade.Trade, j, 100, pov, 10.0f);
                }
            }
            catch (Exception e)
            {
                recordString = JsonConvert.SerializeObject(aTrade);
                var logger = Utils.CommonLog;
                if (e is MySqlException)
                {
                    var e_mysql = e as MySqlException;
                    if (e_mysql.Number == 1062 && e_mysql.Message.Contains("cb_unique") && e_mysql.Message.Contains("Duplicate entry"))
                    {
                        logger.Info(string.Format("交易MySQL数据已存在,单号:{0}\n原始数据:{1}", aTrade.Trade.order, recordString));
                        return;
                    }
                }
                logger.Error(string.Format("交易MySQL操作失败,错误信息{0}\n原始数据:{1}", e.Message, recordString));
                TradeSource.MysqlSource = null;
            }
        }
Esempio n. 6
0
 private void WhenNewTrade(object sender, TradeInfoEventArgs e)
 {
     _queTrades.Enqueue(new Tuple <TRANS_TYPE, TradeRecordResult>(e.TradeType, e.Trade));
     _tradeSignal.Release();
 }
Esempio n. 7
0
        private void CopyProc()
        {
            TradeInfoEventArgs item = null;
            var sql = string.Empty;

            while (Utils.SignalWait(ref EnableRunning, _signal))
            {
                _queNewTrades.TryDequeue(out item);
                try
                {
                    var trade_type = item.TradeType;
                    var trade      = item.Trade;
                    var key        = string.Empty;
                    var handler    = OnNewTrade;
                    //if (handler != null)
                    //    handler(this, item);
                    //continue;
                    try
                    {
                        if (string.IsNullOrWhiteSpace(InnerServer))
                        {
                            sql = "SELECT user_code FROM user WHERE mt4=@mt4_id";
                            using (var cmd = new SQLiteCommand(sql, Source.CopySource))
                            {
                                cmd.Parameters.AddWithValue("@mt4_id", item.Trade.login);
                                var user_code_obj = cmd.ExecuteScalar();
                                var user_code     = string.Empty;
                                if (user_code_obj != null)
                                {
                                    user_code = user_code_obj.ToString();
                                }
                                item.Usercode = user_code;
                            }
                            sql = "SELECT mt4_from FROM copy_order WHERE order_to=@order_id";
                            using (var cmd = new SQLiteCommand(sql, Source.CopySource))
                            {
                                cmd.Parameters.AddWithValue("@order_id", item.Trade.order);
                                var from_obj = cmd.ExecuteScalar();
                                if (from_obj != null)
                                {
                                    item.FromUsercode = from_obj.ToString();
                                    item.ToUsercode   = item.Usercode;
                                }
                            }
                        }
                        else
                        {
                            using (var reqSocket = _zmqContext.CreateSocket(SocketType.Req))
                            {
                                reqSocket.Connect(InnerServer);
                                dynamic reqBody = new ExpandoObject();
                                reqBody.__api    = "InnerSearchUsercode";
                                reqBody.mt4_id   = trade.login;
                                reqBody.order_id = trade.order;
                                var req = JsonConvert.SerializeObject(reqBody) as string;
                                reqSocket.Send(req);
                                var repBody = _jss.Deserialize <dynamic>(reqSocket.RecvString());
                                var code    = Convert.ToInt32(repBody["ucode"]);
                                if (code != 0)
                                {
                                    item.Usercode = code.ToString();
                                }
                                var from_code = Convert.ToInt32(repBody["from_ucode"]);
                                if (from_code != 0)
                                {
                                    item.FromUsercode = from_code.ToString();
                                    item.ToUsercode   = code.ToString();
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Utils.CommonLog.Error("组装订单出现问题,订单号{0},{1},{2}",
                                              trade.order, e.Message, e.StackTrace);
                    }
                    if (handler != null)
                    {
                        handler(this, item);
                    }
                    if ((trade_type == TRANS_TYPE.TRANS_ADD || trade_type == TRANS_TYPE.TRANS_UPDATE) &&
                        trade.cmd <= (int)Utils.TRADE_COMMAND.OP_SELL)
                    {
                        var apiEquity = Poll.New();
                        var equity    = 0.0;
                        var balance   = 0.0;
                        var free      = 0.0;
                        apiEquity.GetEquity(trade.login, ref equity, ref free, ref balance);
                        Poll.Release(apiEquity);
                        dynamic reqBody = new ExpandoObject();
                        reqBody.mt4_id  = trade.login;
                        reqBody.balance = balance;
                        reqBody.__api   = "InnerCheckCopyBalance";
                        using (var reqSocket = _zmqContext.CreateSocket(SocketType.Req))
                        {
                            reqSocket.Connect(CopyCheckAddr);
                            var req = JsonConvert.SerializeObject(reqBody) as string;
                            reqSocket.Send(req);
                            reqSocket.RecvString();
                        }
                    }
                    if (!Enable)
                    {
                        continue;
                    }
                    if (trade_type == TRANS_TYPE.TRANS_ADD &&
                        trade.comment == "copy")
                    {
                        continue;
                    }
                    Task.Factory.StartNew(() => { StartLink(trade_type, trade); });
                }
                catch (Exception e)
                {
                    Utils.CommonLog.Error(string.Format("复制服务出错,{0},{1}",
                                                        e.Message, e.StackTrace));
                }
            }
            ServerContainer.FinishStop();
        }
Esempio n. 8
0
 public void WhenNewTrade(object sender, TradeInfoEventArgs e)
 {
     _queNewTrades.Enqueue(e);
     _signal.Release();
 }
Esempio n. 9
0
 private static void TradeChanged(object sender, TradeInfoEventArgs e)
 {
     // Process trade here
     Console.WriteLine("--> TRADE: {0}", e.TradeInfo);
 }