{"id":57888,"date":"2026-03-23T12:16:37","date_gmt":"2026-03-23T12:16:37","guid":{"rendered":"https:\/\/fxtrendo.com\/?page_id=57888"},"modified":"2026-03-23T12:21:01","modified_gmt":"2026-03-23T12:21:01","slug":"realtime-price","status":"publish","type":"page","link":"https:\/\/fxtrendo.com\/es\/realtime-price\/","title":{"rendered":"Realtime price"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"57888\" class=\"elementor elementor-57888\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a64a992 e-flex e-con-boxed e-con e-parent\" data-id=\"a64a992\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-cf4c06a e-con-full e-flex e-con e-child\" data-id=\"cf4c06a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5e31ac6 elementor-widget elementor-widget-heading\" data-id=\"5e31ac6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Precio de Activos en Tiempo Real<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41b3bda elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"41b3bda\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<span class=\"elementor-heading-title elementor-size-default\">En esta secci\u00f3n puedes consultar los precios en tiempo real de una amplia gama de activos, incluyendo pares de divisas, criptomonedas, metales, energ\u00eda, \u00edndices y acciones globales.<\/span>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f635901 e-flex e-con-boxed e-con e-parent\" data-id=\"f635901\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-717724a e-n-tabs-none elementor-widget elementor-widget-n-tabs\" data-id=\"717724a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tabs_justify_horizontal&quot;:&quot;start&quot;,&quot;horizontal_scroll_mobile&quot;:&quot;enable&quot;,&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"118977098\" aria-label=\"Pesta\u00f1as. Abre elementos con Intro o Espacio, ci\u00e9rralos con Escape y navega con las fechas.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-1189770981\" data-tab-title-id=\"e-n-tab-title-1189770981\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-1189770981\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tForex\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1189770982\" data-tab-title-id=\"e-n-tab-title-1189770982\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1189770982\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tCripto\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1189770983\" data-tab-title-id=\"e-n-tab-title-1189770983\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1189770983\" style=\"--n-tabs-title-order: 3;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tMetales\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1189770984\" data-tab-title-id=\"e-n-tab-title-1189770984\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"4\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1189770984\" style=\"--n-tabs-title-order: 4;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAcciones\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1189770985\" data-tab-title-id=\"e-n-tab-title-1189770985\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"5\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1189770985\" style=\"--n-tabs-title-order: 5;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tEnerg\u00edas\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1189770986\" data-tab-title-id=\"e-n-tab-title-1189770986\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"6\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1189770986\" style=\"--n-tabs-title-order: 6;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\t\u00cdndices\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-1189770981\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1189770981\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-7adac4f e-con-full e-flex e-con e-child\" data-id=\"7adac4f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f27aded elementor-widget elementor-widget-shortcode\" data-id=\"f27aded\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"price_list_69d2d1e406838_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2d1e406838_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2d1e406838_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2d1e406838_searchinput\" style=\"border:none;background: unset !important;\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/08\/search-normal.svg\" \/><\/button>\r\n            <input type=\"text\" id=\"price_list_69d2d1e406838_searchinput\" placeholder=\"Search...\"  style=\"display:none; max-width:220px; padding:6px 8px; border:1px solid #ccc; border-radius:6px;\" \/>\r\n        <\/div><div class=\"table-price-sc\"><table id=\"price_list_69d2d1e406838_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbol<\/th>\r\n                    <th>Sell<\/th>\r\n                    <th>Buy<\/th>\r\n                    <th>Spread<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2d1e406838_tbody\">\r\n                    <tr><td colspan=\"4\">Loading...<\/td><\/tr>\r\n                <\/tbody><\/table>\r\n    <\/div>\r\n    <\/div><script>\r\n    (function(){\r\n        const symbols         = \"usdjpy,eurusd,gbpusd,eurjpy,audchf,usdcad,eurcad,eurgbp,chfjpy,eurchf,audcad,eurnzd,euraud,usdchf,audjpy,gbpaud,nzdusd,gbpnzd,cadchf,usdsgd,gbpchf,cadjpy,gbpcad,nzdchf,gbpjpy,usdcnh,audusd,audnzd,nzdjpy,nzdcad,usdzar\";\r\n        const searchEnabled   = true;\r\n        const searchSymbols   = \"usdjpy,eurusd,gbpusd,eurjpy,audchf,usdcad,eurcad,eurgbp,chfjpy,eurchf,audcad,eurnzd,euraud,usdchf,audjpy,gbpaud,nzdusd,gbpnzd,cadchf,usdsgd,gbpchf,cadjpy,gbpcad,nzdchf,gbpjpy,usdcnh,audusd,audnzd,nzdjpy,nzdcad,usdzar,btcusd,ethusd,xrpusd,eosusd,dshusd,ltcusd,bchusd,dotusd,lnkusd,adausd,xlmusd,bnbusd,xmrusd,iotusd,xtzusd,bsvusd,dogusd,glmusd,ksmusd,avxusd,solusd,uniusd,mtcusd,xauusd,xpdusd,xptusd,xagusd,xaueur,xaugbp,xaujpy,xauaud,xauchf,xagaud,xageur,fb,bac,dis,pg,jnj,amzn,v,aapl,nvda,wmt,pypl,jpm,msft,tsla,goog,ma,unh,hd,xbrusd,xtiusd,xngusd,us30,us500,de40,ustec,uk100,jp225,f40,stoxx50,aus200\";\r\n        const ajaxUrl         = \"https:\/\/fxtrendo.com\/wp-admin\/admin-ajax.php\";\r\n        const tbodyId         = \"price_list_69d2d1e406838_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2d1e406838_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2d1e406838_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2d1e406838_searchbtn\";\r\n\r\n        let previousBuyValues  = {};\r\n        let previousSellValues = {};\r\n        let displayedData      = []; \/\/ data for current tab (price list)\r\n        let masterData         = []; \/\/ optional full dataset for searching across tabs\r\n\r\n        function toNum(v){\r\n            const n = parseFloat(v);\r\n            return Number.isFinite(n) ? n : NaN;\r\n        }\r\n\r\n        function normalizeArrayMaybe(data){\r\n            \/\/ Accept array or { getSymbol: [...] }\r\n            if (Array.isArray(data)) return data;\r\n            if (data && Array.isArray(data.getSymbol)) return data.getSymbol;\r\n            return [];\r\n        }\r\n\r\n        function fetchSymbols(list){\r\n            const url = ajaxUrl + \"?action=get_symbol_data&symbols=\" + encodeURIComponent(list) + \"&_ajax_nonce=\" + encodeURIComponent(nonce);\r\n            return fetch(url, { credentials: \"same-origin\" })\r\n                .then(r => r.json())\r\n                .then(j => {\r\n                    if (!j || !(\"success\" in j)) throw new Error(\"Unexpected response\");\r\n                    if (!j.success) throw new Error((j.data && j.data.message) || \"Unknown error\");\r\n                    return normalizeArrayMaybe(j.data);\r\n                });\r\n        }\r\n\r\n        function renderRows(rows){\r\n            let html = \"\";\r\n            rows.forEach(item => {\r\n                const name  = (item && (item.name || item.Symbol || item.symbol)) || \"\";\r\n                const sellV = item && (item.Ask  ?? item.ask  ?? item.sell ?? item.Sell);\r\n                const buyV  = item && (item.Bid  ?? item.bid  ?? item.buy  ?? item.Buy);\r\n                const sellN = toNum(sellV);\r\n                const buyN  = toNum(buyV);\r\n                const sellStr = (sellV !== undefined && sellV !== null) ? String(sellV) : \"\";\r\n                const buyStr  = (buyV  !== undefined && buyV  !== null) ? String(buyV)  : \"\";\r\n                const image = (item && (item.image || item.icon || \"\")) || \"\";\r\n                const sb   = item.symbol || \"\";\r\n                let spread = \"-\";\r\n                if (Number.isFinite(sellN) && Number.isFinite(buyN)) {\r\n                    const s = sellN - buyN;\r\n                    spread = (Math.abs(s) >= 1 ? s.toFixed(2) : s.toFixed(4));\r\n                }\r\n\r\n                let buyColor = \"white\";\r\n                let buyText  = buyStr;\r\n                if (name && Number.isFinite(buyN) && previousBuyValues[name] !== undefined) {\r\n                    const prev = previousBuyValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (buyN > prev) { buyColor = \"green\"; buyText = \"+\" + buyStr; }\r\n                        else if (buyN < prev) { buyColor = \"red\"; buyText = \"-\" + buyStr; }\r\n                    }\r\n                }\r\n\r\n                let sellColor = \"white\";\r\n                let sellText  = sellStr;\r\n                if (name && Number.isFinite(sellN) && previousSellValues[name] !== undefined) {\r\n                    const prev = previousSellValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (sellN > prev) { sellColor = \"green\"; sellText = \"+\" + sellStr; }\r\n                        else if (sellN < prev) { sellColor = \"red\"; sellText = \"-\" + sellStr; }\r\n                    }\r\n                }\r\n\r\n                if (name) {\r\n                    previousBuyValues[name]  = buyN;\r\n                    previousSellValues[name] = sellN;\r\n                }\r\n\r\n                html += \"<tr style='border-radius: 16px; background: rgba(112, 112, 112, 0.15); backdrop-filter: blur(4px); margin-top: 10px; margin-bottom: 10px;'>\";\r\n                html += '<td class=\"name-cell\"><a href=\"\/chart\/' + encodeURIComponent(sb) + '\/\"><img decoding=\"async\" src=\"' + image + '\" alt=\"' + name + '\" \/>' + name + '<\/a><\/td>';\r\n                html += '<td class=\"sell-cell\" style=\"color: ' + sellColor + ';\">' + sellText + '<\/td>';\r\n                html += '<td class=\"buy-cell\" style=\"color: ' + buyColor + ';\">' + buyText + '<\/td>';\r\n                html += '<td class=\"sp-cell\">' + spread + '<\/td>';\r\n                html += \"<\/tr>\";\r\n            });\r\n            document.getElementById(tbodyId).innerHTML = html || \"<tr><td colspan='4'>No data<\/td><\/tr>\";\r\n        }\r\n\r\n        function updateDisplayToOriginal(){\r\n            renderRows(displayedData);\r\n        }\r\n\r\n        function handleSearch(query){\r\n            const q = (query || \"\").trim().toLowerCase();\r\n            if (!q) { updateDisplayToOriginal(); return; }\r\n\r\n            \/\/ Search across masterData if available; fallback to displayedData\r\n            const base = (masterData.length ? masterData : displayedData);\r\n            const filtered = base.filter(it => {\r\n                const nm = (it && (it.name || it.Symbol || it.symbol) || \"\").toLowerCase();\r\n                return nm.includes(q);\r\n            });\r\n            renderRows(filtered);\r\n        }\r\n\r\n        function attachSearchUI(){\r\n            if (!searchEnabled) return;\r\n\r\n            const btn = document.getElementById(searchBtnId);\r\n            const input = document.getElementById(searchInputId);\r\n            if (!btn || !input) return;\r\n\r\n            let open = false;\r\n            btn.addEventListener(\"click\", function(){\r\n                open = !open;\r\n                btn.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\r\n                input.style.display = open ? \"block\" : \"none\";\r\n                if (open) { input.focus(); }\r\n                if (!open) { input.value = \"\"; updateDisplayToOriginal(); }\r\n            });\r\n\r\n            let t = null;\r\n            input.addEventListener(\"input\", function(){\r\n                const v = input.value;\r\n                if (t) clearTimeout(t);\r\n                t = setTimeout(() => handleSearch(v), 200);\r\n            });\r\n        }\r\n\r\n        \/\/ Initial load\r\n        Promise.all([\r\n            fetchSymbols(symbols).then(arr => { displayedData = arr || []; }).catch(() => { displayedData = []; }),\r\n            (searchEnabled && searchSymbols ? fetchSymbols(searchSymbols).then(arr => { masterData = arr || []; }).catch(() => { masterData = []; }) : Promise.resolve() )\r\n        ])\r\n        .then(() => {\r\n            renderRows(displayedData);\r\n            attachSearchUI();\r\n        })\r\n        .catch(e => {\r\n            document.getElementById(tbodyId).innerHTML = \"<tr><td colspan='4'>Error: \" + e + \"<\/td><\/tr>\";\r\n        });\r\n\r\n        \/\/ No auto-refresh by default\r\n        \/\/ setInterval(() => { \/* you can add refresh if needed *\/ }, 5000);\r\n        \r\n        \r\n        \r\n    })();\r\n    <\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-1189770982\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1189770982\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-6af664c e-con-full e-flex e-con e-child\" data-id=\"6af664c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2e869c1 elementor-widget elementor-widget-shortcode\" data-id=\"2e869c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"price_list_69d2d1e406bb2_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2d1e406bb2_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2d1e406bb2_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2d1e406bb2_searchinput\" style=\"border:none;background: unset !important;\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/08\/search-normal.svg\" \/><\/button>\r\n            <input type=\"text\" id=\"price_list_69d2d1e406bb2_searchinput\" placeholder=\"Search...\"  style=\"display:none; max-width:220px; padding:6px 8px; border:1px solid #ccc; border-radius:6px;\" \/>\r\n        <\/div><div class=\"table-price-sc\"><table id=\"price_list_69d2d1e406bb2_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbol<\/th>\r\n                    <th>Sell<\/th>\r\n                    <th>Buy<\/th>\r\n                    <th>Spread<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2d1e406bb2_tbody\">\r\n                    <tr><td colspan=\"4\">Loading...<\/td><\/tr>\r\n                <\/tbody><\/table>\r\n    <\/div>\r\n    <\/div><script>\r\n    (function(){\r\n        const symbols         = \"btcusd,ethusd,xrpusd,eosusd,dshusd,ltcusd,bchusd,dotusd,lnkusd,adausd,xlmusd,bnbusd,xmrusd,iotusd,xtzusd,bsvusd,dogusd,glmusd,ksmusd,avxusd,solusd,uniusd,mtcusd\";\r\n        const searchEnabled   = true;\r\n        const searchSymbols   = \"usdjpy,eurusd,gbpusd,eurjpy,audchf,usdcad,eurcad,eurgbp,chfjpy,eurchf,audcad,eurnzd,euraud,usdchf,audjpy,gbpaud,nzdusd,gbpnzd,cadchf,usdsgd,gbpchf,cadjpy,gbpcad,nzdchf,gbpjpy,usdcnh,audusd,audnzd,nzdjpy,nzdcad,usdzar,btcusd,ethusd,xrpusd,eosusd,dshusd,ltcusd,bchusd,dotusd,lnkusd,adausd,xlmusd,bnbusd,xmrusd,iotusd,xtzusd,bsvusd,dogusd,glmusd,ksmusd,avxusd,solusd,uniusd,mtcusd,xauusd,xpdusd,xptusd,xagusd,xaueur,xaugbp,xaujpy,xauaud,xauchf,xagaud,xageur,fb,bac,dis,pg,jnj,amzn,v,aapl,nvda,wmt,pypl,jpm,msft,tsla,goog,ma,unh,hd,xbrusd,xtiusd,xngusd,us30,us500,de40,ustec,uk100,jp225,f40,stoxx50,aus200\";\r\n        const ajaxUrl         = \"https:\/\/fxtrendo.com\/wp-admin\/admin-ajax.php\";\r\n        const tbodyId         = \"price_list_69d2d1e406bb2_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2d1e406bb2_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2d1e406bb2_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2d1e406bb2_searchbtn\";\r\n\r\n        let previousBuyValues  = {};\r\n        let previousSellValues = {};\r\n        let displayedData      = []; \/\/ data for current tab (price list)\r\n        let masterData         = []; \/\/ optional full dataset for searching across tabs\r\n\r\n        function toNum(v){\r\n            const n = parseFloat(v);\r\n            return Number.isFinite(n) ? n : NaN;\r\n        }\r\n\r\n        function normalizeArrayMaybe(data){\r\n            \/\/ Accept array or { getSymbol: [...] }\r\n            if (Array.isArray(data)) return data;\r\n            if (data && Array.isArray(data.getSymbol)) return data.getSymbol;\r\n            return [];\r\n        }\r\n\r\n        function fetchSymbols(list){\r\n            const url = ajaxUrl + \"?action=get_symbol_data&symbols=\" + encodeURIComponent(list) + \"&_ajax_nonce=\" + encodeURIComponent(nonce);\r\n            return fetch(url, { credentials: \"same-origin\" })\r\n                .then(r => r.json())\r\n                .then(j => {\r\n                    if (!j || !(\"success\" in j)) throw new Error(\"Unexpected response\");\r\n                    if (!j.success) throw new Error((j.data && j.data.message) || \"Unknown error\");\r\n                    return normalizeArrayMaybe(j.data);\r\n                });\r\n        }\r\n\r\n        function renderRows(rows){\r\n            let html = \"\";\r\n            rows.forEach(item => {\r\n                const name  = (item && (item.name || item.Symbol || item.symbol)) || \"\";\r\n                const sellV = item && (item.Ask  ?? item.ask  ?? item.sell ?? item.Sell);\r\n                const buyV  = item && (item.Bid  ?? item.bid  ?? item.buy  ?? item.Buy);\r\n                const sellN = toNum(sellV);\r\n                const buyN  = toNum(buyV);\r\n                const sellStr = (sellV !== undefined && sellV !== null) ? String(sellV) : \"\";\r\n                const buyStr  = (buyV  !== undefined && buyV  !== null) ? String(buyV)  : \"\";\r\n                const image = (item && (item.image || item.icon || \"\")) || \"\";\r\n                const sb   = item.symbol || \"\";\r\n                let spread = \"-\";\r\n                if (Number.isFinite(sellN) && Number.isFinite(buyN)) {\r\n                    const s = sellN - buyN;\r\n                    spread = (Math.abs(s) >= 1 ? s.toFixed(2) : s.toFixed(4));\r\n                }\r\n\r\n                let buyColor = \"white\";\r\n                let buyText  = buyStr;\r\n                if (name && Number.isFinite(buyN) && previousBuyValues[name] !== undefined) {\r\n                    const prev = previousBuyValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (buyN > prev) { buyColor = \"green\"; buyText = \"+\" + buyStr; }\r\n                        else if (buyN < prev) { buyColor = \"red\"; buyText = \"-\" + buyStr; }\r\n                    }\r\n                }\r\n\r\n                let sellColor = \"white\";\r\n                let sellText  = sellStr;\r\n                if (name && Number.isFinite(sellN) && previousSellValues[name] !== undefined) {\r\n                    const prev = previousSellValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (sellN > prev) { sellColor = \"green\"; sellText = \"+\" + sellStr; }\r\n                        else if (sellN < prev) { sellColor = \"red\"; sellText = \"-\" + sellStr; }\r\n                    }\r\n                }\r\n\r\n                if (name) {\r\n                    previousBuyValues[name]  = buyN;\r\n                    previousSellValues[name] = sellN;\r\n                }\r\n\r\n                html += \"<tr style='border-radius: 16px; background: rgba(112, 112, 112, 0.15); backdrop-filter: blur(4px); margin-top: 10px; margin-bottom: 10px;'>\";\r\n                html += '<td class=\"name-cell\"><a href=\"\/chart\/' + encodeURIComponent(sb) + '\/\"><img decoding=\"async\" src=\"' + image + '\" alt=\"' + name + '\" \/>' + name + '<\/a><\/td>';\r\n                html += '<td class=\"sell-cell\" style=\"color: ' + sellColor + ';\">' + sellText + '<\/td>';\r\n                html += '<td class=\"buy-cell\" style=\"color: ' + buyColor + ';\">' + buyText + '<\/td>';\r\n                html += '<td class=\"sp-cell\">' + spread + '<\/td>';\r\n                html += \"<\/tr>\";\r\n            });\r\n            document.getElementById(tbodyId).innerHTML = html || \"<tr><td colspan='4'>No data<\/td><\/tr>\";\r\n        }\r\n\r\n        function updateDisplayToOriginal(){\r\n            renderRows(displayedData);\r\n        }\r\n\r\n        function handleSearch(query){\r\n            const q = (query || \"\").trim().toLowerCase();\r\n            if (!q) { updateDisplayToOriginal(); return; }\r\n\r\n            \/\/ Search across masterData if available; fallback to displayedData\r\n            const base = (masterData.length ? masterData : displayedData);\r\n            const filtered = base.filter(it => {\r\n                const nm = (it && (it.name || it.Symbol || it.symbol) || \"\").toLowerCase();\r\n                return nm.includes(q);\r\n            });\r\n            renderRows(filtered);\r\n        }\r\n\r\n        function attachSearchUI(){\r\n            if (!searchEnabled) return;\r\n\r\n            const btn = document.getElementById(searchBtnId);\r\n            const input = document.getElementById(searchInputId);\r\n            if (!btn || !input) return;\r\n\r\n            let open = false;\r\n            btn.addEventListener(\"click\", function(){\r\n                open = !open;\r\n                btn.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\r\n                input.style.display = open ? \"block\" : \"none\";\r\n                if (open) { input.focus(); }\r\n                if (!open) { input.value = \"\"; updateDisplayToOriginal(); }\r\n            });\r\n\r\n            let t = null;\r\n            input.addEventListener(\"input\", function(){\r\n                const v = input.value;\r\n                if (t) clearTimeout(t);\r\n                t = setTimeout(() => handleSearch(v), 200);\r\n            });\r\n        }\r\n\r\n        \/\/ Initial load\r\n        Promise.all([\r\n            fetchSymbols(symbols).then(arr => { displayedData = arr || []; }).catch(() => { displayedData = []; }),\r\n            (searchEnabled && searchSymbols ? fetchSymbols(searchSymbols).then(arr => { masterData = arr || []; }).catch(() => { masterData = []; }) : Promise.resolve() )\r\n        ])\r\n        .then(() => {\r\n            renderRows(displayedData);\r\n            attachSearchUI();\r\n        })\r\n        .catch(e => {\r\n            document.getElementById(tbodyId).innerHTML = \"<tr><td colspan='4'>Error: \" + e + \"<\/td><\/tr>\";\r\n        });\r\n\r\n        \/\/ No auto-refresh by default\r\n        \/\/ setInterval(() => { \/* you can add refresh if needed *\/ }, 5000);\r\n        \r\n        \r\n        \r\n    })();\r\n    <\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-1189770983\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1189770983\" data-tab-index=\"3\" style=\"--n-tabs-title-order: 3;\" class=\" elementor-element elementor-element-667776e e-con-full e-flex e-con e-child\" data-id=\"667776e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7978eaa elementor-widget elementor-widget-shortcode\" data-id=\"7978eaa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"price_list_69d2d1e406e26_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2d1e406e26_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2d1e406e26_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2d1e406e26_searchinput\" style=\"border:none;background: unset !important;\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/08\/search-normal.svg\" \/><\/button>\r\n            <input type=\"text\" id=\"price_list_69d2d1e406e26_searchinput\" placeholder=\"Search...\"  style=\"display:none; max-width:220px; padding:6px 8px; border:1px solid #ccc; border-radius:6px;\" \/>\r\n        <\/div><div class=\"table-price-sc\"><table id=\"price_list_69d2d1e406e26_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbol<\/th>\r\n                    <th>Sell<\/th>\r\n                    <th>Buy<\/th>\r\n                    <th>Spread<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2d1e406e26_tbody\">\r\n                    <tr><td colspan=\"4\">Loading...<\/td><\/tr>\r\n                <\/tbody><\/table>\r\n    <\/div>\r\n    <\/div><script>\r\n    (function(){\r\n        const symbols         = \"xauusd,xpdusd,xptusd,xagusd,xaueur,xaugbp,xaujpy,xauaud,xauchf,xagaud,xageur\";\r\n        const searchEnabled   = true;\r\n        const searchSymbols   = \"usdjpy,eurusd,gbpusd,eurjpy,audchf,usdcad,eurcad,eurgbp,chfjpy,eurchf,audcad,eurnzd,euraud,usdchf,audjpy,gbpaud,nzdusd,gbpnzd,cadchf,usdsgd,gbpchf,cadjpy,gbpcad,nzdchf,gbpjpy,usdcnh,audusd,audnzd,nzdjpy,nzdcad,usdzar,btcusd,ethusd,xrpusd,eosusd,dshusd,ltcusd,bchusd,dotusd,lnkusd,adausd,xlmusd,bnbusd,xmrusd,iotusd,xtzusd,bsvusd,dogusd,glmusd,ksmusd,avxusd,solusd,uniusd,mtcusd,xauusd,xpdusd,xptusd,xagusd,xaueur,xaugbp,xaujpy,xauaud,xauchf,xagaud,xageur,fb,bac,dis,pg,jnj,amzn,v,aapl,nvda,wmt,pypl,jpm,msft,tsla,goog,ma,unh,hd,xbrusd,xtiusd,xngusd,us30,us500,de40,ustec,uk100,jp225,f40,stoxx50,aus200\";\r\n        const ajaxUrl         = \"https:\/\/fxtrendo.com\/wp-admin\/admin-ajax.php\";\r\n        const tbodyId         = \"price_list_69d2d1e406e26_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2d1e406e26_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2d1e406e26_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2d1e406e26_searchbtn\";\r\n\r\n        let previousBuyValues  = {};\r\n        let previousSellValues = {};\r\n        let displayedData      = []; \/\/ data for current tab (price list)\r\n        let masterData         = []; \/\/ optional full dataset for searching across tabs\r\n\r\n        function toNum(v){\r\n            const n = parseFloat(v);\r\n            return Number.isFinite(n) ? n : NaN;\r\n        }\r\n\r\n        function normalizeArrayMaybe(data){\r\n            \/\/ Accept array or { getSymbol: [...] }\r\n            if (Array.isArray(data)) return data;\r\n            if (data && Array.isArray(data.getSymbol)) return data.getSymbol;\r\n            return [];\r\n        }\r\n\r\n        function fetchSymbols(list){\r\n            const url = ajaxUrl + \"?action=get_symbol_data&symbols=\" + encodeURIComponent(list) + \"&_ajax_nonce=\" + encodeURIComponent(nonce);\r\n            return fetch(url, { credentials: \"same-origin\" })\r\n                .then(r => r.json())\r\n                .then(j => {\r\n                    if (!j || !(\"success\" in j)) throw new Error(\"Unexpected response\");\r\n                    if (!j.success) throw new Error((j.data && j.data.message) || \"Unknown error\");\r\n                    return normalizeArrayMaybe(j.data);\r\n                });\r\n        }\r\n\r\n        function renderRows(rows){\r\n            let html = \"\";\r\n            rows.forEach(item => {\r\n                const name  = (item && (item.name || item.Symbol || item.symbol)) || \"\";\r\n                const sellV = item && (item.Ask  ?? item.ask  ?? item.sell ?? item.Sell);\r\n                const buyV  = item && (item.Bid  ?? item.bid  ?? item.buy  ?? item.Buy);\r\n                const sellN = toNum(sellV);\r\n                const buyN  = toNum(buyV);\r\n                const sellStr = (sellV !== undefined && sellV !== null) ? String(sellV) : \"\";\r\n                const buyStr  = (buyV  !== undefined && buyV  !== null) ? String(buyV)  : \"\";\r\n                const image = (item && (item.image || item.icon || \"\")) || \"\";\r\n                const sb   = item.symbol || \"\";\r\n                let spread = \"-\";\r\n                if (Number.isFinite(sellN) && Number.isFinite(buyN)) {\r\n                    const s = sellN - buyN;\r\n                    spread = (Math.abs(s) >= 1 ? s.toFixed(2) : s.toFixed(4));\r\n                }\r\n\r\n                let buyColor = \"white\";\r\n                let buyText  = buyStr;\r\n                if (name && Number.isFinite(buyN) && previousBuyValues[name] !== undefined) {\r\n                    const prev = previousBuyValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (buyN > prev) { buyColor = \"green\"; buyText = \"+\" + buyStr; }\r\n                        else if (buyN < prev) { buyColor = \"red\"; buyText = \"-\" + buyStr; }\r\n                    }\r\n                }\r\n\r\n                let sellColor = \"white\";\r\n                let sellText  = sellStr;\r\n                if (name && Number.isFinite(sellN) && previousSellValues[name] !== undefined) {\r\n                    const prev = previousSellValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (sellN > prev) { sellColor = \"green\"; sellText = \"+\" + sellStr; }\r\n                        else if (sellN < prev) { sellColor = \"red\"; sellText = \"-\" + sellStr; }\r\n                    }\r\n                }\r\n\r\n                if (name) {\r\n                    previousBuyValues[name]  = buyN;\r\n                    previousSellValues[name] = sellN;\r\n                }\r\n\r\n                html += \"<tr style='border-radius: 16px; background: rgba(112, 112, 112, 0.15); backdrop-filter: blur(4px); margin-top: 10px; margin-bottom: 10px;'>\";\r\n                html += '<td class=\"name-cell\"><a href=\"\/chart\/' + encodeURIComponent(sb) + '\/\"><img decoding=\"async\" src=\"' + image + '\" alt=\"' + name + '\" \/>' + name + '<\/a><\/td>';\r\n                html += '<td class=\"sell-cell\" style=\"color: ' + sellColor + ';\">' + sellText + '<\/td>';\r\n                html += '<td class=\"buy-cell\" style=\"color: ' + buyColor + ';\">' + buyText + '<\/td>';\r\n                html += '<td class=\"sp-cell\">' + spread + '<\/td>';\r\n                html += \"<\/tr>\";\r\n            });\r\n            document.getElementById(tbodyId).innerHTML = html || \"<tr><td colspan='4'>No data<\/td><\/tr>\";\r\n        }\r\n\r\n        function updateDisplayToOriginal(){\r\n            renderRows(displayedData);\r\n        }\r\n\r\n        function handleSearch(query){\r\n            const q = (query || \"\").trim().toLowerCase();\r\n            if (!q) { updateDisplayToOriginal(); return; }\r\n\r\n            \/\/ Search across masterData if available; fallback to displayedData\r\n            const base = (masterData.length ? masterData : displayedData);\r\n            const filtered = base.filter(it => {\r\n                const nm = (it && (it.name || it.Symbol || it.symbol) || \"\").toLowerCase();\r\n                return nm.includes(q);\r\n            });\r\n            renderRows(filtered);\r\n        }\r\n\r\n        function attachSearchUI(){\r\n            if (!searchEnabled) return;\r\n\r\n            const btn = document.getElementById(searchBtnId);\r\n            const input = document.getElementById(searchInputId);\r\n            if (!btn || !input) return;\r\n\r\n            let open = false;\r\n            btn.addEventListener(\"click\", function(){\r\n                open = !open;\r\n                btn.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\r\n                input.style.display = open ? \"block\" : \"none\";\r\n                if (open) { input.focus(); }\r\n                if (!open) { input.value = \"\"; updateDisplayToOriginal(); }\r\n            });\r\n\r\n            let t = null;\r\n            input.addEventListener(\"input\", function(){\r\n                const v = input.value;\r\n                if (t) clearTimeout(t);\r\n                t = setTimeout(() => handleSearch(v), 200);\r\n            });\r\n        }\r\n\r\n        \/\/ Initial load\r\n        Promise.all([\r\n            fetchSymbols(symbols).then(arr => { displayedData = arr || []; }).catch(() => { displayedData = []; }),\r\n            (searchEnabled && searchSymbols ? fetchSymbols(searchSymbols).then(arr => { masterData = arr || []; }).catch(() => { masterData = []; }) : Promise.resolve() )\r\n        ])\r\n        .then(() => {\r\n            renderRows(displayedData);\r\n            attachSearchUI();\r\n        })\r\n        .catch(e => {\r\n            document.getElementById(tbodyId).innerHTML = \"<tr><td colspan='4'>Error: \" + e + \"<\/td><\/tr>\";\r\n        });\r\n\r\n        \/\/ No auto-refresh by default\r\n        \/\/ setInterval(() => { \/* you can add refresh if needed *\/ }, 5000);\r\n        \r\n        \r\n        \r\n    })();\r\n    <\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-1189770984\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1189770984\" data-tab-index=\"4\" style=\"--n-tabs-title-order: 4;\" class=\" elementor-element elementor-element-fe89038 e-flex e-con-boxed e-con e-child\" data-id=\"fe89038\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e260398 elementor-widget elementor-widget-shortcode\" data-id=\"e260398\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"price_list_69d2d1e40708e_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2d1e40708e_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2d1e40708e_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2d1e40708e_searchinput\" style=\"border:none;background: unset !important;\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/08\/search-normal.svg\" \/><\/button>\r\n            <input type=\"text\" id=\"price_list_69d2d1e40708e_searchinput\" placeholder=\"Search...\"  style=\"display:none; max-width:220px; padding:6px 8px; border:1px solid #ccc; border-radius:6px;\" \/>\r\n        <\/div><div class=\"table-price-sc\"><table id=\"price_list_69d2d1e40708e_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbol<\/th>\r\n                    <th>Sell<\/th>\r\n                    <th>Buy<\/th>\r\n                    <th>Spread<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2d1e40708e_tbody\">\r\n                    <tr><td colspan=\"4\">Loading...<\/td><\/tr>\r\n                <\/tbody><\/table>\r\n    <\/div>\r\n    <\/div><script>\r\n    (function(){\r\n        const symbols         = \"fb,bac,dis,pg,jnj,amzn,v,aapl,nvda,wmt,pypl,jpm,msft,tsla,goog,ma,unh,hd\";\r\n        const searchEnabled   = true;\r\n        const searchSymbols   = \"usdjpy,eurusd,gbpusd,eurjpy,audchf,usdcad,eurcad,eurgbp,chfjpy,eurchf,audcad,eurnzd,euraud,usdchf,audjpy,gbpaud,nzdusd,gbpnzd,cadchf,usdsgd,gbpchf,cadjpy,gbpcad,nzdchf,gbpjpy,usdcnh,audusd,audnzd,nzdjpy,nzdcad,usdzar,btcusd,ethusd,xrpusd,eosusd,dshusd,ltcusd,bchusd,dotusd,lnkusd,adausd,xlmusd,bnbusd,xmrusd,iotusd,xtzusd,bsvusd,dogusd,glmusd,ksmusd,avxusd,solusd,uniusd,mtcusd,xauusd,xpdusd,xptusd,xagusd,xaueur,xaugbp,xaujpy,xauaud,xauchf,xagaud,xageur,fb,bac,dis,pg,jnj,amzn,v,aapl,nvda,wmt,pypl,jpm,msft,tsla,goog,ma,unh,hd,xbrusd,xtiusd,xngusd,us30,us500,de40,ustec,uk100,jp225,f40,stoxx50,aus200\";\r\n        const ajaxUrl         = \"https:\/\/fxtrendo.com\/wp-admin\/admin-ajax.php\";\r\n        const tbodyId         = \"price_list_69d2d1e40708e_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2d1e40708e_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2d1e40708e_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2d1e40708e_searchbtn\";\r\n\r\n        let previousBuyValues  = {};\r\n        let previousSellValues = {};\r\n        let displayedData      = []; \/\/ data for current tab (price list)\r\n        let masterData         = []; \/\/ optional full dataset for searching across tabs\r\n\r\n        function toNum(v){\r\n            const n = parseFloat(v);\r\n            return Number.isFinite(n) ? n : NaN;\r\n        }\r\n\r\n        function normalizeArrayMaybe(data){\r\n            \/\/ Accept array or { getSymbol: [...] }\r\n            if (Array.isArray(data)) return data;\r\n            if (data && Array.isArray(data.getSymbol)) return data.getSymbol;\r\n            return [];\r\n        }\r\n\r\n        function fetchSymbols(list){\r\n            const url = ajaxUrl + \"?action=get_symbol_data&symbols=\" + encodeURIComponent(list) + \"&_ajax_nonce=\" + encodeURIComponent(nonce);\r\n            return fetch(url, { credentials: \"same-origin\" })\r\n                .then(r => r.json())\r\n                .then(j => {\r\n                    if (!j || !(\"success\" in j)) throw new Error(\"Unexpected response\");\r\n                    if (!j.success) throw new Error((j.data && j.data.message) || \"Unknown error\");\r\n                    return normalizeArrayMaybe(j.data);\r\n                });\r\n        }\r\n\r\n        function renderRows(rows){\r\n            let html = \"\";\r\n            rows.forEach(item => {\r\n                const name  = (item && (item.name || item.Symbol || item.symbol)) || \"\";\r\n                const sellV = item && (item.Ask  ?? item.ask  ?? item.sell ?? item.Sell);\r\n                const buyV  = item && (item.Bid  ?? item.bid  ?? item.buy  ?? item.Buy);\r\n                const sellN = toNum(sellV);\r\n                const buyN  = toNum(buyV);\r\n                const sellStr = (sellV !== undefined && sellV !== null) ? String(sellV) : \"\";\r\n                const buyStr  = (buyV  !== undefined && buyV  !== null) ? String(buyV)  : \"\";\r\n                const image = (item && (item.image || item.icon || \"\")) || \"\";\r\n                const sb   = item.symbol || \"\";\r\n                let spread = \"-\";\r\n                if (Number.isFinite(sellN) && Number.isFinite(buyN)) {\r\n                    const s = sellN - buyN;\r\n                    spread = (Math.abs(s) >= 1 ? s.toFixed(2) : s.toFixed(4));\r\n                }\r\n\r\n                let buyColor = \"white\";\r\n                let buyText  = buyStr;\r\n                if (name && Number.isFinite(buyN) && previousBuyValues[name] !== undefined) {\r\n                    const prev = previousBuyValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (buyN > prev) { buyColor = \"green\"; buyText = \"+\" + buyStr; }\r\n                        else if (buyN < prev) { buyColor = \"red\"; buyText = \"-\" + buyStr; }\r\n                    }\r\n                }\r\n\r\n                let sellColor = \"white\";\r\n                let sellText  = sellStr;\r\n                if (name && Number.isFinite(sellN) && previousSellValues[name] !== undefined) {\r\n                    const prev = previousSellValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (sellN > prev) { sellColor = \"green\"; sellText = \"+\" + sellStr; }\r\n                        else if (sellN < prev) { sellColor = \"red\"; sellText = \"-\" + sellStr; }\r\n                    }\r\n                }\r\n\r\n                if (name) {\r\n                    previousBuyValues[name]  = buyN;\r\n                    previousSellValues[name] = sellN;\r\n                }\r\n\r\n                html += \"<tr style='border-radius: 16px; background: rgba(112, 112, 112, 0.15); backdrop-filter: blur(4px); margin-top: 10px; margin-bottom: 10px;'>\";\r\n                html += '<td class=\"name-cell\"><a href=\"\/chart\/' + encodeURIComponent(sb) + '\/\"><img decoding=\"async\" src=\"' + image + '\" alt=\"' + name + '\" \/>' + name + '<\/a><\/td>';\r\n                html += '<td class=\"sell-cell\" style=\"color: ' + sellColor + ';\">' + sellText + '<\/td>';\r\n                html += '<td class=\"buy-cell\" style=\"color: ' + buyColor + ';\">' + buyText + '<\/td>';\r\n                html += '<td class=\"sp-cell\">' + spread + '<\/td>';\r\n                html += \"<\/tr>\";\r\n            });\r\n            document.getElementById(tbodyId).innerHTML = html || \"<tr><td colspan='4'>No data<\/td><\/tr>\";\r\n        }\r\n\r\n        function updateDisplayToOriginal(){\r\n            renderRows(displayedData);\r\n        }\r\n\r\n        function handleSearch(query){\r\n            const q = (query || \"\").trim().toLowerCase();\r\n            if (!q) { updateDisplayToOriginal(); return; }\r\n\r\n            \/\/ Search across masterData if available; fallback to displayedData\r\n            const base = (masterData.length ? masterData : displayedData);\r\n            const filtered = base.filter(it => {\r\n                const nm = (it && (it.name || it.Symbol || it.symbol) || \"\").toLowerCase();\r\n                return nm.includes(q);\r\n            });\r\n            renderRows(filtered);\r\n        }\r\n\r\n        function attachSearchUI(){\r\n            if (!searchEnabled) return;\r\n\r\n            const btn = document.getElementById(searchBtnId);\r\n            const input = document.getElementById(searchInputId);\r\n            if (!btn || !input) return;\r\n\r\n            let open = false;\r\n            btn.addEventListener(\"click\", function(){\r\n                open = !open;\r\n                btn.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\r\n                input.style.display = open ? \"block\" : \"none\";\r\n                if (open) { input.focus(); }\r\n                if (!open) { input.value = \"\"; updateDisplayToOriginal(); }\r\n            });\r\n\r\n            let t = null;\r\n            input.addEventListener(\"input\", function(){\r\n                const v = input.value;\r\n                if (t) clearTimeout(t);\r\n                t = setTimeout(() => handleSearch(v), 200);\r\n            });\r\n        }\r\n\r\n        \/\/ Initial load\r\n        Promise.all([\r\n            fetchSymbols(symbols).then(arr => { displayedData = arr || []; }).catch(() => { displayedData = []; }),\r\n            (searchEnabled && searchSymbols ? fetchSymbols(searchSymbols).then(arr => { masterData = arr || []; }).catch(() => { masterData = []; }) : Promise.resolve() )\r\n        ])\r\n        .then(() => {\r\n            renderRows(displayedData);\r\n            attachSearchUI();\r\n        })\r\n        .catch(e => {\r\n            document.getElementById(tbodyId).innerHTML = \"<tr><td colspan='4'>Error: \" + e + \"<\/td><\/tr>\";\r\n        });\r\n\r\n        \/\/ No auto-refresh by default\r\n        \/\/ setInterval(() => { \/* you can add refresh if needed *\/ }, 5000);\r\n        \r\n        \r\n        \r\n    })();\r\n    <\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-1189770985\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1189770985\" data-tab-index=\"5\" style=\"--n-tabs-title-order: 5;\" class=\" elementor-element elementor-element-3293af6 e-flex e-con-boxed e-con e-child\" data-id=\"3293af6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56ac1b3 elementor-widget elementor-widget-shortcode\" data-id=\"56ac1b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"price_list_69d2d1e4072fc_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2d1e4072fc_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2d1e4072fc_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2d1e4072fc_searchinput\" style=\"border:none;background: unset !important;\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/08\/search-normal.svg\" \/><\/button>\r\n            <input type=\"text\" id=\"price_list_69d2d1e4072fc_searchinput\" placeholder=\"Search...\"  style=\"display:none; max-width:220px; padding:6px 8px; border:1px solid #ccc; border-radius:6px;\" \/>\r\n        <\/div><div class=\"table-price-sc\"><table id=\"price_list_69d2d1e4072fc_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbol<\/th>\r\n                    <th>Sell<\/th>\r\n                    <th>Buy<\/th>\r\n                    <th>Spread<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2d1e4072fc_tbody\">\r\n                    <tr><td colspan=\"4\">Loading...<\/td><\/tr>\r\n                <\/tbody><\/table>\r\n    <\/div>\r\n    <\/div><script>\r\n    (function(){\r\n        const symbols         = \"xbrusd,xtiusd,xngusd\";\r\n        const searchEnabled   = true;\r\n        const searchSymbols   = \"usdjpy,eurusd,gbpusd,eurjpy,audchf,usdcad,eurcad,eurgbp,chfjpy,eurchf,audcad,eurnzd,euraud,usdchf,audjpy,gbpaud,nzdusd,gbpnzd,cadchf,usdsgd,gbpchf,cadjpy,gbpcad,nzdchf,gbpjpy,usdcnh,audusd,audnzd,nzdjpy,nzdcad,usdzar,btcusd,ethusd,xrpusd,eosusd,dshusd,ltcusd,bchusd,dotusd,lnkusd,adausd,xlmusd,bnbusd,xmrusd,iotusd,xtzusd,bsvusd,dogusd,glmusd,ksmusd,avxusd,solusd,uniusd,mtcusd,xauusd,xpdusd,xptusd,xagusd,xaueur,xaugbp,xaujpy,xauaud,xauchf,xagaud,xageur,fb,bac,dis,pg,jnj,amzn,v,aapl,nvda,wmt,pypl,jpm,msft,tsla,goog,ma,unh,hd,xbrusd,xtiusd,xngusd,us30,us500,de40,ustec,uk100,jp225,f40,stoxx50,aus200\";\r\n        const ajaxUrl         = \"https:\/\/fxtrendo.com\/wp-admin\/admin-ajax.php\";\r\n        const tbodyId         = \"price_list_69d2d1e4072fc_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2d1e4072fc_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2d1e4072fc_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2d1e4072fc_searchbtn\";\r\n\r\n        let previousBuyValues  = {};\r\n        let previousSellValues = {};\r\n        let displayedData      = []; \/\/ data for current tab (price list)\r\n        let masterData         = []; \/\/ optional full dataset for searching across tabs\r\n\r\n        function toNum(v){\r\n            const n = parseFloat(v);\r\n            return Number.isFinite(n) ? n : NaN;\r\n        }\r\n\r\n        function normalizeArrayMaybe(data){\r\n            \/\/ Accept array or { getSymbol: [...] }\r\n            if (Array.isArray(data)) return data;\r\n            if (data && Array.isArray(data.getSymbol)) return data.getSymbol;\r\n            return [];\r\n        }\r\n\r\n        function fetchSymbols(list){\r\n            const url = ajaxUrl + \"?action=get_symbol_data&symbols=\" + encodeURIComponent(list) + \"&_ajax_nonce=\" + encodeURIComponent(nonce);\r\n            return fetch(url, { credentials: \"same-origin\" })\r\n                .then(r => r.json())\r\n                .then(j => {\r\n                    if (!j || !(\"success\" in j)) throw new Error(\"Unexpected response\");\r\n                    if (!j.success) throw new Error((j.data && j.data.message) || \"Unknown error\");\r\n                    return normalizeArrayMaybe(j.data);\r\n                });\r\n        }\r\n\r\n        function renderRows(rows){\r\n            let html = \"\";\r\n            rows.forEach(item => {\r\n                const name  = (item && (item.name || item.Symbol || item.symbol)) || \"\";\r\n                const sellV = item && (item.Ask  ?? item.ask  ?? item.sell ?? item.Sell);\r\n                const buyV  = item && (item.Bid  ?? item.bid  ?? item.buy  ?? item.Buy);\r\n                const sellN = toNum(sellV);\r\n                const buyN  = toNum(buyV);\r\n                const sellStr = (sellV !== undefined && sellV !== null) ? String(sellV) : \"\";\r\n                const buyStr  = (buyV  !== undefined && buyV  !== null) ? String(buyV)  : \"\";\r\n                const image = (item && (item.image || item.icon || \"\")) || \"\";\r\n                const sb   = item.symbol || \"\";\r\n                let spread = \"-\";\r\n                if (Number.isFinite(sellN) && Number.isFinite(buyN)) {\r\n                    const s = sellN - buyN;\r\n                    spread = (Math.abs(s) >= 1 ? s.toFixed(2) : s.toFixed(4));\r\n                }\r\n\r\n                let buyColor = \"white\";\r\n                let buyText  = buyStr;\r\n                if (name && Number.isFinite(buyN) && previousBuyValues[name] !== undefined) {\r\n                    const prev = previousBuyValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (buyN > prev) { buyColor = \"green\"; buyText = \"+\" + buyStr; }\r\n                        else if (buyN < prev) { buyColor = \"red\"; buyText = \"-\" + buyStr; }\r\n                    }\r\n                }\r\n\r\n                let sellColor = \"white\";\r\n                let sellText  = sellStr;\r\n                if (name && Number.isFinite(sellN) && previousSellValues[name] !== undefined) {\r\n                    const prev = previousSellValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (sellN > prev) { sellColor = \"green\"; sellText = \"+\" + sellStr; }\r\n                        else if (sellN < prev) { sellColor = \"red\"; sellText = \"-\" + sellStr; }\r\n                    }\r\n                }\r\n\r\n                if (name) {\r\n                    previousBuyValues[name]  = buyN;\r\n                    previousSellValues[name] = sellN;\r\n                }\r\n\r\n                html += \"<tr style='border-radius: 16px; background: rgba(112, 112, 112, 0.15); backdrop-filter: blur(4px); margin-top: 10px; margin-bottom: 10px;'>\";\r\n                html += '<td class=\"name-cell\"><a href=\"\/chart\/' + encodeURIComponent(sb) + '\/\"><img decoding=\"async\" src=\"' + image + '\" alt=\"' + name + '\" \/>' + name + '<\/a><\/td>';\r\n                html += '<td class=\"sell-cell\" style=\"color: ' + sellColor + ';\">' + sellText + '<\/td>';\r\n                html += '<td class=\"buy-cell\" style=\"color: ' + buyColor + ';\">' + buyText + '<\/td>';\r\n                html += '<td class=\"sp-cell\">' + spread + '<\/td>';\r\n                html += \"<\/tr>\";\r\n            });\r\n            document.getElementById(tbodyId).innerHTML = html || \"<tr><td colspan='4'>No data<\/td><\/tr>\";\r\n        }\r\n\r\n        function updateDisplayToOriginal(){\r\n            renderRows(displayedData);\r\n        }\r\n\r\n        function handleSearch(query){\r\n            const q = (query || \"\").trim().toLowerCase();\r\n            if (!q) { updateDisplayToOriginal(); return; }\r\n\r\n            \/\/ Search across masterData if available; fallback to displayedData\r\n            const base = (masterData.length ? masterData : displayedData);\r\n            const filtered = base.filter(it => {\r\n                const nm = (it && (it.name || it.Symbol || it.symbol) || \"\").toLowerCase();\r\n                return nm.includes(q);\r\n            });\r\n            renderRows(filtered);\r\n        }\r\n\r\n        function attachSearchUI(){\r\n            if (!searchEnabled) return;\r\n\r\n            const btn = document.getElementById(searchBtnId);\r\n            const input = document.getElementById(searchInputId);\r\n            if (!btn || !input) return;\r\n\r\n            let open = false;\r\n            btn.addEventListener(\"click\", function(){\r\n                open = !open;\r\n                btn.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\r\n                input.style.display = open ? \"block\" : \"none\";\r\n                if (open) { input.focus(); }\r\n                if (!open) { input.value = \"\"; updateDisplayToOriginal(); }\r\n            });\r\n\r\n            let t = null;\r\n            input.addEventListener(\"input\", function(){\r\n                const v = input.value;\r\n                if (t) clearTimeout(t);\r\n                t = setTimeout(() => handleSearch(v), 200);\r\n            });\r\n        }\r\n\r\n        \/\/ Initial load\r\n        Promise.all([\r\n            fetchSymbols(symbols).then(arr => { displayedData = arr || []; }).catch(() => { displayedData = []; }),\r\n            (searchEnabled && searchSymbols ? fetchSymbols(searchSymbols).then(arr => { masterData = arr || []; }).catch(() => { masterData = []; }) : Promise.resolve() )\r\n        ])\r\n        .then(() => {\r\n            renderRows(displayedData);\r\n            attachSearchUI();\r\n        })\r\n        .catch(e => {\r\n            document.getElementById(tbodyId).innerHTML = \"<tr><td colspan='4'>Error: \" + e + \"<\/td><\/tr>\";\r\n        });\r\n\r\n        \/\/ No auto-refresh by default\r\n        \/\/ setInterval(() => { \/* you can add refresh if needed *\/ }, 5000);\r\n        \r\n        \r\n        \r\n    })();\r\n    <\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-1189770986\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1189770986\" data-tab-index=\"6\" style=\"--n-tabs-title-order: 6;\" class=\" elementor-element elementor-element-3cdfe9b e-flex e-con-boxed e-con e-child\" data-id=\"3cdfe9b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9787659 elementor-widget elementor-widget-shortcode\" data-id=\"9787659\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"price_list_69d2d1e407561_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2d1e407561_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2d1e407561_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2d1e407561_searchinput\" style=\"border:none;background: unset !important;\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2025\/08\/search-normal.svg\" \/><\/button>\r\n            <input type=\"text\" id=\"price_list_69d2d1e407561_searchinput\" placeholder=\"Search...\"  style=\"display:none; max-width:220px; padding:6px 8px; border:1px solid #ccc; border-radius:6px;\" \/>\r\n        <\/div><div class=\"table-price-sc\"><table id=\"price_list_69d2d1e407561_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbol<\/th>\r\n                    <th>Sell<\/th>\r\n                    <th>Buy<\/th>\r\n                    <th>Spread<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2d1e407561_tbody\">\r\n                    <tr><td colspan=\"4\">Loading...<\/td><\/tr>\r\n                <\/tbody><\/table>\r\n    <\/div>\r\n    <\/div><script>\r\n    (function(){\r\n        const symbols         = \"us30,us500,de40,ustec,uk100,jp225,f40,stoxx50,aus200\";\r\n        const searchEnabled   = true;\r\n        const searchSymbols   = \"usdjpy,eurusd,gbpusd,eurjpy,audchf,usdcad,eurcad,eurgbp,chfjpy,eurchf,audcad,eurnzd,euraud,usdchf,audjpy,gbpaud,nzdusd,gbpnzd,cadchf,usdsgd,gbpchf,cadjpy,gbpcad,nzdchf,gbpjpy,usdcnh,audusd,audnzd,nzdjpy,nzdcad,usdzar,btcusd,ethusd,xrpusd,eosusd,dshusd,ltcusd,bchusd,dotusd,lnkusd,adausd,xlmusd,bnbusd,xmrusd,iotusd,xtzusd,bsvusd,dogusd,glmusd,ksmusd,avxusd,solusd,uniusd,mtcusd,xauusd,xpdusd,xptusd,xagusd,xaueur,xaugbp,xaujpy,xauaud,xauchf,xagaud,xageur,fb,bac,dis,pg,jnj,amzn,v,aapl,nvda,wmt,pypl,jpm,msft,tsla,goog,ma,unh,hd,xbrusd,xtiusd,xngusd,us30,us500,de40,ustec,uk100,jp225,f40,stoxx50,aus200\";\r\n        const ajaxUrl         = \"https:\/\/fxtrendo.com\/wp-admin\/admin-ajax.php\";\r\n        const tbodyId         = \"price_list_69d2d1e407561_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2d1e407561_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2d1e407561_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2d1e407561_searchbtn\";\r\n\r\n        let previousBuyValues  = {};\r\n        let previousSellValues = {};\r\n        let displayedData      = []; \/\/ data for current tab (price list)\r\n        let masterData         = []; \/\/ optional full dataset for searching across tabs\r\n\r\n        function toNum(v){\r\n            const n = parseFloat(v);\r\n            return Number.isFinite(n) ? n : NaN;\r\n        }\r\n\r\n        function normalizeArrayMaybe(data){\r\n            \/\/ Accept array or { getSymbol: [...] }\r\n            if (Array.isArray(data)) return data;\r\n            if (data && Array.isArray(data.getSymbol)) return data.getSymbol;\r\n            return [];\r\n        }\r\n\r\n        function fetchSymbols(list){\r\n            const url = ajaxUrl + \"?action=get_symbol_data&symbols=\" + encodeURIComponent(list) + \"&_ajax_nonce=\" + encodeURIComponent(nonce);\r\n            return fetch(url, { credentials: \"same-origin\" })\r\n                .then(r => r.json())\r\n                .then(j => {\r\n                    if (!j || !(\"success\" in j)) throw new Error(\"Unexpected response\");\r\n                    if (!j.success) throw new Error((j.data && j.data.message) || \"Unknown error\");\r\n                    return normalizeArrayMaybe(j.data);\r\n                });\r\n        }\r\n\r\n        function renderRows(rows){\r\n            let html = \"\";\r\n            rows.forEach(item => {\r\n                const name  = (item && (item.name || item.Symbol || item.symbol)) || \"\";\r\n                const sellV = item && (item.Ask  ?? item.ask  ?? item.sell ?? item.Sell);\r\n                const buyV  = item && (item.Bid  ?? item.bid  ?? item.buy  ?? item.Buy);\r\n                const sellN = toNum(sellV);\r\n                const buyN  = toNum(buyV);\r\n                const sellStr = (sellV !== undefined && sellV !== null) ? String(sellV) : \"\";\r\n                const buyStr  = (buyV  !== undefined && buyV  !== null) ? String(buyV)  : \"\";\r\n                const image = (item && (item.image || item.icon || \"\")) || \"\";\r\n                const sb   = item.symbol || \"\";\r\n                let spread = \"-\";\r\n                if (Number.isFinite(sellN) && Number.isFinite(buyN)) {\r\n                    const s = sellN - buyN;\r\n                    spread = (Math.abs(s) >= 1 ? s.toFixed(2) : s.toFixed(4));\r\n                }\r\n\r\n                let buyColor = \"white\";\r\n                let buyText  = buyStr;\r\n                if (name && Number.isFinite(buyN) && previousBuyValues[name] !== undefined) {\r\n                    const prev = previousBuyValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (buyN > prev) { buyColor = \"green\"; buyText = \"+\" + buyStr; }\r\n                        else if (buyN < prev) { buyColor = \"red\"; buyText = \"-\" + buyStr; }\r\n                    }\r\n                }\r\n\r\n                let sellColor = \"white\";\r\n                let sellText  = sellStr;\r\n                if (name && Number.isFinite(sellN) && previousSellValues[name] !== undefined) {\r\n                    const prev = previousSellValues[name];\r\n                    if (Number.isFinite(prev)) {\r\n                        if (sellN > prev) { sellColor = \"green\"; sellText = \"+\" + sellStr; }\r\n                        else if (sellN < prev) { sellColor = \"red\"; sellText = \"-\" + sellStr; }\r\n                    }\r\n                }\r\n\r\n                if (name) {\r\n                    previousBuyValues[name]  = buyN;\r\n                    previousSellValues[name] = sellN;\r\n                }\r\n\r\n                html += \"<tr style='border-radius: 16px; background: rgba(112, 112, 112, 0.15); backdrop-filter: blur(4px); margin-top: 10px; margin-bottom: 10px;'>\";\r\n                html += '<td class=\"name-cell\"><a href=\"\/chart\/' + encodeURIComponent(sb) + '\/\"><img decoding=\"async\" src=\"' + image + '\" alt=\"' + name + '\" \/>' + name + '<\/a><\/td>';\r\n                html += '<td class=\"sell-cell\" style=\"color: ' + sellColor + ';\">' + sellText + '<\/td>';\r\n                html += '<td class=\"buy-cell\" style=\"color: ' + buyColor + ';\">' + buyText + '<\/td>';\r\n                html += '<td class=\"sp-cell\">' + spread + '<\/td>';\r\n                html += \"<\/tr>\";\r\n            });\r\n            document.getElementById(tbodyId).innerHTML = html || \"<tr><td colspan='4'>No data<\/td><\/tr>\";\r\n        }\r\n\r\n        function updateDisplayToOriginal(){\r\n            renderRows(displayedData);\r\n        }\r\n\r\n        function handleSearch(query){\r\n            const q = (query || \"\").trim().toLowerCase();\r\n            if (!q) { updateDisplayToOriginal(); return; }\r\n\r\n            \/\/ Search across masterData if available; fallback to displayedData\r\n            const base = (masterData.length ? masterData : displayedData);\r\n            const filtered = base.filter(it => {\r\n                const nm = (it && (it.name || it.Symbol || it.symbol) || \"\").toLowerCase();\r\n                return nm.includes(q);\r\n            });\r\n            renderRows(filtered);\r\n        }\r\n\r\n        function attachSearchUI(){\r\n            if (!searchEnabled) return;\r\n\r\n            const btn = document.getElementById(searchBtnId);\r\n            const input = document.getElementById(searchInputId);\r\n            if (!btn || !input) return;\r\n\r\n            let open = false;\r\n            btn.addEventListener(\"click\", function(){\r\n                open = !open;\r\n                btn.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\r\n                input.style.display = open ? \"block\" : \"none\";\r\n                if (open) { input.focus(); }\r\n                if (!open) { input.value = \"\"; updateDisplayToOriginal(); }\r\n            });\r\n\r\n            let t = null;\r\n            input.addEventListener(\"input\", function(){\r\n                const v = input.value;\r\n                if (t) clearTimeout(t);\r\n                t = setTimeout(() => handleSearch(v), 200);\r\n            });\r\n        }\r\n\r\n        \/\/ Initial load\r\n        Promise.all([\r\n            fetchSymbols(symbols).then(arr => { displayedData = arr || []; }).catch(() => { displayedData = []; }),\r\n            (searchEnabled && searchSymbols ? fetchSymbols(searchSymbols).then(arr => { masterData = arr || []; }).catch(() => { masterData = []; }) : Promise.resolve() )\r\n        ])\r\n        .then(() => {\r\n            renderRows(displayedData);\r\n            attachSearchUI();\r\n        })\r\n        .catch(e => {\r\n            document.getElementById(tbodyId).innerHTML = \"<tr><td colspan='4'>Error: \" + e + \"<\/td><\/tr>\";\r\n        });\r\n\r\n        \/\/ No auto-refresh by default\r\n        \/\/ setInterval(() => { \/* you can add refresh if needed *\/ }, 5000);\r\n        \r\n        \r\n        \r\n    })();\r\n    <\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e88ace0 e-flex e-con-boxed e-con e-parent\" data-id=\"e88ace0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-50a4181 elementor-widget elementor-widget-heading\" data-id=\"50a4181\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Precios de Activos en Tiempo Real en los Mercados Globales<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29bcddc elementor-widget elementor-widget-text-editor\" data-id=\"29bcddc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span data-sheets-root=\"1\">El acceso a los precios de activos en tiempo real es una de las necesidades m\u00e1s esenciales de los traders profesionales. Esta secci\u00f3n muestra los precios en tiempo real y actualizados de activos como pares de divisas, oro, petr\u00f3leo, criptomonedas, \u00edndices y acciones. Esta informaci\u00f3n te ayuda a tomar decisiones oportunas, aprovechar las oportunidades del mercado y mantenerte siempre un paso por delante de los movimientos de precios.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-286ec85 e-flex e-con-boxed e-con e-parent\" data-id=\"286ec85\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-42cd94d elementor-widget elementor-widget-heading\" data-id=\"42cd94d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Razones que hacen \u00fanicos los Precios en Tiempo Real de Trendo<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f9d4ef2 elementor-widget elementor-widget-text-editor\" data-id=\"f9d4ef2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span data-sheets-root=\"1\">Los precios en tiempo real de Trendo est\u00e1n vinculados directamente a proveedores de liquidez de confianza, con una velocidad de actualizaci\u00f3n ultrarr\u00e1pida y cobertura de m\u00e1s de 100 s\u00edmbolos negociables, proporcion\u00e1ndote datos transparentes y fiables que permiten scalping r\u00e1pido y preciso, comparaci\u00f3n de precios y una gesti\u00f3n del riesgo eficaz.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-da849dc e-flex e-con-boxed e-con e-parent\" data-id=\"da849dc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-6b5a7de e-con-full e-flex e-con e-child\" data-id=\"6b5a7de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-392a791 min-box-he elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"392a791\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><g id=\"vuesax\/bulk\/mobile\"><g id=\"mobile\"><path id=\"Vector\" opacity=\"0.4\" d=\"M32.48 4H15.52C10 4 8 6 8 11.62V36.38C8 42 10 44 15.52 44H32.46C38 44 40 42 40 36.38V11.62C40 6 38 4 32.48 4Z\" fill=\"#00B781\"><\/path><path id=\"Vector_2\" d=\"M28 12.5H20C19.18 12.5 18.5 11.82 18.5 11C18.5 10.18 19.18 9.5 20 9.5H28C28.82 9.5 29.5 10.18 29.5 11C29.5 11.82 28.82 12.5 28 12.5Z\" fill=\"white\"><\/path><path id=\"Vector_3\" d=\"M24 38.5996C25.933 38.5996 27.5 37.0326 27.5 35.0996C27.5 33.1666 25.933 31.5996 24 31.5996C22.067 31.5996 20.5 33.1666 20.5 35.0996C20.5 37.0326 22.067 38.5996 24 38.5996Z\" fill=\"white\"><\/path><\/g><\/g><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tActualizaciones instant\u00e1neas\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tLos precios se transmiten directamente desde m\u00faltiples proveedores de liquidez de primer nivel y se muestran en la plataforma sin intermediarios. Cada variaci\u00f3n de precio se actualiza al instante para que nunca pierdas una oportunidad de trading.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7a32665 e-con-full e-flex e-con e-child\" data-id=\"7a32665\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-182c0cb min-box-he elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"182c0cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><g id=\"vuesax\/bulk\/shield-tick\"><g id=\"shield-tick\"><path id=\"Vector\" opacity=\"0.4\" d=\"M21.9216 4.12016L10.9216 8.24016C8.82156 9.04016 7.10156 11.5202 7.10156 13.7802V29.9802C7.10156 31.6002 8.16156 33.7402 9.46156 34.7002L20.4616 42.9202C22.4016 44.3802 25.5816 44.3802 27.5216 42.9202L38.5216 34.7002C39.8216 33.7202 40.8816 31.6002 40.8816 29.9802V13.7802C40.8816 11.5402 39.1616 9.04016 37.0616 8.26016L26.0616 4.14016C24.9416 3.70016 23.0616 3.70016 21.9216 4.12016Z\" fill=\"#00B781\"><\/path><path id=\"Vector_2\" d=\"M21.3166 28.4602C20.9366 28.4602 20.5566 28.3202 20.2566 28.0202L17.0366 24.8002C16.4566 24.2202 16.4566 23.2602 17.0366 22.6802C17.6166 22.1002 18.5766 22.1002 19.1566 22.6802L21.3166 24.8402L28.8566 17.3002C29.4366 16.7202 30.3966 16.7202 30.9766 17.3002C31.5566 17.8802 31.5566 18.8402 30.9766 19.4202L22.3766 28.0202C22.0766 28.3202 21.6966 28.4602 21.3166 28.4602Z\" fill=\"white\"><\/path><\/g><\/g><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tCobertura de m\u00e1s de 100 s\u00edmbolos\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tTodos los pares de divisas principales y secundarios, metales preciosos, activos energ\u00e9ticos, \u00edndices, acciones y criptomonedas se re\u00fanen en un solo panel, lo que te permite supervisar tu cartera diversificada de un vistazo.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5e56587 e-con-full e-flex e-con e-child\" data-id=\"5e56587\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-407ef40 min-box-he elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"407ef40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\"><g id=\"vuesax\/bulk\/chart\"><g id=\"chart\"><g id=\"chart_2\"><path id=\"Vector\" opacity=\"0.4\" d=\"M32.38 4H15.62C8.34 4 4 8.34 4 15.62V32.36C4 39.66 8.34 44 15.62 44H32.36C39.64 44 43.98 39.66 43.98 32.38V15.62C44 8.34 39.66 4 32.38 4Z\" fill=\"#00B781\"><\/path><path id=\"Vector_2\" d=\"M14 28.6998C13.18 28.6998 12.5 28.0198 12.5 27.1998V20.7998C12.5 19.9798 13.18 19.2998 14 19.2998C14.82 19.2998 15.5 19.9798 15.5 20.7998V27.2198C15.5 28.0398 14.82 28.6998 14 28.6998Z\" fill=\"white\"><\/path><path id=\"Vector_3\" d=\"M24 32.1803C23.18 32.1803 22.5 31.5003 22.5 30.6803V17.3203C22.5 16.5003 23.18 15.8203 24 15.8203C24.82 15.8203 25.5 16.5003 25.5 17.3203V30.6803C25.5 31.5003 24.82 32.1803 24 32.1803Z\" fill=\"white\"><\/path><path id=\"Vector_4\" d=\"M34 28.6998C33.18 28.6998 32.5 28.0198 32.5 27.1998V20.7998C32.5 19.9798 33.18 19.2998 34 19.2998C34.82 19.2998 35.5 19.9798 35.5 20.7998V27.2198C35.5 28.0398 34.82 28.6998 34 28.6998Z\" fill=\"white\"><\/path><\/g><\/g><\/g><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tDatos transparentes y fiables\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tLos precios se presentan sin manipulaci\u00f3n y con profundidad de mercado completa, junto con un historial de precios \u00edntegro y herramientas de filtrado avanzadas, para que puedas tomar decisiones de trading con la m\u00e1xima confianza.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9968aec e-flex e-con-boxed e-con e-parent\" data-id=\"9968aec\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5f2467b elementor-widget elementor-widget-heading\" data-id=\"5f2467b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u00bfListo para Entrar al Mundo del Trading con Trendo?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-664f894 elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"664f894\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<span class=\"elementor-heading-title elementor-size-default\">Reg\u00edstrate en menos de un minuto y comienza a operar en nuestra plataforma exclusiva.<\/span>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0ca5de6 elementor-align-right elementor-mobile-align-center cutomicon elementor-widget elementor-widget-button\" data-id=\"0ca5de6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/my.fxtrendo.com\/sign-in\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"><g id=\"vuesax\/outline\/arrow-right\"><g id=\"arrow-right\"><path id=\"Vector\" d=\"M14.4291 18.8201C14.2391 18.8201 14.0491 18.7501 13.8991 18.6001C13.6091 18.3101 13.6091 17.8301 13.8991 17.5401L19.4391 12.0001L13.8991 6.46012C13.6091 6.17012 13.6091 5.69012 13.8991 5.40012C14.1891 5.11012 14.6691 5.11012 14.9591 5.40012L21.0291 11.4701C21.3191 11.7601 21.3191 12.2401 21.0291 12.5301L14.9591 18.6001C14.8091 18.7501 14.6191 18.8201 14.4291 18.8201Z\" fill=\"white\"><\/path><path id=\"Vector_2\" d=\"M20.33 12.75H3.5C3.09 12.75 2.75 12.41 2.75 12C2.75 11.59 3.09 11.25 3.5 11.25H20.33C20.74 11.25 21.08 11.59 21.08 12C21.08 12.41 20.74 12.75 20.33 12.75Z\" fill=\"white\"><\/path><\/g><\/g><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Reg\u00edstrate<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8e0e41c elementor-align-left elementor-mobile-align-center cutomicon elementor-widget elementor-widget-button\" data-id=\"8e0e41c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/fxtrendo.com\/platforms\/web\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\"><g id=\"vuesax\/outline\/arrow-right\"><g id=\"arrow-right\"><path id=\"Vector\" d=\"M14.4291 19.3191C14.2391 19.3191 14.0491 19.2491 13.8991 19.0991C13.6091 18.8091 13.6091 18.3291 13.8991 18.0391L19.4391 12.4991L13.8991 6.95914C13.6091 6.66914 13.6091 6.18914 13.8991 5.89914C14.1891 5.60914 14.6691 5.60914 14.9591 5.89914L21.0291 11.9691C21.3191 12.2591 21.3191 12.7391 21.0291 13.0291L14.9591 19.0991C14.8091 19.2491 14.6191 19.3191 14.4291 19.3191Z\" fill=\"#00B781\"><\/path><path id=\"Vector_2\" d=\"M20.33 13.25H3.5C3.09 13.25 2.75 12.91 2.75 12.5C2.75 12.09 3.09 11.75 3.5 11.75H20.33C20.74 11.75 21.08 12.09 21.08 12.5C21.08 12.91 20.74 13.25 20.33 13.25Z\" fill=\"#00B781\"><\/path><\/g><\/g><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Cuenta Demo<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Precio de Activos en Tiempo Real En esta secci\u00f3n puedes consultar los precios en tiempo real de una amplia gama de activos, incluyendo pares de divisas, criptomonedas, metales, energ\u00eda, \u00edndices y acciones globales. Forex Cripto Metales Acciones Energ\u00edas \u00cdndices Symbol Sell Buy Spread Loading&#8230; Symbol Sell Buy Spread Loading&#8230; Symbol Sell Buy Spread Loading&#8230; Symbol [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":48913,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"fxtrendo_post_editor":0,"footnotes":""},"class_list":["post-57888","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"fxtrendo_editor":0,"_links":{"self":[{"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/pages\/57888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/comments?post=57888"}],"version-history":[{"count":3,"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/pages\/57888\/revisions"}],"predecessor-version":[{"id":57899,"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/pages\/57888\/revisions\/57899"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/media\/48913"}],"wp:attachment":[{"href":"https:\/\/fxtrendo.com\/es\/wp-json\/wp\/v2\/media?parent=57888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}