0
votes

I'm trying to get a code to work to calcualte average true range. So in the spreadsheet side I have =getATR(GoogleFinance("stock", ʺallʺ, today()-60,today()))

And the code for the app is below. However I keep getting this TypeError: cannot set property "0.0" of undefined to "7.1". The line with the problem is the first instance where trurange[i][0] is called.

Appreciate your help with this, seems something silly on the syntax side.

function getATR(arr) {
  var atr = 0;
  var truerange = [];
  var i=39;
for (var row = arr.length-1; row >= arr.length-40; row--) {
     truerange[i][0] = arr[row][3] - arr[row][4];
     truerange[i][1] = Math.abs( arr[row][3] - arr[row-1][2] );
     truerange[i][2] = Math.abs( arr[row][4] - arr[row-1][2] );
     truerange[i][3]= Math.max(truerange[i][0],truerange[i][1],truerange[i][2]);
     i=i-1;
  }

for(var row2 = 1; row2<40; row2++){
    truerange[row2][4] = (truerange[row2-1][4]*13+truerange[row2][3])/14;
    if(row2=39) {atr = truerange[row2][4]}
  }
  return atr;

}

Browser: ie9 Operating System: win7 Drive on the Web / Drive for desktop: Web

1

1 Answers

0
votes

I am looking for a 6 day SMA of ATR. This code works for me

function getATR(arr) {
   arr[1][9] = Math.abs( arr[1][2] - arr[1][3] )
   for (var row = 2; row < 41; row++) 
   {
      arr[row][6] = arr[row][2] - arr[row][3];
      arr[row][7] = Math.abs( arr[row][2] - arr[row-1][4] );
      arr[row][8] = Math.abs( arr[row][3] - arr[row-1][4] );
      arr[row][9] = Math.max(arr[row][6],arr[row][7],arr[row][8]);
      if (row>6) { arr[row][10] = (arr[row-5][9]+arr[row-4][9]+arr[row-3][9]+arr[row-2][9]+arr[row-1][9]+arr[row][9])/6 } 
   }

   return arr[40][10]; 
}