【发布时间】:2019-07-30 12:47:35
【问题描述】:
我正在尝试创建一个连接到 Binance API 并相应地计算各种指标和交易的交易工具。我正在使用 TradingView 提供的 ALMA 和 EMA 指标。我的 ALMA 的设置是 (30, 0.85, 6),周期为 1h。
在 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
我的工具是用javascript编写的,所以我把它翻译成以下内容:
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);
}
'series' 是一个数组,其中包含 1 小时内的 30 个最新烛台。 我的问题是计算的值与 ALMA 的交易视图图中显示的值不完全相同。 例如,我计算的 BTCUSDT 的 ALMA 是 9534.99,而图表上的 ALMA 是 9486.99。 图表和我从币安收到的数据中的接近值是相同的,所以我怀疑我从 pine-script 到 javascript 的翻译有错误。
任何想法我哪里出错了?
编辑:“系列”的内容是这样的(有 30 个项目)
[ { openTime: 1564387200000,
open: 9624.79,
high: 9650,
low: 9525.01,
close: 9573.26,
volume: 1155.847601,
closeTime: 1564390799999 },
{ openTime: 1564390800000,
open: 9573.64,
high: 9584.98,
low: 9395,
close: 9494.08,
volume: 2105.111588,
closeTime: 1564394399999 },
{ openTime: 1564394400000,
open: 9495.51,
high: 9544,
low: 9456.14,
close: 9511.69,
volume: 1056.144078,
closeTime: 1564397999999 },
...
]
【问题讨论】:
-
介意提供“系列”对象结构的完整示例吗?
-
我用“系列”的内容编辑了问题
-
我可以看到 1 个奇怪的差异 - 在原始版本中,您在 series[windowsize - i - 1] 旁边缺少 .close 但不知道它可以做什么。
-
xd,您是为整个对象提供 30 个项目,还是仅使用您提供的项目运行原始脚本,看看它是否会产生不同的值。如果太长,请使用其他网站共享 JSON,例如 justpaste.it
-
Tom,在原始脚本中,系列只是关闭值的数组。我的系列是一系列烛台对象。因此我的数组中需要 .close :-)
标签: javascript node.js algorithmic-trading pine-script cryptocurrency