public void Create() { //Добавление тайм-фреймов /*foreach (var timeFrame in TElement.TIME_FRAMES) * { * this.CollectionTimeFrames.Add(new CandleCollection(timeFrame)); * }*/ //Определяем контролируемы тафм-фрейм /*this.TFControllTrades = this.CollectionTimeFrames.FirstOrDefault(f => f.TimeFrame == TIME_FRAME_CONTROL); * this.TFControllTrades.ControlTrades = true; * this.TFControllTrades.OnNewCandle += (tframe, candle) => * { * this.TFControllTrades.ClearHistoryTrade(candle); * };*/ StorageTF.Each((tf) => { tf.Candles.OnNew += (tframe, candle) => { if (!OnNewCandle.IsNull()) { OnNewCandle(tframe, candle); } }; }); }
/// <summary> Добавить новую сделку в свечку с соответствущим временем. </summary> /// <param name="trade">Сделка</param> /// <param name="history"> Флаг загрузки исторических сделок </param> public bool AddNewTrade(Trade trade) { if (trade.IsNull()) { return(false); } DateTime time = CandleData.GetTimeCandle(trade.DateTrade, this.TimeFrame); if (this.Count > 0) { MutexCollection.WaitOne(); var LastFindCandle = this.Collection.FirstOrDefault(c => c.Time == time); if (!LastFindCandle.IsNull()) { LastFindCandle.NewTrade(trade, this.ControlTrades); } else { //свеча отсутствует this.AddNewCandle(time); LastFindCandle = this.FirstCandle; LastFindCandle.NewTrade(trade, this.ControlTrades); //Сортируем по времени this.Collection = this.Collection.OrderByDescending(c => c.Time).ToList(); if (!OnNewCandle.IsNull()) { OnNewCandle(this.TimeFrame, LastFindCandle); } //Удаляем свечки c конца, которые выше допустимого кол-ва хранения if (this.Collection.Count > this.CountKeepCandle) { if (this.OnDeleteExtra != null) { OnDeleteExtra(this.LastCandle); } this.Collection.Remove(this.LastCandle); } } MutexCollection.ReleaseMutex(); } else { MutexCollection.WaitOne(); //Добавляем первую свечку в коллекцию this.AddNewCandle(time); this.FirstCandle.NewTrade(trade, this.ControlTrades); if (!OnNewCandle.IsNull()) { OnNewCandle(this.TimeFrame, this.FirstCandle); } MutexCollection.ReleaseMutex(); } return(true); }
/// <summary> Добавить новую сделку в свечку с соответствущим временем. </summary> /// <param name="trade">Сделка</param> /// <param name="history"> Флаг загрузки исторических сделок </param> public bool AddNewTrade(Trade trade, bool history = false) { if (trade.IsNull()) { return(false); } DateTime time = CandleData.GetTimeCandle(trade.DateTrade.GetDateTime(), this.TimeFrame); if (this.Count > 0) { lock (syncLock) { if (LastFindCandle.NotIsNull()) { if (LastFindCandle.Time == time) { LastFindCandle.NewTrade(trade); TimeLastUpdateCollection = DateTime.Now; return(true); } } LastFindCandle = this.Collection.FirstOrDefault(c => c.Time == time); if (LastFindCandle.NotIsNull()) { LastFindCandle.NewTrade(trade); TimeLastUpdateCollection = DateTime.Now; return(true); } else { //свеча отсутствует this.AddNewCandle(time); LastFindCandle = this.FirstCandle; LastFindCandle.NewTrade(trade); //Сортируем по времени this.ObjCollection.Collection = this.Collection.OrderByDescending(c => c.Time).ToList(); if (!OnNewCandle.IsNull() && !history) { OnNewCandle(this.TimeFrame, LastFindCandle); } //Удаляем свечки c конца, которые выше допустимого кол-ва хранения if (this.Collection.Count > this.CountKeepCandle) { if (this.OnDeleteExtra != null) { OnDeleteExtra(this.LastCandle); } this.Collection.Remove(this.LastCandle); } } } } else { lock (syncLock) { //Добавляем первую свечку в коллекцию this.AddNewCandle(time); this.FirstCandle.NewTrade(trade); if (!OnNewCandle.IsNull() && !history) { OnNewCandle(this.TimeFrame, this.FirstCandle); } } } return(true); }