{"id":57891,"date":"2026-03-23T12:16:37","date_gmt":"2026-03-23T12:16:37","guid":{"rendered":"https:\/\/fxtrendo.com\/?page_id=57891"},"modified":"2026-03-23T12:20:58","modified_gmt":"2026-03-23T12:20:58","slug":"realtime-price-2","status":"publish","type":"page","link":"https:\/\/fxtrendo.com\/fr\/realtime-price-2\/","title":{"rendered":"Realtime price"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"57891\" class=\"elementor elementor-57891 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\">Prix en Temps R\u00e9el des Actifs<\/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\">Dans cette section, vous pouvez consulter les prix en temps r\u00e9el d\u2019un large \u00e9ventail d\u2019actifs, y compris les paires de devises (forex), les cryptomonnaies, les m\u00e9taux, l\u2019\u00e9nergie, les indices et les actions mondiales.<\/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-c12457c e-flex e-con-boxed e-con e-parent\" data-id=\"c12457c\" 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-259972d e-n-tabs-none elementor-widget elementor-widget-n-tabs\" data-id=\"259972d\" 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=\"39425837\" aria-label=\"Onglets. Ouvrez des \u00e9l\u00e9ments avec Entrer ou Espace, fermez-les avec Echape et naviguez \u00e0 l&#039;aide des touches fl\u00e9ch\u00e9es.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-394258371\" data-tab-title-id=\"e-n-tab-title-394258371\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-394258371\" 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-394258372\" data-tab-title-id=\"e-n-tab-title-394258372\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-394258372\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tCryptomonnaies\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-394258373\" data-tab-title-id=\"e-n-tab-title-394258373\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-394258373\" style=\"--n-tabs-title-order: 3;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tM\u00e9taux\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-394258374\" data-tab-title-id=\"e-n-tab-title-394258374\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"4\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-394258374\" style=\"--n-tabs-title-order: 4;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tActions\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-394258375\" data-tab-title-id=\"e-n-tab-title-394258375\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"5\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-394258375\" style=\"--n-tabs-title-order: 5;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\t\u00c9nergie\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-394258376\" data-tab-title-id=\"e-n-tab-title-394258376\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"6\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-394258376\" style=\"--n-tabs-title-order: 6;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tIndices\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-394258371\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-394258371\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-99406af e-con-full e-flex e-con e-child\" data-id=\"99406af\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a1985e3 elementor-widget elementor-widget-shortcode\" data-id=\"a1985e3\" 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_69d2e87a26ac2_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2e87a26ac2_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2e87a26ac2_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2e87a26ac2_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_69d2e87a26ac2_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_69d2e87a26ac2_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbole<\/th>\r\n                    <th>Vente<\/th>\r\n                    <th>Achat<\/th>\r\n                    <th>\u00c9cart (Spread)<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2e87a26ac2_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_69d2e87a26ac2_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2e87a26ac2_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2e87a26ac2_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2e87a26ac2_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-394258372\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-394258372\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-c99ca7e e-con-full e-flex e-con e-child\" data-id=\"c99ca7e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7a8c742 elementor-widget elementor-widget-shortcode\" data-id=\"7a8c742\" 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_69d2e87a26e68_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2e87a26e68_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2e87a26e68_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2e87a26e68_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_69d2e87a26e68_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_69d2e87a26e68_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbole<\/th>\r\n                    <th>Vente<\/th>\r\n                    <th>Achat<\/th>\r\n                    <th>\u00c9cart (Spread)<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2e87a26e68_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_69d2e87a26e68_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2e87a26e68_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2e87a26e68_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2e87a26e68_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-394258373\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-394258373\" data-tab-index=\"3\" style=\"--n-tabs-title-order: 3;\" class=\" elementor-element elementor-element-a379e62 e-con-full e-flex e-con e-child\" data-id=\"a379e62\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f205225 elementor-widget elementor-widget-shortcode\" data-id=\"f205225\" 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_69d2e87a270ad_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2e87a270ad_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2e87a270ad_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2e87a270ad_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_69d2e87a270ad_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_69d2e87a270ad_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbole<\/th>\r\n                    <th>Vente<\/th>\r\n                    <th>Achat<\/th>\r\n                    <th>\u00c9cart (Spread)<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2e87a270ad_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_69d2e87a270ad_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2e87a270ad_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2e87a270ad_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2e87a270ad_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-394258374\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-394258374\" data-tab-index=\"4\" style=\"--n-tabs-title-order: 4;\" class=\" elementor-element elementor-element-cebd453 e-flex e-con-boxed e-con e-child\" data-id=\"cebd453\" 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-b7bde51 elementor-widget elementor-widget-shortcode\" data-id=\"b7bde51\" 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_69d2e87a272fd_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2e87a272fd_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2e87a272fd_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2e87a272fd_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_69d2e87a272fd_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_69d2e87a272fd_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbole<\/th>\r\n                    <th>Vente<\/th>\r\n                    <th>Achat<\/th>\r\n                    <th>\u00c9cart (Spread)<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2e87a272fd_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_69d2e87a272fd_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2e87a272fd_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2e87a272fd_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2e87a272fd_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-394258375\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-394258375\" data-tab-index=\"5\" style=\"--n-tabs-title-order: 5;\" class=\" elementor-element elementor-element-028034f e-flex e-con-boxed e-con e-child\" data-id=\"028034f\" 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-9968265 elementor-widget elementor-widget-shortcode\" data-id=\"9968265\" 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_69d2e87a27540_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2e87a27540_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2e87a27540_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2e87a27540_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_69d2e87a27540_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_69d2e87a27540_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbole<\/th>\r\n                    <th>Vente<\/th>\r\n                    <th>Achat<\/th>\r\n                    <th>\u00c9cart (Spread)<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2e87a27540_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_69d2e87a27540_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2e87a27540_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2e87a27540_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2e87a27540_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-394258376\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-394258376\" data-tab-index=\"6\" style=\"--n-tabs-title-order: 6;\" class=\" elementor-element elementor-element-510cc19 e-flex e-con-boxed e-con e-child\" data-id=\"510cc19\" 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-af7512c elementor-widget elementor-widget-shortcode\" data-id=\"af7512c\" 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_69d2e87a27795_container\" class=\"price-list-container\">\r\n        <div id=\"price_list_69d2e87a27795_searchwrap\" class=\"price-list-search\" style=\"margin-bottom:8px; display:flex; align-items:center; gap:8px;\">\r\n            <button type=\"button\" id=\"price_list_69d2e87a27795_searchbtn\" aria-expanded=\"false\" aria-controls=\"price_list_69d2e87a27795_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_69d2e87a27795_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_69d2e87a27795_table\" class=\"price-list-table\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\"><thead><tr>\r\n                    <th>Symbole<\/th>\r\n                    <th>Vente<\/th>\r\n                    <th>Achat<\/th>\r\n                    <th>\u00c9cart (Spread)<\/th>\r\n                <\/tr><\/thead><tbody id=\"price_list_69d2e87a27795_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_69d2e87a27795_tbody\";\r\n        const nonce           = \"64cfaef835\";\r\n\r\n        const searchWrapId    = \"price_list_69d2e87a27795_searchwrap\";\r\n        const searchInputId   = \"price_list_69d2e87a27795_searchinput\";\r\n        const searchBtnId     = \"price_list_69d2e87a27795_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\">Prix des Actifs en Temps R\u00e9el sur les March\u00e9s Mondiaux<\/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>L\u2019acc\u00e8s aux prix en temps r\u00e9el est un besoin fondamental pour les traders professionnels. Cette section affiche les cotations pr\u00e9cises et instantan\u00e9es d\u2019actifs tels que les paires de devises, l\u2019or, le p\u00e9trole, les cryptomonnaies, les indices et les actions. Ces donn\u00e9es vous aident \u00e0 prendre des d\u00e9cisions au bon moment, \u00e0 saisir les opportunit\u00e9s de march\u00e9 et \u00e0 garder une longueur d\u2019avance sur les mouvements de prix.<\/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\">Pourquoi les Prix en Temps R\u00e9el de Trendo sont Uniques<\/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>Les prix en temps r\u00e9el de Trendo sont directement connect\u00e9s \u00e0 des fournisseurs de liquidit\u00e9 de confiance, b\u00e9n\u00e9ficient d\u2019une fr\u00e9quence de mise \u00e0 jour ultra-rapide et couvrent plus de 100 instruments n\u00e9gociables. Vous acc\u00e9dez ainsi \u00e0 des donn\u00e9es transparentes et fiables, id\u00e9ales pour le scalping rapide, la comparaison des prix et une gestion efficace du risque.<\/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\tMises \u00e0 jour instantan\u00e9es\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\tLes prix sont diffus\u00e9s en direct depuis plusieurs fournisseurs de liquidit\u00e9 de premier rang, sans aucun interm\u00e9diaire. Chaque variation est refl\u00e9t\u00e9e instantan\u00e9ment sur la plateforme, pour que vous ne manquiez jamais une opportunit\u00e9 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\tPlus de 100 Symboles Couverts\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\t\n\nToutes les principales paires de devises, les paires mineures, les m\u00e9taux pr\u00e9cieux, les actifs \u00e9nerg\u00e9tiques, les indices, les actions et les cryptomonnaies sont r\u00e9unis dans un tableau de bord unique, pour vous permettre de suivre l\u2019ensemble de votre portefeuille en un coup d\u2019\u0153il.\n\n\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\tDes Donn\u00e9es Transparentes et 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\tLes prix sont affich\u00e9s sans aucune manipulation, avec une visualisation compl\u00e8te de la profondeur du march\u00e9. L\u2019historique complet des cotations et des outils de filtrage avanc\u00e9s sont \u00e9galement disponibles, afin de prendre vos d\u00e9cisions de trading en toute confiance.\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\">Pr\u00eat \u00e0 Rejoindre le Monde du Trading avec 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\">Cr\u00e9ez votre compte en moins d\u2019une minute et commencez \u00e0 trader sur notre plateforme exclusive.<\/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=\"#\">\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\">Cr\u00e9er un Compte<\/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=\"#\">\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\">Compte D\u00e9mo<\/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>Prix en Temps R\u00e9el des Actifs Dans cette section, vous pouvez consulter les prix en temps r\u00e9el d\u2019un large \u00e9ventail d\u2019actifs, y compris les paires de devises (forex), les cryptomonnaies, les m\u00e9taux, l\u2019\u00e9nergie, les indices et les actions mondiales. Forex Cryptomonnaies M\u00e9taux Actions \u00c9nergie Indices Symbol Sell Buy Spread Loading&#8230; Symbol Sell Buy Spread Loading&#8230; [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":48915,"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-57891","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"fxtrendo_editor":0,"_links":{"self":[{"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/pages\/57891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/comments?post=57891"}],"version-history":[{"count":1,"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/pages\/57891\/revisions"}],"predecessor-version":[{"id":57895,"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/pages\/57891\/revisions\/57895"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/media\/48915"}],"wp:attachment":[{"href":"https:\/\/fxtrendo.com\/fr\/wp-json\/wp\/v2\/media?parent=57891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}