olywwe commited on
Commit
dbb57df
·
verified ·
1 Parent(s): 85e8df4

Pode informar em algum lugar a evolução da rede neural. E salvar o treino em algum lugar externamente no space - Follow Up Deployment

Browse files
Files changed (1) hide show
  1. index.html +181 -1
index.html CHANGED
@@ -168,6 +168,23 @@
168
  <div class="text-2xl font-bold text-purple-400">42</div>
169
  </div>
170
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  </div>
172
  </div>
173
 
@@ -247,11 +264,17 @@
247
  let connections = [];
248
  let dataFlows = [];
249
  let modelUpdateCount = 0;
 
 
 
 
 
250
 
251
  // Inicialização
252
  document.addEventListener('DOMContentLoaded', async function() {
253
  createNeuralNetworkVisualization();
254
  initializeBalanceChart();
 
255
  setupEventListeners();
256
  await initializeCandlestickChart();
257
  });
@@ -435,6 +458,86 @@
435
  });
436
  }
437
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
438
  // Inicializar gráfico de saldo
439
  function initializeBalanceChart() {
440
  const ctx = document.getElementById('balanceChart').getContext('2d');
@@ -483,12 +586,79 @@
483
  });
484
  }
485
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
486
  // Configurar event listeners
487
  function setupEventListeners() {
488
  document.getElementById('startBtn').addEventListener('click', startTrading);
489
  document.getElementById('stopBtn').addEventListener('click', stopTrading);
490
  document.getElementById('simulationBtn').addEventListener('click', () => toggleMode('simulation'));
491
  document.getElementById('liveBtn').addEventListener('click', () => toggleMode('live'));
 
 
492
  }
493
 
494
  // Alternar entre modos de operação
@@ -581,8 +751,18 @@
581
  }
582
  });
583
 
 
 
 
 
 
 
 
 
 
 
584
  // Atualizar estatísticas de modelo
585
- document.querySelector('.text-2xl.text-blue-400').textContent = (76.4 + (modelUpdateCount * 0.1)).toFixed(1) + '%';
586
  }
587
 
588
  // Parar trading
 
168
  <div class="text-2xl font-bold text-purple-400">42</div>
169
  </div>
170
  </div>
171
+
172
+ <div class="mt-6">
173
+ <h3 class="text-gray-400 text-sm mb-2">Evolução do Treinamento</h3>
174
+ <div class="bg-gray-700 p-4 rounded-lg">
175
+ <div class="h-40">
176
+ <canvas id="trainingChart"></canvas>
177
+ </div>
178
+ <div class="flex justify-between mt-4">
179
+ <button id="saveModelBtn" class="bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded-lg transition-colors">
180
+ Salvar Modelo
181
+ </button>
182
+ <button id="loadModelBtn" class="bg-purple-600 hover:bg-purple-700 px-4 py-2 rounded-lg transition-colors">
183
+ Carregar Modelo
184
+ </button>
185
+ </div>
186
+ </div>
187
+ </div>
188
  </div>
189
  </div>
190
 
 
264
  let connections = [];
265
  let dataFlows = [];
266
  let modelUpdateCount = 0;
267
+ let trainingChart;
268
+ let trainingHistory = {
269
+ accuracy: [0.5],
270
+ loss: [1.0]
271
+ };
272
 
273
  // Inicialização
274
  document.addEventListener('DOMContentLoaded', async function() {
275
  createNeuralNetworkVisualization();
276
  initializeBalanceChart();
277
+ initializeTrainingChart();
278
  setupEventListeners();
279
  await initializeCandlestickChart();
280
  });
 
458
  });
459
  }
460
 
461
+ // Inicializar gráfico de treinamento
462
+ function initializeTrainingChart() {
463
+ const ctx = document.getElementById('trainingChart').getContext('2d');
464
+ trainingChart = new Chart(ctx, {
465
+ type: 'line',
466
+ data: {
467
+ labels: trainingHistory.accuracy.map((_, i) => i+1),
468
+ datasets: [
469
+ {
470
+ label: 'Acurácia',
471
+ data: trainingHistory.accuracy,
472
+ borderColor: '#10b981',
473
+ backgroundColor: 'rgba(16, 185, 129, 0.1)',
474
+ borderWidth: 2,
475
+ tension: 0.3,
476
+ yAxisID: 'y'
477
+ },
478
+ {
479
+ label: 'Perda',
480
+ data: trainingHistory.loss,
481
+ borderColor: '#ef4444',
482
+ backgroundColor: 'rgba(239, 68, 68, 0.1)',
483
+ borderWidth: 2,
484
+ tension: 0.3,
485
+ yAxisID: 'y1'
486
+ }
487
+ ]
488
+ },
489
+ options: {
490
+ responsive: true,
491
+ maintainAspectRatio: false,
492
+ interaction: {
493
+ mode: 'index',
494
+ intersect: false,
495
+ },
496
+ plugins: {
497
+ legend: {
498
+ position: 'top',
499
+ labels: {
500
+ color: '#cbd5e1'
501
+ }
502
+ }
503
+ },
504
+ scales: {
505
+ x: {
506
+ grid: {
507
+ color: 'rgba(255, 255, 255, 0.1)'
508
+ },
509
+ ticks: {
510
+ color: '#cbd5e1'
511
+ }
512
+ },
513
+ y: {
514
+ type: 'linear',
515
+ display: true,
516
+ position: 'left',
517
+ grid: {
518
+ color: 'rgba(255, 255, 255, 0.1)'
519
+ },
520
+ ticks: {
521
+ color: '#cbd5e1'
522
+ }
523
+ },
524
+ y1: {
525
+ type: 'linear',
526
+ display: true,
527
+ position: 'right',
528
+ grid: {
529
+ drawOnChartArea: false,
530
+ color: 'rgba(255, 255, 255, 0.1)'
531
+ },
532
+ ticks: {
533
+ color: '#cbd5e1'
534
+ }
535
+ }
536
+ }
537
+ }
538
+ });
539
+ }
540
+
541
  // Inicializar gráfico de saldo
542
  function initializeBalanceChart() {
543
  const ctx = document.getElementById('balanceChart').getContext('2d');
 
586
  });
587
  }
588
 
589
+ // Salvar modelo no localStorage
590
+ function saveModel() {
591
+ const modelData = {
592
+ trainingHistory,
593
+ balanceHistory,
594
+ transactionCount,
595
+ currentBalance,
596
+ lastUpdated: new Date()
597
+ };
598
+
599
+ localStorage.setItem('cryptoTraderModel', JSON.stringify(modelData));
600
+
601
+ // Mostrar feedback visual
602
+ const saveBtn = document.getElementById('saveModelBtn');
603
+ saveBtn.textContent = 'Salvo!';
604
+ saveBtn.classList.remove('bg-blue-600', 'hover:bg-blue-700');
605
+ saveBtn.classList.add('bg-green-600', 'hover:bg-green-700');
606
+
607
+ setTimeout(() => {
608
+ saveBtn.textContent = 'Salvar Modelo';
609
+ saveBtn.classList.remove('bg-green-600', 'hover:bg-green-700');
610
+ saveBtn.classList.add('bg-blue-600', 'hover:bg-blue-700');
611
+ }, 2000);
612
+ }
613
+
614
+ // Carregar modelo do localStorage
615
+ function loadModel() {
616
+ const savedModel = localStorage.getItem('cryptoTraderModel');
617
+ if (savedModel) {
618
+ const modelData = JSON.parse(savedModel);
619
+
620
+ trainingHistory = modelData.trainingHistory;
621
+ balanceHistory = modelData.balanceHistory;
622
+ transactionCount = modelData.transactionCount;
623
+ currentBalance = modelData.currentBalance;
624
+
625
+ // Atualizar gráficos
626
+ updateTrainingChart();
627
+ updateBalanceChart();
628
+ updateStatistics();
629
+
630
+ // Mostrar feedback visual
631
+ const loadBtn = document.getElementById('loadModelBtn');
632
+ loadBtn.textContent = 'Carregado!';
633
+ loadBtn.classList.remove('bg-purple-600', 'hover:bg-purple-700');
634
+ loadBtn.classList.add('bg-green-600', 'hover:bg-green-700');
635
+
636
+ setTimeout(() => {
637
+ loadBtn.textContent = 'Carregar Modelo';
638
+ loadBtn.classList.remove('bg-green-600', 'hover:bg-green-700');
639
+ loadBtn.classList.add('bg-purple-600', 'hover:bg-purple-700');
640
+ }, 2000);
641
+ } else {
642
+ alert('Nenhum modelo salvo encontrado!');
643
+ }
644
+ }
645
+
646
+ // Atualizar gráfico de treinamento
647
+ function updateTrainingChart() {
648
+ trainingChart.data.labels = trainingHistory.accuracy.map((_, i) => i+1);
649
+ trainingChart.data.datasets[0].data = trainingHistory.accuracy;
650
+ trainingChart.data.datasets[1].data = trainingHistory.loss;
651
+ trainingChart.update();
652
+ }
653
+
654
  // Configurar event listeners
655
  function setupEventListeners() {
656
  document.getElementById('startBtn').addEventListener('click', startTrading);
657
  document.getElementById('stopBtn').addEventListener('click', stopTrading);
658
  document.getElementById('simulationBtn').addEventListener('click', () => toggleMode('simulation'));
659
  document.getElementById('liveBtn').addEventListener('click', () => toggleMode('live'));
660
+ document.getElementById('saveModelBtn').addEventListener('click', saveModel);
661
+ document.getElementById('loadModelBtn').addEventListener('click', loadModel);
662
  }
663
 
664
  // Alternar entre modos de operação
 
751
  }
752
  });
753
 
754
+ // Atualizar histórico de treinamento
755
+ const newAccuracy = 0.5 + (Math.random() * 0.5);
756
+ const newLoss = 0.5 - (Math.random() * 0.5);
757
+
758
+ trainingHistory.accuracy.push(newAccuracy);
759
+ trainingHistory.loss.push(newLoss);
760
+
761
+ // Atualizar gráfico de treinamento
762
+ updateTrainingChart();
763
+
764
  // Atualizar estatísticas de modelo
765
+ document.querySelector('.text-2xl.text-blue-400').textContent = (newAccuracy * 100).toFixed(1) + '%';
766
  }
767
 
768
  // Parar trading