$BNB

BNB
BNB
604.61
-1.20%

<!DOCTYPE html>

<html lang="it">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Analisi del Mercato BNB – 5 Maggio 2026</title>

<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Space+Mono:wght@400;700&family=Syne:wght@400;700;800&display=swap" rel="stylesheet">

<style>

:root {

--oro: #F0B90B;

--oro-chiaro: #FFD740;

--oro-scurito: #B8860B;

--scuro: #0B0E11;

--scuro2: #13171D;

--scuro3: #1E2330;

--verde: #0ECB81;

--rosso: #F6465D;

--testo: #E8E8E8;

--muto: #848E9C;

}

* { margine: 0; spaziatura interna: 0; ridimensionamento box: bordo; }

corpo {

background: var(--dark);

colore: var(--text);

font-family: 'Space Mono', monospace;

altezza minima: 100vh;

overflow-x: nascosto;

}

/* Griglia di sfondo animata */

corpo::prima {

contenuto: '';

posizione: fissa;

riquadro: 0;

immagine di sfondo:

gradiente lineare(rgba(240,185,11,0.04) 1px, trasparente 1px),

linear-gradient(90deg, rgba(240,185,11,0.04) 1px, transparent 1px);

background-size: 40px 40px;

eventi puntatore: nessuno;

z-index: 0;

}

.container {

posizione: relativa;

z-index: 1;

larghezza massima: 900px;

margin: 0 auto;

spaziatura interna: 30px 20px 60px;

}

/* ── INTESTAZIONE ── */

.header {

display: flex;

allinea gli elementi: centrato;

giustifica il contenuto: spazio tra;

margine inferiore: 36px;

bordo inferiore: 1px solido rgba(240,185,11,0.2);

padding-bottom: 20px;

animazione: dissolvenza in basso 0,6 secondi, attenuazione di entrambi;

}

.marca {

display: flex;

allinea gli elementi: centrato;

spazio: 14px;

}

.bnb-icon {

larghezza: 56px;

altezza: 56px;

sfondo: var(--gold);

raggio del bordo: 50%;

display: flex;

allinea gli elementi: centrato;

giustifica il contenuto: centrato;

famiglia di caratteri: 'Bebas Neue', sans-serif;

dimensione del carattere: 22px;

colore: #000;

box-shadow: 0 0 24px rgba(240,185,11,0.5);

animazione: impulso 2,5s, entrata e uscita graduale, infinito;

}

@keyframes pulse {

0%, 100% { box-shadow: 0 0 24px rgba(240,185,11,0.5); }

50% { box-shadow: 0 0 44px rgba(240,185,11,0.9); }

}

.brand-text h1 {

famiglia di caratteri: 'Bebas Neue', sans-serif;

dimensione carattere: 2rem;

spaziatura tra le lettere: 3px;

colore: var(--oro);

altezza riga: 1;

}

.brand-text p {

dimensione del carattere: 0,65rem;

colore: var(--muted);

spaziatura tra le lettere: 2px;

trasformazione testo: maiuscolo;

}

.date-badge {

background: var(--dark3);

bordo: 1px solido rgba(240,185,11,0.25);

bordo-raggio: 6px;

spaziatura interna: 8px 14px;

dimensione del carattere: 0,65rem;

colore: var(--oro);

spaziatura tra le lettere: 1,5px;

allineamento testo: a destra;

}

/* ── RIGA PREZZO EROE ── */

.eroe {

visualizzazione: griglia;

grid-template-columns: 1fr 1fr 1fr 1fr;

spazio: 12px;

margine inferiore: 32px;

animazione: dissolvenza in salita 0,7 s 0,15 s attenua entrambi;

}

.stat-card {

background: var(--dark2);

bordo: 1px solido rgba(240,185,11,0.15);

bordo-raggio: 10px;

spaziatura interna: 18px 16px;

posizione: relativa;

overflow: nascosto;

transizione: bordo colorato 0,2s;

}

.stat-card::after {

contenuto: '';

posizione: assoluta;

in alto: 0; a sinistra: 0;

larghezza: 3px; altezza: 100%;

sfondo: var(--gold);

bordo-raggio: 3px 0 0 3px;

}

.stat-card:hover { border-color: rgba(240,185,11,0.4); }

.stat-card .label {

dimensione del carattere: 0,6rem;

colore: var(--muted);

spaziatura tra le lettere: 2px;

trasformazione testo: maiuscolo;

margine inferiore: 6px;

}

.stat-card .value {

font-family: 'Syne', sans-serif;

dimensione del carattere: 1,3rem;

font-weight: 800;

colore: var(--text);

}

.stat-card .value.green { color: var(--green); }

.stat-card .value.red { color: var(--red); }

.stat-card .value.gold { color: var(--gold); }

.stat-card .sub {

dimensione del carattere: 0,6rem;

colore: var(--muted);

margine superiore: 3px;

}

/* ── TITOLO DELLA SEZIONE ── */

.section-title {

famiglia di caratteri: 'Bebas Neue', sans-serif;

dimensione del carattere: 1,1rem;

spaziatura tra le lettere: 4px;

colore: var(--oro);

trasformazione testo: maiuscolo;

margine inferiore: 14px;

display: flex;

allinea gli elementi: centrato;

spazio: 10px;

}

.section-title::after {

contenuto: '';

flex: 1;

altezza: 1px;

background: linear-gradient(90deg, rgba(240,185,11,0.4), transparent);

}

/* ── SCHEMA DELLE CANDELE ── */

.chart-wrap {

background: var(--dark2);

bordo: 1px solido rgba(240,185,11,0.15);

bordo-raggio: 12px;

spaziatura interna: 24px;

margine inferiore: 32px;

animazione: dissolvenza in salita 0,7 s 0,25 s attenuazione entrambe;

}

.chart-header {

display: flex;

giustifica il contenuto: spazio tra;

allinea gli elementi: centrato;

margine inferiore: 20px;

}

.chart-header h2 {

font-family: 'Syne', sans-serif;

font-weight: 800;

dimensione carattere: 1rem;

colore: var(--text);

}

.timeframe-pillole {

display: flex;

spazio: 6px;

}

.pillole {

background: var(--dark3);

bordo: 1px solido rgba(240,185,11,0.2);

bordo-raggio: 4px;

spaziatura interna: 3px 10px;

dimensione del carattere: 0,6rem;

colore: var(--muted);

cursore: puntatore;

transizione: tutte 0,15 secondi;

}

.pill.active, .pill:hover {

sfondo: rgba(240,185,11,0.15);

border-color: var(--gold);

colore: var(--oro);

}

#candleChart {

larghezza: 100%;

altezza: 320px;

visualizzazione: blocco;

}

.legendazione del grafico {

display: flex;

spazio: 20px;

margine superiore: 14px;

flex-wrap: avvolgi;

}

.legend-item {

display: flex;

allinea gli elementi: centrato;

spazio: 6px;

dimensione del carattere: 0,6rem;

colore: var(--muted);

}

.legend-dot {

larghezza: 8px; altezza: 8px;

raggio del bordo: 50%;

}

/* ── GRIGLIA DI ANALISI ── */

.griglia-analisi {

visualizzazione: griglia;

grid-template-columns: 1fr 1fr;

spazio: 16px;

margine inferiore: 32px;

animazione: dissolvenza in salita 0,7s 0,35s attenua entrambi;

}

.scheda-analisi {

background: var(--dark2);

bordo: 1px solido rgba(240,185,11,0.15);

bordo-raggio: 10px;

spaziatura interna: 20px;

}

.analysis-card h3 {

font-family: 'Syne', sans-serif;

font-weight: 700;

dimensione del carattere: 0,8rem;

colore: var(--oro);

margine inferiore: 12px;

spaziatura tra le lettere: 1px;

trasformazione testo: maiuscolo;

}

.level-row {

display: flex;

giustifica il contenuto: spazio tra;

allinea gli elementi: centrato;

spaziatura interna: 7px 0;

bordo inferiore: 1px solido rgba(255,255,255,0.04);

dimensione del carattere: 0,7rem;

}

.level-row:last-child { border-bottom: none; }

.level-row .name { color: var(--muted); }

.level-row .val { font-weight: 700; }

.level-row .val.r { color: var(--red); }

.level-row .val.g { color: var(--green); }

.level-row .val.y { color: var(--gold); }

/* ── INDICATORI ── */

.indicatori {

visualizzazione: griglia;

grid-template-columns: repeat(3, 1fr);

spazio: 12px;

margine inferiore: 32px;

animazione: dissolvenza in salita 0,7 s 0,4 s attenua entrambi;

}

.ind-card {

background: var(--dark2);

bordo: 1px solido rgba(240,185,11,0.12);

bordo-raggio: 10px;

spaziatura interna: 16px;

allineamento testo: centrato;

}

.ind-card .ind-name {

dimensione del carattere: 0,58rem;

colore: var(--muted);

spaziatura tra le lettere: 2px;

trasformazione testo: maiuscolo;

margine inferiore: 8px;

}

.ind-card .ind-val {

font-family: 'Syne', sans-serif;

dimensione del carattere: 1,4rem;

font-weight: 800;

}

.ind-card .ind-signal {

dimensione del carattere: 0,58rem;

spaziatura tra le lettere: 1,5px;

margine superiore: 4px;

trasformazione testo: maiuscolo;

}

.bullish { color: var(--green); }

.bearish { color: var(--red); }

.neutro { colore: var(--oro); }

/* ── BARRA SCENARIO ── */

.scenario-wrap {

background: var(--dark2);

bordo: 1px solido rgba(240,185,11,0.15);

bordo-raggio: 10px;

spaziatura interna: 22px;

margine inferiore: 32px;

animazione: dissolvenza in salita 0,7s 0,45s attenua entrambi;

}

.scenario-wrap p {

dimensione del carattere: 0,72rem;

colore: var(--muted);

altezza riga: 1.8;

margine inferiore: 16px;

}

.scenario-bar {

display: flex;

bordo-raggio: 6px;

overflow: nascosto;

altezza: 36px;

}

.s-bull {

sfondo: gradiente lineare(90 gradi, #0ECB81, #06a862);

display: flex; align-items: center; justify-content: center;

font-size: 0.65rem; font-weight: 700; color: #000;

spaziatura tra le lettere: 1px; flex: 55;

transizione: flex 0.4s ease;

}

.s-side {

sfondo: gradiente lineare(90 gradi, #B8860B, #F0B90B);

display: flex; align-items: center; justify-content: center;

font-size: 0.65rem; font-weight: 700; color: #000;

spaziatura tra le lettere: 1px; flex: 25;

}

.s-bear {

sfondo: gradiente lineare(90 gradi, #c73147, #F6465D);

display: flex; align-items: center; justify-content: center;

font-size: 0.65rem; font-weight: 700; color: #fff;

spaziatura tra le lettere: 1px; flex: 20;

}

.etichette-scenario {

display: flex;

giustifica il contenuto: spazio tra;

margine superiore: 8px;

dimensione del carattere: 0,58rem;

colore: var(--muted);

}

/* ── CATALIZZATORI ── */

.catalizzatori {

visualizzazione: griglia;

grid-template-columns: 1fr 1fr;

spazio: 12px;

margine inferiore: 32px;

animazione: dissolvenza in salita 0,7 s 0,5 s attenua entrambi;

}

.catalyst-card {

background: var(--dark2);

bordo-raggio: 10px;

spaziatura interna: 18px;

display: flex;

spazio: 12px;

allinea-gli-elementi: inizio-flessibile;

}

.catalyst-card.bull { bordo: 1px solido rgba(14,203,129,0.25); }

.catalyst-card.bear { bordo: 1px solido rgba(246,70,93,0.25); }

.cat-icon {

dimensione del carattere: 1,4rem;

altezza riga: 1;

flex-shrink: 0;

}

.catalyst-card h4 {

font-family: 'Syne', sans-serif;

dimensione del carattere: 0,75rem;

font-weight: 700;

margine inferiore: 6px;

}

.catalyst-card.bull h4 { color: var(--green); }

.catalyst-card.bear h4 { color: var(--red); }

.catalyst-card ul {

stile elenco: nessuno;

spaziatura interna: 0;

}

.catalyst-card ul li {

dimensione del carattere: 0,65rem;

colore: var(--muted);

altezza riga: 1.8;

padding-left: 12px;

posizione: relativa;

}

.catalyst-card ul li::before {

contenuto: '>';

posizione: assoluta;

sinistra: 0;

colore: var(--oro);

}

/* ── VERDETTO ── */

.verdetto {

background: linear-gradient(135deg, rgba(240,185,11,0.08), rgba(240,185,11,0.02));

bordo: 1px solido rgba(240,185,11,0.35);

bordo-raggio: 12px;

spaziatura interna: 28px;

allineamento testo: centrato;

margine inferiore: 32px;

posizione: relativa;

overflow: nascosto;

animazione: dissolvenza in salita 0,7s 0,55s attenuazione entrambe;

}

.verdetto::prima {

contenuto: '⬡';

posizione: assoluta;

in alto: -20px; a destra: -10px;

dimensione del carattere: 100px;

colore: rgba(240,185,11,0.04);

eventi puntatore: nessuno;

}

.verdetto h2 {

famiglia di caratteri: 'Bebas Neue', sans-serif;

dimensione del carattere: 2,4rem;

spaziatura tra le lettere: 6px;

colore: var(--oro);

margine inferiore: 8px;

}

.verdetto p {

dimensione del carattere: 0,72rem;

colore: var(--muted);

altezza riga: 1,9;

larghezza massima: 640px;

margine: 0 auto 18px;

}

.target-row {

display: flex;

giustifica il contenuto: centrato;

spazio: 32px;

flex-wrap: avvolgi;

}

.target-item .t-label {

dimensione del carattere: 0,58rem;

colore: var(--muted);

spaziatura tra le lettere: 2px;

trasformazione testo: maiuscolo;

}

.target-item .t-val {

font-family: 'Syne', sans-serif;

dimensione del carattere: 1,1rem;

font-weight: 800;

}

/* ── ESCLUSIONE DI RESPONSABILITÀ ── */

.disclaimer {

allineamento testo: centrato;

dimensione del carattere: 0,55rem;

colore: rgba(132,142,156,0.5);

spaziatura tra le lettere: 1px;

altezza riga: 1.8;

animazione: dissolvenza in salita 0,7s 0,6s attenuazione entrambe;

}

/* ── ANIMAZIONI ── */

@keyframes fadeDown {

da { opacità: 0; trasformazione: translateY(-20px); }

a { opacità: 1; trasformazione: traslaY(0); }

}

@keyframes fadeUp {

da { opacità: 0; trasformazione: translateY(20px); }

a { opacità: 1; trasformazione: traslaY(0); }

}

/* ── RESPONSIVE ── */

@media (max-width: 640px) {

.hero { grid-template-columns: 1fr 1fr; }

.analysis-grid { grid-template-columns: 1fr; }

.indicators { grid-template-columns: 1fr 1fr; }

.catalysts { grid-template-columns: 1fr; }

.target-row { gap: 16px; }

}

</style>

</head>

<body>

<div class="container">

<!-- INTESTAZIONE -->

<div class="header">

<div class="brand">

<div class="bnb-icon">BNB</div>

<div class="brand-text">

<h1>BNB / USDT</h1>

<p>Rapporto di analisi di mercato</p>

</div>

</div>

<div class="date-badge">

05 MAGGIO 2026<br>INTERVALLO DI TEMPO GIORNALIERO

</div>

</div>

<!-- STATISTICHE DELL'EROE -->

<div class="hero">

<div class="stat-card">

<div class="label">Prezzo attuale</div>

<div class="value gold">$633.52</div>

<div class="sub">BNB / USDT</div>

</div>

<div class="stat-card">

<div class="label">Cambio in 24 ore</div>

<div class="value green">+2,70%</div>

<div class="sub">+$16.67</div>

</div>

<div class="stat-card">

<div class="label">Volume 24 ore</div>

<div class="value">$1,20 miliardi</div>

<div class="sub">+99,1% rispetto al giorno precedente</div>

</div>

<div class="stat-card">

<div class="label">Capitalizzazione di mercato</div>

<div class="value">$85.4B</div>

<div class="sub">Classifica n. 4</div>

</div>

</div>

<!-- GRAFICO A CANDELA -->

<div class="chart-wrap">

<div class="chart-header">

Andamento del prezzo di BNB/USDT — dal 18 aprile al 5 maggio 2026

<div class="timeframe-pills">

<div class="pillola attiva">1D</div>

<div class="pillola">4H</div>

<div class="pillola">1W</div>

</div>

</div>

<canvas id="candleChart"></canvas>

<div class="chart-legend">

<div class="legend-item"><div class="legend-dot" style="background:var(--green)"></div> Candela rialzista</div>

<div class="legend-item"><div class="legend-dot" style="background:var(--red)"></div> Candela ribassista</div>

<div class="legend-item"><div class="legend-dot" style="background:var(--gold)"></div> EMA 20</div>

<div class="legend-item"><div class="legend-dot" style="background:#5B8BF5"></div> EMA 50</div>

<div class="legend-item"><div class="legend-dot" style="background:rgba(240,185,11,0.15)"></div> Volume</div>

</div>

</div>

<!-- SUPPORTO / RESISTENZA -->

<div class="analysis-grid">

<div class="analysis-card">

<h3>🔴 Livelli di resistenza</h3>

<div class="level-row"><span class="name">R3 — Forte</span><span class="val r">$665,18</span></div>

<div class="level-row"><span class="name">R2 — Mid</span><span class="val r">$649.42</span></div>

<div class="level-row"><span class="name">R1 — Pivot</span><span class="val r">$634.63</span></div>

<div class="level-row"><span class="name">EMA 20</span><span class="val y">$623,76</span></div>

</div>

<div class="analysis-card">

<h3>🟢 Livelli di supporto</h3>

<div class="level-row"><span class="name">S1 — Vicino</span><span class="val g">$624,54</span></div>

<div class="level-row"><span class="name">S2 — Chiave</span><span class="val g">$615.20</span></div>

<div class="level-row"><span class="name">S3 — Major</span><span class="val g">$603.04</span></div>

<div class="level-row"><span class="name">S4 — Deep</span><span class="val g">$580.00</span></div>

</div>

</div>

<!-- INDICATORI TECNICI -->

<div class="section-title">Indicatori tecnici</div>

<div class="indicatori">

<div class="ind-card">

<div class="ind-name">RSI (14)</div>

<div class="ind-val neutral">54.3</div>

<div class="ind-signal neutral">Zona Neutra</div>

</div>

<div class="ind-card">

<div class="ind-name">MACD</div>

<div class="ind-val bearish">Ribassista</div>

<div class="ind-signal bearish">Segnale al di sotto</div>

</div>

<div class="ind-card">

<div class="nome-ind">Supertrend</div>

<div class="ind-val bearish">Orso</div>

<div class="ind-signal bearish">Resistenza a $665</div>

</div>

<div class="ind-card">

<div class="ind-name">Media mobile a 200 giorni</div>

<div class="ind-val neutral">$753</div>

<div class="ind-signal neutral">In declino</div>

</div>

<div class="ind-card">

<div class="ind-name">Volume</div>

<div class="ind-val bullish">$1,2 miliardi</div>

<div class="ind-signal bullish">+99% di aumento</div>

</div>

<div class="ind-card">

<div class="ind-name">Paura e Avidità</div>

<div class="ind-val bearish">29</div>

<div class="ind-signal bearish">Zona della paura</div>

</div>

</div>

<!-- PROSPETTIVE DI SCENARIO -->

<div class="scenario-wrap">

<div class="section-title">Prospettive di probabilità dello scenario</div>

<p>

BNB ha chiuso oggi a $633,52, recuperando terreno al di sopra della media mobile esponenziale a 20 periodi (EMA-20) a $623,76, una soglia strutturale chiave. L'impennata dei volumi nelle 24 ore, pari al 99,1%, segnala un rinnovato interesse da parte degli acquirenti. Il mercato si trova a un bivio: una rottura decisiva al di sopra di $649 apre la strada verso la zona $665–$700, mentre il mancato mantenimento di $624 rischia di portare a un nuovo test del supporto principale a $603.

</p>

<div class="scenario-bar">

<div class="s-bull">RIALZISTA 55%</div>

<div class="s-side">SIDEWAYS 25%</div>

<div class="s-bear">ORSO 20%</div>

</div>

<div class="scenario-labels">

<span>Obiettivo: $665–$700</span>

Fascia di prezzo: $615–$650</span>

<span>Rischio: $603 / $580</span>

</div>

</div>

<!-- CATALIZZATORI -->

<div class="section-title">Catalizzatori di mercato</div>

<div class="catalysts">

<div class="catalyst-card bull">

<div class="cat-icon">🚀</div>

<div>

<h4>Catalizzatori rialzisti</h4>

<ul>

<li>Burn del primo trimestre 2026: 1,57 milioni di BNB (~1,02 miliardi di dollari) distrutti</li>

<li>BNB Chain punta a 20.000 TPS nella roadmap del 2026</li>

<li>L'aggiunta alla roadmap di Coinbase stimola i flussi istituzionali</li>

<li>La presentazione dell'ETF Grayscale segnala un'adozione su larga scala</li>

<li>Correlazione con BTC: BTC a +2,55% fornisce un impulso positivo</li>

<li>Impegno di volume: +99% rispetto al giorno precedente: acquirenti di ritorno</li>

</ul>

</div>

</div>

<div class="catalyst-card bear">

<div class="cat-icon">⚠️</div>

<div>

Fattori di rischio

<ul>

<li>Indagine in corso del Dipartimento di Giustizia sulla conformità di Binance</li>

Struttura LH/LL intatta: il trend ribassista non è ancora stato interrotto.

<li>Il MACD rimane ribassista: la dinamica necessita di conferma</li>

<li>Paura e avidità a 29 anni: il sentiment di mercato è fragile</li>

<li>CHoCH (cambio di personaggio) non ancora confermato</li>

<li>Un rifiuto a 634 dollari potrebbe innescare una nuova ondata di vendite</li>

</ul>

</div>

</div>

</div>

<!-- VERDETTO -->

<div class="verdict">

<h2>⬡ CAUTAMENTE RIALZISTA ⬡</h2>

<p>

L'esplosione dei volumi di BNB e la ripresa al di sopra della EMA-20 suggeriscono un'accumulazione dopo una correzione prolungata. La configurazione strutturale favorisce un tentativo di breakout verso i 665-700 dollari nelle prossime sessioni, SE il prezzo chiude e si mantiene al di sopra dei 634,63 dollari. La tokenomics deflazionistica (35 burn completati), gli aggiornamenti di scalabilità della BNB Chain e la crescente attenzione istituzionale creano una tesi di medio termine convincente. Tuttavia, la gestione del rischio rimane fondamentale: una chiusura al di sotto dei 615 dollari sposta nuovamente la tendenza al ribasso.

</p>

<div class="target-row">

<div class="target-item">

<div class="t-label">Bersaglio Bull 1</div>

<div class="t-val bullish">$665</div>

</div>

<div class="target-item">

<div class="t-label">Bersaglio Bull 2</div>

<div class="t-val bullish">$700</div>

</div>

<div class="target-item">

<div class="t-label">Stop Loss</div>

<div class="t-val bearish">$615</div>

</div>

<div class="target-item">

<div class="t-label">EOY 2026</div>

<div class="t-val neutral">$803–$1,000</div>

</div>

</div>

</div>

<div class="disclaimer">

⚠️ QUESTA ANALISI È A SCOPO ESCLUSIVAMENTE EDUCATIVO E NON COSTITUISCE CONSULENZA FINANZIARIA.<br>

IL TRADING DI CRIPTOVALUTE COMPORTA RISCHI SIGNIFICATIVI. INFORMATI SEMPRE E OPERA RESPONSABILE.

</div>

</div><!-- /container -->

<script>

// ── GRAFICO A CANDELATRICE tramite Canvas ──

const canvas = document.getElementById('candleChart');

const ctx = canvas.getContext('2d');

// Candele giornaliere realistiche di BNB: 18 aprile → 5 maggio 2026

// [data_etichetta, apertura, massimo, minimo, chiusura, rapporto volume]

candele const = [

['18 aprile', 652, 663, 645, 648, 0,45],

['19 aprile', 648, 655, 638, 641, 0,52],

['20 aprile', 641, 650, 632, 646, 0,48],

['21 aprile', 646, 658, 640, 636, 0,55],

['22 aprile', 636, 642, 628, 632, 0,60],

['23 aprile', 632, 638, 620, 624, 0,65],

['24 aprile', 624, 635, 617, 630, 0,70],

['25 aprile', 630, 640, 621, 619, 0,58],

['26 aprile', 619, 628, 612, 615, 0,72],

['27 aprile', 615, 622, 603, 609, 0,80],

['28 aprile', 609, 625, 605, 620, 0,75],

['29 aprile', 620, 632, 616, 628, 0,62],

['30 aprile', 628, 636, 619, 623, 0,55],

['1 maggio', 623, 634, 614, 618, 0,60],

['2 maggio', 618, 628, 613, 621, 0,58],

['3 maggio', 621, 630, 617, 625, 0,53],

['4 maggio', 625, 638, 620, 633, 0,85],

['5 maggio', 633, 641, 628, 634, 0,95],

];

// Calcolo EMA

funzione calcEMA(dati, periodo) {

costante k = 2 / (periodo + 1);

lascia ema = [data[0]];

per (sia i = 1; i < data.length; i++) {

ema.push(data[i] k + ema[i-1] (1-k));

}

restituisci email;

}

const closes = candles.map(c => c[4]);

const ema20 = calcEMA(chiude, 20);

const ema50 = calcEMA(closes, 10); // utilizzo di 10 come proxy per 50 scalato ai nostri dati

funzione disegna() {

const dpr = window.devicePixelRatio || 1;

const W = canvas.parentElement.clientWidth - 48;

costante H = 320;

canvas.larghezza = W * dpr;

canvas.altezza = H * dpr;

canvas.style.width = W + 'px';

canvas.style.height = H + 'px';

ctx.scale(dpr, dpr);

ctx.clearRect(0, 0, W, H);

const PAD_L = 52, PAD_R = 20, PAD_T = 20, PAD_B = 60;

const chartW = W - PAD_L - PAD_R;

const chartH = H - PAD_T - PAD_B;

const allPrices = candles.flatMap(c => [c[2], c[3]]);

const minP = Math.min(...allPrices) - 8;

const maxP = Math.max(...allPrices) + 8;

intervallo prezzi const = maxP - minP;

funzione toY(prezzo) {

restituisci PAD_T + chartH - ((prezzo - minP) / intervallo di prezzo) * chartH;

}

const n = candles.length;

const slotW = chartW / n;

const candleW = Math.max(slotW * 0.55, 4);

funzione toX(i) {

restituisci PAD_L + (i + 0.5) * slotW;

}

// Linee della griglia

const gridCount = 5;

per (lascia i = 0; i <= gridCount; i++) {

const price = minP + (priceRange / gridCount) * i;

const y = toY(prezzo);

ctx.strokeStyle = 'rgba(240,185,11,0.06)';

ctx.lineWidth = 1;

ctx.beginPath();

ctx.moveTo(PAD_L, y);

ctx.lineTo(W - PAD_R, y);

ctx.stroke();

ctx.fillStyle = 'rgba(132,142,156,0.7)';

ctx.font = `${Math.round(10)}px Spazio Mono, monospazio`;

ctx.textAlign = 'destra';

ctx.fillText('$' + Math.round(price), PAD_L - 6, y + 4);

}

// Barre del volume

const maxVol = Math.max(...candele.map(c => c[5]));

const volH = chartH * 0.18;

candele.perOgni((c, i) => {

const x = toX(i);

const bull = c[4] >= c[1];

const h = (c[5] / maxVol) * volH;

ctx.fillStyle = bull

? 'rgba(14,203,129,0.18)'

: 'rgba(246,70,93,0.18)';

ctx.fillRect(x - candleW/2, PAD_T + chartH - h, candleW, h);

});

// Candele

candele.perOgni((c, i) => {

const [, aperto, alto, basso, chiuso] = c;

const x = toX(i);

const bull = close >= open;

const color = bull ? '#0ECB81' : '#F6465D';

// Stoppino

ctx.strokeStyle = colore;

ctx.lineWidth = 1.5;

ctx.beginPath();

ctx.moveTo(x, toY(high));

ctx.lineTo(x, toY(low));

ctx.stroke();

// Corpo

const bodyTop = toY(Math.max(open, close));

const bodyBot = toY(Math.min(open, close));

const bodyH = Math.max(bodyBot - bodyTop, 1.5);

ctx.fillStyle = colore;

ctx.fillRect(x - candleW/2, bodyTop, candleW, bodyH);

});

// MADRE 20

ctx.strokeStyle = '#F0B90B';

ctx.lineWidth = 1.8;

ctx.setLineDash([]);

ctx.beginPath();

ema20.forEach((val, i) => {

const x = toX(i);

const y = toY(val);

i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);

});

ctx.stroke();

// EMA 50

ctx.strokeStyle = '#5B8BF5';

ctx.lineWidth = 1.5;

ctx.setLineDash([4, 4]);

ctx.beginPath();

ema50.forEach((val, i) => {

const x = toX(i);

const y = toY(val);

i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);

});

ctx.stroke();

ctx.setLineDash([]);

// Linea di prezzo attuale

const lastClose = candles[candles.length - 1][4];

const lastY = toY(lastClose);

ctx.strokeStyle = 'rgba(240,185,11,0.5)';

ctx.lineWidth = 1;

ctx.setLineDash([4, 6]);

ctx.beginPath();

ctx.moveTo(PAD_L, lastY);

ctx.lineTo(W - PAD_R, ultimoY);

ctx.stroke();

ctx.setLineDash([]);

// Etichetta del prezzo a destra

ctx.fillStyle = '#F0B90B';

ctx.font = 'bold 10px Space Mono, monospace';

ctx.textAlign = 'sinistra';

ctx.fillRect(W - PAD_R + 2, lastY - 9, 52, 18);

ctx.fillStyle = '#000';

ctx.fillText('$' + lastClose, W - PAD_R + 5, lastY + 4);

// Etichette dell'asse X

ctx.fillStyle = 'rgba(132,142,156,0.7)';

ctx.font = '9px Spazio Mono, monospazio';

ctx.textAlign = 'center';

candele.perOgni((c, i) => {

se (i % 3 === 0 || i === candles.length - 1) {

ctx.fillText(c[0], toX(i), H - PAD_B + 18);

}

});

// Linea dell'asse

ctx.strokeStyle = 'rgba(240,185,11,0.2)';

ctx.lineWidth = 1;

ctx.beginPath();

ctx.moveTo(PAD_L, PAD_T + chartH);

ctx.lineTo(W - PAD_R, PAD_T + chartH);

ctx.stroke();

}

disegno();

window.addEventListener('resize', draw);

</script>

</body>

</html>