示例#1
0
        public void SynchronizedLinkedListUnitTest()
        {
            SynchronizedLinkedList<string> linkedList = new SynchronizedLinkedList<string>();

            linkedList.AddFirst("one");
            linkedList.AddLast("two");
            linkedList.AddAfter(linkedList.Find("two"), "three");
            linkedList.AddLast("four");
            Assert.IsTrue(linkedList.Count == 4);

            foreach (string name in linkedList)
            {
                Assert.IsTrue(linkedList.Contains(name));
            }

            linkedList.RemoveFirst();
            Assert.IsFalse(linkedList.Contains("one"));

            linkedList.RemoveLast();
            Assert.IsFalse(linkedList.Contains("four"));

            linkedList.Remove("two");
            Assert.IsFalse(linkedList.Contains("two"));

            linkedList.Clear();
            Assert.IsTrue(linkedList.Count == 0);
        }
            public bool AddCandle(Candle candle)
            {
                if (candle == null)
                {
                    throw new ArgumentNullException("candle");
                }

                if (!_byTime.SafeAdd(candle.OpenTime).TryAdd(candle))
                {
                    return(false);
                }

                _allCandles.AddLast(candle);
                _candleStat.Add(candle);

                _lastCandleTime = candle.OpenTime.UtcTicks;

                RecycleCandles();

                return(true);
            }
示例#3
0
            public bool AddCandle(Candle candle)
            {
                if (candle == null)
                {
                    throw new ArgumentNullException(nameof(candle));
                }

                var ticks = candle.OpenTime.To <long>();

                if (!_byTime.SafeAdd(ticks).TryAdd(candle))
                {
                    return(false);
                }

                _allCandles.AddLast(candle);
                _candleStat.Add(candle);

                _lastCandleTime = ticks;

                RecycleCandles();

                return(true);
            }
示例#4
0
            private void ConnectorOnMarketTimeChanged(TimeSpan diff)
            {
                var first = _continuousSecurities.First;

                if (first == null)
                {
                    return;
                }

                if (first.Value.Elapsed > diff)
                {
                    first.Value.Elapsed -= diff;
                }
                else
                {
                    var underlyingSecurities = new List <Tuple <ContinuousSecurity, MarketDataTypes, Security, Security> >();

                    lock (_continuousSecurities.SyncRoot)
                    {
                        var curr = first;

                        while (curr != null && curr.Value.Elapsed <= diff && diff > TimeSpan.Zero)
                        {
                            diff -= curr.Value.Elapsed;
                            _continuousSecurities.Remove(curr);

                            var currSec = curr.Value.Item1.GetSecurity(_connector.CurrentTime);

                            if (currSec != null)
                            {
                                var jumpInUtc = NextExpInUtc(curr);

                                var c = _continuousSecurities.First;

                                while (c != null)
                                {
                                    if (jumpInUtc < NextExpInUtc(c))
                                    {
                                        break;
                                    }

                                    c = c.Next;
                                }

                                if (c == null)
                                {
                                    _continuousSecurities.AddLast(curr);
                                }
                                else
                                {
                                    c.Value.Elapsed = NextExpInUtc(c) - jumpInUtc;
                                    _continuousSecurities.AddBefore(c, curr);
                                }

                                if (curr.Previous != null)
                                {
                                    curr.Value.Elapsed = jumpInUtc - NextExpInUtc(curr.Previous);
                                }
                                else
                                {
                                    curr.Value.Elapsed = jumpInUtc - currSec.Board.Exchange.ToUtc(currSec.ToExchangeTime(_connector.CurrentTime));
                                }

                                underlyingSecurities.Add(Tuple.Create(curr.Value.Item1, curr.Value.Item2, curr.Value.Item1.ExpirationJumps.GetPrevSecurity(currSec), currSec));
                            }
                            else
                            {
                                underlyingSecurities.Add(Tuple.Create(curr.Value.Item1, curr.Value.Item2, curr.Value.Item1.ExpirationJumps.LastSecurity, (Security)null));
                                UnSubscribeContinuous(curr.Value.Item1, curr.Value.Item2);
                            }

                            curr = _continuousSecurities.First;
                        }
                    }

                    foreach (var tuple in underlyingSecurities)
                    {
                        if (tuple.Item3 != null)
                        {
                            UnSubscribe(tuple.Item3, tuple.Item2);
                        }

                        if (tuple.Item4 != null)
                        {
                            Subscribe(tuple.Item4, tuple.Item2);
                        }
                    }
                }
            }