public void GetMovingAverage_PartialRange()
        {
            // Arrange
            var movingAverageTradeCreator    = new MovingAverageTradeCreator();
            var movingAverageTradeParameters = new MovingAverageTradeParameters
            {
                MovingAvarageRange = 5,
                BuyIndicator       = 123.45m,
                SellIndicator      = 125.67m
            };

            movingAverageTradeCreator.Reset(movingAverageTradeParameters);

            // Act
            var trade1 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 25.40m
            });
            var trade2 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 25.90m
            });
            var trade3 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 26.50m
            });

            // Assert
            Assert.AreEqual(trade1.MovingAveragePrice, 25.40m);
            Assert.AreEqual(trade2.MovingAveragePrice, 25.65m);
            Assert.AreEqual(Math.Truncate(100 * trade3.MovingAveragePrice) / 100, 25.93m); //truncate to 2 decimal places
        }
Ejemplo n.º 2
0
        public override async Task <bool> TryUpdateStrategyAsync(string parameters)
        {
            var tcs = new TaskCompletionSource <bool>();

            var strategyParameters = JsonConvert.DeserializeObject <MovingAverageTradeParameters>(parameters);

            if (tradeCache == null)
            {
                tradeCache = new TradeCache <MovingAverageTradeCreator, MovingAverageTrade, MovingAverageTradeParameters>(strategyParameters.TradeRange);
            }

            if (movingAverageTradeParameters == null ||
                !strategyParameters.MovingAvarageRange.Equals(movingAverageTradeParameters.MovingAvarageRange) ||
                !strategyParameters.SellIndicator.Equals(movingAverageTradeParameters.SellIndicator) ||
                !strategyParameters.BuyIndicator.Equals(movingAverageTradeParameters.BuyIndicator))
            {
                movingAverageTradeParameters = strategyParameters;
                Strategy.Parameters          = parameters;
                tradeCache.TradeCreator.Reset(movingAverageTradeParameters);
            }

            Suspend = movingAverageTradeParameters.Suspend;

            StrategyParameterUpdateNotification(new StrategyNotificationEventArgs {
                StrategyNotification = new StrategyNotification {
                    Name = Strategy.Name, Message = parameters, NotificationLevel = NotificationLevel.ParameterUpdate
                }
            });

            tcs.SetResult(true);

            return(await tcs.Task.ConfigureAwait(false));
        }
        public void GetMovingAverage_FullRange_After_Reshuffle()
        {
            // Arrange
            var movingAverageTradeCreator    = new MovingAverageTradeCreator();
            var movingAverageTradeParameters = new MovingAverageTradeParameters
            {
                MovingAvarageRange = 5,
                BuyIndicator       = 123.45m,
                SellIndicator      = 125.67m
            };

            movingAverageTradeCreator.Reset(movingAverageTradeParameters);

            // Act
            var trade1 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 25.40m
            });
            var trade2 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 25.90m
            });
            var trade3 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 26.50m
            });
            var trade4 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 26.30m
            });
            var trade5 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 27.90m
            });
            var trade6 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 27.40m
            });
            var trade7 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 28.20m
            });

            // Assert
            Assert.AreEqual(trade1.MovingAveragePrice, 25.40m);
            Assert.AreEqual(trade2.MovingAveragePrice, 25.65m);
            Assert.AreEqual(Math.Truncate(100 * trade3.MovingAveragePrice) / 100, 25.93m); //truncate to 2 decimal places
            Assert.AreEqual(trade4.MovingAveragePrice, 26.025m);
            Assert.AreEqual(trade5.MovingAveragePrice, 26.40m);
            Assert.AreEqual(trade6.MovingAveragePrice, 26.80m);
            Assert.AreEqual(trade7.MovingAveragePrice, 27.26m);
        }
        public void MovingAverageTradeCreator_Reset_CreateTrades_EqualsRange()
        {
            // Arrange
            var movingAverageTradeCreator    = new MovingAverageTradeCreator();
            var movingAverageTradeParameters = new MovingAverageTradeParameters
            {
                MovingAvarageRange = 5,
                BuyIndicator       = 123.45m,
                SellIndicator      = 125.67m
            };

            // Act
            movingAverageTradeCreator.Reset(movingAverageTradeParameters);
            movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 1
            });
            movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 2
            });
            movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 3
            });
            movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 4
            });
            movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 5
            });

            // Assert
            Assert.AreEqual(movingAverageTradeCreator.GetCurrentPosition(), 4);
            Assert.AreEqual(movingAverageTradeCreator.GetMovingAvarageRange(), movingAverageTradeParameters.MovingAvarageRange);
            Assert.AreEqual(movingAverageTradeCreator.GetBuyIndicator(), movingAverageTradeParameters.BuyIndicator);
            Assert.AreEqual(movingAverageTradeCreator.GetSellIndicator(), movingAverageTradeParameters.SellIndicator);

            var range = movingAverageTradeCreator.GetRange();

            Assert.AreEqual(range.Length, movingAverageTradeParameters.MovingAvarageRange);
            Assert.AreEqual(range[0], 1);
            Assert.AreEqual(range[1], 2);
            Assert.AreEqual(range[2], 3);
            Assert.AreEqual(range[3], 4);
            Assert.AreEqual(range[4], 5);
        }
Ejemplo n.º 5
0
        public override async Task <bool> TryUpdateStrategyAsync(string parameters)
        {
            var tcs = new TaskCompletionSource <bool>();

            try
            {
                var strategyParameters = JsonConvert.DeserializeObject <MovingAverageTradeParameters>(parameters);

                if (tradeCache == null)
                {
                    tradeCache = new TradeCache <MovingAverageTradeCreator, MovingAverageTrade, MovingAverageTradeParameters>(strategyParameters.TradeRange);
                }

                if (movingAverageTradeParameters == null ||
                    !strategyParameters.MovingAvarageRange.Equals(movingAverageTradeParameters.MovingAvarageRange) ||
                    !strategyParameters.SellIndicator.Equals(movingAverageTradeParameters.SellIndicator) ||
                    !strategyParameters.BuyIndicator.Equals(movingAverageTradeParameters.BuyIndicator))
                {
                    movingAverageTradeParameters = strategyParameters;
                    tradeCache.TradeCreator.Reset(movingAverageTradeParameters);
                }

                suspend = movingAverageTradeParameters.Suspend;

                StrategyNotification(new StrategyNotificationEventArgs {
                    StrategyNotification = new StrategyNotification {
                        Name = Strategy.Name, Message = $"Parameter update : {parameters}", NotificationLevel = NotificationLevel.Information
                    }
                });

                tcs.SetResult(true);
            }
            catch (Exception ex)
            {
                tcs.SetException(ex);
            }

            return(await tcs.Task);
        }
        public void MovingAverageTradeCreator_CreateTrades_Reset()
        {
            // Arrange
            var movingAverageTradeCreator    = new MovingAverageTradeCreator();
            var movingAverageTradeParameters = new MovingAverageTradeParameters
            {
                MovingAvarageRange = 5,
                BuyIndicator       = 123.45m,
                SellIndicator      = 125.67m
            };

            movingAverageTradeCreator.Reset(movingAverageTradeParameters);
            var trade1 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 1
            });
            var trade2 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 2
            });
            var trade3 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 3
            });

            // Act
            movingAverageTradeParameters.MovingAvarageRange = 10;
            movingAverageTradeCreator.Reset(movingAverageTradeParameters);
            var trade4 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 4
            });
            var trade5 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 5
            });
            var trade6 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 6
            });
            var trade7 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 7
            });
            var trade8 = movingAverageTradeCreator.CreateTrade(new Trade {
                Price = 8
            });

            // Assert
            Assert.AreEqual(movingAverageTradeCreator.GetCurrentPosition(), 7);
            Assert.AreEqual(movingAverageTradeCreator.GetMovingAvarageRange(), movingAverageTradeParameters.MovingAvarageRange);
            Assert.AreEqual(movingAverageTradeCreator.GetBuyIndicator(), movingAverageTradeParameters.BuyIndicator);
            Assert.AreEqual(movingAverageTradeCreator.GetSellIndicator(), movingAverageTradeParameters.SellIndicator);

            var range = movingAverageTradeCreator.GetRange();

            Assert.AreEqual(range.Length, movingAverageTradeParameters.MovingAvarageRange);
            Assert.AreEqual(range[0], 1);
            Assert.AreEqual(range[1], 2);
            Assert.AreEqual(range[2], 3);
            Assert.AreEqual(range[3], 4);
            Assert.AreEqual(range[4], 5);
            Assert.AreEqual(range[5], 6);
            Assert.AreEqual(range[6], 7);
            Assert.AreEqual(range[7], 8);
            Assert.AreEqual(range[8], 0);
            Assert.AreEqual(range[9], 0);
        }