It is a quieter week for top-tier data, though the Middle East conflict remains front and centre. Markets are expected to continue taking their cue from geopolitical headlines and political rhetoric.
Last week’s run of central bank decisions was still being digested by investors into Friday’s close. Attention now turns to a fresh wave of central bank commentary, with policymakers returning to the wires following the end of the press blackout period.
In Japan, minutes from the latest Bank of Japan meeting are due for release, alongside the first survey results from this year’s shunto wage negotiations—key for assessing the durability of domestic inflation dynamics.
Elsewhere, G7 foreign ministers are set to convene in France on Thursday and Friday, with discussions expected to focus on coordinating a response to the evolving geopolitical situation.
All Times Are GMT
Monday 23 March
23:30 - Japan Feb Core CPI Consensus: 1.7% (prev 2.0%)
Barclays said inflation is likely to be stronger for CPI excluding perishables and energy (“BoJ core”), reflecting easing food disinflation, while CPI excluding perishables alone (“core”) is expected to be weaker due to energy subsidies. The bank expects BoJ core to remain above 2% through May 2027, driven by rising mark-ups in sticky services and the pass-through of higher oil prices into non-energy goods and services.
Nomura said firm sentiment likely deteriorated markedly in March following the onset of the Iran conflict. “We expect weaker sentiment to have weighed on services firms’ activity, though manufacturing activity was likely hit more meaningfully. We look for notable declines in output and new orders in manufacturing, similar to March 2022 following the Russian invasion of Ukraine.”
00:30 - Australia Feb CPI Consensus: Weighted mean Y/Y 3.8% (prev 3.8%)
Commonwealth Bank of Australia said, “Unlike January, when electricity prices drove a sharp increase, February’s outcome is not expected to be influenced by large swings in volatile components. Instead, the result is likely to reflect continued firm outcomes in market services and housing inflation, alongside falls in the seasonally adjusted measures of education and transport prices. Notably, the expected fall in transport prices is underpinned by a 2.8% decline in fuel costs in February. However, this was prior to the effect of the Iran war on fuel prices, which is currently expected to see a sharp 31% increase in the CPI measure of fuel prices in March.”
07:00 - UK Feb CPI/Core CPI Consensus: 3.0% (prev 3.0%)/3.1% (prev 3.1%)
HSBC said it expects CPI and RPI inflation to hold steady in February at 3.0% and 3.8% y/y, respectively. “Within that, we expect modest offsetting moves across the main components. Services CPI is forecast to ease from 4.4% to 4.0% y/y, while core goods inflation is expected to rise from 0.8% to 1.5% y/y. These shifts largely reflect base effects, with underlying momentum remaining broadly stable. We also expect a slight easing in fuel inflation and a modest increase in food inflation. However, February data predates the Middle East conflict and its likely inflationary impact.”
09:00 - Germany Mar Ifo expectations Index Consensus: 86.3 (prev 88.6)
SocGen anticipated the German Ifo business climate index would decline sharply in March due to the energy price shock stemming from the Iran conflict. Analysts note that while confidence indicators can react sharply to shocks, their reliability as leading indicators for activity has diminished in recent years. Consumer confidence, in particular, fell significantly following the war in Ukraine and has struggled to recover, proving a poor guide to spending trends. The Ifo survey, which covers around 9,000 firms, including SMEs not captured in PMIs, may nonetheless show some initial resilience. Manufacturing confidence has been improving on the back of fiscal stimulus, which could offset some of the immediate downside. However, higher oil prices are expected to weigh on growth as the year progresses, despite expectations that fiscal support will lift growth above the stagnation seen in recent years.
09:00 – Norges Bank Interest Rate Decision Consensus: On Hold (prev 4.00%)
Danske Bank expects Norges Bank to keep its policy rate unchanged at 4.0%, in line with guidance from its December and January meetings. “In its December Monetary Policy Report, Norges Bank signalled one or two rate cuts in 2026, conditional on developments. However, higher inflation and increased upside risks from energy prices suggest the policy rate will remain unchanged through 2026, with one cut per year pencilled in for 2027–2029, leaving the rate around 3.25% at the end of the forecast horizon. A stronger exchange rate and declining capacity utilisation provide some offset. We also expect Norges Bank to reiterate its readiness to hike if necessary.”
13:00 - SARB Mar Interest Rate Decision Consensus: On Hold (prev 6.75%)
HSBC expects the South African Reserve Bank to keep its policy rate unchanged at 6.75%. Heading into the meeting, inflation remains contained at 3.0% y/y in February, while two-year-ahead inflation expectations have fallen to a record low of 3.6% in Q1 2026. However, the more than 50% surge in ZAR-denominated oil prices since the start of the Middle East conflict presents a material upside risk to the inflation outlook, testing the SARB’s commitment to its 3% target. HSBC expects a hawkish hold, with all five MPC members voting to maintain the current stance.
07:00 - UK Feb Retail Sales Consensus: M/M -0.3% (prev 1.8%)
Nomura estimated 0.5% m/m fall in retail sales volumes (ex-auto fuel) in February, following a strong 2.0% rise in January. Economists at the bank noted that the BRC measure of total retail sales slowed to 1.1% y/y in February from 2.7% in January. “Furthermore, adjusting for BRC shop price inflation, which was also 1.1% in February, gives 0.0% y/y. The CBI retail survey headline ‘sales volumes versus a year ago’ balance also weakened in February.”
Speakers: ECB’s Schnabel | Fed’s Daly, Jefferson
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; }
}
It is a quieter week for top-tier data, though the Middle East conflict remains front and centre. Markets are expected to continue taking their cue from geopolitical headlines and political rhetoric.
Last week’s run of central bank decisions was still being digested by investors into Friday’s close. Attention now turns to a fresh wave of central bank commentary, with policymakers returning to the wires following the end of the press blackout period.
In Japan, minutes from the latest Bank of Japan meeting are due for release, alongside the first survey results from this year’s shunto wage negotiations—key for assessing the durability of domestic inflation dynamics.
Elsewhere, G7 foreign ministers are set to convene in France on Thursday and Friday, with discussions expected to focus on coordinating a response to the evolving geopolitical situation.
All Times Are GMT
23:30 - Japan Feb Core CPI
Consensus: 1.7% (prev 2.0%)
Barclays said inflation is likely to be stronger for CPI excluding perishables and energy (“BoJ core”), reflecting easing food disinflation, while CPI excluding perishables alone (“core”) is expected to be weaker due to energy subsidies. The bank expects BoJ core to remain above 2% through May 2027, driven by rising mark-ups in sticky services and the pass-through of higher oil prices into non-energy goods and services.
Speakers: ECBs Cipollone, Lane
09:00 - Eurozone Mar HCOB Composite PMI (Flash)
Consensus: 51.1 (prev 51.9)
Nomura said firm sentiment likely deteriorated markedly in March following the onset of the Iran conflict. “We expect weaker sentiment to have weighed on services firms’ activity, though manufacturing activity was likely hit more meaningfully. We look for notable declines in output and new orders in manufacturing, similar to March 2022 following the Russian invasion of Ukraine.”
Speakers: RBNZ’s Breman | ECB’s Cipollone, Lane, Sleijpen
00:30 - Australia Feb CPI
Consensus: Weighted mean Y/Y 3.8% (prev 3.8%)
Commonwealth Bank of Australia said, “Unlike January, when electricity prices drove a sharp increase, February’s outcome is not expected to be influenced by large swings in volatile components. Instead, the result is likely to reflect continued firm outcomes in market services and housing inflation, alongside falls in the seasonally adjusted measures of education and transport prices. Notably, the expected fall in transport prices is underpinned by a 2.8% decline in fuel costs in February. However, this was prior to the effect of the Iran war on fuel prices, which is currently expected to see a sharp 31% increase in the CPI measure of fuel prices in March.”
07:00 - UK Feb CPI/Core CPI
Consensus: 3.0% (prev 3.0%)/3.1% (prev 3.1%)
HSBC said it expects CPI and RPI inflation to hold steady in February at 3.0% and 3.8% y/y, respectively. “Within that, we expect modest offsetting moves across the main components. Services CPI is forecast to ease from 4.4% to 4.0% y/y, while core goods inflation is expected to rise from 0.8% to 1.5% y/y. These shifts largely reflect base effects, with underlying momentum remaining broadly stable. We also expect a slight easing in fuel inflation and a modest increase in food inflation. However, February data predates the Middle East conflict and its likely inflationary impact.”
09:00 - Germany Mar Ifo expectations Index
Consensus: 86.3 (prev 88.6)
SocGen anticipated the German Ifo business climate index would decline sharply in March due to the energy price shock stemming from the Iran conflict. Analysts note that while confidence indicators can react sharply to shocks, their reliability as leading indicators for activity has diminished in recent years. Consumer confidence, in particular, fell significantly following the war in Ukraine and has struggled to recover, proving a poor guide to spending trends. The Ifo survey, which covers around 9,000 firms, including SMEs not captured in PMIs, may nonetheless show some initial resilience. Manufacturing confidence has been improving on the back of fiscal stimulus, which could offset some of the immediate downside. However, higher oil prices are expected to weigh on growth as the year progresses, despite expectations that fiscal support will lift growth above the stagnation seen in recent years.
Speakers: RBA’s Jones | RBNZ’s Conway | BoE’s Greene | ECB’s Lagarde, Lane, Rehn, Kocher, Müller | BoC’s Rogers
09:00 – Norges Bank Interest Rate Decision
Consensus: On Hold (prev 4.00%)
Danske Bank expects Norges Bank to keep its policy rate unchanged at 4.0%, in line with guidance from its December and January meetings. “In its December Monetary Policy Report, Norges Bank signalled one or two rate cuts in 2026, conditional on developments. However, higher inflation and increased upside risks from energy prices suggest the policy rate will remain unchanged through 2026, with one cut per year pencilled in for 2027–2029, leaving the rate around 3.25% at the end of the forecast horizon. A stronger exchange rate and declining capacity utilisation provide some offset. We also expect Norges Bank to reiterate its readiness to hike if necessary.”
13:00 - SARB Mar Interest Rate Decision
Consensus: On Hold (prev 6.75%)
HSBC expects the South African Reserve Bank to keep its policy rate unchanged at 6.75%. Heading into the meeting, inflation remains contained at 3.0% y/y in February, while two-year-ahead inflation expectations have fallen to a record low of 3.6% in Q1 2026. However, the more than 50% surge in ZAR-denominated oil prices since the start of the Middle East conflict presents a material upside risk to the inflation outlook, testing the SARB’s commitment to its 3% target. HSBC expects a hawkish hold, with all five MPC members voting to maintain the current stance.
Speakers: ECB’s De Guindos | BoE’s Breeden, Taylor, Greene | Fed’s Cook, Jefferson, Barr
07:00 - UK Feb Retail Sales
Consensus: M/M -0.3% (prev 1.8%)
Nomura estimated 0.5% m/m fall in retail sales volumes (ex-auto fuel) in February, following a strong 2.0% rise in January. Economists at the bank noted that the BRC measure of total retail sales slowed to 1.1% y/y in February from 2.7% in January. “Furthermore, adjusting for BRC shop price inflation, which was also 1.1% in February, gives 0.0% y/y. The CBI retail survey headline ‘sales volumes versus a year ago’ balance also weakened in February.”
Speakers: ECB’s Schnabel | Fed’s Daly, Jefferson