|
|
<!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> |