/// <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> Добавление "первой" свечки в коллекцию, в [0] по индексу. </summary> /// <param name="candle"></param> public void InsertFirst(CandleData candle) { if (candle.IsNull()) { return; } MutexCollection.WaitOne(); this.Collection.Insert(0, candle); MutexCollection.ReleaseMutex(); }
/// <summary> Проверка, была ли уже данная сделка. </summary> /// <param name="trade"></param> /// <returns></returns> public bool ExistTrade(Trade trade) { DateTime time = CandleData.GetTimeCandle(trade.DateTrade, this.TimeFrame); var candle = this.Collection.FirstOrDefault(c => c.Time == time); if (!candle.IsNull()) { return(candle.CheckExistsTrade(trade)); } return(false); }