Vinnaren i pepparkakshustävlingen!
2017-05-04, 21:41
  #13
Medlem
Citat:
Ursprungligen postat av sinewave
Ny data för PV, exporterat den 3 maj 2017:
https://www.sendspace.com/file/f3zsjh

Lite nya fonder och ZIP-filen innehåller nu tre kataloger:
1. "long-history" innehåller fonder som har data från 1991 och framåt
2. "medium-history" innehållr fonder som har data från 2001 och framåt
3. "shorter-history" innehåller fonder med kortare historik

Nytt i PV är också att man nu kan ha upp till 50 importerade benchmarks (tidigare 25). Detta gör att man nu utan problem kan importera alla benchmarks i ZIP-filen och ha marginal över för att t ex skapa benchmarks av hela strategier mm.

Detta är guld, sinewave. Har inte haft tid för att testa, man sitter tyvärr aldrig sysslolös, men ska försöka ge mig på ett litet backtest i helgen.
Citera
2017-05-07, 16:48
  #14
Medlem
Hur hämtar ni data från ex Avanza för vidare import till PV? Har försökt via Sinewaves script men lyckas aldrig få PV att acceptera oavsett filformat och formatering.

Skulle vara gött med en gedigen backtest på ens strategi och fondurval.
Citera
2017-05-07, 18:58
  #15
Medlem
sinewaves avatar
Citat:
Ursprungligen postat av cherrycxke
Hur hämtar ni data från ex Avanza för vidare import till PV? Har försökt via Sinewaves script men lyckas aldrig få PV att acceptera oavsett filformat och formatering.

Skulle vara gött med en gedigen backtest på ens strategi och fondurval.

Du skriver kod som ger datan helt enkelt, men då ingen här verkar kunna skriva någon kod överhuvudtaget tog jag mig frigheten att skriva ett GS-script lite snabbt. Vet inte om det fungerar med PV då jag inte har tid att testa men prova i Google Spreadsheets (GS):
https://paste.ofcode.org/H3KbAfbH3pjyTGdE2ypdzK

Gör

0. Kopiera koden från paste.ofcode/xxxxx
1. Skapa nytt kalkylark i GS
2. I menyn i GS gå till Tools > Script editor...
3. I editorn klistra in koden som du kopierade i 0
4. Spara..
5. Kör =azPV(<id>) där <id> är numret på tillgången i Avanza
6. Kopiera raderna som kommer under PV CSV-data till ett textdokument
7. Spara textdokumentet som .csv
8. Ladda upp i PV, sätt TRUE på percentage values etc etc...

Här är några id:n du kan testa:
Kod:
2801	AMF småbolag
18986	Six Gold Index
1933	Swedbank Ny Teknik
3323	Apple INC
19002	OMX Stockholm 30 Index

Notera att PV kräver minst 10 års data samt att GS kommer att börja gråta om du försöker hämta dagskurser för något som har 35+ år data.

Funktionen azPV tar ett par argument, dessa är:

chartResolution
Hur stor precision datan ska ha
default: MONTH, val: DAY, WEEK
Ex, få dagskurser för 2801:
azPV(2801,"DAY")

Max
Vilket startår som används
default: 1985-01-01
Ex, från 1984 för OMXS30:
azPV(19002, "MONTH", "1984")

Percentage
Om avkastningen eller NAV-kursen ska visas
default: avkastning
val: true/false, ex:
azPV(19002, null, null, "false")

---

Ex på hur det bör se ut i GS:
http://i.imgur.com/rLTVSoG.png
__________________
Senast redigerad av sinewave 2017-05-07 kl. 19:02.
Citera
2017-05-07, 21:11
  #16
Medlem
Citat:
Ursprungligen postat av sinewave
Du skriver kod som ger datan helt enkelt, men då ingen här verkar kunna skriva någon kod överhuvudtaget tog jag mig frigheten att skriva ett GS-script lite snabbt. Vet inte om det fungerar med PV då jag inte har tid a.........

Grymt, stort tack!

Det fungerar, som i att den hämtar data. Dock så tror jag något är galet då den visar extremt hög avkastning i procent. Att få fram NAV med false/true fungerar inte heller tyvärr.

http://imgur.com/a/ciwmE

Kolla min screenshot och notera att den visar att Ny Teknik har presterat 340% @ 2000-06. Vidare om jag kryssar i att det är NAV i PV så säger den ifrån: "Failed to process the uploaded file: Unexpected monthly return '-571.00%' on line 3 of nytekniktest.csv".

PV verkar tolka datan "1999-03,-5.71" som -571%.
Citera
2017-05-07, 22:10
  #17
Medlem
sinewaves avatar
Citat:
Ursprungligen postat av cherrycxke
Grymt, stort tack!

Det fungerar, som i att den hämtar data. Dock så tror jag något är galet då den visar extremt hög avkastning i procent. Att få fram NAV med false/true fungerar inte heller tyvärr.

http://imgur.com/a/ciwmE

Kolla min screenshot och notera att den visar att Ny Teknik har presterat 340% @ 2000-06. Vidare om jag kryssar i att det är NAV i PV så säger den ifrån: "Failed to process the uploaded file: Unexpected monthly return '-571.00%' on line 3 of nytekniktest.csv".

PV verkar tolka datan "1999-03,-5.71" som -571%.

Ojdå, det blev visst djävligt svängig.

Hade helt glömt bort att AZ returnerar total returns och inte förändring i procent mellan <nuvarande> och <föregående>. Festligt med en fond som går +/-500% på en månad dock. :)

Uppdaterat script
https://paste.ofcode.org/Jgc3CXhB82GfRpefryqwXT

Men den är fortfarande fulskriven, vet ej hur bra den fungerar eller om planeten exploderar vid användande osv.

Argumentet 'percentage' är också iom detta struket ur funktionen och kommer ej att fungera då det inte finns någon anledning för värdet längre.
__________________
Senast redigerad av sinewave 2017-05-07 kl. 22:21.
Citera
2017-05-13, 21:14
  #18
Medlem
Finns det något enkelt sett att konvertera alla värden i en PV-fil till sin motsats? Syftet är att backtesta med bear. Vanligtvis går det ju att multiplicera alla tal med -1 men då datumet är i samma cell går det inte. Kan man enkelt bryta ut datumet för att sedan sammanfoga igen? Jag är inte så haj på excel men gör ogärna detta manuellt.
Citera
2017-05-14, 00:02
  #19
Medlem
Citat:
Ursprungligen postat av ChiLLon
Finns det något enkelt sett att konvertera alla värden i en PV-fil till sin motsats? Syftet är att backtesta med bear. Vanligtvis går det ju att multiplicera alla tal med -1 men då datumet är i samma cell går det inte. Kan man enkelt bryta ut datumet för att sedan sammanfoga igen? Jag är inte så haj på excel men gör ogärna detta manuellt.

Du kan ju söka och ersätta "," med ",-" och sedan en gång till för att eliminera dubbla "--".

Alltså:
1. Ersätt "," med ",-"
2. Ersätt "--" med "-"

Du får ju återkomma med resultatet av ditt bear experiment.
Citera
2017-05-14, 00:32
  #20
Medlem
Citat:
Ursprungligen postat av cherrycxke
Du kan ju söka och ersätta "," med ",-" och sedan en gång till för att eliminera dubbla "--".

Alltså:
1. Ersätt "," med ",-"
2. Ersätt "--" med "-"

Du får ju återkomma med resultatet av ditt bear experiment.
Smart och simpelt, tack!
Citera
2017-05-14, 09:50
  #21
Medlem
sinewaves avatar
Citat:
Ursprungligen postat av cherrycxke
Du kan ju söka och ersätta "," med ",-" och sedan en gång till för att eliminera dubbla "--".

Alltså:
1. Ersätt "," med ",-"
2. Ersätt "--" med "-"

Du får ju återkomma med resultatet av ditt bear experiment.

Då kommer det med andra ord alltid gå minus? Man måste göra så att det som redan har - inte har - då. Så 2. blir ersätt "--" med "", alltså ingenting.
Citera
2017-05-14, 09:53
  #22
Medlem
Citat:
Ursprungligen postat av sinewave
Då kommer det med andra ord alltid gå minus? Man måste göra så att det som redan har - inte har - då. Så 2. blir ersätt "--" med "", alltså ingenting.

Korrekt!
Citera
2017-05-14, 10:13
  #23
Medlem
Citat:
Ursprungligen postat av sinewave
Då kommer det med andra ord alltid gå minus? Man måste göra så att det som redan har - inte har - då. Så 2. blir ersätt "--" med "", alltså ingenting.
Precis, jag tog ",--" och ersatte med "," då excel inte ville ersätta med ingenting.
Citera
2017-05-15, 14:56
  #24
Medlem
sinewaves avatar
Ojdå, ser att paste.ofcode är lite väl snabba med att plocka ned saker. Det är lite sisådär, så jag klistrar in hela den senaste versionen här istället:

Kod:
/**
* GS azPV v0.6
*/

function toPercent(val){
  return Math.round(val*10000)/100;
}

function azPV(id, 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';
  
  // 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) {
    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++) {
    
    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()

Ett problem i PV är dock att det är mycket svårt att hålla allting uppdaterat. Har man 20+ benchmarks (jag har 30...) så blir det något av ett gissel att uppdatera månatligt. Har givit förslag om att kunna ladda upp .zip-filer etc men det verkar gå trögt med det.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback