/// <summary> /// Generates the factor file row. /// </summary> /// <param name="ticker">The ticker.</param> /// <param name="sidContext">The sid context.</param> /// <param name="factorFile">The factor file.</param> /// <param name="tradeBar">The trade bar.</param> /// <param name="fineAvailableDates">The fine available dates.</param> /// <param name="fineFundamentalFolder">The fine fundamental folder.</param> /// <returns></returns> private static string GenerateFactorFileRow(string ticker, SecurityIdentifierContext sidContext, CorporateFactorProvider factorFile, TradeBar tradeBar, IEnumerable <DateTime> fineAvailableDates, DirectoryInfo fineFundamentalFolder) { var date = tradeBar.Time; var factorFileRow = factorFile?.GetScalingFactors(date); var dollarVolume = Math.Truncate(tradeBar.Close * tradeBar.Volume); var priceFactor = factorFileRow?.PriceFactor.Normalize() ?? 1m; var splitFactor = factorFileRow?.SplitFactor.Normalize() ?? 1m; bool hasFundamentalData = CheckFundamentalData(date, sidContext.MapFile, fineAvailableDates, fineFundamentalFolder); // sid,symbol,close,volume,dollar volume,has fundamental data,price factor,split factor var coarseFileLine = $"{sidContext.SID},{ticker.ToUpperInvariant()},{tradeBar.Close.Normalize()},{tradeBar.Volume.Normalize()},{Math.Truncate(dollarVolume)},{hasFundamentalData},{priceFactor},{splitFactor}"; return(coarseFileLine); }