European stocks rose in early trade on Friday after a solid session in Asia which followed an up day for Wall Street. Stocks in London and Paris rallied as much as 1%, whilst Frankfurt was about half of one percent higher for the session. The S&P 500 rallied 1% and is headed for a weekly gain of 3.3%, with the Dow Jones up 2.6% and the Nasdaq Composite outperforming with a rise of 4%. This gain for tech seems to be a yield play. European stock markets are headed for much smaller weekly gains but remain in the green as of this morning. Increasing worries Russian will cut off gas supplies as it flexes its muscles with flows down a lot lately. Head of German utility RWE said European solidarity will come under “significant stress” if the bloc cannot sort out how to prioritise gas supplies if Russia cuts them off. US nat gas yesterday extended losses apparently on cooler temperatures forecast in North America.

Recession fears: commodities down, yields down. Contrary trade saw US tech bid on lower yields, whilst energy and basic materials were down again. 10yr Treasury close to breaching 3% with 2s 20bps below indicates the market is worried about slower growth over the longer term but confident the Fed will hike to neutral – around 3% or so – this year, and then possibly start cutting in 2023. Rates have moved sharply to wipe out all the extra yield since the hot CPI report and the Fed’s 75bps hike. Recession fears mean the market has dialled back its expectations for just how the far the Fed will go, which is helping growth stocks to mount a defence. PMIs are declining and lower commodity prices has the market more focused on slowdown than searing inflation, which seems on-balance net positive for stocks. But this masks lots and we don’t know how far earnings estimates need to come down…arguably the multiple compression we have seen points to the market already pricing in lower earnings growth, not just a higher risk-free rate. Frankly the give-back in yields looks complacent but there might be more of it before bonds are sold again.

Brexit Britain: UK consumer confidence fell to the lowest on record in June. The GfK survey declined one point to –41, the lowest since the series began in 1974. To put this in context, it’s worse than at time during Covid, or the financial crisis. The reason is simple enough – stagflation. It’s a pocketbook/kitchen table issue in inflation – can I pay my energy bill? Can I pay for food? These are not issues that a rich western country like ours should be facing and point to systemic policy failure by governments of all hue. On which note, Boris Johnson’s confidence must have been shaken (I joke, it’s unshakable) by stinging by-election losses in Yorkshire and Devon. It underlines that the country is sick of this government and BoJo has become an election liability for the Tory party. There will be a lot of very worried MPs this morning…still amazes me the confidence was held before these by-elections.  

Cost of living: Retail sales fell by 0.5% in May led by a 1.6% decline in food sales. The ONS said the reduced spending in food stores seems to be linked to the impact of rising food prices and the cost of living. There would have been a shock from the April energy price rise for many that led to belt-tightening. Retail stocks are under pressure and further dragged down by Germany’s Zalando slashing guidance.

Meanwhile, there is maybe some good news on the inflation front as commodity prices are dropping. Brent crude is still holding the trend support I showed yesterday, but it remains under pressure and around 20% off the March peak. Natural gas was sharply lower again yesterday, back to $6, down by almost 40% in a little over two weeks. Copper down hard again to lowest since February 2021. Similar story in softs with wheat and sugar back to their lowest since March 1st. Easing of commodity prices would clearly be a massive boost to the Fed and other central banks trying to battle inflation. This decline in commodity prices, combined with lower bond yields, seems to be underpinning this latest market bounce, though I don’t believe this is ‘the’ bottom. A weekly close above 3,800 for the S&P 500 would be constructive and indicate the rally has a bit more to run before it’s sold again.

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.17sRequest Duration4MBMemory UsageGET news/{slug}
status
200 OK
full_url
https://web-qa.staging.markets.com/news/stocks-climb-as-focus-shifts-from-inflation-to-slowdown
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-climb-as-focus-shifts-from-inflation-to-slowdown
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.17s
peak_memory
6MB
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; mktloc=eyJpdiI6Ik5FSlF1K1k3MzMyTTQwMEluL1daSnc9PSIsInZhbHVlIjoibDhtcUx2WTBNVzBLSkhXaFdYbFNFSENJazAvL0ZsV3FwbGpRaFRSaE8yQXp6UjhHaFdJVWxHYkZTVlllRUw4bSIsIm1hYyI6IjA0YTA5ZDcyYzJhZTQzZjZlMzg1MGQ0MTgyOWNkNGQzNTVmZjdkMGE0MjZhOGU0YzlmYzM5ZDFiNjFlNDEzMTkiLCJ0YWciOiIifQ%3D%3D; intent_group=%252Fnews%252Fweek-ahead-markets-set-for-another-busy-economic-calendar%252F; firstURL=https://web-qa.staging.markets.com/news/week-ahead-markets-set-for-another-busy-economic-calendar/; lastURL=https://web-qa.staging.markets.com/news/week-ahead-markets-set-for-another-busy-economic-calendar/; XSRF-TOKEN=eyJpdiI6InN6VlZ1VTBNRC9TSGN0WWNiazlCUFE9PSIsInZhbHVlIjoiTHFjSFVLeUg5R0FLVjYxcThGMjdsOWpSdUdlM0NpZC9rMkMwaGozdkE2VU15SWNUSmlKVG1zRHdzc0ZaT1NpVHpqR3pGQmRDMEZkK05zb2JNVk94eDYvei9uWVdRRXpDK09sdXViZUI3Zm80WDBTVGxQelNaZFpzTDE5eE5ERUMiLCJtYWMiOiI2ZWJlYTAxODVmMmZhZGIyMjY4MWNjZDI4YTdjMTM3NWY2OWQyMjEzYzQ4YzBmNzRlYTliZjQ3NmRlZTQ4ZWRmIiwidGFnIjoiIn0%3D; laravel_session=eyJpdiI6IkhBQ0RrRHVtUDRkR1g0UkdPM3Y5cnc9PSIsInZhbHVlIjoiVmRZbDJGaXIwUS9VQTRyU3ZEcWtha1V5TkdXQ1lCbk84bTZNOWI2M2pSQis0T2RTamh2WExveHY0am1YVGJLU1dwQXJ0YXlTaTZEY3orSjlyS0VzMVZ3U3lndmRJT25RUHJMTmFYVXhXeklqMkpJeUgzMkxxZ3JXL1ljQTBmd2QiLCJtYWMiOiIwMzJjOWNiZTA2YTE5MTg5ZjEyMTdkYzM0OTJhMzU5ZGM2OTEzOWM4NDJkMmRkYmQ2MTU0OGRkNWU5Y2QyN2Q1IiwidGFnIjoiIn0%3Dmktv4_ip_override=eu; mktloc=eyJpdiI6Ik5FSlF1K1k3MzMyTTQwMEluL1daSnc9PSIsInZhbHVlIjoibDhtcUx2WTBNVzBLSkhXaFdYbFNFSENJazAvL0ZsV3FwbGpRaFRSaE8yQXp6UjhHaFdJVWxHYkZ" ] "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:7 [ "mktv4_ip_override" => null "mktloc" => "us,us" "intent_group" => null "firstURL" => null "lastURL" => null "XSRF-TOKEN" => "SzE5h7c6z0kVJbWlSbyTp2ZGoBIyAZGRnMs6XnLt" "laravel_session" => "KTqt6YJmyE979ZYUQ2Ljyp3uoj9dKcqFVml9ev5f" ]
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 => "Mon, 14 Apr 2025 18:56:36 GMT" ] ]
session_attributes
0 of 0
array:4 [ "_token" => "SzE5h7c6z0kVJbWlSbyTp2ZGoBIyAZGRnMs6XnLt" "PHPDEBUGBAR_STACK_DATA" => [] "_previous" => array:1 [ "url" => "https://web-qa.staging.markets.com/params" ] "_flash" => array:2 [ "old" => [] "new" => [] ] ]
  • infolog[18:56:35] LOG.info: api_7a4aa01f62ad6d3af9420a7173b364ea [ "\/news\/stocks-climb-as-focus-shift...
  • infolog[18:56:35] LOG.info: api_fa9554271ddce63f1ae41cd22ef2748d [ "\/news\/stocks-climb-as-focus-shift...
  • warninglog[18:56:35] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:35] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:35] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:35] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:35] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:35] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • infolog[18:56:36] LOG.info: api_6f21d9aab967c859c1dab409db35cdf4 [ "\/news\/stocks-climb-as-focus-shift...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[18:56:36] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • infolog[18:56:36] LOG.info: page_7315e98b06e86169ba4cfea0ba9516ba [ "\/news\/stocks-climb-as-focus-shif...
  • Booting (15.53ms)time
  • Application (1.16s)time
  • Routing (1.3ms)
  • 1 x Application (98.68%)
    1.16s
    1 x Booting (1.32%)
    15.53ms
    1 x Routing (0.11%)
    1.30ms
    99 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
    • 2x components.page-advertpage-advert.blade.php#?blade
    • 36x 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
          SzE5h7c6z0kVJbWlSbyTp2ZGoBIyAZGRnMs6XnLt
          PHPDEBUGBAR_STACK_DATA
          []
          _previous
          array:1 [ "url" => "https://web-qa.staging.markets.com/params" ]
          _flash
          array:2 [ "old" => [] "new" => [] ]
          ClearShow all
          Date ↕MethodURLData
          #12025-04-14 18:56:36GET/news/stocks-climb-as-focus-shifts-from-inflation-to-slowdown/3499