Commodities | 10:30 AM
A glance through the latest expert views and predictions about commodities. Iron ore, coal, gold and nickel.
-Brokers remain upbeat on the iron ore sector
-Rising steel demand augurs well for metallurgical coal
-Gold equities lagging gold price strength
-Stainless steel trajectory largely what matters for nickel
By Eva Brocklehurst
Iron Ore
In tracking physical ship loadings from most of the Brazilian iron ore miners, UBS notes shipments fell -6% last week. However, Brazilian iron ore shipments have sequentially increased since the first quarter which explains an uptick in Chinese port inventory.
Iron ore inventory at Chinese ports rose to 120mt in July, the highest level since March, although that’s -5mt lower year-on-year. Port congestion issues appear to be easing.
The run-rate of shipments from Vale is still below production guidance according to estimates and, as management did not revise guidance down during its investor briefing, UBS suspects Vale could be building inventory in Brazil.
The broker has data that reveals a higher proportion of non-traditional imports to China, up 36% in the year to date compared with traditional markets of Australia, Brazil and South Africa which are up 8%. Most of the incremental volumes come from India, Ukraine and Russia, although this flow is expected to moderate as steel production recovers in India and the EU.
UBS retains a base case for iron ore prices of US$105/t in the second half of 2020 and US$85/t in 2021. A preference for Vale over Rio Tinto ((RIO)) is maintained. In Australia, the broker’s tracking of daily iron ore shipments shows these are back to weekly highs.
Despite weakening steel margins, Macquarie is positive on the iron ore sector, noting the major miners in Australia are operating close to capacity. The broker is confident iron ore prices will hold above US$100/t for the next year and notes iron ore miners are generating strong free cash flow at current prices.
At spot prices, the broker calculates free cash flow yields in FY21 are 12% for BHP Group ((BHP)), 14% for Rio Tinto, 19% for Fortescue Metals ((FMG)), 8% for Mineral Resources ((MIN)) and 12% for Champion Iron ((CIA)).
Credit Suisse also expects iron ore prices will sustain another year above US$100/t as steel demand in China has again surged. China’s dominance of global steel production has increased further with 2020 output now expected to be 58% of global output.
Ultimately, a decline in the iron ore price will occur. The broker’s case is for steel demand to remain broadly static in 2021 and decline at an accelerating pace in 2022 which implies surpluses for iron ore.
Credit Suisse prefers BHP to Rio as it not only provides upside to iron ore but has a more attractive diversified portfolio. Copper, at $3/lb and strengthening metallurgical (coking) coal prices provide additional support.
The broker has a Neutral rating on Rio as the valuation gap that opened to BHP post the Juukan Gorge incident is likely to continue to overshadow the new leadership team. There is also subsiding momentum for iron ore.
Coal
Credit Suisse expects seaborne metallurgical coal prices will undergo a sustained recovery from recent lows as blast furnaces are re-started outside of China after the lockdowns.
The current rise in prices appears to have been driven by bidding in anticipation of import restrictions in China lifting in 2021, although the broker acknowledges there are risks in attempting to predict government policies.
Beyond China, Credit Suisse is encouraged by the rise in steel demand in India, Japan, Europe and Brazil, and believes metallurgical coal has passed its nadir. The broker expects a gradual increase in prices away from the 2020 lows towards a long-term incentive price that does not impinge on the cost curve.
Moreover, there is no sign of the Australia/China dispute affecting coking coal. There are few alternatives of similar quality and there is possibly a greater need for premium coal given the big lift in blast furnace steel production.
Meanwhile, thermal coal prices are also recovering from their lows because of improving demand for power as well as rising spot LNG factors. The broker suspects the push against energy coal because of climate concerns is gaining traction, with potential to limit price upside.
Going forward Credit Suisse envisages demand will grow but at a slower rate after 2021 as the larger usage of thermal coal in the developing nations of Southeast Asia is offset by a slowdown in developed countries.
Gold
Gold equities peaked in July and have pulled back -15-25%, JPMorgan observes, despite gold prices being steady. Only Saracen Mineral Resources ((SAR)) and Evolution Mining ((EVN)) have materially outperformed the Australian dollar gold price. Hence, generally valuations are less stretched and the broker considers this is an attractive entry point for some names.
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 = '
'+ ' '; 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();
});
Recent Comments