0.0.1 • Published 12 months ago
indicator-supply-demand-zones v0.0.1
indicator-supply-demand-zones
Supply/Demand zones indicator, based on the TradingView indicator by frozon
This is almost a direct JS port of the TradingView code, but with the added modification that the rectangles are extended to the right until they "hit the price" or, extends off to the right another 100 periods. By default we have also changed the 5-period buffer on the left, to zero.
Installation
npm i indicator-supply-demand-zones
Usage
Minimal test:
let candles = generateFakeCandles(1000); //[{high, low}, ... ]
// Settings for finding pivot highs and lows
let timePadding = 0;
let pivotHighSettings = { leftLen: 2, rightLen: 1 };
let pivotLowSettings = { leftLen: 2, rightLen: 1 };
// Use the function
let zones = require('indicator-supply-demand-zones').supplyAndDemand(candles, pivotHighSettings, pivotLowSettings, timePadding);
// Log the results
console.log("Demand Zones:", zones.demandZones);
console.log("Supply Zones:", zones.supplyZones);
// Demand Zones: [
// {
// left: 86, //units = candle index
// top: 0.7282760110660691, //units = price
// right: 101,
// bottom: -0.326668655917951
// },
// {
// left: 136,
// top: 0.04575073534033857,
// right: 151,
// bottom: -0.3950954198293477
// },
// ...
// ]
// Supply Zones: [
// {
// left: 14,
// top: 77.21751270416024,
// right: 29,
// bottom: 81.17430799649048
// },
// {
// left: 410,
// top: 1.792492492359312,
// right: 425,
// bottom: 2.7756838024305597
// }
// ]
Example with chart:
var {drawChartForCandles,saveChartForCandles} = require('ohlc-chart-simple');
var candles = require('jsonfile-compressed-brotli').readFileSync('./AAPL.json').slice(128);
//candles format [{open, high, low, close, volume}]
var sdData = require('indicator-supply-demand-zones').supplyAndDemand(candles);
var RECTS = []; //{minPrice,maxPrice,startIndex,endIndex,color,filled,thickness}
sdData.demandZones.map(function(dz){
RECTS.push({
minPrice: dz.bottom,
maxPrice: dz.top,
startIndex: dz.left,
endIndex: dz.right,
color: [0,255,0],
filled: false,
thickness:1
});
});
sdData.supplyZones.map(function(sz){
RECTS.push({
minPrice: sz.bottom,
maxPrice: sz.top,
startIndex: sz.left,
endIndex: sz.right,
color: [255,0,0],
filled: false,
thickness:1
});
});
var config = {
w: Math.floor(1024/2),
h: Math.floor(700/2),
profileBucketsTotal: 64,
profileBucketsWidth: 16,
volumeBarsHeight: 64,
bgColor: [255,255,255],
rects: RECTS,
kdePrices: candles.map(c=>[c.low, 1]), //[value, weight]
kdeBandwidthPercent: 1.00,
kdeIsGaussian: true, //false == kernel is triangular
kdeColor: [0,0,255],
skipDrawOhlcBars: false,
skipDrawIndicators: false,
skipDrawLegend: false,
expandLegendText: false,
expandTitle: false,
expandPrice: false,
skipDrawDate: true,
skipDrawPrice: false,
skipDrawPriceBars: false,
title: "AAPL",
filename: "./candlestick-chart.png",
}
saveChartForCandles(candles, config);
Result
0.0.1
12 months ago