You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.9 KiB
74 lines
2.9 KiB
using Binance.TradeRobot.Common.Extensions;
|
|
using Binance.TradeRobot.Model.Base;
|
|
using System;
|
|
|
|
namespace Binance.TradeRobot.Business.Extensions
|
|
{
|
|
public static class KIDExtension
|
|
{
|
|
public static long GetKID(this DateTime datetime, Enums.SignalPeriod kLinePeriodic, bool isPrevious)
|
|
{
|
|
DateTime dt = datetime.AddSeconds(datetime.Second * -1).AddMilliseconds(datetime.Millisecond * -1);
|
|
if (kLinePeriodic == Enums.SignalPeriod._1m)
|
|
{
|
|
if (isPrevious)
|
|
dt = dt.AddMinutes(-1);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._5m)
|
|
{
|
|
var fiveMinCount = dt.Minute / 5; //5分钟的次数
|
|
dt = dt.AddMinutes(dt.Minute * -1).AddMinutes(fiveMinCount * 5);
|
|
if (isPrevious)
|
|
dt = dt.AddMinutes(-5);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._15m)
|
|
{
|
|
var fifteenMinCount = dt.Minute / 15; //15分钟次数
|
|
dt = dt.AddMinutes(dt.Minute * -1).AddMinutes(fifteenMinCount * 15);
|
|
if (isPrevious)
|
|
dt = dt.AddMinutes(-15);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._30m)
|
|
{
|
|
var fifteenMinCount = dt.Minute / 30; //30分钟次数
|
|
dt = dt.AddMinutes(dt.Minute * -1).AddMinutes(fifteenMinCount * 30);
|
|
if (isPrevious)
|
|
dt = dt.AddMinutes(-30);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._1h)
|
|
{
|
|
dt = dt.AddMinutes(dt.Minute * -1);
|
|
if (isPrevious)
|
|
dt = dt.AddHours(-1);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._4h)
|
|
{
|
|
var hCount = dt.Hour / 4; //4小时的次数
|
|
dt = dt.AddMinutes(dt.Minute * -1).AddHours(dt.Hour * -1).AddHours(hCount * 4);
|
|
if (isPrevious)
|
|
dt = dt.AddHours(-4);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._1d)
|
|
{
|
|
dt = dt.AddMinutes(dt.Minute * -1).AddHours(dt.Hour * -1);
|
|
if (isPrevious)
|
|
dt = dt.AddDays(-1);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._1w)
|
|
{
|
|
var week = dt.DayOfWeek;
|
|
dt = dt.AddMinutes(dt.Minute * -1).AddHours(dt.Hour * -1).AddDays((int)week * -1);
|
|
if (isPrevious)
|
|
dt = dt.AddDays(-7);
|
|
}
|
|
else if (kLinePeriodic == Enums.SignalPeriod._1M)
|
|
{
|
|
dt = dt.AddMinutes(dt.Minute * -1).AddHours(dt.Hour * -1).AddDays((dt.Day - 1) * -1);
|
|
if (isPrevious)
|
|
dt = dt.AddMonths(-1);
|
|
}
|
|
Console.WriteLine(dt);
|
|
return dt.DateTimeToStamp(len13: false);
|
|
}
|
|
}
|
|
}
|
|
|