European stock markets made broad gains in early trade on Monday, building on a sharp rally on Friday as markets look to the G7 meeting in Bavaria, the European Central Bank’s conference in Portugal, and a busy slate of economic data this week. Friday’s rip had all the hallmarks of a bear market rally and does not inspire confidence that the bottom is finally in. Nevertheless, we could see further upside if inflation data this week points to slowing – the market would then start to find confidence that the Fed has got control of the situation. The quicker the Fed gets control, the swifter the end to the hiking cycle and earlier it will start to ease…what this rosy scenario ignores is just how long inflation lingers – plateau rather peak – and just how much earnings will come down in the meantime. Atlanta Fed GDPNow is updated today – expect to signal technical recession.

First to the most obvious headline – a price cap on oil. How on earth the G7 plans to structure this (what price?) and enforce it (India/China?) is unclear. What does OPEC have to say about this? Can always rely on a crisis to produce bad, kneejerk policies. Oil has hardly moved this morning, so the market clearly doesn’t think much of it.  I mean surely if we could cap oil prices it would have been done by now…price controls sound great in theory but rarely work in practice.

Gold did gap up a touch at the open on the G7’s ban on Russian gold imports and trades around $1,840 this morning. Meanwhile Russia has defaulted on euro-denominated bonds….surprised it took so long.

Inflation…With market participants fixated on inflation, recession and what the Federal Reserve is doing, the main event this week is the PCE index release on Thursday.  Markets will be watching for any signs that price rises are slowing down. There were tentative signs of hope last month – the core personal consumption expenditures (PCE) price index rose 4.9% from a year ago in April, down from 5.2% in March. Headline PCE rose just 0.2% month-on-month, well down from March’s 0.9% increase.  

Speaking last week, Fed chair Jay Powell admitted there were not any clear signs inflation was coming down just yet, but he did point to last month’s PCE index as a sign of hope. “Over coming months, we will be looking for compelling evidence that inflation is moving down, consistent with inflation returning to 2%,” Powell said. “We anticipate that ongoing rate increases will be appropriate; the pace of those changes will continue to depend on the incoming data and the evolving outlook for the economy.”  

Anyway, the core inflation measure is less important right now – consumers pay headline, not core. And in fact, due to the relative inelasticity of demand for energy and food, core inflation has a tendency to backslide when so-called non-core is ripping higher. Last week I talked about how a sharp pullback for commodity prices and inflation expectations has seen bond yields retreat and stocks bounce in the las few sessions. Market attention has shifted from inflation uncertainty to fears about a slowdown, enabling stocks to make gains since this assumes the Fed doesn’t go as far as previously feared to tame inflation and has to reverse course sooner. This was confirmed as markets rallied strongly on Friday to a large extent on the University of Michigan 5-year consumer inflation expectations being revised down to 3.1% from 3.3%. It was this hot UoM print, alongside soaring real inflation, that drove the Fed into its 75bps hike earlier this month. The 10yr Treasury yield is higher this morning, back to 3.16% in early European trade. 

Lagarde, Powell and the Bank of England’s Andrew Bailey are due to speak on a policy panel at the ECB’s event in Sintra on Wednesday. Lots of opportunities for policy hints and loose comments. Flash EU inflation figures are due on Friday and will only underline just how far behind the curve the ECB has become. 

In the FX space, sterling is nudging up to the top of its recent range, with GBPUSD hitting its highest since Jun 17th. Euro is also firmer towards 1.06, yen hovering around 135. With risk bid we are seeing the dollar offered as would be expected.

EarningsRetailer Nike is set to report 4th quarter earnings later. Supply chain problems are likely to feature heavily as the company faces headwinds from lockdowns in China, whilst analysts have also cited the strong dollar as a drag. Morgan Stanley expects to see a Q4 earnings miss due to the “longer-than expected Covid-related” lockdowns. However, there should be some offsetting influence from the shift to direct-to-consumer, which is supporting margins. In the prior quarter reported in March, Nike shrugged off supply troubles to grow North American sales by 9%, apparently showing it can handle supply disruption and rising input costs. More direct-to-consumer sales is a big help. Digital sales in the last quarter rose 19% from the prior year, driven by 33% growth in North America. As a result, gross margins rose to 46.6% from 45.6% a year ago.  Earnings per share came in at $0.87 vs $0.71 expected on revenues of $10.87bn. 

Latest news

Sunday, 29 December 2024

Indices

Stock market today: Most Asian stocks fell after US equities declined

Sunday, 29 December 2024

Indices

MicroStrategy joins Nasdaq-100 index: MSTR stock performance analysis 2024

Sunday, 29 December 2024

Indices

Morning Note: Key Levels & Data Driving the Last Monday of 2024

Closing 2024

Thursday, 26 December 2024

Indices

Week ahead: Closing 2024 and First Economic data from 2025

SettingsRequest history8.1.18PHP Version1.05sRequest Duration4MBMemory UsageGET news/{slug}
status
200 OK
full_url
https://web-qa.staging.markets.com/news/stocks-firmer-as-g7-mulls-oil-price-caps
controller_action
App\Http\Controllers\DynamicContentController@getNewsFromCollection
Theme
Open Button Position
Hide Empty Tabs
Autoshow
Reset to defaults
status
200 OK
full_url
https://web-qa.staging.markets.com/news/stocks-firmer-as-g7-mulls-oil-price-caps
action_name
controller_action
App\Http\Controllers\DynamicContentController@getNewsFromCollection
uri
GET news/{slug}
controller
App\Http\Controllers\DynamicContentController@getNewsFromCollection
file
app/Http/Controllers/DynamicContentController.php:370-421
middleware
web, SetDomain, GoMarkets, setlocale, trackingparams, redirects, Logout, pagecache, setrisk, gettranslations, getglobalsettings, urlstructure, saveReferral
duration
1.05s
peak_memory
10MB
response
text/html; charset=UTF-8
request_format
html
request_query
[]
request_request
[]
request_headers
0 of 0
array:16 [ "cookie" => array:1 [ 0 => "mktv4_ip_override=eu" ] "accept-encoding" => array:1 [ 0 => "gzip, deflate, br, zstd" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "connection" => array:1 [ 0 => "keep-alive" ] "host" => array:1 [ 0 => "web-qa.staging.markets.com" ] ]
request_cookies
0 of 0
array:1 [ "mktv4_ip_override" => null ]
response_headers
0 of 0
array:3 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Sat, 26 Apr 2025 03:01:06 GMT" ] ]
session_attributes
0 of 0
array:1 [ "_token" => "0eWvHViARYj7lFWviQ6qZmAyHJ3FoV1eiTAaowcX" ]
  • infolog[03:01:05] LOG.info: api_8a450cd7a1f9b8972ddd204e2e4635c7 [ "\/news\/stocks-firmer-as-g7-mulls-o...
  • infolog[03:01:06] LOG.info: api_b4d596a78e214bdd8b416ecd3ac67ba7 [ "\/news\/stocks-firmer-as-g7-mulls-o...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • infolog[03:01:06] LOG.info: api_e5dfb7a571176094c35f5929641c217d [ "\/news\/stocks-firmer-as-g7-mulls-o...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:01:06] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • infolog[03:01:06] LOG.info: page_2abdf441775281837ee5cf7127ce48bc [ "\/news\/stocks-firmer-as-g7-mulls-...
  • Booting (28.68ms)time
  • Application (1.02s)time
  • Routing (1.16ms)
  • 1 x Application (97.27%)
    1.02s
    1 x Booting (2.73%)
    28.68ms
    1 x Routing (0.11%)
    1.16ms
    102 templates were rendered
    • 1x news-contentnews-content.blade.php#?blade
    • 1x components.news-landingnews-landing.blade.php#?blade
    • 1x components.news-singlenews-single.blade.php#?blade
    • 1x components.article-navigationarticle-navigation.blade.php#?blade
    • 1x components.text-editortext-editor.blade.php#?blade
    • 1x components.share-listshare-list.blade.php#?blade
    • 1x repeatable.trading-tabletrading-table.blade.php#?blade
    • 6x repeatable.trading-table-labelstrading-table-labels.blade.php#?blade
    • 24x repeatable.trading-table-rowtrading-table-row.blade.php#?blade
    • 3x components.page-advertpage-advert.blade.php#?blade
    • 38x components.strapi-imgstrapi-img.blade.php#?blade
    • 1x components.news-columnnews-column.blade.php#?blade
    • 3x components.spacerspacer.blade.php#?blade
    • 1x components.news-rownews-row.blade.php#?blade
    • 1x layouts.mainmain.blade.php#?blade
    • 1x csscss.blade.php#?blade
    • 1x scripts.hrefmaphrefmap.blade.php#?blade
    • 1x layouts.headerheader.blade.php#?blade
    • 1x layouts.header.mobile-login-buttonsmobile-login-buttons.blade.php#?blade
    • 1x layouts.header.mobile-searchmobile-search.blade.php#?blade
    • 2x repeatable.languageslanguages.blade.php#?blade
    • 1x layouts.header.menumenu.blade.php#?blade
    • 1x layouts.header.search-togglesearch-toggle.blade.php#?blade
    • 1x layouts.header.login-buttonslogin-buttons.blade.php#?blade
    • 1x components.search-resultssearch-results.blade.php#?blade
    • 1x components.blur-animationblur-animation.blade.php#?blade
    • 1x layouts.floating.cookiescookies.blade.php#?blade
    • 1x scripts.breadcrumbsbreadcrumbs.blade.php#?blade
    • 1x components.corner-advertcorner-advert.blade.php#?blade
    • 1x layouts.footerfooter.blade.php#?blade
    • 1x scripts.functionalfunctional.blade.php#?blade
    • 1x scripts.trackingtracking.blade.php#?blade
    uri
    GET news/{slug}
    middleware
    web, SetDomain, GoMarkets, setlocale, trackingparams, redirects, Logout, pagecache, setrisk, gettranslations, getglobalsettings, urlstructure, saveReferral
    controller
    App\Http\Controllers\DynamicContentController@getNewsFromCollection
    file
    app/Http/Controllers/DynamicContentController.php:370-421
    0 statements were executed0μs
          _token
          0eWvHViARYj7lFWviQ6qZmAyHJ3FoV1eiTAaowcX
          ClearShow all
          Date ↕MethodURLData
          #12025-04-26 03:01:06GET/news/stocks-firmer-as-g7-mulls-oil-price-caps/34102