private void CheckForNewSessions(string stTime)
        {
            //TODO from global variable, from config
            //int mscOffset = -2;


            DateTime dt = CASTSConv.ASTSTimeToDateTime(stTime);

            DateTime dtBegin = GetSessionStartNormalTime();
            DateTime dtEnd   = GetSessionEndNormalTime();

            int tolMs = 2000;

            if (CUtilTime.IsEqual(dt, dtBegin, tolMs))
            {
                _currSession = new CDBSession
                {
                    DtBegin           = dtBegin,
                    DtEnd             = dtEnd,
                    stock_exchange_id = _client.StockExchId
                };
                _lstSessions.Add(_currSession);
            }

            CUtil.TaskStart(InsertUnsavedSessions);
        }
        public void Update(string instrument, decimal price, char buySell,
                           int amount, long extId, long tradeNo, string tradeDate,
                           string tradeTime, long micosecs, decimal fee)
        {
            //CBotPos botPos = new CBotPos { Instrument = instrument,
            _onlineDetector.Update();

            DateTime moment  = CASTSConv.ASTSDateAndTimeToDateAndTime(tradeDate, tradeTime);
            int      milisec = Convert.ToInt16((double)micosecs / 1000);

            moment = moment.AddMilliseconds(milisec);

            CRawUserDeal rd = new CRawUserDeal
            {
                Instrument  = instrument,
                Amount      = amount,
                Dir         = (sbyte)(buySell == 'B' ? OrderDirection.Buy : OrderDirection.Sell),
                Ext_id_buy  = buySell == 'B' ? extId : 0,
                Ext_id_sell = buySell == 'S' ? extId : 0,
                Price       = price,
                ReplId      = tradeNo,
                Moment      = moment,
                Fee_buy     = buySell == 'B' ? fee : 0,
                Fee_sell    = buySell == 'S' ? fee : 0
            };

            //TODO chek if we already processed deal

            CalculateBotsPos(rd, isOnlineASTSCalc: true);

            UserDealsPosBoxClient.UpdateGUIDealCollection(rd);
        }
示例#3
0
        protected override void ProcessRecord()
        {
            int hr, mn, s;

            try
            {
                string instrument = (string)_currentRecord.values["SECCODE"];

                if (_instruments.IsContainsInstrument(instrument))
                {
                    decimal price   = Convert.ToDecimal(_currentRecord.values["PRICE"]);
                    string  buySell = _currentRecord.values["BUYSELL"].ToString();
                    long    amount  = Convert.ToInt32(_currentRecord.values["QUANTITY"].ToString());



                    string tradeTime = (_currentRecord.values["TRADETIME"]).ToString();

                    CASTSConv.ASTSTimeToHrMinSec(tradeTime, out hr, out mn, out s);
                    double dmilisec = 0;


                    if (_currentRecord.values["MICROSECONDS"] != null)
                    {
                        dmilisec = Math.Ceiling(Convert.ToDouble(_currentRecord.values["MICROSECONDS"].ToString()) / 1000);
                        dmilisec = Math.Min(999, dmilisec);
                    }


                    int milisec = Convert.ToInt16(dmilisec);
                    //TODO use server time !
                    DateTime dt     = DateTime.Now;
                    DateTime moment = new DateTime(dt.Year, dt.Month, dt.Day, hr, mn, s, milisec);
                    //  moment = moment.AddHours(-2);

                    CRawDeal rd = new CRawDeal(amount, price, buySell, moment);

                    _dealBox.Update(instrument, rd);

                    if (!_client.IsDealsOnline)
                    {
                        _client.IsDealsOnline = true;
                        _client.EvDealsOnline.Set();
                    }
                }
            }
            catch (Exception e)
            {
                Error("CTableAll_Trades.ProcessRecord", e);
            }

            finally
            {
                base.ProcessRecord();
            }
        }
示例#4
0
        public void CancelAllOrders(int buy_sell, int ext_id, string instrument, int botId)
        {
            IDictionary <string, object> dict = new Dictionary <string, object>();

            dict["ACCOUNT"]  = _account;
            dict["SECBOARD"] = _secBoard;
            dict["SECCODE"]  = instrument;
            dict["EXTREF"]   = botId;
            dict["BUYSELL"]  = CASTSConv.CancellOrderDirToASTS(buy_sell);

            ExecTransaction("WD_ORDERS", dict);
        }
        public void Process(CTableRecrd record)
        {
            //TODO normal
            //  if (!_client.IsOnlineUserOrderLog)
            //    _client.IsOnlineUserOrderLog = true;

            _onlineDetector.Update();


            //TODO check partial acception!
            CRawOrdersLogStruct userOrdLogStruct = new CRawOrdersLogStruct()
            {
                Id_ord = Convert.ToInt64(record.values["ORDERNO"]),
                Ext_id = Convert.ToInt16(record.values["EXTREF"]),
                Dir    = Convert.ToChar(record.values["BUYSELL"]) == 'B' ?
                         (sbyte)EnmOrderDir.Buy : (sbyte)EnmOrderDir.Sell,
                Price      = Convert.ToDecimal(record.values["PRICE"]),
                Amount     = Convert.ToInt16(record.values["QUANTITY"]),
                Instrument = Convert.ToString(record.values["SECCODE"]),
                Action     = (sbyte)CASTSConv.ASTSActionToEnmOrderAction(Convert.ToChar(record.values["STATUS"])),
                Moment     = CASTSConv.ASTSTimeToDateTime(record.values["ORDERTIME"].ToString())
            };



            EnmBotEventCode evnt = EnmBotEventCode.OnEmptyEvent;

            if (userOrdLogStruct.Action == (sbyte)EnmOrderAction.Added)
            {
                evnt = EnmBotEventCode.OnOrderAccepted;
            }
            else if (userOrdLogStruct.Action == (sbyte)EnmOrderAction.Deleted)
            {
                evnt = EnmBotEventCode.OnOrderCancel;
            }
            else if (userOrdLogStruct.Action == (sbyte)EnmOrderAction.Deal)
            {
                evnt = EnmBotEventCode.OnOrderDeal;
            }



            _client.TriggerRecalculateBot(userOrdLogStruct.Ext_id,
                                          userOrdLogStruct.Instrument,
                                          evnt, userOrdLogStruct);

            //foreach(CBotBase bb in
        }
示例#6
0
        public TestASTSConv()
        {
            int hr, min, s;


            string tradeTime = "1";

            CASTSConv.ASTSTimeToHrMinSec(tradeTime, out hr, out min, out s);
            Assert.AreEqual(hr, 0);
            Assert.AreEqual(min, 0);
            Assert.AreEqual(s, 1);

            tradeTime = "12";

            CASTSConv.ASTSTimeToHrMinSec(tradeTime, out hr, out min, out s);
            Assert.AreEqual(hr, 0);
            Assert.AreEqual(min, 0);
            Assert.AreEqual(s, 12);


            tradeTime = "112";
            CASTSConv.ASTSTimeToHrMinSec(tradeTime, out hr, out min, out s);
            Assert.AreEqual(hr, 0);
            Assert.AreEqual(min, 1);
            Assert.AreEqual(s, 12);


            tradeTime = "3112";
            CASTSConv.ASTSTimeToHrMinSec(tradeTime, out hr, out min, out s);
            Assert.AreEqual(hr, 0);
            Assert.AreEqual(min, 31);
            Assert.AreEqual(s, 12);


            tradeTime = "13112";
            CASTSConv.ASTSTimeToHrMinSec(tradeTime, out hr, out min, out s);
            Assert.AreEqual(hr, 1);
            Assert.AreEqual(min, 31);
            Assert.AreEqual(s, 12);


            tradeTime = "213112";
            CASTSConv.ASTSTimeToHrMinSec(tradeTime, out hr, out min, out s);
            Assert.AreEqual(hr, 21);
            Assert.AreEqual(min, 31);
            Assert.AreEqual(s, 12);
        }
示例#7
0
        protected override void ProcessRecord()
        {
            string   time = _currentRecord.values["TIME"].ToString();
            DateTime dt   = CASTSConv.ASTSTimeToDateTime(time);


            _client.ServerTime = dt;

            _guiBox.ServerTime = dt;

            if (!_guiBox.IsServerTimeAvailable)
            {
                _guiBox.IsServerTimeAvailable = true;
            }


            _client.SetServerTimeAvailable();



            base.ProcessRecord();
        }