The problem is with the date. 1/1 is New Year's Day, and the markets are closed, therefore the stock price on that day is returning #N/A, which doesn't have an index 2,2.
Functions like GOOGLEFINANCE are only updated when the spreadsheet is open by a user, there isn't a Google Apps Script method that is able to do this. The closest is SpreadsheetApp.flush() but this only makes that the changes made by the script be pushed to the spreadsheet.
One alternative is to rethink your model and take advantage that ...
GOOGLEFINANCE already offer a way to report historic data. The syntax is
GOOGLEFINANCE(ticker, [attribute], [start_date], [end_date|num_days], [interval])
Example
The following formula returns the daily close values of NASDAQ:GOOG
from January 1, 2017 to today.
A1:
=GOOGLEFINANCE("NASDAQ:GOOG","price","1/1/2017",TODAY())
The following formula returns the daily close values of NASDAQ:AMZN
from January 1, 2017 to today.
D1:
=GOOGLEFINANCE("NASDAQ:AMZN","price","1/1/2017",TODAY())
To calculate the daily average, we could not use AVERAGE with ARRAYFORMULA but we could use the +
and /
operands:
G1:
=ArrayFormula((B2:B+E2:E)/2)
Note:
Suggestion: Delete the blank rows at the bottom in order to make the calculation of the daily average just for the rows with data.
The history daily average will be calculate from the start date to the actual date every time that the spreadsheet be recalculated.
Result (extract):
Date Close Date Close Average
1/3/2017 16:00:00 786.14 1/3/2017 16:00:00 786.14 786.14
1/4/2017 16:00:00 786.9 1/4/2017 16:00:00 786.9 786.9
1/5/2017 16:00:00 794.02 1/5/2017 16:00:00 794.02 794.02
1/6/2017 16:00:00 806.15 1/6/2017 16:00:00 806.15 806.15
1/9/2017 16:00:00 806.65 1/9/2017 16:00:00 806.65 806.65
1/10/2017 16:00:00 804.79 1/10/2017 16:00:00 804.79 804.79
Note:
Google spreadsheet functions are only recalculated while the spreadsheet is open, so using a script to be ran while the spreadsheet is not opened by anyone will retrieve the values saved the last time the spreadsheet was online-opened/synced offline changes.
References
Best Answer
This actually kind of makes sense. If the 2nd parameter of
GOOGLEFINANCE
is"priceopen"
it tries to fetch the open price but by adding a historical date to itDATE(2019,4,12)
the 2nd parameter is confused because on that date there is no open price. On that date is only closed price at this moment. In other words: "the historical open price" is called "open".