Описание
<!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>AI Торговый агент</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>🤖 AI Торговый агент</h1> <p>Продвинутая автоматическая торговая система для Форекс</p> </div> <div class="status-bar"> <div class="status-item"> <h3>Статус системы</h3> <div class="status-value"> <span id="system-status">Остановлено</span> <span class="indicator inactive" id="system-indicator"></span> </div> </div> <div class="status-item"> <h3>Прибыль/Убыток</h3> <div class="status-value" id="pnl">$0.00</div> </div> <div class="status-item"> <h3>Количество сделок</h3> <div class="status-value" id="trades-count">0</div> </div> <div class="status-item"> <h3>Процент успешных сделок</h3> <div class="status-value" id="success-rate">0%</div> </div> </div> <div class="controls"> <div class="control-panel"> <h3>⚙️ Настройки торговли</h3> <div class="form-group"> <label>Валютная пара</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>Размер лота (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>Торговая стратегия</label> <select id="strategy"> <option value="scalping">Скальпинг</option> <option value="swing">Свинг-трейдинг</option> <option value="trend">Следование за трендом</option> <option value="reversal">Разворот</option> </select> </div> </div> <div class="control-panel"> <h3>🛡️ Управление рисками</h3> <div class="form-group"> <label>Стоп-лосс (пункты)</label> <input type="number" id="stop-loss" value="20" min="5" max="500"> </div> <div class="form-group"> <label>Тейк-профит (пункты)</label> <input type="number" id="take-profit" value="30" min="10" max="1000"> </div> <div class="form-group"> <label>Максимальный риск (%)</label> <input type="number" id="max-risk" value="2" min="0.5" max="10" step="0.1"> </div> </div> <div class="control-panel"> <h3>📊 Технические индикаторы</h3> <div class="form-group"> <label> <input type="checkbox" id="use-ma" checked> Использовать скользящую среднюю </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-rsi" checked> Использовать RSI </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-macd"> Использовать MACD </label> </div> <div class="form-group"> <label> <input type="checkbox" id="use-bollinger"> Использовать полосы Боллинджера </label> </div> </div> </div> <div style="text-align: center; margin: 20px 0;"> <button class="btn btn-primary" onclick="startTrading()">🚀 Начать торговлю</button> <button class="btn btn-danger" onclick="stopTrading()">⏹️ Остановить торговлю</button> <button class="btn btn-warning" onclick="pauseTrading()">⏸️ Пауза</button> <button class="btn btn-warning" onclick="resetSystem()">🔄 Сброс</button> </div> <div class="chart-container"> <h3>📈 Мониторинг производительности</h3> <p>Анализ производительности в реальном времени</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;"> Последнее обновление: <span id="last-update">--</span> </p> </div> <div class="trading-log"> <h3>📋 Журнал торговли</h3> <div id="log-container"> <div class="log-entry info"> <strong>Информация:</strong> Система готова к торговле. Пожалуйста, нажмите "Начать торговлю" для запуска. </div> </div> </div> </div> <script> // Переменные системы let isTrading = false; let isPaused = false; let tradingInterval; let totalTrades = 0; let successfulTrades = 0; let currentPnL = 0; let marketData = {}; // Обновление статуса 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'}`; } // Обновление статистики 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'; } // Добавление записи 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); // Сохранять только последние 50 записей if (logContainer.children.length > 50) { logContainer.removeChild(logContainer.lastChild); } } // Генерация рыночных данных 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 }; }); } // Анализ сигналов 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; // Анализ RSI if (useRSI) { if (data.rsi < 30) { signal = 'BUY'; confidence += 0.3; } else if (data.rsi > 70) { signal = 'SELL'; confidence += 0.3; } } // Анализ скользящей средней 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; } } } // Анализ стратегии if (strategy === 'scalping') { confidence += 0.2; } else if (strategy === 'trend') { confidence += 0.4; } return { signal, confidence }; } // Выполнение сделки function executeTrade(signal, confidence) { if (confidence < 0.6) return; // Минимальный порог доверия 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++; // Симуляция результата сделки const success = Math.random() < confidence; const pnl = success ? (parseFloat(takeProfit) * parseFloat(lotSize) * 10) : (-parseFloat(stopLoss) * parseFloat(lotSize) * 10); currentPnL += pnl; if (success) { successfulTrades++; addLogEntry(`Успешная сделка: ${signal} ${pair} - Прибыль: +$${pnl.toFixed(2)}`, 'success'); } else { addLogEntry(`Убыточная сделка: ${signal} ${pair} - Убыток: -$${Math.abs(pnl).toFixed(2)}`, 'error'); } updateStats(); } // Основной цикл торговли function tradingLoop() { if (!isTrading || isPaused) return; generateMarketData(); const analysis = analyzeSignals(); if (analysis && analysis.signal) { addLogEntry(`Обнаружен сигнал: ${analysis.signal} - Доверие: ${(analysis.confidence * 100).toFixed(1)}%`, 'info'); executeTrade(analysis.signal, analysis.confidence); } // Обновление индикатора прогресса const progress = document.getElementById('performance-progress'); progress.style.width = Math.min((successfulTrades / Math.max(totalTrades, 1)) * 100, 100) + '%'; // Обновление времени последнего обновления document.getElementById('last-update').textContent = new Date().toLocaleTimeString('ar-SA'); } // Запуск торговли function startTrading() { if (isTrading) return; isTrading = true; isPaused = false; updateSystemStatus('Работает', true); addLogEntry('Автоматическая торговля запущена', 'success'); tradingInterval = setInterval(tradingLoop, 3000); // Каждые 3 секунды } // Остановка торговли function stopTrading() { if (!isTrading) return; isTrading = false; isPaused = false; updateSystemStatus('Остановлено', false); addLogEntry('Торговля остановлена', 'error'); clearInterval(tradingInterval); } // Пауза торговли function pauseTrading() { if (!isTrading) return; isPaused = !isPaused; updateSystemStatus(isPaused ? 'Приостановлено' : 'Работает', !isPaused); addLogEntry(isPaused ? 'Торговля приостановлена' : 'Торговля возобновлена', 'info'); } // Сброс системы function resetSystem() { stopTrading(); totalTrades = 0; successfulTrades = 0; currentPnL = 0; updateStats(); const logContainer = document.getElementById('log-container'); logContainer.innerHTML = ` <div class="log-entry info"> <strong>Информация:</strong> Система сброшена. Готова к новой торговле. </div> `; document.getElementById('performance-progress').style.width = '0%'; document.getElementById('last-update').textContent = '--'; } // Инициализация системы document.addEventListener('DOMContentLoaded', function() { generateMarketData(); updateStats(); addLogEntry('Система успешно загружена', 'success'); }); </script> </body> </html>
Сводка
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.
