<!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>๐ค ์ธ๊ณต์ง๋ฅ ๊ฑฐ๋ ์์ด์ ํธ</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>