Exemplo n.º 1
0
        public void ImplicitOperators()
        {
            var symbol1 = Symbol.BTC_USDT;
            var symbol2 = new Symbol(symbol1.Status, symbol1.BaseAsset, symbol1.QuoteAsset, symbol1.Quantity, symbol1.Price, symbol1.NotionalMinimumValue, symbol1.IsIcebergAllowed, symbol1.OrderTypes);
            var symbol3 = Symbol.BCH_USDT;

            Assert.True(symbol1 == symbol2);
            Assert.True(symbol1 != symbol3);

            Assert.True(symbol1 == symbol1.ToString());
            Assert.True(symbol1 == symbol2.ToString());
            Assert.True(symbol1 != symbol3.ToString());

            var           baseAsset        = new Asset("TEST", 8);
            var           quoteAsset       = Asset.BTC;
            var           quantityRange    = new InclusiveRange(0.01m, 10.0m, 0.01m);
            var           priceRange       = new InclusiveRange(0.01m, 100.0m, 0.01m);
            const decimal minNotionalValue = 0.001m;
            const bool    isIcebergAllowed = true;
            var           orderTypes       = new[] { OrderType.Limit, OrderType.Market };

            var newSymbol = new Symbol(SymbolStatus.Trading, baseAsset, quoteAsset, quantityRange, priceRange, minNotionalValue, isIcebergAllowed, orderTypes);

            Assert.True(newSymbol == baseAsset.Symbol + quoteAsset.Symbol);
        }
Exemplo n.º 2
0
        public void GetLowerValidValue()
        {
            const decimal minimum   = 0.01m;
            const decimal maximum   = 10.0m;
            const decimal increment = 0.01m;

            var range = new InclusiveRange(minimum, maximum, increment);

            Assert.Equal(maximum, range.GetLowerValidValue(maximum));
            Assert.Equal(minimum, range.GetLowerValidValue(minimum));
            Assert.Equal(minimum + increment, range.GetLowerValidValue(minimum + increment));
            Assert.Equal(maximum - increment, range.GetLowerValidValue(maximum - increment));

            Assert.Equal(1.11m, range.GetLowerValidValue(1.110m));
            Assert.Equal(1.11m, range.GetLowerValidValue(1.112m));
            Assert.Equal(1.11m, range.GetLowerValidValue(1.115m));
            Assert.Equal(1.11m, range.GetLowerValidValue(1.118m));
            Assert.Equal(1.12m, range.GetLowerValidValue(1.120m));
            Assert.Equal(1.12m, range.GetLowerValidValue(1.122m));
            Assert.Equal(1.12m, range.GetLowerValidValue(1.125m));
            Assert.Equal(1.12m, range.GetLowerValidValue(1.128m));

            // 9.876 => 9.870 given range of [0.01 - 10.00] with increment of 0.01.
            Assert.Equal(9.870m, range.GetLowerValidValue(9.876m));
        }
Exemplo n.º 3
0
        private static List <Area> AllPossibleAreas(InclusiveRange realAxis, InclusiveRange imaginaryAxis, double gridSize)
        {
            var allAreas = new List <Area>();

            var realPoints = new List <double>();

            for (var realPoint = realAxis.Minimum; realPoint <= realAxis.Maximum; realPoint += gridSize)
            {
                realPoints.Add(realPoint);
            }

            var imaginaryPoints = new List <double>();

            for (var imaginaryPoint = imaginaryAxis.Minimum; imaginaryPoint <= imaginaryAxis.Maximum; imaginaryPoint += gridSize)
            {
                imaginaryPoints.Add(imaginaryPoint);
            }

            for (var realIndex = 0; realIndex < realPoints.Count - 1; realIndex++)
            {
                for (var imaginaryIndex = 0; imaginaryIndex < imaginaryPoints.Count - 1; imaginaryIndex++)
                {
                    var realRange      = new InclusiveRange(realPoints[realIndex], realPoints[realIndex + 1]);
                    var imaginaryRange = new InclusiveRange(imaginaryPoints[imaginaryIndex], imaginaryPoints[imaginaryIndex + 1]);

                    var gridBox = new Area(
                        realRange,
                        imaginaryRange);
                    allAreas.Add(gridBox);
                }
            }

            return(allAreas);
        }
Exemplo n.º 4
0
        public void Properties()
        {
            const decimal minimum   = 0.001m;
            const decimal maximum   = 10.0m;
            const decimal increment = 0.01m;

            var range = new InclusiveRange(minimum, maximum, increment);

            Assert.Equal(minimum, range.Minimum);
            Assert.Equal(maximum, range.Maximum);
            Assert.Equal(increment, range.Increment);
        }
Exemplo n.º 5
0
 private static Int64RangeNode Split(int start, int end, IList <InclusiveRange> elementaryIntervals)
 {
     if (start == end - 1)
     {
         // leaf
         InclusiveRange range = elementaryIntervals[start];
         return(new Int64RangeNode(range.Start, range.End, null, null, start));
     }
     else
     {
         int            mid   = (int)((uint)(start + end) >> 1);
         Int64RangeNode left  = Split(start, mid, elementaryIntervals);
         Int64RangeNode right = Split(mid, end, elementaryIntervals);
         return(new Int64RangeNode(left.start, right.end, left, right, -1));
     }
 }
Exemplo n.º 6
0
        public void IsValid()
        {
            const SymbolStatus status      = SymbolStatus.Trading;
            var           quoteAsset       = Asset.USDT;
            var           quantityRange    = new InclusiveRange(0.01m, 10.0m, 0.01m);
            var           priceRange       = new InclusiveRange(0.01m, 100.0m, 0.01m);
            const decimal minNotionalValue = 0.001m;
            const bool    isIcebergAllowed = true;
            var           orderTypes       = new [] { OrderType.Limit, OrderType.Market };

            var validSymbol   = Symbol.BTC_USDT;
            var invalidSymbol = new Symbol(status, new Asset("...", 0), quoteAsset, quantityRange, priceRange, minNotionalValue, isIcebergAllowed, orderTypes);

            Assert.True(Symbol.IsValid(validSymbol));
            Assert.False(Symbol.IsValid(invalidSymbol));
        }
Exemplo n.º 7
0
        public void Throws()
        {
            const SymbolStatus status      = SymbolStatus.Trading;
            var           baseAsset        = Asset.BTC;
            var           quoteAsset       = Asset.USDT;
            var           quantityRange    = new InclusiveRange(0.01m, 10.0m, 0.01m);
            var           priceRange       = new InclusiveRange(0.01m, 100.0m, 0.01m);
            const decimal minNotionalValue = 0.001m;
            const bool    isIcebergAllowed = true;
            var           orderTypes       = new OrderType[] { OrderType.Limit, OrderType.Market };

            Assert.Throws <ArgumentNullException>("baseAsset", () => new Symbol(status, null, quoteAsset, quantityRange, priceRange, minNotionalValue, isIcebergAllowed, orderTypes));
            Assert.Throws <ArgumentNullException>("quoteAsset", () => new Symbol(status, baseAsset, null, quantityRange, priceRange, minNotionalValue, isIcebergAllowed, orderTypes));
            Assert.Throws <ArgumentNullException>("quantity", () => new Symbol(status, baseAsset, quoteAsset, null, priceRange, minNotionalValue, isIcebergAllowed, orderTypes));
            Assert.Throws <ArgumentNullException>("price", () => new Symbol(status, baseAsset, quoteAsset, quantityRange, null, minNotionalValue, isIcebergAllowed, orderTypes));
            Assert.Throws <ArgumentNullException>("orderTypes", () => new Symbol(status, baseAsset, quoteAsset, quantityRange, priceRange, minNotionalValue, isIcebergAllowed, null));
        }
Exemplo n.º 8
0
        public void GetValidValue()
        {
            const decimal minimum   = 0.01m;
            const decimal maximum   = 10.0m;
            const decimal increment = 0.01m;

            var range = new InclusiveRange(minimum, maximum, increment);

            Assert.Equal(maximum, range.GetValidValue(maximum));
            Assert.Equal(minimum, range.GetValidValue(minimum));
            Assert.Equal(minimum + increment, range.GetValidValue(minimum + increment));
            Assert.Equal(maximum - increment, range.GetValidValue(maximum - increment));

            var midpointRounding = MidpointRounding.ToEven;

            Assert.Equal(1.11m, range.GetValidValue(1.110m, midpointRounding));
            Assert.Equal(1.11m, range.GetValidValue(1.112m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.115m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.118m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.120m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.122m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.125m, midpointRounding));
            Assert.Equal(1.13m, range.GetValidValue(1.128m, midpointRounding));

            midpointRounding = MidpointRounding.AwayFromZero;

            Assert.Equal(1.11m, range.GetValidValue(1.110m, midpointRounding));
            Assert.Equal(1.11m, range.GetValidValue(1.112m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.115m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.118m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.120m, midpointRounding));
            Assert.Equal(1.12m, range.GetValidValue(1.122m, midpointRounding));
            Assert.Equal(1.13m, range.GetValidValue(1.125m, midpointRounding));
            Assert.Equal(1.13m, range.GetValidValue(1.128m, midpointRounding));

            // 1.234 => 1.230 given range of [0.01 - 10.00] with increment of 0.01.
            Assert.Equal(1.230m, range.GetValidValue(1.234m));
            // 2.345 => 2.340 given range of [0.01 - 10.00] with increment of 0.01 (midpoint rounding to even).
            // ReSharper disable once RedundantArgumentDefaultValue
            Assert.Equal(2.340m, range.GetValidValue(2.345m, MidpointRounding.ToEven));
            // 2.345 => 2.350 given range of [0.01 - 10.00] with increment of 0.01 (midpoint rounding away from 0).
            Assert.Equal(2.350m, range.GetValidValue(2.345m, MidpointRounding.AwayFromZero));
            // 9.876 => 9.880 given range of [0.01 - 10.00] with increment of 0.01.
            Assert.Equal(9.880m, range.GetValidValue(9.876m));
        }
Exemplo n.º 9
0
        public void IsValid()
        {
            const decimal minimum   = 0.01m;
            const decimal maximum   = 10.0m;
            const decimal increment = 0.01m;

            var range = new InclusiveRange(minimum, maximum, increment);

            Assert.True(range.IsValid(minimum));
            Assert.True(range.IsValid(maximum));
            Assert.True(range.IsValid(minimum + increment));
            Assert.True(range.IsValid(maximum - increment));

            Assert.False(range.IsValid(minimum - increment));
            Assert.False(range.IsValid(maximum + increment));
            Assert.False(range.IsValid(minimum + increment / 2));
            Assert.False(range.IsValid(maximum - increment / 2));
        }
Exemplo n.º 10
0
        public void Validate()
        {
            const decimal minimum   = 0.01m;
            const decimal maximum   = 10.0m;
            const decimal increment = 0.01m;

            var range = new InclusiveRange(minimum, maximum, increment);

            range.Validate(minimum);
            range.Validate(maximum);
            range.Validate(minimum + increment);
            range.Validate(maximum - increment);

            Assert.Throws <ArgumentOutOfRangeException>("value", () => range.Validate(minimum - increment));
            Assert.Throws <ArgumentOutOfRangeException>("value", () => range.Validate(maximum + increment));
            Assert.Throws <ArgumentOutOfRangeException>("value", () => range.Validate(minimum + increment / 2));
            Assert.Throws <ArgumentOutOfRangeException>("value", () => range.Validate(maximum - increment / 2));
        }
Exemplo n.º 11
0
        public void Properties()
        {
            const SymbolStatus status      = SymbolStatus.Trading;
            var           baseAsset        = Asset.BTC;
            var           quoteAsset       = Asset.USDT;
            var           quantityRange    = new InclusiveRange(0.01m, 10.0m, 0.01m);
            var           priceRange       = new InclusiveRange(0.01m, 100.0m, 0.01m);
            const decimal minNotionalValue = 0.001m;
            const bool    isIcebergAllowed = true;
            var           orderTypes       = new OrderType[] { OrderType.Limit, OrderType.Market };

            var symbol = new Symbol(status, baseAsset, quoteAsset, quantityRange, priceRange, minNotionalValue, isIcebergAllowed, orderTypes);

            Assert.Equal(status, symbol.Status);
            Assert.Equal(baseAsset, symbol.BaseAsset);
            Assert.Equal(quoteAsset, symbol.QuoteAsset);
            Assert.Equal(quantityRange, symbol.Quantity);
            Assert.Equal(priceRange, symbol.Price);
            Assert.Equal(minNotionalValue, symbol.NotionalMinimumValue);
            Assert.Equal(orderTypes, symbol.OrderTypes);
        }
Exemplo n.º 12
0
 public double Next(InclusiveRange range)
 {
     return(range.Magnitude * NextDouble() + range.Minimum);
 }
Exemplo n.º 13
0
        public void Increment()
        {
            // Arrange
            var a = 1.00000000M;
            var b = 0.10000000M;
            var c = 0.01000000M;
            var d = 0.00100000M;
            var e = 0.00010000M;
            var f = 0.00001000M;
            var g = 0.00000100M;
            var h = 0.00000010M;
            var j = 0.00000001M;

            // Act
            var ai = new InclusiveRange {
                Increment = a
            };
            var bi = new InclusiveRange {
                Increment = b
            };
            var ci = new InclusiveRange {
                Increment = c
            };
            var di = new InclusiveRange {
                Increment = d
            };
            var ei = new InclusiveRange {
                Increment = e
            };
            var fi = new InclusiveRange {
                Increment = f
            };
            var gi = new InclusiveRange {
                Increment = g
            };
            var hi = new InclusiveRange {
                Increment = h
            };
            var ji = new InclusiveRange {
                Increment = j
            };

            // Assert
            Assert.AreEqual(ai.Increment, a);
            Assert.AreEqual(bi.Increment, b);
            Assert.AreEqual(ci.Increment, c);
            Assert.AreEqual(di.Increment, d);
            Assert.AreEqual(ei.Increment, e);
            Assert.AreEqual(fi.Increment, f);
            Assert.AreEqual(gi.Increment, g);
            Assert.AreEqual(hi.Increment, h);
            Assert.AreEqual(ji.Increment, j);

            Assert.AreEqual(ai.Increment.ToString(), "1");
            Assert.AreEqual(bi.Increment.ToString(), "0.1");
            Assert.AreEqual(ci.Increment.ToString(), "0.01");
            Assert.AreEqual(di.Increment.ToString(), "0.001");
            Assert.AreEqual(ei.Increment.ToString(), "0.0001");
            Assert.AreEqual(fi.Increment.ToString(), "0.00001");
            Assert.AreEqual(gi.Increment.ToString(), "0.000001");
            Assert.AreEqual(hi.Increment.ToString(), "0.0000001");
            Assert.AreEqual(ji.Increment.ToString(), "0.00000001");
        }
Exemplo n.º 14
0
        /// <summary>
        /// Verify a value is within range and of a valid increment.
        /// </summary>
        /// <param name="range"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool IsValid(this InclusiveRange range, decimal value)
        {
            Throw.IfNull(range, nameof(range));

            return(value >= range.Minimum && value <= range.Maximum && (value - range.Minimum) % range.Increment == 0);
        }