[ad_1]
Commodities | 10:00 AM
A glance through the latest expert views and predictions about commodities: base metals; coal; iron ore; zircon; oil & gas
-High demand, subdued supply underpinning momentum in base metals
-Coking coal prices surge in China, reduced traffic on Chinese/Mongolian border
-Pick-up in infrastructure activity in December quarter may arrest iron ore price decline
-Tight supply of zircon sends prices sharply higher
-Substantial incentive for shale gas suppliers to ramp up production
By Eva Brocklehurst
Base Metals
Momentum keeps on keeping on in the electric vehicle market, benefiting nickel. Macquarie notes, while non-nickel/cobalt batteries are gaining share in China, they are still only a quarter of the global market. Orders for batteries with higher nickel content are still strong, boosting nickel usage.
Meanwhile, lower zinc production and higher copper output in Peru was recorded in July, and in Chile copper production was down -3%, primarily because of lower output from Chuquicamata.
Macquarie prefers OZ Minerals ((OZL)), 29 Metals ((29M)) and Sandfire Resources ((SFR)) for copper with Chalice Mining ((CHN)) the preferred stock in exploration. 29 Metals has a strong production trajectory and provides unique exposure to zinc within the broker’s coverage. Sunrise Energy Metals ((SRL)) offers exposure to Macquarie’s long-term bull case for cobalt.
The coup in Guinea has put China’s aluminium raw material supplies at risk, Longview Economics notes, with aluminium prices breaching another multi-year high. Guinea supplies over 50% of Chinese bauxite requirements.
The analysts also note the microchip shortage shows little sign of easing and the order backlog from Renesas, the Japanese supplier where the plant was set on fire in March, is now four times greater than it was before the pandemic.
Coal
Coking (metallurgical) coal prices have reached new highs in China’s domestic market, equivalent to US$497/t, while Macquarie notes Australia’s F.O.B. index has reported prices at A$279/t. This indicates an arbitrage opportunity, in the broker’s view, or at the very least provides support for Australian coal miners.
Macquarie cites a Reuters report that China’s NDRC has recently banned a coal trading firm from publishing price assessments in an effort to manage hefty pricing.
The broker notes, too, the the Chinese/Mongolian border has been closed again after one week of operation. Macquarie’s commodities team estimates daily crossings could be constrained at 180-200 trucks per day after the reopening, which compares with 800-1000 pre-pandemic.
Iron Ore
After a strong first half, Chinese steel production has slowed significantly through July and August. JPMorgan suspects the drop is related to general economic weakness that has been influenced by tightening controls on pollution and relatively low steel mill profitability.
Weakness through the September quarter leads the broker to reduce 2021 steel production growth estimates to 4.0% from 6.5% and demand growth to 0.8% from 2.8%.
After hovering around US$220/t in June and July JPMorgan notes iron ore has corrected to US$120/t. This is on the back of a significant change in sentiment combined with lower Chinese steel output and has led to a cut in its forecasts for 2021 and 2022 to US$165/t and US$125/t, respectively.
As a result, JPMorgan lowers earnings estimates by -10-35% for BHP Group ((BHP)), Rio Tinto ((RIO)), Fortescue Metals ((FMG)) and Mineral Resources ((MIN)), downgrading the latter to Neutral on wider iron grade spreads and lower free cash flow.
The broker assesses the other three are generating impressive cash flow at current prices, supporting capital management potential. JPMorgan acknowledges, on the upside, China could address weak GDP growth through increased infrastructure expenditure, which may provide a positive fillip for iron ore prices.
Exports from Australia are down -4% over the year to August while Brazil’s exports are up 3%, highlighting a lack of growth in supply from the major miners despite the strong price.
JPMorgan also points out Vale has maintained 2021 guidance although lowered 2022 capacity targets to 370mt from 400mt. Negative sentiment is likely to continue over the short term while a pick-up in the fourth quarter in infrastructure activity may help arrest the decline in prices.
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();
});
[ad_2]
Source link