Working with fundamentals has a number of subtleties and, for me, is a never ending source of consternation.
I'm not sure specifically why you feel the TTM eps data on Q is different than other sources, but, here are a few things to consider...
Make certain one chooses the correct fields in the fundamental data and understand what other sources are using. Most other sources such as Yahoo and NASDAQ report the "diluted earnings per share". This corresponds with the fundamental field "Fundamentals.diluted_eps_earnings_reports".
Also, (and this is a big one) Quantopian goes to great lengths to ensure no forward looking bias in it's data. The data returned by pipeline is only the data which would have been known on the date the pipeline is run. This is generally pretty straight forward when accessing price and volume data, but fundamental data adds several levels of complexity. First, there is the issue that companies report fundamental data after the fact. The Securities & Exchange Commission (SEC) requires companies to file earnings reports no later than 45 days after the end of their first three quarters, and their quarterly and annual reports 90 days after their fiscal year (thank you Investopedia). What does that mean? Take AAPL for instance. It reported 12-31-2017 earnings on 2-2-2018. Moreover, Morningstar didn't enter it until the following business day 2-5-2018 so the soonest one would see it in pipeline is when run on 2-6-2018. When fetching the 'latest' eps on 2-5-2018 one would get the Q3 2017 results. The next day, 2-6-2018, one would get the Q4 results.
What makes this more frustrating is companies report their results on different days. For example TSLA reported earnings on 2-7-2018. Additionally, Morningstar doesn't always update their data in a timely manner (as of 2-18-2018 the latest eps for TSLA still was for Q3 2017). Now, add on top of this the reality that companies are often restating data. A company's Q4 results can change over time. Arghhhh.
What does this mean. Simply put, the following does NOT work to get the previous "Trailing Twelve Months" (TTM) of data.
TRADING_DAYS_IN_YEAR=252
qtr = TRADING_DAYS_IN_YEAR / 4
class TTM_DATA(CustomFactor):
window_length=TRADING_DAYS_IN_YEAR
def compute(self, today, asset_ids, out, data):
out[:] = eps[-1] + eps[-1*qtr] + eps[-2*qtr] + eps[-3*qtr]
Consider the the case of AAPL. If one runs this custom factor on 2-5-2018, the 2017 Q3 data would get added twice and the 2017 Q4 data wouldn't be available. Only when run on 2-6-2018 would it be correct. The most reliable way to get TTM data is to also check the "asof_date". @Doug Baldwin has a nice custom factor for this ( see https://www.quantopian.com/posts/trailing-twelve-months-ttm-with-as-of-date ).
Maybe also check these excellent posts
https://www.quantopian.com/posts/faster-fundamental-data
https://www.quantopian.com/posts/quantopian-partner-data-how-is-it-collected-processed-and-surfaced