将ALMA算法转换为javascript
我正在尝试创建一个交易工具,该工具连接到Binance API,并计算各种指标和相应的交易。我使用TradingView提供的ALMA和EMA指标。我的ALMA设置为(30,0.85,6),周期为1小时 在TradingView的文档中,我找到了ALMA计算的算法,如下所示:将ALMA算法转换为javascript,javascript,node.js,algorithmic-trading,pine-script,cryptocurrency,Javascript,Node.js,Algorithmic Trading,Pine Script,Cryptocurrency,我正在尝试创建一个交易工具,该工具连接到Binance API,并计算各种指标和相应的交易。我使用TradingView提供的ALMA和EMA指标。我的ALMA设置为(30,0.85,6),周期为1小时 在TradingView的文档中,我找到了ALMA计算的算法,如下所示: pine_alma(series, windowsize, offset, sigma) => m = floor(offset * (windowsize - 1)) s = windowsize
pine_alma(series, windowsize, offset, sigma) =>
m = floor(offset * (windowsize - 1))
s = windowsize / sigma
norm = 0.0
sum = 0.0
for i = 0 to windowsize - 1
weight = exp(-1 * pow(i - m, 2) / (2 * pow(s, 2)))
norm := norm + weight
sum := sum + series[windowsize - i - 1] * weight
sum / norm
function calculateALMA(series, windowsize, offset, sigma) {
let m = Math.floor(offset * (windowsize - 1));
let s = windowsize / sigma;
let weight = 0.0;
let norm = 0.0;
let sum = 0.0;
for (let i = 0; i < windowsize; i++) {
console.log(i);
weight = Math.exp(-1 * Math.pow(i - m, 2) / (2 * Math.pow(s, 2)));
norm = norm + weight;
sum = sum + (series[windowsize - i - 1].close * weight);
}
return (sum / norm);
}
我的工具是用javascript编写的,因此我将其翻译为:
pine_alma(series, windowsize, offset, sigma) =>
m = floor(offset * (windowsize - 1))
s = windowsize / sigma
norm = 0.0
sum = 0.0
for i = 0 to windowsize - 1
weight = exp(-1 * pow(i - m, 2) / (2 * pow(s, 2)))
norm := norm + weight
sum := sum + series[windowsize - i - 1] * weight
sum / norm
function calculateALMA(series, windowsize, offset, sigma) {
let m = Math.floor(offset * (windowsize - 1));
let s = windowsize / sigma;
let weight = 0.0;
let norm = 0.0;
let sum = 0.0;
for (let i = 0; i < windowsize; i++) {
console.log(i);
weight = Math.exp(-1 * Math.pow(i - m, 2) / (2 * Math.pow(s, 2)));
norm = norm + weight;
sum = sum + (series[windowsize - i - 1].close * weight);
}
return (sum / norm);
}
好的,我发现了问题。。。
我的翻译工作正常。问题是,我需要反转数组,以便将最新数据放在第一位
换句话说,调用函数时,反转系列
参数的数组:
CalculateAlama(series.reverse(),windowsize,offset,sigma)
介意提供一个“series”对象结构的完整示例吗?我用“series”的内容编辑了这个问题,我可以看到一个奇怪的差异-在原始版本中,您丢失了。靠近series[windowsize-I-1]但不知道它能做什么。xd,您是为整个对象提供30个项目,还是仅使用您提供的项目运行原始脚本,并查看是否会产生不同的值。若它太长,请使用另一个网站共享JSON,例如Tom,在原始脚本中,该系列只是一个闭合值数组。我的系列是一组烛台对象。因此,我的数组中需要.close:-)因为series.reverse()
也会变异series
数组,一种非破坏性的反转方法是写入[…series].reverse()