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 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; 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; } } return false; } } }