klhztrader/KLHZ.Trader.Core.Math/Common/Lines.cs

42 lines
1.4 KiB
C#

namespace KLHZ.Trader.Core.Math.Common
{
public static class Lines
{
public static (decimal x, decimal y) LinesCrossing(decimal k1, decimal b1, decimal k2, decimal b2)
{
var x = (b2 - b1) / (k1 - k2);
var y = k1 * x + b1;
return (x, y);
}
public static (bool res, DateTime x, decimal y) IsLinesCrossing(DateTime time1, DateTime time2, decimal val1_1, decimal val1_2, decimal val2_1, decimal val2_2)
{
var dtime = (decimal)(time2 - time1).TotalSeconds;
if (dtime == 0) return (false, DateTime.MinValue, 0);
var dval1 = val1_2 - val1_1;
var k1 = dval1 / dtime;
var b1 = val1_1;
var dval2 = val2_2 - val2_1;
var k2 = dval2 / dtime;
var b2 = val2_1;
if (k1 != k2)
{
var cross = LinesCrossing(k1, b1, k2, b2);
if (cross.x >= 0 && cross.x <= dtime)
{
var crossingTimestamp = time1.AddSeconds((double)cross.x);
return (crossingTimestamp >= time1 && crossingTimestamp <= time2, crossingTimestamp, cross.y);
}
}
//else if (b1 == b2)
//{
// return (true, time2, val2_2);
//}
return (false, DateTime.MinValue, 0);
}
}
}