Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ALMA算法转换为javascript_Javascript_Node.js_Algorithmic Trading_Pine Script_Cryptocurrency - Fatal编程技术网

将ALMA算法转换为javascript

将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

我正在尝试创建一个交易工具,该工具连接到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 / 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()