我正在尝试为我的投资制作一个股票投资组合跟踪器。我已经了解如何使用谷歌金融,但 20 分钟的价格延迟是一个拖累。我已经将我的工作表的重新计算更新为每分钟更改一次,但延迟仍然会发生。所以我真正的问题是我是否以及如何将股票价格从纳斯达克提取到谷歌表中以获得更实时的感受。
最佳答案
您可以尝试使用脚本并让它每分钟触发一次。
我尝试从 NASDAQ 获取数据,但花费的时间太长。我改用了《华尔街日报》,但问题是由于我无法指出的事情,它会随机出错。因此,我添加了一列来标识上次更新数据的时间。不过请放心,它将在下一次运行中更新。
代码:
function getPrice() {
var sheet = SpreadsheetApp.getActiveSheet();
// tickers will be checked on column A starting 2nd row
var values = sheet.getRange("A2:A" + sheet.getLastRow()).getValues().flat();
sheet.getRange("A1:C1").setValues([["Tickers", "Price", "Last Updated"]]);
values.forEach(function (ticker, index){
var url = "https://www.wsj.com/market-data/quotes/" + ticker;
Utilities.sleep(2000);
var html = UrlFetchApp.fetch(url).getContentText();
Utilities.sleep(2000);
var price = html.match(/quote_val">([\d ,.]+)/);
// since it randomly errors out on [1], check if price is null
// add date and time too on column C to confirm when was the data last updated
if(price){
sheet.getRange(index + 2, 2).setValue(price[1].trim());
sheet.getRange(index + 2, 3).setValue(new Date());
}
});
// call to remove existing triggers and create another one
createTrigger();
}
function createTrigger(){
// Delete all existing triggers before creating one
// Ensuring none will exist before creating trigger.
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function (trigger){
ScriptApp.deleteTrigger(trigger);
});
// Create trigger after every run which is per minute
ScriptApp.newTrigger('getPrice')
.timeBased()
.after(60 * 1000)
.create();
}
示例输出:
备注:
- 一天有 1440 分钟,Url Fetch 调用的配额是每天 20000 次,因此您最多只能有 13 个代码,因为当您达到配额时,它不会按预期运行。如果你想要更多的代码,你需要调整频率。 (例如,每 2 分钟更新一次,您最多可以拥有 27 个代码)
资源:
关于google-apps-script - 谷歌金融股票价格的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66121792/