| <!DOCTYPE html> |
| <html lang="pt-BR"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="theme-color" content="#1e3a8a"> |
| <meta name="description" content="QuantumAI - Plataforma avançada para negociação de opções binárias"> |
| <title>Quantum AI - Plataforma Universal de Opções Binárias</title> |
| <link rel="manifest" href="/manifest.json"> |
| <script src="https://cdn.tailwindcss.com"></script> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
| <style> |
| .gradient-bg { |
| background: linear-gradient(135deg, #1e3a8a 0%, #0ea5e9 100%); |
| } |
| .pulse-animation { |
| animation: pulse 2s infinite; |
| } |
| @keyframes pulse { |
| 0% { box-shadow: 0 0 0 0 rgba(14, 165, 233, 0.7); } |
| 70% { box-shadow: 0 0 0 10px rgba(14, 165, 233, 0); } |
| 100% { box-shadow: 0 0 0 0 rgba(14, 165, 233, 0); } |
| } |
| .chart-container { |
| height: 300px; |
| background-color: #1e293b; |
| border-radius: 0.5rem; |
| position: relative; |
| } |
| .signal-up { |
| background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(5, 150, 105, 0.3) 100%); |
| border-left: 4px solid #10b981; |
| } |
| .signal-down { |
| background: linear-gradient(135deg, rgba(239, 68, 68, 0.1) 0%, rgba(220, 38, 38, 0.3) 100%); |
| border-left: 4px solid #ef4444; |
| } |
| .blink { |
| animation: blink 1s step-end infinite; |
| } |
| @keyframes blink { |
| 50% { opacity: 0.5; } |
| } |
| .broker-logo { |
| height: 30px; |
| object-fit: contain; |
| filter: grayscale(100%) brightness(0.8); |
| transition: all 0.3s ease; |
| } |
| .broker-logo:hover { |
| filter: grayscale(0%) brightness(1); |
| } |
| .asset-selector { |
| scrollbar-width: thin; |
| scrollbar-color: #3b82f6 #1e293b; |
| } |
| .asset-selector::-webkit-scrollbar { |
| height: 6px; |
| } |
| .asset-selector::-webkit-scrollbar-track { |
| background: #1e293b; |
| } |
| .asset-selector::-webkit-scrollbar-thumb { |
| background-color: #3b82f6; |
| border-radius: 3px; |
| } |
| #priceChart { |
| width: 100%; |
| height: 100%; |
| } |
| .tradingview-widget-container { |
| width: 100%; |
| height: 100%; |
| } |
| .active-asset { |
| background-color: #3b82f6 !important; |
| color: white !important; |
| } |
| |
| #installContainer { |
| position: fixed; |
| bottom: 1rem; |
| right: 1rem; |
| z-index: 1000; |
| } |
| #installButton { |
| background: linear-gradient(135deg, #1e3a8a 0%, #0ea5e9 100%); |
| color: white; |
| padding: 0.75rem 1.5rem; |
| border-radius: 2rem; |
| font-weight: bold; |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); |
| display: flex; |
| align-items: center; |
| gap: 0.5rem; |
| } |
| .app-icon { |
| width: 64px; |
| height: 64px; |
| border-radius: 12px; |
| object-fit: cover; |
| } |
| @media (max-width: 768px) { |
| .chart-container { |
| height: 250px; |
| } |
| #installContainer { |
| bottom: 5rem; |
| } |
| } |
| </style> |
| </head> |
| <body class="bg-gray-900 text-gray-100"> |
| <div class="min-h-screen flex flex-col"> |
| |
| <div id="installContainer" class="hidden"> |
| <button id="installButton" class="hidden"> |
| <i class="fas fa-download"></i> |
| Instalar App |
| </button> |
| </div> |
|
|
| |
| <header class="gradient-bg py-4 px-6 shadow-lg"> |
| <div class="container mx-auto flex flex-col md:flex-row justify-between items-center space-y-3 md:space-y-0"> |
| <div class="flex items-center space-x-2"> |
| <i class="fas fa-robot text-2xl text-blue-300"></i> |
| <h1 class="text-2xl font-bold">Quantum<span class="text-blue-300">AI</span></h1> |
| </div> |
| |
| <div class="flex flex-wrap justify-center items-center gap-3"> |
| |
| <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Quotex_logo.svg/2560px-Quotex_logo.svg.png" class="broker-logo" title="Quotex"> |
| <img src="https://pocketoption.com/images/logo-white.png" class="broker-logo" title="Pocket Option"> |
| <img src="https://www.iqbroker.com/wp-content/uploads/2022/12/iqoption-logo-white.png" class="broker-logo" title="IQ Option"> |
| <img src="https://www.binary.com/images/binary-logo-white.svg" class="broker-logo" title="Binary.com"> |
| <img src="https://www.raceoption.com/assets/images/logo-white.png" class="broker-logo" title="RaceOption"> |
| </div> |
| |
| <div class="flex items-center space-x-4"> |
| <div class="bg-blue-800 px-3 py-1 rounded-full flex items-center"> |
| <span class="w-2 h-2 bg-green-400 rounded-full mr-2"></span> |
| <span class="text-sm">Conectado</span> |
| </div> |
| <div class="bg-blue-800 px-3 py-1 rounded-full"> |
| <span class="text-sm">95% Precisão</span> |
| </div> |
| <button class="bg-blue-600 hover:bg-blue-700 px-4 py-1 rounded-full text-sm transition"> |
| <i class="fas fa-user mr-1"></i> Conta |
| </button> |
| </div> |
| </div> |
| </header> |
|
|
| |
| <main class="flex-1 container mx-auto px-4 py-6 grid grid-cols-1 lg:grid-cols-4 gap-6"> |
| |
| <div class="lg:col-span-3 space-y-6"> |
| |
| <div class="bg-gray-800 rounded-xl shadow-lg p-3"> |
| <div class="flex overflow-x-auto space-x-3 pb-2 asset-selector" id="assetSelector"> |
| <button class="bg-blue-600 text-white px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0"> |
| <i class="fas fa-star mr-2"></i> Favoritos |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="EURUSD"> |
| EUR/USD |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="GBPUSD"> |
| GBP/USD |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="USDJPY"> |
| USD/JPY |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="BTCUSD"> |
| BTC/USD |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="ETHUSD"> |
| ETH/USD |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="GOLD"> |
| Ouro |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="OIL"> |
| Petróleo |
| </button> |
| <button class="asset-btn bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg whitespace-nowrap flex-shrink-0" data-asset="INDICES"> |
| Índices |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-gray-800 rounded-xl shadow-lg p-4"> |
| <div class="flex flex-col md:flex-row justify-between items-start md:items-center mb-4 space-y-2 md:space-y-0"> |
| <h2 class="text-xl font-semibold" id="assetTitle">EUR/USD - 1 Minuto</h2> |
| <div class="flex space-x-2"> |
| <button class="timeframe-btn bg-gray-700 hover:bg-gray-600 px-3 py-1 rounded text-sm transition" data-timeframe="1">1M</button> |
| <button class="timeframe-btn bg-blue-600 px-3 py-1 rounded text-sm" data-timeframe="5">5M</button> |
| <button class="timeframe-btn bg-gray-700 hover:bg-gray-600 px-3 py-1 rounded text-sm transition" data-timeframe="15">15M</button> |
| <button class="timeframe-btn bg-gray-700 hover:bg-gray-600 px-3 py-1 rounded text-sm transition" data-timeframe="60">1H</button> |
| <button class="bg-gray-700 hover:bg-gray-600 px-3 py-1 rounded text-sm transition"> |
| <i class="fas fa-chart-line mr-1"></i> Indicadores |
| </button> |
| </div> |
| </div> |
| <div class="chart-container"> |
| <div id="priceChart"></div> |
| </div> |
| <div class="mt-4 grid grid-cols-2 gap-4"> |
| <button id="callBtn" class="bg-green-600 hover:bg-green-700 py-3 rounded-lg font-bold text-lg transition flex items-center justify-center"> |
| <i class="fas fa-arrow-up mr-2"></i> CALL (Alta) |
| </button> |
| <button id="putBtn" class="bg-red-600 hover:bg-red-700 py-3 rounded-lg font-bold text-lg transition flex items-center justify-center"> |
| <i class="fas fa-arrow-down mr-2"></i> PUT (Baixa) |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-gray-800 rounded-xl shadow-lg p-4"> |
| <div class="flex justify-between items-center mb-4"> |
| <h2 class="text-xl font-semibold">Sinais em Tempo Real</h2> |
| <div class="flex space-x-2"> |
| <button id="refreshSignals" class="bg-gray-700 hover:bg-gray-600 px-3 py-1 rounded text-sm transition"> |
| <i class="fas fa-sync-alt mr-1"></i> Atualizar |
| </button> |
| <button class="bg-blue-600 px-3 py-1 rounded text-sm"> |
| <i class="fas fa-filter mr-1"></i> Filtros |
| </button> |
| </div> |
| </div> |
| <div class="overflow-x-auto"> |
| <table class="w-full"> |
| <thead class="bg-gray-700"> |
| <tr> |
| <th class="py-2 px-4 text-left">Ativo</th> |
| <th class="py-2 px-4 text-left">Tempo</th> |
| <th class="py-2 px-4 text-left">Expiração</th> |
| <th class="py-2 px-4 text-left">Direção</th> |
| <th class="py-2 px-4 text-left">Resultado</th> |
| <th class="py-2 px-4 text-left">Precisão</th> |
| <th class="py-2 px-4 text-left">Broker</th> |
| </tr> |
| </thead> |
| <tbody class="divide-y divide-gray-700" id="signalsTable"> |
| |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="space-y-6"> |
| |
| <div class="bg-gray-800 rounded-xl shadow-lg p-4"> |
| <h2 class="text-xl font-semibold mb-4">Conexão com Broker</h2> |
| <div class="space-y-4"> |
| <div> |
| <label class="block text-sm text-gray-400 mb-1">Selecione seu Broker</label> |
| <select id="brokerSelect" class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"> |
| <option>Quotex</option> |
| <option>Pocket Option</option> |
| <option>IQ Option</option> |
| <option>Binary.com</option> |
| <option>RaceOption</option> |
| <option>Outro Broker</option> |
| </select> |
| </div> |
| <div> |
| <label class="block text-sm text-gray-400 mb-1">API Key</label> |
| <input type="password" id="apiKey" class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" placeholder="Insira sua chave API"> |
| </div> |
| <button id="connectBtn" class="w-full bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 py-3 rounded-lg font-bold transition flex items-center justify-center"> |
| <i class="fas fa-plug mr-2"></i> Conectar |
| </button> |
| <div class="text-center text-sm text-gray-400"> |
| <p>Não tem uma conta? <a href="#" class="text-blue-400 hover:underline">Cadastre-se</a> em um dos nossos brokers parceiros</p> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-gray-800 rounded-xl shadow-lg p-4"> |
| <h2 class="text-xl font-semibold mb-4">Status do QuantumAI</h2> |
| <div class="space-y-4"> |
| <div> |
| <div class="flex justify-between mb-1"> |
| <span class="text-sm font-medium">Precisão Atual</span> |
| <span class="text-sm font-bold text-green-400" id="accuracyValue">95.2%</span> |
| </div> |
| <div class="w-full bg-gray-700 rounded-full h-2.5"> |
| <div class="bg-gradient-to-r from-green-400 to-blue-500 h-2.5 rounded-full" id="accuracyBar" style="width: 95.2%"></div> |
| </div> |
| </div> |
| <div> |
| <div class="flex justify-between mb-1"> |
| <span class="text-sm font-medium">Taxa de Acerto</span> |
| <span class="text-sm font-bold text-green-400" id="winRate">38/40</span> |
| </div> |
| <div class="w-full bg-gray-700 rounded-full h-2.5"> |
| <div class="bg-gradient-to-r from-blue-400 to-purple-500 h-2.5 rounded-full" style="width: 95%"></div> |
| </div> |
| </div> |
| <div class="bg-blue-900 bg-opacity-30 p-3 rounded-lg border border-blue-700"> |
| <div class="flex items-center"> |
| <div class="p-2 bg-blue-600 rounded-full mr-3"> |
| <i class="fas fa-bolt text-white"></i> |
| </div> |
| <div> |
| <p class="font-semibold">Sinal Ativo</p> |
| <p class="text-sm text-blue-300" id="activeSignal">Analisando EUR/USD</p> |
| </div> |
| </div> |
| </div> |
| <button id="autoTradingBtn" class="w-full bg-gradient-to-r from-green-600 to-green-500 hover:from-green-700 hover:to-green-600 py-3 rounded-lg font-bold transition flex items-center justify-center"> |
| <i class="fas fa-play mr-2"></i> Iniciar Operações Automáticas |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-gray-800 rounded-xl shadow-lg p-4"> |
| <h2 class="text-xl font-semibold mb-4">Resumo da Conta</h2> |
| <div class="space-y-3"> |
| <div class="flex justify-between"> |
| <span class="text-gray-400">Saldo</span> |
| <span class="font-bold" id="accountBalance">R$ 2.450,00</span> |
| </div> |
| <div class="flex justify-between"> |
| <span class="text-gray-400">Lucro Hoje</span> |
| <span class="text-green-400 font-bold" id="todayProfit">+ R$ 425,50</span> |
| </div> |
| <div class="flex justify-between"> |
| <span class="text-gray-400">Operações</span> |
| <span id="tradesCount">12/15</span> |
| </div> |
| <div class="flex justify-between"> |
| <span class="text-gray-400">Taxa de Acerto</span> |
| <span class="text-green-400 font-bold" id="accountWinRate">92.3%</span> |
| </div> |
| <div class="pt-3 mt-3 border-t border-gray-700"> |
| <div class="flex justify-between items-center"> |
| <span class="text-gray-400">Próximo Sinal</span> |
| <span class="flex items-center text-blue-400 blink" id="nextSignalTimer"> |
| <i class="fas fa-circle text-xs mr-1"></i> Em análise |
| </span> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </main> |
|
|
| |
| <footer class="bg-gray-800 py-4 px-6 border-t border-gray-700"> |
| <div class="container mx-auto flex flex-col md:flex-row justify-between items-center"> |
| <div class="flex items-center space-x-2 mb-3 md:mb-0"> |
| <i class="fas fa-robot text-xl text-blue-400"></i> |
| <span class="font-semibold">Quantum<span class="text-blue-400">AI</span></span> |
| </div> |
| <div class="flex space-x-4 mb-3 md:mb-0"> |
| <a href="#" class="text-gray-400 hover:text-white transition">Termos</a> |
| <a href="#" class="text-gray-400 hover:text-white transition">Privacidade</a> |
| <a href="#" class="text-gray-400 hover:text-white transition">Suporte</a> |
| <a href="#" class="text-gray-400 hover:text-white transition">API</a> |
| <a href="#" class="text-gray-400 hover:text-white transition">Brokers</a> |
| </div> |
| <div class="mt-3 md:mt-0"> |
| <span class="text-sm text-gray-500">© 2023 QuantumAI. Plataforma universal para opções binárias.</span> |
| </div> |
| </div> |
| </footer> |
| </div> |
|
|
| |
| <script type="text/javascript" src="https://s3.tradingview.com/tv.js"></script> |
| |
| <script> |
| |
| let currentAsset = "EURUSD"; |
| let currentTimeframe = "5"; |
| let isConnected = false; |
| let autoTradingActive = false; |
| let accountBalance = 2450.00; |
| let todayProfit = 425.50; |
| let tradesCount = { total: 15, successful: 12 }; |
| let nextSignalTime = 0; |
| let deferredPrompt = null; |
| |
| |
| function initTradingViewChart() { |
| new TradingView.widget({ |
| "autosize": true, |
| "symbol": `FX:${currentAsset}`, |
| "interval": currentTimeframe, |
| "timezone": "Etc/UTC", |
| "theme": "dark", |
| "style": "1", |
| "locale": "br", |
| "toolbar_bg": "#1e293b", |
| "enable_publishing": false, |
| "hide_top_toolbar": false, |
| "hide_side_toolbar": false, |
| "allow_symbol_change": false, |
| "container_id": "priceChart" |
| }); |
| } |
| |
| |
| function updateAssetSelection(asset) { |
| currentAsset = asset; |
| document.querySelectorAll('.asset-btn').forEach(btn => { |
| btn.classList.remove('active-asset'); |
| if(btn.dataset.asset === asset) { |
| btn.classList.add('active-asset'); |
| } |
| }); |
| document.getElementById('assetTitle').textContent = `${getAssetName(asset)} - ${currentTimeframe}M`; |
| document.getElementById('activeSignal').textContent = `Analisando ${getAssetName(asset)}`; |
| initTradingViewChart(); |
| } |
| |
| |
| function updateTimeframeSelection(timeframe) { |
| currentTimeframe = timeframe; |
| document.querySelectorAll('.timeframe-btn').forEach(btn => { |
| btn.classList.remove('bg-blue-600'); |
| btn.classList.add('bg-gray-700'); |
| if(btn.dataset.timeframe === timeframe) { |
| btn.classList.remove('bg-gray-700'); |
| btn.classList.add('bg-blue-600'); |
| } |
| }); |
| document.getElementById('assetTitle').textContent = `${getAssetName(currentAsset)} - ${currentTimeframe}M`; |
| initTradingViewChart(); |
| } |
| |
| |
| function getAssetName(asset) { |
| const assets = { |
| "EURUSD": "EUR/USD", |
| "GBPUSD": "GBP/USD", |
| "USDJPY": "USD/JPY", |
| "BTCUSD": "BTC/USD", |
| "ETHUSD": "ETH/USD", |
| "GOLD": "Ouro", |
| "OIL": "Petróleo", |
| "INDICES": "Índices" |
| }; |
| return assets[asset] || asset; |
| } |
| |
| |
| function simulatePriceMovement() { |
| const directions = ['up', 'down']; |
| const direction = directions[Math.floor(Math.random() * directions.length)]; |
| const percentage = (Math.random() * 0.5).toFixed(2); |
| |
| return { |
| direction, |
| percentage, |
| value: direction === 'up' ? |
| `+${percentage}%` : |
| `-${percentage}%` |
| }; |
| } |
| |
| |
| function addNewSignal() { |
| const directions = ['CALL', 'PUT']; |
| const assets = ['EURUSD', 'GBPUSD', 'USDJPY', 'BTCUSD', 'ETHUSD', 'GOLD', 'OIL']; |
| const times = ['1 minuto', '5 minutos', '15 minutos']; |
| const brokers = ['Quotex', 'Pocket Option', 'IQ Option', 'Binary.com', 'RaceOption']; |
| |
| const direction = directions[Math.floor(Math.random() * directions.length)]; |
| const asset = assets[Math.floor(Math.random() * assets.length)]; |
| const time = times[Math.floor(Math.random() * times.length)]; |
| const broker = brokers[Math.floor(Math.random() * brokers.length)]; |
| |
| const now = new Date(); |
| const hours = now.getHours().toString().padStart(2, '0'); |
| const minutes = now.getMinutes().toString().padStart(2, '0'); |
| const seconds = now.getSeconds().toString().padStart(2, '0'); |
| const timeString = `${hours}:${minutes}:${seconds}`; |
| |
| |
| const isSuccess = Math.random() < 0.95; |
| const resultAmount = (50 + Math.random() * 150).toFixed(2); |
| const accuracy = (90 + Math.random() * 8).toFixed(0); |
| |
| const newRow = document.createElement('tr'); |
| newRow.className = `signal-${direction === 'CALL' ? 'up' : 'down'} hover:bg-gray-700 transition`; |
| |
| newRow.innerHTML = ` |
| <td class="py-3 px-4">${getAssetName(asset)}</td> |
| <td class="py-3 px-4">${timeString}</td> |
| <td class="py-3 px-4">${time}</td> |
| <td class="py-3 px-4"><span class="bg-${direction === 'CALL' ? 'green' : 'red'}-600 px-2 py-1 rounded-full text-xs">${direction}</span></td> |
| <td class="py-3 px-4"><span class="${isSuccess ? 'text-green-400' : 'text-red-400'} font-bold">${isSuccess ? '+' : '-'}R$ ${resultAmount}</span></td> |
| <td class="py-3 px-4"> |
| <div class="w-full bg-gray-600 rounded-full h-2"> |
| <div class="bg-green-500 h-2 rounded-full" style="width: ${accuracy}%"></div> |
| </div> |
| </td> |
| <td class="py-3 px-4"> |
| <span class="text-xs bg-gray-700 px-2 py-1 rounded">${broker}</span> |
| </td> |
| `; |
| |
| document.getElementById('signalsTable').prepend(newRow); |
| |
| |
| if (document.getElementById('signalsTable').children.length > 10) { |
| document.getElementById('signalsTable').removeChild(document.getElementById('signalsTable').lastChild); |
| } |
| |
| |
| if(asset === currentAsset && autoTradingActive) { |
| updateAccountAfterTrade(isSuccess, parseFloat(resultAmount)); |
| } |
| } |
| |
| |
| function updateAccountAfterTrade(isSuccess, amount) { |
| tradesCount.total++; |
| if(isSuccess) { |
| tradesCount.successful++; |
| accountBalance += amount; |
| todayProfit += amount; |
| } else { |
| accountBalance -= amount; |
| todayProfit -= amount; |
| } |
| |
| |
| const winRate = (tradesCount.successful / tradesCount.total * 100).toFixed(1); |
| document.getElementById('accountBalance').textContent = `R$ ${accountBalance.toFixed(2).replace('.', ',')}`; |
| document.getElementById('todayProfit').textContent = `${todayProfit >= 0 ? '+' : '-'} R$ ${Math.abs(todayProfit).toFixed(2).replace('.', ',')}`; |
| document.getElementById('tradesCount').textContent = `${tradesCount.successful}/${tradesCount.total}`; |
| document.getElementById('accountWinRate').textContent = `${winRate}%`; |
| |
| |
| const accuracy = 90 + Math.random() * 5; |
| document.getElementById('accuracyValue').textContent = `${accuracy.toFixed(1)}%`; |
| document.getElementById('accuracyBar').style.width = `${accuracy}%`; |
| document.getElementById('winRate').textContent = `${tradesCount.successful}/${tradesCount.total}`; |
| } |
| |
| |
| function updateNextSignalTimer() { |
| if(nextSignalTime <= 0) { |
| nextSignalTime = 30 + Math.floor(Math.random() * 90); |
| } |
| |
| nextSignalTime--; |
| |
| const minutes = Math.floor(nextSignalTime / 60); |
| const seconds = nextSignalTime % 60; |
| |
| document.getElementById('nextSignalTimer').innerHTML = ` |
| <i class="fas fa-circle text-xs mr-1"></i> ${minutes}m ${seconds}s |
| `; |
| |
| if(nextSignalTime <= 0) { |
| addNewSignal(); |
| } |
| } |
| |
| |
| function connectToBroker() { |
| const brokerSelect = document.getElementById('brokerSelect'); |
| const selectedBroker = brokerSelect.options[brokerSelect.selectedIndex].text; |
| const apiKey = document.getElementById('apiKey').value; |
| |
| if(!apiKey) { |
| alert('Por favor, insira sua chave API'); |
| return; |
| } |
| |
| const connectBtn = document.getElementById('connectBtn'); |
| connectBtn.innerHTML = '<i class="fas fa-sync-alt fa-spin mr-2"></i> Conectando...'; |
| connectBtn.classList.remove('from-blue-600', 'to-blue-500', 'hover:from-blue-700', 'hover:to-blue-600'); |
| connectBtn.classList.add('from-yellow-600', 'to-yellow-500', 'hover:from-yellow-700', 'hover:to-yellow-600'); |
| |
| setTimeout(() => { |
| isConnected = true; |
| connectBtn.innerHTML = '<i class="fas fa-check mr-2"></i> Conectado'; |
| connectBtn.classList.remove('from-yellow-600', 'to-yellow-500', 'hover:from-yellow-700', 'hover:to-yellow-600'); |
| connectBtn.classList.add('from-green-600', 'to-green-500', 'hover:from-green-700', 'hover:to-green-600'); |
| |
| |
| const brokerLogos = document.querySelectorAll('.broker-logo'); |
| brokerLogos.forEach(logo => { |
| if (logo.title === selectedBroker) { |
| logo.style.filter = 'grayscale(0%) brightness(1)'; |
| logo.style.transform = 'scale(1.1)'; |
| } |
| }); |
| |
| |
| document.getElementById('autoTradingBtn').disabled = false; |
| |
| |
| alert(`Conectado com sucesso ao ${selectedBroker}!`); |
| }, 2000); |
| } |
| |
| |
| function toggleAutoTrading() { |
| const autoTradingBtn = document.getElementById('autoTradingBtn'); |
| |
| if(!isConnected) { |
| alert('Por favor, conecte-se a um broker primeiro'); |
| return; |
| } |
| |
| autoTradingActive = !autoTradingActive; |
| |
| if(autoTradingActive) { |
| autoTradingBtn.innerHTML = '<i class="fas fa-stop mr-2"></i> Parar Operações'; |
| autoTradingBtn.classList.remove('from-green-600', 'to-green-500', 'hover:from-green-700', 'hover:to-green-600'); |
| autoTradingBtn.classList.add('from-red-600', 'to-red-500', 'hover:from-red-700', 'hover:to-red-600'); |
| |
| |
| nextSignalTime = 5; |
| } else { |
| autoTradingBtn.innerHTML = '<i class="fas fa-play mr-2"></i> Iniciar Operações Automáticas'; |
| autoTradingBtn.classList.remove('from-red-600', 'to-red-500', 'hover:from-red-700', 'hover:to-red-600'); |
| autoTradingBtn.classList.add('from-green-600', 'to-green-500', 'hover:from-green-700', 'hover:to-green-600'); |
| } |
| } |
| |
| |
| function placeTrade(direction) { |
| if(!isConnected) { |
| alert('Por favor, conecte-se a um broker primeiro'); |
| return; |
| } |
| |
| const amount = 100; |
| const isSuccess = Math.random() < 0.95; |
| |
| |
| alert(`Operação ${direction} de R$ ${amount.toFixed(2)} colocada no ${getAssetName(currentAsset)}`); |
| |
| |
| setTimeout(() => { |
| const result = isSuccess ? amount * 0.8 : -amount; |
| const resultMsg = isSuccess ? |
| `SUCESSO! Você ganhou R$ ${result.toFixed(2)}` : |
| `PERDA! Você perdeu R$ ${Math.abs(result).toFixed(2)}`; |
| |
| alert(resultMsg); |
| |
| |
| updateAccountAfterTrade(isSuccess, Math.abs(result)); |
| }, 5000); |
| } |
| |
| |
| function setupPWA() { |
| |
| window.addEventListener('beforeinstallprompt', (e) => { |
| |
| e.preventDefault(); |
| |
| deferredPrompt = e; |
| |
| const installButton = document.getElementById('installButton'); |
| installButton.classList.remove('hidden'); |
| document.getElementById('installContainer').classList.remove('hidden'); |
| |
| |
| installButton.addEventListener('click', () => { |
| |
| deferredPrompt.prompt(); |
| |
| deferredPrompt.userChoice.then((choiceResult) => { |
| if (choiceResult.outcome === 'accepted') { |
| console.log('User accepted the install prompt'); |
| } else { |
| console.log('User dismissed the install prompt'); |
| } |
| deferredPrompt = null; |
| installButton.classList.add('hidden'); |
| }); |
| }); |
| }); |
| |
| |
| window.addEventListener('appinstalled', () => { |
| console.log('PWA was installed'); |
| document.getElementById('installButton').classList.add('hidden'); |
| }); |
| |
| |
| if ('serviceWorker' in navigator) { |
| window.addEventListener('load', () => { |
| navigator.serviceWorker.register('/sw.js').then(registration => { |
| console.log('ServiceWorker registration successful with scope: ', registration.scope); |
| }).catch(err => { |
| console.log('ServiceWorker registration failed: ', err); |
| }); |
| }); |
| } |
| } |
| |
| |
| function init() { |
| |
| initTradingViewChart(); |
| |
| |
| updateAssetSelection(currentAsset); |
| updateTimeframeSelection(currentTimeframe); |
| |
| |
| for(let i = 0; i < 5; i++) { |
| setTimeout(addNewSignal, i * 1000); |
| } |
| |
| |
| document.querySelectorAll('.asset-btn').forEach(btn => { |
| btn.addEventListener('click', () => updateAssetSelection(btn.dataset.asset)); |
| }); |
| |
| document.querySelectorAll('.timeframe-btn').forEach(btn => { |
| btn.addEventListener('click', () => updateTimeframeSelection(btn.dataset.timeframe)); |
| }); |
| |
| document.getElementById('connectBtn').addEventListener('click', connectToBroker); |
| document.getElementById('autoTradingBtn').addEventListener('click', toggleAutoTrading); |
| document.getElementById('refreshSignals').addEventListener('click', () => { |
| addNewSignal(); |
| alert('Sinais atualizados!'); |
| }); |
| |
| document.getElementById('callBtn').addEventListener('click', () => placeTrade('CALL')); |
| document.getElementById('putBtn').addEventListener('click', () => placeTrade('PUT')); |
| |
| |
| setupPWA(); |
| |
| |
| setInterval(updateNextSignalTimer, 1000); |
| setInterval(() => { |
| if(autoTradingActive && Math.random() < 0.3) { |
| addNewSignal(); |
| } |
| }, 10000); |
| } |
| |
| |
| document.addEventListener('DOMContentLoaded', init); |
| </script> |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Kennety/quantumai" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
| </html> |