Always an independent thinker, Rudi has not shied away from making big out-of-consensus predictions that proved accurate later on. When Rio Tinto shares surged above $120 he wrote investors should sell. In mid-2008 he warned investors not to hold on to equities in oil producers. In August 2008 I predicted the largest sell-off in commodity stocks was about to follow. In 2009 I suggested Australian banks were an excellent buy. Between 2011 and 2015 Rudi consistently maintained investors were better off avoiding exposure to commodities and to commodity stocks. Post GFC, I have dedicated his research to finding All-Weather Performers. See also “All-Weather Performers” on this website, as well as the Special Reports section.
Rudi’s View | Aug 04 2022
In this week’s Weekly Insights:
-The Non-Recession Recession
-August Preview: Curve Balls, Profits & Forecasts
-Conviction Calls
-Focus on Quality
-FN Arena Talks
By Rudi Filapek-Vandyck, Editor
The Non-Recession Recession
When is a recession not a recession?
I’ll leave the debate to the global community of economists, but needless to say the first two quarters of 2022 did not deliver the recession the US economy had to have, irrespective of the statistical outcomes for the period.
As to why US share markets simply shrugged and moved on, CIBC’s Avery Shenfeld provided the answer:
Rumors to the contrary, economists don’t define two consecutive negative quarters as a recession.
“One needs to see a material decline in a broader range of activity measures, and the key missing ingredient thus far has been in the labor market.
“There can be job-free recoveries for a while, but the very definition of a recession essentially rules out having one without job losses, let alone a recession with a hiring boom.”
When share market commentators, including myself, talk about recession coming, we’re referring to company earnings falling by -20%, or maybe by -10%. Could be zero growth, on average, or a tiny positive number.
We just don’t know yet which scenario is most likely. We might find out between now and February next year.
This year’s August reporting season is too early in the cycle to provide investors with all the answers needed.
August Preview: Curve Balls, Profits & Forecasts
If I were to put in my good-humoured attempt at an old fashioned Dad-joke, I’d start off with:
I am old enough to remember when corporate reporting season in Australia was all about profits, margins, dividends and forward-looking guidance.
It’s not as if reporting seasons in the past have never been closely intertwined with macro-geopolitical, -financial or -economic concerns, but ever since the early days of the pandemic in 2020, corporate results season in Australia has never been simply about corporate health and profits.
If it wasn’t about the virus, or societal lockdowns, the key drivers underneath share price trends have been the return of inflation followed by the normalization in global bond yields.
The power of all four has proven extremely dominant throughout the past five results seasons and ahead of August, investor consensus is for a global recession on the horizon (domestic Australia not included).
We don’t know yet about the exact timing or what will be the severity of the upcoming economic slump, but corporate results will definitely be assessed against the background of (much) tougher conditions ahead.
That is, unless central bankers declare the war on inflation is due for a pause and they stop their rigorous tightening, which adds yet another macro factor into the mix.
An end to the war in the Ukraine could be another macro catalyst, albeit an unlikely one.
****
At face value, the Australian share market looks like a bargain hunter’s paradise. The market’s average Price-Earnings (PE) ratio starts with 13x while the average dividend yield has risen to 5% on the back of sharply weaker share prices for large segments of the ASX.
The long-term average PE in Australia is 14.9x including a few years of very high valuations. Prior to those years of elevated multiples, the average PE stood at 14.5x; still a long while off from today’s multiple.
The problem with today’s average is that commodity producers are enjoying exceptionally favorable conditions, to which investors have responded with low valuation multiples (as they traditionally tend to do when confronted with peak-of-the-cycle earnings and cash flows).
BHP Group ((BHP)) shares, for example, with circa 11% the largest index weight in Australia, are trading on 7x next year’s forecast earnings per share. Shares in Rio Tinto ((RIO)) are on 7.3x. For Fortescue Metals ((FMG)) the comparable multiple is only 6.3x. The numbers look pretty similar for the large caps in the local energy sector.
Following the commodities resurgence post late-2020, mining and energy now represent the second largest group in the local index, after banks/financials.
Any experienced and astute investor knows such low PE multiples are not by default a signal of severe undervaluation; they are merely a sign that investors worry about the two years ahead. But having low PEs for such a large index constituent does depress the overall average, artificially creating the impression of a “cheaply” priced share market.
In the largest group, the banks are mostly trading on below-average multiples too; Once again showing the market is concerned about RBA rate hikes, their impact on local housing and the subsequent impact on spending and the local economy in general.
Excluding the two largest index sectors, the average PE in Australia quickly rises above 20x, which, by contrast, still doesn’t look that cheap at all.
****
The biggest problem investors are facing today is figuring out what is the correct valuation for companies that mostly have no track record in dealing with an economic recession. For multiple reasons, the brief recession of 2020 is hardly a reliable reference point.
Not making things any easier, the impact of sharply higher bond yields, tighter liquidity and high inflation on economies and companies individually has been gradual, if not slow-paced thus far this year, while supply chain bottlenecks seem to be easing and lockdowns outside China are now a thing of the past, but the pandemic is not.
Combine all of the above and August seems too early to reveal the full impact for every company on the ASX.
The full story is for FNArena subscribers only. To read the full story plus enjoy a free two-week trial to our service SIGN UP HERE
If you already had your free trial, why not join as a paying subscriber? CLICK HERE
var fn_do_fb_login; var fn_check_login_state; var fn_get_fb_login_button; var fn_remove_fb_loading_btn; var fn_status_change_callback;
jQuery(document).ready(function(e){
window.fbAsyncInit = function() { FB.init({ appId : '2003222569780759', // dev version: 500318794096450 cookie : true, // Enable cookies to allow the server to access the session. xfbml : true, // Parse social plugins on this webpage. version : 'v4.0' // Use this Graph API version for this call. });
//check if all fb elements done rendering //========== fn_get_fb_login_button();
FB.Event.subscribe('xfbml.render', function(response) { fn_remove_fb_loading_btn(); }); //==========
FB.getLoginStatus(function(response) { // Called after the JS SDK has been initialized.
var fb_r = response;
if (fb_r && fb_r.status === 'connected') {
get_detail_data(fb_r.authResponse.userID); // Returns the login status.
// logout function // FB.logout(function(response) { // console.log('do logout'); // }); } }); };
(function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "https://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));
//fb functionality //======================================================= fn_check_login_state = function check_login_state() { // Called when a person is finished with the Login Button.
//everytime event login triggered, reset the form fn_reset_form();
FB.getLoginStatus(function(response) {
var status_change_callback = fn_status_change_callback(response);
if (status_change_callback) {
FB.api('/me', function(response) {
console.log(response);
});
}
});
}
//new function to do fb login - since might need a separate function //between checking and login fn_do_fb_login = function do_fb_login() { // Called when a person is finished with the Login Button.
//everytime event login triggered, reset the form fn_reset_form();
FB.getLoginStatus(function(response) {
e('.form_loading').show();
var status_change_callback = fn_status_change_callback(response);
if (status_change_callback) {
FB.api('/me', function(response) {
console.log(response); set_detail_data_to_form_and_submit(response.id);
});
} else {
FB.login(function(fb_l_r) {
if (fb_l_r.authResponse && fb_l_r.status == 'connected') {
console.log(fb_l_r.authResponse.userID); set_detail_data_to_form_and_submit(fb_l_r.authResponse.userID);
} else { e('.form_loading').hide(); }
});
}
});
}
fn_status_change_callback = function status_change_callback(response) { // Called with the results from FB.getLoginStatus().
var check_status;
console.log('status_change_callback'); console.log(response); // The current login status of the person.
if (response.status === 'connected') { // Logged into your webpage and Facebook.
get_detail_data(response.id); check_status = true;
} else { // Not logged into your webpage or we are unable to tell.
console.log('facebook is not logged in'); check_status = false;
}
return check_status;
}
function get_detail_data(fb_id) {
FB.api( '/'+fb_id+'/', {fields: 'id,first_name,last_name,email'}, function (fb_r) {
var fb_data_json = JSON.stringify(fb_r);
if (fb_r && !fb_r.error) {
e('#fb_data').html(fb_data_json);
}
} );
}
//it's kinda silly, but since fb is an async, cannot use passing parameter on a function like jquery //so instead put it on FB.api function set_detail_data_to_form_and_submit(fb_id) {
e('.form_loading').show();
FB.api( '/'+fb_id+'/', {fields: 'id,first_name,last_name,email'}, function (fb_r) {
var fb_data_json = JSON.stringify(fb_r);
if (fb_r && !fb_r.error) {
var fb_id = fb_r.id; var fb_firstname = fb_r.first_name; var fb_lastname = fb_r.last_name; var fb_email = fb_r.email;
e('.sns_facebook').val(1); e('.sns_facebook_id').val(fb_id);
e('#fb_data').html(fb_data_json); do_submit_form();
//no form_loading hide - we gonna lock the form IF it's success
} else {
e('.form_loading').hide();
}
} );
}
fn_get_fb_login_button = function get_fb_login_button() {
var html="'+ ' '+ 'Login'+ ''+ ''; e('.fb_button_placeholder').html(html);
'+ ''+ '}
fn_remove_fb_loading_btn = function remove_fb_loading_btn() {
e('.fb_loading_btn').hide(); e('.fb_login_wrapper').show();
}
fn_reset_form = function reset_form() {
e('.sns_facebook').val(''); e('.sns_facebook_id').val(''); e('.form_loading').hide();
}
function do_submit_form() {
var the_form = e('.formLogin:visible');
if (the_form.length) {
var target_form = the_form[0]; target_form.submit();
} else {
console.log('form not exist');
}
} //=======================================================
//initialize fn_reset_form();
});