__________________
Senast redigerad av sinewave 2017-07-14 kl. 11:17.
Senast redigerad av sinewave 2017-07-14 kl. 11:17.

=MEDEL(INDEX(GOOGLEFINANCE("INDEXNASDAQ:OMXS30";"price";TODAY()-305;TODAY();"DAILY"); 0; 2))

=MEDEL(INDEX(GOOGLEFINANCE("INDEXNASDAQ:OMXS30";"price";TODAY()-305;TODAY();"DAILY"); 0; 2))
function getUERATE(ma, cacheTime) {
if (typeof ma !== "number") {
ma = 12;
} else {
ma = ma || 12;
}
cacheTime = cacheTime || 32400; // 6 hours
var cacheString = 'cache_unrate' + ma;
var cache = CacheService.getScriptCache();
var cacheData = cache.get(cacheString);
var unrate_url = 'https://api.bls.gov/publicAPI/v1/timeseries/data/LNS14000000';
var response;
// options for all requests
var options = {
"muteHttpExceptions": true
}
var data;
response = UrlFetchApp.fetch(unrate_url, options);
if (cacheData != null) {
data = cacheData;
}
else {
response = UrlFetchApp.fetch(unrate_url, options);
data = response.getContentText();
cache.put(cacheString, data, cacheTime); // cache for 1 hour
}
data = response.getContentText();
data = JSON.parse(data);
if (data.status !== "REQUEST_SUCCEEDED") {
return null;
}
var series = data.Results.series[0].data;
if (!Array.isArray(series) || series.length < 1) {
return null;
}
var rows = [];
var currUE = parseFloat(series[0].value);
if (series.length < ma + 1) {
ma = series.length;
}
var sumRate = 0.0;
for (var i = 1; i < ma + 1; i++) {
var ueval = parseFloat(series[i].value);
sumRate += ueval;
}
var smarate = sumRate / (ma);
smarate = Math.round(smarate * 100) / 100;
//unrate = Math.round(unrate * 100) / 100
rows.push(["US UE Rate:", currUE.toFixed(2)]);
rows.push(["SMA" + ma + ":", smarate.toFixed(2)]);
rows.push(["Recession likely?", smarate > currUE ? "No" : "Yes"]);
return rows;
}
/**
* GS AZ-fuldata v1.0.2
*/
function azPost(id, ma, single) {
var azPost_url = 'https://www.avanza.se/ab/component/highstockchart/getchart/orderbook';
var cacheTime = 32400; // 32400s = 6 hours
id = id || false;
ma = ma || false;
single = single || false;
// check if cached
var cacheString = 'cache_' + id.toString() + ma + single;
var cache = CacheService.getScriptCache();
var cacheData = cache.get(cacheString);
if(!id) return 'Inget id definierat';
if(id){
var json = '{"orderbookId":%id%,"chartType":"AREA","widthOfPlotContainer":558,"chartResolution":"MONTH","navigator":true,"percentage":false,"volume":false,"owners":false,"timePeriod":"year","ta":[]}';
json = json.replace('%id%', id);
if( ma ){
json = json.replace('[]', '[{"type":"sma","timeFrame": '+ ma +'}]');
}
// make the request
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : json,
'muteHttpExceptions': true
}
var response, data;
if(cacheData != null) {
data = cacheData;
}
else {
response = UrlFetchApp.fetch(azPost_url, options);
data = response.getContentText();
cache.put(cacheString, data, cacheTime); // cache for 1 hour
}
var data = JSON.parse(data);
var dataPoints = data.dataPoints;
// check if ma set
if( ma ) var maData = data.technicalAnalysis[0]['dataPoints'];
var rows = [],
data, i=0, len = dataPoints.length;
for (i; i<len; i++) {
cur = dataPoints[i];
var date = cur[0],
nav = cur[1];
var jsdate = new Date(date),
year = jsdate.getFullYear(),
month = jsdate.getMonth() + 1, // jsdate = 0 based index
day = jsdate.getDate();
if( month < 10 ) { month = '0' + month; } // add leading zero
if( day < 10 ) { day = '0' + day; } // add leading zero
var ymd = year +'-'+ month + '-' + day;
if( ma ) {
var cur_sma;
if ( maData[i+1] ){
cur_sma = maData[i+1][1]; // sma-index is index-1
}
else { cur_sma = ''; }
}
// last point did not have ma, must find latest ma (since 1 year data does not include 100% of all MA-points)
if( ma && cur_sma === '' ){
var len = maData.length;
cur_sma = maData[len-1];
}
if( !single ){
if( !ma ) { rows.push([ymd, nav]); }
else { rows.push([ymd, nav, cur_sma]); }
}
else {
if( !ma ) { rows.push([nav]); }
else { rows.push([nav, cur_sma]); }
}
} // end loop
// set headers
if(ma) { rows.unshift(['Datum', 'Kurs', 'MA'+ma]); }
else { rows.unshift(['Datum', 'Kurs']); }
// check if user wants single (value)
if( single ) {
var len = rows.length,
lastRow = rows[len-1];
rows = [lastRow];
}
return rows;
}
} // azPost()
// hämta senaste kurs
function azNav(id, ma, res){
return azPost(id, ma, true);
}
function toPercent(val){
return Math.round(val*10000)/100;
}
/* hämta 1 mån, 3 mån, 6 mån etc */
function azPerf(id,ma,cacheTime){
id = id || false;
ma = ma || 10;
cacheTime = cacheTime || 32400; // 6 hours
if(!id) return 'no id was set';
var azFund_url = 'https://www.avanza.se/_mobile/market/fund/{id}',
azStock_url = 'https://www.avanza.se/_mobile/market/stock/{id}',
check_url = 'https://www.avanza.se/_mobile/market/orderbooklist/{id}',
response, data, rows = [], url;
// options for all requests
var options = {
"muteHttpExceptions":true
}
// first check what type something is, can be either FUND or something else
// all 'something' else has a different format, but the *SAME* format
// check if cached
var cacheString = 'check_' + id.toString() + ma;
var cache = CacheService.getScriptCache();
var cacheData = cache.get(cacheString);
if( cacheData ){
data = cacheData;
}
else {
check_url = check_url.replace('{id}', id);
response = UrlFetchApp.fetch(check_url, options);
data = response.getContentText();
cache.put(cacheString, data, cacheTime);
}
var isFund = true;
//return data;
data = JSON.parse(data);
data = data[0];
var type = data.instrumentType;
// check what the instrument type was and act accordingly
if( type !== "FUND" ){ isFund = false; }
if( !isFund ){
url = azStock_url.replace('{id}', id);
// check if cached
var cacheString = 'stock_' + id.toString() + ma;
var cache = CacheService.getScriptCache();
var cacheData = cache.get(cacheString);
if( cacheData ){
data = cacheData;
}
else {
check_url = check_url.replace('{id}', id);
response = UrlFetchApp.fetch(url, options);
data = response.getContentText();
cache.put(cacheString, data, cacheTime);
}
data = JSON.parse(data);
// not a fund, we must manually calculate returns
// and set this to data-object
if( data.sellPrice ){
var currentNav = data.sellPrice; // .buyPrice also available (AZ uses sellPrice)
}
else {
var currentNav = data.lastPrice;
}
data.NAV = currentNav;
// add all changeSinceXXX
data.changeSinceOneMonth = toPercent((currentNav/data.priceOneMonth)-1);
data.changeSinceThreeMonths = toPercent((currentNav/data.priceThreeMonthsAgo)-1);
data.changeSinceSixMonths = toPercent((currentNav/data.priceSixMonthsAgo)-1);
data.changeSinceOneYear = toPercent((currentNav/data.priceOneYearAgo)-1);
data.changeSinceThreeYears = toPercent((currentNav/data.priceThreeYearsAgo)-1);
data.changeSinceFiveYears = toPercent((currentNav/data.priceFiveYearsAgo)-1);
// add others
data.sharpeRatio = '-';
data.NAVLastUpdated = data.lastPriceUpdated;
data.startDate = '-';
data.standardDeviation = '-';
data.managementFee = '-';
data.name = data.name + ' (' + data.tickerSymbol + ')';
if( type.indexOf('TRADED_FUND') > -1 ){
data.type = 'ETF';
}
else if( type === 'CERTIFICATE'){
data.type = 'Certifikat';
}
else if( type === 'INDEX'){
data.type = 'Index';
}
else {
data.type = 'Aktie';
}
}
// it's a fund
else {
// check if cached
var cacheString = 'fund_' + id.toString() + ma;
var cache = CacheService.getScriptCache();
var cacheData = cache.get(cacheString);
if( cacheData ){
data = cacheData;
}
else {
url = azFund_url.replace('{id}',id);
response = UrlFetchApp.fetch(url, options);
data = response.getContentText();
cache.put(cacheString, data, cacheTime);
}
data = JSON.parse(data);
}
var lastUpdate;
lastUpdate = data.NAVLastUpdated.split('T')[0];
var nav = azPost(id, ma, true),
cur = data.NAV,
//cur = nav[0][0],
sma = nav[0][1];
if( isNaN(sma) ){
sma = sma[1];
}
var diff = Math.round(((cur/sma)-1)*1000)/1000,
diff = Math.round(diff*1000)/10 + '%';
var stdDev = data.standardDeviation,
fee = data.managementFee;
// check for changeSince since some will not have certain values
for( var key in data ) {
var cur = data[key];
if( key.indexOf('changeSince') > -1 ){
if( isNaN(cur) ){ data[key] = 0; }
}
} // end loop
rows.push([data.name, data.type, fee, diff, data.NAV, sma, data.sharpeRatio, stdDev, data.changeSinceThreeMonths,data.changeSinceSixMonths,data.changeSinceOneYear, data.changeSinceThreeYears, data.changeSinceFiveYears, lastUpdate, data.startDate]);
return rows;
}
Du måste vara medlem för att kunna kommentera