UNPKG

@neabyte/chart-to-image

Version:

Convert trading charts to images using Node.js canvas with advanced features: 6 chart types, VWAP/EMA/SMA indicators, custom colors, themes, hide elements, scaling, and PNG/JPEG export formats.

438 lines (344 loc) โ€ข 12.5 kB
# ๐Ÿ“Š Chart To Image [![NPM Version](https://img.shields.io/npm/v/@neabyte/chart-to-image.svg)](https://www.npmjs.com/package/@neabyte/chart-to-image) [![NPM Downloads](https://img.shields.io/npm/dm/@neabyte/chart-to-image.svg)](https://www.npmjs.com/package/@neabyte/chart-to-image) [![License](https://img.shields.io/npm/l/@neabyte/chart-to-image.svg)](https://github.com/NeaByteLab/Chart-To-Image/blob/main/LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-5.8.3-blue.svg)](https://www.typescriptlang.org/) [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18.0.0-green.svg)](https://nodejs.org/) Convert trading charts to images using [Node.js Canvas](https://github.com/Automattic/node-canvas), [lightweight-charts](https://github.com/tradingview/lightweight-charts), and [CCXT](https://github.com/ccxt/ccxt). A powerful Node.js library for generating high-quality trading chart images from market data. ![Chart-To-Image Demo](assets/images/showcase.png) ## ๐Ÿ“Š Chart Types Demo | Candlestick | Line | Area | |-------------|------|------| | ![Candlestick](assets/images/demo-candlestick.png) | ![Line](assets/images/demo-line.png) | ![Area](assets/images/demo-area.png) | | Heikin-Ashi | Renko | |-------------|-------| | ![Heikin-Ashi](assets/images/demo-heikin.png) | ![Renko](assets/images/demo-renko.png) | ### ๐Ÿ”„ Comparison Charts ![Symbol Comparison](assets/images/demo-comparison-1.png) ![Timeframe Comparison](assets/images/demo-comparison-2.png) --- ## Features - ๐Ÿ“Š **Real Market Data**: Fetch live data from multiple exchanges via [CCXT](https://github.com/ccxt/ccxt) - ๐ŸŽจ **High-Quality Charts**: Generate professional charts using [lightweight-charts](https://github.com/tradingview/lightweight-charts) - ๐Ÿ–ผ๏ธ **Multiple Formats**: Export to PNG and JPEG formats using [Node.js Canvas](https://github.com/Automattic/node-canvas) - โšก **Fast & Lightweight**: Optimized for performance and minimal dependencies - ๐Ÿ”ง **Flexible API**: Both programmatic API and CLI interface - ๐Ÿ“ฆ **Easy Integration**: Simple npm install and import - ๐ŸŽจ **Custom Bar Colors**: Customize bullish/bearish candle colors - ๐Ÿ“ˆ **Horizontal Levels**: Add support/resistance levels with labels - ๐ŸŒˆ **Advanced Chart Types**: Candlestick, Line, Area, Heikin-Ashi, Renko, Line Break - ๐ŸŽฏ **Custom Themes**: Light/Dark themes with custom colors - ๐Ÿ‘๏ธ **Hide Elements**: Hide title, time axis, and grid - ๐ŸŽจ **Color Customization**: Hex, RGB, named colors, and gradients - ๐Ÿ“ **Scaling Options**: Auto-scaling and manual scale factors - ๐Ÿ”„ **Multiple Exchanges**: Binance, Kraken, Coinbase, and more - ๐Ÿ”„ **Chart Comparison**: Side-by-side and grid layouts for multiple symbols - โฐ **Timeframe Comparison**: Same symbol across different timeframes - ๐ŸŽจ **Comparison Customization**: Custom colors and themes for comparisons - ๐Ÿ“Š **Technical Indicators**: VWAP, EMA, SMA, and Bollinger Bands with custom colors ## ๐Ÿ› ๏ธ Technologies Used - **[Node.js Canvas](https://github.com/Automattic/node-canvas)**: High-performance 2D graphics rendering - **[lightweight-charts](https://github.com/tradingview/lightweight-charts)**: Professional trading chart library - **[CCXT](https://github.com/ccxt/ccxt)**: Unified cryptocurrency exchange API - **TypeScript**: Type-safe development - **ESLint**: Code quality and consistency --- ## ๐Ÿ“ฆ Installation ```bash npm install @neabyte/chart-to-image ``` ## ๐Ÿš€ Quick Start ### ๐Ÿ’ป CLI Usage ```bash # Basic chart generation npx @neabyte/chart-to-image --symbol BTC/USDT --output chart.png # Custom timeframe and dimensions npx @neabyte/chart-to-image -s ETH/USDT -t 4h -o eth-chart.png -w 1200 -h 800 # With custom theme and colors npx @neabyte/chart-to-image -s BTC/USDT -o chart.png --theme dark --background-color "#1a1a2e" --text-color "#00d4ff" # Advanced chart types npx @neabyte/chart-to-image -s ETH/USDT -o heikin-ashi.png --chart-type heikin-ashi npx @neabyte/chart-to-image -s BTC/USDT -o renko.png --chart-type renko npx @neabyte/chart-to-image -s BTC/USDT -o line-break.png --chart-type line-break # Technical indicators npx @neabyte/chart-to-image -s BTC/USDT -o vwap-chart.png --vwap npx @neabyte/chart-to-image -s ETH/USDT -o ema-chart.png --ema npx @neabyte/chart-to-image -s BTC/USDT -o sma-chart.png --sma npx @neabyte/chart-to-image -s BTC/USDT -o indicators.png --vwap --ema --sma # Bollinger Bands with custom colors npx @neabyte/chart-to-image -s BTC/USDT -o bb-chart.png --bb npx @neabyte/chart-to-image -s ETH/USDT -o bb-custom.png --bb --bb-upper-color "#ff6b9d" --bb-middle-color "#4ecdc4" --bb-lower-color "#ff6b9d" --bb-background-color "#ff6b9d" --bb-background-opacity 0.2 npx @neabyte/chart-to-image -s BTC/USDT -o bb-line.png --bb --chart-type line --bb-upper-color "#9b59b6" --bb-middle-color "#f39c12" --bb-lower-color "#9b59b6" --bb-background-color "#9b59b6" --bb-background-opacity 0.25 # All indicators together npx @neabyte/chart-to-image -s BTC/USDT -o all-indicators.png --vwap --ema --sma --bb # Chart comparison (side-by-side) npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --output comparison.png # Timeframe comparison (same symbol, different timeframes) npx @neabyte/chart-to-image --compare "BTC/USDT,BTC/USDT" --timeframes "1h,4h" --output timeframe-comparison.png # Grid comparison with custom colors npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --layout grid --custom-colors "bullish=#00ff88,bearish=#ff4444" --output grid-comparison.png # Comparison with indicators npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --vwap --ema --output comparison-indicators.png # Comparison with Bollinger Bands npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --bb --output comparison-bb.png npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --bb --bb-upper-color "#ff6b9d" --bb-middle-color "#4ecdc4" --bb-lower-color "#ff6b9d" --bb-background-color "#ff6b9d" --bb-background-opacity 0.2 --output comparison-bb-custom.png # Hide elements for clean charts npx @neabyte/chart-to-image -s ADA/USDT -o clean.png --hide-title --hide-time-axis --hide-grid ``` --- ### ๐Ÿ”ง Programmatic API ```typescript import { quickChart, generateChartImage, fetchMarketData, ComparisonService } from '@neabyte/chart-to-image' // Quick chart generation const result = await quickChart('BTC/USDT', 'chart.png', { timeframe: '1h', width: 1200, height: 800, theme: 'dark' }) // Advanced configuration const config = { symbol: 'ETH/USDT', timeframe: '4h', exchange: 'binance', outputPath: 'eth-chart.png', width: 1000, height: 600, theme: 'light', chartType: 'heikin-ashi', backgroundColor: '#1a1a2e', textColor: '#00d4ff', customBarColors: { bullish: '#00ff88', bearish: '#ff4444', wick: '#ffffff', border: '#333333' }, showTitle: false, showTimeAxis: false, showGrid: false } const result = await generateChartImage(config) // Chart comparison const comparisonResult = await ComparisonService.sideBySide( ['BTC/USDT', 'ETH/USDT'], 'comparison.png' ) // Timeframe comparison const timeframeResult = await ComparisonService.timeframeComparison( 'BTC/USDT', ['1h', '4h', '1d'], 'timeframe-comparison.png' ) // Grid comparison with custom colors const gridResult = await ComparisonService.grid( ['BTC/USDT', 'ETH/USDT'], 2, 'grid-comparison.png', { customBarColors: { bullish: '#00ff88', bearish: '#ff4444' } } ) // Chart with technical indicators const indicatorResult = await generateChartImage({ symbol: 'BTC/USDT', timeframe: '1h', outputPath: 'indicators.png', showVWAP: true, showEMA: true, emaPeriod: 20, showSMA: true, smaPeriod: 20 }) // Chart with Bollinger Bands const bbResult = await generateChartImage({ symbol: 'BTC/USDT', timeframe: '1h', outputPath: 'bb-chart.png', showBollingerBands: true, bbPeriod: 20, bbStandardDeviations: 2, bbColors: { upper: '#ff6b9d', middle: '#4ecdc4', lower: '#ff6b9d', background: '#ff6b9d', backgroundOpacity: 0.2 } }) // All indicators together const allIndicatorsResult = await generateChartImage({ symbol: 'BTC/USDT', timeframe: '1h', outputPath: 'all-indicators.png', showVWAP: true, showEMA: true, emaPeriod: 20, showSMA: true, smaPeriod: 20, showBollingerBands: true, bbPeriod: 20, bbStandardDeviations: 2, bbColors: { upper: '#ff6b9d', middle: '#4ecdc4', lower: '#ff6b9d', background: '#ff6b9d', backgroundOpacity: 0.2 } }) // Comparison with indicators const comparisonWithIndicators = await ComparisonService.sideBySide( ['BTC/USDT', 'ETH/USDT'], 'comparison-indicators.png', { showVWAP: true, showEMA: true, emaPeriod: 20, showSMA: true, smaPeriod: 20 } ) // Comparison with Bollinger Bands const comparisonWithBB = await ComparisonService.sideBySide( ['BTC/USDT', 'ETH/USDT'], 'comparison-bb.png', { showBollingerBands: true, bbPeriod: 20, bbStandardDeviations: 2, bbColors: { upper: '#ff6b9d', middle: '#4ecdc4', lower: '#ff6b9d', background: '#ff6b9d', backgroundOpacity: 0.2 } } ) ``` ## โšก Advanced Features ### ๐Ÿ“Š Chart Types - **Candlestick**: Traditional OHLC candles - **Line**: Simple line chart - **Area**: Filled area chart - **Heikin-Ashi**: Trend-smoothed candles - **Renko**: Price-based block chart - **Line Break**: Break high/low trend patterns ### ๐Ÿ“ˆ Technical Indicators - **VWAP**: Volume Weighted Average Price (institutional standard) - **EMA**: Exponential Moving Average (configurable periods) - **SMA**: Simple Moving Average (configurable periods) - **Combined Analysis**: Use all indicators together for comprehensive analysis ### ๐ŸŽจ Custom Colors ```bash # Hex colors --background-color "#1a1a2e" --text-color "#00d4ff" # RGB colors --background-color "rgb(25, 25, 112)" --text-color "rgb(255, 215, 0)" # Named colors --background-color "midnightblue" --text-color "gold" # Gradients --background-color "linear-gradient(135deg, #667eea 0%, #764ba2 100%)" ``` ### ๐Ÿ‘๏ธ Hide Elements ```bash # Hide title --hide-title # Hide time axis --hide-time-axis # Hide grid --hide-grid # Hide all elements --hide-title --hide-time-axis --hide-grid ``` ### ๐Ÿ“ Scaling Options ```bash # Auto-scaling --auto-scale # Manual scaling --scale-x 1.2 --scale-y 1.1 # Price limits --min-scale 45000 --max-scale 50000 ``` --- ## ๐Ÿข Supported Exchanges - Binance - Coinbase - Kraken - KuCoin - OKX ## โฐ Supported Timeframes - 1m (1 minute) - 5m (5 minutes) - 15m (15 minutes) - 30m (30 minutes) - 1h (1 hour) - 4h (4 hours) - 1d (1 day) - 1w (1 week) ## ๐Ÿ–ผ๏ธ Output Formats - **PNG**: High-quality raster format - **JPEG**: Compressed raster format ## ๐Ÿ“– Full Documentation For complete usage guide with detailed examples, see **[USAGE.md](USAGE.md)** ๐Ÿ“š --- ## ๐Ÿ› ๏ธ Development ### ๐Ÿ“ฆ Installation ```bash git clone https://github.com/NeaByteLab/Chart-To-Image.git cd Chart-To-Image npm install ``` ### ๐Ÿ”จ Build ```bash npm run build ``` ### ๐Ÿš€ Development Mode ```bash npm run dev ``` ### ๐Ÿงช Testing ```bash npm test ``` ### ๐Ÿ” Linting ```bash npm run lint npm run lint:fix ``` --- ## ๐Ÿ“ Project Structure ``` src/ โ”œโ”€โ”€ core/ โ”‚ โ”œโ”€โ”€ config.ts # Chart configuration โ”‚ โ””โ”€โ”€ renderer.ts # Chart rendering engine โ”œโ”€โ”€ renderer/ โ”‚ โ”œโ”€โ”€ charts.ts # Chart type renderers โ”‚ โ”œโ”€โ”€ elements.ts # Chart elements (axes, grid, etc.) โ”‚ โ”œโ”€โ”€ index.ts # Main renderer orchestrator โ”‚ โ”œโ”€โ”€ types.ts # Renderer types โ”‚ โ””โ”€โ”€ utils.ts # Renderer utilities โ”œโ”€โ”€ types/ โ”‚ โ””โ”€โ”€ types.ts # TypeScript type definitions โ”œโ”€โ”€ utils/ โ”‚ โ”œโ”€โ”€ cli.ts # CLI argument parsing โ”‚ โ”œโ”€โ”€ exporter.ts # Image export utilities โ”‚ โ”œโ”€โ”€ provider.ts # Market data fetching โ”‚ โ””โ”€โ”€ utils.ts # Chart data utilities โ”œโ”€โ”€ index.ts # Main API exports โ””โ”€โ”€ cli.ts # Command line interface ``` ## ๐Ÿค Contributing 1. ๐Ÿด Fork the repository 2. ๐ŸŒฟ Create a feature branch 3. โœ๏ธ Make your changes 4. ๐Ÿงช Add tests if applicable 5. ๐Ÿ“ค Submit a pull request --- ## ๐Ÿ“„ License MIT License - see [LICENSE](LICENSE) file for details.