$BNB

BNB
BNB
578.23
-2.44%

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

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

<title>Analisis Pasar BNB – 5 Mei 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 {

--emas: #F0B90B;

--emas-terang: #FFD740;

--emas-redup: #B8860B;

--gelap: #0B0E11;

--gelap2: #13171D;

--gelap3: #1E2330;

--hijau: #0ECB81;

--merah: #F6465D;

--teks: #E8E8E8;

--dibisukan: #848E9C;

}

* { margin: 0; padding: 0; box-sizing: border-box; }

tubuh {

latar belakang: var(--gelap);

warna: var(--teks);

font-family: 'Space Mono', monospace;

min-height: 100vh;

overflow-x: tersembunyi;

}

/* Kisi-kisi latar belakang animasi */

badan::sebelum {

isi: '';

posisi: tetap;

sisipan: 0;

gambar latar belakang:

gradien linier(rgba(240,185,11,0.04) 1px, transparan 1px),

gradien linier(90 derajat, rgba(240,185,11,0.04) 1px, transparan 1px);

ukuran latar belakang: 40px 40px;

pointer-events: none;

indeks z: 0;

}

.kontainer {

posisi: relatif;

indeks z: 1;

lebar maksimum: 900px;

margin: 0 otomatis;

padding: 30px 20px 60px;

}

/* ── HEADER ── */

.header {

tampilan: fleksibel;

sejajarkan item: tengah;

justify-content: space-between;

margin-bawah: 36px;

border-bottom: 1px solid rgba(240,185,11,0.2);

padding-bottom: 20px;

animasi: fadeDown 0.6s ease both;

}

.merek {

tampilan: fleksibel;

sejajarkan item: tengah;

jarak: 14px;

}

ikon .bnb {

lebar: 56px;

tinggi: 56px;

latar belakang: var(--emas);

radius-batas: 50%;

tampilan: fleksibel;

sejajarkan item: tengah;

justify-content: center;

font-family: 'Bebas Neue', sans-serif;

ukuran font: 22px;

warna: #000;

bayangan kotak: 0 0 24px rgba(240,185,11,0.5);

animasi: pulsa 2,5 detik, transisi masuk-keluar tak terbatas;

}

@keyframes pulsa {

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 {

font-family: 'Bebas Neue', sans-serif;

ukuran font: 2rem;

spasi antar huruf: 3px;

warna: var(--emas);

Tinggi baris: 1;

}

.teks-merek p {

ukuran font: 0,65rem;

warna: var(--muted);

spasi antar huruf: 2px;

transformasi teks: huruf besar;

}

.lencana tanggal {

latar belakang: var(--dark3);

batas: 1px solid rgba(240,185,11,0.25);

radius batas: 6px;

padding: 8px 14px;

ukuran font: 0,65rem;

warna: var(--emas);

spasi antar huruf: 1,5px;

perataan teks: kanan;

}

/* ── BARIS HARGA PAHLAWAN ── */

.pahlawan {

tampilan: grid;

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

jarak: 12px;

margin-bawah: 32px;

animasi: fadeUp 0.7s 0.15s ease both;

}

.stat-card {

latar belakang: var(--dark2);

batas: 1px solid rgba(240,185,11,0.15);

radius batas: 10px;

padding: 18px 16px;

posisi: relatif;

overflow: tersembunyi;

transisi: warna-batas 0,2 detik;

}

.stat-card::after {

isi: '';

posisi: absolut;

atas: 0; kiri: 0;

lebar: 3px; tinggi: 100%;

latar belakang: var(--emas);

radius-batas: 3px 0 0 3px;

}

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

.stat-card .label {

ukuran font: 0,6rem;

warna: var(--muted);

spasi antar huruf: 2px;

transformasi teks: huruf besar;

margin-bawah: 6px;

}

.stat-card .value {

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

Ukuran font: 1,3rem;

ketebalan font: 800;

warna: var(--teks);

}

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

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

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

.stat-card .sub {

ukuran font: 0,6rem;

warna: var(--muted);

margin-atas: 3px;

}

/* ── JUDUL BAGIAN ── */

.judul-bagian {

font-family: 'Bebas Neue', sans-serif;

Ukuran font: 1.1rem;

spasi antar huruf: 4px;

warna: var(--emas);

transformasi teks: huruf besar;

margin-bottom: 14px;

tampilan: fleksibel;

sejajarkan item: tengah;

jarak: 10px;

}

.section-title::after {

isi: '';

fleksibel: 1;

tinggi: 1px;

latar belakang: gradien linier (90 derajat, rgba (240, 185, 11, 0,4), transparan);

}

/* ── BAGAN LILIN ── */

.chart-wrap {

latar belakang: var(--dark2);

batas: 1px solid rgba(240,185,11,0.15);

radius batas: 12px;

padding: 24px;

margin-bawah: 32px;

animasi: fadeUp 0.7s 0.25s ease both;

}

.header-grafik {

tampilan: fleksibel;

justify-content: space-between;

sejajarkan item: tengah;

margin-bottom: 20px;

}

.judul grafik h2 {

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

ketebalan font: 800;

ukuran font: 1rem;

warna: var(--teks);

}

.pil-jangka-waktu {

tampilan: fleksibel;

jarak: 6px;

}

.pil {

latar belakang: var(--dark3);

batas: 1px solid rgba(240,185,11,0.2);

radius batas: 4px;

padding: 3px 10px;

ukuran font: 0,6rem;

warna: var(--muted);

kursor: penunjuk;

transisi: semua 0,15 detik;

}

.pill.aktif, .pill:hover {

latar belakang: rgba(240,185,11,0.15);

warna-batas: var(--emas);

warna: var(--emas);

}

#candleChart {

lebar: 100%;

tinggi: 320px;

tampilkan: blok;

}

.legenda grafik {

tampilan: fleksibel;

jarak: 20px;

margin-atas: 14px;

flex-wrap: bungkus;

}

.legend-item {

tampilan: fleksibel;

sejajarkan item: tengah;

jarak: 6px;

ukuran font: 0,6rem;

warna: var(--muted);

}

.legend-dot {

lebar: 8px; tinggi: 8px;

radius-batas: 50%;

}

/* ── KISI ANALISIS ── */

.analisis-grid {

tampilan: grid;

grid-template-columns: 1fr 1fr;

jarak: 16px;

margin-bawah: 32px;

animasi: fadeUp 0.7s 0.35s ease both;

}

.kartu-analisis {

latar belakang: var(--dark2);

batas: 1px solid rgba(240,185,11,0.15);

radius batas: 10px;

padding: 20px;

}

.kartu-analisis h3 {

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

ketebalan huruf: 700;

ukuran font: 0,8rem;

warna: var(--emas);

margin-bottom: 12px;

spasi antar huruf: 1px;

transformasi teks: huruf besar;

}

.level-row {

tampilan: fleksibel;

justify-content: space-between;

sejajarkan item: tengah;

padding: 7px 0;

border-bottom: 1px solid rgba(255,255,255,0.04);

ukuran font: 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); }

/* ── INDIKATOR ── */

.indikator {

tampilan: grid;

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

jarak: 12px;

margin-bawah: 32px;

animasi: fadeUp 0.7s 0.4s ease both;

}

.ind-card {

latar belakang: var(--dark2);

batas: 1px solid rgba(240,185,11,0.12);

radius batas: 10px;

padding: 16px;

perataan teks: tengah;

}

.ind-card .ind-name {

ukuran font: 0,58rem;

warna: var(--muted);

spasi antar huruf: 2px;

transformasi teks: huruf besar;

margin-bawah: 8px;

}

.ind-card .ind-val {

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

Ukuran font: 1,4rem;

ketebalan font: 800;

}

.ind-card .ind-signal {

ukuran font: 0,58rem;

spasi antar huruf: 1,5px;

margin-atas: 4px;

transformasi teks: huruf besar;

}

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

.beruang { warna: var(--merah); }

.netral { warna: var(--emas); }

/* ── SKENARIO BAR ── */

.pembungkus skenario {

latar belakang: var(--dark2);

batas: 1px solid rgba(240,185,11,0.15);

radius batas: 10px;

padding: 22px;

margin-bawah: 32px;

animasi: fadeUp 0.7s 0.45s ease both;

}

.skenario-bungkus p {

ukuran font: 0,72rem;

warna: var(--muted);

Tinggi baris: 1,8;

margin-bottom: 16px;

}

.skenario-bar {

tampilan: fleksibel;

radius batas: 6px;

overflow: tersembunyi;

tinggi: 36px;

}

.s-banteng {

latar belakang: gradien linier (90 derajat, #0ECB81, #06a862);

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

Ukuran font: 0,65rem; Ketebalan font: 700; Warna: #000;

spasi antar huruf: 1px; flex: 55;

transisi: flex 0.4s ease;

}

.sisi-s {

latar belakang: gradien linier (90 derajat, #B8860B, #F0B90B);

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

Ukuran font: 0,65rem; Ketebalan font: 700; Warna: #000;

spasi antar huruf: 1px; flex: 25;

}

.s-beruang {

latar belakang: gradien linier (90 derajat, #c73147, #F6465D);

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

Ukuran font: 0,65rem; Ketebalan font: 700; Warna: #fff;

spasi antar huruf: 1px; flex: 20;

}

.label-skenario {

tampilan: fleksibel;

justify-content: space-between;

margin-atas: 8px;

ukuran font: 0,58rem;

warna: var(--muted);

}

/* ── KATALIS ── */

.katalis {

tampilan: grid;

grid-template-columns: 1fr 1fr;

jarak: 12px;

margin-bawah: 32px;

animasi: fadeUp 0.7s 0.5s ease both;

}

.kartu-katalis {

latar belakang: var(--dark2);

radius batas: 10px;

padding: 18px;

tampilan: fleksibel;

jarak: 12px;

sejajarkan-item: mulai-fleksibel;

}

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

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

.ikon-kucing {

Ukuran font: 1,4rem;

Tinggi baris: 1;

fleksibel-menyusut: 0;

}

.catalyst-card h4 {

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

ukuran font: 0,75rem;

ketebalan font: 700;

margin-bawah: 6px;

}

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

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

.catalyst-card ul {

gaya daftar: tidak ada;

padding: 0;

}

.catalyst-card ul li {

ukuran font: 0,65rem;

warna: var(--muted);

Tinggi baris: 1,8;

padding-left: 12px;

posisi: relatif;

}

.catalyst-card ul li::before {

isi: '>';

posisi: absolut;

kiri: 0;

warna: var(--emas);

}

/* ── PUTUSAN ── */

.dakwaan {

latar belakang: gradien linier(135 derajat, rgba(240,185,11,0.08), rgba(240,185,11,0.02));

batas: 1px solid rgba(240,185,11,0.35);

radius batas: 12px;

padding: 28px;

perataan teks: tengah;

margin-bawah: 32px;

posisi: relatif;

overflow: tersembunyi;

animasi: fadeUp 0.7s 0.55s ease both;

}

.putusan::sebelum {

konten: '⬡';

posisi: absolut;

atas: -20px; kanan: -10px;

ukuran font: 100px;

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

pointer-events: none;

}

.putusan h2 {

font-family: 'Bebas Neue', sans-serif;

ukuran font: 2,4rem;

spasi antar huruf: 6px;

warna: var(--emas);

margin-bawah: 8px;

}

.putusan p {

ukuran font: 0,72rem;

warna: var(--muted);

Tinggi baris: 1,9;

lebar maksimum: 640px;

margin: 0 otomatis 18px;

}

.target-row {

tampilan: fleksibel;

justify-content: center;

jarak: 32px;

flex-wrap: bungkus;

}

.target-item .t-label {

ukuran font: 0,58rem;

warna: var(--muted);

spasi antar huruf: 2px;

transformasi teks: huruf besar;

}

.target-item .t-val {

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

Ukuran font: 1.1rem;

ketebalan font: 800;

}

/* ── PENAFIAN ── */

.penafian {

perataan teks: tengah;

ukuran font: 0,55rem;

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

spasi antar huruf: 1px;

Tinggi baris: 1,8;

animasi: fadeUp 0.7s 0.6s ease both;

}

/* ── ANIMASI ── */

@keyframes fadeDown {

dari { opasitas: 0; transformasi: translasiY(-20px); }

ke { opasitas: 1; transformasi: translasiY(0); }

}

@keyframes fadeUp {

dari { opasitas: 0; transformasi: translasiY(20px); }

ke { opasitas: 1; transformasi: translasiY(0); }

}

/* ── RESPONSIF ── */

@media (max-width: 640px) {

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

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

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

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

.target-row { gap: 16px; }

}

</style>

</head>

<body>

<div class="container">

<!-- HEADER -->

<div class="header">

<div class="brand">

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

<div class="brand-text">

<h1>BNB / USDT</h1>

Laporan Analisis Pasar

</div>

</div>

<div class="date-badge">

5 MEI 2026<br>KERANGKA WAKTU HARIAN

</div>

</div>

<!-- STATISTIK PAHLAWAN -->

<div class="hero">

<div class="stat-card">

<div class="label">Harga Saat Ini</div>

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

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

</div>

<div class="stat-card">

<div class="label">Perubahan 24 Jam</div>

<div class="value green">+2.70%</div>

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

</div>

<div class="stat-card">

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

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

<div class="sub">+99,1% dibandingkan hari sebelumnya</div>

</div>

<div class="stat-card">

<div class="label">Kapitalisasi Pasar</div>

<div class="value">$85,4B</div>

<div class="sub">Peringkat #4</div>

</div>

</div>

<!-- BAGAN LILIN -->

<div class="chart-wrap">

<div class="chart-header">

Pergerakan Harga BNB/USDT — 18 April → 5 Mei 2026

<div class="timeframe-pills">

<div class="pill active">1D</div>

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

<div class="pill">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> Lilin Bullish</div>

<div class="legend-item"><div class="legend-dot" style="background:var(--red)"></div> Lilin Bearish</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>

<!-- DUKUNGAN / RESISTENSI -->

<div class="analysis-grid">

<div class="analysis-card">

<h3>🔴 Tingkat Resistensi</h3>

<div class="level-row"><span class="name">R3 — Strong</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>🟢 Tingkat Dukungan</h3>

<div class="level-row"><span class="name">S1 — Dekat</span><span class="val g">$624.54</span></div>

<div class="level-row"><span class="name">S2 — Key</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>

<!-- INDIKATOR TEKNIS -->

<div class="section-title">Indikator Teknis</div>

<div class="indikator">

<div class="ind-card">

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

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

Zona Netral

</div>

<div class="ind-card">

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

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

<div class="ind-signal bearish">Sinyal di Bawah Ini</div>

</div>

<div class="ind-card">

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

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

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

</div>

<div class="ind-card">

<div class="ind-name">SMA 200 Hari</div>

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

<div class="ind-signal neutral">Menurun</div>

</div>

<div class="ind-card">

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

<div class="ind-val bullish">$1.2B</div>

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

</div>

<div class="ind-card">

<div class="ind-name">Ketakutan & Keserakahan</div>

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

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

</div>

</div>

<!-- SKENARIO OUTLOOK -->

<div class="scenario-wrap">

<div class="section-title">Prospek Probabilitas Skenario</div>

<p>

BNB ditutup hari ini di <strong style="color:var(--gold)">$633,52</strong>, kembali menembus level EMA-20 kritis di $623,76 — ambang batas struktural utama. Lonjakan volume 24 jam sebesar <strong style="color:var(--gold)">99,1%</strong> menandakan minat pembeli yang kembali meningkat. Pasar berada di persimpangan jalan: penembusan yang menentukan di atas <strong style="color:var(--green)">$649</strong> membuka jalan menuju zona $665–$700, sementara kegagalan untuk mempertahankan $624 berisiko menguji ulang support utama $603.

</p>

<div class="scenario-bar">

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

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

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

</div>

<div class="scenario-labels">

Target: $665–$700

Kisaran Harga: $615–$650

Risiko: $603 / $580

</div>

</div>

<!-- KATALIS -->

<div class="section-title">Katalis Pasar</div>

<div class="katalis">

<div class="catalyst-card bull">

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

<div>

<h4>Katalis Pendorong Bullish</h4>

<ul>

<li>Pembakaran Q1 2026: 1,57 juta BNB (~$1,02 miliar) dihancurkan</li>

<li>BNB Chain menargetkan 20.000 TPS pada peta jalan tahun 2026</li>

Penambahan peta jalan Coinbase memicu arus institusional</li>

Pengajuan ETF Grayscale menandakan adopsi arus utama.

<li>Korelasi BTC: BTC di +2,55% memberikan dorongan positif</li>

Volume perdagangan meningkat tajam: +99% dibandingkan hari sebelumnya — pembeli kembali berbelanja.

</ul>

</div>

</div>

<div class="catalyst-card bear">

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

<div>

Faktor Risiko

<ul>

<li>Penyelidikan DOJ yang sedang berlangsung terhadap kepatuhan Binance</li>

Struktur LH/LL masih utuh — tren turun belum terputus.

<li>MACD masih bearish — momentum perlu konfirmasi</li>

Ketakutan & Keserakahan di Usia 29 — Sentimen Pasar Rapuh

<li>CHoCH (perubahan karakter) belum dikonfirmasi</li>

Penolakan di level $634 dapat memicu aksi jual baru.

</ul>

</div>

</div>

</div>

<!-- PUTUSAN -->

<div class="verdict">

<h2>⬡ BERHATI-HATI NAMUN TETAP OPTIMIS ⬡</h2>

<p>

Ledakan volume BNB dan pemulihan di atas EMA-20 mengindikasikan akumulasi setelah koreksi yang berkepanjangan. Struktur pasar mendukung upaya breakout menuju $665–$700 dalam beberapa sesi mendatang — JIKA harga ditutup dan bertahan di atas $634,63. Tokenomics deflasi (35 burn selesai), peningkatan skalabilitas BNB Chain, dan meningkatnya perhatian institusional menciptakan tesis jangka menengah yang menarik. Namun, manajemen risiko tetap penting: penutupan di bawah $615 akan menggeser bias kembali ke bearish.

</p>

<div class="target-row">

<div class="target-item">

<div class="t-label">Target Banteng 1</div>

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

</div>

<div class="target-item">

<div class="t-label">Target Banteng 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="penafian">

⚠️ ANALISIS INI HANYA UNTUK TUJUAN PENDIDIKAN DAN BUKAN MERUPAKAN NASIHAT KEUANGAN.<br>

PERDAGANGAN MATA UANG KRIPTO MELIBATKAN RISIKO YANG SIGNIFIKAN. SELALU LAKUKAN RISET SENDIRI DAN BERDAGANGLAH SECARA BERTANGGUNG JAWAB.

</div>

</div><!-- /kontainer -->

<script>

// ── BAGAN LILIN via Canvas ──

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

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

// Grafik candlestick harian BNB yang realistis: 18 April → 5 Mei 2026

// [label_tanggal, buka, tinggi, rendah, tutup, volume_rel]

konstanta lilin = [

['18 Apr', 652, 663, 645, 648, 0.45],

['19 Apr', 648, 655, 638, 641, 0.52],

['20 Apr', 641, 650, 632, 646, 0.48],

['21 Apr', 646, 658, 640, 636, 0.55],

['22 Apr', 636, 642, 628, 632, 0.60],

['23 Apr', 632, 638, 620, 624, 0.65],

['24 Apr', 624, 635, 617, 630, 0.70],

['25 Apr', 630, 640, 621, 619, 0.58],

['26 Apr', 619, 628, 612, 615, 0.72],

['27 Apr', 615, 622, 603, 609, 0.80],

['28 Apr', 609, 625, 605, 620, 0.75],

['29 Apr', 620, 632, 616, 628, 0.62],

['30 Apr', 628, 636, 619, 623, 0.55],

['1 Mei', 623, 634, 614, 618, 0.60],

['2 Mei', 618, 628, 613, 621, 0.58],

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

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

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

];

// Perhitungan EMA

fungsi calcEMA(data, periode) {

konstanta k = 2 / (periode + 1);

misalkan ema = [data[0]];

untuk (misalkan i = 1; i < panjang data; i++) {

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

}

balasan email;

}

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

const ema20 = calcEMA(menutup, 20);

const ema50 = calcEMA(closes, 10); // menggunakan 10 sebagai proksi untuk 50 yang diskalakan ke data kita

fungsi menggambar() {

const dpr = window.devicePixelRatio || 1;

const W = canvas.parentElement.clientWidth - 48;

konstanta H = 320;

kanvas.lebar = W * dpr;

kanvas.tinggi = H * dpr;

kanvas.gaya.lebar = W + 'px';

kanvas.gaya.tinggi = H + 'px';

ctx.scale(dpr, dpr);

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

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

konstanta chartW = W - PAD_L - PAD_R;

konstanta 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;

const priceRange = maxP - minP;

fungsi toY(harga) {

kembalikan PAD_T + chartH - ((harga - minP) / rentang harga) * chartH;

}

konstanta n = panjang lilin;

konstanta slotW = chartW / n;

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

fungsi toX(i) {

kembalikan PAD_L + (i + 0.5) * slotW;

}

// Garis kisi

const gridCount = 5;

untuk (misalkan i = 0; i <= gridCount; i++) {

konstanta harga = minP + (rentang harga / jumlah grid) * i;

konstanta y = toY(harga);

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 Space Mono, monospace`;

ctx.textAlign = 'right';

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

}

// Bilah volume

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

konstanta volH = chartH * 0.18;

lilin.forEach((c, i) => {

konstanta x = toX(i);

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

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

ctx.fillStyle = banteng

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

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

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

});

// Lilin

lilin.forEach((c, i) => {

konstanta [, buka, tinggi, rendah, tutup] = c;

konstanta x = toX(i);

konstanta bull = tutup >= buka;

konstanta warna = banteng ? '#0ECB81' : '#F6465D';

// Sumbu

ctx.strokeStyle = warna;

ctx.lineWidth = 1.5;

ctx.beginPath();

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

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

ctx.stroke();

// Tubuh

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

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

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

ctx.fillStyle = warna;

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

});

// IBU 20

ctx.strokeStyle = '#F0B90B';

ctx.lineWidth = 1.8;

ctx.setLineDash([]);

ctx.beginPath();

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

konstanta x = toX(i);

konstanta 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) => {

konstanta x = toX(i);

konstanta y = toY(val);

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

});

ctx.stroke();

ctx.setLineDash([]);

// Baris harga saat ini

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

konstanta 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, terakhirY);

ctx.stroke();

ctx.setLineDash([]);

// Label harga di sebelah kanan

ctx.fillStyle = '#F0B90B';

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

ctx.textAlign = 'left';

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

ctx.fillStyle = '#000';

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

// Label sumbu X

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

ctx.font = '9px Space Mono, monospace';

ctx.textAlign = 'center';

lilin.forEach((c, i) => {

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

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

}

});

// Garis sumbu

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();

}

menggambar();

window.addEventListener('resize', draw);

</script>

</body>

</html>