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); }
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(); } }
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 }
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); }
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(); }