using KLHZ.Trader.Core.Math.Declisions.Utils; namespace KLHZ.Trader.Core.Tests { public class LocalTrendsTests { public static (DateTime[] timestamps, decimal[] prices) GetData(int bound, decimal sign = 1m) { var date1 = DateTime.UtcNow.AddSeconds(-2 * bound); var val = 0m; var timestamps = new List(); var prices = new List(); var step = 0.5m; for (int i = 0; i < 2 * bound; i++) { date1 = date1.AddSeconds(1); timestamps.Add(date1); val += step * sign; prices.Add(val); if (i == bound) { sign = sign * -1; } } return (timestamps.ToArray(), prices.ToArray()); } [Test] public void TryGetLocalTrends1() { var data = GetData(50); if (LocalTrends.TryGetLocalTrends(data.timestamps, data.prices, TimeSpan.FromSeconds(49), TimeSpan.FromSeconds(49), 22, out var res)) { Assert.That(res == Contracts.Declisions.Dtos.Enums.TradingEvent.CloseLong); } else { Assert.Fail(); } } [Test] public void TryGetLocalTrends2() { var data = GetData(50, -1); if (LocalTrends.TryGetLocalTrends(data.timestamps, data.prices, TimeSpan.FromSeconds(49), TimeSpan.FromSeconds(49), 22, out var res)) { //Assert.That(res == Contracts.Declisions.Dtos.Enums.TradingEvent.UptrendStart); } else { Assert.Fail(); } } [Test] public void TryGetLocalTrends3() { var data = GetData(100, -1); if (LocalTrends.TryGetLocalTrends(data.timestamps, data.prices, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30), 10, out var res)) { Assert.That(res == Contracts.Declisions.Dtos.Enums.TradingEvent.None); } else { Assert.Fail(); } } [Test] public void TryGetLocalTrends4() { if (LocalTrends.TryGetLocalTrends(Array.Empty(), Array.Empty(), TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30), 10, out var res)) { Assert.That(res == Contracts.Declisions.Dtos.Enums.TradingEvent.None); } else { Assert.Pass(); } } [Test] public void TryGetLocalTrends5() { if (LocalTrends.TryGetLocalTrends(new DateTime[1] { DateTime.UtcNow }, new decimal[] { 1m }, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30), 10, out var res)) { Assert.That(res == Contracts.Declisions.Dtos.Enums.TradingEvent.None); } else { Assert.Pass(); } } [Test] public void TryCalcTrendDiff1() { var data = GetData(500, -1); if (LocalTrends.TryCalcTrendDiff(data.timestamps.Take(100).ToArray(), data.prices.Take(100).ToArray(), out var res)) { Assert.That(res < 0); Assert.That(System.Math.Abs(res) <= 50 && System.Math.Abs(res) > 40); } else { Assert.Fail(); } } [Test] public void TryCalcTrendDiff2() { var data = GetData(500); if (LocalTrends.TryCalcTrendDiff(data.timestamps.Take(100).ToArray(), data.prices.Take(100).ToArray(), out var res)) { Assert.That(res > 0); Assert.That(System.Math.Abs(res) <= 50 && System.Math.Abs(res) > 40); } else { Assert.Fail(); } } } }