問題:如何計算移動平均線並將其繪製在JS/HTML5圖表上?移動平均線HTML5/JS圖表
我能找到的最接近的例子是this website。看看它的JS文件,我無法確定繪圖圖表庫。經仔細檢查,似乎移動平均值不是在服務器端而是在客戶端計算的。
任何建議表示讚賞!
問題:如何計算移動平均線並將其繪製在JS/HTML5圖表上?移動平均線HTML5/JS圖表
我能找到的最接近的例子是this website。看看它的JS文件,我無法確定繪圖圖表庫。經仔細檢查,似乎移動平均值不是在服務器端而是在客戶端計算的。
任何建議表示讚賞!
這裏有一個quick example,其計算3點移動平均客戶端,並與Highcharts繪製它:
var N = 100;
var someData = [];
for (var i = 0; i < N; i++)
{
someData.push([i,Math.random() * 100]);
}
var moveMean = [];
for (var i = 1; i < N-1; i++)
{
var mean = (someData[i][1] + someData[i-1][1] + someData[i+1][1])/3.0;
moveMean.push([i,mean]);
}
我下面寫了一個更通用的功能。
要使用它,只需傳遞一個數組值,移動平均數(或長度)和一個可選的限定符函數。
例如:
movingAvg(arr, 10)
將陣列arr
在返回的值的10個數據點的移動平均。
movingAvg(arr, 20, function(val){ return val != 0; })
將陣列中返回非零值的20個數據點的移動平均arr
因此,與chart.js之,例如,可以使用它像這樣:
...
,datasets: [
{
label: "Values"
,data: values
}
,{
type: "line"
,label: "20 Point Moving Average"
,data: movingAvg(values, 20, function(val){ return val != 0; })
}
]
...
功能:
/**
* returns an array with moving average of the input array
* @param array - the input array
* @param count - the number of elements to include in the moving average calculation
* @param qualifier - an optional function that will be called on each
* value to determine whether it should be used
*/
function movingAvg(array, count, qualifier){
// calculate average for subarray
var avg = function(array, qualifier){
var sum = 0, count = 0, val;
for (var i in array){
val = array[i];
if (!qualifier || qualifier(val)){
sum += val;
count++;
}
}
return sum/count;
};
var result = [], val;
// pad beginning of result with null values
for (var i=0; i < count-1; i++)
result.push(null);
// calculate average for each subarray and add to result
for (var i=0, len=array.length - count; i <= len; i++){
val = avg(array.slice(i, i + count), qualifier);
if (isNaN(val))
result.push(null);
else
result.push(val);
}
return result;
}
我遇到了同樣的問題。 這裏是我的例子供您參考。 您可以根據需要設置任意長度的採樣點。
var getAverage = function(arr, n){
var sum=0;
if(n>arr.length){
n = arr.length;
}
for(var ii=arr.length-n; ii<arr.length; ii++){
sum += arr[ii];
}
return sum/n;
}
function(acceleration, 3);
的代碼不是我的,但它非常適用於金融計算移動平均。
var movingAverage = function(d, t, roundUp) {
if (d.length >= t && d.constructor === Array) {
var r = [], s = 0, f = this.decimalRoundingFactor, ma;
roundUp = typeof roundUp === undefined? true : roundUp;
for(var i=0;i<d.length;++i) {
s += isNaN(d[i])? 0: d[i];
if (i < t-1) {
r.push(NaN);
} else if (i+1 === t) {
ma = roundUp? Math.round((s/t)*f)/f: s/t;
r.push(ma);
} else {
s -= isNaN(d[i-t])? 0: d[i-t];
ma = roundUp? Math.round((s/t)*f)/f: s/t;
r.push(ma);
}
}
return r;
} else {
throw "[ERROR] TechnicalAnalysis#movingAverage: Not enought data! OR data is not Array!";
}
};
無法獲取該頁面以加載任何圖表。至少對於高位圖,您需要在場景後面自行計算,並在添加其他點時添加到圖表中。 – wergeld
你是指計算運行的N點平均值?你爲什麼要尋找一個圖書館來做到這一點,應該是死的簡單的客戶端或服務器端,然後它只是另一個高圖形系列繪製。 – Mark
@Nyxynyx您好,請檢查我的答案,謝謝 – thenewseattle