private int FindEndBarPos(ITickData tickData, ITradingTime tradingTime, int periodIndex) { double endTime = tradingTime.GetPeriodTime(periodIndex)[1]; double nextStartTime = tradingTime.GetPeriodTime(periodIndex + 1)[0]; endTime = (endTime + nextStartTime) / 2; return(TimeIndeierUtils.IndexOfTime_Tick(tickData, endTime)); }
public double GetRecentTradingTime(double time, bool findForward) { int tradingDay = GetRecentTradingDay(time, findForward); if (tradingDay < 0) { return(-1); } ITradingTime tradingTime = GetTradingTime(tradingDay); if (tradingTime.OpenTime <= time && tradingTime.CloseTime >= time) { double[] timeArr = tradingTime.GetPeriodTime(0); if (timeArr[0] <= time && timeArr[1] >= time) { return(time); } for (int i = 1; i < tradingTime.PeriodCount; i++) { timeArr = tradingTime.GetPeriodTime(i); if (timeArr[0] > time) { return(tradingTime.GetPeriodTime(i - 1)[1]); } if (timeArr[0] <= time && timeArr[1] >= time) { return(time); } } return(tradingTime.CloseTime); } else { if (findForward) { return(tradingTime.OpenTime); } else { return(tradingTime.CloseTime); } } }
private KLineDataTradingTimeInfo_Day CalcKLineTimeInfo_Day(ITradingTime tradingTime, IKLineData klineData, int currentBarPos) { if (tradingTime.PeriodCount == 0) { return(null); } KLineDataTradingTimeInfo_Day klineTimeInfo_Day = new KLineDataTradingTimeInfo_Day(tradingTime.TradingDay); for (int i = 0; i < tradingTime.PeriodCount; i++) { double[] periodTime = tradingTime.GetPeriodTime(i); int startPos = CalcEndBarPos(klineData, periodTime[0], currentBarPos); int endPos = CalcEndBarPos(klineData, periodTime[1], startPos + 1); currentBarPos = endPos + 1; KLineDataTradingTimeInfo_Periods timeInfo = new KLineDataTradingTimeInfo_Periods(i, startPos, endPos); klineTimeInfo_Day.AddTradingPeriods(timeInfo); } int dayStartPos = klineTimeInfo_Day.TradingPeriods[0].StartPos; int dayEndPos = klineTimeInfo_Day.TradingPeriods[klineTimeInfo_Day.TradingPeriods.Count - 1].EndPos; klineTimeInfo_Day.StartPos = dayStartPos; klineTimeInfo_Day.EndPos = dayEndPos; return(klineTimeInfo_Day); }
/// <summary> /// 得到当前BarPos所在的交易周期 /// </summary> public double[] GetTradingPeriods() { ITradingTime tradingTime = GetTradingTime(); return(tradingTime.GetPeriodTime(currentTradingPeriods.PeriodIndex)); }