133 lines
4.1 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|