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