{"id":2241,"date":"2023-11-09T08:43:12","date_gmt":"2023-11-09T08:43:12","guid":{"rendered":"https:\/\/tradeforexes.com\/?page_id=2241"},"modified":"2026-06-13T16:29:15","modified_gmt":"2026-06-13T16:29:15","slug":"index-cfds","status":"publish","type":"page","link":"https:\/\/tradeforexes.com\/en\/index-cfds\/","title":{"rendered":"Index CFDs"},"content":{"rendered":"<div class=\"et_pb_section_0 et_pb_section et_section_specialty et_pb_gutters3 et_block_section\"><div class=\"et_pb_row et_block_row\"><div class=\"et_pb_column_0 et_pb_column et_pb_column_single et_pb_column_1_2 et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_heading_0 et_pb_heading et_pb_module et_block_module preset--module--divi-heading--ddeb8c09-9078-4424-bc15-2efb6572e28e\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">Master the Art of Index Trading<\/h1><\/div><\/div><div class=\"et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--0504de1e-f5ff-4281-ba60-cbbe4edf98bc\"><div class=\"et_pb_text_inner\"><p>Unlock the potential of global indices with precision trading tools and expert insights.<\/p>\n<\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_0_wrapper preset--module--divi-button--ab15fb74-61a3-43aa-96b3-41e09aeef654_wrapper\"><a class=\"et_pb_button_0 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--ab15fb74-61a3-43aa-96b3-41e09aeef654\" href=\"\">Start Trading<\/a><\/div><\/div><div class=\"et_pb_column_1 et_pb_column et_pb_specialty_column et_pb_column_1_2 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough\"><div class=\"et_pb_row_inner_0 et_pb_row_inner et_pb_gutters2 et_block_row preset--module--divi-row-inner--533f52f4-ee6c-4dcb-aade-f0bc088a737f\"><div class=\"et_pb_column_inner_0 et_pb_column_inner et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column-inner--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_heading_1 et_pb_heading et_pb_module et_block_module preset--module--divi-heading--f0c675ea-2574-4d0e-b725-30f8550a8550\"><div class=\"et_pb_heading_container\"><h4 class=\"et_pb_module_header\">Your Gateway to Global Markets<\/h4><\/div><\/div><div class=\"et_pb_heading_2 et_pb_heading et_pb_module et_block_module preset--module--divi-heading--ba4a6336-701f-47b8-bf5c-09da0ce28016\"><div class=\"et_pb_heading_container\"><h3 class=\"et_pb_module_header\">Trade with Confidence<\/h3><\/div><\/div><div class=\"et_pb_text_1 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module et_pb_text_align_center preset--module--divi-text--2c55a9c4-feed-423b-9edb-ae0b5b365cac\"><div class=\"et_pb_text_inner\"><p>Join thousands of traders who trust tradeForexes.com for their index trading needs.<\/p>\n<\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_1_wrapper preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206_wrapper\"><a class=\"et_pb_button_1 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206\" href=\"\">Learn More<\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"et_pb_section_1 et_pb_section et_section_regular et_block_section\"><div class=\"et_pb_row_0 et_pb_row et_block_row\"><div class=\"et_pb_column_2 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough\"><div class=\"et_pb_code_0 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><!-- Markets Live \u2014 single-file drop-in (FX + Indices + Crypto + Shares) -->\n<div\n  id=\"mkt-root\"\n  class=\"mkt-hidden\"\n  data-markets-live=\"1\"\n  data-fh-key=\"\"                 <!-- optional: Finnhub key (for WS FX + ETF fallbacks) -->\n  data-fmp-key=\"\"                <!-- optional: FMP key (indices\/shares fallback) -->\n  data-broker-url=\"https:\/\/yourbroker.com\/trade?symbol=\"\n><\/div>\n\n<style>\n:root{--mkt-bg:#f7f9ff;--mkt-card:#fff;--mkt-ink:#0b1d4a;--mkt-muted:#6d7a99;--mkt-line:#e8eef9;--mkt-chip:#1756ff;--mkt-up:#1ea672;--mkt-down:#e55353;--mkt-shadow:0 2px 16px rgba(11,29,74,.06);--mkt-radius:16px}\n#mkt-root{max-width:1180px;margin:28px auto;padding:0 16px;color:var(--mkt-ink);font:15px\/1.45 system-ui,-apple-system,Segoe UI,Inter,Roboto,Arial}\n#mkt-root.mkt-hidden{visibility:hidden}\n.mkt-tabs{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}\n.mkt-tabs button{border:1px solid var(--mkt-line);background:#ecf2ff40;color:#2a3760;padding:10px 14px;border-radius:999px;cursor:pointer;font-weight:700}\n.mkt-tabs button.mkt-active{background:#0b1d4a;color:#fff;border-color:#0b1d4a}\n.mkt-panel{display:none;background:var(--mkt-card);border:1px solid var(--mkt-line);border-radius:var(--mkt-radius);box-shadow:var(--mkt-shadow);overflow:hidden}\n.mkt-panel[aria-hidden=\"false\"]{display:block}\n.mkt-hdr{display:flex;justify-content:space-between;align-items:center;padding:16px 18px;border-bottom:1px solid var(--mkt-line)}\n.mkt-title{font-size:24px;font-weight:800}\n.mkt-source{color:var(--mkt-muted);font-size:13px}\n.mkt-table{width:100%;border-collapse:separate;border-spacing:0}\n.mkt-th{position:sticky;top:0;background:#fbfdff;border-bottom:1px solid var(--mkt-line);padding:12px 16px;color:#6d7a99;text-transform:uppercase;font-size:12px;letter-spacing:.04em}\n.mkt-td{border-bottom:1px solid var(--mkt-line);padding:12px 16px;vertical-align:middle}\n.mkt-num{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}\n.mkt-chg{font-weight:700}\n.mkt-up{color:var(--mkt-up)} .mkt-down{color:var(--mkt-down)}\n.mkt-chip{font:700 13px\/1 system-ui,-apple-system,Segoe UI,Inter,Roboto,Arial;padding:8px 12px;border-radius:999px;background:#edf2ff;border:1px solid #dbe6ff;color:var(--mkt-chip);display:inline-flex;align-items:center;justify-content:center;min-width:70px;cursor:pointer}\n.mkt-chip:hover{background:var(--mkt-chip);color:#fff}\n.mkt-chip:focus{outline:2px solid #9ab4ff;outline-offset:2px}\n.mkt-diag{padding:10px 16px;color:#466;font-size:12px;background:#fafcff;border-top:1px solid var(--mkt-line)}\n#mkt-tv-indices{padding:0 16px 16px}\n@media (max-width:900px){ .mkt-hide-6,.mkt-hide-7,.mkt-hide-8{display:none} }\n@media (max-width:640px){ .mkt-hide-5{display:none} }\n@media (max-width:680px){\n  .mkt-table thead{display:none !important}\n  .mkt-table, .mkt-table tbody, .mkt-table tr, .mkt-table td{display:block !important;width:100% !important}\n  .mkt-panel{border:none !important;box-shadow:none !important;background:transparent !important}\n  .mkt-table tr{background:#fff !important;border:1px solid var(--mkt-line) !important;border-radius:14px !important;box-shadow:var(--mkt-shadow) !important;margin:12px 0 !important;overflow:hidden !important}\n  .mkt-td{display:flex !important;justify-content:space-between !important;align-items:center !important;gap:12px !important;padding:12px 14px !important;border-bottom:1px solid var(--mkt-line) !important}\n  .mkt-td:last-child{border-bottom:none !important}\n  .mkt-td:first-child{background:#fbfdff !important;font-weight:800 !important;font-size:16px !important;border-bottom:1px solid var(--mkt-line) !important}\n  .mkt-td[data-label]:before{content:attr(data-label);color:var(--mkt-muted);font-weight:700;margin-right:16px;flex:1 1 auto;text-align:left}\n  .mkt-td[data-label]{text-align:right}\n  .mkt-td .mkt-chip{width:100%}\n  .mkt-hide-5,.mkt-hide-6,.mkt-hide-7,.mkt-hide-8{display:flex !important}\n}\n<\/style>\n\n<script>\n(function(){\n  \"use strict\";\n\n  \/\/ Root & config from data-attributes (keys optional)\n  var root = document.getElementById('mkt-root'); if(!root) return;\n  var MKT_CONFIG = {\n    FINNHUB_KEY: (root.getAttribute('data-fh-key') || \"\").trim(),\n    FMP_KEY:     (root.getAttribute('data-fmp-key') || \"\").trim(),\n    BROKER_URL:  (root.getAttribute('data-broker-url') || \"https:\/\/yourbroker.com\/trade?symbol=\").trim()\n  };\n\n  \/\/ Preconnects (performance)\n  ['https:\/\/api.exchangerate.host','https:\/\/open.er-api.com','https:\/\/api.binance.com','https:\/\/finnhub.io','https:\/\/financialmodelingprep.com','https:\/\/api.frankfurter.app','https:\/\/r.jina.ai','https:\/\/stooq.com','https:\/\/query1.finance.yahoo.com']\n    .forEach(function(h){var l=document.createElement('link');l.rel='preconnect';l.href=h;document.head.appendChild(l)});\n\n  \/\/ Promise.any polyfill (subset)\n  if (typeof Promise.any !== \"function\") {\n    Promise.any = function(iterable){\n      return new Promise(function(resolve, reject){\n        var errors = [];\n        var pending = 0;\n        var seen = false;\n        for (const p of iterable) {\n          seen = true;\n          pending++;\n          Promise.resolve(p).then(resolve, function(err){\n            errors.push(err);\n            if (--pending === 0) reject(errors.length ? errors[0] : new Error(\"All rejected\"));\n          });\n        }\n        if (!seen) reject(new Error(\"No promises\"));\n      });\n    };\n  }\n\n  \/\/ Utils\n  function nf(d){try{return new Intl.NumberFormat(undefined,{minimumFractionDigits:d,maximumFractionDigits:d})}catch(e){return{format:function(n){return Number(n).toFixed(d)}}}}\n  function fmt(n,d){return nf(d||2).format(Number(n))}\n  function colorize(el,v){if(!el)return;el.classList.remove('mkt-up','mkt-down');if(v>0)el.classList.add('mkt-up');else if(v<0)el.classList.add('mkt-down')}\n  function fastFetch(url,ms){var c;try{c=new AbortController()}catch(e){};var to=setTimeout(function(){try{c&&c.abort&&c.abort()}catch(e){}},ms||1600);var o={cache:'no-store'};if(c&&c.signal)o.signal=c.signal;var p=fetch(url,o);return(p.finally?p.finally(function(){clearTimeout(to)}):p.then(function(r){clearTimeout(to);return r},function(e){clearTimeout(to);throw e}))}\n  function withRetry(fn, tries){tries = tries || 2; return fn().catch(function(err){ if(tries<=1) throw err; return new Promise(function(res){ setTimeout(res, 150 + Math.random()*250); }).then(function(){ return withRetry(fn, tries-1); }); });}\n  function cacheSet(k,v,ttl){try{localStorage.setItem(k,JSON.stringify({t:Date.now(),ttl:ttl||0,v:v}))}catch(e){}}\n  function cacheGetFresh(k){try{var o=JSON.parse(localStorage.getItem(k)||'');if(o&&(!o.ttl||Date.now()-o.t<o.ttl))return o.v}catch(e){}return null}\n  function setPanelActive(el,active){ if(!el) return; el.setAttribute('aria-hidden', active?'false':'true'); if(active) el.setAttribute('aria-busy','true'); else el.removeAttribute('aria-busy'); }\n  function panelDone(id){ var p=document.getElementById('mkt-panel-'+id); if(p) p.removeAttribute('aria-busy'); }\n\n  \/\/ Finnhub helpers\n  function fhQuote(sym){return fastFetch('https:\/\/finnhub.io\/api\/v1\/quote?symbol='+encodeURIComponent(sym)+'&token='+encodeURIComponent(MKT_CONFIG.FINNHUB_KEY),2000).then(function(r){if(!r.ok)throw new Error('http');return r.json()})}\n  function readFH(q){var pc=Number(q.pc),c=Number(q.c);var val=(isFinite(c)&&c>0)?c:(isFinite(pc)?pc:NaN);var chg=(isFinite(pc)&&isFinite(val))?(val-pc):Number(q.d);var pct=(isFinite(pc)&&pc)?(chg\/pc)*100:Number(q.dp);return{val:val,chg:chg,pct:pct,op:Number(q.o),hi:Number(q.h),lo:Number(q.l),pv:pc}}\n\n  \/\/ Build panels\n  function panels(items){\n    var out=''; for(var i=0;i<items.length;i++){var p=items[i];\n      out+='<section role=\"tabpanel\" aria-labelledby=\"mkt-tab-'+p.id+'\" id=\"mkt-panel-'+p.id+'\" class=\"mkt-panel\" aria-hidden=\"'+(i===0?'false':'true')+'\">'\n        +'<div class=\"mkt-hdr\"><div class=\"mkt-title\">'+p.title+'<\/div><div class=\"mkt-source\" id=\"mkt-src-'+p.id+'\">'+p.src+'<\/div><\/div>'\n        +'<table class=\"mkt-table\"><thead><tr>'\n        +'<th class=\"mkt-th\" style=\"text-align:left\">Name<\/th>'\n        +'<th class=\"mkt-th\">Value<\/th><th class=\"mkt-th\">Change<\/th><th class=\"mkt-th\">Chg%<\/th>'\n        +'<th class=\"mkt-th mkt-hide-5\">Open<\/th><th class=\"mkt-th mkt-hide-6\">High<\/th><th class=\"mkt-th mkt-hide-7\">Low<\/th><th class=\"mkt-th mkt-hide-8\">Prev<\/th><th class=\"mkt-th\"><\/th>'\n        +'<\/tr><\/thead><tbody id=\"mkt-body-'+p.id+'\" aria-live=\"polite\"><tr><td class=\"mkt-td\" colspan=\"9\">Loading\u2026<\/td><\/tr><\/tbody><\/table>'\n        +'<div class=\"mkt-diag\" id=\"mkt-diag-'+p.id+'\" aria-live=\"polite\">Ready<\/div>'\n        +(p.id==='indices' ? '<div id=\"mkt-tv-indices\"><\/div>' : '')\n        +'<\/section>';\n    } return out;\n  }\n\n  function build(){\n    root.innerHTML =\n      '<div class=\"mkt-tabs\" role=\"tablist\" aria-label=\"Markets\">'\n      +'<button class=\"mkt-active\" role=\"tab\" aria-selected=\"true\" aria-controls=\"mkt-panel-forex\" id=\"mkt-tab-forex\" data-tab=\"forex\" type=\"button\">Forex<\/button>'\n      +'<button role=\"tab\" aria-selected=\"false\" aria-controls=\"mkt-panel-indices\" id=\"mkt-tab-indices\" data-tab=\"indices\" type=\"button\">Indices<\/button>'\n      +'<button role=\"tab\" aria-selected=\"false\" aria-controls=\"mkt-panel-crypto\" id=\"mkt-tab-crypto\" data-tab=\"crypto\" type=\"button\">Crypto<\/button>'\n      +'<button role=\"tab\" aria-selected=\"false\" aria-controls=\"mkt-panel-shares\" id=\"mkt-tab-shares\" data-tab=\"shares\" type=\"button\">Shares<\/button>'\n      +'<\/div>'\n      +panels([\n        {id:'forex',  title:'Forex',   src:'Finnhub WS (if key) + exchangerate.host (live) + frankfurter.app (prev)'},\n        {id:'indices',title:'Indices', src:'Stooq ETF (no key) \u2192 Yahoo ETF (no key) \u2192 Yahoo Chart (no key) \u2192 FMP \u2192 Finnhub ETF \u2192 TV fallback'},\n        {id:'crypto', title:'Crypto',  src:'Binance 24h ticker'},\n        {id:'shares', title:'Shares',  src:'Yahoo Quote \u2192 Yahoo Chart \u2192 Stooq CSV \u2192 FMP \u2192 Finnhub'}\n      ]).trim();\n\n    var tabs=root.querySelectorAll('.mkt-tabs button');\n    for(var i=0;i<tabs.length;i++){\n      tabs[i].addEventListener('click',function(){\n        var tab=this.getAttribute('data-tab');\n        for(var j=0;j<tabs.length;j++){var is=tabs[j]===this;tabs[j].classList.toggle('mkt-active',is);tabs[j].setAttribute('aria-selected',String(is));}\n        var p=root.querySelectorAll('.mkt-panel');for(j=0;j<p.length;j++){setPanelActive(p[j],p[j].id==='mkt-panel-'+tab);}\n        if(tab==='forex') bootForex();\n        if(tab==='indices') bootIndices();\n        if(tab==='crypto')  bootCrypto();\n        if(tab==='shares')  bootShares();\n      },{passive:true});\n    }\n  }\n\n  \/\/ ===== Row management (prevents duplicate rows) =====\n  var rowMaps={forex:{},indices:{},crypto:{},shares:{}};\n\n  \/\/ find an existing row in DOM\n  function getExistingRow(tab, key){\n    var body = document.getElementById('mkt-body-'+tab);\n    return body ? body.querySelector('tr[data-k=\"'+key+'\"]') : null;\n  }\n\n  \/\/ rebuild rowMaps from current DOM\n  function syncRowMap(tab){\n    var body = document.getElementById('mkt-body-'+tab);\n    if (!body) return;\n    rowMaps[tab] = rowMaps[tab] || {};\n    var rows = body.querySelectorAll('tr[data-k]');\n    rows.forEach(function(tr){\n      var k = tr.getAttribute('data-k');\n      if (k) rowMaps[tab][k] = tr;\n    });\n  }\n\n  \/\/ ensureRow reuses DOM if present\n  function ensureRow(tab,key,name,dp){\n    var m = rowMaps[tab] = rowMaps[tab] || {};\n    var tr = m[key] || getExistingRow(tab, key);\n    if (tr) { m[key] = tr; return tr; }\n\n    var body=document.getElementById('mkt-body-'+tab);\n    if(body.firstElementChild && body.firstElementChild.children.length===1) body.innerHTML='';\n\n    tr=document.createElement('tr'); tr.setAttribute('data-k',key); tr.setAttribute('data-dp',dp||2);\n    tr.innerHTML =\n      '<td class=\"mkt-td\" data-label=\"Name\">'+name+'<\/td>'\n     +'<td class=\"mkt-td mkt-num val\" data-label=\"Value\">\u2014<\/td>'\n     +'<td class=\"mkt-td mkt-num mkt-chg chg\" data-label=\"Change\">\u2014<\/td>'\n     +'<td class=\"mkt-td mkt-num mkt-chg pct\" data-label=\"Chg%\">\u2014<\/td>'\n     +'<td class=\"mkt-td mkt-num mkt-hide-5 op\" data-label=\"Open\">\u2014<\/td>'\n     +'<td class=\"mkt-td mkt-num mkt-hide-6 hi\" data-label=\"High\">\u2014<\/td>'\n     +'<td class=\"mkt-td mkt-num mkt-hide-7 lo\" data-label=\"Low\">\u2014<\/td>'\n     +'<td class=\"mkt-td mkt-num mkt-hide-8 pv\" data-label=\"Prev\">\u2014<\/td>'\n     +'<td class=\"mkt-td\" data-label=\"\"><button class=\"mkt-chip\" type=\"button\" aria-label=\"Trade '+name+'\" data-trade=\"'+key+'\">Trade<\/button><\/td>';\n    body.appendChild(tr); m[key]=tr;\n    return tr;\n  }\n\n  \/\/ Safer window.open (noopener)\n  document.addEventListener('click',function(e){\n    var btn=e.target && e.target.closest ? e.target.closest('button[data-trade]') : null; if(!btn || !root.contains(btn)) return;\n    var sym=btn.getAttribute('data-trade') || \"\"; var url=MKT_CONFIG.BROKER_URL+encodeURIComponent(sym);\n    var w=window.open(url,'_blank','noopener'); if(w) w.opener=null;\n  });\n\n  \/* ===================== FOREX ===================== *\/\n  var FX=[{k:'EURUSD',nm:'EUR\/USD',dp:5,fh:'OANDA:EUR_USD'},{k:'GBPUSD',nm:'GBP\/USD',dp:5,fh:'OANDA:GBP_USD'},{k:'USDJPY',nm:'USD\/JPY',dp:3,fh:'OANDA:USD_JPY'},{k:'AUDUSD',nm:'AUD\/USD',dp:5,fh:'OANDA:AUD_USD'},{k:'NZDUSD',nm:'NZD\/USD',dp:5,fh:'OANDA:NZD_USD'},{k:'USDCAD',nm:'USD\/CAD',dp:5,fh:'OANDA:USD_CAD'},{k:'USDCHF',nm:'USD\/CHF',dp:5,fh:'OANDA:USD_CHF'}];\n  var FH_MAP=(function(o){for(var i=0;i<FX.length;i++)o[FX[i].fh]=FX[i].k;return o})({});\n  var fxWS=null,fxWSOpen=false,fxLast=0,fxBooted=false,fxBurstStop=0;\n\n  function mapUSD(r){return{EURUSD:1\/Number(r.EUR),GBPUSD:1\/Number(r.GBP),USDJPY:Number(r.JPY),AUDUSD:1\/Number(r.AUD),NZDUSD:1\/Number(r.NZD),USDCAD:Number(r.CAD),USDCHF:Number(r.CHF)}}\n  function fxApply(sym,price){\n    var tr=document.getElementById('mkt-body-forex').querySelector('tr[data-k=\"'+sym+'\"]'); if(!tr) return;\n    var dp=Number(tr.getAttribute('data-dp'))||2;\n    tr.querySelector('.val').textContent=fmt(price,dp);\n    var pv=Number(tr.getAttribute('data-pv'));\n    if(isFinite(pv)){\n      var chg=price-pv,pct=pv?(chg\/pv)*100:NaN;\n      var tdC=tr.querySelector('.chg'),tdP=tr.querySelector('.pct');\n      tdC.textContent=(chg>=0?'+':'')+fmt(chg,dp);colorize(tdC,chg);\n      if(isFinite(pct)){tdP.textContent=(pct>=0?'+':'')+fmt(pct,2)+'%';colorize(tdP,pct)}else{tdP.textContent='\u2014';tdP.classList.remove('mkt-up','mkt-down')}\n      var hi=Number(tr.getAttribute('data-hi')),lo=Number(tr.getAttribute('data-lo'));\n      if(!isFinite(hi)||price>hi){tr.setAttribute('data-hi',price);tr.querySelector('.hi').textContent=fmt(price,dp)}\n      if(!isFinite(lo)||price<lo){tr.setAttribute('data-lo',price);tr.querySelector('.lo').textContent=fmt(price,dp)}\n    }\n    var snap=cacheGetFresh('mkt:fx:last')||{};snap[sym]={val:price,pv:Number(tr.getAttribute('data-pv'))||NaN,hi:Number(tr.getAttribute('data-hi'))||NaN,lo:Number(tr.getAttribute('data-lo'))||NaN,dp:dp,ts:Date.now()};\n    cacheSet('mkt:fx:last',snap,10*60*1000);\n  }\n  function fxSeedPrevFromCache(){var R=cacheGetFresh('mkt:fx:prev');if(!R)return false;var m=mapUSD(R);for(var i=0;i<FX.length;i++){var x=FX[i],pv=m[x.k],tr=ensureRow('forex',x.k,x.nm,x.dp);if(isFinite(pv)){tr.setAttribute('data-pv',pv);tr.setAttribute('data-hi',pv);tr.setAttribute('data-lo',pv);tr.querySelector('.pv').textContent=fmt(pv,x.dp);tr.querySelector('.op').textContent=fmt(pv,x.dp);tr.querySelector('.hi').textContent=fmt(pv,x.dp);tr.querySelector('.lo').textContent=fmt(pv,x.dp)}}return true}\n  function fxPaintValsFromCache(){\n    var t=cacheGetFresh('mkt:fx:tbody');\n    if(t){\n      document.getElementById('mkt-body-forex').innerHTML=t;\n      syncRowMap('forex');               \/\/ prevent duplicate rows after cache restore\n      return true;\n    }\n    var s=cacheGetFresh('mkt:fx:last');if(!s) return false;\n    for(var i=0;i<FX.length;i++){\n      var x=FX[i], z=s[x.k]; if(!z) continue;\n      var tr = getExistingRow('forex', x.k) || ensureRow('forex',x.k,x.nm,x.dp);\n      if(isFinite(z.pv)){tr.setAttribute('data-pv',z.pv);tr.querySelector('.pv').textContent=fmt(z.pv,x.dp);tr.querySelector('.op').textContent=fmt(z.pv,x.dp)}\n      if(isFinite(z.hi))tr.querySelector('.hi').textContent=fmt(z.hi,x.dp);\n      if(isFinite(z.lo))tr.querySelector('.lo').textContent=fmt(z.lo,x.dp);\n      fxApply(x.k,z.val);\n    }\n    syncRowMap('forex');                 \/\/ keep map in sync\n    return true;\n  }\n  function fxPrevBusiness(){var now=new Date(),start=new Date(now.getTime()-10*24*60*60*1000);var range=start.toISOString().slice(0,10)+'..'+now.toISOString().slice(0,10);var url='https:\/\/api.frankfurter.app\/'+range+'?from=USD&to=EUR,GBP,JPY,AUD,CAD,CHF,NZD';return withRetry(function(){return fastFetch(url,2500).then(function(r){if(!r.ok)throw new Error('http');return r.json()})},2).then(function(j){var by=j&&j.rates||{},dates=[],k;for(k in by)if(by.hasOwnProperty(k))dates.push(k);dates.sort();if(dates.length<2)return;var prev=by[dates[dates.length-2]];cacheSet('mkt:fx:prev',prev,48*60*60*1000);fxSeedPrevFromCache();panelDone('forex')},function(){panelDone('forex')})}\n  function fxLiveREST(){var p1=withRetry(function(){return fastFetch('https:\/\/api.exchangerate.host\/latest?base=USD&symbols=EUR,GBP,JPY,AUD,CAD,CHF,NZD',1600).then(function(r){if(!r.ok)throw new Error('http');return r.json()}).then(function(j){return j.rates})},2);var p2=withRetry(function(){return fastFetch('https:\/\/open.er-api.com\/v6\/latest\/USD',1600).then(function(r){if(!r.ok)throw new Error('http');return r.json()}).then(function(j){return j.rates})},2);return Promise.any([p1,p2]).then(function(R){var m=mapUSD(R),k;for(k in m)if(m.hasOwnProperty(k)&&isFinite(m[k]))fxApply(k,m[k]);panelDone('forex')},function(){panelDone('forex')})}\n  function startFXWS(){if(!MKT_CONFIG.FINNHUB_KEY||fxWS)return;try{fxWS=new WebSocket('wss:\/\/ws.finnhub.io?token='+encodeURIComponent(MKT_CONFIG.FINNHUB_KEY));fxWS.onopen=function(){fxWSOpen=true;fxLast=Date.now();for(var i=0;i<FX.length;i++)fxWS.send(JSON.stringify({type:'subscribe',symbol:FX[i].fh}))};fxWS.onmessage=function(ev){try{var m=JSON.parse(ev.data);if(m.type==='trade'&&m.data){for(var i=0;i<m.data.length;i++){var t=m.data[i],sym=FH_MAP[t.s];if(sym&&isFinite(t.p)){fxLast=Date.now();fxApply(sym,Number(t.p))}}}}catch(e){}};fxWS.onclose=function(){fxWSOpen=false;fxWS=null}}catch(e){}}\n  function stopFXWS(){try{if(fxWS){fxWS.close(1000,'hidden');fxWS=null;fxWSOpen=false}}catch(e){}}\n  function bootForex(){if(fxBooted)return;fxBooted=true;var body=document.getElementById('mkt-body-forex');if(!body.querySelector('tr[data-k]')){for(var i=0;i<FX.length;i++)ensureRow('forex',FX[i].k,FX[i].nm,FX[i].dp)}fxPaintValsFromCache()||fxSeedPrevFromCache();startFXWS();(Promise.allSettled?Promise.allSettled([fxPrevBusiness(),fxLiveREST()]):(fxPrevBusiness(),fxLiveREST()));setTimeout(fxLiveREST,1200);fxBurstStop=Date.now()+9000;(function burst(){if(document.hidden)return;if(Date.now()>fxBurstStop)return;fxLiveREST().then(function(){setTimeout(burst,900)})})()}\n\n  \/* ===================== INDICES ===================== *\/\n  var IDX=[{k:'^GSPC',nm:'S&P 500'},{k:'^NDX',nm:'Nasdaq 100'},{k:'^DJI',nm:'Dow Jones'},{k:'^FTSE',nm:'FTSE 100'},{k:'^GDAXI',nm:'DAX'}];\n  var idxBooted=false;\n\n  function idx_apply(tr,val,chg,pct,op,hi,lo,pv){\n    tr.querySelector('.val').textContent=isFinite(val)?fmt(val,2):'\u2014';\n    var tdC=tr.querySelector('.chg'),tdP=tr.querySelector('.pct');\n    if(isFinite(chg)){tdC.textContent=(chg>=0?'+':'')+fmt(chg,2);colorize(tdC,chg)}else tdC.textContent='\u2014';\n    if(isFinite(pct)){tdP.textContent=(pct>=0?'+':'')+fmt(pct,2)+'%';colorize(tdP,pct)}else tdP.textContent='\u2014';\n    tr.querySelector('.op').textContent=isFinite(op)?fmt(op,2):'\u2014';\n    tr.querySelector('.hi').textContent=isFinite(hi)?fmt(hi,2):'\u2014';\n    tr.querySelector('.lo').textContent=isFinite(lo)?fmt(lo,2):'\u2014';\n    tr.querySelector('.pv').textContent=isFinite(pv)?fmt(pv,2):'\u2014';\n  }\n  function idx_diag(msg){var el=document.getElementById('mkt-diag-indices');if(el)el.textContent=msg}\n\n  \/\/ Stooq ETF (CSV, no key)\n  function idx_fetch_stooq_csv(){\n    idx_diag('Indices: fetching Stooq CSV\u2026');\n    var list=['spy.us','qqq.us','dia.us','ewu.us','ewg.us'], back={'spy.us':'^GSPC','qqq.us':'^NDX','dia.us':'^DJI','ewu.us':'^FTSE','ewg.us':'^GDAXI'};\n    var url='https:\/\/r.jina.ai\/https:\/\/stooq.com\/q\/l\/?s='+list.join(',')+'&f=sd2t2ohlcv&h&e=csv';\n    return withRetry(function(){return fastFetch(url,3000).then(function(r){return r.text()})},2).then(function(csv){\n      var lines=csv.trim().split(\/\\r?\\n\/); if(lines.length<2) throw new Error('csv-empty');\n      var hdr=lines[0].toLowerCase().split(','), idxS=hdr.indexOf('symbol'), iO=hdr.indexOf('open'), iH=hdr.indexOf('high'), iL=hdr.indexOf('low'), iC=hdr.indexOf('close');\n      var out={};\n      for(var i=1;i<lines.length;i++){\n        var cols=lines[i].split(','), s=(cols[idxS]||'').toLowerCase();\n        var key=back[s]; if(!key) continue;\n        var op=Number(cols[iO]), hi=Number(cols[iH]), lo=Number(cols[iL]), cl=Number(cols[iC]);\n        var chg=(isFinite(cl)&&isFinite(op))?(cl-op):NaN, pct=(isFinite(chg)&&isFinite(op)&&op)?(chg\/op)*100:NaN;\n        out[key]={val:cl,chg:chg,pct:pct,op:op,hi:hi,lo:lo,pv:NaN};\n      }\n      if(!Object.keys(out).length) throw new Error('csv-parsed-empty');\n      idx_diag('Indices: Stooq CSV OK');\n      return out;\n    });\n  }\n\n  \/\/ Yahoo ETF (no key)\n  var ETF_MAP={'^GSPC':'SPY','^NDX':'QQQ','^DJI':'DIA','^FTSE':'EWU','^GDAXI':'EWG'};\n  function idx_fetch_yahoo(){\n    idx_diag('Indices: fetching Yahoo ETF\u2026');\n    return withRetry(function(){\n      var syms=Object.values(ETF_MAP).join(',');\n      var url='https:\/\/r.jina.ai\/https:\/\/query1.finance.yahoo.com\/v7\/finance\/quote?symbols='+encodeURIComponent(syms);\n      return fastFetch(url,3000).then(function(r){return r.text()});\n    },2).then(function(txt){\n      var j={};try{j=JSON.parse(txt||'{}')}catch(e){}\n      var res=(j&&j.quoteResponse&&j.quoteResponse.result)||[];\n      var by={},i,q;for(i=0;i<res.length;i++){q=res[i]||{};by[q.symbol]=q}\n      var out={},k,s;for(k in ETF_MAP){s=ETF_MAP[k];q=by[s]||{};\n        var val=Number(q.regularMarketPrice), op=Number(q.regularMarketOpen), hi=Number(q.regularMarketDayHigh), lo=Number(q.regularMarketDayLow), pv=Number(q.regularMarketPreviousClose);\n        var chg=isFinite(val)&&isFinite(pv)?(val-pv):Number(q.regularMarketChange);\n        var pct=isFinite(chg)&&isFinite(pv)&&pv?(chg\/pv)*100:Number(q.regularMarketChangePercent);\n        if(isFinite(val)) out[k]={val:val,chg:chg,pct:pct,op:op,hi:hi,lo:lo,pv:pv};\n      }\n      if(!Object.keys(out).length) throw new Error('yahoo-empty');\n      idx_diag('Indices: Yahoo ETF OK');\n      return out;\n    });\n  }\n\n  \/\/ Yahoo Chart (no key)\n  function idx_fetch_yahoo_chart(){\n    idx_diag('Indices: fetching Yahoo chart\u2026');\n    function one(sym){\n      var u='https:\/\/r.jina.ai\/https:\/\/query1.finance.yahoo.com\/v8\/finance\/chart\/'+encodeURIComponent(sym)+'?interval=1d&range=5d';\n      return withRetry(function(){return fastFetch(u,3000).then(function(r){ return r.text(); })},2)\n        .then(function(t){\n          var j={}; try{ j=JSON.parse(t||'{}'); }catch(e){}\n          var res = (((j||{}).chart||{}).result||[])[0] || {};\n          var meta = res.meta || {};\n          var q = (res.indicators && res.indicators.quote && res.indicators.quote[0]) || {};\n          var closes = (q.close || []).filter(function(x){ return Number.isFinite(x); });\n          var val = Number(meta.regularMarketPrice);\n          if(!isFinite(val)) val = closes[closes.length-1];\n          var pv  = Number(meta.chartPreviousClose || meta.previousClose);\n          var op  = (q.open || []).slice().reverse().find(Number.isFinite);\n          var hi  = (q.high || []).reduce(function(a,b){ return (Number.isFinite(b) && b>a)?b:a; }, -Infinity); if(!isFinite(hi)) hi=NaN;\n          var lo  = (q.low  || []).reduce(function(a,b){ return (Number.isFinite(b) && b<a)?b:a; },  Infinity); if(!isFinite(lo)) lo=NaN;\n          var chg = (isFinite(val)&&isFinite(pv)) ? (val-pv) : NaN;\n          var pct = (isFinite(chg)&&isFinite(pv)&&pv) ? (chg\/pv)*100 : NaN;\n          return { sym:sym, val:val, chg:chg, pct:pct, op:op, hi:hi, lo:lo, pv:pv };\n        })\n        .catch(function(){ return null; });\n    }\n    var symbols = ['SPY','QQQ','DIA','EWU','EWG'];\n    var REV = {SPY:'^GSPC', QQQ:'^NDX', DIA:'^DJI', EWU:'^FTSE', EWG:'^GDAXI'};\n    return Promise.all(symbols.map(one)).then(function(list){\n      var out = {};\n      list.forEach(function(r){\n        if(r && Number.isFinite(r.val)){\n          out[REV[r.sym]] = { val:r.val, chg:r.chg, pct:r.pct, op:r.op, hi:r.hi, lo:r.lo, pv:r.pv };\n        }\n      });\n      if(!Object.keys(out).length) throw new Error('yahoo-chart-empty');\n      idx_diag('Indices: Yahoo chart OK');\n      return out;\n    });\n  }\n\n  \/\/ FMP (key)\n  function idx_fetch_fmp(){\n    if(!MKT_CONFIG.FMP_KEY) return Promise.reject('no-fmp');\n    var syms=IDX.map(function(x){return encodeURIComponent(x.k)}).join(',');\n    var url='https:\/\/financialmodelingprep.com\/api\/v3\/quote\/'+syms+'?apikey='+encodeURIComponent(MKT_CONFIG.FMP_KEY);\n    return withRetry(function(){return fastFetch(url,2500).then(function(r){if(!r.ok)throw new Error('http');return r.json()})},2)\n    .then(function(arr){\n      var by={},out={},i,q,pc,val,chg,pct;\n      for(i=0;i<(arr||[]).length;i++){q=arr[i];by[q.symbol]=q}\n      for(i=0;i<IDX.length;i++){\n        q=by[IDX[i].k]||{};\n        val=Number(q.price||q.previousClose||q.open||q.dayHigh||q.dayLow);\n        pc =Number(q.previousClose||(isFinite(q.price)&&isFinite(q.change)&&q.price-q.change)||NaN);\n        chg=(isFinite(val)&&isFinite(pc))?val-pc:Number(q.change);\n        pct=(isFinite(chg)&&pc)?(chg\/pc)*100:Number(String(q.changesPercentage||'').replace('%',''));\n        if(isFinite(val)) out[IDX[i].k]={val:val,chg:chg,pct:pct,op:Number(q.open),hi:Number(q.dayHigh),lo:Number(q.dayLow),pv:pc};\n      }\n      if(!Object.keys(out).length) throw new Error('fmp-empty');\n      return out;\n    });\n  }\n\n  \/\/ Finnhub ETF (key)\n  function idx_fetch_etf(){\n    if(!MKT_CONFIG.FINNHUB_KEY) return Promise.reject('no-fh');\n    var tasks=[],out={};\n    Object.keys(ETF_MAP).forEach(function(k){tasks.push(fhQuote(ETF_MAP[k]).then(function(q){out[k]=readFH(q)}))});\n    return Promise.all(tasks).then(function(){return out});\n  }\n\n  function idx_merge_and_paint(results){\n    var best={},i,k;\n    for(i=0;i<results.length;i++){\n      if(results[i] && results[i].status==='fulfilled'){\n        var v=results[i].value; for(k in v){ if(v.hasOwnProperty(k) && isFinite(v[k].val)) best[k]=v[k]; }\n      }\n    }\n    for(i=0;i<IDX.length;i++){\n      var key=IDX[i].k, tr=document.getElementById('mkt-body-indices').querySelector('tr[data-k=\"'+key+'\"]');\n      if(!tr) tr=ensureRow('indices',key,IDX[i].nm,2);\n      var d=best[key]||{};\n      idx_apply(tr,d.val,d.chg,d.pct,d.op,d.hi,d.lo,d.pv);\n    }\n    cacheSet('mkt:idx:tbody',document.getElementById('mkt-body-indices').innerHTML,20*60*1000);\n\n    \/\/ If still no numbers, render TradingView fallback\n    var anyVal=false, cells=document.querySelectorAll('#mkt-body-indices td.val');\n    for(i=0;i<cells.length;i++){ if(cells[i].textContent.trim()!=='\u2014'){ anyVal=true; break; } }\n    if(!anyVal) renderTVFallback();\n    panelDone('indices');\n  }\n\n  function renderTVFallback(){\n    var host=document.getElementById('mkt-tv-indices');\n    if(!host) return;\n    host.innerHTML='<div style=\"margin:10px 0;color:#466;font-size:12px\">All index data sources were blocked or empty; showing TradingView widget as a fallback.<\/div><div class=\"tradingview-widget-container\" id=\"tv-w\"><\/div>';\n    var s=document.createElement('script');\n    s.src='https:\/\/s3.tradingview.com\/external-embedding\/embed-widget-symbol-overview.js'; s.async=true;\n    s.innerHTML=JSON.stringify({\n      symbols:[ [\"SPY\",\"SPY\"], [\"QQQ\",\"QQQ\"], [\"DIA\",\"DIA\"], [\"EWU\",\"EWU\"], [\"EWG\",\"EWG\"] ],\n      chartOnly:false, width:\"100%\", height:\"420\", locale:\"en\", colorTheme:\"light\",\n      showVolume:true, showMA:false, hideDateRanges:false, hideMarketStatus:false, autosize:true\n    });\n    document.getElementById('tv-w').appendChild(s);\n  }\n\n  function bootIndices(){\n    if(idxBooted) return; idxBooted=true;\n    var body=document.getElementById('mkt-body-indices'); body.innerHTML='';\n    for(var i=0;i<IDX.length;i++) ensureRow('indices',IDX[i].k,IDX[i].nm,2);\n\n    var tasks=[\n      idx_fetch_stooq_csv()['catch'](function(){return {}}),\n      idx_fetch_yahoo()['catch'](function(){return {}}),\n      idx_fetch_yahoo_chart()['catch'](function(){return {}}),\n      idx_fetch_fmp()['catch'](function(){return {}}),\n      idx_fetch_etf()['catch'](function(){return {}})\n    ];\n    (Promise.allSettled?Promise.allSettled(tasks):Promise.all(tasks.map(function(p){return p.then(function(v){return{status:'fulfilled',value:v}},function(){return{status:'rejected'}})})))\n      .then(idx_merge_and_paint);\n  }\n  function refreshIndicesOnce(){\n    Promise.allSettled([idx_fetch_stooq_csv(),idx_fetch_yahoo(),idx_fetch_yahoo_chart(),idx_fetch_fmp(),idx_fetch_etf()]).then(idx_merge_and_paint);\n  }\n\n  \/* ===================== CRYPTO ===================== *\/\n  var CR=[{k:'BTCUSDT',nm:'BTC\/USDT'},{k:'ETHUSDT',nm:'ETH\/USDT'},{k:'SOLUSDT',nm:'SOL\/USDT'},{k:'XRPUSDT',nm:'XRP\/USDT'},{k:'BNBUSDT',nm:'BNB\/USDT'}];\n  var cryptoBooted=false;\n  function bootCrypto(){if(cryptoBooted)return;cryptoBooted=true;var c=cacheGetFresh('mkt:cr:tbody');if(c){document.getElementById('mkt-body-crypto').innerHTML=c;}else{document.getElementById('mkt-body-crypto').innerHTML='';CR.forEach(function(x){ensureRow('crypto',x.k,x.nm,2)})}cryptoTick();}\n  function cryptoTick(){var syms=CR.map(function(x){return x.k});withRetry(function(){return fastFetch('https:\/\/api.binance.com\/api\/v3\/ticker\/24hr?symbols='+encodeURIComponent(JSON.stringify(syms)),2500).then(function(r){return r.json()})},2).then(function(arr){var by={};(arr||[]).forEach(function(o){by[o.symbol]=o});if(!document.getElementById('mkt-body-crypto').querySelector('tr[data-k]')){CR.forEach(function(x){ensureRow('crypto',x.k,x.nm,2)})}CR.forEach(function(x){var tr=document.getElementById('mkt-body-crypto').querySelector('tr[data-k=\"'+x.k+'\"]'),o=by[x.k]||{};var val=Number(o.lastPrice),chg=Number(o.priceChange),pct=Number(o.priceChangePercent);var op=Number(o.openPrice),hi=Number(o.highPrice),lo=Number(o.lowPrice);tr.querySelector('.val').textContent=isFinite(val)?fmt(val,2):'\u2014';var tdC=tr.querySelector('.chg'),tdP=tr.querySelector('.pct');if(isFinite(chg)){tdC.textContent=(chg>=0?'+':'')+fmt(chg,2);colorize(tdC,chg)}else tdC.textContent='\u2014';if(isFinite(pct)){tdP.textContent=(pct>=0?'+':'')+fmt(pct,2)+'%';colorize(tdP,pct)}else tdP.textContent='\u2014';tr.querySelector('.op').textContent=isFinite(op)?fmt(op,2):'\u2014';tr.querySelector('.hi').textContent=isFinite(hi)?fmt(hi,2):'\u2014';tr.querySelector('.lo').textContent=isFinite(lo)?fmt(lo,2):'\u2014';tr.querySelector('.pv').textContent=isFinite(val-chg)?fmt(val-chg,2):'\u2014'});cacheSet('mkt:cr:tbody',document.getElementById('mkt-body-crypto').innerHTML,20*60*1000);panelDone('crypto')},function(){panelDone('crypto')})}\n\n  \/* ===================== SHARES ===================== *\/\n  var SH=[{k:'AAPL',nm:'Apple'},{k:'MSFT',nm:'Microsoft'},{k:'NVDA',nm:'NVIDIA'},{k:'AMZN',nm:'Amazon'},{k:'TSLA',nm:'Tesla'}];\n  var shBooted=false;\n\n  function sharesSetSrc(s){var el=document.getElementById('mkt-src-shares');if(el)el.textContent=s;}\n  function sharesApply(k,d){\n    var tr=document.getElementById('mkt-body-shares').querySelector('tr[data-k=\"'+k+'\"]')||ensureRow('shares',k,k,2);\n    tr.querySelector('.val').textContent=isFinite(d.val)?fmt(d.val,2):'\u2014';\n    var tdC=tr.querySelector('.chg'),tdP=tr.querySelector('.pct');\n    if(isFinite(d.chg)){tdC.textContent=(d.chg>=0?'+':'')+fmt(d.chg,2);colorize(tdC,d.chg)}else tdC.textContent='\u2014';\n    if(isFinite(d.pct)){tdP.textContent=(d.pct>=0?'+':'')+fmt(d.pct,2)+'%';colorize(tdP,d.pct)}else tdP.textContent='\u2014';\n    tr.querySelector('.op').textContent=isFinite(d.op)?fmt(d.op,2):'\u2014';\n    tr.querySelector('.hi').textContent=isFinite(d.hi)?fmt(d.hi,2):'\u2014';\n    tr.querySelector('.lo').textContent=isFinite(d.lo)?fmt(d.lo,2):'\u2014';\n    tr.querySelector('.pv').textContent=isFinite(d.pv)?fmt(d.pv,2):'\u2014';\n  }\n\n  \/\/ 1) Yahoo Quote (no key)\n  function sharesYahooQuote(){\n    sharesSetSrc('Yahoo Quote (no key) \u2192 Yahoo Chart \u2192 Stooq CSV \u2192 FMP \u2192 Finnhub');\n    var syms=SH.map(function(x){return x.k}).join(',');\n    var url='https:\/\/r.jina.ai\/https:\/\/query1.finance.yahoo.com\/v7\/finance\/quote?symbols='+encodeURIComponent(syms);\n    return withRetry(function(){return fastFetch(url,3000).then(function(r){return r.text()})},2).then(function(txt){\n      var j={};try{j=JSON.parse(txt||'{}')}catch(e){}\n      var arr=(j&&j.quoteResponse&&j.quoteResponse.result)||[];\n      var out={},q;\n      for(var i=0;i<arr.length;i++){\n        q=arr[i]||{};\n        var val=Number(q.regularMarketPrice),\n            pv =Number(q.regularMarketPreviousClose),\n            chg=isFinite(val)&&isFinite(pv)?(val-pv):Number(q.regularMarketChange),\n            pct=isFinite(chg)&&isFinite(pv)&&pv?(chg\/pv)*100:Number(q.regularMarketChangePercent),\n            op =Number(q.regularMarketOpen),\n            hi =Number(q.regularMarketDayHigh),\n            lo =Number(q.regularMarketDayLow);\n        if(isFinite(val)) out[q.symbol]={val:val,chg:chg,pct:pct,op:op,hi:hi,lo:lo,pv:pv};\n      }\n      if(!Object.keys(out).length) throw new Error('yahoo-quote-empty');\n      return out;\n    });\n  }\n\n  \/\/ 2) Yahoo Chart (no key)\n  function sharesYahooChart(){\n    sharesSetSrc('Yahoo Chart (no key) \u2192 Stooq CSV \u2192 FMP \u2192 Finnhub');\n    function one(sym){\n      var u='https:\/\/r.jina.ai\/https:\/\/query1.finance.yahoo.com\/v8\/finance\/chart\/'+encodeURIComponent(sym)+'?interval=1d&range=5d';\n      return withRetry(function(){return fastFetch(u,3000).then(function(r){return r.text()})},2).then(function(t){\n        var j={}; try{j=JSON.parse(t||'{}') }catch(e){}\n        var res=(((j||{}).chart||{}).result||[])[0]||{};\n        var meta=res.meta||{};\n        var q=(res.indicators&&res.indicators.quote&&res.indicators.quote[0])||{};\n        var closes=(q.close||[]).filter(function(x){return Number.isFinite(x)});\n        var val=Number(meta.regularMarketPrice); if(!isFinite(val)) val=closes[closes.length-1];\n        var pv =Number(meta.chartPreviousClose||meta.previousClose);\n        var op =(q.open||[]).slice().reverse().find(Number.isFinite);\n        var hi =(q.high||[]).reduce(function(a,b){return (Number.isFinite(b)&&b>a)?b:a},-Infinity); if(!isFinite(hi)) hi=NaN;\n        var lo =(q.low ||[]).reduce(function(a,b){return (Number.isFinite(b)&&b<a)?b:a}, Infinity); if(!isFinite(lo)) lo=NaN;\n        var chg=(isFinite(val)&&isFinite(pv))?(val-pv):NaN;\n        var pct=(isFinite(chg)&&isFinite(pv)&&pv)?(chg\/pv)*100:NaN;\n        return {sym:sym,val:val,chg:chg,pct:pct,op:op,hi:hi,lo:lo,pv:pv};\n      })[\"catch\"](function(){return null});\n    }\n    return Promise.all(SH.map(function(x){return one(x.k)})).then(function(list){\n      var out={}; list.forEach(function(r){ if(r&&isFinite(r.val)) out[r.sym]={val:r.val,chg:r.chg,pct:r.pct,op:r.op,hi:r.hi,lo:r.lo,pv:r.pv}; });\n      if(!Object.keys(out).length) throw new Error('yahoo-chart-empty');\n      return out;\n    });\n  }\n\n  \/\/ 3) Stooq CSV (no key)\n  function sharesStooqCSV(){\n    sharesSetSrc('Stooq (no key) \u2192 FMP \u2192 Finnhub');\n    var tickers=SH.map(function(x){return (x.k+'.us').toLowerCase()});\n    var url='https:\/\/r.jina.ai\/https:\/\/stooq.com\/q\/l\/?s='+tickers.join(',')+'&f=sd2t2ohlcv&h&e=csv';\n    return withRetry(function(){return fastFetch(url,3000).then(function(r){return r.text()})},2).then(function(csv){\n      var lines=csv.trim().split(\/\\r?\\n\/); if(lines.length<2) throw new Error('csv-empty');\n      var hdr=lines[0].toLowerCase().split(','), iS=hdr.indexOf('symbol'), iO=hdr.indexOf('open'), iH=hdr.indexOf('high'), iL=hdr.indexOf('low'), iC=hdr.indexOf('close');\n      var out={};\n      for(var i=1;i<lines.length;i++){\n        var cols=lines[i].split(','), s=(cols[iS]||'').toUpperCase().replace('.US','');\n        var op=Number(cols[iO]), hi=Number(cols[iH]), lo=Number(cols[iL]), cl=Number(cols[iC]);\n        var chg=(isFinite(cl)&&isFinite(op))?(cl-op):NaN, pct=(isFinite(chg)&&isFinite(op)&&op)?(chg\/op)*100:NaN;\n        if(isFinite(cl)) out[s]={val:cl,chg:chg,pct:pct,op:op,hi:hi,lo:lo,pv:NaN};\n      }\n      if(!Object.keys(out).length) throw new Error('stooq-empty');\n      return out;\n    });\n  }\n\n  \/\/ 4) FMP (key)\n  function sharesFMP(){\n    if(!MKT_CONFIG.FMP_KEY) return Promise.reject('no-fmp');\n    var list=SH.map(function(x){return x.k}).join(',');\n    var url='https:\/\/financialmodelingprep.com\/api\/v3\/quote\/'+list+'?apikey='+encodeURIComponent(MKT_CONFIG.FMP_KEY);\n    return withRetry(function(){return fastFetch(url,2500).then(function(r){if(!r.ok)throw new Error('http');return r.json()})},2).then(function(arr){\n      var out={}, by={}; (arr||[]).forEach(function(o){by[o.symbol]=o});\n      SH.forEach(function(x){\n        var q=by[x.k]||{}, val=Number(q.price||q.previousClose||q.open||q.dayHigh||q.dayLow);\n        var pv=Number(q.previousClose||(isFinite(q.price)&&isFinite(q.change)&&q.price-q.change)||NaN);\n        var chg=(isFinite(val)&&isFinite(pv))?val-pv:(isFinite(q.change)?Number(q.change):NaN);\n        var pct=(isFinite(chg)&&pv)?(chg\/pv)*100:(isFinite(q.changesPercentage)?Number(String(q.changesPercentage||'').replace('%','')):NaN);\n        if(isFinite(val)) out[x.k]={val:val,chg:chg,pct:pct,op:Number(q.open),hi:Number(q.dayHigh),lo:Number(q.dayLow),pv:pv};\n      });\n      if(!Object.keys(out).length) throw new Error('fmp-empty');\n      return out;\n    });\n  }\n\n  \/\/ 5) Finnhub (key)\n  function sharesFinnhub(){\n    if(!MKT_CONFIG.FINNHUB_KEY) return Promise.reject('no-fh');\n    var tasks=[], out={};\n    SH.forEach(function(x){tasks.push(fhQuote(x.k).then(function(q){out[x.k]=readFH(q)}))});\n    return Promise.all(tasks).then(function(){return out});\n  }\n\n  \/\/ merge + paint\n  function sharesMergeAndPaint(results){\n    var best={},i,k;\n    for(i=0;i<results.length;i++){\n      var r=results[i]; if(r && r.status==='fulfilled'){ var o=r.value||{}; for(k in o){ if(o.hasOwnProperty(k)&&isFinite(o[k].val)) best[k]=o[k]; } }\n    }\n    SH.forEach(function(x){ sharesApply(x.k, best[x.k]||{}); });\n    cacheSet('mkt:sh:tbody',document.getElementById('mkt-body-shares').innerHTML,20*60*1000);\n    panelDone('shares');\n  }\n\n  function bootShares(){\n    if(shBooted) return; shBooted=true;\n    var c=cacheGetFresh('mkt:sh:tbody');\n    if(c){ document.getElementById('mkt-body-shares').innerHTML=c; panelDone('shares'); }\n    else { document.getElementById('mkt-body-shares').innerHTML=''; SH.forEach(function(x){ensureRow('shares',x.k,x.nm,2)}); }\n    refreshSharesOnce();\n  }\n\n  function refreshSharesOnce(){\n    var tasks=[sharesYahooQuote(), sharesYahooChart(), sharesStooqCSV(), sharesFMP(), sharesFinnhub()];\n    (Promise.allSettled?Promise.allSettled(tasks):Promise.all(tasks.map(function(p){return p.then(function(v){return{status:'fulfilled',value:v}},function(){return{status:'rejected'}})})))\n      .then(sharesMergeAndPaint);\n  }\n\n  \/* ===== Boot & poll ===== *\/\n  function initialPaintAndReveal(){\n    var fxT=cacheGetFresh('mkt:fx:tbody'); \n    if(fxT){\n      document.getElementById('mkt-body-forex').innerHTML=fxT;\n      syncRowMap('forex');                 \/\/ <-- key line to avoid duplicate rows\n    }\n    var ixT=cacheGetFresh('mkt:idx:tbody'); if(ixT) document.getElementById('mkt-body-indices').innerHTML=ixT;\n    var crT=cacheGetFresh('mkt:cr:tbody'); if(crT) document.getElementById('mkt-body-crypto').innerHTML=crT;\n    var shT=cacheGetFresh('mkt:sh:tbody'); if(shT) document.getElementById('mkt-body-shares').innerHTML=shT;\n    if(!fxT){ document.getElementById('mkt-body-forex').innerHTML=''; FX.forEach(function(x){ensureRow('forex',x.k,x.nm,x.dp)}); fxPaintValsFromCache() || fxSeedPrevFromCache(); }\n    root.classList.remove('mkt-hidden');\n  }\n\n  var pollId=null;\n  function startPolling(){ if(pollId) return; pollId=setInterval(function(){\n    var act=root.querySelector('.mkt-tabs button.mkt-active'); var tab=act?act.getAttribute('data-tab'):'forex';\n    if(tab==='forex'){ var stale=!fxWSOpen || (Date.now()-fxLast>12000); if(stale) fxLiveREST(); }\n    if(tab==='indices') refreshIndicesOnce();\n    if(tab==='crypto')  cryptoTick();\n    if(tab==='shares')  refreshSharesOnce();\n  }, 9000); }\n  function stopPolling(){ if(pollId){ clearInterval(pollId); pollId=null; } }\n  document.addEventListener('visibilitychange', function(){ if(document.hidden){ stopPolling(); stopFXWS(); } else { startPolling(); if(!fxWS) startFXWS(); } });\n\n  function buildAndBoot(){ build(); initialPaintAndReveal(); bootForex(); startPolling(); }\n  buildAndBoot();\n})();\n<\/script>\n\n<noscript>\n  <div style=\"max-width:1180px;margin:12px auto;padding:12px 16px;background:#fff3cd;border:1px solid #ffeeba;border-radius:12px;color:#856404\">\n    JavaScript is disabled, so live markets can\u2019t load.\n  <\/div>\n<\/noscript>\n<\/div><\/div><\/div><\/div><\/div><div class=\"et_pb_section_2 et_pb_section et_section_regular et_block_section\"><div class=\"et_pb_row_1 et_pb_row et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_3 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_heading_3 et_pb_heading et_pb_module et_block_module preset--module--divi-heading--c33f07d9-41e0-421a-8799-5799df695cce\"><div class=\"et_pb_heading_container\"><h2 class=\"et_pb_module_header\">Why Trade Indices with Us?<\/h2><\/div><\/div><\/div><\/div><div class=\"et_pb_row_2 et_pb_row et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_4 et_pb_column et_pb_column_1_2 et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_blurb_0 et_pb_blurb et_pb_bg_layout_light et_pb_blurb_position_top et_pb_module et_block_module preset--module--divi-blurb--212b201d-2c34-41bd-936c-851b7357d08b\"><div class=\"et_pb_blurb_content\"><div class=\"et_pb_main_blurb_image\"><span class=\"et_pb_image_wrap\"><span class=\"et-pb-icon\">\uf555<\/span><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Low Spreads<\/h4><div class=\"et_pb_blurb_description\"><p>Benefit from some of the lowest spreads in the industry, maximizing your trading potential.<\/p>\n<\/div><\/div><\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_2_wrapper preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206_wrapper\"><a class=\"et_pb_button_2 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206\" href=\"\">Explore Spreads<\/a><\/div><\/div><div class=\"et_pb_column_5 et_pb_column et_pb_column_1_2 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_blurb_1 et_pb_blurb et_pb_bg_layout_light et_pb_blurb_position_top et_pb_module et_block_module preset--module--divi-blurb--212b201d-2c34-41bd-936c-851b7357d08b\"><div class=\"et_pb_blurb_content\"><div class=\"et_pb_main_blurb_image\"><span class=\"et_pb_image_wrap\"><span class=\"et-pb-icon\">\ue05a<\/span><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">High Leverage<\/h4><div class=\"et_pb_blurb_description\"><p>Access high leverage options to amplify your trading positions and potential returns.<\/p>\n<\/div><\/div><\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_3_wrapper preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206_wrapper\"><a class=\"et_pb_button_3 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206\" href=\"\">View Leverage Options<\/a><\/div><\/div><\/div><div class=\"et_pb_row_3 et_pb_row et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_6 et_pb_column et_pb_column_1_2 et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_blurb_2 et_pb_blurb et_pb_bg_layout_light et_pb_blurb_position_top et_pb_module et_block_module preset--module--divi-blurb--212b201d-2c34-41bd-936c-851b7357d08b\"><div class=\"et_pb_blurb_content\"><div class=\"et_pb_main_blurb_image\"><span class=\"et_pb_image_wrap\"><span class=\"et-pb-icon\">\uf2bb<\/span><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Global Market Access<\/h4><div class=\"et_pb_blurb_description\"><p>Trade indices from major global markets, including the US, Europe, and Asia.<\/p>\n<\/div><\/div><\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_4_wrapper preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206_wrapper\"><a class=\"et_pb_button_4 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206\" href=\"\">See Market List<\/a><\/div><\/div><div class=\"et_pb_column_7 et_pb_column et_pb_column_1_2 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_blurb_3 et_pb_blurb et_pb_bg_layout_light et_pb_blurb_position_top et_pb_module et_block_module preset--module--divi-blurb--212b201d-2c34-41bd-936c-851b7357d08b\"><div class=\"et_pb_blurb_content\"><div class=\"et_pb_main_blurb_image\"><span class=\"et_pb_image_wrap\"><span class=\"et-pb-icon\">\uf5ae<\/span><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Advanced Trading Tools<\/h4><div class=\"et_pb_blurb_description\"><p>Utilize cutting-edge trading tools and analytics to make informed trading decisions.<\/p>\n<\/div><\/div><\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_5_wrapper preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206_wrapper\"><a class=\"et_pb_button_5 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206\" href=\"\">Discover Tools<\/a><\/div><\/div><\/div><\/div><div class=\"et_pb_section_3 et_pb_section et_section_regular et_block_section\"><div class=\"et_pb_row_4 et_pb_row et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_8 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_heading_4 et_pb_heading et_pb_module et_block_module preset--module--divi-heading--c33f07d9-41e0-421a-8799-5799df695cce\"><div class=\"et_pb_heading_container\"><h2 class=\"et_pb_module_header\">Our Platform in Numbers<\/h2><\/div><\/div><div class=\"et_pb_text_2 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module et_pb_text_align_center preset--module--divi-text--2c55a9c4-feed-423b-9edb-ae0b5b365cac\"><div class=\"et_pb_text_inner\"><p>Trusted by traders worldwide<\/p>\n<\/div><\/div><\/div><\/div><div class=\"et_pb_row_5 et_pb_row et_pb_equal_columns et_pb_gutters2 et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_9 et_pb_column et_pb_column_1_2 et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_number_counter_0 et_pb_number_counter et_pb_bg_layout_light et_pb_text_align_left et_pb_module et_block_module ai_ignore_number preset--module--divi-number-counter--50c76ddc-5104-4016-a79b-7d6fb53c56d5\"><div class=\"percent\"><p><span class=\"percent-value\"><\/span><span class=\"percent-sign\"><\/span><\/p><\/div><\/div><div class=\"et_pb_divider_0 et_pb_divider et_pb_space et_pb_divider_position_top et_pb_module\"><div class=\"et_pb_divider_internal\"><\/div><\/div><div class=\"et_pb_blurb_4 et_pb_blurb et_pb_bg_layout_light et_pb_blurb_position_left et_pb_module et_block_module ai_ignore_title preset--module--divi-blurb--c4be762d-d134-408e-b49a-ae764af14c39\"><div class=\"et_pb_blurb_content\"><div class=\"et_pb_main_blurb_image et_animated\"><span class=\"et_pb_image_wrap\"><span class=\"et-pb-icon\">\uf0f1<\/span><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Statistic Title<\/h4><div class=\"et_pb_blurb_description\"><p>Over 50 global indices available for trading<\/p>\n<\/div><\/div><\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_6_wrapper preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206_wrapper\"><a class=\"et_pb_button_6 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206\" href=\"\">View Indices<\/a><\/div><\/div><div class=\"et_pb_column_10 et_pb_column et_pb_column_1_2 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_number_counter_1 et_pb_number_counter et_pb_bg_layout_light et_pb_text_align_left et_pb_module et_block_module ai_ignore_number preset--module--divi-number-counter--eb8e0a21-f73c-4e32-bc0c-e37d0ee934ba\"><div class=\"percent\"><p><span class=\"percent-value\"><\/span><span class=\"percent-sign\"><\/span><\/p><\/div><\/div><div class=\"et_pb_divider_1 et_pb_divider et_pb_space et_pb_divider_position_top et_pb_module\"><div class=\"et_pb_divider_internal\"><\/div><\/div><div class=\"et_pb_blurb_5 et_pb_blurb et_pb_bg_layout_light et_pb_blurb_position_left et_pb_module et_block_module ai_ignore_title preset--module--divi-blurb--bd45b1f0-c189-484c-8814-0ecca3ca7b0a\"><div class=\"et_pb_blurb_content\"><div class=\"et_pb_main_blurb_image et_animated\"><span class=\"et_pb_image_wrap\"><span class=\"et-pb-icon\">\uf28d<\/span><\/span><\/div><div class=\"et_pb_blurb_container\"><h4 class=\"et_pb_module_header\">Statistic Title<\/h4><div class=\"et_pb_blurb_description\"><p>Average trade execution speed: 0.05 seconds<\/p>\n<\/div><\/div><\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_7_wrapper preset--module--divi-button--ab15fb74-61a3-43aa-96b3-41e09aeef654_wrapper\"><a class=\"et_pb_button_7 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--ab15fb74-61a3-43aa-96b3-41e09aeef654\" href=\"\">Learn More<\/a><\/div><\/div><\/div><\/div><div class=\"et_pb_section_4 et_pb_section et_section_regular et_block_section\"><div class=\"et_pb_row_6 et_pb_row et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_11 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_slider_0 et_pb_slider et_pb_slider_fullwidth_off et_pb_module et_block_module preset--module--divi-slider--a0d0e114-2915-4078-81e1-4574521ea79b\"><div class=\"et_pb_slides\"><div class=\"et_pb_slide_0 et_pb_slide et_pb_media_alignment_center et_pb_bg_layout_dark et_pb_text_align_center\" data-slide-id=\"divi\/slide-0\"><div class=\"et_pb_container\"><div class=\"et_pb_slider_container_inner\"><div class=\"et_pb_slide_description\"><div class=\"et_pb_slide_content\"><p>John D.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"et_pb_slide_1 et_pb_slide et_pb_media_alignment_center et_pb_bg_layout_dark et_pb_text_align_center\" data-slide-id=\"divi\/slide-1\"><div class=\"et_pb_container\"><div class=\"et_pb_slider_container_inner\"><div class=\"et_pb_slide_description\"><div class=\"et_pb_slide_content\"><p>Sarah W.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"et_pb_slide_2 et_pb_slide et_pb_media_alignment_center et_pb_bg_layout_dark et_pb_text_align_center\" data-slide-id=\"divi\/slide-2\"><div class=\"et_pb_container\"><div class=\"et_pb_slider_container_inner\"><div class=\"et_pb_slide_description\"><div class=\"et_pb_slide_content\"><p>Michael T.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"et_pb_slide_3 et_pb_slide et_pb_media_alignment_center et_pb_bg_layout_dark et_pb_text_align_center\" data-slide-id=\"divi\/slide-3\"><div class=\"et_pb_container\"><div class=\"et_pb_slider_container_inner\"><div class=\"et_pb_slide_description\"><div class=\"et_pb_slide_content\"><p>Emily R.<\/p>\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"et_pb_section_5 et_pb_section et_section_regular et_block_section\"><div class=\"et_pb_row_7 et_pb_row et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_12 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_image_0 et_pb_image et_pb_module et_block_module preset--module--divi-image--6ed8fd5c-62c5-4100-98c3-7b8b6d2c2ee6\"><span class=\"et_pb_image_wrap\"><img data-recalc-dims=\"1\" height=\"600\" width=\"1080\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/tradeforexes.com\/wp-content\/uploads\/2024\/06\/0-b932d997-33a5-4cd7-9e07-b0d3dc03a2d4-1080x600.jpg?resize=1080%2C600&#038;ssl=1\" title=\"1080x600\" \/><\/span><\/div><\/div><\/div><div class=\"et_pb_row_8 et_pb_row et_block_row preset--module--divi-row--5138c454-be54-4233-bd3b-f8e6a8747976\"><div class=\"et_pb_column_13 et_pb_column et_pb_column_3_5 et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_heading_5 et_pb_heading et_pb_module et_block_module preset--module--divi-heading--c33f07d9-41e0-421a-8799-5799df695cce\"><div class=\"et_pb_heading_container\"><h2 class=\"et_pb_module_header\">Ready to Elevate Your Trading?<\/h2><\/div><\/div><\/div><div class=\"et_pb_column_14 et_pb_column et_pb_column_2_5 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough preset--module--divi-column--73121f80-a3ef-4484-8763-c3f18e3c56d2\"><div class=\"et_pb_heading_6 et_pb_heading et_pb_module et_block_module preset--module--divi-heading--a3805066-8711-43c7-9f62-5782da0e9f7a\"><div class=\"et_pb_heading_container\"><h5 class=\"et_pb_module_header\">Join tradeforexes.com today and start trading indices with confidence. Explore our platform's features and experience the difference.<\/h5><\/div><\/div><div class=\"et_pb_module et_pb_button_module_wrapper et_pb_button_8_wrapper preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206_wrapper\"><a class=\"et_pb_button_8 et_pb_button et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-button--1bffc0fc-42a0-49d1-bd9a-ae3ade2d7206\" href=\"\">Open an Account<\/a><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-2241","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=&quot;&quot; data-broker-url=&quot;https:\/\/yourbroker.com\/trade?symbol=&quot; JavaScript is disabled, so live markets can\u2019t load. Why Trade Indices with Us?\uf555Low SpreadsBenefit\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/tradeforexes.com\/en\/index-cfds\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"tradeForexes.com - Trade forex from 0.0 pips\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Index CFDs - tradeForexes.com\" \/>\n\t\t<meta property=\"og:description\" content=\"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=&quot;&quot; data-broker-url=&quot;https:\/\/yourbroker.com\/trade?symbol=&quot; JavaScript is disabled, so live markets can\u2019t load. Why Trade Indices with Us?\uf555Low SpreadsBenefit\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/tradeforexes.com\/en\/index-cfds\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2023-11-09T08:43:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-06-13T16:29:15+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Index CFDs - tradeForexes.com\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=&quot;&quot; data-broker-url=&quot;https:\/\/yourbroker.com\/trade?symbol=&quot; JavaScript is disabled, so live markets can\u2019t load. Why Trade Indices with Us?\uf555Low SpreadsBenefit\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/index-cfds\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/tradeforexes.com\\\/en\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/index-cfds\\\/#listItem\",\"name\":\"Index CFDs\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/index-cfds\\\/#listItem\",\"position\":2,\"name\":\"Index CFDs\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/#organization\",\"name\":\"tradeForexes.com\",\"description\":\"Trade forex from 0.0 pips\",\"url\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/index-cfds\\\/#webpage\",\"url\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/index-cfds\\\/\",\"name\":\"Index CFDs - tradeForexes.com\",\"description\":\"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=\\\"\\\" data-broker-url=\\\"https:\\\/\\\/yourbroker.com\\\/trade?symbol=\\\" JavaScript is disabled, so live markets can\\u2019t load. Why Trade Indices with Us?\\uf555Low SpreadsBenefit\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/index-cfds\\\/#breadcrumblist\"},\"datePublished\":\"2023-11-09T08:43:12+00:00\",\"dateModified\":\"2026-06-13T16:29:15+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/\",\"name\":\"tradeForexes.com\",\"description\":\"Trade forex from 0.0 pips\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/tradeforexes.com\\\/en\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Index CFDs - tradeForexes.com","description":"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=\"\" data-broker-url=\"https:\/\/yourbroker.com\/trade?symbol=\" JavaScript is disabled, so live markets can\u2019t load. Why Trade Indices with Us?\uf555Low SpreadsBenefit","canonical_url":"https:\/\/tradeforexes.com\/en\/index-cfds\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/tradeforexes.com\/en\/index-cfds\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/tradeforexes.com\/en#listItem","position":1,"name":"Home","item":"https:\/\/tradeforexes.com\/en","nextItem":{"@type":"ListItem","@id":"https:\/\/tradeforexes.com\/en\/index-cfds\/#listItem","name":"Index CFDs"}},{"@type":"ListItem","@id":"https:\/\/tradeforexes.com\/en\/index-cfds\/#listItem","position":2,"name":"Index CFDs","previousItem":{"@type":"ListItem","@id":"https:\/\/tradeforexes.com\/en#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/tradeforexes.com\/en\/#organization","name":"tradeForexes.com","description":"Trade forex from 0.0 pips","url":"https:\/\/tradeforexes.com\/en\/"},{"@type":"WebPage","@id":"https:\/\/tradeforexes.com\/en\/index-cfds\/#webpage","url":"https:\/\/tradeforexes.com\/en\/index-cfds\/","name":"Index CFDs - tradeForexes.com","description":"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=\"\" data-broker-url=\"https:\/\/yourbroker.com\/trade?symbol=\" JavaScript is disabled, so live markets can\u2019t load. Why Trade Indices with Us?\uf555Low SpreadsBenefit","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/tradeforexes.com\/en\/#website"},"breadcrumb":{"@id":"https:\/\/tradeforexes.com\/en\/index-cfds\/#breadcrumblist"},"datePublished":"2023-11-09T08:43:12+00:00","dateModified":"2026-06-13T16:29:15+00:00"},{"@type":"WebSite","@id":"https:\/\/tradeforexes.com\/en\/#website","url":"https:\/\/tradeforexes.com\/en\/","name":"tradeForexes.com","description":"Trade forex from 0.0 pips","inLanguage":"en-US","publisher":{"@id":"https:\/\/tradeforexes.com\/en\/#organization"}}]},"og:locale":"en_US","og:site_name":"tradeForexes.com - Trade forex from 0.0 pips","og:type":"article","og:title":"Index CFDs - tradeForexes.com","og:description":"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=&quot;&quot; data-broker-url=&quot;https:\/\/yourbroker.com\/trade?symbol=&quot; JavaScript is disabled, so live markets can\u2019t load. Why Trade Indices with Us?\uf555Low SpreadsBenefit","og:url":"https:\/\/tradeforexes.com\/en\/index-cfds\/","article:published_time":"2023-11-09T08:43:12+00:00","article:modified_time":"2026-06-13T16:29:15+00:00","twitter:card":"summary_large_image","twitter:title":"Index CFDs - tradeForexes.com","twitter:description":"Master the Art of Index TradingUnlock the potential of global indices with precision trading tools and expert insights. Start TradingYour Gateway to Global MarketsTrade with ConfidenceJoin thousands of traders who trust tradeForexes.com for their index trading needs. Learn More data-fmp-key=&quot;&quot; data-broker-url=&quot;https:\/\/yourbroker.com\/trade?symbol=&quot; JavaScript is disabled, so live markets can\u2019t load. Why Trade Indices with Us?\uf555Low SpreadsBenefit"},"aioseo_meta_data":{"post_id":"2241","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2024-07-10 05:32:44","updated":"2026-06-13 17:21:27","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/tradeforexes.com\/en\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tIndex CFDs\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/tradeforexes.com\/en"},{"label":"Index CFDs","link":"https:\/\/tradeforexes.com\/en\/index-cfds\/"}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/pages\/2241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/comments?post=2241"}],"version-history":[{"count":5,"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/pages\/2241\/revisions"}],"predecessor-version":[{"id":281110,"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/pages\/2241\/revisions\/281110"}],"wp:attachment":[{"href":"https:\/\/tradeforexes.com\/en\/wp-json\/wp\/v2\/media?parent=2241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}