klhztrader/KLHZ.Trader.Core.Tests/LocalTrendsTests.cs

133 lines
4.1 KiB
C#

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<DateTime>();
var prices = new List<decimal>();
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<DateTime>(), Array.Empty<decimal>(), 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();
}
}
}
}