New Earnings Calendar

Dear All,

The new earnings calendar is now live powered by Benzinga + FactSet data. We only use Benzinga for the date/time of the announcement. It’s well integrated with accounts, watchlists, and screens so you don’t have to waste time looking for the stocks that matter to you.

Benzinga gave us like 8-10 years of historical data, but it is not yet used in the simulation engines. Having the time when the announcement was made (like AM vs PM) is the key to implement functions like post-announcement performance.

Let us know how else we can leverage this data.

If these are new fields we can put into screen reports, is there a list of the field names? I do like watching for upcoming earnings dates.

For studies, one obvious use is for pre and post earnings drift based on reported outcomes. This last quarter seemed pretty bad wrt companies beating earnings by much and raising guidance, but share price not responding.

edit: sorry if this has already been discussed, I’m just having trouble locating the data.

edit2: I think I found it >>> https://www.portfolio123.com/app/earnings

Access is via the dashboard. But I guess we need it in the popup menu as well, like in Data->Tools or Data->Misc. We’ll add it shortly

Thanks

It’s under “Manage” / “Quick Links”

Marco, the earnings calendar is really nice. I re-setup my watchlists to correspond to current holdings / screens to monitor via this earnings calendar – both systematic and non-systematic holdings. Love how it shows the entire week at one glance, and then will zoom in to particular days if you click on them. Notice of am/pm release is also very useful, as well as monitoring/updating results after-the-fact. Really good stuff! The ability to restrict it to specific or all watchlists and/or specific screens provides excellent flexibility.

Thanks for the feedback

This is a great feature!! (though I’m afraid it’s going to tickle my reptilian brain gambling tendencies)

Well the goal is to tickle the left brain for how we can use of this data to get a statistical edge. P123 strength/advantage is that we have a variety of factors that can be combined and backtested to calculate a win ratio. The combining of diverse factors is a central tenet of why a market beating strategy is possible.

So, are there any NEW factors , based on announcement dates/time , you would like to combine with other factors/ranks ? For example… factors like historical average post earnings announcement drift/volatility for 1 day & 1 week .

And once you have a strategy with good win/loss ratio , you can head over to the options casino and play earnings announcements.

Thanks

PS. we could not come up with these factors until now bc we lacked the time when an announcement was made.

Hi Marco,

Nice addition!!!

Is this ‘options casino’ in Monte Carlo by any chance?

This is not a feature request (it is easy enough to do in Python). And please understand that I have not been sitting in on your planning sessions regarding any ideas on your AI/Statistics rollout. Sounds like you are already thinking along these lines.

But a Monte Carlo simulator does not take a lot of code. A trivial (but frequent) use would be to enter the results of a sim and see the range of possibilities going forward five years (see below for one of my sims).

A serious use would be to replace the backtested mean of the logarithmic weekly returns (.010427222 in this example) with 0 and run it 100 times to see how many times one gets the sim’s results (or better) by chance alone. Answering the question: are the sim results a statical fluke or might there be something there.

There is a HUGE survivorship bias in our sims and ports. We only remember (save) the ones that look good. This would remind us that our present sims/ports are a combination of great ideas and luck—and how great a role luck can play.

If this makes no business sense please ignore this post.

Wishing you the best on this,

Jim

Any individual members wanting to implement this can play with the code below:

import math
import numpy as np
from random import seed
from random import random
from matplotlib import pyplot
seed(1)
random_walk = list()
random_walk.append(100)
x=list()
for i in range(1,260):
movement = np.random.normal(.010427222, 0.042868345 )
x.append(math.exp(movement))
value = random_walk[i-1] * math.exp(movement)
random_walk.append(value)
pyplot.plot(random_walk)
pyplot.show()
y=stats.gmean(x)**52 - 1
y
print(random_walk[-1]/100)
print(y)

Marco, I’m just thinking out loud, but I wonder if historical price behavior heading into earnings - sortof a “pre-earnings drift” at maybe 1wk or 1mo might be a useful tip - with the assumption that there’s information and sentiment leaking prior to official announcement.

Predicting earnings beats is probably a more achievable goal for machine learning on factor based datasets than predicting price movements

Jones, sure pre-earnings drift factors would also be in there.

Jrinne, agree about the bias, but I’m not a huge fan of monte-carlo sims used with returns to predict/infer anything. Markets are random short term, but long term they move in trends. And trends last a long time, with reasons (macro , fundamentals) behind the trends (or change in trends). From what I understand , and what examples I’ve seen of monte carlo sims, I just don’t see the value for applying to long term returns. Maybe it just adds more noise?

Re. AI … We’re done with the planning/research and will start coding it soon. Using ML/AI it to estimate post earnings drift , and post earnings short term return, should be a very interesting application.

Marco, again - just thinking out loud - but one thought about event driven signals - something like a pre-earnings drift for example - is that they might relevant for only a very short window unless several ranges of windows are available. For example, a 1 wk pre-earnings drift might only effective for a single day (the day before earnings) and perhaps unactionable unless there is a more flexible way to generate the calculation. maybe something like: for stocks reporting earnings within the next 5 or 10 trading days, what has their price action been over the past n trading days (n= 5,10,20, etc).

Maybe a function like:

predrift(x,y,z)

where x and y determine the window for including earnings dates:
where x = lower bound on # of trading days until expected earnings release. Minimum here would be 0.
where y = upper bound on # of trading days until expected earnings release date, up to some maximum like maybe 20? This would help produce a binary “yes” flag for any company expected to report earnings in the next y days. No results, or NA maybe, for any company not reporting in the within the window.

so predrift(0,20,z) would flag any company reporting anywhere from 0 to 20 days in the future.
predrift(5,20,z) would flag any company reporting anywhere from 5 to 20 days in the future.

General idea of the 2 parameters x,y is to segment how far into the future earnings are expected to be able to tune and test for where any possible preearnings drift might exist.

The last parameter z = price change over the past z days. Could use 5 to get 5 day price action, or 20 to get 4 wk price action. If desired the user could compare this price change to to overall market or industry over similar time periods.

This formulation could accomodate recent and immediate earnings drifts, like predrift(0,2,5) could limit calc to only companies reporting in the next 2 days, and look at only the past 5 days of price action. Or could also be used for longer term windows - like predrift (0,10, 20) could give the 20d preearnings price drift for every company reporting in the next 10 days.

If we wanted to exclude possibly non-actionable companies reporting tomorrow then predrift(1,10,20) might be a parameter option. It also allows for possibility that the most important predrift signal might occur weeks before the earnings announcement like predrift(10,20,10).

Anyhow, just thinking out loud on this - but yeah - price action around earnings is definitely interesting to me.

I trade both some of the systems I’ve developed but also discretionary. THe discretionary trades I tend to take often are after a big gap up on huge volume tied to an earnings release. This has not been easy to backtest. I did build out one using another system with dates I acquired and found that if you played these and could tie in stocks that had a sales and/or EPS beat it was a profitable strategy. I would love to be able to backtest and have some system variables so I could:

  • in testing decide if it should skip stocks with earnings. there is a system called trademachine and it’s no where near as powerful as P123 but it has this feature and it’s great. you just have a toggle whether to only trade earnings, ignore earnings, or skip stocks with earnings that fall into the backtest period.
  • in addition, would love to be able to test for instance systems that gap big on earnings with big volume and also have a sales and/or eps beat of a certain %/amount

Backtesting using earnings dates currently isn’t terribly difficult. The secret is to use BarsSince(LatestNewsDate).

So, for example, a ranking node that measures post-earnings-announcement drift might be written as follows:

Eval (BarsSince(LatestNewsDate) < 6, NA, 100 * (Close (BarsSince(LatestNewsDate) - 5) / Close (BarsSince(LatestNewsDate) + 1) - Close (BarsSince(LatestNewsDate) - 5, #Sector) / Close (BarsSince(LatestNewsDate) + 1, #Sector)))

Translated into English, this node first says that if the stock has reported earnings in the last six days, it gets NA. Otherwise, you measure the return from the day before the earnings announcement to five days afterwards, and subtract the return of the stock’s sector over the same period (one could also use, say, $RUI instead of #Sector in the above formula). If you wanted to get pre-earnings-announcement numbers, you could divide Close (BarsSince(LatestNewsDate) + 1) by Close (BarsSince(LatestNewsDate) + 4), for example. If you wanted to exclude stocks with recent earnings announcements, you could simply use the rule

BarsSince(LatestNewsDate) > 10

(or another number).

Marco,

Cool. I agree it might not be that useful. And is not useful for predictions.

I mainly use Monte Carlo simulations to keep myself humble (and somewhat diversified). To remind myself that the market doesn’t need a discernible reason to behave unexpectedly over the short to medium term. Definitely not a priority for me.

Thanks for the feedback.

Jim

Hi all, I’m just bumping this thread as reminder for the earnings calendar that p123 put together a couple months back. Looks like earnings season gets rolling next week and this calendar is a great place to track upcoming announcements in stocks, and it updates with actual results vs. expectations. I think this is a super feature to help follow what’s going on with our companies.

Via the menu the earnings calendar is under the “Manage - Earnings Center” menu dropdown, or direct link here:
https://www.portfolio123.com/app/earnings

Yes. Very nice. Finds the tickers in my account automatically. No announcements I have to worry (or be excited) about for me this week. --Jim

I watch for upcoming announcements for the stocks I own. The Earnings Center lets you pick the Account(s) at the top, but there is also an easy way to see the stocks in your research portfolios which some users may not be aware of. Steps to do this are: Create a screen with the rule Portfolio(xxxxxxx,xxxxxxx) where the x’s are the portids for your live research portfolios. The portid is shown in the URL in the browser when you have the portfolio open. Choose the Screen at the top of the Earnings Center page.

Dan, thanks for the tip