/// <summary> /// /// </summary> /// <param name="candle"></param> /// <param name="trade"></param> /// <returns></returns> private bool addTrade(CandleData candle, Trade trade) { if (!candle.NewTrade(trade)) { //Если сделка не попала в диапазон min < num < max if (!tfControl.CheckTrade(trade)) { return(candle.NewTrade(trade, true)); } return(false); } 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); }