Beispiel #1
0
        public void AddMemoryPoint(Strategy strategy, DateTime date, double value, int memorytype, int memoryclass, Boolean onlyMemory)
        {
            string key = strategy.ID + "_" + memorytype + "_" + memoryclass;

            GetMemorySeries(strategy, memorytype, memoryclass);

            if (_memorySeriesDatabase.ContainsKey(key))
            {
                if (_memorySeriesDatabase[key].ContainsDate(date))
                {
                    _memorySeriesDatabase[key][date] = value;

                    if (_newMemorySeriesDatabase.ContainsKey(key) && _newMemorySeriesDatabase[key].ContainsKey(date))
                    {
                        _newMemorySeriesDatabase[key][date] = new MemorySeriesPoint(strategy.ID, memorytype, memoryclass, date, value);
                    }
                }
                else
                {
                    if (!_newMemorySeriesDatabase.ContainsKey(key))
                    {
                        _newMemorySeriesDatabase.TryAdd(key, new ConcurrentDictionary <DateTime, MemorySeriesPoint>());
                    }

                    if (!_newMemorySeriesDatabase[key].ContainsKey(date))
                    {
                        _newMemorySeriesDatabase[key].TryAdd(date, new MemorySeriesPoint(strategy.ID, memorytype, memoryclass, date, value));
                    }
                    else
                    {
                        _newMemorySeriesDatabase[key][date] = new MemorySeriesPoint(strategy.ID, memorytype, memoryclass, date, value);
                    }

                    if (_memorySeriesDatabase.ContainsKey(key) && !_memorySeriesDatabase[key].ContainsDate(date))
                    {
                        _memorySeriesDatabase[key].AddDataPoint(date, value);
                    }
                }
            }

            if (!onlyMemory && !strategy.SimulationObject && Instrument.TimeSeriesLoadFromDatabase)
            {
                Save(strategy);
            }

            if (!onlyMemory && !strategy.SimulationObject && strategy.Cloud)
            {
                if (RTDEngine.Publish(strategy))
                {
                    RTDEngine.Send(new RTDMessage()
                    {
                        Type = RTDMessage.MessageType.StrategyData, Content = new RTDMessage.StrategyData()
                        {
                            InstrumentID = strategy.ID, Value = value, MemoryClassID = memoryclass, MemoryTypeID = memorytype, Timestamp = date
                        }
                    });
                }
            }
        }
Beispiel #2
0
        public void ClearMemory(Strategy strategy, DateTime date)
        {
            lock (objLock)
            {
                foreach (string key in _memorySeriesDatabase.Keys.ToList())
                {
                    if (key.StartsWith(strategy.ID.ToString()) && !key.Contains(Strategy._aum_id_do_not_use.ToString()) && !key.Contains(Strategy._aum_chg_id_do_not_use.ToString()) && !key.Contains(Strategy._aum_ord_chg_id_do_not_use.ToString()) && !key.Contains(Strategy._universe_id_do_not_use.ToString()))
                    {
                        _memorySeriesDatabase[key].RemoveDataPoint(date);
                    }
                }

                foreach (string key in _newMemorySeriesDatabase.Keys.ToList())
                {
                    if (key.StartsWith(strategy.ID.ToString()) && !key.Contains(Strategy._aum_id_do_not_use.ToString()) && !key.Contains(Strategy._aum_chg_id_do_not_use.ToString()) && !key.Contains(Strategy._aum_ord_chg_id_do_not_use.ToString()) && !key.Contains(Strategy._universe_id_do_not_use.ToString()) && _newMemorySeriesDatabase[key].ContainsKey(date))
                    {
                        MemorySeriesPoint v = new MemorySeriesPoint();
                        _newMemorySeriesDatabase[key].TryRemove(date, out v);
                    }
                }


                if (Instrument.TimeSeriesLoadFromDatabase)
                {
                    string tableName    = _StrategyMemoryTableName;
                    string searchString = string.Format("ID={0} AND Timestamp='{1:yyyy-MM-dd HH:mm:ss.fff}' AND (MemoryTypeID<>{2} OR MemoryClassID<>{2} OR MemoryTypeID<>{3} OR MemoryClassID<>{3} OR MemoryTypeID<>{4} OR MemoryClassID<>{4} OR MemoryTypeID<>{5} OR MemoryClassID<>{5})", strategy.ID, date, Strategy._aum_id_do_not_use, Strategy._aum_chg_id_do_not_use, Strategy._universe_id_do_not_use, Strategy._aum_ord_chg_id_do_not_use);
                    string targetString = null;

                    DataTable         _datesTable = Database.DB[strategy.StrategyDB].GetDataTable(tableName, targetString, searchString);
                    DataRowCollection rs          = _datesTable.Rows;

                    foreach (DataRow r in rs)
                    {
                        r.Delete();
                    }

                    Database.DB[strategy.StrategyDB].UpdateDataTable(_datesTable);
                }
            }
        }