LS Focus On The Week Ahead
Key Events

Last week’s barrage of major central bank announcements will be followed by several more key policy decisions in the days ahead, though the spotlight is likely to shift to economic data.

Following last week's FOMC monetary policy meeting, we'll hear from a range of Fed speakers from across the hawk/dove spectrum.

With the ongoing US government shutdown limiting official releases, analysts said private-sector reports such as the ISM indices and the ADP employment survey will attract heightened attention.

BMO Capital Markets noted that Canada is on the brink of a significant fiscal shift, with markets focused on the 4 November federal budget.

In Asia, mainland China’s next batch of economic data is due over the weekend, including trade and inflation figures.

Meanwhile, after Europe adjusted its clocks last week, North America moved off daylight saving time over the weekend.

All Times Are GMT

Monday 3 November

Speakers: ECB's Simkus, Lane, Escriva, Kocher | Fed's Daly, Cook

Tuesday 4 November

03:30 - RBA Nov Interest Rate Decision
Consensus: On Hold (prev 3.60%)

Analysts at the Commonwealth Bank of Australia said it would take a significant rise in the unemployment rate and a series of softer inflation readings to prompt the RBA to consider rate cuts. “We expect the RBA Monetary Policy Board to leave the cash rate on hold at 3.60% in a unanimous decision,” they wrote. “The material upside surprise in Q3 trimmed mean CPI, and its broad-based nature, mean we now expect the RBA to stay on hold at 3.60% for an extended period.” The bank added that it now sees policymakers turning more hawkish to prevent a resurgence in inflation pressures.

15:00 - JOLTS Oct Job Openings (000s)
Consensus: 7178k (prev 7227k)

Deutsche Bank noted that regarding the US labour market, state-level data on jobless claims has shown limited national-level deterioration in conditions in recent weeks. However, the Frankfurt-based lender said the latest readings from ADP, JOLTS, and survey measures such as the Conference Board’s labour market differential continued to point to a gradual softening. “This will allow Powell to reiterate that downside risks to the labour market have risen – the reason for undertaking another 25bp cut at the meeting.”

US 15:00 ISM Oct Manufacturing Index
Consensus: 49.5 (prev 49.1)

SocGen pointed out that sentiment in the US manufacturing sector has been on a downward path ever since the fading of the COVID-driven demand boom which began roughly in 2022, and has been depressed, i.e. below the 50 boom-bust line, since the start of 2023. “That said, while remaining below 50, sentiment was an improving trend until January 2023,” highlighted analysts. “Yet, the beginning of Donald Trump’s second presidency in January 2025, and his second trade war, put an end to that recovery, and the manufacturing ISM index dropped to a 48-49 range. Having reached the upper end of this range in October, we expect a deterioration in October.”

Speakers: RBA's Bullock | ECB's Lagarde, Patsalides, Escriva, Nagel

Wednesday 5 November

07:00 – Germany Sep Industrial Orders
Consensus: M/M 0.9% (prev -0.8%)

SocGen said it expected a 0.7% m/m increase in factory orders, rebounding from a 0.8% drop in August, a number significantly worse when excluding large orders. Experts estimated that much of this is likely to have been due to seasonal factors. Survey data for new orders were, however, still weak in September, suggesting some downside risk to factory orders, but reassuringly strengthened again in October. “There have been many headlines over job layoffs in the car sector and supply disruptions, of rare earth products and chips, are also looming over the industry, suggesting that negative news may continue to come," noted the bank.

08:30 - Riksbank Nov Interest Rate Decision
Consensus: On Hold (prev 1.75%)

Danske Bank said the Riksbank’s September meeting was one of the more eventful policy gatherings of the year. “Basically, the whole year has been interesting in terms of the Riksbank’s policy rate and communication, but the upcoming 5 November decision is much less so, in our view,” analysts wrote. “We expect the Riksbank to keep the policy rate unchanged at 1.75%, fully in line with market expectations and the central bank’s guidance. As the meeting is also a smaller one without updated forecasts, there are few reasons to expect any shift from the Riksbank.”

13:15 - ADP Oct Employment Report (000s)
Consensus: 30k (prev -32k)

Ryan Sweet of Oxford Economics posited that alternative labour market data had been encouraging. “Private employment increased by an average of 14,250 jobs per week over the past four weeks, according to new preliminary data from ADP. This would imply that private-employment growth edged higher after falling recently. This is a tentative sign. Therefore, we don’t want to extrapolate a lot from it, but it supports our view that the fading negative impulse from the tightening in financial market conditions and surge in policy uncertainty in April is fading.”

15:00 – US ISM Oct Services Index
Consensus: 50.8 (prev 50.0)

BMO’s Priscilla Thiagamoorthy said ISM Services PMI is expected to climb in September after teetering at the brink of the expansion zone in the prior month. “New orders likely picked up, while business activity is expected to claw its way back above the 50-mark. However, the employment sub-component will likely stay below the 50-mark for a fifth straight month as the job market softens,” posited the economist. “Meanwhile, the prices index is expected to hover near the highest level since late 2022. This is a tough scenario for the Fed, with elevated risks to both sides of its dual mandate.”

Speakers: ECB's Villeroy, Nagel, Kocher | BoE's Breeden

Thursday 6 November

09:00 – Norges Bank Nov Interest Rate Decision
Consensus: On Hold (prev 4.00%)

Danske Bank expects Norges Bank to leave its policy rate unchanged at 4.00% at next week’s monetary policy meeting and to signal that rates will likely remain steady at the December meeting as well. The upcoming meeting is an interim one, with no new forecasts and only a press release and press conference scheduled. Since September, the outlook for inflation and employment has evolved largely in line with expectations. However, core inflation in September was 0.2 percentage points lower than forecast, while the unemployment rate came in 0.1 percentage points higher. “All in all, we expect Norges Bank to reiterate its September guidance, though if anything, the risks are tilted to the downside,” the bank wrote.

12:00 – BoE Nov Interest Rate Decision
Consensus: On Hold (prev 4.00%)

HSBC said the Bank of England’s policy meeting looks considerably more interesting than it did just a few weeks ago. Against a backdrop of softer inflation, rising unemployment, and slowing wage growth, markets are now pricing roughly a one-in-three chance of a 25bp rate cut, the bank noted. “Our base case is for a hold, with three votes for a cut,” analysts wrote. “There are four possible doves — Dhingra, Taylor, Ramsden, and Breeden — alongside four clear hawks — Mann, Greene, Pill, and Lombardelli — meaning the decision could ultimately rest with the governor.” HSBC added that even if rates are left unchanged, attention will turn to whether the committee hints at a possible cut in December, following the Autumn Budget. “Any shift in the language around inflation persistence risks will be closely scrutinised,” the bank said.

Speakers: ECB's Kocher, Schnabel, de Guindos, Nagel | Fed's Williams, Barr, Hammack, Musalem, Paulson

Friday 7 November

13:30 – Canada Oct Labour Survey
Consensus: Employment -2.5k (prev60.4k)

“Employment data has been volatile, to say the least, lately, with two sharp declines in July and August, followed by a solid gain in September,” observed National Bank of Canada’s Jocelyn Paquet. “However, despite these short-term fluctuations, the job market appears to have deteriorated recently, as evidenced by the rise in the unemployment rate. This trend could well continue in October. We expect employment to decline by 20K during the month, which should result in the unemployment rate increasing by one-tenth to 7.2%, assuming the participation rate remains unchanged at 65.2%.”

Speakers: ECB's Nagel, Elderson | BoE's Pill | Fed's Jefferson, Miran

All Times GMT
/*jshint esversion: 6 */ var socket; var assigned_server = 3001; var distributor_server = 3010; var publisher_channel = ''; var broadcaster_channel = ''; var remote_ip = ''; var session_info = {}; var logging_interval; var logging_interval_time = 120000; var socket_emits = 0; var session_start_time; var reconnectionDelayGrowFactor = 1.2; var reconnection_delay = 1000; var playing = false; var connected_to_assigned = false; var socket_close_timeout; var player_disconnected_annoucement_play_delay = 1500; var player_disconnected_annoucement_play_timeout = null; self.onmessage = function (msg) { switch(msg.data.action) { case 'Reactivate': reactivate(); break; case 'ConnectDistributor': connect_to_distributor(msg); break; case 'SessionStaticInfo': session_static_info(msg); break; case 'SessionInfo': update_session_info(msg.data); break; case 'PauseLogging': clearTimeout(logging_interval); break; case 'RestartLogging': postMessage({action: 'RequestSessionStaticInfo' }); break; case 'JoinPublisherChannel': join_publisher_channel(msg.data); break; case 'JoinPlayerChannel': join_player_channel(msg.data); break; case 'CheckChannelStatus': check_channel_status(msg.data); break; case 'PlayerLogResponse': player_log_response(msg.data); break; case 'CloseSocket': close_socket(); break; case 'RequestMessageSearch': request_message_search(msg.data); break; case 'RequestMoreMessages': request_more_messages(msg.data); break; case 'PlayerDisconnectedAnnoucementTimeoutStart': player_disconnected_annoucement_timeout_start(); break; case 'PlayerDisconnectedAnnoucementTimeoutClear': player_disconnected_annoucement_timeout_clear(); break; } }; function player_disconnected_annoucement_timeout_clear() { clearTimeout(player_disconnected_annoucement_play_timeout); player_disconnected_annoucement_play_timeout = null; } function player_disconnected_annoucement_timeout_start() { player_disconnected_annoucement_play_timeout = setTimeout(function() { send_play_disconnect_annoucement(); }, player_disconnected_annoucement_play_delay ); } function send_play_disconnect_annoucement() { postMessage({action: "PlayDisconnectAnnoucement"}); } function reactivate() { playing = false; connect_to_assigned_server(); } function player_log_response(data) { var data_array = {}; data_array.type = 'PlayerLogResponse'; data_array.respond_to_socket_final = data.respond_to_socket_final; data_array.respond_to_socket = data.respond_to_socket; data_array.player_socket_id = data.player_socket_id; data_array.logs = data.logs; var msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } function request_message_search(data) { var data_array = {}; data_array.type = 'request_message_search'; data_array.publisher_channel = data.publisher_channel; data_array.search_term = data.search_term; var msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } function request_more_messages(data) { var data_array = {}; data_array.type = 'request_more_messages'; data_array.publisher_channel = data.publisher_channel; data_array.last_record_id = data.last_record_id; var msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } function check_channel_status(data) { var data_array = {}; data_array.type = 'check_channel_status'; data_array.app_name = data.app_name; var msg_string = JSON.stringify(data_array); if (socket.readyState == 1 && connected_to_assigned) { socket.send(msg_string); } else { setTimeout(function() { check_channel_status(data); },500); } } function check_channel_status_response(data) { postMessage({ action: 'CheckChannelStatusReponse', stream_status: data.stream_status.status, onair: data.stream_status.onair, connected: data.stream_status.connected }); } function join_publisher_channel(data) { var data_array = {}; data_array.type = 'join_publisher_channel'; if (typeof data.api_key !== 'undefined') { data_array.api_key = data.api_key; } else { data_array.publisher_channel = data.publisher_channel; data_array.username = data.username; data_array.subscriber_group = data.subscriber_group; data_array.display_name = data.display_name; data_array.single_sign_on = data.single_sign_on; data_array.remote_ip = data.remote_ip; data_array.http_referrer = data.http_referrer; data_array.current_page = data.current_page; data_array.php_session_id = data.php_session_id; data_array.from_react = data.from_react; } var msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } postMessage({action: 'PublisherChannelJoined' }); } function session_static_info(msg) { set_static_session_info(msg.data); start_log(); } function connect_to_distributor(msg) { publisher_channel = msg.data.publisher_channel; remote_ip = msg.data.remote_ip; socket = new WebSocket("wss://ws.livesquawk.com/ws"+distributor_server); socket.onopen = function(event) { request_server_assignment(); }; socket.onmessage = function(event) { var msg_string = event.data.toString(); var data = JSON.parse(msg_string); switch(data.type) { case 'server_assignment_response': server_assignment_response(data); break; } }; } function session_info_interval() { postMessage({action: 'RequestSessionInfo' }); logging_interval = setTimeout(session_info_interval,logging_interval_time); } function server_assignment_response(data) { assigned_server = data.selected_server; socket.close(); connect_to_assigned_server(); } function request_server_assignment() { var data_array = {}; data_array.type = 'request_server_assignment'; var msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } function connect_to_assigned_server() { socket = new WebSocket("wss://ws.livesquawk.com/ws"+assigned_server); socket.onopen = function(event) { postMessage({ action: 'VisibleConsole',console_string: "Connected to server "+assigned_server }); console.log("Connected to server "+assigned_server); postMessage({ action: 'ConnectedToAssigned' }); connected_to_assigned = true; if (playing) { postMessage({ action: 'RejoinPlayerChannel' }); } }; socket.onmessage = function(event) { var msg_string = event.data.toString(); var data = JSON.parse(msg_string); if (data.type != 'server_ping') { /* console.log(data.type); */ } switch(data.type) { case 'reconnect': postMessage({ action: 'VisibleConsole',console_string: "Reconnected" }); break; case 'reload': postMessage({ action: 'Reload' }); break; case 'start_log_response': start_log_response(data); break; case 'application_refresh_start': application_refresh_start(data); break; case 'application_refresh_stop': application_refresh_stop(data); break; case 'player_log_request': case 'check_channel_status_response': check_channel_status_response(data); break; case 'PlayerLogRequest': case 'new_tweet': case 'new_latest_news': case 'delete_report': case 'add_report': case 'add_ref_doc': case 'calendar_change': case 'calendar_insert': case 'calendar_delete': case 'new_note': case 'AppStart': case 'AppStop': case 'BroadcasterStarted': case 'BroadcasterStopped': case 'added_cme_report': case 'updated_cme_report': case 'added_cme_commentary': case 'updated_cme_commentary': case 'server_assignment_response': case 'initial_messages': case 'message_categories': case 'more_messages': case 'matched_messages': pass_straight_to_post_message(data); break; case 'output': case 'server_ping': case 'reconnect': case 'disconnect': break; } }; socket.onerror = function(event) { postMessage({ action: 'VisibleConsole',console_string: "LS Socket Error" + event.type }); console.log(event); postMessage({ action: 'LSSocketConnectionError' }); }; socket.onclose = function(event) { console.log('Socket is closed. Reconnect will be attempted in 1 second.', event.reason); socket_close_timeout = setTimeout(connect_to_assigned_server, reconnection_delay); reconnection_delay = reconnection_delay*reconnectionDelayGrowFactor; connected_to_assigned = false; }; } function close_socket() { clearTimeout(socket_close_timeout); socket_close_timeout = null; socket.onclose = function(event) {}; socket.onmessage = function(event) {}; socket.onerror = function(event) {}; socket.close(1000); console.log('Socket Closed'); } function pass_straight_to_post_message(data) { data.action = data.type; postMessage(data); } function join_player_channel(data) { var data_array = {}; data_array.type = 'join_player_channel'; data_array.player_channel = data.player_channel; data_array.remote_ip = data.remote_ip; data_array.username = data.username; data_array.app_name = data.app_name; data_array.onair_status = data.onair_status; data_array.http_referrer = data.http_referrer; data_array.current_page = data.current_page; data_array.php_session_id = data.php_session_id; var msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } postMessage({action: 'PlayerChannelJoined' }); playing = true; } function start_log_response(data) { session_info.session_id = data.log_record_id; session_info_interval(); } function application_refresh_start(data) { if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStart' }); } } function application_refresh_stop(data) { if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStop' }); } } function set_static_session_info(data) { session_info.browser_codename = data.browser_codename; session_info.browser_name = data.browser_name; session_info.user_agent = data.user_agent; session_info.browser_version = data.browser_version; session_info.cookies_enabled = data.cookies_enabled; session_info.platform = data.platform; session_info.player_version = data.player_version; session_info.stream = data.stream; session_info.connection_protocol = data.protocol; session_info.delay_target = data.delay_target; session_info.session_email = data.session_email; session_info.remote_ip = data.remote_ip; session_info.php_session_id = data.php_session_id; session_info.application_name = data.application_name; session_info.http_referrer = data.http_referrer; } function start_log() { var session_start_date = new Date(); session_start_time = session_start_date.getTime(); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var session_start_date_string = session_start_date.getDate() + " " + months[session_start_date.getMonth()] + " " + session_start_date.getFullYear(); var data_array = {}; data_array.type = 'webrtc_start_log'; data_array.remote_ip = session_info.remote_ip; data_array.username = session_info.session_email; data_array.php_session_id = session_info.php_session_id; data_array.webrtc_protocol = ''; data_array.session_start_time = (session_start_time/1000).toFixed(0); data_array.stream_name = session_info.stream; data_array.session_start_date = session_start_date_string; var msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } function update_session_info(data) { var data_array = {}; var msg_string = ''; var current_date = new Date(); var current_time = current_date.getTime(); session_info.protocol = data.protocol; session_info.curr_delay = (data.effective_latency / 1000).toFixed(2); session_info.session_length = current_time - session_start_time; session_info.ping_time = data.ping_time; session_info.jitter = data.jitter; session_info.packet_loss = data.packet_loss; session_info.effective_latency = data.effective_latency; session_info.mean_opinion_score = data.mean_opinion_score; session_info.restarts = data.restarts; if (socket_emits == 0) { data_array = {}; data_array.type = 'webrtc_log_data_full'; data_array.connection_protocol = session_info.protocol; data_array.threshold = 0; data_array.curr_delay = session_info.curr_delay; data_array.session_length = session_info.session_length; data_array.date = current_time; data_array.browser_codename = session_info.browser_codename; data_array.browser_name = session_info.browser_name; data_array.user_agent = session_info.user_agent; data_array.browser_version = session_info.browser_version; data_array.cookies_enabled = session_info.cookies_enabled; data_array.platform = session_info.platform; data_array.player_version = session_info.player_version; data_array.stream = session_info.stream; data_array.restarts = session_info.restarts; data_array.delay_target = 0; data_array.op_sys = ''; data_array.flash_version = ''; data_array.remote_ip = session_info.remote_ip; data_array.http_referrer = session_info.http_referrer; data_array.php_session_id = session_info.php_session_id; data_array.user_email = session_info.session_email; data_array.webrtc_protocol = session_info.protocol; data_array.ping_time = session_info.ping_time; data_array.jitter = session_info.jitter; data_array.packet_loss = session_info.packet_loss; data_array.effective_latency = session_info.effective_latency; data_array.mean_opinion_score = session_info.mean_opinion_score; data_array.session_id = session_info.session_id; msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } else { data_array = {}; data_array.type = 'webrtc_log_data'; data_array.session_id = session_info.session_id; data_array.php_session_id = session_info.php_session_id; data_array.connection_protocol = session_info.protocol; data_array.restarts = session_info.restarts; data_array.threshold = 0; data_array.curr_delay = session_info.curr_delay; data_array.session_length = session_info.session_length; data_array.date = current_time; data_array.webrtc_protocol = session_info.protocol; data_array.ping_time = session_info.ping_time; data_array.jitter = session_info.jitter; data_array.packet_loss = session_info.packet_loss; data_array.effective_latency = session_info.effective_latency; data_array.mean_opinion_score = session_info.mean_opinion_score; data_array.stream = session_info.stream; msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } socket_emits++; if (socket_emits == 100) { socket_emits = 0; } }