BoE Set To Hold Rates As Markets Focus On Vote Split And Updated Forecasts
- MPC expected to vote 7-2 in favour of holding rates - Updated forecasts to reflect evolving inflation outlook - Energy shock, risk of secondary effects remains in focus - Bailey likely to reinforce cautious MonPol approach
LONDON – Few expect the Bank of England to spring a surprise on Thursday, with policymakers widely forecast to leave the Bank Rate unchanged at 3.75%. Instead, attention will centre on the Monetary Policy Report, the voting split and whether officials adopt a more hawkish tone in response to renewed energy-driven inflation risks.
The decision is due at midday (London time) on Thursday. The MPC is expected to vote 7-2 in favour of a hold. The committee's two consistent hawks, chief economist Huw Pill and Megan Greene, are expected to again vote for tighter policy, while some analysts believe Catherine Mann could join them.
This meeting will also include the BoE's annual review of quantitative tightening. Barclays expects the Bank to conclude that QT has increased gilt yields by around 15-25 basis points.
Barclays' Jack Meaning noted that recent communication from MPC members highlights a range of views across the committee. However, he argued that the median voter appears comfortable with the expected inflation path, despite the anticipated near-term overshoot, and continues to view the Bank Rate at 3.75% as sufficiently restrictive to absorb the energy shock.
At the May Monetary Policy Report, the BoE outlined three scenarios (A, B and C) to capture the uncertainty surrounding the US-Iran conflict and the resulting energy shock.
Morgan Stanley's Bruna Skarica said there remained considerable confusion around the framework but interpreted it as follows: Scenario A represents a hold with an easing bias, assuming the Strait of Hormuz fully reopens, and the probability of a severe energy shock falls close to zero. Scenario B reflects a hold with a tightening bias, in which the Strait is only partially open, and the risk of further disruption remains significant. Scenario C envisages as many as four rate hikes if the Strait closes completely, triggering global shortages of oil and gas and forcing commodity prices to demand-destruction levels. "We would argue the economy currently sits in Scenario B," she concluded.
Updated forecasts
The July Monetary Policy Report will accompany the policy decision and include updated economic forecasts and revised scenario analysis.
On growth, analysts expect stronger-than-anticipated activity during the first half of the year to prompt an upward revision to the near-term outlook.
Recent inflation has undershot the BoE's previous forecasts, pointing to a softer near-term profile. However, renewed energy price pressures could lead to a higher subsequent peak and delay inflation's return to the 2% target. Barclays expects the central projection to show inflation undershooting the target by around 0.5 percentage points over the medium term, while continuing to highlight upside risk scenarios.
Labour market conditions appear to be softening rather than deteriorating sharply. Wage growth expectations have eased towards 3.3-3.4%, while unemployment, payrolls and vacancies have remained relatively stable.
Communicating policy
Governor Andrew Bailey and several MPC colleagues will explain the committee's thinking at the press conference shortly after the decision. Speaking at the ECB's annual Sintra forum, Bailey defended June's decision to leave rates unchanged, describing it as the appropriate course of action while reiterating the need for patience.
Morgan Stanley's Skarica expects little change in the bank's messaging. "We assume the majority of the MPC still wants to signal that tighter financial conditions relative to pre-March levels should continue to help reduce inflation," she said, adding that any emerging evidence of second-round effects in prices or wages "would necessitate a policy response."
JPMorgan's Allan Monks expects policymakers to avoid overreacting to the latest geopolitical developments, recognising how quickly the situation can change. Nevertheless, he argued that the balance of risks has continued to shift in a more hawkish direction.
Barclays' Meaning also expects guidance to remain limited, cautious and non-committal. "As in recent meetings, we expect the MPC to stress uncertainty around how the Middle East situation will evolve and how that will pass through to the UK economy," he said. "We believe the MPC will make clear that it stands ready to act if required, but that decisions will continue to be taken on a meeting-by-meeting basis. Ultimately, we do not think the Committee views the current outlook as requiring more tightening than is already implied by maintaining the Bank Rate at 3.75%."
/*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; }
}
- MPC expected to vote 7-2 in favour of holding rates
- Updated forecasts to reflect evolving inflation outlook
- Energy shock, risk of secondary effects remains in focus
- Bailey likely to reinforce cautious MonPol approach
By Harry Daniels
LiveSquawk News
@HarryDaniels71
12:00 GMT | 29 July 2026
LONDON – Few expect the Bank of England to spring a surprise on Thursday, with policymakers widely forecast to leave the Bank Rate unchanged at 3.75%. Instead, attention will centre on the Monetary Policy Report, the voting split and whether officials adopt a more hawkish tone in response to renewed energy-driven inflation risks.
The decision is due at midday (London time) on Thursday. The MPC is expected to vote 7-2 in favour of a hold. The committee's two consistent hawks, chief economist Huw Pill and Megan Greene, are expected to again vote for tighter policy, while some analysts believe Catherine Mann could join them.
This meeting will also include the BoE's annual review of quantitative tightening. Barclays expects the Bank to conclude that QT has increased gilt yields by around 15-25 basis points.
Barclays' Jack Meaning noted that recent communication from MPC members highlights a range of views across the committee. However, he argued that the median voter appears comfortable with the expected inflation path, despite the anticipated near-term overshoot, and continues to view the Bank Rate at 3.75% as sufficiently restrictive to absorb the energy shock.
At the May Monetary Policy Report, the BoE outlined three scenarios (A, B and C) to capture the uncertainty surrounding the US-Iran conflict and the resulting energy shock.
Morgan Stanley's Bruna Skarica said there remained considerable confusion around the framework but interpreted it as follows: Scenario A represents a hold with an easing bias, assuming the Strait of Hormuz fully reopens, and the probability of a severe energy shock falls close to zero. Scenario B reflects a hold with a tightening bias, in which the Strait is only partially open, and the risk of further disruption remains significant. Scenario C envisages as many as four rate hikes if the Strait closes completely, triggering global shortages of oil and gas and forcing commodity prices to demand-destruction levels. "We would argue the economy currently sits in Scenario B," she concluded.
The July Monetary Policy Report will accompany the policy decision and include updated economic forecasts and revised scenario analysis.
On growth, analysts expect stronger-than-anticipated activity during the first half of the year to prompt an upward revision to the near-term outlook.
Recent inflation has undershot the BoE's previous forecasts, pointing to a softer near-term profile. However, renewed energy price pressures could lead to a higher subsequent peak and delay inflation's return to the 2% target. Barclays expects the central projection to show inflation undershooting the target by around 0.5 percentage points over the medium term, while continuing to highlight upside risk scenarios.
Labour market conditions appear to be softening rather than deteriorating sharply. Wage growth expectations have eased towards 3.3-3.4%, while unemployment, payrolls and vacancies have remained relatively stable.
Governor Andrew Bailey and several MPC colleagues will explain the committee's thinking at the press conference shortly after the decision. Speaking at the ECB's annual Sintra forum, Bailey defended June's decision to leave rates unchanged, describing it as the appropriate course of action while reiterating the need for patience.
Morgan Stanley's Skarica expects little change in the bank's messaging. "We assume the majority of the MPC still wants to signal that tighter financial conditions relative to pre-March levels should continue to help reduce inflation," she said, adding that any emerging evidence of second-round effects in prices or wages "would necessitate a policy response."
JPMorgan's Allan Monks expects policymakers to avoid overreacting to the latest geopolitical developments, recognising how quickly the situation can change. Nevertheless, he argued that the balance of risks has continued to shift in a more hawkish direction.
Barclays' Meaning also expects guidance to remain limited, cautious and non-committal. "As in recent meetings, we expect the MPC to stress uncertainty around how the Middle East situation will evolve and how that will pass through to the UK economy," he said. "We believe the MPC will make clear that it stands ready to act if required, but that decisions will continue to be taken on a meeting-by-meeting basis. Ultimately, we do not think the Committee views the current outlook as requiring more tightening than is already implied by maintaining the Bank Rate at 3.75%."