Opis
<!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>وكيل الذكاء الاصطناعي للتداول</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Arial', sans-serif; background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%); color: white; min-height: 100vh; padding: 20px; } .container { max-width: 1200px; margin: 0 auto; background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); border-radius: 20px; padding: 30px; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); } .header { text-align: center; margin-bottom: 30px; border-bottom: 2px solid rgba(255, 255, 255, 0.2); padding-bottom: 20px; } .header h1 { font-size: 2.5em; margin-bottom: 10px; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); } .status-bar { display: flex; justify-content: space-around; margin-bottom: 30px; flex-wrap: wrap; } .status-item { background: rgba(255, 255, 255, 0.15); padding: 15px; border-radius: 10px; min-width: 150px; text-align: center; margin: 5px; border: 1px solid rgba(255, 255, 255, 0.2); } .status-item h3 { margin-bottom: 5px; font-size: 0.9em; opacity: 0.8; } .status-value { font-size: 1.2em; font-weight: bold; } .controls { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-bottom: 30px; } .control-panel { background: rgba(255, 255, 255, 0.1); padding: 20px; border-radius: 15px; border: 1px solid rgba(255, 255, 255, 0.2); } .control-panel h3 { margin-bottom: 15px; color: #FFD700; font-size: 1.1em; } .form-group { margin-bottom: 15px; } .form-group label { display: block; margin-bottom: 5px; font-size: 0.9em; opacity: 0.9; } .form-group input, .form-group select { width: 100%; padding: 10px; border: none; border-radius: 8px; background: rgba(255, 255, 255, 0.15); color: white; font-size: 0.9em; } .form-group input::placeholder { color: rgba(255, 255, 255, 0.7); } .btn { padding: 12px 25px; border: none; border-radius: 8px; cursor: pointer; font-size: 1em; font-weight: bold; transition: all 0.3s ease; margin: 5px; } .btn-primary { background: linear-gradient(45deg, #00c853, #00e676); color: white; } .btn-danger { background: linear-gradient(45deg, #f44336, #ff5722); color: white; } .btn-warning { background: linear-gradient(45deg, #ff9800, #ffc107); color: white; } .btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); } .trading-log { background: rgba(0, 0, 0, 0.3); border-radius: 15px; padding: 20px; margin-top: 20px; max-height: 300px; overflow-y: auto; border: 1px solid rgba(255, 255, 255, 0.2); } .log-entry { padding: 10px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); margin-bottom: 10px; border-radius: 8px; } .log-entry.success { background: rgba(76, 175, 80, 0.2); border-left: 4px solid #4CAF50; } .log-entry.error { background: rgba(244, 67, 54, 0.2); border-left: 4px solid #f44336; } .log-entry.info { background: rgba(33, 150, 243, 0.2); border-left: 4px solid #2196F3; } .chart-container { background: rgba(255, 255, 255, 0.1); border-radius: 15px; padding: 20px; margin-top: 20px; text-align: center; border: 1px solid rgba(255, 255, 255, 0.2); } .indicator { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-left: 5px; } .indicator.active { background: #4CAF50; animation: pulse 2s infinite; } .indicator.inactive { background: #f44336; } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } } .progress-bar { width: 100%; height: 8px; background: rgba(255, 255, 255, 0.2); border-radius: 4px; overflow: hidden; margin-top: 10px; } .progress-fill { height: 100%; background: linear-gradient(90deg, #00c853, #00e676); width: 0%; transition: width 0.3s ease; } @media (max-width: 768px) { .controls { grid-template-columns: 1fr; } .status-bar { flex-direction: column; align-items: center; } .container { padding: 20px; } } </style> </head> <body> <div class="container"> <div class="header"> <h1>🤖 Agent sztucznej inteligencji do handlu</h1> <p>Zaawansowany system automatycznego handlu na rynku Forex</p> </div> <div class="status-bar"> <div class="status-item"> <h3>Stan systemu</h3> <div class="status-value"> <span id="system-status">Zatrzymany</span> <span class="indicator inactive" id="system-indicator"></span> </div> </div> <div class="status-item"> <h3>Zysk/Strata</h3> <div class="status-value" id="pnl">$0.00</div> </div> <div class="status-item"> <h3>Liczba transakcji</h3> <div class="status-value" id="trades-count">0</div> </div> <div class="status-item"> <h3>Wskaźnik sukcesu</h3> <div class="status-value" id="success-rate">0%</div> </div> </div> <div class="controls"> <div class="control-panel"> <h3>⚙️ Ustawienia handlu</h3> <div class="form-group"> <label>Para walutowa</label> <select id="currency-pair"> <option value="EURUSD">EUR/USD</option> <option value="GBPUSD">GBP/USD</option> <option value="USDJPY">USD/JPY</option> <option value="USDCHF">USD/CHF</option> <option value="AUDUSD">AUD/USD</option> </select> </div> <div class="form-group"> <label>Wielkość transakcji (Lot)</label> <input type="number" id="lot-size" value="0.01" min="0.01" max="10" step="0.01"> </div> <div class="form-group"> <label>Strategia handlu</label> <select id="strategy"> <option value="scalping">Skalpowanie</option> <option value="swing">Trading wahadłowy</option> <option value="trend">Śledzenie trendu</option> <option value="reversal">Odwrócenie</option> </select> </div> </div> <div class="control-panel"> <h3>🛡️ Zarządzanie ryzykiem</h3> <div class="form-group"> <label>Stop loss (punkty)</label> <input type="number" id="stop-loss" value="20" min="5" max="500"> </div> <div class="form-group"> <label>Take profit (punkty)</label> <input type="number" id="take-profit" value="30" min="10" max="1000"> </div> <div class="form-group"> <label>Maksymalne ryzyko (%)</label> <input type="number" id="max-risk" value="2" min="0.5" max="10" step="0.1"> </div> </div> <div class="control-panel"> <h3>📊 Wskaźniki techniczne</h3> <div class="form-group"> <label> <input type="checkbox" id="use-ma" checked> Użyj średniej kroczącej </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-rsi" checked> Użyj RSI </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-macd"> Użyj MACD </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-bollinger"> Użyj Bollinger Bands </label> </div> </div> </div> <div style="text-align: center; margin: 20px 0;"> <button class="btn btn-primary" onclick="startTrading()">🚀 Rozpocznij handel</button> <button class="btn btn-danger" onclick="stopTrading()">⏹️ Zatrzymaj handel</button> <button class="btn btn-warning" onclick="pauseTrading()">⏸️ Pauza</button> <button class="btn btn-warning" onclick="resetSystem()">🔄 Resetuj</button> </div> <div class="chart-container"> <h3>📈 Monitorowanie wydajności</h3> <p>Analiza wydajności w czasie rzeczywistym</p> <div class="progress-bar"> <div class="progress-fill" id="performance-progress"></div> </div> <p style="margin-top: 10px; font-size: 0.9em; opacity: 0.8;"> Ostatnia aktualizacja: <span id="last-update">--</span> </p> </div> <div class="trading-log"> <h3>📋 Dziennik handlu</h3> <div id="log-container"> <div class="log-entry info"> <strong>Informacja:</strong> System jest gotowy do handlu. Naciśnij "Rozpocznij handel", aby zacząć. </div> </div> </div> </div> <script> // zmienne systemowe let isTrading = false; let isPaused = false; let tradingInterval; let totalTrades = 0; let successfulTrades = 0; let currentPnL = 0; let marketData = {}; // aktualizacja statusu function updateSystemStatus(status, isActive) { const statusEl = document.getElementById('system-status'); const indicatorEl = document.getElementById('system-indicator'); statusEl.textContent = status; indicatorEl.className = `indicator ${isActive ? 'active' : 'inactive'}`; } // aktualizacja statystyk function updateStats() { document.getElementById('trades-count').textContent = totalTrades; document.getElementById('success-rate').textContent = totalTrades > 0 ? Math.round((successfulTrades / totalTrades) * 100) + '%' : '0%'; document.getElementById('pnl').textContent = (currentPnL >= 0 ? '+' : '') + '$' + currentPnL.toFixed(2); document.getElementById('pnl').style.color = currentPnL >= 0 ? '#4CAF50' : '#f44336'; } // dodaj wpis do dziennika function addLogEntry(message, type = 'info') { const logContainer = document.getElementById('log-container'); const entry = document.createElement('div'); entry.className = `log-entry ${type}`; const timestamp = new Date().toLocaleTimeString('ar-SA'); entry.innerHTML = `<strong>${timestamp}:</strong> ${message}`; logContainer.insertBefore(entry, logContainer.firstChild); // zachowaj tylko ostatnie 50 wpisów if (logContainer.children.length > 50) { logContainer.removeChild(logContainer.lastChild); } } // symulacja danych rynkowych function generateMarketData() { const pairs = ['EURUSD', 'GBPUSD', 'USDJPY', 'USDCHF', 'AUDUSD']; pairs.forEach(pair => { marketData[pair] = { price: Math.random() * 2 + 1, change: (Math.random() - 0.5) * 0.01, volume: Math.floor(Math.random() * 1000000), rsi: Math.floor(Math.random() * 100), ma: Math.random() * 2 + 1 }; }); } // analiza sygnałów function analyzeSignals() { const pair = document.getElementById('currency-pair').value; const strategy = document.getElementById('strategy').value; const useMA = document.getElementById('use-ma').checked; const useRSI = document.getElementById('use-rsi').checked; const data = marketData[pair]; if (!data) return null; let signal = null; let confidence = 0; // analiza RSI if (useRSI) { if (data.rsi < 30) { signal = 'BUY'; confidence += 0.3; } else if (data.rsi > 70) { signal = 'SELL'; confidence += 0.3; } } // analiza średniej kroczącej if (useMA) { if (data.price > data.ma) { if (signal === 'BUY' || signal === null) { signal = 'BUY'; confidence += 0.3; } } else { if (signal === 'SELL' || signal === null) { signal = 'SELL'; confidence += 0.3; } } } // analiza strategii if (strategy === 'scalping') { confidence += 0.2; } else if (strategy === 'trend') { confidence += 0.4; } return { signal, confidence }; } // wykonanie transakcji function executeTrade(signal, confidence) { if (confidence < 0.6) return; // minimalne zaufanie const pair = document.getElementById('currency-pair').value; const lotSize = document.getElementById('lot-size').value; const stopLoss = document.getElementById('stop-loss').value; const takeProfit = document.getElementById('take-profit').value; totalTrades++; // symulacja wyniku transakcji const success = Math.random() < confidence; const pnl = success ? (parseFloat(takeProfit) * parseFloat(lotSize) * 10) : (-parseFloat(stopLoss) * parseFloat(lotSize) * 10); currentPnL += pnl; if (success) { successfulTrades++; addLogEntry(`Udana transakcja: ${signal} ${pair} - Zysk: +$${pnl.toFixed(2)}`, 'success'); } else { addLogEntry(`Nieudana transakcja: ${signal} ${pair} - Strata: -$${Math.abs(pnl).toFixed(2)}`, 'error'); } updateStats(); } // główna pętla handlowa function tradingLoop() { if (!isTrading || isPaused) return; generateMarketData(); const analysis = analyzeSignals(); if (analysis && analysis.signal) { addLogEntry(`Wykryto sygnał: ${analysis.signal} - Zaufanie: ${(analysis.confidence * 100).toFixed(1)}%`, 'info'); executeTrade(analysis.signal, analysis.confidence); } // aktualizacja paska postępu const progress = document.getElementById('performance-progress'); progress.style.width = Math.min((successfulTrades / Math.max(totalTrades, 1)) * 100, 100) + '%'; // aktualizacja ostatniej aktualizacji document.getElementById('last-update').textContent = new Date().toLocaleTimeString('ar-SA'); } // rozpoczęcie handlu function startTrading() { if (isTrading) return; isTrading = true; isPaused = false; updateSystemStatus('Działa', true); addLogEntry('Automatyczny handel rozpoczęty', 'success'); tradingInterval = setInterval(tradingLoop, 3000); // co 3 sekundy } // zatrzymanie handlu function stopTrading() { if (!isTrading) return; isTrading = false; isPaused = false; updateSystemStatus('Zatrzymany', false); addLogEntry('Handel zatrzymany', 'error'); clearInterval(tradingInterval); } // pauza function pauseTrading() { if (!isTrading) return; isPaused = !isPaused; updateSystemStatus(isPaused ? 'Wstrzymany' : 'Działa', !isPaused); addLogEntry(isPaused ? 'Handel wstrzymany' : 'Handel wznowiony', 'info'); } // reset systemu function resetSystem() { stopTrading(); totalTrades = 0; successfulTrades = 0; currentPnL = 0; updateStats(); const logContainer = document.getElementById('log-container'); logContainer.innerHTML = ` <div class="log-entry info"> <strong>Informacja:</strong> System został zresetowany. Gotowy do ponownego handlu. </div> `; document.getElementById('performance-progress').style.width = '0%'; document.getElementById('last-update').textContent = '--'; } // inicjalizacja systemu document.addEventListener('DOMContentLoaded', function() { generateMarketData(); updateStats(); addLogEntry('System załadowany pomyślnie', 'success'); }); </script> </body> </html>
Podsumowanie
The system integrates technical indicators like Moving Average (MA), Relative Strength Index (RSI), MACD, and Bollinger Bands to analyze market signals and generate trade decisions. It evaluates signal confidence before executing trades, simulating outcomes based on configured parameters. Real-time performance monitoring includes profit/loss tracking, trade count, and success rate, with a detailed trading log for transparency.
Control features allow starting, stopping, pausing, and resetting the trading process. The interface provides a status overview and performance progress visualization, supporting informed management of automated trading activities.
