hts with only two SMAs
This commit is contained in:
60
static/hts.js
Normal file
60
static/hts.js
Normal file
@ -0,0 +1,60 @@
|
||||
/**
|
||||
* HTS (High-Tech SMAs) - Combined Fast and Slow SMA Indicator
|
||||
* This indicator displays both Fast SMA and Slow SMA on the same chart
|
||||
*/
|
||||
const HTS_INDICATOR = {
|
||||
name: 'HTS',
|
||||
label: 'HTS (Fast & Slow SMA)',
|
||||
usesBaseData: false, // This indicator uses the chart's currently displayed data
|
||||
params: [
|
||||
{ name: 'fastPeriod', type: 'number', defaultValue: 33, min: 2, label: 'Fast SMA Period' },
|
||||
{ name: 'slowPeriod', type: 'number', defaultValue: 133, min: 2, label: 'Slow SMA Period' },
|
||||
],
|
||||
calculateFull: calculateFullHTS,
|
||||
};
|
||||
|
||||
function calculateFullHTS(data, params) {
|
||||
const fastPeriod = params.fastPeriod;
|
||||
const slowPeriod = params.slowPeriod;
|
||||
|
||||
if (!data || data.length < Math.max(fastPeriod, slowPeriod)) {
|
||||
return {
|
||||
fastSMA: [],
|
||||
slowSMA: []
|
||||
};
|
||||
}
|
||||
|
||||
// Calculate Fast SMA
|
||||
const fastSMA = calculateSMA(data, fastPeriod);
|
||||
|
||||
// Calculate Slow SMA
|
||||
const slowSMA = calculateSMA(data, slowPeriod);
|
||||
|
||||
return {
|
||||
fastSMA: fastSMA,
|
||||
slowSMA: slowSMA
|
||||
};
|
||||
}
|
||||
|
||||
function calculateSMA(data, period) {
|
||||
if (!data || data.length < period) return [];
|
||||
|
||||
let smaData = [];
|
||||
let sum = 0;
|
||||
|
||||
// Calculate initial sum for the first period
|
||||
for (let i = 0; i < period; i++) {
|
||||
sum += data[i].close;
|
||||
}
|
||||
|
||||
// Add the first SMA point
|
||||
smaData.push({ time: data[period - 1].time, value: sum / period });
|
||||
|
||||
// Calculate remaining SMA points using sliding window
|
||||
for (let i = period; i < data.length; i++) {
|
||||
sum = sum - data[i - period].close + data[i].close;
|
||||
smaData.push({ time: data[i].time, value: sum / period });
|
||||
}
|
||||
|
||||
return smaData;
|
||||
}
|
||||
Reference in New Issue
Block a user