예제 #1
0
        /// <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);
        }
예제 #2
0
        //**************************************************************

        /// <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();
        }
예제 #3
0
        /// <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);
        }