// Конфигурация для RSI const RSI_PERIODS = 14; const RSI_OVERBOUGHT = 70; const RSI_OVERSOLD = 30; // Инициализация переменных let selectedCrypto = 'BTCUSDT'; // Функция для переключения вкладок document.querySelectorAll('.tab-button').forEach(button => { button.addEventListener('click', () => { const tabId = button.getAttribute('data-tab'); document.querySelectorAll('.tab-button').forEach(btn => btn.classList.remove('active')); button.classList.add('active'); document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active')); document.getElementById(tabId).classList.add('active'); }); }); // Функция для обновления спидометра RSI function updateRSIGauge(totalSignal) { let recommendation = totalSignal.text; let color = ''; let rotation = 0; switch (totalSignal.class) { case 'strong-buy': color = '#00C853'; // Зеленый rotation = -90; // Максимально влево break; case 'buy': color = '#69F0AE'; // Светло-зеленый rotation = -45; // Влево break; case 'neutral': color = '#FFFFFF'; // Белый rotation = 0; // По центру break; case 'sell': color = '#FF5252'; // Красный rotation = 45; // Вправо break; case 'strong-sell': color = '#D50000'; // Темно-красный rotation = 90; // Максимально вправо break; default: color = '#FFFFFF'; // Белый (по умолчанию) rotation = 0; // По центру recommendation = 'Нейтрально'; } const recommendationEl = document.getElementById('rsiRecommendation'); recommendationEl.textContent = recommendation; recommendationEl.style.color = color === '#FFFFFF' ? '#000000' : '#FFFFFF'; recommendationEl.style.backgroundColor = color; const needle = document.querySelector('.rsi-needle'); needle.style.transform = `rotate(${rotation}deg)`; } // Функция для обновления курсов криптовалют async function updateCryptoRates() { try { const symbols = ['BTCUSDT', 'ETHUSDT', 'LTCUSDT']; for (const symbol of symbols) { const response = await fetch(`https://api.bybit.com/v5/market/tickers?category=spot&symbol=${symbol}`); const data = await response.json(); if (data.result && data.result.list && data.result.list[0]) { const price = parseFloat(data.result.list[0].lastPrice).toFixed(2); const symbolId = symbol.replace('USDT', '').toLowerCase(); document.querySelector(`#${symbolId} .price`).textContent = `$${price}`; } } } catch (error) { console.error('Ошибка при обновлении курсов криптовалют:', error); } } // Функция для обновления курсов фиатных валют async function updateFiatRates() { try { const response = await fetch('https://www.cbr-xml-daily.ru/daily_json.js'); const data = await response.json(); if (data.Valute) { // USD document.querySelector('#usd .price').textContent = `${data.Valute.USD.Value.toFixed(2)} ₽`; // EUR document.querySelector('#eur .price').textContent = `${data.Valute.EUR.Value.toFixed(2)} ₽`; // CNY document.querySelector('#cny .price').textContent = `${data.Valute.CNY.Value.toFixed(2)} ₽`; } } catch (error) { console.error('Ошибка при обновлении курсов фиатных валют:', error); } } async function fetchTradingViewData(symbol) { try { const response = await fetch(`https://spritcrypto.ru/api/recommendations/BITSTAMP:${symbol.replace('USDT', 'USD')}`); const data = await response.json(); console.log(data); // Обновляем UI document.getElementById('buyCount').textContent = data.summary.buy_signals; document.getElementById('sellCount').textContent = data.summary.sell_signals; document.getElementById('neutralCount').textContent = data.summary.neutral_signals; // Обновляем общую рекомендацию updateRecommendation(data.summary.overall_recommendation); } catch (error) { console.error('Ошибка при получении данных:', error); } } function updateRecommendation(data) { console.log(data); if (data == "АКТИВНАЯ ПОКУПКА") { totalSignal = { text: 'Активно покупать', class: 'strong-buy' }; } else if (data == "Покупка") { totalSignal = { text: 'Покупать', class: 'buy' }; } else if (data == "АКТИВНАЯ ПРОДАЖА") { totalSignal = { text: 'Активно продавать', class: 'strong-sell' }; } else if (data == "Продажа") { totalSignal = { text: 'Продавать', class: 'sell' }; } else { totalSignal = { text: 'Нейтрально', class: 'neutral' }; } console.log(totalSignal); updateRSIGauge(totalSignal); } // Обновляем обработчик события document.addEventListener('DOMContentLoaded', () => { const cryptoSelect = document.getElementById('cryptoSelect'); if (cryptoSelect) { cryptoSelect.addEventListener('change', (e) => { selectedCrypto = e.target.value; fetchTradingViewData(selectedCrypto); }); } // Начальное обновление данных fetchTradingViewData(selectedCrypto); updateCryptoRates(); updateFiatRates(); // Периодическое обновление данных setInterval(() => { fetchTradingViewData(selectedCrypto); updateCryptoRates(); updateFiatRates(); }, 10000); // Обновление каждые 10 секунд });