Wine & Collectibles Investment Profitability Estimator

Estimate the potential financial outcome of investing in alternative assets like fine wine, art, or other collectibles.

** IMPORTANT - PLEASE READ **
  • This estimator is for **illustrative and educational purposes ONLY**.
  • Investing in wine and collectibles is often speculative and carries significant risks including authenticity, damage, changing market tastes, illiquidity, and high transaction/holding costs.
  • Valuations can be subjective and require expert appraisal. This tool relies on **your inputted values**.
  • This tool **DOES NOT provide financial or investment advice** and its results are not guarantees of future performance.
  • Always conduct thorough due diligence, consult with experts in the specific collectible field, and consider seeking advice from a qualified financial advisor before investing in such assets.

Investment & Cost Details

$
$

Annual Holding Costs

$
$
$

Sale Details

$

${this.formatPercent(annualizedRoiCagr)}

`; this.elements.resultsSection.style.display = 'block'; }, generatePDF: async function() { if (!window.jspdf || !window.html2canvas || Object.keys(this.results).length === 0 || !this.results.calculations) { alert('Please estimate profitability first to generate a PDF.'); return; } await new Promise(resolve => setTimeout(resolve, 50)); const i = this.results.inputs; const c = this.results.calculations; const pdfExportContainer = document.createElement('div'); pdfExportContainer.classList.add('cpe-pdf-export-content'); pdfExportContainer.style.width = '800px'; let pdfHtml = `

Collectible Investment Profitability Report

`; pdfHtml += `
Reminder: This is an illustrative estimation based on your inputs. Investing in collectibles is speculative and carries risks. This is NOT financial advice. DYOR and consult experts.
`; pdfHtml += `

Item: ${i.itemName}

`; pdfHtml += `

Inputs:

`; pdfHtml += `
Purchase Price: ${this.formatCurrency(i.purchasePrice, false)}
`; pdfHtml += `
Initial Acquisition Costs: ${this.formatCurrency(i.acquisitionCosts, false)}
`; pdfHtml += `
Holding Period: ${i.holdingPeriodYears} years
`; pdfHtml += `
Annual Storage Cost: ${this.formatCurrency(i.annualStorage, false)}
`; pdfHtml += `
Annual Insurance Cost: ${this.formatCurrency(i.annualInsurance, false)}
`; pdfHtml += `
Avg. Annual Maintenance: ${this.formatCurrency(i.annualMaintenance, false)}
`; pdfHtml += `
Expected/Actual Sale Price: ${this.formatCurrency(i.salePrice, false)}
`; pdfHtml += `
Selling Costs: ${i.sellingCostType === 'percent' ? this.formatPercent(i.sellingCostVal).replace(' %','') + '% of Sale Price' : this.formatCurrency(i.sellingCostVal, false) + ' Fixed'}
`; pdfHtml += `
`; pdfHtml += `

Profitability Estimation:

`; pdfHtml += `
Total Initial Investment Outlay: ${this.formatCurrency(c.totalInitialOutlay, false)}
`; pdfHtml += `
Total Holding Costs (over period): ${this.formatCurrency(c.totalHoldingCostsOverPeriod, false)}
`; pdfHtml += `
Selling Costs Amount: ${this.formatCurrency(c.sellingCostsAmount, false)}
`; pdfHtml += `
Net Proceeds from Sale: ${this.formatCurrency(c.netProceedsFromSale, false)}
`; pdfHtml += `
`; pdfHtml += `
Total Net Profit: ${this.formatCurrency(c.netProfit, false)}
`; pdfHtml += `
Total ROI: ${this.formatPercent(c.totalRoi).replace(' %','')}
`; pdfHtml += `
Annualized ROI (CAGR): ${this.formatPercent(c.annualizedRoiCagr).replace(' %','')}
`; pdfHtml += `
`; pdfExportContainer.innerHTML = pdfHtml; document.body.appendChild(pdfExportContainer); try { const canvas = await html2canvas(pdfExportContainer, { scale: 1.5, useCORS: true, logging: false, windowWidth: pdfExportContainer.scrollWidth }); document.body.removeChild(pdfExportContainer); const imgData = canvas.toDataURL('image/png'); const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = pdf.internal.pageSize.getHeight(); const imgProps = pdf.getImageProperties(imgData); let imgFinalWidth = pdfWidth - 40; let imgFinalHeight = (imgProps.height * imgFinalWidth) / imgProps.width; if (imgFinalHeight > pdfHeight - 40) { imgFinalHeight = pdfHeight - 40; imgFinalWidth = (imgProps.width * imgFinalHeight) / imgProps.height; } let currentY = 20; let heightProcessed = 0; const pageMargin = 20; const pageHeightAvailable = pdfHeight - 2 * pageMargin; while(heightProcessed < canvas.height) { let pageSegmentHeightOnCanvas = Math.min(canvas.height - heightProcessed, (pageHeightAvailable / imgFinalHeight) * canvas.height ); if (pageSegmentHeightOnCanvas <=0) break; const segmentCanvas = document.createElement('canvas'); segmentCanvas.width = canvas.width; segmentCanvas.height = pageSegmentHeightOnCanvas; const sctx = segmentCanvas.getContext('2d'); sctx.drawImage(canvas, 0, heightProcessed, canvas.width, pageSegmentHeightOnCanvas, 0, 0, canvas.width, pageSegmentHeightOnCanvas); const segmentImgData = segmentCanvas.toDataURL('image/png'); const segmentImgPropsPdf = pdf.getImageProperties(segmentImgData); let segmentRenderWidth = pdfWidth - 2 * pageMargin; let segmentRenderHeight = (segmentImgPropsPdf.height * segmentRenderWidth) / segmentImgPropsPdf.width; if(segmentRenderHeight > pageHeightAvailable) { segmentRenderHeight = pageHeightAvailable; segmentRenderWidth = (segmentImgPropsPdf.width * segmentRenderHeight) / segmentImgPropsPdf.height; } if(heightProcessed > 0) pdf.addPage(); pdf.addImage(segmentImgData, 'PNG', pageMargin, pageMargin, segmentRenderWidth, segmentRenderHeight); heightProcessed += pageSegmentHeightOnCanvas; } pdf.save('Collectible_Profitability_Estimation.pdf'); } catch (error) { console.error("Error generating PDF:", error); alert("An error occurred while generating PDF."); if (document.body.contains(pdfExportContainer)) document.body.removeChild(pdfExportContainer); } } }; document.addEventListener('DOMContentLoaded', function() { cpeApp.init(); });
Scroll to Top