candlestick-chart-generator
Version:
A Node.js library for generating candlestick chart screenshots using financial data
212 lines (196 loc) • 8.27 kB
JavaScript
const CandlestickChartGenerator = require('../index');
/**
* Advanced usage examples demonstrating various features
*/
async function advancedExamples() {
const generator = new CandlestickChartGenerator({ headless: true });
try {
console.log('=== Advanced Candlestick Chart Generator Examples ===\n');
// Example 1: Multiple timeframes for the same symbol
console.log('1. Generating multiple timeframes for AAPL...');
const intervals = ['1d', '1wk', '1mo'];
for (const interval of intervals) {
await generator.generateChartScreenshot({
symbol: 'AAPL',
interval: interval,
startDate: '2023-01-01',
endDate: '2023-12-31',
outputPath: `examples/aapl_${interval}_chart.png`,
width: 1200,
height: 600
});
console.log(`✅ AAPL ${interval} chart saved`);
}
// Example 2: Crypto portfolio charts
console.log('\n2. Generating crypto portfolio charts...');
const cryptos = ['BTC-USD', 'ETH-USD', 'ADA-USD'];
for (const crypto of cryptos) {
await generator.generateChartScreenshot({
symbol: crypto,
interval: '1d',
startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // 30 days
endDate: new Date(),
outputPath: `examples/${crypto.replace('-', '_').toLowerCase()}_30d.png`,
width: 1000,
height: 500,
chartOptions: {
layout: {
background: { color: '#0a0e27' },
textColor: '#ffffff'
},
grid: {
vertLines: { color: '#1e2761' },
horzLines: { color: '#1e2761' }
}
}
});
console.log(`✅ ${crypto} chart saved`);
}
// Example 3: FOREX major pairs
console.log('\n3. Generating FOREX major pairs...');
const forexPairs = ['EURUSD=X', 'GBPUSD=X', 'USDJPY=X', 'AUDUSD=X'];
for (const pair of forexPairs) {
await generator.generateChartScreenshot({
symbol: pair,
interval: '1h',
startDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // 7 days
endDate: new Date(),
outputPath: `examples/${pair.replace('=X', '').toLowerCase()}_7d.png`,
width: 1200,
height: 600,
chartOptions: {
layout: {
background: { color: '#ffffff' },
textColor: '#000000'
},
grid: {
vertLines: { color: '#f0f0f0' },
horzLines: { color: '#f0f0f0' }
}
}
});
console.log(`✅ ${pair} chart saved`);
}
// Example 4: High-resolution charts for printing
console.log('\n4. Generating high-resolution chart for printing...');
await generator.generateChartScreenshot({
symbol: 'SPY',
interval: '1d',
startDate: '2023-01-01',
endDate: '2023-12-31',
outputPath: 'examples/spy_high_res.png',
width: 2400, // High resolution
height: 1600,
chartOptions: {
layout: {
background: { color: '#ffffff' },
textColor: '#000000'
}
}
});
console.log('✅ High-resolution SPY chart saved');
// Example 5: Intraday trading charts
console.log('\n5. Generating intraday trading charts...');
const tradingSymbols = ['TSLA', 'NVDA', 'AMD'];
for (const symbol of tradingSymbols) {
const params = {
symbol: symbol,
interval: '5m',
startDate: new Date(Date.now() - 24 * 60 * 60 * 1000), // Last 24 hours
endDate: new Date(),
outputPath: `examples/${symbol.toLowerCase()}_5m_intraday.png`,
width: 1400,
height: 800,
chartOptions: {
layout: {
background: { color: '#131722' },
textColor: '#d1d4dc'
}
}
};
await generator.generateChartScreenshot(params);
console.log(`✅ ${symbol} 5-minute intraday chart saved`);
}
// Add a dedicated NVDA 1h example showing desiredBars (~35 calendar days ≈ 160 stock bars)
console.log('\n5b. Generating NVDA 1-hour with desired bar count...');
await generator.generateChartScreenshot({
symbol: 'NVDA',
interval: '1h',
// no startDate provided; compute from desiredBars for a consistent look
endDate: new Date(),
desiredBars: 160, // ≈ ~35 calendar days for stocks
outputPath: 'examples/nvda_1h_chart.png',
width: 1400,
height: 800,
chartOptions: {
layout: { background: { color: '#131722' }, textColor: '#d1d4dc' }
}
});
console.log('✅ NVDA 1-hour chart with desiredBars saved');
// Example 6: Custom styled chart with specific colors
console.log('\n6. Generating custom styled chart...');
await generator.generateChartScreenshot({
symbol: 'AMZN',
interval: '1d',
startDate: '2023-01-01',
endDate: '2023-12-31',
outputPath: 'examples/amzn_custom_style.png',
width: 1200,
height: 600,
chartOptions: {
layout: {
background: { color: '#2c2c54' },
textColor: '#ffffff'
},
grid: {
vertLines: { color: '#40407a' },
horzLines: { color: '#40407a' }
},
timeScale: {
borderColor: '#706fd3'
},
rightPriceScale: {
borderColor: '#706fd3'
}
}
});
console.log('✅ Custom styled AMZN chart saved');
// Example 7: Generate charts as base64 for web applications
console.log('\n7. Generating charts as base64 data...');
const symbols = ['GOOGL', 'META', 'NFLX'];
const base64Results = [];
for (const symbol of symbols) {
const base64Data = await generator.generateChartBase64({
symbol: symbol,
interval: '1d',
startDate: '2023-06-01',
endDate: '2023-12-31',
width: 800,
height: 400
});
base64Results.push({ symbol, dataLength: base64Data.length });
console.log(`✅ ${symbol} base64 chart generated (${base64Data.length} chars)`);
}
console.log('\n📊 Base64 Results Summary:');
base64Results.forEach(result => {
console.log(` ${result.symbol}: ${result.dataLength} characters`);
});
console.log('\n🎉 All advanced examples completed successfully!');
console.log('\n📁 Generated files:');
console.log(' - Multiple timeframe charts for AAPL');
console.log(' - Crypto portfolio charts (BTC, ETH, ADA)');
console.log(' - FOREX major pairs charts');
console.log(' - High-resolution SPY chart');
console.log(' - Intraday trading charts (TSLA, NVDA, AMD)');
console.log(' - NVDA 1h chart with desiredBars');
console.log(' - Custom styled AMZN chart');
console.log(' - Base64 data for GOOGL, META, NFLX');
} catch (error) {
console.error('❌ Error in advanced examples:', error.message);
} finally {
// Always close the browser to free resources
await generator.close();
}
}
// Run the advanced examples
advancedExamples();