Citat:
Ursprungligen postat av
KarlDenMindre
Jag försöker importera investmentbolagen till PortfolioVisualizer med hjälp av sinewaves "GS AZ-fuldata"-script for Google Spreadsheets.
Jag klistrar in formeln =azPV(ID) i en kolumn och byter ut ID mot aktiens Avanzanummer, sen genereras några kolumner med data som det ska, men märkligt nog funkar det på alla bolag utom Investor, Latour, Lundberg, Öresund. Där kommer följande felmeddelande upp:
#ERROR
Fel: TypeError: Det går inte att läsa egenskapen "1" från undefined. (rad 71).
Jag har trippelkollat att avanzas ID är rätt för dessa aktier. Försökte sen med numret för OMXS30 men fick error även där. Vad kan det vara för knas? OBS jag är total amatör när det gäller script & kalkylark.
Testar jag att byta ut numret på någon av de fungerande kolumnerna till Investor, Latour, Lundberg eller Öresunds så blir det också error. Kan det vara hos Avanza det blir stopp?
Testa med detta istället, hoppar alltid över första datavärdet då det annars kan ge fel på vissa saker.
Testat med Latour B och Investor B:
Kod:
/**
* GS azPV v0.7
*/
function toPercent(val){
return Math.round(val*10000)/100;
}
function azPV(id, useCache, chartResolution, max ) {
var azPost_url = 'https://www.avanza.se/ab/component/highstockchart/getchart/orderbook';
var cacheTime = 32400; // 32400s = 6 hours
id = id || false;
max = max || '1985'; // max to start with
chartResolution = chartResolution || 'MONTH';
useCache = useCache || true;
// check if id was set
if(!id) return 'Inget id definierat';
// check if cached
var cacheString = 'cache_' + id.toString() + max + chartResolution;
var cache = CacheService.getScriptCache();
var cacheData = cache.get(cacheString);
var json = '{"orderbookId":%id%,"chartType":"AREA","widthOfPlotContainer":558,"chartResolution":"'+ chartResolution +'","navigator":false,"percentage":false,"volume":false,"owners":false,"timePeriod":"year","ta":[]}';
// add id
json = json.replace('%id%', id);
// set max to rediculous number
if( max ){
var today = new Date().toJSON().slice(0,10);
var rep = '"start":"'+ max +'-01-01","end":"'+ today +'"';
json = json.replace('"timePeriod":"year"', rep);
}
// make the request
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : json,
'muteHttpExceptions': true
};
var response, data;
if( cacheData != null && useCache ) {
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;
var rows = [],
data, i=0, len = dataPoints.length;
for (i; i<len; i++) {
if( i === 0 ) continue;
cur = dataPoints[i];
var date = cur[0],
nav = cur[1];
var returns = 0;
if( cur[1] != null ){
returns = toPercent((nav/dataPoints[i-1][1])-1);
}
if( returns > 1000000 ) returns = 0;
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;
chartResolution == 'DAY' ? ymd += '-' + day : '';
var csv = ymd + ',' + returns;
if( nav ) {
csv = csv + '%'; // add percentage
rows.push([ymd, nav, returns, csv]);
}
} // end loop
// set headers
rows.unshift(['Datum','NAV', 'Avkastning','PV CSV-format']);
return rows;
} // azPV()