public void SetCurrentSession(FUTINFO.session sess, DateTime SrvTmLocal, int timeTolMS) { SessionNumber = sess.sess_id; if (CUtilTime.InTmInterval(SrvTmLocal, sess.begin, sess.end, timeTolMS)) { SessionBegin = sess.begin; SessionEnd = sess.end; SessionType = EnmSessionTypes.SessDay; _client.GUIBox.UpdateSessionString(SessionBegin, SessionEnd); } else if (sess.eve_on == 1 && CUtilTime.InTmInterval(SrvTmLocal, sess.eve_begin, sess.eve_end, timeTolMS)) { SessionBegin = sess.eve_begin; SessionEnd = sess.eve_end; SessionType = EnmSessionTypes.SessEvening; _client.GUIBox.UpdateSessionString(SessionBegin, SessionEnd); } else if (sess.mon_on == 1 && CUtilTime.InTmInterval(SrvTmLocal, sess.mon_begin, sess.mon_end, timeTolMS)) { SessionBegin = sess.mon_begin; SessionEnd = sess.mon_end; SessionType = EnmSessionTypes.SessMorningAdditional; _client.GUIBox.UpdateSessionString(SessionBegin, SessionEnd); } }
public void OnSessionExpired(FUTINFO.session sess) { //first update lstSessions UpateLstSessions(sess); //after update start clering process int tol = 1000; //advance check that session expired if (_client.ServerTime > sess.end.AddMilliseconds(-tol)) { (new Task(TaskCheckUnsavedSessionsAndClearing)).Start(); } }
public CRawSession(FUTINFO.session sess) { ReplId = sess.replID; ReplRev = sess.replRev; Sess_id = sess.sess_id; State = sess.state; Begin = sess.begin; End = sess.end; Cl_begin = sess.inter_cl_begin; Cl_end = sess.inter_cl_end; Cl_state = sess.inter_cl_state; Eve_on = sess.eve_on; Eve_begin = sess.eve_begin; Eve_end = sess.eve_end; Mon_on = sess.mon_on; Mon_begin = sess.mon_begin; Mon_end = sess.mon_end; }
/// <summary> /// Add session to session list if it is not already in this list. /// /// Call from /// 1) CSessionBox.Update /// 2) On session expired /// </summary> public void UpateLstSessions(FUTINFO.session sess) { if (!_lstSessions.Exists(a => a.StockExchangedSessionId == sess.sess_id)) { int isCompleted = 0; int tol = 1000; if (_client.ServerTime > sess.end.AddMilliseconds(-tol)) { isCompleted = 1; } _lstSessions.Add(new CDBSession { DtBegin = sess.eve_begin, DtEnd = sess.end, StockExchangedSessionId = sess.sess_id, IsCompleted = isCompleted, stock_exchange_id = _client.StockExchId }); Log("Added new session id=" + sess.sess_id); } }
public void Update(FUTINFO.session sess) { // UpdateLatestRcvdSess(sess); m_listRawSession.Add(new CRawSession(sess)); // Session is active. Possible to add and cancel orders DateTime SrvTmLocal = _client.ServerTimeLocal(); int timeTolMS = 1000; Log("Update SrvTmLocal=" + SrvTmLocal + " begin=" + sess.begin + " end=" + sess.end + " state=" + sess.state + " eve_begin=" + sess.eve_begin + " eve_end=" + sess.eve_end + " eve_on" + sess.eve_on + " mon_begin=" + sess.mon_begin + " end=" + sess.mon_end + " mon_on=" + sess.mon_on + " IsSessionActive=" + _client.IsSessionActive); _interClearingState = (EnmFORTSInerClearingSate)sess.inter_cl_state; if (sess.state == (int)EnmFORTSSessionState.S1_SessionActiveTradeEnabled) { _client.GUIBox.SessionState = 1; Log("S1_SessionActiveTradeEnabled"); //check time also if (CUtilTime.InTmInterval(SrvTmLocal, sess.begin, sess.end, timeTolMS) || (sess.eve_on == 1 && CUtilTime.InTmInterval(SrvTmLocal, sess.eve_begin, sess.eve_end, timeTolMS)) || (sess.mon_on == 1 && CUtilTime.InTmInterval(SrvTmLocal, sess.mon_begin, sess.mon_end, timeTolMS)) ) { Log("Is in interval"); m_curentSessionRaw = new CRawSession(sess); m_currSession.SetCurrentSession(sess, SrvTmLocal, timeTolMS); if (!_client.IsSessionActive) { _client.OnSessionActivate(); _client.IsSessionActive = true; _client.SessionCurrent = sess.sess_id; //m_plaza2Connector.DtSessionCurrentBegin = sess.begin; _sessionCurrentNum = sess.sess_id; _sessionCurrentBegin = sess.eve_begin; Log("IsSessionActive = true;"); if (CUtilTime.InTmInterval(SrvTmLocal, sess.inter_cl_end, sess.end, timeTolMS)) { _clientP2.OnIntradayClearingEnd(); } if (CUtilTime.InTmInterval(SrvTmLocal, sess.end, sess.eve_begin, timeTolMS)) { _clientP2.OnEveningClearingEnd(); } if ((CUtilTime.InTmInterval(SrvTmLocal, sess.mon_begin, sess.mon_end, timeTolMS) && sess.mon_on == 1) || (CUtilTime.InTmInterval(SrvTmLocal, sess.begin, sess.end, timeTolMS) && sess.mon_on == 0)) { _client.OnNightEnded(); } } if (!_client.IsPossibleToCancelOrders) { _client.IsPossibleToCancelOrders = true; _client.OnEnableCancellOrders(); } } } else //session is not active { if (sess.sess_id < m_currSession.SessionNumber) { Log("sess.sess_id < m_currSession.SessionNumber exiting"); return; } _client.GUIBox.SessionState = 0; int s1 = _client.SessionCurrent; int s2 = sess.sess_id; Log("else..."); //not possible to add orders if (_client.IsSessionActive) { _client.OnSessionDeactivate(); _client.IsSessionActive = false; } //... but possible to cancel orders if (sess.state == (int)EnmFORTSSessionState.S0_SessionWasSet || sess.state == (int)EnmFORTSSessionState.S2_SessionNotActiveTradeDisabled) { Log("EnmSessionState.S0_SessionWasSet || sess.state == S2_SessionNotActiveTradeDisabled"); if (!_client.IsPossibleToCancelOrders) { _client.IsPossibleToCancelOrders = true; _client.OnEnableCancellOrders(); } if (CUtilTime.InTmInterval(SrvTmLocal, sess.inter_cl_begin, sess.inter_cl_end, timeTolMS)) { _client.OnIntradeyClearingBegin(); } if (CUtilTime.InTmInterval(SrvTmLocal, sess.end, sess.eve_begin, timeTolMS)) { _clientP2.OnEveningClearingBegin(); } if ((SrvTmLocal > sess.eve_end && SrvTmLocal < sess.mon_begin && sess.mon_on == 1) || (SrvTmLocal > sess.eve_end && SrvTmLocal < sess.begin && sess.mon_on == 0)) { _client.OnNightStarted(); } } else if (sess.state == (int)EnmFORTSSessionState.S4_SessionExpired) { if (CUtilTime.InTmInterval(SrvTmLocal, sess.end, sess.eve_begin, timeTolMS)) { _client.OnDaySessionExpired(); } //if session online end expired than day session finished if (_client.IsSessionOnline) { OnSessionExpired(sess); } } else //not possible cancell orders { Log("not possible cancell orders"); if (_client.IsPossibleToCancelOrders) { _client.IsPossibleToCancelOrders = false; _client.OnDisableCancellOrders(); } } } foreach (CBotBase bt in _client.ListBots) { bt.Recalc("", EnmBotEventCode.OnSessionUpdate, null); } UpateLstSessions(sess); // UpdateDBSession(sess); }