ΠΠ° Π³Π»Π°Π²Π½ΡΡ > ΠΠ»ΠΎΠ³ > ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ > π ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Π³ΡΠ°ΡΠΈΠΊΠΈ Ρ Chart.js: ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ ΡΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ²
ΠΡ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Ρ ΠΎΡΠ΅Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π° ΡΠ²ΠΎΠΉ ΡΠ°ΠΉΡ ΠΈΠ»ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ, ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ Π³ΡΠ°ΡΠΈΠΊ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ? ΠΠ»ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠΊΡΠ΅ΡΡΠΈΠ½Π³Π°? ΠΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡ Π±Π°Π»Π°Π½ΡΠ° Π·Π° ΠΌΠ΅ΡΡΡ? Chart.js β ΡΡΠΎ ΠΌΠΎΡΠ½Π°Ρ, Π»ΡΠ³ΠΊΠ°Ρ ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² Π½Π° JavaScript. ΠΠ½Π° ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠ΅ΠΉΠ΄Π΅ΡΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ:
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π²ΡΡ: ΠΎΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ° (OHLC) ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π ΠΊΠΎΠ½ΡΠ΅ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠ΄Π΅ΡΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ΅Π½Ρ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 5 ΡΠ΅ΠΊΡΠ½Π΄.
Β«Chart.js β ΡΡΠΎ ΡΠ²Π΅ΠΉΡΠ°ΡΡΠΊΠΈΠΉ Π½ΠΎΠΆ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ΅ ΡΠ°ΠΌΡΠΉ Π½Π°Π²ΠΎΡΠΎΡΠ΅Π½Π½ΡΠΉ, Π½ΠΎ Π΄Π»Ρ 90% Π·Π°Π΄Π°Ρ ΡΡΠ΅ΠΉΠ΄Π΅ΡΠ° Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΒ».
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>.
npm install chart.js.
<!DOCTYPE html>
<html>
<head>
<title>ΠΡΠ°ΡΠΈΠΊ BTC/USD</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
</head>
<body>
<canvas id="btcChart" width="800" height="400"></canvas>
<script>
const ctx = document.getElementById('btcChart').getContext('2d');
new Chart(ctx, {
type: 'line',
data: {
labels: ['Π―Π½Π²', 'Π€Π΅Π²', 'ΠΠ°Ρ', 'ΠΠΏΡ', 'ΠΠ°ΠΉ', 'ΠΡΠ½'],
datasets: [{
label: 'BTC/USD',
data: [42000, 44000, 46000, 45000, 48000, 51000],
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
tension: 0.1
}]
},
options: {
responsive: true,
plugins: {
tooltip: {
callbacks: {
label: function(context) {
return `$${context.raw.toLocaleString()}`;
}
}
}
}
}
});
</script>
</body>
</html>
ΠΠ΄Π΅Π°Π»Π΅Π½ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π½Ρ Π·Π°ΠΊΡΡΡΠΈΡ, Π±Π°Π»Π°Π½ΡΠ° ΡΡΡΡΠ°, ΡΠΊΠΎΠ»ΡΠ·ΡΡΠΈΡ ΡΡΠ΅Π΄Π½ΠΈΡ .
datasets: [{
type: 'line',
label: 'SMA 20',
data: [44500, 45500, 46500, 47500, 48500],
borderColor: 'red',
borderWidth: 2,
fill: false
}]
Chart.js Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°, Π½ΠΎ Π΅ΡΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ chartjs-chart-financial. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
npm install chart.js chartjs-chart-financial
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² HTML:
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-chart-financial@0.2.0/dist/chartjs-chart-financial.min.js"></script>
ΠΠΎΠ΄ ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°:
new Chart(ctx, {
type: 'candlestick',
data: {
datasets: [{
label: 'BTC/USD',
data: [
{ t: '2025-06-01', o: 67000, h: 67500, l: 66800, c: 67200 },
{ t: '2025-06-02', o: 67200, h: 68000, l: 67000, c: 67800 },
{ t: '2025-06-03', o: 67800, h: 67900, l: 66500, c: 66600 }
]
}]
},
options: {
responsive: true,
plugins: {
tooltip: {
callbacks: {
label: function(context) {
const ohlc = context.raw;
return `O: ${ohlc.o} | H: ${ohlc.h} | L: ${ohlc.l} | C: ${ohlc.c}`;
}
}
}
}
}
});
type: 'bar',
data: {
labels: ['01.06', '02.06', '03.06'],
datasets: [{
label: 'ΠΠ±ΡΡΠΌ (BTC)',
data: [12500, 15800, 9800],
backgroundColor: 'rgba(54, 162, 235, 0.5)'
}]
}
chartjs-chart-financial ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠ΄Π΅ΡΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
Π‘Π°ΠΌΡΠΉ ΡΠ΅Π½Π½ΡΠΉ Π½Π°Π²ΡΠΊ β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Β«Π½Π° Π»Π΅ΡΡΒ» Ρ Π±ΠΈΡΠΆΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ WebSocket Binance ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ .
// ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ WebSocket Binance
const ws = new WebSocket('wss://stream.binance.com:9443/ws/btcusdt@trade');
const ctx = document.getElementById('liveChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'line',
data: {
labels: [],
datasets: [{
label: 'BTC/USDT',
data: [],
borderColor: 'green',
fill: false
}]
},
options: {
responsive: true,
animation: false // ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ
}
});
ws.onmessage = (event) => {
const trade = JSON.parse(event.data);
const price = parseFloat(trade.p);
const time = new Date(trade.T).toLocaleTimeString();
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ ΡΠΎΡΠΊΡ
chart.data.labels.push(time);
chart.data.datasets[0].data.push(price);
// ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠ΅ΠΊ (ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 50)
if (chart.data.labels.length > 50) {
chart.data.labels.shift();
chart.data.datasets[0].data.shift();
}
chart.update(); // ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ°
};
requestAnimationFrame ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΡΠΎΡΠ»ΠΈΠ½Π³Π°.
options: {
scales: {
x: {
title: { display: true, text: 'ΠΡΠ΅ΠΌΡ' },
grid: { color: 'rgba(0,0,0,0.05)' }
},
y: {
title: { display: true, text: 'Π¦Π΅Π½Π° (USD)' },
grid: { color: 'rgba(0,0,0,0.1)' },
ticks: {
callback: function(value) {
return '$' + value.toLocaleString();
}
}
}
}
}
datasets: [
{
label: 'Π¦Π΅Π½Π° Π·Π°ΠΊΡΡΡΠΈΡ',
data: priceData,
borderColor: 'blue',
borderWidth: 2,
fill: false
},
{
label: 'SMA 20',
data: smaData,
borderColor: 'red',
borderWidth: 1.5,
borderDash: [5, 5],
fill: false
}
]
{
label: 'Π¦Π΅Π½Π°',
data: priceData,
backgroundColor: 'rgba(0,255,0,0.1)',
fill: true
}
ΠΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²Π΅ΡΠΈ ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠ·ΡΡΡΡ ΡΡΠ΅Π΄Π½ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² datasets Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ:
datasets: [
{
type: 'candlestick',
label: 'BTC/USD',
data: ohlcData
},
{
type: 'line',
label: 'SMA 20',
data: smaData,
borderColor: 'orange',
borderWidth: 2,
fill: false
}
]
Chart.js Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π·ΡΠΌΠ°, Π½ΠΎ Π΅ΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ chartjs-plugin-zoom.
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-zoom@2.0.1/dist/chartjs-plugin-zoom.min.js"></script>
options: {
plugins: {
zoom: {
pan: { enabled: true, mode: 'xy' },
zoom: { wheel: { enabled: true }, mode: 'xy' }
}
}
}
const link = document.createElement('a');
link.download = 'chart.png';
link.href = chart.toBase64Image();
link.click();
Π‘ΠΎΠ±Π΅ΡΡΠΌ Π²ΡΡ Π²ΠΌΠ΅ΡΡΠ΅: Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ , ΡΠ²Π΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊ, ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ SMA 20 ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (ΠΈΠΌΠΈΡΠ°ΡΠΈΡ).
<!DOCTYPE html>
<html>
<head>
<title>Π’ΡΠ΅ΠΉΠ΄Π΅ΡΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-chart-financial@0.2.0/dist/chartjs-chart-financial.min.js"></script>
</head>
<body>
<canvas id="tradingWidget" width="1000" height="500"></canvas>
<script>
// ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ
OHLC Π΄Π°Π½Π½ΡΡ
(Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ β Ρ Π±ΠΈΡΠΆΠΈ)
function generateOHLC() {
const data = [];
let price = 67000;
for (let i = 0; i < 100; i++) {
const open = price;
const close = price + (Math.random() - 0.5) * 500;
const high = Math.max(open, close) + Math.random() * 200;
const low = Math.min(open, close) - Math.random() * 200;
data.push({ t: `2025-06-${Math.floor(i/3)+1}`, o: open, h: high, l: low, c: close });
price = close;
}
return data;
}
const ohlcData = generateOHLC();
// Π Π°ΡΡΡΡ SMA 20 (ΠΏΠΎ ΡΠ΅Π½Π°ΠΌ Π·Π°ΠΊΡΡΡΠΈΡ)
const closes = ohlcData.map(d => d.c);
const sma20 = [];
for (let i = 0; i < closes.length; i++) {
if (i < 19) {
sma20.push(null);
} else {
const sum = closes.slice(i-19, i+1).reduce((a,b) => a + b, 0);
sma20.push(sum / 20);
}
}
const ctx = document.getElementById('tradingWidget').getContext('2d');
new Chart(ctx, {
type: 'candlestick',
data: {
datasets: [
{
label: 'BTC/USD',
data: ohlcData,
borderColor: 'rgba(0,0,0,0.3)',
barPercentage: 0.8
},
{
type: 'line',
label: 'SMA 20',
data: sma20,
borderColor: 'orange',
borderWidth: 2,
fill: false,
pointRadius: 0
}
]
},
options: {
responsive: true,
plugins: {
tooltip: {
callbacks: {
label: (context) => {
if (context.dataset.label === 'BTC/USD') {
const o = context.raw;
return `O: ${o.o} | H: ${o.h} | L: ${o.l} | C: ${o.c}`;
}
return `SMA 20: ${context.raw}`;
}
}
}
},
scales: {
x: { title: { display: true, text: 'ΠΠ°ΡΠ°' } },
y: { title: { display: true, text: 'Π¦Π΅Π½Π° (USD)' } }
}
}
});
</script>
</body>
</html>
| ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° | ΠΠ»ΡΡΡ | ΠΠΈΠ½ΡΡΡ |
|---|---|---|
| Chart.js | ΠΡΠ³ΠΊΠ°Ρ, Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π°Ρ, ΠΏΡΠΎΡΡΠ°Ρ, Π°Π΄Π°ΠΏΡΠΈΠ²Π½Π°Ρ, ΡΠ²Π΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠ΅ΡΠ΅Π· ΠΏΠ»Π°Π³ΠΈΠ½ | ΠΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠ²Π΅ΡΠ΅ΠΉ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½Π°Ρ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΡ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² |
| TradingView Lightweight Charts | Π‘Π²Π΅ΡΡ Π±ΡΡΡΡΠ°Ρ, ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΠΉ Π³ΡΠ°ΡΠΈΠΊ, Π·ΡΠΌ, ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ | Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ |
| Highcharts | ΠΡΠ΅Π½Ρ ΠΌΠΎΡΠ½Π°Ρ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΏΠΎΠ² Π³ΡΠ°ΡΠΈΠΊΠΎΠ², ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° | ΠΠ»Π°ΡΠ½Π°Ρ (Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²) |
Chart.js β ΡΡΠΎ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅ΠΉΠ΄Π΅ΡΡΠΊΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΈ Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ². ΠΠ½ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ΅Π½ ΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ. ΠΠ°, Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Ρ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ ΡΠΎΡΠ΅ΠΊ Π΄Π°Π½Π½ΡΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TradingView Lightweight Charts. ΠΠΎ Π΄Π»Ρ 90% Π·Π°Π΄Π°Ρ β ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±Π°Π»Π°Π½ΡΠ°, Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΠΏΠΎΡΡΡΠ΅Π»Ρ, ΠΏΡΠΎΡΡΡΡ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ β Chart.js Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ΅Π½.
ΠΠ°ΡΠ½ΠΈΡΠ΅ Ρ ΠΌΠ°Π»ΠΎΠ³ΠΎ: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠ΅Π½Ρ. ΠΠΎΡΠΎΠΌ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ²Π΅ΡΠ½ΠΎΠΉ (ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½). ΠΠΎΡΠΎΠΌ β ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ SMA. Π ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠ΅Π· WebSocket. ΠΠ° ΠΎΠ΄ΠΈΠ½ Π²Π΅ΡΠ΅Ρ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΡΡΠ΅ΠΉΠ΄Π΅ΡΡΠΊΠΈΠΉ ΡΠ΅ΡΠΌΠΈΠ½Π°Π».
Π ΠΏΠΎΠΌΠ½ΠΈΡΠ΅: ΠΊΡΠ°ΡΠΈΠ²Π°Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ β ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΡΠΏΠ΅Ρ Π° ΡΡΠ΅ΠΉΠ΄Π΅ΡΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠ»ΠΈΠ΅Π½ΡΡ Π΄ΠΎΠ²Π΅ΡΡΡΡ ΡΠΎΠΌΡ, ΡΡΠΎ Π²ΠΈΠ΄ΡΡ. Π Ρ Chart.js Π²Π°ΡΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π° ΠΏΡΠΎΡΡΠΎΠΉ HTML-ΡΡΡΠ°Π½ΠΈΡΠ΅.
Β«Chart.js β ΡΡΠΎ ΠΊΠ°ΠΊ ΠΊΡΠ°ΡΠΊΠΈ. Π₯ΠΎΠ»ΡΡ Π΅ΡΡΡ, ΠΊΠΈΡΡΠΈ Π΅ΡΡΡ. Π ΡΡΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ β ΡΠ΅ΡΠ°Π΅Ρ Ρ ΡΠ΄ΠΎΠΆΠ½ΠΈΠΊ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ β ΡΡΠ΅ΠΉΠ΄Π΅Ρ-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΒ».
ΠΠ°ΡΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ: 03-06-2026 Π² 07:47:28