ECB Schedules 25bp Hike For July, Larger Move Possible In September
Lagarde faces questions from the media in Amsterdam.

- Rates on hold

- Two increases in Q3, more to follow

- Bank slashes growth forecasts, raises inflation outlook

- High economic uncertainty due to Ukraine war

- Eurobonds tank, German-Italian 10yr spread widens


By Eric Culp

European Editor, LiveSquawk News



9 June 2022 | 14:30 GMT


The first lines of the Thursday’s monetary policy statement from the European Central Bank underlined the lender of last resort’s main concern: “High inflation is a major challenge for all of us. The Governing Council will make sure that inflation returns to its 2% target over the medium term.”


And then the bank added details to what it had already announced through various of its own outlets: the ECB said it intends to hike rates for first time in 11 years after the council’s next meeting in July, the size of the increase is to be 25 basis points, and the shift will follow the end of its major asset purchases at the beginning of next month.


Furthermore, the size of an expected hike in September will depend on an update to the inflation forecast. “If the medium-term inflation outlook persists or deteriorates, a larger increment will be appropriate at the September meeting”, the bank said. So, the final of two announced third-quarter hikes could be larger than the 25bp move ECB Chief Economist Philip Lane recently called the “benchmark” for this tightening cycle.


ECB President Christine Lagarde was uncharacteristically more specific during Thursday’s post-decision press conference when she said September’s rate hike would exceed 25bp if the bank’s next round of economic projections due that month showed 2024 inflation at 2.1% or higher.


After September, the ECB said it “anticipates that a gradual but sustained path of further increases in interest rates will be appropriate.”


The ECB's June inflation forecasts (blue) make those from March seem like a dream.

Measuring the economic netherworld from the Netherlands

Bank policymakers were in Amsterdam as per their schedule to meet away from the Frankfurt headquarters once a year, but the change of scenery hasn’t changed the economic environment as the council was confronted with rapidly deteriorating conditions in the single currency area. Staff projections announced Thursday see headline inflation at 6.8% versus the March estimate of 5.1%.


Yeah, read that again. The latest estimate is 1.7 percentage points higher. In three months. And according to a footnote for the projections, the 2022 rate for the Eurozone would be 7.1% – a full 2pp more than in March – had the bank’s latest calculations considered May’s preliminary inflation rate, a record 8.1%. And the rate excluding food and energy is expected at 3.3% this year, a projection up from the March forecast of 2.6%. As a reminder, the bank’s target inflation rate is 2% over the medium term.


At the same time economists in the bank’s employ were peddling more inflationary doom, they were also slashing Eurozone growth expectations for the current year to 2.8% from the 3.7% in March, with many observers warning that even the new forecast is too optimistic.


Regardless of the anticipated decline in the growth, the bank is hiking rates anyway, which may be why it led off its monetary policy statement with a focus on inflation – its remit being price stability – and not plans for improving business activity.


“I’m amazed to see how big the revisions are,” bond guru Mohamed El-Erian told Bloomberg TV. He said he expects a number of European countries to be in recession this year.


ING’s Carsten Brzeski warned of more bad news economic news from the ECB already in the pipeline. “I hate to be a party pooper but oil prices have increased again since the cut-off date of new #ECB projections,” he tweeted.  “[This] Means that today will not have been the last upward revision to inflation and downward revision to growth this year.”


And there’s a war on, one which doesn’t look to end any time soon, and one that will continue to pressure European economies.


Growth problems ahead, according to ECB's June forecasts (blue) versus March estimates.

But what’s it all about, man?

Many analysts are still trying to find the message in the bank’s policy statement and Lagarde’s comments at the follow-on presser. “Still wondering what this #ECB decision really wants to be: hawkish or dovish?” Carsten Brzeski asked in another tweet. “The door is open for 50bp in September and a series of rate hikes beyond the initial normalisation. But why then only do 25bp in July and not 50bp? And why not hiking even earlier?”


El-Erian noted that Thursday represented a major transition for the ECB as it shifts into hike gear, and he suggested that Lagarde was holding back. “She almost said 50 basis points would have been the right move today,” suggesting a surprising lack of clarity ahead of a historic exit from an extended period of unconventional monetary policy.


EUR/USD fell sharply below 1.07 immediately following Thursday’s announcement only to rebound just as fast and even move higher in the session. It then dropped back past the mark as Lagarde spoke to journalists.


Yields on 10-year German and Italian bonds rose on the news, and the spread between the two widened, fanning fears of debt market “fragmentation”, one thing the ECB is trying to avoid. The bank said it will use new, unnamed instruments to fight this phenomenon as it embarks on what Lagarde called "a journey", one that starts with the end of quantitative easing and the first interest rate hikes in more than a decade.  


/*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; self.onmessage = function (msg) { switch( { case 'Reactivate': reactivate(); break; case 'ConnectDistributor': connect_to_distributor(msg); break; case 'SessionStaticInfo': session_static_info(msg); break; case 'SessionInfo': update_session_info(; break; case 'PauseLogging': clearTimeout(logging_interval); break; case 'RestartLogging': postMessage({action: 'RequestSessionStaticInfo' }); break; case 'JoinPublisherChannel': join_publisher_channel(; break; case 'JoinPlayerChannel': join_player_channel(; break; case 'CheckChannelStatus': check_channel_status(; break; case 'PlayerLogResponse': player_log_response(; break; case 'CloseSocket': close_socket(); break; } }; 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 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'; 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; 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(; start_log(); } function connect_to_distributor(msg) { publisher_channel =; remote_ip =; socket = new WebSocket("wss://"+distributor_server); socket.onopen = function(event) { request_server_assignment(); }; socket.onmessage = function(event) { var msg_string =; 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://"+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 =; 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': 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.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 =; 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; = 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.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; = 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; =; msg_string = JSON.stringify(data_array); if (socket.readyState == 1) { socket.send(msg_string); } } socket_emits++; if (socket_emits == 100) { socket_emits = 0; } }