コード例 #1
0
        public void ReturnsSymbolDataMatrixIsSimilarToPandasDataFrame(bool odd)
        {
            var symbols = new[] { "A", "B", "C", "D", "E" }
            .Select(x => Symbol.Create(x, SecurityType.Equity, Market.USA, x));

            var slices = GetHistory(symbols, odd);

            var expected = GetExpectedValue(slices);

            var symbolDataDict = new Dictionary <Symbol, ReturnsSymbolData>();

            slices.PushThrough(bar =>
            {
                ReturnsSymbolData symbolData;
                if (!symbolDataDict.TryGetValue(bar.Symbol, out symbolData))
                {
                    symbolData = new ReturnsSymbolData(bar.Symbol, 1, 5);
                    symbolDataDict.Add(bar.Symbol, symbolData);
                }
                symbolData.Update(bar.EndTime, bar.Value);
            });

            var matrix = symbolDataDict.FormReturnsMatrix(symbols);
            var actual = matrix.Determinant();

            Assert.AreEqual(expected, actual, 0.000001);
        }
コード例 #2
0
        public void ReturnsDoesNotThrowIndexOutOfRangeException()
        {
            var dateTime = new DateTime(2020, 02, 01);

            var returnsSymbolData = new ReturnsSymbolData(Symbols.EURGBP, 1, 5);

            returnsSymbolData.Add(dateTime, 10);
            returnsSymbolData.Add(dateTime.AddDays(1), 100);
            returnsSymbolData.Add(dateTime.AddDays(2), 5);

            var returnsSymbolData2 = new ReturnsSymbolData(Symbols.BTCUSD, 1, 5);

            returnsSymbolData2.Add(dateTime.AddDays(1), 33);
            returnsSymbolData2.Add(dateTime.AddDays(2), 2);

            var returnsSymbolDatas = new Dictionary <Symbol, ReturnsSymbolData>
            {
                { Symbols.EURGBP, returnsSymbolData },
                { Symbols.BTCUSD, returnsSymbolData2 },
            };

            var result = returnsSymbolDatas.FormReturnsMatrix(new List <Symbol> {
                Symbols.EURGBP, Symbols.BTCUSD
            });

            Assert.AreEqual(4, result.Length);

            Assert.AreEqual(5m, result[0, 0]);
            Assert.AreEqual(2m, result[0, 1]);

            Assert.AreEqual(100m, result[1, 0]);
            Assert.AreEqual(33m, result[1, 1]);
        }
コード例 #3
0
        public void ReturnsDoesNotThrowKeyAlreadyExistsException()
        {
            var returnsSymbolData = new ReturnsSymbolData(Symbols.EURGBP, 1, 5);

            var dateTime = new DateTime(2020, 02, 01);

            returnsSymbolData.Add(dateTime, 10);
            returnsSymbolData.Add(dateTime, 100);

            Assert.AreEqual(1, returnsSymbolData.Returns.Count);
            Assert.AreEqual(returnsSymbolData.Returns[dateTime], 10);
        }
            public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges changes)
            {
                const int period    = 2;
                var       reference = algorithm.Time.AddDays(-period);

                foreach (var security in changes.AddedSecurities)
                {
                    var symbol     = security.Symbol;
                    var symbolData = new ReturnsSymbolData(symbol, 1, period);

                    for (var i = 0; i <= period * 2; i++)
                    {
                        symbolData.Update(reference.AddDays(i), i);
                    }

                    _symbolDataDict[symbol] = symbolData;
                }
            }