{"id":192897,"date":"2025-06-19T13:43:51","date_gmt":"2025-06-19T08:43:51","guid":{"rendered":"https:\/\/www.botslash.com\/?page_id=192897"},"modified":"2025-08-08T00:15:59","modified_gmt":"2025-08-07T19:15:59","slug":"crypto-pairs-direction-prediction","status":"publish","type":"page","link":"https:\/\/www.botslash.com\/en\/crypto-pairs-direction-prediction\/","title":{"rendered":"Crypto Pairs Direction Prediction"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"192897\" class=\"elementor elementor-192897\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-700e2a4 e-flex e-con-boxed e-con e-parent\" data-id=\"700e2a4\" data-element_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-06af381 e-con-full e-flex e-con e-child\" data-id=\"06af381\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9854002 elementor-widget elementor-widget-heading\" data-id=\"9854002\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Crypto Pair Directions<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f57124d elementor-widget elementor-widget-text-editor\" data-id=\"f57124d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A try to guess direction of crypto pairs according to famous indicators<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cccda0e e-con-full e-flex e-con e-child\" data-id=\"cccda0e\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-11afff5 e-con-full e-flex e-con e-child\" data-id=\"11afff5\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-99cdf2a elementor-widget elementor-widget-n-accordion\" data-id=\"99cdf2a\" data-element_type=\"widget\" data-settings=\"{&quot;default_state&quot;:&quot;all_collapsed&quot;,&quot;max_items_expended&quot;:&quot;one&quot;,&quot;n_accordion_animation_duration&quot;:{&quot;unit&quot;:&quot;ms&quot;,&quot;size&quot;:400,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-accordion\" aria-label=\"Accordion. Open links with Enter or Space, close with Escape, and navigate with Arrow Keys\">\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-1610\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"1\" tabindex=\"0\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-1610\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Details <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-minus\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-plus\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-1610\" class=\"elementor-element elementor-element-ed468da e-con-full e-flex e-con e-child\" data-id=\"ed468da\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-30b7e28 elementor-widget elementor-widget-text-editor\" data-id=\"30b7e28\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>What is the Pair Prediction Function and how does it work?<\/p><p data-start=\"213\" data-end=\"715\">Most of us have heard of indicators like RSI and Bollinger Bands and have likely used them. These are among the most well-known tools in technical analysis. A significant use of RSI is in identifying &#8220;oversold&#8221; and &#8220;overbought&#8221; conditions. Oversold is generally seen as a potential buying point, while overbought is considered a potential selling point. However, this does not mean that an asset bought at oversold must be sold at overbought; rather, overbought is used independently as an exit signal.<\/p><p data-start=\"717\" data-end=\"1369\">When we look at RSI on a chart, we often observe that when RSI reaches the oversold zone\u2014typically below levels like 30 or 35 in traditional markets\u2014the price tends to reverse and return to the same oversold level. While this concept is simple to state, estimating the exact oversold price in real-time is extremely difficult. It is challenging to determine how far below the oversold threshold the price may go and at what point one should enter a trade. Similarly, identifying where the price will rebound to, allowing for a profitable exit, is also complex. The same challenge exists for overbought levels\u2014knowing where to sell and when to re-enter.<\/p><p data-start=\"1371\" data-end=\"1878\">Bollinger Bands operate on a similar principle. The bands consist of three lines, and when the price falls below the lower band, it often returns to that band, just as it tends to return from above the upper band. While this doesn&#8217;t occur every time, it happens frequently enough to be relevant. The question remains: how far below the lower band should one consider buying, and how can this point be identified? Similarly, how far above the upper band should one sell, and how can that level be determined?<\/p><p data-start=\"1880\" data-end=\"2507\">The purpose of the current function is to address this exact complexity. Given the volatility of the crypto market, this function sets RSI thresholds at 20 for oversold and 80 for overbought. It first estimates the price levels at which these RSI values will occur. Then, using historical data, it analyzes how much the price has historically dropped below (in the case of oversold) or risen above (in the case of overbought) those thresholds. Based on this data, it further evaluates where the price typically rebounds to after such movements. The function then provides predicted levels based on current and projected prices.<\/p><p data-start=\"2509\" data-end=\"3085\">RSI is commonly calculated using either 7 or 14 candles; this function uses 7 candles. Another important aspect of the function is that it identifies strong support or resistance zones around each expected level. The strength of these zones is determined by prioritizing higher timeframes first, followed by medium and then lower timeframes. For example, if a daily support level appears within an hourly chart, it is given preference. Furthermore, each support or resistance level is only considered valid if the price has touched that zone at least three times historically.<\/p><p data-start=\"3087\" data-end=\"3916\">The function applies the same process to Bollinger Bands, identifying levels, support, and resistance zones accordingly. However, its functionality does not end there. As mentioned earlier, both indicators reflect market conditions, but prices do not always return to their levels\u2014especially in lower timeframes where accuracy drops. Therefore, the function combines both indicators to generate consolidated levels, supports, and resistances. When both indicators are combined, accuracy improves significantly, often reaching 95% to 98%. Each coin includes a success report where one can view historical performance of the function. For most strong coins, the historical performance has been excellent, especially in predicting price rebounds from oversold conditions. The function performs particularly well on four-hour charts.<\/p><p data-start=\"3918\" data-end=\"3970\">The function&#8217;s process can be summarized as follows:<\/p><p data-start=\"3972\" data-end=\"4138\">For oversold conditions, it first identifies the price at which a coin is expected to become oversold. Then it calculates three further price levels below that point:<\/p><ol><li data-start=\"4140\" data-end=\"4376\">Minimum Level: The function examines historical data to determine the lowest point price has dropped below oversold. It then identifies this level and calculates the minimum, average, and maximum rebound levels observed from that point.<\/li><li data-start=\"4378\" data-end=\"4573\">Average Level: Using a weighted calculation method, it determines the average drop below the oversold level based on historical patterns. From this level, it also calculates three rebound levels.<\/li><li data-start=\"4575\" data-end=\"4690\">Maximum Level: It identifies the maximum historical drop from oversold and calculates corresponding rebound levels.<\/li><\/ol><p>For overbought conditions, it first finds the price at which the coin is expected to be overbought, and then calculates three levels above it:<\/p><ol><li data-start=\"4836\" data-end=\"4971\">Minimum Level: It determines the smallest historical increase after reaching overbought and calculates three potential pullback levels.<\/li><li data-start=\"4973\" data-end=\"5094\">Average Level: It finds the average historical rise above overbought and derives the corresponding three pullback levels.<\/li><li data-start=\"5096\" data-end=\"5220\">Maximum Level: It identifies the highest historical rise beyond overbought and calculates three pullback levels accordingly.<\/li><\/ol><p>To enhance usability, the function includes several visual aids:<\/p><ol><li data-start=\"5288\" data-end=\"5506\">Table rows and live prices are color-coded. The closer a coin is to oversold, the lighter the green shade; the closer to overbought, the lighter the red. This makes it easier to interpret market conditions at a glance.<\/li><li data-start=\"5508\" data-end=\"5930\">When a coin reaches oversold or overbought, a blinking dot appears. A blue dot indicates an RSI-based signal, a red dot for Bollinger Band signals, and a green dot if both conditions are met. Combining row color and dot indicator gives an immediate sense of a coin\u2019s condition. For example, a green row with a green dot means both indicators signal oversold, while a red row with a green dot indicates both are overbought.<\/li><li data-start=\"5932\" data-end=\"6215\">Live prices update every minute. Below each coin, a historical performance report is available to assess how well this strategy has worked in the past. Coins are gradually being added to ensure stability of the function, and currently, only Binance-listed coins are being considered.<\/li><li data-start=\"6217\" data-end=\"6507\">For Pro users, alerts are available when the price crosses the average of both oversold or overbought levels. For example, if a price drops below the average oversold level, an alert is triggered. A user may then consider entering at that point and exiting near the original oversold level.<\/li><li data-start=\"6509\" data-end=\"6879\">An additional option for high-risk alerts is also provided. Instead of triggering strictly at the average level, these alerts are generated slightly above and below the average. This allows users to split their entry into two parts, resulting in an average entry near the lower boundary. This is particularly useful for coins that may not always reach the average level.<\/li><li data-start=\"6881\" data-end=\"7371\">The webhook management feature is designed to integrate Botslash with 3Commas, an automated trading platform. Once connected, alerts generated from Botslash can send buy or sell signals to 3Commas, allowing for fully automated trading from entry to profit-taking. By joining 3Commas using our referral link, users can get a one-time discount\u201440% on annual membership and 20% on monthly membership:<br data-start=\"7278\" data-end=\"7281\" \/><a class=\"\" href=\"https:\/\/app.3commas.io\/auth\/registration?utm_source=referral&amp;utm_medium=cabinet&amp;c=tc858563\" target=\"_new\" rel=\"noopener\" data-start=\"7281\" data-end=\"7371\">https:\/\/app.3commas.io\/auth\/registration?utm_source=referral&amp;utm_medium=cabinet&amp;c=tc858563<\/a><\/li><\/ol><p>According to our experience, this strategy is nearly fail-proof for good coins on the daily and four-hour timeframes. However, since all data is collected and analyzed automatically, errors are still possible. Therefore, users are advised to make trading decisions based on their own research. Botslash does not provide financial advice nor accepts responsibility for any trading risks.<\/p><p data-start=\"0\" data-end=\"443\">\u00a0<\/p><p data-start=\"7761\" data-end=\"7790\">Owais Paracha<br data-start=\"7774\" data-end=\"7777\" \/>Botslash Team<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-89ff533 elementor-widget elementor-widget-text-editor\" data-id=\"89ff533\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><a href=\"https:\/\/www.botslash.com\/webhook-management-ur\/\">Webhook Management<\/a><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ffdeba4 e-con-full e-flex e-con e-child\" data-id=\"ffdeba4\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c33f1c elementor-widget elementor-widget-shortcode\" data-id=\"0c33f1c\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <script>\n    var cplu_ajax_url = 'https:\/\/www.botslash.com\/wp-admin\/admin-ajax.php';\n\n    \/\/ --- \u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0648\u067e\u0631 define \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06c1\u0631 \u062c\u06af\u06c1 available \u0631\u06c1\u06d2 ---\n\tfunction cplu_initDetailSections(detailRow) {\n\t\tlet mainRadios = detailRow.querySelectorAll('input[name=\"cplu_main_mode\"]');\n\t\tlet sections = {\n\t\t\trsi: detailRow.querySelector('#rsi_section'),\n\t\t\tbb: detailRow.querySelector('#bb_section'),\n\t\t\tdouble: detailRow.querySelector('#double_section')\n\t\t};\n\t\tfunction showSection(mode) {\n\t\t\tfor(let key in sections) if(sections[key]) sections[key].style.display = 'none';\n\t\t\tif (sections[mode]) sections[mode].style.display = '';\n\n\t\t\t\/\/ \u2705 SUCCESS REPORT DATA-MODE UPDATE\n\t\t\tlet activeSection = sections[mode];\n\t\t\tif (activeSection) {\n\t\t\t\tlet reportLink = activeSection.querySelector('.cplu-show-success-report');\n\t\t\t\tif (reportLink) reportLink.setAttribute('data-mode', mode);\n\t\t\t}\n\t\t}\n\t\tmainRadios.forEach(radio => {\n\t\t\tradio.addEventListener('change', function() {\n\t\t\t\tshowSection(this.value);\n\t\t\t});\n\t\t});\n\t\tlet checked = detailRow.querySelector('input[name=\"cplu_main_mode\"]:checked');\n\t\tshowSection(checked ? checked.value : 'double');\n\t}\n\n    document.addEventListener('DOMContentLoaded', function () {\n        const tabs = document.querySelectorAll('.cpluTab');\n        const content = document.getElementById('cpluContent');\n        const search = document.getElementById('cplu_search');\n\n        const loadTable = (interval) => {\n\t\t\ttabs.forEach(t => t.classList.remove('active'));\n\t\t\tdocument.querySelector(`.cpluTab[data-interval=\"${interval}\"]`).classList.add('active');\n\n\t\t\tcontent.innerHTML = `<div class=\"loading-dots\"><span><\/span><span><\/span><span><\/span><\/div>`;\n\n\t\t\tfetch('https:\/\/www.botslash.com\/wp-admin\/admin-ajax.php?action=load_pair_table&interval=' + interval)\n\t\t\t\t.then(res => res.text())\n\t\t\t\t.then(html => {\n\t\t\t\t\tcontent.innerHTML = html;\n\t\t\t\t\tapplySearch();\n\t\t\t\t\tinitDetailRows();\n\t\t\t\t\tinitRowColors(interval);\n\n\t\t\t\t\t\/\/ \u2705 \u06cc\u06c1 \u0644\u0627\u0626\u0646 \u0644\u0627\u0632\u0645\u06cc \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0686\u06cc\u06a9 \u0628\u0627\u06a9\u0633 disable \u06c1\u0648\u06ba\n\t\t\t\t\tupdateBulkCheckbox();\n\t\t\t\t});\n\t\t};\n\n        tabs.forEach(tab => {\n            tab.addEventListener('click', () => {\n                loadTable(tab.getAttribute('data-interval'));\n            });\n        });\n\n        function applySearch() {\n            search.addEventListener('input', function () {\n                const filter = this.value.toUpperCase();\n                document.querySelectorAll('.cplu_row').forEach(row => {\n                    const pair = row.getAttribute('data-pair').toUpperCase();\n                    row.style.display = pair.includes(filter) ? '' : 'none';\n                    const detailRow = document.getElementById('cplu_detail_' + row.getAttribute('data-interval') + '_' + row.getAttribute('data-pair'));\n                    if (detailRow) detailRow.style.display = 'none';\n                });\n            });\n        }\n\n\t\tfunction updateRowBackground(row, price, expectedOversold, expectedOverbought, info) {\n\t\t\tif (!price || !expectedOversold || !expectedOverbought) return;\n\t\t\tprice = parseFloat(price);\n\t\t\texpectedOversold = parseFloat(expectedOversold);\n\t\t\texpectedOverbought = parseFloat(expectedOverbought);\n\t\t\tconst color = cplu_getColor(price, expectedOversold, expectedOverbought);\n\t\t\trow.style.backgroundColor = color;\n\n\t\t\tconst dot = row.querySelector('.cplu-blinking-dot');\n\t\t\tif (dot && info) {\n\t\t\t\tlet dotColor = '';\n\t\t\t\tif (info.double && info.double.expected_oversold && price <= parseFloat(info.double.expected_oversold)) {\n\t\t\t\t\tdotColor = '#006400'; \/\/ dark green for double oversold\n\t\t\t\t} else if (info.double && info.double.expected_overbought && price >= parseFloat(info.double.expected_overbought)) {\n\t\t\t\t\tdotColor = '#006400'; \/\/ dark green for double overbought\n\t\t\t\t} else if (info.bb && info.bb.expected_oversold && price <= parseFloat(info.bb.expected_oversold)) {\n\t\t\t\t\tdotColor = '#8B0000'; \/\/ dark red for bb oversold\n\t\t\t\t} else if (info.bb && info.bb.expected_overbought && price >= parseFloat(info.bb.expected_overbought)) {\n\t\t\t\t\tdotColor = '#8B0000'; \/\/ dark red for bb overbought\n\t\t\t\t} else if (info.rsi && (price <= parseFloat(info.rsi.expected_oversold) || price >= parseFloat(info.rsi.expected_overbought))) {\n\t\t\t\t\tdotColor = '#2196f3'; \/\/ blue for rsi\n\t\t\t\t}\n\n\t\t\t\tif (dotColor) {\n\t\t\t\t\tdot.style.display = 'inline-block';\n\t\t\t\t\tdot.style.backgroundColor = dotColor;\n\t\t\t\t\tdot.style.boxShadow = `0 0 6px ${dotColor}`;\n\t\t\t\t} else {\n\t\t\t\t\tdot.style.display = 'none';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction initRowColors(interval) {\n\t\t\tconst rows = document.querySelectorAll(`.cplu-clickable-row[data-interval=\"${interval}\"]`);\n\t\t\tconst pairs = Array.from(rows).map(row => row.getAttribute('data-pair'));\n\n\t\t\tfetch(cplu_ajax_url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {'Content-Type': 'application\/x-www-form-urlencoded'},\n\t\t\t\tbody: 'action=cplu_get_multiple_prices&interval=' + encodeURIComponent(interval) +\n\t\t\t\t\t  '&pairs[]=' + pairs.map(encodeURIComponent).join('&pairs[]=')\n\t\t\t})\n\t\t\t.then(res => res.json())\n\t\t\t.then(data => {\n\t\t\t\trows.forEach(row => {\n\t\t\t\t\tconst pair = row.getAttribute('data-pair');\n\t\t\t\t\tconst info = data[pair];\n\t\t\t\t\tif (!info) return;\n\t\t\t\t\tupdateRowBackground(row, info.price, info.rsi.expected_oversold, info.rsi.expected_overbought, info); \/\/ \u2190 info \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\t\/\/ --- Bulk Subscribe Checkbox State (Updated) ---\n\t\tfunction updateBulkCheckbox() {\n\t\t\tconst isBulkBox = document.getElementById('cplu_sub_all');\n\t\t\tconst activeTab = document.querySelector('.cpluTab.active');\n\t\t\tif (!isBulkBox || !activeTab) return;\n\n\t\t\tconst interval = activeTab.getAttribute('data-interval');\n\n\t\t\tfetch(cplu_ajax_url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application\/x-www-form-urlencoded' },\n\t\t\t\tbody: 'action=cplu_get_bulk_sub_status&interval=' + encodeURIComponent(interval)\n\t\t\t})\n\t\t\t.then(res => res.json())\n\t\t\t.then(data => {\n\t\t\t\tconst isBulkChecked = !!data.status;\n\t\t\t\tconst shouldDisable = !!data.apply_disable;\n\n\t\t\t\tisBulkBox.checked = isBulkChecked;\n\t\t\t\tupdatePairCheckboxes(shouldDisable, true); \/\/ \u2190 true = initial load\n\t\t\t});\n\t\t}\n\n\t\tfunction cplu_getColor(price, os, ob) {\n\t\t\tconst range = ob - os;\n\t\t\tif (range === 0) return '#000000'; \/\/ avoid division by zero\n\t\t\tlet normalized = (price - os) \/ range;\n\n\t\t\t\/\/ Extend gradient smoothly beyond oversold\/overbought by clamping normalized\n\t\t\tif (normalized < 0) normalized = 0;\n\t\t\tif (normalized > 1) normalized = 1;\n\n\t\t\tif (normalized < 0.5) {\n\t\t\t\tconst factor = normalized * 2;\n\t\t\t\tconst g = Math.round(204 + (0 - 204) * factor);\n\t\t\t\tconst b = Math.round(153 + (0 - 153) * factor);\n\t\t\t\treturn `rgb(0, ${g}, ${b})`; \/\/ tealish shades\n\t\t\t} else {\n\t\t\t\tconst factor = (normalized - 0.5) * 2;\n\t\t\t\tconst r = Math.round(204 * factor);\n\t\t\t\tconst b = Math.round(51 * factor);\n\t\t\t\treturn `rgb(${r}, 0, ${b})`; \/\/ reddish shades\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction updatePairCheckboxes(disable, isInitialLoad = false) {\n\t\t  \/\/ Alert checkboxes\n\t\t  const alertCheckboxes = document.querySelectorAll('.cplu-pair-checkbox');\n\t\t  alertCheckboxes.forEach(cb => {\n\t\t\tcb.disabled = disable;\n\t\t  });\n\n\t\t  \/\/ High risk checkboxes (bottom)\n\t\t  const highRiskCheckboxes = document.querySelectorAll('.cplu-highrisk-checkbox');\n\t\t  highRiskCheckboxes.forEach(cb => {\n\t\t\tcb.disabled = disable;\n\t\t  });\n\n\t\t  \/\/ High risk checkboxes (mid)\n\t\t  const highRiskMidCheckboxes = document.querySelectorAll('.cplu-highrisk-m-checkbox');\n\t\t  highRiskMidCheckboxes.forEach(cb => {\n\t\t\tcb.disabled = disable;\n\t\t  });\n\t\t}\n\n\t\tdocument.getElementById('cplu_sub_all').addEventListener('change', function() {\n\t\t\tupdatePairCheckboxes(this.checked);\n\t\t});\n\n        function initDetailRows() {\n            document.querySelectorAll('.cplu-clickable-row').forEach(row => {\n                row.addEventListener('click', function () {\n                    const pair = this.getAttribute('data-pair');\n                    const interval = this.getAttribute('data-interval');\n                    const rowId = 'cplu_detail_' + interval + '_' + pair;\n                    const detailRow = document.getElementById(rowId);\n\n                    if (detailRow.style.display === 'table-row') {\n                        detailRow.style.display = 'none';\n                        return;\n                    }\n\n                    document.querySelectorAll('.cplu_detail_row').forEach(r => r.style.display = 'none');\n                    detailRow.style.display = 'table-row';\n                    detailRow.querySelector('td').innerHTML = `<div class=\"loading-dots\"><span><\/span><span><\/span><span><\/span><\/div>`;\n\n                    const mode = 'double';\n\n                    fetch(cplu_ajax_url + '?action=get_pair_analysis&pair=' + encodeURIComponent(pair) + '&interval=' + interval + '&mode=' + mode)\n                        .then(res => res.text())\n                        .then(data => {\n                            detailRow.querySelector('td').innerHTML = `<div class=\"cplu-analysis-content\">${data}<\/div>`;\n\t\t\t\t\t\t\tcplu_initDetailSections(detailRow);\n\n\t\t\t\t\t\t\t\/\/ \u0627\u0628 radio \u06a9\u0627 \u0627\u06cc\u0648\u0646\u0679 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u0635\u0631\u0641 analysis-content \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u06d2\n\t\t\t\t\t\t\tlet mainRadios = detailRow.querySelectorAll('input[name=\"cplu_main_mode\"]');\n\t\t\t\t\t\t\tmainRadios.forEach(radio => {\n\t\t\t\t\t\t\t\tradio.addEventListener('change', function () {\n\t\t\t\t\t\t\t\t\t\/\/ \u06a9\u0648\u0626\u06cc AJAX \u0646\u06c1\u06cc\u06ba!\n\t\t\t\t\t\t\t\t\tconst selectedMode = this.value;\n\t\t\t\t\t\t\t\t\tlet sections = {\n\t\t\t\t\t\t\t\t\t\trsi: detailRow.querySelector('#rsi_section'),\n\t\t\t\t\t\t\t\t\t\tbb: detailRow.querySelector('#bb_section'),\n\t\t\t\t\t\t\t\t\t\tdouble: detailRow.querySelector('#double_section')\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tfor (let key in sections) if(sections[key]) sections[key].style.display = 'none';\n\t\t\t\t\t\t\t\t\tif (sections[selectedMode]) sections[selectedMode].style.display = '';\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n                        });\n                });\n            });\n        }\n\n        loadTable('1h');\n        updateBulkCheckbox();\n\n\t\t\t\/\/ \u062c\u0628 \u0628\u06be\u06cc \u0679\u06cc\u0628 \u06a9\u0644\u06a9 \u06c1\u0648 (\u06cc\u0639\u0646\u06cc \u0627\u0646\u0679\u0631\u0648\u06cc\u0644 \u0628\u062f\u0644\u06d2)\n\t\t\tdocument.querySelectorAll('.cpluTab').forEach(tab => {\n\t\t\t\ttab.addEventListener('click', function() {\n\t\t\t\t\tsetTimeout(updateBulkCheckbox, 20); \/\/ active \u0627\u067e\u0688\u06cc\u0679 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u062a\u06be\u0648\u0691\u0627 \u0627\u0646\u062a\u0638\u0627\u0631\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t\/\/ Save All \u067e\u0631 \u06a9\u0644\u06a9 \u0627\u06cc\u0648\u0646\u0679\n\t\t\tconst saveAllBtn = document.getElementById('cplu_save_all_subs');\n\t\t\tif (saveAllBtn) {\n\t\t\t  saveAllBtn.addEventListener('click', function () {\n\t\t\t\tconst isChecked = document.getElementById('cplu_sub_all').checked;\n\t\t\t\tconst activeTab = document.querySelector('.cpluTab.active');\n\t\t\t\tif (!activeTab) return;\n\n\t\t\t\tconst interval = activeTab.getAttribute('data-interval');\n\t\t\t\tconst payload = new URLSearchParams();\n\t\t\t\tpayload.append('action', 'cplu_bulk_subscribe_all');\n\t\t\t\tpayload.append('interval', interval);\n\t\t\t\tpayload.append('subscribe', isChecked ? '1' : '0');\n\n\t\t\t\t\/\/ \u2705 \u0627\u06af\u0631 \"All alerts\" \u0627\u0646\u0686\u06cc\u06a9 \u06c1\u06d2 \u2192 \u062a\u0628 \u06c1\u06cc \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0645\u0646\u062a\u062e\u0628 \u0686\u06cc\u06a9 \u0628\u0627\u06a9\u0633\u0632 \u0628\u06be\u06cc\u062c\u06cc\u06ba\n\t\t\t\tif (!isChecked) {\n\t\t\t\t  document.querySelectorAll('.cplu-pair-checkbox').forEach(cb => {\n\t\t\t\t\tif (cb.checked) payload.append('selected_pairs[]', cb.value);\n\t\t\t\t  });\n\t\t\t\t}\n\n\t\t\t\t\/\/ \u2705 \u062f\u0648\u0646\u0648\u06ba \u0628\u06be\u06cc\u062c\u06cc\u06ba: bottom \u0627\u0648\u0631 mid\n\t\t\t\tdocument.querySelectorAll('.cplu-highrisk-checkbox').forEach(cb => { \/\/ bottom\n\t\t\t\t  const pair = cb.getAttribute('data-pair');\n\t\t\t\t  payload.append(`highrisk_pairs[${pair}]`, cb.checked ? '1' : '0');\n\t\t\t\t});\n\t\t\t\tdocument.querySelectorAll('.cplu-highrisk-m-checkbox').forEach(cb => { \/\/ mid\n\t\t\t\t  const pair = cb.getAttribute('data-pair');\n\t\t\t\t  payload.append(`highrisk_pairs_m[${pair}]`, cb.checked ? '1' : '0');\n\t\t\t\t});\n\n\t\t\t\tfetch(cplu_ajax_url, {\n\t\t\t\t  method: 'POST',\n\t\t\t\t  headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\n\t\t\t\t  body: payload.toString()\n\t\t\t\t})\n\t\t\t\t.then(res => res.json())\n\t\t\t\t.then(data => {\n\t\t\t\t  alert(data.message || 'Subscription updated!');\n\t\t\t\t  updateBulkCheckbox(); \/\/ \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u067e\u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u062f\u0631\u0633\u062a \u0627\u0633\u0679\u06cc\u0679 \u06c1\u0648\n\t\t\t\t});\n\t\t\t  });\n\t\t\t}\n\t\t\t\n\t\t\tconst resetBtn = document.getElementById('cplu_reset_subs');\n\t\t\tif (resetBtn) {\n\t\t\t\tresetBtn.addEventListener('click', function () {\n\t\t\t\t\tconst isChecked = document.getElementById('cplu_sub_all').checked;\n\t\t\t\t\tif (isChecked) {\n\t\t\t\t\t\talert(\"\u274c You can't reset while 'All alerts' is active.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdocument.querySelectorAll('.cplu-pair-checkbox').forEach(cb => {\n\t\t\t\t\t\tcb.checked = false;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n        \n        \/\/ \u2500\u2500\u2500\u2500\u2500 Success report click handler \u2500\u2500\u2500\u2500\u2500\n        document.body.addEventListener('click', function(e){\n            let target = e.target;\n            if(target.classList.contains('cplu-show-success-report')){\n              e.preventDefault();\n              let reportBox = target.nextElementSibling;\n              if(!reportBox || !reportBox.classList.contains('cplu-success-report')) return;\n              if(reportBox.style.display === 'block'){\n                reportBox.style.display = 'none';\n                return;\n              }\n              reportBox.innerHTML = 'Loading...';\n              reportBox.style.display = 'block';\n              let pair = target.getAttribute('data-pair');\n              let interval = target.getAttribute('data-interval');\n              let mode = target.getAttribute('data-mode');\n\t\t\t  fetch(cplu_ajax_url + '?action=cplu_get_success_report&pair=' + encodeURIComponent(pair) + '&interval=' + encodeURIComponent(interval) + '&mode=' + encodeURIComponent(mode))\n                .then(res => res.text())\n                .then(html => { reportBox.innerHTML = html; });\n            }\n        });\n        \n        document.body.addEventListener('click', function(e) {\n\t\t\tif (\n\t\t\t\te.target.matches('.cplu-pair-checkbox') || \n\t\t\t\te.target.matches('.cplu-highrisk-checkbox') ||\n\t\t\t\te.target.matches('.cplu-highrisk-m-checkbox')\n\t\t\t) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\t\t}, true);\n    });\n    <\/script>\n\n    <div id=\"cpluTabs\">\n        <button class=\"cpluTab active\" data-interval=\"1h\">1 Hour<\/button>\n        <button class=\"cpluTab\" data-interval=\"4h\">4 Hours<\/button>\n        <button class=\"cpluTab\" data-interval=\"1d\">1 Day<\/button>\n    <\/div>\n\n\t\t<div style=\"display: flex; align-items: center; gap: 10px; margin-bottom: 10px; direction: ltr;\">\n\t\t<input type=\"text\" id=\"cplu_search\" placeholder=\"Search by Pair...\" style=\"flex:1; padding:8px;\">\n\n\t\t<label title=\"This feature is only available for pro users!\" style=\"display:flex; align-items:center; gap:5px; color: #888;\">\n\t\t\t<input type=\"checkbox\" id=\"cplu_sub_all\" disabled>\n\t\t\tAll alerts\n\t\t<\/label>\n\n\t\t<button id=\"cplu_save_all_subs\" title=\"Save Subscriptions\" disabled style=\"padding:6px 10px; font-size:16px;\">\n\t\t\t\ud83d\udcbe\n\t\t<\/button>\n\t\t<button id=\"cplu_reset_subs\" title=\"Reset Alerts\" disabled style=\"padding:6px 10px; font-size:16px;\">\n\t\t\t\ud83d\udd04\n\t\t<\/button>\n\t<\/div>\n\t\n    <div id=\"cpluContent\">\n        <div class=\"loading-dots\"><span><\/span><span><\/span><span><\/span><\/div>\n    <\/div>\n\n    <style>\n        #cpluTabs {\n            display: flex;\n            gap: 0;\n            border-bottom: 2px solid #4a0066;\n            margin-bottom: 15px;\n            direction: ltr;\n        }\n        .cpluTab {\n            background: #2e004d !important;\n            color: #ddd !important;\n            border: none !important;\n            padding: 12px 20px !important;\n            font-size: 14px !important;\n            font-weight: 500 !important;\n            cursor: pointer;\n            transition: background 0.3s ease !important;\n            border-radius: 0px !important;\n            margin-right: 2px !important;\n            position: relative !important;\n            top: 2px !important;\n            box-shadow: none !important;\n        }\n        .cpluTab:hover {\n            background: #3f0077;\n            color: #fff;\n        }\n        .cpluTab.active {\n            background: #ffffff !important;\n            color: #4a0066 !important;\n            font-weight: 600 !important;\n            border: 1px solid #ccc !important;\n            border-bottom: 1px solid #ffffff !important;\n            top: 0 !important;\n            z-index: 1 !important;\n            border-radius: 0px !important;\n        }\n        #cplu_search {\n            direction: ltr;\n        }\n        .cplu-blinking-dot {\n            height: 12px;\n            width: 12px;\n            margin-right: 7px;\n            margin-left: 2px;\n            border-radius: 50%;\n            display: inline-block;\n            background: #2196f3;\n            box-shadow: 0 0 6px #2196f3;\n            vertical-align: middle;\n            animation: cplu-blink 1s infinite;\n        }\n        @keyframes cplu-blink {\n            0%, 100% { opacity: 1; }\n            50% { opacity: 0; }\n        }\n    <\/style>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0ee696b elementor-widget elementor-widget-html\" data-id=\"0ee696b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-4915637164109605\"\r\n     crossorigin=\"anonymous\"><\/script>\r\n<!-- Manual Ad square -->\r\n<ins class=\"adsbygoogle\"\r\n     style=\"display:block\"\r\n     data-ad-client=\"ca-pub-4915637164109605\"\r\n     data-ad-slot=\"4846741767\"\r\n     data-ad-format=\"auto\"\r\n     data-full-width-responsive=\"true\"><\/ins>\r\n<script>\r\n     (adsbygoogle = window.adsbygoogle || []).push({});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-16a9d9c e-con-full e-flex e-con e-child\" data-id=\"16a9d9c\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c35367b e-con-full e-flex e-con e-child\" data-id=\"c35367b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c45e9a4 elementor-widget elementor-widget-html\" data-id=\"c45e9a4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-4915637164109605\"\r\n     crossorigin=\"anonymous\"><\/script>\r\n<!-- Manual Ad square -->\r\n<ins class=\"adsbygoogle\"\r\n     style=\"display:block\"\r\n     data-ad-client=\"ca-pub-4915637164109605\"\r\n     data-ad-slot=\"4846741767\"\r\n     data-ad-format=\"auto\"\r\n     data-full-width-responsive=\"true\"><\/ins>\r\n<script>\r\n     (adsbygoogle = window.adsbygoogle || []).push({});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-62dd46c elementor-widget elementor-widget-heading\" data-id=\"62dd46c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Latest Posts<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-720a69a elementor-grid-1 elementor-posts--thumbnail-none elementor-posts--align-left elementor-grid-tablet-1 elementor-grid-mobile-1 elementor-widget elementor-widget-posts\" data-id=\"720a69a\" data-element_type=\"widget\" data-settings=\"{&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;classic_columns_tablet&quot;:&quot;1&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-248884 post type-post status-publish format-standard has-post-thumbnail hentry category-analysis-opinions category-academy tag-bitcoin-metrics tag-blockchain-activity tag-crypto-etf-inflows tag-ethereum-staking tag-market-cap-trends tag-on-chain-analysis tag-profit-taking-signals\">\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.botslash.com\/en\/academy\/analysis-opinions\/7-essential-on-chain-metrics-driving-bitcoin-ethereum-rally-october-9-2025-insights\/\">\n\t\t\t\t7 Essential On-Chain Metrics Driving Bitcoin &#038; Ethereum Rally: October 9, 2025 Insights\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-192208 post type-post status-publish format-standard hentry category-basics category-academy tag-decentralized-identity\">\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.botslash.com\/en\/academy\/basics\/decentralized-identity-did-the-new-concept-of-identity-in-web3\/\">\n\t\t\t\tDecentralized Identity (DID): The New Concept of Identity in Web3\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-191412 post type-post status-publish format-standard has-post-thumbnail hentry category-academy category-basics tag-cbdc tag-cbdcs tag-central-bank-digital-currency tag-defi tag-digital-euro tag-financial-inclusion tag-programmable-money tag-stablecoin-regulation tag-stablecoins\">\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.botslash.com\/en\/academy\/cbdcs-vs-stablecoins-government-control-vs-public-freedom-5-important-things-to-know\/\">\n\t\t\t\tCBDCs vs Stablecoins: Government Control vs Public Freedom 5 Important things to know\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-188801 post type-post status-publish format-standard has-post-thumbnail hentry category-academy category-basics tag-bitcoin tag-defi tag-smart-contracts tag-web-3 tag-web3\">\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.botslash.com\/en\/academy\/web3-and-its-relationship-with-the-financial-system\/\">\n\t\t\t\tWeb3 and Its Relationship with the Financial System\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-187936 post type-post status-publish format-standard has-post-thumbnail hentry category-analysis-opinions category-academy category-news-analysis tag-bitcoin-stability tag-blackrock-quantum-computing tag-btc-price-movement tag-citic-securities-crypto tag-de-globalization-crypto tag-digital-gold-cryptocurrency tag-eth-etf-blackrock tag-ethereum-etf-inflow tag-global-de-dollarization tag-institutional-ethereum-investment tag-post-quantum-blockchain tag-quantum-crypto-risk tag-spot-ethereum-etf\">\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.botslash.com\/en\/academy\/analysis-opinions\/4-important-crypto-news-ethereum-etf-inflows-bitcoin-price-stability-quantum-risk-alert-crypto-as-digital-gold-botslash-daily-crypto-news-analysis\/\">\n\t\t\t\t4 Important Crypto News: Ethereum ETF Inflows, Bitcoin Price Stability, Quantum Risk Alert, Crypto as Digital Gold: BotSlash Daily Crypto News Analysis\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\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\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Crypto Pair Directions A try to guess direction of crypto pairs according to famous indicators Details What is the Pair Prediction Function and how does it work? Most of us have heard of indicators like RSI and Bollinger Bands and have likely used them. These are among the most well-known tools in technical analysis. A significant use of RSI is in identifying &#8220;oversold&#8221; and &#8220;overbought&#8221; conditions. Oversold is generally seen as a potential buying point, while overbought is considered a potential selling point. However, this does not mean that an asset bought at oversold must be sold at overbought; rather, overbought is used independently as an exit signal. When we look at RSI on a chart, we often observe that when RSI reaches the oversold zone\u2014typically below levels like 30 or 35 in traditional markets\u2014the price tends to reverse and return to the same oversold level. While this concept is simple to state, estimating the exact oversold price in real-time is extremely difficult. It is challenging to determine how far below the oversold threshold the price may go and at what point one should enter a trade. Similarly, identifying where the price will rebound to, allowing for a profitable exit, is also complex. The same challenge exists for overbought levels\u2014knowing where to sell and when to re-enter. Bollinger Bands operate on a similar principle. The bands consist of three lines, and when the price falls below the lower band, it often returns to that band, just as it tends to return from above the upper band. While this doesn&#8217;t occur every time, it happens frequently enough to be relevant. The question remains: how far below the lower band should one consider buying, and how can this point be identified? Similarly, how far above the upper band should one sell, and how can that level be determined? The purpose of the current function is to address this exact complexity. Given the volatility of the crypto market, this function sets RSI thresholds at 20 for oversold and 80 for overbought. It first estimates the price levels at which these RSI values will occur. Then, using historical data, it analyzes how much the price has historically dropped below (in the case of oversold) or risen above (in the case of overbought) those thresholds. Based on this data, it further evaluates where the price typically rebounds to after such movements. The function then provides predicted levels based on current and projected prices. RSI is commonly calculated using either 7 or 14 candles; this function uses 7 candles. Another important aspect of the function is that it identifies strong support or resistance zones around each expected level. The strength of these zones is determined by prioritizing higher timeframes first, followed by medium and then lower timeframes. For example, if a daily support level appears within an hourly chart, it is given preference. Furthermore, each support or resistance level is only considered valid if the price has touched that zone at least three times historically. The function applies the same process to Bollinger Bands, identifying levels, support, and resistance zones accordingly. However, its functionality does not end there. As mentioned earlier, both indicators reflect market conditions, but prices do not always return to their levels\u2014especially in lower timeframes where accuracy drops. Therefore, the function combines both indicators to generate consolidated levels, supports, and resistances. When both indicators are combined, accuracy improves significantly, often reaching 95% to 98%. Each coin includes a success report where one can view historical performance of the function. For most strong coins, the historical performance has been excellent, especially in predicting price rebounds from oversold conditions. The function performs particularly well on four-hour charts. The function&#8217;s process can be summarized as follows: For oversold conditions, it first identifies the price at which a coin is expected to become oversold. Then it calculates three further price levels below that point: Minimum Level: The function examines historical data to determine the lowest point price has dropped below oversold. It then identifies this level and calculates the minimum, average, and maximum rebound levels observed from that point. Average Level: Using a weighted calculation method, it determines the average drop below the oversold level based on historical patterns. From this level, it also calculates three rebound levels. Maximum Level: It identifies the maximum historical drop from oversold and calculates corresponding rebound levels. For overbought conditions, it first finds the price at which the coin is expected to be overbought, and then calculates three levels above it: Minimum Level: It determines the smallest historical increase after reaching overbought and calculates three potential pullback levels. Average Level: It finds the average historical rise above overbought and derives the corresponding three pullback levels. Maximum Level: It identifies the highest historical rise beyond overbought and calculates three pullback levels accordingly. To enhance usability, the function includes several visual aids: Table rows and live prices are color-coded. The closer a coin is to oversold, the lighter the green shade; the closer to overbought, the lighter the red. This makes it easier to interpret market conditions at a glance. When a coin reaches oversold or overbought, a blinking dot appears. A blue dot indicates an RSI-based signal, a red dot for Bollinger Band signals, and a green dot if both conditions are met. Combining row color and dot indicator gives an immediate sense of a coin\u2019s condition. For example, a green row with a green dot means both indicators signal oversold, while a red row with a green dot indicates both are overbought. Live prices update every minute. Below each coin, a historical performance report is available to assess how well this strategy has worked in the past. Coins are gradually being added to ensure stability of the function, and currently, only Binance-listed coins are being considered. For Pro users, alerts are available when the price crosses the average of both oversold or overbought levels. For example, if a price drops below the average oversold level, an alert is triggered. A<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-192897","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.botslash.com\/en\/wp-json\/wp\/v2\/pages\/192897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.botslash.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.botslash.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.botslash.com\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.botslash.com\/en\/wp-json\/wp\/v2\/comments?post=192897"}],"version-history":[{"count":0,"href":"https:\/\/www.botslash.com\/en\/wp-json\/wp\/v2\/pages\/192897\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.botslash.com\/en\/wp-json\/wp\/v2\/media?parent=192897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}