Rock bottom: Boris Johnson limps on but is one lame duck after Sunak and Javid resigned last night. He will fight on until forced out. The 1922 Committee will change the rules and backbenchers will oust him. Political risks do not seem to have a major impact on UK assets – far too many bigger things on our minds right now – inflation, the economy slowing down, strikes…chances are we see some tax cuts soon. Zahawi is the new chancellor…what are his economic policies? Could be the shortest-serving Chancellor in history?

European stock markets are staging a recovery this morning after a steep plunge Tuesday. This has the look of a dead kitty bounce in Europe – it is a reaction to yesterday’s sharp decline, it does not indicate capitulation, only resetting at a lower level after a very volatile session. US stocks staged a big turnaround to end the day in the green, the S&P 500 closing up 0.16%, some 90pts above the lows of the day. But moving from a month-low to a month-high in the session is not a ‘bullish close’ as some might say.

It had been a rough day for risk, with everything offered except bonds and the US dollar, which is proving to be the main safe haven amid fears for the global economy. This was a recession over inflation day as breakevens tumbled, yields fell and growth stocks outperformed. The S&P 500 was at Friday’s intraday low at the open around 3,750 before progressing lower to 3,740 where it found support and falling bond yields lifted the market. Tech liked the lower yields as bonds caught a bid, so the Nasdaq outperformed the broader market and rallied 1.75%. ARKK rallied almost 9%…tells you all you need to know about this snapback.

With oil tanking the FTSE 100 ended the day down almost 3% led by a horrible 8.7% decline for Shell and 7% drop for BP. Recession fears over inflation…but I do think those suckered into bonds in the last couple of sessions will feel pain down the road. The DAX also slumped by almost 3% as all European indices plunged. The reaction today has been swift, with the major bourses +2% in the first hour of trading. Positive German factory order numbers helped sentiment but the mood is febrile and recession fears are not less today than they were yesterday.

The dollar is holding onto gains as it sits around a 20-year high. Sterling fell to a fresh 2-year low against the dollar, whilst the euro lies just a few pips above its 20-year low. Sterling’s (and the euro’s) decline reflects a combination of monetary policy weakness, economic weakness and political weakness. The US economy is less at risk of a full-blown recession than either Europe or the UK, where the outlook continues to deteriorate. US monetary policy has also been far more assertive, albeit still tardy. Politically…frankly they’re all a shambles.

Oil was down very hard, WTI sinking beneath $100, but front month WTI has regained this level as of this morning. JPM says $380…Citi says $65, which probably reflects their own books. Norway has ended the strike by oil and gas workers.

Copper is lower again, sliding to its lowest since November 2020 even as Chinese data seems to be improving…bellwether but also just like everything else we are seeing a lot of leveraged longs unwound.

Gold was crushed to weakest since December as 5-year breakevens fell to their lowest since early last October…

Markets are pricing in the Fed needing to cut rates next year as inflation cools and growth slackens…which say the 2s10s curve invert for a third time this year. Yields are picking up this morning with the FOMC minutes in focus later in the session. Ahead of these we have the June ISM non-manufacturing PMI and May’s JOLTs job openings, with nonfarm payrolls due Friday.

We should make the distinction between real and nominal growth with regards the US- in nominal terms the economy is growing – inflation helps, plus jobs growth has been very strong…so recession fears can be confusing when looking at these in terms of the Fed…inflation is sticky and while there may be a real terms recession (bad for the consumer), in nominal terms there is growth so the Fed won’t be stopping its hikes, which means rates are going to get a lot higher before this is over which would be bad for growth stocks and good for longer-dated bonds.

Amid all this, I would not be overly confident this rally has legs. If there is follow-through today it only sets up a more volatile end-of-week. Bottom not yet in – if stocks are rallying on falling bond yields coz recession…then when bond yields inevitably rise as the Fed tightens and inflation persists then we are back to the bear.

Finally, the ECB holds a nonmonetary policy meeting today in Frankfurt, where the Governing Council will discuss the new anti-fragmentation tool. This tool, which will enable the ECB to hike rates and still buy government debt of certain countries, is fraught with technical, political and legal risks. But it should be noted that the tool is important to get right – failure would make it harder to raise rates as much as the ECB needs to do in order to get a grip on inflation.

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.07sRequest Duration4MBMemory UsageGET news/{slug}
status
200 OK
full_url
https://web-qa.staging.markets.com/news/stocks-bounce-sharply-dollar-holds-gains
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-bounce-sharply-dollar-holds-gains
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.07s
peak_memory
8MB
response
text/html; charset=UTF-8
request_format
html
request_query
[]
request_request
[]
request_headers
0 of 0
array:16 [ "cookie" => array:1 [ 0 => "XSRF-TOKEN=eyJpdiI6IlBjWXlrM29mSUw5MG4rdHkzbUNDN1E9PSIsInZhbHVlIjoiRHI2ZTY2Vk5FMDUxTUVObEtENVZYaFpwQkJDQWxWaTRzN0ZYQSthTi9jRGJneCs3ZnVvTGs2c0k3b2xpYU9jeUpNYlFNL2l1RkRSV1lISFpBWUUwb3d1Vm4rZEx4aWduU3JRTmJnZVp3MzlaaTFCRVI3Q1MvV0VNQTlOeTgvU0YiLCJtYWMiOiI4M2QxZTRmMzM4MTI5YTZmMDg5NDg1MjcxMmY0ZTk3YWI3ODZiMDEyNGEwOTNiZGRiYTE5ZGJlOGUwOGExZTA1IiwidGFnIjoiIn0%3D; laravel_session=eyJpdiI6ImZIamJpVWdxNWZGcWwzSy9JMlZ0VlE9PSIsInZhbHVlIjoiZVJXUjNQcW9PRk5vUHRKOFBNRnVwODR6STNXTU56OGp1SldwNnRuajZRbVRnNkw1YzJqQVhmZFVWTUNYMzcwaDh3SjVmRU8zbTc5dGYrV1Z4NGFoMmZja043VmovUzEwb2paRVRWdkNEZG1UNXBNUEI0Y1dRUTUyVW5UYUNHOVEiLCJtYWMiOiIyZGQyY2ZmNGMwY2Y0NzI4ZjJiZGFlMTQ2MTQ0NTAxYzcyYzdlMTc5NjE5NDQxYjcwMDM1MThlNGEwOWViZTAxIiwidGFnIjoiIn0%3D; mktloc=eyJpdiI6ImVYVnZRMXBuR0F5UVN4UGJmMzdxQUE9PSIsInZhbHVlIjoiTk5KR21qcGQvTkVpYnVIb3NXTEZ4RDBUbFIwTU9jS3VLM3JUYk9tK2RJNEJ2UzVybFg3VEh4NGdGSVhETmRFdyIsIm1hYyI6ImQ1MDM3YWM2NjE3ZmI2ZWQ0YTE5NDc5YTgzMTFhZTI0MTZmM2ExNDlkOWJiMDA1NmJmMzAwOWQ2ODZmZGVmNGEiLCJ0YWciOiIifQ%3D%3D; mktv4_ip_override=eu; intent_group=%252Fit%252Fnews%252Fweek-ahead-us-jobs-report-kicks-off-h2%252F; firstURL=https://web-qa.staging.markets.com/it/news/week-ahead-us-jobs-report-kicks-off-h2/; lastURL=https://web-qa.staging.markets.com/it/news/week-ahead-us-jobs-report-kicks-off-h2/XSRF-TOKEN=eyJpdiI6IlBjWXlrM29mSUw5MG4rdHkzbUNDN1E9PSIsInZhbHVlIjoiRHI2ZTY2Vk5FMDUxTUVObEtENVZYaFpwQkJDQWxWaTRzN0ZYQSthTi9jRGJneCs3ZnVvTGs2c0k3b2xpYU9jeUpNYlFNL" ] "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 [ "XSRF-TOKEN" => "KkI59QynIic523wF4ho9IlnVyyijeKMtv51hYCXa" "laravel_session" => "ixnT6ZpwWhVleHjLITAVs2Gu7sb4bualtZfnHsOv" "mktloc" => "us,us" "mktv4_ip_override" => null "intent_group" => null "firstURL" => null "lastURL" => 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:15:48 GMT" ] ]
session_attributes
0 of 0
array:4 [ "_token" => "KkI59QynIic523wF4ho9IlnVyyijeKMtv51hYCXa" "PHPDEBUGBAR_STACK_DATA" => [] "_previous" => array:1 [ "url" => "https://web-qa.staging.markets.com/csrf" ] "_flash" => array:2 [ "old" => [] "new" => [] ] ]
  • infolog[03:15:47] LOG.info: api_04f3c2ffb3aa1d87b32da191b0839ae1 [ "\/news\/stocks-bounce-sharply-dolla...
  • infolog[03:15:48] LOG.info: api_af23c87d9d9ee0f94f576336887d51d6 [ "\/news\/stocks-bounce-sharply-dolla...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • infolog[03:15:48] LOG.info: api_38920277471012379a31e53798f2a984 [ "\/news\/stocks-bounce-sharply-dolla...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • warninglog[03:15:48] LOG.warning: str_replace(): Passing null to parameter #3 ($subject) of type array|string ...
  • infolog[03:15:48] LOG.info: page_d8026cb8e39b63b0159e483caa6c461b [ "\/news\/stocks-bounce-sharply-doll...
  • Booting (23.86ms)time
  • Application (1.05s)time
  • Routing (1.45ms)
  • 1 x Application (97.77%)
    1.05s
    1 x Booting (2.23%)
    23.86ms
    1 x Routing (0.14%)
    1.45ms
    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
          KkI59QynIic523wF4ho9IlnVyyijeKMtv51hYCXa
          PHPDEBUGBAR_STACK_DATA
          []
          _previous
          array:1 [ "url" => "https://web-qa.staging.markets.com/csrf" ]
          _flash
          array:2 [ "old" => [] "new" => [] ]
          ClearShow all
          Date ↕MethodURLData
          #12025-04-26 03:15:48GET/news/stocks-bounce-sharply-dollar-holds-gains/34102