2025-02-17, 09:11
  #229
Medlem
sinewaves avatar
Citat:
Ursprungligen postat av mrsch
Jag visste inte att du skapade det för så länge sedan, det är ju fantastiskt!
Den senaste uppdateringen av Avanza verkar dock ha förändrat något radikalt. AzPost verkar inte kunna hämta någon MA-data längre. Ditt Google sheet har för mig och många andra varit det överlägset bästa sättet att följa upp fondstrategier efter Relative Strength och Ma-10. Själv har jag blivit rätt beroende av det så jag håller tummarna för att det går att lösa

Jag har inte hunnit komma dit än, men man måste göra något snarlikt som för "aztest"; dvs byta till en ny endpoint som inte fungerar riktigt som den äldre varpå det krävs mer än att bara byta den.

För att kalkylera SMA (MA) för fonder krävs att man utför kalkylen själv. I den äldre gick det teoretiskt genom att skicka med variabeln "ta" i POST-requesten, men så verkar det inte vara längre.

Gamma endpoint: /ab/component/highstockchart/getchart/orderbook
Ny: /_api/price-chart/stock/{id}
Citera
2025-02-17, 14:52
  #230
Medlem
sinewaves avatar
Ny funktion för att hämta NAV + MA för Google Spreadsheets:

Kod:
/**
 * az_get
 * fetch nav from avanza and fetch sma
 */
function az_get( id, ma, period )
{

  // parmas
  id = id || false;
  ma = ma || 10;
  period = period ? period.toLowerCase() : 'month';

  // debug
  // id = 1002994; // OMXSGI

  // checks
  if(!id) return 'Inget id definierat';
  if (['minute', 'hour', 'day', 'week', 'month'].indexOf( period ) < 0 ){
    return 'Perioden är fel, använd minute, hour, day, week eller month';
  }

  // nowadays Avanza has two endpoints, one for nav and one for TA
  var get_uri = 'https://www.avanza.se/_api/price-chart/stock/'+ id +'?timePeriod=three_years&resolution=' + period;
  var ta_uri = `https://www.avanza.se/_api/price-chart/stock/${id}/ta/?timePeriod=three_years&resolution=${period}&ta=${ma}`;

  var requestOptions = {
    'method' : 'get',
    'contentType': 'application/json',
    'muteHttpExceptions': true
  }

  var data = JSON.parse( UrlFetchApp.fetch(get_uri) ) ;
  var ta_data = JSON.parse( UrlFetchApp.fetch(ta_uri) );

  data = data.ohlc;

  var rows = [];
  var cur_nav = data[data.length-1].close;
  var cur_sma = ta_data[ta_data.length-1].close;

  if( cur_sma === '' ) cur_sma = ta_data[ta_data.length-2].close; // it can be missing, if so use prior
  var indicator = ((cur_nav/cur_sma)-1);

  // debug
  /*
  console.log({
    indicator: indicator,
    cur_nav: cur_nav,
    cur_sma: cur_sma,
    updated: new Date().toLocaleString('sv-SE', { dateStyle: 'short', timeStyle: 'short' })
  });
  */

  rows.push([
      indicator,
      cur_nav,
      cur_sma,
      new Date().toLocaleString('sv-SE', { dateStyle: 'short', timeStyle: 'short' })
  ]);

  return rows;
  
} // az_get()

Man måste in och rota under "Apps Script" och uppdatera.
Den här versionen innehåller inte ett cache-lager (pga tidsbrist), men bör läggas till om man inte har nytta av att slå mot Avanza stup i kvarten vilket kan vara en halvkass idé.

Den här returnerar annars samma typ av rader som den äldre versionen.
Citera
2025-02-17, 22:24
  #231
Medlem
S T O R T T A C K ! ! !

Jag ska försöka lägga till det i skriptet! Jag är mycket tacksam för hjälpen!!

Trevlig kväll.


Citat:
Ursprungligen postat av sinewave
Ny funktion för att hämta NAV + MA för Google Spreadsheets:

Kod:
/**
 * az_get
 * fetch nav from avanza and fetch sma
 */
function az_get( id, ma, period )
{

  // parmas
  id = id || false;
  ma = ma || 10;
  period = period ? period.toLowerCase() : 'month';

  // debug
  // id = 1002994; // OMXSGI

  // checks
  if(!id) return 'Inget id definierat';
  if (['minute', 'hour', 'day', 'week', 'month'].indexOf( period ) < 0 ){
    return 'Perioden är fel, använd minute, hour, day, week eller month';
  }

  // nowadays Avanza has two endpoints, one for nav and one for TA
  var get_uri = 'https://www.avanza.se/_api/price-chart/stock/'+ id +'?timePeriod=three_years&resolution=' + period;
  var ta_uri = `https://www.avanza.se/_api/price-chart/stock/${id}/ta/?timePeriod=three_years&resolution=${period}&ta=${ma}`;

  var requestOptions = {
    'method' : 'get',
    'contentType': 'application/json',
    'muteHttpExceptions': true
  }

  var data = JSON.parse( UrlFetchApp.fetch(get_uri) ) ;
  var ta_data = JSON.parse( UrlFetchApp.fetch(ta_uri) );

  data = data.ohlc;

  var rows = [];
  var cur_nav = data[data.length-1].close;
  var cur_sma = ta_data[ta_data.length-1].close;

  if( cur_sma === '' ) cur_sma = ta_data[ta_data.length-2].close; // it can be missing, if so use prior
  var indicator = ((cur_nav/cur_sma)-1);

  // debug
  /*
  console.log({
    indicator: indicator,
    cur_nav: cur_nav,
    cur_sma: cur_sma,
    updated: new Date().toLocaleString('sv-SE', { dateStyle: 'short', timeStyle: 'short' })
  });
  */

  rows.push([
      indicator,
      cur_nav,
      cur_sma,
      new Date().toLocaleString('sv-SE', { dateStyle: 'short', timeStyle: 'short' })
  ]);

  return rows;
  
} // az_get()

Man måste in och rota under "Apps Script" och uppdatera.
Den här versionen innehåller inte ett cache-lager (pga tidsbrist), men bör läggas till om man inte har nytta av att slå mot Avanza stup i kvarten vilket kan vara en halvkass idé.

Den här returnerar annars samma typ av rader som den äldre versionen.
Citera
2025-03-05, 13:55
  #232
Medlem
sinewaves avatar
Fixade bugg @ https://aztest.netlify.app/index_temp.html där månad blev "00" istället för föregående år och "12".
Riktiga aztest ännu inte uppe då jag vill gå igenom och göra en rimligare refaktor av verktyget någon dag, uppdatera utseende osv (skiten är ju över 7-8 år gammalt vid det här laget). Finns en del enkla vinster (som att fixa id-listorna så att där inte inte finns mellanslag, vettigare error-logging som mer är skapad år 2025 och inte år 1962 mm).

Skulle också gärna se "auto complete" för att lägga till / ta bort, men det tar en massa tid och verktyget var aldrig riktigt till för nybörjare ändå så ...... ja. Kanske ett litet sökfält där man bara kan söka för att få ID:n istället.

Jag rekommenderar fortfarande att man laddar ned verktyget (alla filer) och det är också skapat för att rakt av kunna laddas ned och köras lokalt rakt av UTAN skumma depedencies och skit. Vid lokalt måste man såklart fixa CORS (använd ett CORS-plugin och white-lista avanza.se).
Citera
2025-04-04, 11:44
  #233
Medlem
Hej igen Sinewave,

Skulle du kunna förklara az_Get för mig?
Koden ger ett värde men vad är det för värde? Det verkar inte vara Ma10 (månad). Jag kör =az_Get($D4) i google sheets där D4 är fondens nummer på avanza.

T ex Länsförsäkringar Global Index (417655) får värde 25,4% men fonden är ju långt under MA10(månad).

Tack på förhand!!


Citat:
Ursprungligen postat av sinewave
Ny funktion för att hämta NAV + MA för Google Spreadsheets:

Kod:
/**
 * az_get
 * fetch nav from avanza and fetch sma
 */
function az_get( id, ma, period )
{

  // parmas
  id = id || false;
  ma = ma || 10;
  period = period ? period.toLowerCase() : 'month';

  // debug
  // id = 1002994; // OMXSGI

  // checks
  if(!id) return 'Inget id definierat';
  if (['minute', 'hour', 'day', 'week', 'month'].indexOf( period ) < 0 ){
    return 'Perioden är fel, använd minute, hour, day, week eller month';
  }

  // nowadays Avanza has two endpoints, one for nav and one for TA
  var get_uri = 'https://www.avanza.se/_api/price-chart/stock/'+ id +'?timePeriod=three_years&resolution=' + period;
  var ta_uri = `https://www.avanza.se/_api/price-chart/stock/${id}/ta/?timePeriod=three_years&resolution=${period}&ta=${ma}`;

  var requestOptions = {
    'method' : 'get',
    'contentType': 'application/json',
    'muteHttpExceptions': true
  }

  var data = JSON.parse( UrlFetchApp.fetch(get_uri) ) ;
  var ta_data = JSON.parse( UrlFetchApp.fetch(ta_uri) );

  data = data.ohlc;

  var rows = [];
  var cur_nav = data[data.length-1].close;
  var cur_sma = ta_data[ta_data.length-1].close;

  if( cur_sma === '' ) cur_sma = ta_data[ta_data.length-2].close; // it can be missing, if so use prior
  var indicator = ((cur_nav/cur_sma)-1);

  // debug
  /*
  console.log({
    indicator: indicator,
    cur_nav: cur_nav,
    cur_sma: cur_sma,
    updated: new Date().toLocaleString('sv-SE', { dateStyle: 'short', timeStyle: 'short' })
  });
  */

  rows.push([
      indicator,
      cur_nav,
      cur_sma,
      new Date().toLocaleString('sv-SE', { dateStyle: 'short', timeStyle: 'short' })
  ]);

  return rows;
  
} // az_get()

Man måste in och rota under "Apps Script" och uppdatera.
Den här versionen innehåller inte ett cache-lager (pga tidsbrist), men bör läggas till om man inte har nytta av att slå mot Avanza stup i kvarten vilket kan vara en halvkass idé.

Den här returnerar annars samma typ av rader som den äldre versionen.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in