You are on page 1of 4

const ccxt = require('ccxt');

const moment = require('moment/moment');


const tradingPair = 'BTC/USDT';
const timeframe = '4h'; // Biến độc lập cho timeframe

const binance = new ccxt.binance({


apiKey:
'a65yXN5DMWax7AQJzkf0sOLbzuxL5OMkY2vk0z6KyI2aYBENZKH8SMdlhMQsgd5E',
secret:
'z1lfO6GMR6wIiwGrDnxHWpJYiu0WeupEQreqY6qGdjJf1Q4DPGNsC2e0eiNZDKD6',
});
binance.setSandboxMode(true);

async function printBalance() {


const balance = await binance.fetchBalance();
const sortedBalance = {};

const tradingPairAssets = tradingPair.split('/');

// Hàm sinh màu ngẫu nhiên


function getRandomColor() {
const r = Math.floor(Math.random() * 255);
const g = Math.floor(Math.random() * 255);
const b = Math.floor(Math.random() * 255);
return `38;2;${r};${g};${b}`; // 38;2;r;g;b là mã màu RGB
}

// Tìm độ dài lớn nhất của asset


let maxAssetLength = 0;
for (const asset of tradingPairAssets) {
if (asset.length > maxAssetLength) {
maxAssetLength = asset.length;
}
}

// Tìm độ dài lớn nhất của các giá trị để căn chỉnh
let maxLength = {
free: 0,
used: 0,
total: 0
};

for (const asset of tradingPairAssets) {


if (balance.hasOwnProperty(asset)) {
const total = balance[asset]['total'].toString();
const free = balance[asset]['free'].toString();
const used = (total - free).toString();

maxLength.free = Math.max(maxLength.free, free.length);


maxLength.used = Math.max(maxLength.used, used.length);
maxLength.total = Math.max(maxLength.total, total.length);
}
}

// Lặp qua các đồng tiền trong cặp giao dịch


for (const asset of tradingPairAssets) {
if (balance.hasOwnProperty(asset)) {
const total = balance[asset]['total'].toString();
const free = balance[asset]['free'].toString();
const used = (total - free).toString();

// Sinh màu ngẫu nhiên cho tên đồng tiền


const randomColor = getRandomColor();

// Tô màu và in ra thông tin, căn chỉnh độ dài


console.log(`\x1b[${randomColor}m${asset.padEnd(maxAssetLength,
' ')}\x1b[0m: Free: \x1b[33m${free.padStart(maxLength.free, ' ')}\
x1b[0m, Used: \x1b[33m${used.padStart(maxLength.used, ' ')}\x1b[0m,
Total: \x1b[33m${total.padStart(maxLength.total, ' ')}\x1b[0m`);
}
}
}

async function main1() {


const ohlcv = await binance.fetchOHLCV(tradingPair, timeframe,
undefined, 6); // Sử dụng biến timeframe ở đây
const currentPrice = ohlcv[ohlcv.length - 1][4];
console.log(`Giá thị trường: \x1b[35m${currentPrice}\x1b[0m`);
// Xác định độ dài tối đa của giá trị close
const maxCloseLength = Math.max(...ohlcv.map(candle =>
String(candle[4]).length));

for (let i = 0; i < ohlcv.length - 1; i++) {


const close = ohlcv[i][4]; // Lấy giá đóng cửa từ cuối mảng trở
về đầu mảng
const low = ohlcv[i][3]; // Lấy giá low của từng nến
const timestamp = ohlcv[i][0]; // Lấy mốc thời gian của từng nến
const time = moment(timestamp).format('HH:mm DD/MM/YYYY'); //
Định dạng lại mốc thời gian

// Định dạng màu vàng cho giá close và màu xanh cho thời gian
console.log(`Nến (-${i+1}): \x1b[0mTime: \x1b[34m${time}\
x1b[0m ; Giá đóng cửa: \x1b[33m${close}\x1b[0m${'
'.repeat(maxCloseLength - String(close).length + 1)}; Giá low: \
x1b[32m${low}\x1b[0m`);
}
}

async function printBollingerBands() {


try {
// Lấy dữ liệu OHLCV từ sàn giao dịch
const ohlcv = await binance.fetchOHLCV(tradingPair, timeframe,
undefined, 26); // Lấy 26 nến để tính toán cho 5 nến gần nhất
const closes = ohlcv.map(candle => candle[4]);

// Tính toán Middle Band, Upper Band và Lower Band cho 26 nến
const period = 20;
const multiplier = 2;
const middleBands = [];
const upperBands = [];
const lowerBands = [];

for (let i = period - 1; i < closes.length; i++) {


const closeSlice = closes.slice(i - period + 1, i + 1);
const middleBand = closeSlice.reduce((a, b) => a + b, 0) /
period;
const stdDev = Math.sqrt(closeSlice.reduce((a, b) => a +
Math.pow(b - middleBand, 2), 0) / period);
const upperBand = middleBand + multiplier * stdDev;
const lowerBand = middleBand - multiplier * stdDev;
middleBands.push(middleBand);
upperBands.push(upperBand);
lowerBands.push(lowerBand);
}

// Lấy chỉ số của 5 nến gần nhất


const recentCandles = ohlcv.slice(-5);

// Xuất ra các giá trị middle, upper, lower của 5 nến gần nhất
theo thứ tự nến -1 trước
for (let i = recentCandles.length - 1; i >= 0; i--) {
console.log(`Nến (-${5 - i}): Middle Band: $
{middleBands[middleBands.length - 1 - i]}, Upper Band: $
{upperBands[upperBands.length - 1 - i]}, Lower Band: $
{lowerBands[lowerBands.length - 1 - i]}`);
}
} catch (error) {
console.error("Đã xảy ra lỗi:", error);
}
}

printBalance(); // in số dư ví hiện tại


main1(); //lấy các thông tin của thị trường
printBollingerBands(); //tính toán các giá trị của bolligerband

You might also like