public static TimeFrameUnit MoreGranular(this TimeFrameUnit unit) { switch (unit) { case TimeFrameUnit.Unspecified: return(TimeFrameUnit.Unspecified); case TimeFrameUnit.Tick: return(TimeFrameUnit.Unspecified); case TimeFrameUnit.Second: return(TimeFrameUnit.Tick); case TimeFrameUnit.Minute: return(TimeFrameUnit.Second); case TimeFrameUnit.Hour: return(TimeFrameUnit.Minute); case TimeFrameUnit.Day: return(TimeFrameUnit.Hour); case TimeFrameUnit.Week: return(TimeFrameUnit.Day); case TimeFrameUnit.Month: return(TimeFrameUnit.Week); case TimeFrameUnit.Year: return(TimeFrameUnit.Month); default: throw new ArgumentOutOfRangeException(); } }
public static string ToLetterCode(this TimeFrameUnit unit) { switch (unit) { //case TimeFrameUnit.Unspecified: // break; case TimeFrameUnit.Tick: return("t"); case TimeFrameUnit.Second: return("s"); case TimeFrameUnit.Minute: return("m"); case TimeFrameUnit.Hour: return("h"); case TimeFrameUnit.Day: return("d"); case TimeFrameUnit.Week: return("w"); case TimeFrameUnit.Month: return("M"); case TimeFrameUnit.Year: return("y"); default: throw new ArgumentOutOfRangeException(); } }
// FUTURE: Get factors of a timeframe public TimeFrame MoreGranular(bool factorOfTwo = true) { var val = TimeFrameValue - 1; for (TimeFrameUnit unit = TimeFrameUnit; unit != TimeFrameUnit.Unspecified; unit = unit.MoreGranular()) { for (; val >= 1;) { var tf = TimeFrame.TryGet(unit, val); if (tf != null) { return(tf); } if (factorOfTwo) { val /= 2; } else { val--; } } val = Math.Max(1, val); } return(null); }
protected override ITradeStatisticsWithKind InternalExecute(ISecurity security) { var timeFrame = TimeFrameFactory.Create(TimeFrame, TimeFrameUnit); int topTimeFrameNumber; TimeFrameUnit topTimeFrameUnit; TimeSpan topTimeFrame; if (UseTopTimeFrame) { topTimeFrameNumber = TopTimeFrame; topTimeFrameUnit = TopTimeFrameUnit; topTimeFrame = TimeFrameFactory.Create(topTimeFrameNumber, topTimeFrameUnit); if (topTimeFrame.Ticks % timeFrame.Ticks != 0) { throw new InvalidOperationException(string.Format(RM.GetString("TopTimeFrameMustBeDivisableByTimeFrame"), ToString(TopTimeFrame, topTimeFrameUnit), ToString(TimeFrame, TimeFrameUnit))); } } else { var maxTimeSpan = TimeSpan.FromSeconds(int.MaxValue); switch (TimeFrameUnit) { case TimeFrameUnit.Second: topTimeFrameNumber = (int)maxTimeSpan.TotalSeconds; break; case TimeFrameUnit.Minute: topTimeFrameNumber = (int)maxTimeSpan.TotalMinutes; break; case TimeFrameUnit.Hour: topTimeFrameNumber = (int)maxTimeSpan.TotalHours; break; case TimeFrameUnit.Day: topTimeFrameNumber = (int)maxTimeSpan.TotalDays; break; default: throw new InvalidEnumArgumentException(nameof(TimeFrameUnit), (int)TimeFrameUnit, TimeFrameUnit.GetType()); } topTimeFrameNumber = topTimeFrameNumber / TimeFrame * TimeFrame; topTimeFrameUnit = TimeFrameUnit; topTimeFrame = TimeFrameFactory.Create(topTimeFrameNumber, topTimeFrameUnit); } var runTime = Context.Runtime; var id = runTime != null?string.Join(".", runTime.TradeName, runTime.IsAgentMode, VariableId) : VariableId; var stateId = string.Join(".", security.Symbol, security.Interval, security.IsAligned, CombinePricesCount, TimeFrameKind, TimeFrame, TimeFrameUnit, topTimeFrameNumber, topTimeFrameUnit); var tradeStatistics = Context.GetTradeStatistics(stateId, () => new TradeStatistics(id, stateId, GetTradeHistogramsCache(security), TimeFrameKind, timeFrame, TimeFrameUnit, topTimeFrame)); return(new TradeStatisticsWithKind(tradeStatistics, Kind, WidthPercent)); }
private static string ToString(int timeFrame, TimeFrameUnit timeFrameUnit) { return(timeFrame + ":" + timeFrameUnit.GetDescription()); }
public static TimeFrame TryGet(TimeFrameUnit unit, int val) { return(TryParse(unit.ToLetterCode() + val.ToString())); }