Bonjour, je souhaite garder une trace du profit de la combinaison de nombreuses valeurs d’actions. Pour ce faire, j'ai ma feuille de calcul Google avec de nombreuses formules calculant les ratios de profits ou de pertes en tenant compte du prix auquel je les ai achetées, des frais de courtier et du prix actuellement calculé avec:
=GOOGLEFINANCE("MARKET:COMPANY";"price")
Pour que les choses restent simples pour cette question, supposons que j'ai les valeurs suivantes: Dans la cellule A1:
=GOOGLEFINANCE("NASDAQ:GOOG";"price")
Dans la cellule A2:
=GOOGLEFINANCE("NASDAQ:AMZN";"price")
Et je veux garder une trace de la moyenne de ces deux valeurs, alors A3:
=AVERAGE(A1:A2)
Maintenant, je crée une nouvelle feuille et je mets l'en-tête de deux colonnes, date et valeur. Dans cette fiche, je vais stocker tous les jours à 00h00 la valeur de la cellule A3 avec la date afin de créer un graphique des valeurs quotidiennes.
Pour ce faire, je crée une fonction:
function recordHistory() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Stocks"); //Get values
var source = sheet1.getRange("A2:A3");
var values = source.getValues();
var result = new Array(2); //Sort by date
result[0] = new Date();
result[1] = values[1][0];
var sheet2 = ss.getSheetByName("History"); //Store
sheet2.appendRow(result);
};
Enfin, je crée un déclencheur. Je ne suis pas sûr que la traduction soit correcte car la feuille de calcul est dans une autre langue, mais cela ressemble à quelque chose comme:
function, time based, daily, at midnight
Eh bien, cela semble fonctionner. Chaque jour, cette valeur est mise à jour à minuit. Les derniers jours, j'utilisais quotidiennement le tableur, je ne savais donc pas s'il y avait un problème. Mais après avoir passé une semaine sans le regarder, j'ai constaté que la valeur était toujours la même, c'est-à-dire la valeur calculée à partir de GOOGLEFINANCE la dernière fois que j'ai ouvert la feuille dans mon navigateur.
Ainsi, bien que cela fonctionne, il ne faut pas prendre les valeurs mises à jour de GOOGLEFINANCE.
Est-il possible de mettre à jour toutes les valeurs dépendantes de GOOGLEFINANCE à partir du script avant de les stocker?
Mise à jour : Je pense qu'en essayant de simplifier mon problème, j'ai posé la mauvaise question. Donc, je vais essayer de le reformuler. Je viens de faire une version simplifiée de la feuille que je veux avoir pour stocker toutes les opérations de nombreux marchés et devises internationales:
Le bénéfice net global est de:
=(sum(SOLD)-sum(BOUGHT))/sum(BOUGHT)
Les cellules achetées sont entrées manuellement:
=Shares * Price * Currency Exchange when bought
Les cellules vendues sont automatiquement renseignées avec les données Googlefinance:
=Shares * Current price * Current Currency exchange conversion - Broker costs
Maintenant, avec le script que j'ai écrit au-dessus de cette mise à jour (il suffit de changer le numéro de cellule), je souhaite garder une trace de la cellule M6, ainsi que voir comment il évolue dans le temps avec la combinaison de tous mes stocks.
Une fois que j'ai vendu quelque chose, je viens de modifier manuellement la cellule qui, jusqu'à présent, se mettait à jour avec Google Finance à une valeur fixe.
Le problème et la question: le script le fait correctement, mais uniquement lorsque la feuille de calcul est ouverte dans mon navigateur. J'aimerais savoir s'il existe un moyen d'appeler quelque chose comme "mettre à jour" toutes les valeurs de Googlefinance (prix actuel et $/€ (actuel)) à partir du script, qui est exécuté tous les jours à minuit.
Les API yahoo et google finance à utiliser à partir du script google apps étant obsolètes, je pense que le seul moyen de contourner ce problème est de générer des requêtes googlefinance à partir du script sous forme de chaînes et de les écrire dans la feuille. Ensuite, une fois que nous entrons dans la feuille, ces requêtes sont envoyées.
Je ne pense pas que ce soit la manière la plus élégante de le faire, et c'est aussi assez lent à travailler avec ces données, mais je ne pouvais pas trouver une autre solution.
Si quelqu'un veut faire la même chose ici c'est ce que j'ai fait pour générer mes données historiques à titre d'exemple. Certaines erreurs doivent peut-être être changées, mais à titre de référence, je pense que cela suffit. Dans mon projet, cela a fonctionné comme il se doit.
Des fonctions telles que GOOGLEFINANCE ne sont mises à jour que lorsque la feuille de calcul est ouverte par un utilisateur. Aucune méthode de script Google Apps ne permet de le faire. Le plus proche est SpreadsheetApp.flush () mais cela fait seulement que les modifications apportées par le script soient placées dans la feuille de calcul.
Une alternative consiste à repenser votre modèle et à en tirer parti ...
GOOGLEFINANCE offre déjà un moyen de rapporter des données historiques. La syntaxe est
GOOGLEFINANCE(ticker, [attribute], [start_date], [end_date|num_days], [interval])
Exemple
La formule suivante renvoie les valeurs de fermeture quotidiennes de NASDAQ:GOOG
du 1er janvier 2017 à aujourd'hui.
A1:
=GOOGLEFINANCE("NASDAQ:GOOG","price","1/1/2017",TODAY())
La formule suivante renvoie les valeurs de fermeture quotidiennes de NASDAQ:AMZN
du 1er janvier 2017 à aujourd'hui.
D1:
=GOOGLEFINANCE("NASDAQ:AMZN","price","1/1/2017",TODAY())
Pour calculer la moyenne quotidienne, nous ne pouvions pas utiliser AVERAGE avec ARRAYFORMULA, mais les opérandes +
et /
:
G1:
=ArrayFormula((B2:B+E2:E)/2)
Remarque:
Suggestion: supprimez les lignes vides en bas afin de pouvoir calculer la moyenne journalière uniquement pour les lignes contenant des données.
La moyenne quotidienne de l'historique sera calculée à partir de la date de début jusqu'à la date réelle chaque fois que le tableur sera recalculé.
Résultat (extrait):
Date Close Date Close Average
1/3/2017 16:00:00 786.14 1/3/2017 16:00:00 786.14 786.14
1/4/2017 16:00:00 786.9 1/4/2017 16:00:00 786.9 786.9
1/5/2017 16:00:00 794.02 1/5/2017 16:00:00 794.02 794.02
1/6/2017 16:00:00 806.15 1/6/2017 16:00:00 806.15 806.15
1/9/2017 16:00:00 806.65 1/9/2017 16:00:00 806.65 806.65
1/10/2017 16:00:00 804.79 1/10/2017 16:00:00 804.79 804.79
Remarque:
Les fonctions de feuille de calcul Google ne sont recalculées que lorsque la feuille de calcul est ouverte. Par conséquent, l'utilisation d'un script à exécuter tant que la feuille de calcul n'est pas ouverte par quiconque récupérera les valeurs enregistrées la dernière fois que la feuille de calcul a été ouverte/synchronisée en mode hors connexion. .
Références