mirror of https://github.com/ghostfolio/ghostfolio
committed by
GitHub
14 changed files with 686 additions and 613 deletions
@ -0,0 +1,181 @@ |
|||
<div class="container"> |
|||
<div class="mb-3 row"> |
|||
<div class="col-sm"> |
|||
<a [routerLink]="['/']"><gf-logo /></a> |
|||
</div> |
|||
<div class="col-sm"> |
|||
<div class="h6 mt-2" i18n>Personal Finance</div> |
|||
<ul class="list-unstyled"> |
|||
@if (hasPermissionToAccessFearAndGreedIndex) { |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkMarkets">Markets</a> |
|||
</li> |
|||
} |
|||
<li><a i18n [routerLink]="routerLinkResources">Resources</a></li> |
|||
</ul> |
|||
</div> |
|||
<div class="col-sm"> |
|||
<div class="h6 mt-2">Ghostfolio</div> |
|||
<ul class="list-unstyled"> |
|||
<li><a i18n [routerLink]="routerLinkAbout">About</a></li> |
|||
@if (hasPermissionForSubscription) { |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkBlog">Blog</a> |
|||
</li> |
|||
} |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkAboutChangelog">Changelog</a> |
|||
</li> |
|||
<li><a i18n [routerLink]="routerLinkFeatures">Features</a></li> |
|||
@if (hasPermissionForSubscription) { |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkFaq" |
|||
>Frequently Asked Questions (FAQ)</a |
|||
> |
|||
</li> |
|||
} |
|||
@if (!hasPermissionForSubscription) { |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkAboutLicense">License</a> |
|||
</li> |
|||
} |
|||
@if (hasPermissionForStatistics) { |
|||
<li> |
|||
<a [routerLink]="routerLinkOpenStartup">Open Startup</a> |
|||
</li> |
|||
} |
|||
@if (hasPermissionForSubscription) { |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkPricing">Pricing</a> |
|||
</li> |
|||
} |
|||
@if (hasPermissionForSubscription) { |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkAboutPrivacyPolicy" |
|||
>Privacy Policy</a |
|||
> |
|||
</li> |
|||
} |
|||
@if (hasPermissionForSubscription) { |
|||
<li> |
|||
<a i18n [routerLink]="routerLinkAboutTermsOfService" |
|||
>Terms of Service</a |
|||
> |
|||
</li> |
|||
} |
|||
@if (hasPermissionForSubscription) { |
|||
<li> |
|||
<a |
|||
class="align-items-baseline d-flex" |
|||
href="https://status.ghostfol.io" |
|||
target="_blank" |
|||
title="Ghostfolio Status" |
|||
>Status<ion-icon class="ml-1" name="open-outline" |
|||
/></a> |
|||
</li> |
|||
} |
|||
</ul> |
|||
</div> |
|||
<div class="col-sm"> |
|||
<div class="h6 mt-2" i18n>Community</div> |
|||
<ul class="list-unstyled"> |
|||
<li> |
|||
<a |
|||
class="align-items-baseline d-flex" |
|||
href="https://github.com/ghostfolio/ghostfolio" |
|||
target="_blank" |
|||
title="Find Ghostfolio on GitHub" |
|||
>GitHub<ion-icon class="ml-1" name="open-outline" |
|||
/></a> |
|||
</li> |
|||
<li> |
|||
<a |
|||
class="align-items-baseline d-flex" |
|||
href="https://linkedin.com/company/ghostfolio" |
|||
target="_blank" |
|||
title="Follow Ghostfolio on LinkedIn" |
|||
>LinkedIn<ion-icon class="ml-1" name="open-outline" |
|||
/></a> |
|||
</li> |
|||
<li> |
|||
<a |
|||
class="align-items-baseline d-flex" |
|||
href="https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg" |
|||
target="_blank" |
|||
title="Join the Ghostfolio Slack community" |
|||
>Slack<ion-icon class="ml-1" name="open-outline" |
|||
/></a> |
|||
</li> |
|||
<li> |
|||
<a |
|||
class="align-items-baseline d-flex" |
|||
href="https://x.com/ghostfolio_" |
|||
target="_blank" |
|||
title="Follow Ghostfolio on X (formerly Twitter)" |
|||
>X (formerly Twitter)<ion-icon class="ml-1" name="open-outline" |
|||
/></a> |
|||
</li> |
|||
<li> </li> |
|||
<!-- |
|||
<li> |
|||
<a href="../ca" title="Ghostfolio en català">Català</a> |
|||
</li> |
|||
--> |
|||
<li> |
|||
<a href="../zh" title="Ghostfolio in Chinese">Chinese</a> |
|||
</li> |
|||
<li> |
|||
<a href="../de" title="Ghostfolio in Deutsch">Deutsch</a> |
|||
</li> |
|||
<li> |
|||
<a href="../en" title="Ghostfolio in English">English</a> |
|||
</li> |
|||
<li> |
|||
<a href="../es" title="Ghostfolio in Español">Español</a> |
|||
</li> |
|||
<li> |
|||
<a href="../fr" title="Ghostfolio en Français">Français</a> |
|||
</li> |
|||
<li> |
|||
<a href="../it" title="Ghostfolio in Italiano">Italiano</a> |
|||
</li> |
|||
<li> |
|||
<a href="../nl" title="Ghostfolio in Nederlands">Nederlands</a> |
|||
</li> |
|||
<li> |
|||
<a href="../pl" title="Ghostfolio in Polski">Polski</a> |
|||
</li> |
|||
<li> |
|||
<a href="../pt" title="Ghostfolio in Português">Português</a> |
|||
</li> |
|||
<li> |
|||
<a href="../tr" title="Ghostfolio in Türkçe">Türkçe</a> |
|||
</li> |
|||
<!-- |
|||
<li> |
|||
<a href="../uk" title="Ghostfolio in Українська">Українська</a> |
|||
</li> |
|||
--> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
<div class="mb-2 row text-center"> |
|||
<div class="col"> |
|||
© 2021 - {{ currentYear }} |
|||
<a href="https://ghostfol.io">Ghostfolio</a> |
|||
</div> |
|||
</div> |
|||
<div class="row text-center text-muted"> |
|||
<div class="col"> |
|||
<small class="d-block" i18n |
|||
>The risk of loss in trading can be substantial. It is not advisable to |
|||
invest money you may need in the short term.</small |
|||
> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container d-none d-md-block mt-5"> |
|||
<div class="row justify-content-center"> |
|||
<div class="font-weight-bold line-height-1 logotype">Ghostfolio</div> |
|||
</div> |
|||
</div> |
|||
@ -0,0 +1,16 @@ |
|||
:host { |
|||
background-color: rgba(var(--palette-foreground-text), 0.05); |
|||
display: block; |
|||
font-size: 90%; |
|||
|
|||
.logotype { |
|||
font-size: 13vw; |
|||
letter-spacing: -0.03em; |
|||
margin-bottom: -5svw; |
|||
opacity: 0.05; |
|||
} |
|||
} |
|||
|
|||
:host-context(.theme-dark) { |
|||
background-color: rgba(var(--palette-foreground-text-dark), 0.05); |
|||
} |
|||
@ -0,0 +1,74 @@ |
|||
import { InfoItem, User } from '@ghostfolio/common/interfaces'; |
|||
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; |
|||
import { publicRoutes } from '@ghostfolio/common/routes/routes'; |
|||
import { GfLogoComponent } from '@ghostfolio/ui/logo'; |
|||
|
|||
import { CommonModule } from '@angular/common'; |
|||
import { |
|||
ChangeDetectionStrategy, |
|||
Component, |
|||
CUSTOM_ELEMENTS_SCHEMA, |
|||
Input, |
|||
OnChanges |
|||
} from '@angular/core'; |
|||
import { RouterModule } from '@angular/router'; |
|||
import { IonIcon } from '@ionic/angular/standalone'; |
|||
import { addIcons } from 'ionicons'; |
|||
import { openOutline } from 'ionicons/icons'; |
|||
|
|||
@Component({ |
|||
changeDetection: ChangeDetectionStrategy.OnPush, |
|||
imports: [CommonModule, GfLogoComponent, IonIcon, RouterModule], |
|||
schemas: [CUSTOM_ELEMENTS_SCHEMA], |
|||
selector: 'gf-footer', |
|||
styleUrls: ['./footer.component.scss'], |
|||
templateUrl: './footer.component.html' |
|||
}) |
|||
export class GfFooterComponent implements OnChanges { |
|||
@Input() public info: InfoItem; |
|||
@Input() public user: User; |
|||
|
|||
public currentYear = new Date().getFullYear(); |
|||
public hasPermissionForStatistics: boolean; |
|||
public hasPermissionForSubscription: boolean; |
|||
public hasPermissionToAccessFearAndGreedIndex: boolean; |
|||
public routerLinkAbout = publicRoutes.about.routerLink; |
|||
public routerLinkAboutChangelog = |
|||
publicRoutes.about.subRoutes.changelog.routerLink; |
|||
public routerLinkAboutLicense = |
|||
publicRoutes.about.subRoutes.license.routerLink; |
|||
public routerLinkAboutPrivacyPolicy = |
|||
publicRoutes.about.subRoutes.privacyPolicy.routerLink; |
|||
public routerLinkAboutTermsOfService = |
|||
publicRoutes.about.subRoutes.termsOfService.routerLink; |
|||
public routerLinkBlog = publicRoutes.blog.routerLink; |
|||
public routerLinkFaq = publicRoutes.faq.routerLink; |
|||
public routerLinkFeatures = publicRoutes.features.routerLink; |
|||
public routerLinkMarkets = publicRoutes.markets.routerLink; |
|||
public routerLinkOpenStartup = publicRoutes.openStartup.routerLink; |
|||
public routerLinkPricing = publicRoutes.pricing.routerLink; |
|||
public routerLinkResources = publicRoutes.resources.routerLink; |
|||
|
|||
public constructor() { |
|||
addIcons({ |
|||
openOutline |
|||
}); |
|||
} |
|||
|
|||
public ngOnChanges() { |
|||
this.hasPermissionForStatistics = hasPermission( |
|||
this.info?.globalPermissions, |
|||
permissions.enableStatistics |
|||
); |
|||
|
|||
this.hasPermissionForSubscription = hasPermission( |
|||
this.info?.globalPermissions, |
|||
permissions.enableSubscription |
|||
); |
|||
|
|||
this.hasPermissionToAccessFearAndGreedIndex = hasPermission( |
|||
this.info?.globalPermissions, |
|||
permissions.enableFearAndGreedIndex |
|||
); |
|||
} |
|||
} |
|||
@ -0,0 +1,62 @@ |
|||
import { CommonModule } from '@angular/common'; |
|||
import { MatButtonModule } from '@angular/material/button'; |
|||
import { MatDialogModule } from '@angular/material/dialog'; |
|||
import { MatPaginatorModule } from '@angular/material/paginator'; |
|||
import { MatSortModule } from '@angular/material/sort'; |
|||
import { MatTableModule } from '@angular/material/table'; |
|||
import { moduleMetadata } from '@storybook/angular'; |
|||
import type { Meta, StoryObj } from '@storybook/angular'; |
|||
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
|||
|
|||
import { GfEntityLogoComponent } from '../entity-logo'; |
|||
import { holdings } from '../mocks/holdings'; |
|||
import { GfValueComponent } from '../value'; |
|||
import { GfHoldingsTableComponent } from './holdings-table.component'; |
|||
|
|||
export default { |
|||
title: 'Holdings Table', |
|||
component: GfHoldingsTableComponent, |
|||
decorators: [ |
|||
moduleMetadata({ |
|||
imports: [ |
|||
CommonModule, |
|||
GfEntityLogoComponent, |
|||
GfValueComponent, |
|||
MatButtonModule, |
|||
MatDialogModule, |
|||
MatPaginatorModule, |
|||
MatSortModule, |
|||
MatTableModule, |
|||
NgxSkeletonLoaderModule |
|||
] |
|||
}) |
|||
] |
|||
} as Meta<GfHoldingsTableComponent>; |
|||
|
|||
type Story = StoryObj<GfHoldingsTableComponent>; |
|||
|
|||
export const Loading: Story = { |
|||
args: { |
|||
holdings: undefined, |
|||
baseCurrency: 'USD', |
|||
deviceType: 'desktop', |
|||
hasPermissionToOpenDetails: false, |
|||
hasPermissionToShowQuantities: true, |
|||
hasPermissionToShowValues: true, |
|||
locale: 'en-US', |
|||
pageSize: Number.MAX_SAFE_INTEGER |
|||
} |
|||
}; |
|||
|
|||
export const Default: Story = { |
|||
args: { |
|||
holdings, |
|||
baseCurrency: 'USD', |
|||
deviceType: 'desktop', |
|||
hasPermissionToOpenDetails: false, |
|||
hasPermissionToShowQuantities: true, |
|||
hasPermissionToShowValues: true, |
|||
locale: 'en-US', |
|||
pageSize: Number.MAX_SAFE_INTEGER |
|||
} |
|||
}; |
|||
@ -0,0 +1,293 @@ |
|||
import { PortfolioPosition } from '@ghostfolio/common/interfaces'; |
|||
|
|||
export const holdings: PortfolioPosition[] = [ |
|||
{ |
|||
allocationInPercentage: 0.042990776363386086, |
|||
assetClass: 'EQUITY' as any, |
|||
assetClassLabel: 'Equity', |
|||
assetSubClass: 'STOCK' as any, |
|||
assetSubClassLabel: 'Stock', |
|||
countries: [ |
|||
{ |
|||
code: 'US', |
|||
weight: 1, |
|||
continent: 'North America', |
|||
name: 'United States' |
|||
} |
|||
], |
|||
currency: 'USD', |
|||
dataSource: 'YAHOO' as any, |
|||
dateOfFirstActivity: new Date('2021-12-01T00:00:00.000Z'), |
|||
dividend: 0, |
|||
grossPerformance: 3856, |
|||
grossPerformancePercent: 0.46047289228564603, |
|||
grossPerformancePercentWithCurrencyEffect: 0.46047289228564603, |
|||
grossPerformanceWithCurrencyEffect: 3856, |
|||
holdings: [], |
|||
investment: 8374, |
|||
marketPrice: 244.6, |
|||
name: 'Apple Inc', |
|||
netPerformance: 3855, |
|||
netPerformancePercent: 0.460353475041796, |
|||
netPerformancePercentWithCurrencyEffect: 0.036440677966101696, |
|||
netPerformanceWithCurrencyEffect: 430, |
|||
quantity: 50, |
|||
sectors: [ |
|||
{ |
|||
name: 'Technology', |
|||
weight: 1 |
|||
} |
|||
], |
|||
symbol: 'AAPL', |
|||
tags: [], |
|||
transactionCount: 1, |
|||
url: 'https://www.apple.com', |
|||
valueInBaseCurrency: 12230 |
|||
}, |
|||
{ |
|||
allocationInPercentage: 0.02377401948293552, |
|||
assetClass: 'EQUITY' as any, |
|||
assetClassLabel: 'Equity', |
|||
assetSubClass: 'STOCK' as any, |
|||
assetSubClassLabel: 'Stock', |
|||
countries: [ |
|||
{ |
|||
code: 'DE', |
|||
weight: 1, |
|||
continent: 'Europe', |
|||
name: 'Germany' |
|||
} |
|||
], |
|||
currency: 'EUR', |
|||
dataSource: 'YAHOO' as any, |
|||
dateOfFirstActivity: new Date('2021-04-23T00:00:00.000Z'), |
|||
dividend: 192, |
|||
grossPerformance: 2226.700251889169, |
|||
grossPerformancePercent: 0.49083842309827874, |
|||
grossPerformancePercentWithCurrencyEffect: 0.29306136948826367, |
|||
grossPerformanceWithCurrencyEffect: 1532.8272791336772, |
|||
holdings: [], |
|||
investment: 4536.523929471033, |
|||
marketPrice: 322.2, |
|||
name: 'Allianz SE', |
|||
netPerformance: 2222.2921914357685, |
|||
netPerformancePercent: 0.48986674069961134, |
|||
netPerformancePercentWithCurrencyEffect: 0.034489367670592026, |
|||
netPerformanceWithCurrencyEffect: 225.48257403052068, |
|||
quantity: 20, |
|||
sectors: [ |
|||
{ |
|||
name: 'Financial Services', |
|||
weight: 1 |
|||
} |
|||
], |
|||
symbol: 'ALV.DE', |
|||
tags: [], |
|||
transactionCount: 2, |
|||
url: 'https://www.allianz.com', |
|||
valueInBaseCurrency: 6763.224181360202 |
|||
}, |
|||
{ |
|||
allocationInPercentage: 0.08038536990007467, |
|||
assetClass: 'EQUITY' as any, |
|||
assetClassLabel: 'Equity', |
|||
assetSubClass: 'STOCK' as any, |
|||
assetSubClassLabel: 'Stock', |
|||
countries: [ |
|||
{ |
|||
code: 'US', |
|||
weight: 1, |
|||
continent: 'North America', |
|||
name: 'United States' |
|||
} |
|||
], |
|||
currency: 'USD', |
|||
dataSource: 'YAHOO' as any, |
|||
dateOfFirstActivity: new Date('2018-10-01T00:00:00.000Z'), |
|||
dividend: 0, |
|||
grossPerformance: 12758.05, |
|||
grossPerformancePercent: 1.2619300787837724, |
|||
grossPerformancePercentWithCurrencyEffect: 1.2619300787837724, |
|||
grossPerformanceWithCurrencyEffect: 12758.05, |
|||
holdings: [], |
|||
investment: 10109.95, |
|||
marketPrice: 228.68, |
|||
name: 'Amazon.com, Inc.', |
|||
netPerformance: 12677.26, |
|||
netPerformancePercent: 1.253938941339967, |
|||
netPerformancePercentWithCurrencyEffect: -0.037866008722316276, |
|||
netPerformanceWithCurrencyEffect: -899.99926757812, |
|||
quantity: 100, |
|||
sectors: [ |
|||
{ |
|||
name: 'Consumer Discretionary', |
|||
weight: 1 |
|||
} |
|||
], |
|||
symbol: 'AMZN', |
|||
tags: [], |
|||
transactionCount: 1, |
|||
url: 'https://www.aboutamazon.com', |
|||
valueInBaseCurrency: 22868 |
|||
}, |
|||
{ |
|||
allocationInPercentage: 0.19216416482928922, |
|||
assetClass: 'LIQUIDITY' as any, |
|||
assetClassLabel: 'Liquidity', |
|||
assetSubClass: 'CRYPTOCURRENCY' as any, |
|||
assetSubClassLabel: 'Cryptocurrency', |
|||
countries: [], |
|||
currency: 'USD', |
|||
dataSource: 'COINGECKO' as any, |
|||
dateOfFirstActivity: new Date('2017-08-16T00:00:00.000Z'), |
|||
dividend: 0, |
|||
grossPerformance: 52666.7898248, |
|||
grossPerformancePercent: 26.333394912400003, |
|||
grossPerformancePercentWithCurrencyEffect: 26.333394912400003, |
|||
grossPerformanceWithCurrencyEffect: 52666.7898248, |
|||
holdings: [], |
|||
investment: 1999.9999999999998, |
|||
marketPrice: 97364, |
|||
name: 'Bitcoin', |
|||
netPerformance: 52636.8898248, |
|||
netPerformancePercent: 26.3184449124, |
|||
netPerformancePercentWithCurrencyEffect: -0.04760906442310894, |
|||
netPerformanceWithCurrencyEffect: -2732.737808972287, |
|||
quantity: 0.5614682, |
|||
sectors: [], |
|||
symbol: 'bitcoin', |
|||
tags: [], |
|||
transactionCount: 1, |
|||
url: null, |
|||
valueInBaseCurrency: 54666.7898248 |
|||
}, |
|||
{ |
|||
allocationInPercentage: 0.04307127421937313, |
|||
assetClass: 'EQUITY' as any, |
|||
assetClassLabel: 'Equity', |
|||
assetSubClass: 'STOCK' as any, |
|||
assetSubClassLabel: 'Stock', |
|||
countries: [ |
|||
{ |
|||
code: 'US', |
|||
weight: 1, |
|||
continent: 'North America', |
|||
name: 'United States' |
|||
} |
|||
], |
|||
currency: 'USD', |
|||
dataSource: 'YAHOO' as any, |
|||
dateOfFirstActivity: new Date('2023-01-03T00:00:00.000Z'), |
|||
dividend: 0, |
|||
grossPerformance: 5065.5, |
|||
grossPerformancePercent: 0.7047750229568411, |
|||
grossPerformancePercentWithCurrencyEffect: 0.7047750229568411, |
|||
grossPerformanceWithCurrencyEffect: 5065.5, |
|||
holdings: [], |
|||
investment: 7187.4, |
|||
marketPrice: 408.43, |
|||
name: 'Microsoft Corporation', |
|||
netPerformance: 5065.5, |
|||
netPerformancePercent: 0.7047750229568411, |
|||
netPerformancePercentWithCurrencyEffect: -0.015973588391056275, |
|||
netPerformanceWithCurrencyEffect: -198.899926757814, |
|||
quantity: 30, |
|||
sectors: [ |
|||
{ |
|||
name: 'Technology', |
|||
weight: 1 |
|||
} |
|||
], |
|||
symbol: 'MSFT', |
|||
tags: [], |
|||
transactionCount: 1, |
|||
url: 'https://www.microsoft.com', |
|||
valueInBaseCurrency: 12252.9 |
|||
}, |
|||
{ |
|||
allocationInPercentage: 0.18762679306394897, |
|||
assetClass: 'EQUITY' as any, |
|||
assetClassLabel: 'Equity', |
|||
assetSubClass: 'STOCK' as any, |
|||
assetSubClassLabel: 'Stock', |
|||
countries: [ |
|||
{ |
|||
code: 'US', |
|||
weight: 1, |
|||
continent: 'North America', |
|||
name: 'United States' |
|||
} |
|||
], |
|||
currency: 'USD', |
|||
dataSource: 'YAHOO' as any, |
|||
dateOfFirstActivity: new Date('2017-01-03T00:00:00.000Z'), |
|||
dividend: 0, |
|||
grossPerformance: 51227.500000005, |
|||
grossPerformancePercent: 23.843379101756675, |
|||
grossPerformancePercentWithCurrencyEffect: 23.843379101756675, |
|||
grossPerformanceWithCurrencyEffect: 51227.500000005, |
|||
holdings: [], |
|||
investment: 2148.499999995, |
|||
marketPrice: 355.84, |
|||
name: 'Tesla, Inc.', |
|||
netPerformance: 51197.500000005, |
|||
netPerformancePercent: 23.829415871596066, |
|||
netPerformancePercentWithCurrencyEffect: -0.12051410125545206, |
|||
netPerformanceWithCurrencyEffect: -7314.00091552734, |
|||
quantity: 150, |
|||
sectors: [ |
|||
{ |
|||
name: 'Consumer Discretionary', |
|||
weight: 1 |
|||
} |
|||
], |
|||
symbol: 'TSLA', |
|||
tags: [], |
|||
transactionCount: 1, |
|||
url: 'https://www.tesla.com', |
|||
valueInBaseCurrency: 53376 |
|||
}, |
|||
{ |
|||
allocationInPercentage: 0.053051250766657634, |
|||
assetClass: 'EQUITY' as any, |
|||
assetClassLabel: 'Equity', |
|||
assetSubClass: 'ETF' as any, |
|||
assetSubClassLabel: 'ETF', |
|||
countries: [ |
|||
{ |
|||
code: 'US', |
|||
weight: 1, |
|||
continent: 'North America', |
|||
name: 'United States' |
|||
} |
|||
], |
|||
currency: 'USD', |
|||
dataSource: 'YAHOO' as any, |
|||
dateOfFirstActivity: new Date('2019-03-01T00:00:00.000Z'), |
|||
dividend: 0, |
|||
grossPerformance: 6845.8, |
|||
grossPerformancePercent: 1.0164758094605268, |
|||
grossPerformancePercentWithCurrencyEffect: 1.0164758094605268, |
|||
grossPerformanceWithCurrencyEffect: 6845.8, |
|||
holdings: [], |
|||
investment: 8246.2, |
|||
marketPrice: 301.84, |
|||
name: 'Vanguard Total Stock Market Index Fund ETF Shares', |
|||
netPerformance: 6746.3, |
|||
netPerformancePercent: 1.0017018833976383, |
|||
netPerformancePercentWithCurrencyEffect: 0.01085061564051406, |
|||
netPerformanceWithCurrencyEffect: 161.99969482422, |
|||
quantity: 50, |
|||
sectors: [ |
|||
{ |
|||
name: 'Equity', |
|||
weight: 1 |
|||
} |
|||
], |
|||
symbol: 'VTI', |
|||
tags: [], |
|||
transactionCount: 5, |
|||
url: 'https://www.vanguard.com', |
|||
valueInBaseCurrency: 15092 |
|||
} |
|||
]; |
|||
Loading…
Reference in new issue