The Federal Open Market Committee (FOMC) is widely expected to initiate a new round of interest rate cuts on Wednesday, but the size of the initial move and the pace of subsequentreductions remain uncertain.
An economists’ poll predicts that rate setters will lower borrowing costs by 25 basis points this week, bringing the Federal Funds Target Range to 5.00%-5.25%. This would mark the US central bank’s first rate cut since the global pandemic began in March 2020.
Mark Cabana of BofA described the market as “unusually uncertain” regarding the September meeting. “Rates priced in 34bps of cuts for the September FOMC at the close on Friday; this reflects a 36% chance of a 50bps rate cut, conditional on the Fed delivering a minimum of 25bps.”
Major bank economists remain hopeful that the Fed can guide the US economy to a soft landing. However, Cabana noted, “The Fed remains vigilant to downside risks to its employment mandate.”
Resilient Data
The labour market has become a focal point of experts searching for signals of an impending recession, and warning signs are mounting, according to analysts. Citi researchers wrote, “In our base case, a continued weakening of the labour market that spreads to a broader economic recession will prompt the Fed to cut rates in larger increments at upcoming meetings. However, the committee may not yet have seen enough data to reach a consensus on a faster pace of cuts.”
Although inflation has remained persistent, it appears less of a concern for Fed officials, who said they foresee a lower trajectory for consumer prices. Nevertheless, August’s 2.5% y/y print for headline consumer price growth, while four-tenths lower than the previous month, still exceeded the Fed’s 2% target.
Summary of Economic Projections
An updated Summary of Economic Projections (SEP) is scheduled to accompany the decision. The June dot plot surprised investors by reducing the number of anticipated rate cuts for 2024 from three to just one.
While markets have been out of step with the Fed's collective thinking since late spring, the gap seems to be closing. As a result, two additional cuts are anticipated to be included in the September update.
“We expect the 2024 median to show 75bps of cuts. Accelerating cuts in November or December after starting with 25bps in September would imply that the Fed made a policy error,” said BofA.
Growth forecasts are expected to show a slight downgrade compared to June projections, while inflation projections are likely to remain unchanged, with the 2.0% target not expected to be reached until 2026. Unemployment is projected to rise over the forecast horizon.
Fed Messaging
Since the last set of projections in June, most Fed officials have emphasised the need for more data before determining the pace of rate cuts. However, the central bank has faced criticism for its lack of clarity and forward guidance ahead of this crucial meeting.
At the annual Jackson Hole Symposium last month, Fed Chairman Jerome Powell gave the clearest indication yet that rates are poised to come down. He acknowledged that upside risks to inflation had diminished while downside risks to employment had increased, stating, “The time has come for policy to adjust.”
Philip Marey, senior US strategist at Rabobank, said he understood Powell’s reluctance to reveal more specifics. “He didn’t want to hint at the size of the rate cut in September. With a full set of data still to come between Jackson Hole and the September meeting, it would have been premature for Powell to signal the exact size of the cut.”
A couple of weeks later, after the August US jobs report, Fed Governor Christopher Waller stressed the need to act. Historically one of the more hawkish rate-setters, Waller observed that the labour market and economy were performing well, with continued growth and inflation near 2%. “But I also believe that maintaining the economy's momentum means, as Chair Powell recently said, that the time has come to start reducing the target range for the federal funds rate.
“If the data suggests the need for larger cuts, I will support that as well. I was a strong advocate of front-loading rate hikes when inflation accelerated in 2022, and I will also support front-loading rate cuts if necessary."
Rabobank’s Marey noted that the more dovish officials fear the US central bankis falling behind the curve, while the hawks argue that inflation remains under control and positive growth continues. “The Fed has started cutting cycles with 50bps cuts before, but that was when the economy appeared to be on the brink of collapse. That doesn't seem to be the case right now.”
/*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; }
}
- Polls marginally in favour of 25bps cut
- Policymakers still aiming for soft landing
- Dot plot to reflect increasing clamour for consecutive cuts
- Staff to lower growth estimates, retain steady inflation outlook
- Rate decision due Wednesday at 18:00 GMT/14:00 EST
- Press conference set for 18:30 GMT/14:30 EST
By Harry Daniels
LiveSquawk News
@HarryDaniels71
17 September 2024 | 16:00 GMT
The Federal Open Market Committee (FOMC) is widely expected to initiate a new round of interest rate cuts on Wednesday, but the size of the initial move and the pace of subsequent reductions remain uncertain.
An economists’ poll predicts that rate setters will lower borrowing costs by 25 basis points this week, bringing the Federal Funds Target Range to 5.00%-5.25%. This would mark the US central bank’s first rate cut since the global pandemic began in March 2020.
Mark Cabana of BofA described the market as “unusually uncertain” regarding the September meeting. “Rates priced in 34bps of cuts for the September FOMC at the close on Friday; this reflects a 36% chance of a 50bps rate cut, conditional on the Fed delivering a minimum of 25bps.”
Major bank economists remain hopeful that the Fed can guide the US economy to a soft landing. However, Cabana noted, “The Fed remains vigilant to downside risks to its employment mandate.”
The labour market has become a focal point of experts searching for signals of an impending recession, and warning signs are mounting, according to analysts. Citi researchers wrote, “In our base case, a continued weakening of the labour market that spreads to a broader economic recession will prompt the Fed to cut rates in larger increments at upcoming meetings. However, the committee may not yet have seen enough data to reach a consensus on a faster pace of cuts.”
Although inflation has remained persistent, it appears less of a concern for Fed officials, who said they foresee a lower trajectory for consumer prices. Nevertheless, August’s 2.5% y/y print for headline consumer price growth, while four-tenths lower than the previous month, still exceeded the Fed’s 2% target.
An updated Summary of Economic Projections (SEP) is scheduled to accompany the decision. The June dot plot surprised investors by reducing the number of anticipated rate cuts for 2024 from three to just one.
While markets have been out of step with the Fed's collective thinking since late spring, the gap seems to be closing. As a result, two additional cuts are anticipated to be included in the September update.
“We expect the 2024 median to show 75bps of cuts. Accelerating cuts in November or December after starting with 25bps in September would imply that the Fed made a policy error,” said BofA.
Growth forecasts are expected to show a slight downgrade compared to June projections, while inflation projections are likely to remain unchanged, with the 2.0% target not expected to be reached until 2026. Unemployment is projected to rise over the forecast horizon.
Since the last set of projections in June, most Fed officials have emphasised the need for more data before determining the pace of rate cuts. However, the central bank has faced criticism for its lack of clarity and forward guidance ahead of this crucial meeting.
At the annual Jackson Hole Symposium last month, Fed Chairman Jerome Powell gave the clearest indication yet that rates are poised to come down. He acknowledged that upside risks to inflation had diminished while downside risks to employment had increased, stating, “The time has come for policy to adjust.”
Philip Marey, senior US strategist at Rabobank, said he understood Powell’s reluctance to reveal more specifics. “He didn’t want to hint at the size of the rate cut in September. With a full set of data still to come between Jackson Hole and the September meeting, it would have been premature for Powell to signal the exact size of the cut.”
A couple of weeks later, after the August US jobs report, Fed Governor Christopher Waller stressed the need to act. Historically one of the more hawkish rate-setters, Waller observed that the labour market and economy were performing well, with continued growth and inflation near 2%. “But I also believe that maintaining the economy's momentum means, as Chair Powell recently said, that the time has come to start reducing the target range for the federal funds rate.
“If the data suggests the need for larger cuts, I will support that as well. I was a strong advocate of front-loading rate hikes when inflation accelerated in 2022, and I will also support front-loading rate cuts if necessary."
Rabobank’s Marey noted that the more dovish officials fear the US central bank is falling behind the curve, while the hawks argue that inflation remains under control and positive growth continues. “The Fed has started cutting cycles with 50bps cuts before, but that was when the economy appeared to be on the brink of collapse. That doesn't seem to be the case right now.”