diff --git a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/math/AllTimeHighTest.java b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/math/AllTimeHighTest.java index e341427681..999ee8213a 100644 --- a/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/math/AllTimeHighTest.java +++ b/name.abuchen.portfolio.tests/src/name/abuchen/portfolio/math/AllTimeHighTest.java @@ -52,17 +52,6 @@ private void buildPrices(Security security, Long[] prices) } } - @Test - public void testSecurityIsNull() - { - Interval interval = Interval.of(securityOnePrice.getPrices().get(0).getDate(), LocalDate.now()); - AllTimeHigh ath = new AllTimeHigh(null, interval); - - assertNull(ath.getDistance()); - assertNull(ath.getValue()); - assertNull(ath.getDate()); - } - @Test public void testSecurityHasOnlyOnePrice() { diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties index f94e611071..166bfff2fa 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties @@ -2318,7 +2318,7 @@ SecurityListFilter = Filter securities SecurityListFilterDateReached = Securities: Date reached -SecurityListFilterDistanceFromAth = Security: Distance from ATH +SecurityListFilterDistanceFromAth = Distance from ATH SecurityListFilterHideInactive = Only active instruments diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_cs.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_cs.properties index c016b49dd5..0123ad2181 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_cs.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_cs.properties @@ -2310,7 +2310,7 @@ SecurityListFilter = Filtrovat cenn\u00E9 pap\u00EDry SecurityListFilterDateReached = Cenn\u00E9 pap\u00EDry: dosa\u017Een\u00FD datum -SecurityListFilterDistanceFromAth = Zabezpe\u010Den\u00ED: Vzd\u00E1lenost od ATH +SecurityListFilterDistanceFromAth = Vzd\u00E1lenost od ATH SecurityListFilterHideInactive = Pouze aktivn\u00ED cenn\u00E9 pap\u00EDry diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_da.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_da.properties index 932d082faf..df92943905 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_da.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_da.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Filtrer v\u00E6rdipapirer SecurityListFilterDateReached = V\u00E6rdipapirer: Dato n\u00E5et -SecurityListFilterDistanceFromAth = V\u00E6rdipapir: Afstand fra ATH +SecurityListFilterDistanceFromAth = Afstand fra ATH SecurityListFilterHideInactive = Kun aktive instrumenter @@ -2503,7 +2503,7 @@ TabTransactions = Transaktioner TitlePasswordDialog = Tilf\u00F8j password -TooltipAllTimeHigh = Alle tiders H\u00F8j (ATH) i de sidste {0} dage: {2} ({1})\nAktuel v\u00E6rdipapirspris: {3} ({4}) +TooltipAllTimeHigh = Alle tiders H\u00F8j (ATH) i de sidste {0} dage: {2} ({1})\nAktuel v\u00E6rdi: {3} ({4}) TooltipAverageHoldingPeriod = Den gennemsnitlige holdeperiode beregnes som f\u00F8lger:\n\n* Alle handler er inkluderet, som var i portef\u00F8ljen p\u00E5 et tidspunkt inden for den valgte rapporteringsperiode.\n\n* Holdeperioden for hvert v\u00E6rdipapir er resultatet af k\u00F8b og salg. \u00D8jeblikkeligt salg foruds\u00E6ttes for nuv\u00E6rende stillinger.\n\n* Positionsv\u00E6gten beregnes ud fra positionens k\u00F8bspris i forhold til det samlede antal af alle k\u00F8bspriser.\n\n* Resultat "gennemsnitlig holdeperiode for alle positioner" er summen af \u200B\u200Bprodukterne "holdeperiode * positionsv\u00E6gt i procent" p\u00E5 tv\u00E6rs af alle positioner. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties index 73295ed9e5..55e78465de 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Wertpapiere filtern SecurityListFilterDateReached = Wertpapiere: Termin erreicht -SecurityListFilterDistanceFromAth = Wertpapier: Abstand vom ATH +SecurityListFilterDistanceFromAth = Abstand vom ATH SecurityListFilterHideInactive = Nur aktive Instrumente @@ -2503,7 +2503,7 @@ TabTransactions = Ums\u00E4tze TitlePasswordDialog = Passwort vergeben -TooltipAllTimeHigh = All-Time-High (ATH) in den letzten {0} Tagen: {2} ({1})\nAktueller Kurs: {3} ({4}) +TooltipAllTimeHigh = All-Time-High (ATH) in den letzten {0} Tagen: {2} ({1})\nAktueller Wert: {3} ({4}) TooltipAverageHoldingPeriod = Die mittlere Haltedauer errechnet sich wie folgt:\n\n* Es werden alle Trades einbezogen, die irgendwann innerhalb des gew\u00E4hlten Berichtszeitraums im Depot waren.\n\n* Die Haltedauer jedes Wertpapiers ergibt sich aus Kauf- und Verkaufszeitpunkt. F\u00FCr aktuell gehaltene Positionen wird ein sofortiger Verkauf unterstellt.\n\n* Das Positionsgewicht errechnet sich aus Kaufpreis der Position relativ zu der Gesamtsumme aller Kaufpreise.\n\n* Ergebnis "mittlere Haltedauer aller Positionen" ergibt sich als Summe der Produkte "Haltedauer * prozentuales Positionsgewicht" \u00FCber alle Positionen. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_es.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_es.properties index 696ed91b17..9de0ace8f4 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_es.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_es.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Filtrar valores SecurityListFilterDateReached = Valores: fecha alcanzada -SecurityListFilterDistanceFromAth = Valor: Distancia de ATH +SecurityListFilterDistanceFromAth = Distancia de ATH SecurityListFilterHideInactive = Solo instrumentos activos @@ -2503,7 +2503,7 @@ TabTransactions = Transacciones TitlePasswordDialog = Asignar una contrase\u00F1a -TooltipAllTimeHigh = M\u00E1ximo hist\u00F3rico (ATH) en los \u00FAltimos {0} d\u00EDas: {2} ({1})\nPrecio actual del valor: {3} ({4}) +TooltipAllTimeHigh = M\u00E1ximo hist\u00F3rico (ATH) en los \u00FAltimos {0} d\u00EDas: {2} ({1})\nValor actual: {3} ({4}) TooltipAverageHoldingPeriod = El Periodo Medio de Tenencia se calcula de la siguiente manera:\n\n* Se incluyen todas las operaciones que estaban en la cartera en alg\u00FAn momento dentro del per\u00EDodo del informe seleccionado.\n\n* El per\u00EDodo de tenencia de cada valor resulta del tiempo transcurrido entre la compra y su venta. Se asumen ventas inmediatas para las posiciones actuales.\n\n* La ponderaci\u00F3n de la posici\u00F3n se calcula a partir del precio de compra de la posici\u00F3n en relaci\u00F3n al n\u00FAmero total de todos los precios de compra.\n\n* El resultado "periodo medio de tenencia de todas las posiciones" es la suma de los productos "per\u00EDodo de tenencia * peso porcentual de la posici\u00F3n" de todas las posiciones. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_fr.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_fr.properties index 510f2be8e3..43e59b9490 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_fr.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_fr.properties @@ -2306,7 +2306,7 @@ SecurityListFilter = Filtrer titres SecurityListFilterDateReached = Titres : date atteinte -SecurityListFilterDistanceFromAth = S\u00E9curit\u00E9 : Distance de l'ATH +SecurityListFilterDistanceFromAth = Distance de l'ATH SecurityListFilterHideInactive = Seulement instruments actifs @@ -2498,7 +2498,7 @@ TabTransactions = Op\u00E9rations TitlePasswordDialog = Assigner mot de passe -TooltipAllTimeHigh = Plus haut historique (ATH) au cours des {0} derniers jours : {2} ({1})\nPrix actuel du titre : {3} ({4}) +TooltipAllTimeHigh = Plus haut historique (ATH) au cours des {0} derniers jours : {2} ({1})\nValeur actuelle : {3} ({4}) TooltipAverageHoldingPeriod = La dur\u00E9e moyenne de d\u00E9tention est calcul\u00E9e comme suit:\n\n* Toutes les op\u00E9rations qui \u00E9taient dans le portefeuille \u00E0 un moment donn\u00E9 au cours de la p\u00E9riode s\u00E9lectionn\u00E9e sont incluses.\n\n* La p\u00E9riode de d\u00E9tention de chaque titre d\u00E9coule du moment de l'achat et de la vente. Des ventes imm\u00E9diates sont suppos\u00E9es pour les positions actuellement d\u00E9tenues.\n\n* Le poids de la position est calcul\u00E9 \u00E0 partir du prix d'achat de la position par rapport au nombre total de tous les prix d'achat.\n\n* Le r\u00E9sultat \u00AB p\u00E9riode de d\u00E9tention moyenne de toutes les positions \u00BB est la somme des produits de \u00AB p\u00E9riode de d\u00E9tention * poids de position en pourcentage \u00BB pour toutes les positions. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_it.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_it.properties index c83f0ccde9..413b66a570 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_it.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_it.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Filtra titoli SecurityListFilterDateReached = Titoli: data raggiunta -SecurityListFilterDistanceFromAth = Titolo: Distanza da ATH +SecurityListFilterDistanceFromAth = Distanza da ATH SecurityListFilterHideInactive = Solo strumenti attivi @@ -2503,7 +2503,7 @@ TabTransactions = Operazioni TitlePasswordDialog = Assegna password -TooltipAllTimeHigh = Massimo storico (ATH) negli ultimi {0} giorni: {2} ({1})\nPrezzo attuale del titolo: {3} ({4}) +TooltipAllTimeHigh = Massimo storico (ATH) negli ultimi {0} giorni: {2} ({1})\nValore attuale: {3} ({4}) TooltipAverageHoldingPeriod = Il periodo medio di detenzione \u00E8 calcolato come segue:\n\n* Sono incluse tutte le operazioni che erano in portafoglio in un certo momento durante il periodo di riferimento selezionato.\n\n* Il periodo di detenzione di ciascun titolo risulta dal momento dell'acquisto e la vendita. Per le posizioni attualmente ricoperte si ipotizzano vendite immediate.\n\n* Il peso della posizione viene calcolato dal prezzo d'acquisto della posizione rispetto al numero totale di tutti i prezzi d'acquisto.\n\n* Risultato "periodo di detenzione medio di tutte le posizioni" \u00E8 la somma dei prodotti "periodo di detenzione * peso posizione percentuale" in tutte le posizioni. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_nl.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_nl.properties index 554837eac8..5e2c7453d1 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_nl.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_nl.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Effecten filteren SecurityListFilterDateReached = Effecten: datum bereikt -SecurityListFilterDistanceFromAth = Veiligheid: Afstand van ATH +SecurityListFilterDistanceFromAth = Afstand van ATH SecurityListFilterHideInactive = Alleen actieve instrumenten @@ -2503,7 +2503,7 @@ TabTransactions = Transacties TitlePasswordDialog = Wachtwoord toewijzen -TooltipAllTimeHigh = All-Time High (ATH) in de laatste {0} dagen: {2} ({1})\nHuidige effectenprijs: {3} ({4}) +TooltipAllTimeHigh = All-Time High (ATH) in de laatste {0} dagen: {2} ({1})\nHuidige waarde: {3} ({4}) TooltipAverageHoldingPeriod = De gemiddelde bewaarperiode wordt als volgt berekend:\n\n* Alle transacties zijn opgenomen die op enig moment in de portefeuille waren binnen de geselecteerde rapportageperiode.\n\n* De bewaartermijn van elk effect vloeit voort uit het moment van aankoop en verkoop. Onmiddellijke verkopen worden verondersteld voor de huidige posities.\n\n* Het positiegewicht wordt berekend op basis van de inkoopprijs van de positie ten opzichte van het totale aantal van alle inkoopprijzen.\n\n* Resultaat "gemiddelde bewaarperiode van alle posities" is de som van de producten "bewaarperiode * percentage positiegewicht" voor alle posities. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pl.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pl.properties index 7e83059683..99d63ee617 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pl.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pl.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Filtruj walory SecurityListFilterDateReached = Walory: Data osi\u0105gni\u0119ta -SecurityListFilterDistanceFromAth = Walor: Dystans od ATH +SecurityListFilterDistanceFromAth = Dystans od ATH SecurityListFilterHideInactive = Tylko aktywne instrumenty @@ -2503,7 +2503,7 @@ TabTransactions = Transakcje TitlePasswordDialog = Przypisz has\u0142o -TooltipAllTimeHigh = Ostatni Rekord Wszechczas\u00F3w (ATH) w ostatnich {0} dniach: {2} ({1})\nObecna cena waloru: {3} ({4}) +TooltipAllTimeHigh = Ostatni Rekord Wszechczas\u00F3w (ATH) w ostatnich {0} dniach: {2} ({1})\nBie\u017C\u0105ca warto\u015B\u0107: {3} ({4}) TooltipAverageHoldingPeriod = \u015Aredni czas posiadania oblicza si\u0119 w nast\u0119puj\u0105cy spos\u00F3b:\n\n* Uwzgl\u0119dniane s\u0105 wszystkie pozycje, kt\u00F3re znajdowa\u0142y si\u0119 w portfelu w pewnym momencie wybranego okresu sprawozdawczego.\n\n* Czas posiadania ka\u017Cdego papieru warto\u015Bciowego wynika z momentu zakupu i sprzeda\u017Cy. Zak\u0142ada si\u0119 natychmiastow\u0105 sprzeda\u017C na aktualnie zajmowane pozycje.\n\n* Waga pozycji liczona jest z ceny zakupu w stosunku do \u0142\u0105cznej liczby wszystkich cen zakupu.\n\n* \u201E\u015Aredni czas posiadania wszystkich pozycji\u201D to suma iloczynu \u201Eczas posiadania * procentowa waga pozycji\u201D we wszystkich pozycjach. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pt.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pt.properties index 389c9f5852..61351d36ee 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pt.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pt.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Filtrar ativos SecurityListFilterDateReached = T\u00EDtulos: data alcan\u00E7ada -SecurityListFilterDistanceFromAth = Seguran\u00E7a: Dist\u00E2ncia da ATH +SecurityListFilterDistanceFromAth = Dist\u00E2ncia da ATH SecurityListFilterHideInactive = Apenas instrumentos ativos @@ -2503,7 +2503,7 @@ TabTransactions = Transa\u00E7\u00F5es TitlePasswordDialog = Atribuir senha -TooltipAllTimeHigh = All-Time High (ATH) nos \u00FAltimos {0} dias: {2} ({1})\nPre\u00E7o actual dos t\u00EDtulos: {3} ({4}) +TooltipAllTimeHigh = All-Time High (ATH) nos \u00FAltimos {0} dias: {2} ({1})\nValor atual: {3} ({4}) TooltipAverageHoldingPeriod = O per\u00EDodo m\u00E9dio de cust\u00F3dia \u00E9 calculado da seguinte forma:\n\n* Todas as negocia\u00E7\u00F5es inclu\u00EDdas no portf\u00F3lio em algum momento do per\u00EDodo de relat\u00F3rio selecionado.\n\n* O per\u00EDodo de reten\u00E7\u00E3o de cada ativo resulta do momento da compra e venda. Vendas imediatas s\u00E3o assumidas para as posi\u00E7\u00F5es atualmente custodiadas.\n\n* O peso da posi\u00E7\u00E3o \u00E9 calculado a partir do pre\u00E7o de compra da posi\u00E7\u00E3o em rela\u00E7\u00E3o ao n\u00FAmero total de todos os pre\u00E7os de compra.\n\n* O resultado "per\u00EDodo m\u00E9dio de cust\u00F3dia de todas as posi\u00E7\u00F5es" \u00E9 a soma do produto "per\u00EDodo de cust\u00F3dia * peso percentual da posi\u00E7\u00E3o" em todas as posi\u00E7\u00F5es. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_ru.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_ru.properties index 1753649611..652e11e299 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_ru.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_ru.properties @@ -2303,7 +2303,7 @@ SecurityListFilter = \u0424\u0438\u043B\u044C\u0442\u0440 \u0446\u0435\u043D\u04 SecurityListFilterDateReached = \u0410\u043A\u0442\u0438\u0432\u044B: \u0434\u0430\u0442\u0430 \u0434\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442\u0430 -SecurityListFilterDistanceFromAth = \u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C: \u0420\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043E\u0442 ATH +SecurityListFilterDistanceFromAth = \u0420\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043E\u0442 ATH SecurityListFilterHideInactive = \u0422\u043E\u043B\u044C\u043A\u043E \u0430\u043A\u0442\u0438\u0432\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B @@ -2495,7 +2495,7 @@ TabTransactions = \u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u0438 TitlePasswordDialog = \u041D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C -TooltipAllTimeHigh = All-Time High (ATH) \u0437\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 {0} \u0434\u043D\u0435\u0439: {2} ({1})\n\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0446\u0435\u043D\u0430 \u0446\u0435\u043D\u043D\u043E\u0439 \u0431\u0443\u043C\u0430\u0433\u0438: {3} ({4}) +TooltipAllTimeHigh = All-Time High (ATH) \u0437\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 {0} \u0434\u043D\u0435\u0439: {2} ({1})\n\u0422\u0435\u043A\u0443\u0449\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: {3} ({4}) TooltipAverageHoldingPeriod = \u0421\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u0435\u0440\u0438\u043E\u0434 \u0432\u043B\u0430\u0434\u0435\u043D\u0438\u044F \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C:\n\n* \u0412\u043A\u043B\u044E\u0447\u0430\u044E\u0442\u0441\u044F \u0432\u0441\u0435 \u0441\u0434\u0435\u043B\u043A\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u044B\u043B\u0438 \u0432 \u043F\u043E\u0440\u0442\u0444\u0435\u043B\u0435 \u0432 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u043C\u043E\u043C\u0435\u043D\u0442 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u043E\u0442\u0447\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u0435\u0440\u0438\u043E\u0434\u0430.\n\n* \u041F\u0435\u0440\u0438\u043E\u0434 \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u043A\u0430\u0436\u0434\u043E\u0439 \u0446\u0435\u043D\u043D\u043E\u0439 \u0431\u0443\u043C\u0430\u0433\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0441 \u043C\u043E\u043C\u0435\u043D\u0442\u0430 \u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u0438 \u0434\u043E \u0435\u0451 \u043F\u0440\u043E\u0434\u0430\u0436\u0438. \u041F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u044E\u0442\u0441\u044F \u043D\u0435\u043C\u0435\u0434\u043B\u0435\u043D\u043D\u044B\u0435 \u043F\u0440\u043E\u0434\u0430\u0436\u0438 \u043F\u043E \u043F\u043E\u0437\u0438\u0446\u0438\u044F\u043C, \u0437\u0430\u043D\u0438\u043C\u0430\u0435\u043C\u044B\u043C \u0432 \u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435 \u0432\u0440\u0435\u043C\u044F.\n\n* \u0412\u0435\u0441 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0438\u0441\u0445\u043E\u0434\u044F \u0438\u0437 \u0446\u0435\u043D\u044B \u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043E\u0431\u0449\u0435\u0433\u043E \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0441\u0435\u0445 \u0446\u0435\u043D \u043F\u043E\u043A\u0443\u043F\u043A\u0438.\n\n* \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 "\u0441\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u0435\u0440\u0438\u043E\u0434 \u0443\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439" - \u044D\u0442\u043E \u0441\u0443\u043C\u043C\u0430 \u043F\u0440\u043E\u0434\u0443\u043A\u0442\u043E\u0432 "\u043F\u0435\u0440\u0438\u043E\u0434 \u0443\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F * \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u043D\u044B\u0439 \u0432\u0435\u0441 \u043F\u043E\u0437\u0438\u0446\u0438\u0438" \u043F\u043E \u0432\u0441\u0435\u043C \u043F\u043E\u0437\u0438\u0446\u0438\u044F\u043C. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_sk.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_sk.properties index 73a6c64aae..6f5b313bd3 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_sk.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_sk.properties @@ -2311,7 +2311,7 @@ SecurityListFilter = Filtrovanie cenn\u00FDch papierov SecurityListFilterDateReached = Cenn\u00E9 papiere: D\u00E1tum dosiahnutia -SecurityListFilterDistanceFromAth = Cenn\u00FD papier: Od ATH +SecurityListFilterDistanceFromAth = Od ATH SecurityListFilterHideInactive = Iba akt\u00EDvne cenn\u00E9 papiere @@ -2503,7 +2503,7 @@ TabTransactions = Transakcie TitlePasswordDialog = Priradenie hesla -TooltipAllTimeHigh = All-Time High (ATH) za posledn\u00FDch {0} dn\u00ED: {2} ({1})\nAktu\u00E1lna cena cenn\u00E9ho papiera: {3} ({4}) +TooltipAllTimeHigh = All-Time High (ATH) za posledn\u00FDch {0} dn\u00ED: {2} ({1})\nAktu\u00E1lna hodnota: {3} ({4}) TooltipAverageHoldingPeriod = Priemern\u00E1 doba dr\u017Eby sa vypo\u010D\u00EDta takto:\n\n* Zahrnut\u00E9 s\u00FA v\u0161etky obchody, ktor\u00E9 boli v portf\u00F3liu v ur\u010Ditom okamihu v r\u00E1mci vybran\u00E9ho vykazovan\u00E9ho obdobia.\n\n* Doba dr\u017Eby ka\u017Ed\u00E9ho cenn\u00E9ho papiera vypl\u00FDva z \u010Dasu n\u00E1kupu a predaja. Pri aktu\u00E1lne dr\u017Ean\u00FDch poz\u00EDci\u00E1ch sa predpoklad\u00E1 okam\u017Eit\u00FD predaj.\n\n* V\u00E1ha poz\u00EDcie sa vypo\u010D\u00EDta z n\u00E1kupnej ceny poz\u00EDcie vzh\u013Eadom na celkov\u00FD po\u010Det v\u0161etk\u00FDch n\u00E1kupn\u00FDch cien.\n\n* V\u00FDsledok "priemern\u00E1 doba dr\u017Eby v\u0161etk\u00FDch poz\u00EDci\u00ED" je s\u00FA\u010Dtom s\u00FA\u010Dinov "doba dr\u017Eby * percentu\u00E1lna v\u00E1ha poz\u00EDcie" vo v\u0161etk\u00FDch poz\u00EDci\u00E1ch. diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_zh.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_zh.properties index f252e93358..a0dd1e092e 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_zh.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_zh.properties @@ -2503,7 +2503,7 @@ TabTransactions = \u8D26\u76EE TitlePasswordDialog = \u5206\u914D\u5BC6\u7801 -TooltipAllTimeHigh = \u8FD1 {0} \u65E5\u6700\u9AD8 (ATH)\uFF1A{2} ({1})\n\u5F53\u524D\u8BC1\u5238\u62A5\u4EF7\uFF1A{3} ({4}) +TooltipAllTimeHigh = \u8FD1 {0} \u65E5\u6700\u9AD8 (ATH)\uFF1A{2} ({1})\n\u5F53\u524D\u503C\uFF1A {3} ({4}) TooltipAverageHoldingPeriod = \u5E73\u5747\u6301\u4ED3\u671F\u6309\u4EE5\u4E0B\u65B9\u5F0F\u8BA1\u7B97\uFF1A\n\n* \u5168\u90E8\u9009\u5B9A\u62A5\u544A\u671F\u5185\u8FDB\u5165\u8FC7\u6295\u8D44\u7EC4\u5408\u7684\u5934\u5BF8\u3002\n\n* \u6BCF\u79CD\u8BC1\u5238\u7684\u6301\u6709\u671F\u7531\u4E70\u5165\u4E0E\u5356\u51FA\u65F6\u95F4\u5F97\u51FA\u3002\u5F53\u524D\u5934\u5BF8\u5047\u8BBE\u4E3A\u6B64\u523B\u5356\u51FA\u3002\n\n* \u5934\u5BF8\u6743\u91CD\u4E3A\u5176\u4E70\u5165\u4EF7\u4E0E\u603B\u4E70\u5165\u4EF7\u4E4B\u6BD4\u3002\n\n* \u6700\u7EC8\u7ED3\u679C \u201C\u5E73\u5747\u6301\u4ED3\u671F\u201D \u4E3A\u6BCF\u4E2A\u5934\u5BF8\u7684 \u201C\u6301\u4ED3\u671F * \u5934\u5BF8\u6743\u91CD\u201D \u4E4B\u548C\u3002 diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dashboard/WidgetFactory.java b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dashboard/WidgetFactory.java index af3bac4e0c..795b06ba32 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dashboard/WidgetFactory.java +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dashboard/WidgetFactory.java @@ -7,6 +7,7 @@ import java.time.format.FormatStyle; import java.util.OptionalDouble; import java.util.function.BiFunction; +import java.util.function.LongFunction; import java.util.stream.LongStream; import name.abuchen.portfolio.math.AllTimeHigh; @@ -307,40 +308,29 @@ public enum WidgetFactory WEBSITE(Messages.Website, Messages.LabelCommon, BrowserWidget::new), - DISTANCE_TO_ATH(Messages.SecurityListFilterDistanceFromAth, Messages.LabelCommon, // + DISTANCE_TO_ATH(Messages.SecurityListFilterDistanceFromAth, Messages.ClientEditorLabelPerformance, // (widget, data) -> IndicatorWidget.create(widget, data) // .with(Values.Percent2) // .with((ds, period) -> { - if (!(ds.getInstance() instanceof Security)) - return (double) 0; - - Security security = (Security) ds.getInstance(); - - Double distance = new AllTimeHigh(security, period).getDistance(); - if (distance == null) - return (double) 0; + PerformanceIndex index = data.calculate(ds, period); + AllTimeHigh ath = new AllTimeHigh(index); - return distance; + return (ath.getValue() != null) ? ath.getDistance() : 0; }) // - .withBenchmarkDataSeries(false) // - .with(ds -> ds.getInstance() instanceof Security) // + .withBenchmarkDataSeries(true) // .withColoredValues(false) // .withTooltip((ds, period) -> { - if (!(ds.getInstance() instanceof Security)) - return null; + PerformanceIndex index = data.calculate(ds, period); + AllTimeHigh ath = new AllTimeHigh(index); - Security security = (Security) ds.getInstance(); - AllTimeHigh ath = new AllTimeHigh(security, period); - if (ath.getValue() == null) - return null; + LongFunction formatter = s -> ds.isBenchmark() ? Values.Quote.format(s) + : Values.Money.format(Money.of(index.getCurrency(), s)); return MessageFormat.format(Messages.TooltipAllTimeHigh, period.getDays(), Values.Date.format(ath.getDate()), - ath.getValue() / Values.Quote.divider(), - security.getSecurityPrice(LocalDate.now()).getValue() - / Values.Quote.divider(), - Values.Date.format(security.getSecurityPrice(LocalDate.now()) - .getDate())); + formatter.apply(ath.getValue()), + formatter.apply(ath.getLatestValue()), + Values.Date.format(period.getEnd())); }) // .build()), diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/math/AllTimeHigh.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/math/AllTimeHigh.java index 66d481a0dc..9babb30011 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/math/AllTimeHigh.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/math/AllTimeHigh.java @@ -1,47 +1,55 @@ package name.abuchen.portfolio.math; import java.time.LocalDate; -import java.util.Comparator; -import java.util.Objects; -import java.util.Optional; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import name.abuchen.portfolio.model.Security; -import name.abuchen.portfolio.model.SecurityPrice; +import name.abuchen.portfolio.snapshot.PerformanceIndex; import name.abuchen.portfolio.util.Interval; public class AllTimeHigh { - private Security security; - private Interval interval; + private List dates = new ArrayList<>(); + private List values = new ArrayList<>(); private Long athValue; private LocalDate athDate; - private Double athDistanceInPercent; - public AllTimeHigh(Security security, Interval interval) + public AllTimeHigh(LocalDate[] dates, long[] values) { - this.security = security; - this.interval = Objects.requireNonNull(interval); + this.dates = Arrays.stream(dates).toList(); + this.values = Arrays.stream(values).boxed().toList(); this.calculate(); } - private void calculate() + public AllTimeHigh(PerformanceIndex index) { - if (security == null || interval == null) - return; + this(index.getDates(), index.getTotals()); + } + + public AllTimeHigh(Security security, Interval interval) + { + security.getPricesIncludingLatest().stream().filter(price -> interval.contains(price.getDate())) + .forEach(price -> { + this.dates.add(price.getDate()); + this.values.add(price.getValue()); + }); - Optional max = security.getPricesIncludingLatest().stream() // - .filter(p -> interval.contains(p.getDate())) // - .max(Comparator.comparing(SecurityPrice::getValue)); + this.calculate(); + } - if (!max.isPresent()) + private void calculate() + { + if (this.values.isEmpty() || this.dates.isEmpty() || this.dates.size() != this.values.size()) return; - SecurityPrice latest = security.getSecurityPrice(interval.getEnd()); + this.athValue = Collections.max(this.values); - this.athValue = max.get().getValue(); - this.athDate = max.get().getDate(); - this.athDistanceInPercent = (latest.getValue() - max.get().getValue()) / (double) max.get().getValue(); + int index = this.values.indexOf(this.athValue); + this.athDate = this.dates.get(index); } public Long getValue() @@ -49,9 +57,17 @@ public Long getValue() return this.athValue; } + public Long getLatestValue() + { + return this.values.get(this.values.size() - 1); + } + public Double getDistance() { - return this.athDistanceInPercent; + if (this.athValue == null) + return null; + + return (this.getLatestValue() - this.athValue) / (double) this.athValue; } public LocalDate getDate()