I am using Alphavantage add-on on GoogleSheet to retrieve stocks' information. The API has a 5 calls/minute and 500 calls/day limit.
I am testing it out on a list of 6.000 stocks just to begin with. And I want to build a script that once a month retrieves a series of data (EBITDA, PE, ...) from the AVGetCompanyOverview formula.
When you insert this formula in a cell, the formula returns a 2 columns table with strings on the left and corresponding values on the right (i.e.: PE | 19,5; EBITDA | 3000000; ...).
This is the code I wrote:
function MarketDataMonthly() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
const lastrow = sheet.getLastRow();
var symbol = sheet.getRange(2,2,lastrow).getValues();
var formularange = sheet.getRange(2,7,lastrow);
var ebitda = sheet.getRange(2,9,lastrow);
var pe = sheet.getRange(2,10,lastrow);
var book = sheet.getRange(2,11,lastrow);
var dps = sheet.getRange(2,12,lastrow);
var divyield = sheet.getRange(2,13,lastrow);
var eps = sheet.getRange(2,14,lastrow);
var profit = sheet.getRange(2,15,lastrow);
var roa = sheet.getRange(2,16,lastrow);
var roe = sheet.getRange(2,17,lastrow);
var p2b = sheet.getRange(2,18,lastrow);
var ev2r = sheet.getRange(2,19,lastrow);
var ev2ebitda = sheet.getRange(2,20,lastrow);
var beta = sheet.getRange(2,21,lastrow);
for (var i=1;i<=500;i++){
var formula = formularange.getCell(i, 1)
formula.setValue('=AVGetCompanyOverview('+'"'+symbol[i-1]+'"'+')') // Question 1 and 4
formula.getValue() // Question 2
Utilities.sleep(20000)
var ebitdavalue = sheet.getRange(i+14,8).getValue()
ebitda.getCell(i, 1).setValue(ebitdavalue)
var pevalue = sheet.getRange(i+15,8).getValue()
pe.getCell(i, 1).setValue(pevalue)
var bookvalue = sheet.getRange(i+17,8).getValue()
book.getCell(i, 1).setValue(bookvalue)
var dpsvalue = sheet.getRange(i+18,8).getValue()
dps.getCell(i, 1).setValue(dpsvalue)
var divyieldvalue = sheet.getRange(i+19,8).getValue()
divyield.getCell(i, 1).setValue(divyieldvalue)
var epsvalue = sheet.getRange(i+20,8).getValue()
eps.getCell(i, 1).setValue(epsvalue)
var profitvalue = sheet.getRange(i+22,8).getValue()
profit.getCell(i, 1).setValue(profitvalue)
var roavalue = sheet.getRange(i+24,8).getValue()
roa.getCell(i, 1).setValue(roavalue)
var roevalue = sheet.getRange(i+25,8).getValue()
roe.getCell(i, 1).setValue(roevalue)
var p2bvalue = sheet.getRange(i+35,8).getValue()
p2b.getCell(i, 1).setValue(p2bvalue)
var ev2rvalue = sheet.getRange(i+36,8).getValue()
ev2r.getCell(i, 1).setValue(ev2rvalue)
var ev2ebitdavalue = sheet.getRange(i+37,8).getValue()
ev2ebitda.getCell(i, 1).setValue(ev2ebitdavalue)
var betavalue = sheet.getRange(i+38,8).getValue()
beta.getCell(i, 1).setValue(beta)
formula.getCell(i,1).setValue("")
}
}
This script works, but I can't figure out this: instead of writing the formula in an actual cell, is it possible to transform it into an Array? So I can reference it instead of browsing through cells.
Thanks!