{"version":3,"sources":["img/Background-Redes.png","img/GIF.gif","presenters/alert/index.jsx","presenters/button/index.jsx","presenters/doghnut-chart.jsx","presenters/hero/index.jsx","presenters/segment/index.jsx","presenters/table/index.jsx","asset-classes.jsx","default-allocations.jsx","pages/main/profile-allocation.jsx","pages/main/profile-builder.jsx","allocation-classes.jsx","redux/actions/parameters.jsx","pages/main/index.jsx","utils/statistics.jsx","utils/api.js","utils/portfolio.jsx","utils/backtester.jsx","utils/marektdata.jsx","utils/portfolio-to-csv.jsx","pages/result/performance-chart.jsx","pages/result/invest-banner.jsx","pages/result/performance-table.jsx","pages/result/statistics-table.jsx","pages/result/portfolio-composition.jsx","img/loading_pandhora.gif","pages/result/disclaimer.jsx","pages/result/index.jsx","img/linkedin.png","img/whatsapp.png","img/telegram.png","redux/reducers/parameters.jsx","redux/reducers/index.jsx","redux/store.jsx","pages/page/index.jsx","App.js","reportWebVitals.js","index.js"],"names":["Alert","children","className","role","style","position","width","marginTop","Button","onClick","outlined","color","handleClick","e","originalDoughnutDraw","Chart","controllers","doughnut","prototype","draw","helpers","extend","apply","this","arguments","chart","ctx","height","fontSize","toFixed","font","textBaseline","text","config","data","Math","round","measureText","DoghnutChart","props","Hero","Segment","Table","Head","Body","Tr","Th","scope","Td","ASSET_CLASSES","pandhoraEssencial","name","dbName","colorName","fundId","pandhoraLb","rendaFixa","altName","indexId","ipca","multimercado","rendaVariavel","rendaVariavelGlobal","dolar","DEFAULT_ALLOCATIONS","Agressiva","Moderada","Conservadora","ProfileAllocation","visibility","_allocationSum","allocation","okLogo","onAllocationChange","alt","src","process","allocationSum","Object","keys","reduce","sum","key","assetNotPandhora","assign","allocationNotPandhora","essencial","lb","colors","map","k","labels","values","options","cutoutPercentage","legend","display","tooltips","callbacks","label","tooltipItem","dataset","datasets","datasetIndex","percentage","index","backgroundColor","prev","curr","renderAllocationChart","Fragment","Slider","min","max","value","onChange","undefined","step","orientation","onMouseUp","ProfileBuilder","assetClass","paddingTop","newAllocation","handleAllocationChange","renderSliders","ALLOCATION_CLASSES","ParameterActions","ConnectedMain","connect","state","ownProps","parameters","dispatch","setParameters","params","type","payload","history","useHistory","useState","setError","launchFirstTime","setlaunchFirstTime","location","useLocation","param","queryString","parse","search","scrollPageUp","window","scrollTo","scrollToRef","ref","current","offsetTop","myRef","useRef","useEffect","reload","setAllocation","allocationType","setAllocationType","portfolioWithPandhora","pandhoraSum","entries","formatedAllocation","_allocation","fAllocation","forEach","postAllocation","a","url","axios","post","result","status","console","error","push","id","to","aria-label","handleAllocationChangeDefault","background","Statistics","cagr","returnSeries","dates","nDays","length","cumReturn","r","date","pow","mean","returns","n","elem","stdevp","mu","sqrt","stdevs","volp","vols","quotasSeries","base","quotas","prevQuota","i","quota","sharpe","benchmarkSeries","benchmarkDates","filter","d","includes","Error","alphaSeries","cagrReturns","cagrBenchmark","volAlpha","maxDrawdown","drawdowns","returnOnPeriod","period","Date","lowerDates","startDate","endDate","filteredDates","moment","format","firstQuota","lastQuota","returnMTD","getFullYear","getMonth","returnYTD","return3M","setMonth","return6M","return12M","returnSI","API","URL","Portfolio","positions","benchmarkReturns","targetPositions","Backtester","ESSENCIAL","LB","LB_INCEPTION","marketdata","returnsMap","prevMonth","prevDate","portfolioReturns","firstPositions","_","cloneDeep","currentDate","currentMonth","prevPositions","currentReturns","currentPortolioReturn","symbol","currentPositions","getTime","portfolio","setTargetPositions","setPositions","setReturns","MarketData","indexDaily","fundDaily","buildData","pricesMap","indexDailyDates","referenceDate","fundDailyDates","f","Set","sort","indexSymbols","indexName","fundSymbols","fundName","symbols","prevPrices","currentPrices","marketData","positionsArr","obj","ExportToCsv","filename","useKeysAsHeaders","generateCsv","returnsArr","quotasArr","PerformanceChart","portfolioExPandhora","setReferenceDate","allocationInitial","allocationConfig","benchmark","setBenchmark","setErrorAllocation","save","setSave","windowDimensions","innerWidth","innerHeight","getWindowDimensions","fontChart","fontLegend","saveAllocation","fund","last_essencial","last_lb","pandhoraSumInitial","debouncedChangeHandlerEssencial","useCallback","debounce","quotasExPandhora","benchmarkReturnSeries","benchmarkReturnSeriesSlice","datas","_referenceDate","item","arraydata","removeDatesLTE","benchmarkQuotas","show_count","elements","point","radius","responsive","fontFamily","fontStyle","usePointStyle","enabled","scales","xAxes","ticks","beginAtZero","maxRotation","minRotation","callback","gridLines","yAxes","fill","x","y","borderColor","pointStyle","returnChart","InvestBanner","href","PerformanceTable","formatPercentage","val","count","StatisticsTable","formatNumeric","startDateStr","endDateStr","portfolioDateRange","volatility","PortfolioComposition","plotChart","title","span","flexDirection","alignItems","justifyContent","Disclaimer","fontWeight","Result","shareLink","copyLink","setCopyLink","performance","getEntriesByType","createPortfolioFromTargetWeights","targetWeights","createPortfolio","setBenchmarkReturns","setAllocationInitial","setAllocationConfig","indexData","setIndexData","fundData","setFundData","loading","setLoading","loading2","setLoading2","loading3","setLoading3","fetchData","setHook","setLoadingHook","fetchDataAllocation","match","indexIds","str","slice","fundIds","indexDataSlice","fundDataSlice","omit","assetClasses","pandhoraFunds","has","pandhoraAllocation","createPortfolioExPandhora","LoadingGif","maxWidth","setTimeout","open","replace","focus","action","navigator","clipboard","writeText","defaultState","definedParameters","posFixado","creditoPrivado","rendaFixaGlobal","parametersReducer","coreReducer","combineReducers","store","createStore","Page","collapsed","setCollapsed","headerIsTop","setHeaderIsTop","listenScrollEvent","event","scrollY","addEventListener","removeEventListener","hidden","aria-current","borderBottomRightRadius","target","rel","App","exact","path","component","Main","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.3a4a2c46.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/Background-Redes.0459850c.png\";","export default __webpack_public_path__ + \"static/media/GIF.fc6286bf.gif\";","import React from \"react\";\r\n\r\nconst Alert = ({ children }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default Alert;\r\n","import React from \"react\";\r\nimport \"./index.css\";\r\n\r\nconst Button = ({ children, onClick, outlined = false, color, className }) => {\r\n const handleClick = (e) => {\r\n onClick && onClick(e);\r\n };\r\n\r\n return (\r\n handleClick(e)}\r\n >\r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default Button;\r\n","import { Doughnut, Chart } from \"react-chartjs-2\";\r\n\r\nvar originalDoughnutDraw = Chart.controllers.doughnut.prototype.draw;\r\nChart.helpers.extend(Chart.controllers.doughnut.prototype, {\r\n draw: function () {\r\n originalDoughnutDraw.apply(this, arguments);\r\n\r\n var chart = this.chart.chart;\r\n var ctx = chart.ctx;\r\n var width = chart.width;\r\n var height = chart.height;\r\n\r\n var fontSize = (height / 114).toFixed(2);\r\n ctx.font = fontSize + \"em Exo\";\r\n ctx.textBaseline = \"middle\";\r\n\r\n var text = chart.config.data.text || \"\",\r\n textX = Math.round((width - ctx.measureText(text).width) / 2),\r\n textY = height / 2;\r\n\r\n },\r\n});\r\n\r\nconst DoghnutChart = (props) => {\r\n return ;\r\n};\r\n\r\nexport default DoghnutChart;\r\n","import React from \"react\";\r\nimport \"./index.css\";\r\n\r\nconst Hero = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

\r\n Comparação \r\n de\r\n Rentabilidades\r\n

\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Hero;\r\n","import React from \"react\";\r\nimport \"./index.css\";\r\n\r\nconst Segment = ({ children }) => {\r\n return (\r\n
\r\n
{children}
\r\n
\r\n );\r\n};\r\n\r\nexport default Segment;\r\n","import React from \"react\";\r\nimport \"./index.css\";\r\n\r\nconst Table = ({ children, style, className }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst Head = ({ children, style }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst Body = ({ children, style }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst Tr = ({ children, style }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst Th = ({ children, scope, style, className }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst Td = ({ children, style, className }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nTable.Head = Head;\r\nTable.Body = Body;\r\nTable.Tr = Tr;\r\nTable.Th = Th;\r\nTable.Td = Td;\r\n\r\nexport default Table;\r\n","const ASSET_CLASSES = {\r\n pandhoraEssencial: {\r\n name: \"Pandhora Essencial\",\r\n dbName: \"Pandhora Essencial FIC FIM\",\r\n color: \"#FFB800\",\r\n colorName: \"yellow\",\r\n fundId: 2,\r\n },\r\n pandhoraLb: {\r\n name: \"Pandhora Long Bias\",\r\n dbName: \"Pandhora Long Bias FIC FIM\",\r\n color: \"#0D226A\",\r\n colorName: \"dark-blue\",\r\n fundId: 4,\r\n },\r\n rendaFixa: {\r\n name: \"Renda Fixa Pós-fixada\",\r\n altName: \"CDI\",\r\n dbName: \"CDI\",\r\n colorName: \"light-yellow\",\r\n color: \"#FFE36E\",\r\n indexId: 1,\r\n },\r\n ipca: {\r\n name: \"Cesta Tesouro IPCA+\",\r\n altName: \"IMA-B\",\r\n dbName: \"IPCA\",\r\n colorName: \"light-yellow2\",\r\n color: \"#F9EAAD\",\r\n indexId: 4,\r\n },\r\n multimercado: {\r\n name: \"Multimercado\",\r\n altName: \"IHFA\",\r\n dbName: \"IHFA\",\r\n colorName: \"light-yellow3\",\r\n color: \"#F9F9C7\",\r\n indexId: 3,\r\n },\r\n rendaVariavel: {\r\n name: \"Renda Variável\",\r\n altName: \"IBOVESPA\",\r\n dbName: \"Ibovespa\",\r\n colorName: \"grey\",\r\n color: \"#C4C4C4\",\r\n indexId: 2,\r\n },\r\n rendaVariavelGlobal: {\r\n name: \"Renda Variável Global\",\r\n altName: \"IVVB\",\r\n dbName: \"SPX BRL\",\r\n colorName: \"dark-grey\",\r\n color: \"#616161\",\r\n indexId: 5,\r\n },\r\n dolar: {\r\n name: \"Dólar\",\r\n altName: \"USDBRL\",\r\n dbName: \"USDBRL\",\r\n colorName: \"black\",\r\n color: \"#262626\",\r\n indexId: 6,\r\n },\r\n};\r\n\r\nexport default ASSET_CLASSES;\r\n","const DEFAULT_ALLOCATIONS = {\r\n Agressiva: {\r\n pandhoraEssencial: 0,\r\n pandhoraLb: 0,\r\n rendaFixa: 20,\r\n ipca: 15,\r\n multimercado: 20,\r\n rendaVariavel: 40,\r\n rendaVariavelGlobal: 5,\r\n dolar: 0,\r\n },\r\n Moderada: {\r\n pandhoraEssencial: 0,\r\n pandhoraLb: 0,\r\n rendaFixa: 15,\r\n ipca: 20,\r\n multimercado: 40,\r\n rendaVariavel: 20,\r\n rendaVariavelGlobal: 5,\r\n dolar: 0,\r\n },\r\n Conservadora: {\r\n pandhoraEssencial: 0,\r\n pandhoraLb: 0,\r\n rendaFixa: 80,\r\n ipca: 0,\r\n multimercado: 20,\r\n rendaVariavel: 0,\r\n rendaVariavelGlobal: 0,\r\n dolar: 0,\r\n },\r\n};\r\n\r\nexport default DEFAULT_ALLOCATIONS;\r\n","import React from \"react\";\r\n\r\n/** Presenters ------------------------------------------------- */\r\nimport { DoghnutChart } from \"../../presenters\";\r\n\r\n/** Aux components -------------------------------------------- */\r\nimport ASSET_CLASSES from \"../../asset-classes\";\r\nimport DEFAULT_ALLOCATIONS from \"../../default-allocations\";\r\n\r\n/**\r\n * The ProfileAllocation component displays default profiles\r\n * and the current portfolio allocation chose by the user\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst ProfileAllocation = ({\r\n allocation = DEFAULT_ALLOCATIONS[\"Agressiva\"],\r\n onAllocationChange,\r\n}) => {\r\n\r\n /**\r\n * Render the chart displaying the current\r\n * allocation\r\n */\r\n const renderAllocationChart = () => {\r\n const assetNotPandhora = Object.assign({}, ASSET_CLASSES);\r\n const allocationNotPandhora = Object.assign({}, allocation);\r\n const essencial = 'pandhoraEssencial';\r\n const lb = \"pandhoraLb\";\r\n\r\n delete assetNotPandhora[essencial];\r\n delete assetNotPandhora[lb];\r\n delete allocationNotPandhora[essencial];\r\n delete allocationNotPandhora[lb];\r\n\r\n const colors = Object.keys(assetNotPandhora).map(\r\n (k) => ASSET_CLASSES[k].color\r\n );\r\n const labels = Object.keys(assetNotPandhora).map((k) => assetNotPandhora[k].name);\r\n const values = Object.keys(allocationNotPandhora).map((k) => allocationNotPandhora[k]);\r\n return (\r\n (prev += curr), 0.0) + \"%\",\r\n }}\r\n />\r\n );\r\n };\r\n\r\n /**\r\n * Render the Ok icon when allocation is 100%\r\n * \r\n */\r\n const okLogo = (visibility, _allocationSum) => {\r\n return (\r\n
\r\n {_allocationSum} %\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Render the allocation value when less than 100%\r\n */\r\n const porcTo100 = (visibility, _allocationSum) => {\r\n return (\r\n
\r\n {_allocationSum} %\r\n
\r\n );\r\n };\r\n\r\n // Allocation sum\r\n const allocationSum = Object.keys(allocation).reduce(\r\n (sum, key) => (sum += allocation[key]),\r\n 0.0\r\n );\r\n\r\n return (\r\n
\r\n
\r\n {renderAllocationChart()}\r\n
\r\n {allocationSum === 100.0 ? (\r\n okLogo(\"visible\", allocationSum)\r\n ) : [allocationSum > 100.0 ? (\r\n \r\n
\r\n {okLogo(\"hidden\", allocationSum)} A alocação deve somar 100%\r\n
\r\n
\r\n ) : [porcTo100(\"visible\", allocationSum)]]}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ProfileAllocation;\r\n","import React from \"react\";\r\n\r\n/** 3rd party components -------------------------------------- */\r\nimport RSlider from \"react-rangeslider\";\r\n\r\n/** Aux components -------------------------------------------- */\r\nimport ASSET_CLASSES from \"../../asset-classes\";\r\nimport DEFAULT_ALLOCATIONS from \"../../default-allocations\";\r\n\r\n/**\r\n * Slider to choose the desired allocation between\r\n * the available asset classes\r\n *\r\n * @param {number} min the minimum allocation value\r\n * @param {number} max the maximum allocation value\r\n * @param {string} color the color of the slider\r\n * @param {string} label the slider label to display the name\r\n * of the asset class being allocatated.\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst Slider = ({ min, max, value, color = \"black\", label, onChange }) => {\r\n return (\r\n
\r\n
\r\n
{label || \"\"}
\r\n
\r\n {value !== null || value !== undefined ? value.toFixed(1) + \"%\" : \"\"}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Display the profile builder section, which contains the sliders\r\n * to the user choose between the available asset classes to\r\n * run the simualtion\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst ProfileBuilder = ({ allocation = DEFAULT_ALLOCATIONS[\"Agressiva\"], onAllocationChange }) => {\r\n\r\n /**\r\n *\r\n * @param {string} name The name of the asset class\r\n * @param {string} span The alt name of the asset class\r\n */\r\n const createLabel = (name, altName) => {\r\n return (\r\n
\r\n {`${name} `}\r\n {altName ? (\r\n {`(${altName})`}\r\n ) : null}\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Change the allocation value on an asset class\r\n * @param {string} assetClass \r\n * @param {number} value \r\n */\r\n const handleAllocationChange = (assetClass, value) => {\r\n const newAllocation = { ...allocation };\r\n newAllocation[assetClass] = value;\r\n onAllocationChange && onAllocationChange(newAllocation);\r\n };\r\n\r\n /**\r\n * Display the list of sliders with all the available classes.\r\n */\r\n const renderSliders = () => {\r\n const assetNotPandhora = Object.assign({}, ASSET_CLASSES);\r\n const essencial = 'pandhoraEssencial';\r\n const lb = \"pandhoraLb\";\r\n\r\n delete assetNotPandhora[essencial];\r\n delete assetNotPandhora[lb];\r\n return Object.keys(assetNotPandhora).map((key) => {\r\n const assetClass = assetNotPandhora[key];\r\n return (\r\n
\r\n handleAllocationChange(key, value)}\r\n orientation=\"horizontal\"\r\n color={assetClass.colorName}\r\n label={createLabel(assetClass.name, assetClass.altName)}\r\n />\r\n
\r\n );\r\n });\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {renderSliders()}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ProfileBuilder;\r\n","const ALLOCATION_CLASSES = {\r\n Agressiva: {\r\n pandhoraEssencial: 0,\r\n pandhoraLb: 10\r\n },\r\n Moderada: {\r\n pandhoraEssencial: 5,\r\n pandhoraLb: 5\r\n },\r\n Conservadora: {\r\n pandhoraEssencial: 5,\r\n pandhoraLb: 0\r\n },\r\n};\r\n\r\nexport default ALLOCATION_CLASSES;","const ParameterActions = {\r\n SetParameters: 0,\r\n};\r\n\r\nconst setParameters = (parameters) => {\r\n return {\r\n type: ParameterActions.SetParameters,\r\n payload: {\r\n parameters: parameters,\r\n },\r\n };\r\n};\r\n\r\nexport {ParameterActions, setParameters}\r\n","import React, { useRef, useState, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Link } from 'react-scroll';\r\nimport backgroupImage from '../../img/Background-Redes.png'\r\nimport LoadingGif from '../../img/GIF.gif';\r\n\r\n// Components ------------------------------------------------------//\r\nimport ProfileAllocationSection from \"./profile-allocation\";\r\nimport ProfileBuilderSection from \"./profile-builder\";\r\nimport { Button, Segment } from \"../../presenters\";\r\nimport DEFAULT_ALLOCATIONS from \"../../default-allocations\";\r\nimport ALLOCATION_CLASSES from '../../allocation-classes';\r\nimport axios from \"axios\";\r\nimport { useLocation } from 'react-router';\r\nimport queryString from 'query-string';\r\n// CSS -------------------------------------------------------------//\r\nimport \"./index.css\";\r\n\r\n// Redux ----------------------------------------------------------//\r\nimport { setParameters } from \"../../redux/actions\";\r\nimport { connect } from \"react-redux\";\r\nimport { constant } from \"lodash\";\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n parameters: state.parameters,\r\n };\r\n};\r\n\r\n// Map dispatch to component props\r\nconst mapDispatchToProps = (dispatch, ownProps) => {\r\n return {\r\n setParameters: (params) => dispatch(setParameters(params)),\r\n };\r\n};\r\n\r\n/**\r\n * Represents the Simulator main application page.\r\n * It displays the options to the user to choose the desired\r\n * allocation between the asset classes and to send the simulation parameters to\r\n * the API and start the simulation process.\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst Main = () => {\r\n const history = useHistory();\r\n // Error state\r\n const [error, setError] = useState(false);\r\n // Check first launch reload\r\n const [launchFirstTime, setlaunchFirstTime] = useState(true);\r\n // Get url GET options\r\n const location = useLocation();\r\n const param = queryString.parse(location.search)\r\n\r\n\r\n // Scholl page up\r\n const scrollPageUp = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n const scrollToRef = (ref) => window.scrollTo(0, ref.current.offsetTop - 68);\r\n let myRef = useRef();\r\n\r\n /**\r\n * Page go top when page is first load \r\n * When page load and has param reload = true in url scroll page to reference \r\n */\r\n useEffect(() => {\r\n if (launchFirstTime) {\r\n if (param.reload === \"true\") {\r\n scrollToRef(myRef);\r\n } else {\r\n scrollPageUp();\r\n setlaunchFirstTime(false);\r\n }\r\n }\r\n }, []);\r\n\r\n\r\n const [allocation, setAllocation] = useState(\r\n DEFAULT_ALLOCATIONS[\"Agressiva\"]\r\n );\r\n\r\n const [allocationType, setAllocationType] = useState(\r\n \"Agressiva\"\r\n );\r\n\r\n /**\r\n * Handle allocation changes in allocation values and type\r\n * \r\n */\r\n const handleAllocationChangeDefault = (allocation, allocationType) => {\r\n setAllocation && setAllocation(allocation);\r\n setAllocationType && setAllocationType(allocationType);\r\n };\r\n\r\n\r\n /**\r\n * Display the buttons to choose between default\r\n * profiles.\r\n */\r\n const renderDefaultProfilesButtons = () => {\r\n // console.log(allocation)\r\n return (\r\n \r\n {Object.keys(DEFAULT_ALLOCATIONS).map((k) => (\r\n handleAllocationChangeDefault(DEFAULT_ALLOCATIONS[k], k)}\r\n >\r\n {k}\r\n \r\n ))}\r\n \r\n );\r\n };\r\n const API_URL = \"https://site.pandhora.com/api\";\r\n\r\n /**\r\n * Allocate and calculate the percentage of Essencial and LB based \r\n * type of risk.\r\n * \r\n */\r\n const portfolioWithPandhora = () => {\r\n const allocationNotPandhora = Object.assign({}, allocation);\r\n const essencial = 'pandhoraEssencial';\r\n const lb = \"pandhoraLb\";\r\n let pandhoraSum = 0;\r\n\r\n // \r\n if (allocationNotPandhora[essencial] === 0 && allocationNotPandhora[lb] === 0) {\r\n for (const [key, value] of Object.entries(ALLOCATION_CLASSES[allocationType])) {\r\n pandhoraSum += value;\r\n }\r\n }\r\n\r\n Object.keys(allocation).reduce(\r\n (sum, key) => (allocationNotPandhora[key] = allocation[key] * (1 - pandhoraSum / 100.0)),\r\n 0.0\r\n );\r\n\r\n allocationNotPandhora[essencial] = ALLOCATION_CLASSES[allocationType][essencial];\r\n allocationNotPandhora[lb] = ALLOCATION_CLASSES[allocationType][lb];\r\n\r\n return allocationNotPandhora;\r\n }\r\n\r\n\r\n /**\r\n * Create a dictionary of allocation to be post and perfil selected\r\n * \r\n */\r\n const formatedAllocation = (_allocation) => {\r\n const fAllocation = {}\r\n Object.keys(_allocation).forEach(k => fAllocation[k] = _allocation[k] / 100.0);\r\n fAllocation['perfil'] = allocationType;\r\n return fAllocation;\r\n }\r\n\r\n /**\r\n * Post allocation to be saved on Database\r\n * \r\n */\r\n const postAllocation = async () => {\r\n try {\r\n const url = `${API_URL}/allocation`;\r\n const result = await axios.post(url, formatedAllocation(portfolioWithPandhora()));\r\n if (result.status !== 201) {\r\n console.error(\"Whoopsie. API returned code \" + result.status + \" for post \" + formatedAllocation(portfolioWithPandhora()))\r\n setError(true);\r\n } else {\r\n scrollPageUp();\r\n history.push(\"/result/\" + result.data.id);\r\n }\r\n } catch (e) {\r\n console.error(\"Whoopsie!\", e);\r\n setError(true);\r\n }\r\n\r\n };\r\n\r\n /**\r\n * Called when button \"Simular\" is clicked, page go up and post allocation\r\n * \r\n */\r\n const onSimulationClick = () => {\r\n scrollPageUp();\r\n postAllocation();\r\n };\r\n\r\n /**\r\n * Reset allocation based on type of allocation selected\r\n * \r\n */\r\n const onResetClick = () => {\r\n setAllocation(DEFAULT_ALLOCATIONS[allocationType]);\r\n };\r\n\r\n /** Render the Main page */\r\n\r\n return (\r\n
\r\n
\r\n

Vamos simular o impacto de Fundo Quant na sua carteira?

\r\n \r\n
\r\n
\r\n \r\n
\r\n

Conte para nós como está sua carteira atual:

\r\n
\r\n
Selecione seu perfil
\r\n
Para realizar a simulação, selecione um dos perfis de carteira abaixo.
Se desejar, ajuste as alocações individuais em cada uma das classes de ativo simuladas.
\r\n

Carteira padrão:

\r\n
\r\n
\r\n {renderDefaultProfilesButtons()}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

As informações apresentadas neste recurso ("Simulador") são meramente\r\n ilustrativas e baseadas em dados teóricos a partir de cotas de fundos e índices de\r\n mercado disponíveis publicamente. As informações presentes neste material\r\n técnico são baseadas em simulações e os resultados reais poderão ser\r\n significativamente diferentes. Rentabilidade obtida no passado não representa\r\n garantia de resultados futuros. A rentabilidade divulgada não é líquida de\r\n impostos. O investimento em Fundo não é garantido pelo Fundo Garantidor de\r\n Crédito - FGC. A Pandhora não comercializa ou distribui quotas de fundos de\r\n investimento, portanto todas as informações contidas neste website não devem\r\n ser consideradas como oferta de venda de cotas de fundos de investimentos ou\r\n de qualquer título ou valor mobiliàrio, recomendação de investimento e nem\r\n devem servir como única base para tomada de decisões de investimento. A\r\n Pandhora Investimentos se exime de qualquer responsabilidade, direta ou indireta,\r\n por todos e quaisquer prejuízos decorrentes de operações realizadas com base\r\n nas informações aqui prestadas, notadamente relacionadas à decisão de\r\n investimento do cliente.

\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n// Connect Main to redux store\r\nconst ConnectedMain = connect(mapStateToProps, mapDispatchToProps)(Main);\r\n\r\nexport default ConnectedMain;\r\n","import moment from \"moment\";\r\n\r\nconst Statistics = {\r\n /**\r\n * Calculate the compounded annual growth rate.\r\n * @param {object} returnSeries an object with dates as keys and returns as values\r\n * @returns {number}\r\n */\r\n cagr: function (returnSeries) {\r\n if (!returnSeries) {\r\n return undefined;\r\n }\r\n\r\n const dates = Object.keys(returnSeries);\r\n const nDays = dates.length;\r\n const cumReturn = dates.reduce(\r\n (r, date) => (r *= 1 + returnSeries[date]),\r\n 1.0\r\n );\r\n return nDays === 0 ? undefined : Math.pow(cumReturn, 252 / nDays) - 1;\r\n },\r\n /**\r\n * Calculate the mean of the elements in the series.\r\n * @param {Object} returnSeries\r\n * @returns {number}\r\n */\r\n mean: function (returnSeries) {\r\n const returns = Object.keys(returnSeries).map((date) => returnSeries[date]);\r\n const n = returns.length;\r\n const sum = returns.reduce((sum, elem) => (sum += elem), 0.0);\r\n return n !== 0.0 ? sum / n : undefined;\r\n },\r\n /**\r\n * Calculate the populational standard deviation of the elements in the series.\r\n * @param {object} returnSeries an object with dates as keys and returns as values\r\n * @returns {number}\r\n */\r\n stdevp: function (returnSeries) {\r\n const returns = Object.keys(returnSeries).map((date) => returnSeries[date]);\r\n const mu = Statistics.mean(returns);\r\n const n = returns.length;\r\n const sum = returns.reduce(\r\n (sum, elem) => (sum += Math.pow(elem - mu, 2)),\r\n 0.0\r\n );\r\n return n !== 0.0 ? Math.sqrt(sum / n) : undefined;\r\n },\r\n /**\r\n * Calculate the sample standard deviation of the elements in the series.\r\n * @param {object} returnSeries an object with dates as keys and returns as values\r\n * @returns {number}\r\n */\r\n stdevs: function (returnSeries) {\r\n const returns = Object.keys(returnSeries).map((date) => returnSeries[date]);\r\n const mu = Statistics.mean(returns);\r\n const n = returns.length - 1;\r\n const sum = returns.reduce(\r\n (sum, elem) => (sum += Math.pow(elem - mu, 2)),\r\n 0.0\r\n );\r\n\r\n return n - 1 !== 0.0 ? Math.sqrt(sum / n) : undefined;\r\n },\r\n volp: function (returnSeries) {\r\n return Statistics.stdevp(returnSeries) * Math.sqrt(252);\r\n },\r\n vols: function (returnSeries) {\r\n return Statistics.stdevs(returnSeries) * Math.sqrt(252);\r\n },\r\n quotasSeries: function (returnSeries, base = 1) {\r\n const quotas = {};\r\n const dates = Object.keys(returnSeries);\r\n let prevQuota = base;\r\n for (let i = 0; i < dates.length; i++) {\r\n const date = dates[i];\r\n const quota = prevQuota * (1 + returnSeries[date]);\r\n quotas[date] = quota;\r\n prevQuota = quota;\r\n }\r\n\r\n return quotas;\r\n },\r\n sharpe: function (returnSeries, benchmarkSeries) {\r\n if (!returnSeries || !benchmarkSeries) {\r\n return undefined;\r\n }\r\n\r\n const dates = Object.keys(returnSeries);\r\n const benchmarkDates = Object.keys(benchmarkSeries);\r\n\r\n // Check if benchmark and returnSeries dates are different. If it is,\r\n // raise an error.\r\n const difference = dates.filter((d) => !benchmarkDates.includes(d));\r\n if (difference.length > 0) {\r\n throw new Error(\r\n \"The length of benchmark and portfolio returnSeries must be the same to calculate sharpe\"\r\n );\r\n }\r\n\r\n // Build alpha series\r\n const alphaSeries = {};\r\n dates.forEach((date) => {\r\n alphaSeries[date] = returnSeries[date] - benchmarkSeries[date];\r\n });\r\n\r\n // Calculate return cagr, benchmark cagr and alpha vol\r\n const cagrReturns = Statistics.cagr(returnSeries);\r\n const cagrBenchmark = Statistics.cagr(benchmarkSeries);\r\n const volAlpha = Statistics.volp(alphaSeries);\r\n\r\n // Return sharpe\r\n return volAlpha !== 0.0\r\n ? (cagrReturns - cagrBenchmark) / volAlpha\r\n : undefined;\r\n },\r\n maxDrawdown: function (returnSeries) {\r\n const quotas = Statistics.quotasSeries(returnSeries);\r\n const dates = Object.keys(quotas);\r\n\r\n // Calcualte drawdowns\r\n let max = quotas[dates[0]];\r\n const drawdowns = [];\r\n\r\n for (let i = 1; i < dates.length; i++) {\r\n const date = dates[i];\r\n const quota = quotas[date];\r\n max = quota > max ? quota : max;\r\n drawdowns.push(quota / max - 1);\r\n }\r\n\r\n return Math.min(...drawdowns);\r\n },\r\n returnOnPeriod: function (returnSeries, period) {\r\n const quotasSeries = Statistics.quotasSeries(returnSeries);\r\n const dates = Object.keys(quotasSeries).map(\r\n (d) => new Date(d + \"T00:00:00\")\r\n );\r\n\r\n // Find dates such as the date is less than the period startDate\r\n const lowerDates = dates.filter((d) => d < period.startDate);\r\n\r\n if (lowerDates.length === 0) return undefined;\r\n\r\n // Set start and end dates\r\n const startDate = lowerDates[lowerDates.length - 1];\r\n const endDate = period.endDate;\r\n\r\n // Filter dates\r\n const filteredDates = dates\r\n .filter((d) => d >= startDate && d <= endDate)\r\n .map((d) => moment(d).format(\"YYYY-MM-DD\"));\r\n\r\n // Calculate return\r\n if (filteredDates.length > 0) {\r\n const firstQuota = quotasSeries[filteredDates[0]];\r\n const lastQuota = quotasSeries[filteredDates[filteredDates.length - 1]];\r\n return firstQuota !== 0.0 ? lastQuota / firstQuota - 1 : undefined;\r\n }\r\n\r\n return 0.0;\r\n },\r\n returnMTD: function (returnSeries) {\r\n const dates = Object.keys(returnSeries);\r\n\r\n if (dates.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Create period\r\n const endDate = new Date(dates[dates.length - 1] + \"T00:00:00\");\r\n const period = {\r\n startDate: new Date(endDate.getFullYear(), endDate.getMonth(), 1),\r\n endDate: endDate,\r\n };\r\n\r\n return Statistics.returnOnPeriod(returnSeries, period);\r\n },\r\n returnYTD: function (returnSeries) {\r\n const dates = Object.keys(returnSeries);\r\n\r\n if (dates.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Create period\r\n const endDate = new Date(dates[dates.length - 1] + \"T00:00:00\");\r\n const period = {\r\n startDate: new Date(endDate.getFullYear(), 0, 1),\r\n endDate: endDate,\r\n };\r\n\r\n return Statistics.returnOnPeriod(returnSeries, period);\r\n },\r\n return3M: function (returnSeries) {\r\n const dates = Object.keys(returnSeries);\r\n\r\n if (dates.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Create period\r\n const endDate = new Date(dates[dates.length - 1] + \"T00:00:00\");\r\n const period = {\r\n startDate: new Date(endDate).setMonth(endDate.getMonth() - 3),\r\n endDate: endDate,\r\n };\r\n\r\n return Statistics.returnOnPeriod(returnSeries, period);\r\n },\r\n return6M: function (returnSeries) {\r\n const dates = Object.keys(returnSeries);\r\n\r\n if (dates.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Create period\r\n const endDate = new Date(dates[dates.length - 1] + \"T00:00:00\");\r\n const period = {\r\n startDate: new Date(endDate).setMonth(endDate.getMonth() - 6),\r\n endDate: endDate,\r\n };\r\n\r\n return Statistics.returnOnPeriod(returnSeries, period);\r\n },\r\n return12M: function (returnSeries) {\r\n const dates = Object.keys(returnSeries);\r\n\r\n if (dates.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Create period\r\n const endDate = new Date(dates[dates.length - 1] + \"T00:00:00\");\r\n const period = {\r\n startDate: new Date(endDate).setMonth(endDate.getMonth() - 12),\r\n endDate: endDate,\r\n };\r\n\r\n return Statistics.returnOnPeriod(returnSeries, period);\r\n },\r\n returnSI: function (returnSeries) {\r\n const dates = Object.keys(returnSeries);\r\n\r\n if (dates.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Create period\r\n const endDate = new Date(dates[dates.length - 1] + \"T00:00:00\");\r\n const startDate = new Date(dates[1] + \"T00:00:00\");\r\n const period = {\r\n startDate: startDate,\r\n endDate: endDate,\r\n };\r\n\r\n return Statistics.returnOnPeriod(returnSeries, period);\r\n },\r\n};\r\n\r\nexport default Statistics;\r\n","const API = {\r\n URL: \"https://site.pandhora.com/api\",\r\n};\r\n\r\nexport default API;","import Statistics from \"./statistics\";\r\n\r\nclass Portfolio {\r\n constructor() {\r\n this.positions = undefined;\r\n this.returns = undefined;\r\n this.benchmarkReturns = undefined;\r\n this.targetPositions = undefined;\r\n }\r\n\r\n setPositions(positions) {\r\n this.positions = positions;\r\n }\r\n\r\n setReturns(returns) {\r\n this.returns = returns;\r\n }\r\n\r\n setTargetPositions(targetPositions){\r\n this.targetPositions = targetPositions; \r\n }\r\n\r\n setBenchmarkReturns(benchmarkReturns) {\r\n this.benchmarkReturns = benchmarkReturns;\r\n }\r\n\r\n quotas() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate quotas!\");\r\n }\r\n\r\n return Statistics.quotasSeries(this.returns);\r\n }\r\n\r\n benchmarkQuotas() {\r\n if (!this.benchmarkReturns) {\r\n throw new Error(\r\n \"Portfolio benchmark returns must be set to calculate benchmark quotas\"\r\n );\r\n }\r\n\r\n return Statistics.quotasSeries(this.benchmarkReturns);\r\n }\r\n\r\n cagr() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate CAGR!\");\r\n }\r\n\r\n return Statistics.cagr(this.returns);\r\n }\r\n\r\n sharpe() {\r\n if (!this.benchmarkReturns) {\r\n throw new Error(\"Benchmark returns must be set to calculate sharpe!\");\r\n }\r\n\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate sharpe!\");\r\n }\r\n\r\n return Statistics.sharpe(this.returns, this.benchmarkReturns);\r\n }\r\n\r\n volatility() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate volatility!\");\r\n }\r\n return Statistics.volp(this.returns);\r\n }\r\n\r\n maxDrawdown() {\r\n if (!this.returns) {\r\n throw new Error(\r\n \"Portfolio returns must be set to calculate max. drawdown!\"\r\n );\r\n }\r\n\r\n return Statistics.maxDrawdown(this.returns);\r\n }\r\n\r\n returnMTD() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate return MTD\");\r\n }\r\n\r\n return Statistics.returnMTD(this.returns);\r\n }\r\n\r\n returnYTD() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate return YTD\");\r\n }\r\n\r\n return Statistics.returnYTD(this.returns);\r\n }\r\n\r\n return3M() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate return 3M\");\r\n }\r\n\r\n return Statistics.return3M(this.returns);\r\n }\r\n\r\n return6M() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate return 6M\");\r\n }\r\n\r\n return Statistics.return6M(this.returns);\r\n }\r\n\r\n return12M() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate return123M\");\r\n }\r\n\r\n return Statistics.return12M(this.returns);\r\n }\r\n\r\n returnSI() {\r\n if (!this.returns) {\r\n throw new Error(\"Portfolio returns must be set to calculate return SI\");\r\n }\r\n\r\n return Statistics.returnSI(this.returns);\r\n }\r\n}\r\n\r\nexport default Portfolio;\r\n","import _ from \"lodash\";\r\nimport Portfolio from \"./portfolio\";\r\n\r\n/**\r\n * Backtest a portfolio long only with periodic rebalances\r\n * \r\n * @author Giovanna Marinelli\r\n */\r\nclass Backtester {\r\n constructor() {\r\n // TODO: Pegar isso de outro lugar, sem ser hard coded (it sucks)\r\n this.ESSENCIAL = \"Pandhora Essencial FIC FIM\";\r\n this.LB = \"Pandhora Long Bias FIC FIM\";\r\n this.LB_INCEPTION = new Date(2019, 6, 25);\r\n }\r\n /**\r\n * Create a Portolio from a set of target positions and\r\n * its market data. This function will basically backtest \r\n * an strategy which rebalance every 6 months with the given target position.\r\n * \r\n * @param {Object} targetPositions an object with symbols as keys and position allocation as value.\r\n * @param {MarketData} marketdata a market data object that will be use to extract the returns.\r\n * @returns {Portfolio} a Portofolio object.\r\n */\r\n createPortfolio(targetPositions, marketdata) {\r\n \r\n\r\n // Collect market data\r\n const returns = marketdata.returnsMap;\r\n // Calculate backtest - i.e., the portfolio positions and the daily returns\r\n const dates = Object.keys(returns);\r\n let prevMonth = undefined;\r\n let prevDate = dates[0];\r\n\r\n const positions = {};\r\n const portfolioReturns = {};\r\n\r\n // Initialize positions and returns\r\n const firstPositions = _.cloneDeep(targetPositions);\r\n firstPositions[this.ESSENCIAL] += firstPositions[this.LB];\r\n firstPositions[this.LB] = 0.0;\r\n\r\n positions[prevDate] = firstPositions;\r\n portfolioReturns[prevDate] = 0.0;\r\n\r\n for (let i = 1; i < dates.length; i++) {\r\n const date = dates[i];\r\n const currentDate = new Date(date + \"T00:00:00\");\r\n const currentMonth = currentDate.getMonth();\r\n\r\n // Calculate portfolio return --------------------------------------------------------------------\r\n const prevPositions = positions[prevDate];\r\n const currentReturns = returns[date];\r\n const currentPortolioReturn = Object.keys(prevPositions).reduce(\r\n (sum, symbol) =>\r\n (sum += prevPositions[symbol] * currentReturns[symbol]),\r\n 0.0\r\n );\r\n\r\n portfolioReturns[date] = currentPortolioReturn;\r\n\r\n // Calculate positions --------------------------------------------------------------------------\r\n let currentPositions = {};\r\n \r\n // If is rebalance date - Set position to target position\r\n if (\r\n (currentMonth === 5 && prevMonth === 4) ||\r\n (currentMonth === 11 && prevMonth === 10) || \r\n (currentDate.getTime() === this.LB_INCEPTION.getTime())\r\n ) {\r\n currentPositions = _.cloneDeep(targetPositions);\r\n\r\n // Before LB inception, we allocate all fund allocation to Pandhora Essencial\r\n if (currentDate < this.LB_INCEPTION) {\r\n currentPositions[this.ESSENCIAL] += currentPositions[this.LB];\r\n currentPositions[this.LB] = 0.0;\r\n }\r\n // Else, variate the weights according asset returns\r\n } else {\r\n Object.keys(prevPositions).forEach(\r\n (symbol) =>\r\n (currentPositions[symbol] =\r\n (prevPositions[symbol] * (1 + currentReturns[symbol])) /\r\n (1+currentPortolioReturn))\r\n );\r\n }\r\n positions[date] = currentPositions;\r\n\r\n prevMonth = currentMonth;\r\n prevDate = date;\r\n }\r\n\r\n // Create portfolio and return\r\n const portfolio = new Portfolio();\r\n portfolio.setTargetPositions(targetPositions);\r\n portfolio.setPositions(positions);\r\n portfolio.setReturns(portfolioReturns);\r\n\r\n return portfolio;\r\n }\r\n}\r\n\r\nexport default Backtester;\r\n","class MarketData {\r\n constructor(indexDaily, fundDaily) {\r\n this.buildData(indexDaily, fundDaily);\r\n }\r\n\r\n /**\r\n * Build the pricesMap and returnMap from indexDaily and fundDaily data\r\n * @param {Array} indexDaily \r\n * @param {Array} fundDaily \r\n */\r\n buildData(indexDaily, fundDaily) {\r\n // Create a map by date with the indexes and funds prices\r\n this.pricesMap = {};\r\n\r\n // Create a map by date with the indexes and funds returns\r\n this.returnsMap = {};\r\n\r\n // Get all the dates from indexDaily and fundDaily arrays\r\n // to be the keys of the maps\r\n const indexDailyDates = indexDaily.map((i) => i.referenceDate);\r\n const fundDailyDates = fundDaily.map((f) => f.referenceDate);\r\n const dates = [...new Set([...indexDailyDates, ...fundDailyDates])];\r\n dates.sort();\r\n\r\n // Get all funds and index symbols\r\n const indexSymbols = indexDaily.map((i) => i.indexName);\r\n const fundSymbols = fundDaily.map((f) => f.fundName);\r\n const symbols = [...new Set([...fundSymbols, ...indexSymbols])];\r\n\r\n let prevPrices = undefined;\r\n\r\n // Populate pricesMap and returnMap\r\n for (let i = 0; i < dates.length; i++) {\r\n const currentDate = dates[i];\r\n const currentPrices = {};\r\n const currentReturns = {};\r\n\r\n // Add fund daily data to prices\r\n fundDaily\r\n .filter((e) => e.referenceDate === currentDate)\r\n .forEach((f) => {\r\n currentPrices[f.fundName] = f.quota;\r\n });\r\n\r\n // Add index daily data to prices\r\n indexDaily\r\n .filter((e) => e.referenceDate === currentDate)\r\n .forEach((f) => {\r\n currentPrices[f.indexName] = f.value;\r\n });\r\n\r\n if (prevPrices) {\r\n // eslint-disable-next-line no-loop-func\r\n symbols.forEach((symbol) => {\r\n // Verify if there is value for each element. If not, forward fill\r\n // prices.\r\n currentPrices[symbol] = currentPrices[symbol] || prevPrices[symbol];\r\n\r\n // Calculate returns\r\n currentReturns[symbol] =\r\n prevPrices[symbol] && prevPrices[symbol] !== 0.0\r\n ? currentPrices[symbol] / prevPrices[symbol] - 1\r\n : 0.0;\r\n });\r\n }\r\n\r\n // Add to map\r\n this.pricesMap[currentDate] = currentPrices;\r\n this.returnsMap[currentDate] = currentReturns;\r\n\r\n // Set new prevPrices to currentPrices\r\n prevPrices = currentPrices;\r\n }\r\n }\r\n}\r\n\r\nexport default MarketData;\r\n","import { ExportToCsv } from 'export-to-csv';\r\nconst PortfolioToCsv = {\r\n save: async (portfolio, marketData) => {\r\n if(portfolio){\r\n return;\r\n }\r\n\r\n\r\n // Save positions\r\n const positionsArr = Object.keys(portfolio.positions).map(date => {\r\n const obj = portfolio.positions[date]\r\n obj.date = date;\r\n return obj\r\n });\r\n \r\n let csvExporter = new ExportToCsv({filename:\"positions\", useKeysAsHeaders:true});\r\n csvExporter.generateCsv(positionsArr);\r\n\r\n // Save returns\r\n const returnsArr = Object.keys(marketData.returnsMap).map(date => {\r\n const obj = marketData.returnsMap[date]\r\n obj.date = date;\r\n return obj\r\n }).filter(e => e.date !== '2016-06-07');\r\n \r\n csvExporter = new ExportToCsv({filename:\"returns\", useKeysAsHeaders:true});\r\n csvExporter.generateCsv(returnsArr);\r\n\r\n // Save position returns\r\n // const positionsReturnsArr = Object.keys(portfolio.returns).map(date => {\r\n // const obj = portfolio.returns[date]\r\n // obj.date = date;\r\n // return obj\r\n // });\r\n \r\n // csvExporter = new ExportToCsv({filename:\"position_returns\"});\r\n // csvExporter.generateCsv(positionsReturnsArr);\r\n\r\n //Save quotas\r\n const quotas = portfolio.quotas()\r\n const quotasArr = Object.keys(quotas).map(date => {\r\n const val = quotas[date]\r\n return {date:date, quota:val}\r\n });\r\n \r\n csvExporter = new ExportToCsv({filename:\"quotas\", useKeysAsHeaders:true});\r\n csvExporter.generateCsv(quotasArr);\r\n }\r\n\r\n}\r\n\r\nexport default PortfolioToCsv;","import React, { useState, useEffect, useCallback } from \"react\";\r\nimport RSlider from \"react-rangeslider\";\r\n\r\nimport { Line } from \"react-chartjs-2\";\r\nimport axios from \"axios\";\r\nimport moment from \"moment\";\r\nimport Skeleton from \"react-loading-skeleton\";\r\nimport Statistics from \"../../utils/statistics\";\r\nimport { API } from \"../../utils\";\r\nimport debounce from 'lodash.debounce';\r\n\r\n\r\nfunction getWindowDimensions() {\r\n const { innerWidth: width, innerHeight: height } = window;\r\n return {\r\n width,\r\n height\r\n };\r\n}\r\n/**\r\n * Displays the performance chart with the given allocation +\r\n * the Pandhora's funds\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst PerformanceChart = ({ portfolio, portfolioExPandhora, marketData, referenceDate, setReferenceDate, allocation, setAllocation, allocationInitial, allocationConfig }) => {\r\n const [benchmark, setBenchmark] = useState(\"CDI\");\r\n const [errorAllocation, setErrorAllocation] = useState(false);\r\n // Used this state with debouncer to not allow the slider to save the allocation in every change\r\n const [save, setSave] = useState(false);\r\n // Frequency to show the dates in the chart\r\n const frequency = 4;\r\n const windowDimensions = getWindowDimensions();\r\n const fontChart = windowDimensions.width < 1200 ? 8 : 12;\r\n const fontLegend = windowDimensions.width < 1200 ? 8 : 12;\r\n\r\n /**\r\n * Select from a list of dictionary the datas to be used on calculus.\r\n * @param {datas} datas list of dictionary with all values and reference dates\r\n * @param {_referenceDate} _referenceDate date to be used as filter(less than equals)\r\n */\r\n const removeDatesLTE = (datas, _referenceDate) => {\r\n let item;\r\n let arraydata = []\r\n for (var i in datas) {\r\n item = datas[i];\r\n if (i >= _referenceDate) {\r\n arraydata.push(item);\r\n }\r\n }\r\n return arraydata;\r\n }\r\n\r\n /**\r\n * Format the allocation, perfil and id in a format to be post.\r\n * @param {_allocation} _allocation Assets allocations \r\n */\r\n const formatedAllocation = (_allocation) => {\r\n const fAllocation = {}\r\n Object.keys(_allocation).forEach(k => fAllocation[k] = _allocation[k]);\r\n fAllocation['perfil'] = allocationConfig['perfil']\r\n fAllocation['id'] = allocationConfig['id']\r\n return fAllocation;\r\n }\r\n\r\n /**\r\n * Post the date to be saved or updated\r\n */\r\n const postAllocation = async () => {\r\n const saveAllocation = Object.assign({}, allocation);\r\n\r\n try {\r\n const url = `${API.URL}/allocation`;\r\n const result = await axios.post(url, formatedAllocation(saveAllocation));\r\n if (result.status !== 201) {\r\n console.error(\"Whoopsie. API returned code \" + result.status + \" for post \" + formatedAllocation(saveAllocation))\r\n }\r\n } catch (e) {\r\n console.error(\"Whoopsie!\", e);\r\n }\r\n\r\n }\r\n\r\n /**\r\n * For each changes that happens in the sliders this method is call, to recalculate the datas in chart, graphs and tables.\r\n */\r\n const portfolioWithPandhora = (fund, value) => {\r\n const newAllocation = Object.assign({}, allocation);\r\n\r\n newAllocation[fund] = value / 100.0;\r\n\r\n const essencial = 'pandhoraEssencial';\r\n const lb = \"pandhoraLb\";\r\n const last_essencial = newAllocation[essencial]\r\n const last_lb = newAllocation[lb]\r\n\r\n let pandhoraSum = newAllocation[essencial] + newAllocation[lb]\r\n let pandhoraSumInitial = allocationInitial[essencial] + allocationInitial[lb]\r\n\r\n // Divide the initial allocation by the percentage of the initial sum of Lb and Essencial, then multiply by the percentage of new allocation.\r\n Object.keys(allocationInitial).reduce(\r\n (sum, key) => (newAllocation[key] = allocationInitial[key] / (1.0 - pandhoraSumInitial) * (1.0 - pandhoraSum)),\r\n 0.0\r\n );\r\n\r\n newAllocation[essencial] = last_essencial;\r\n newAllocation[lb] = last_lb;\r\n\r\n // Sum of essencial and Lb cannot be higher than 0.5, this block the slider to go higher than 0.5 \r\n if (newAllocation[essencial] + newAllocation[lb] <= 0.5) {\r\n setAllocation && setAllocation(newAllocation);\r\n setErrorAllocation(false);\r\n } else {\r\n setErrorAllocation(true);\r\n }\r\n // If pandhora Lb equals to 0.0, then the period start at 2016-06-07 if not then 2019-07-24\r\n if (newAllocation != undefined) {\r\n if ((newAllocation['pandhoraLb'] != 0.0) || newAllocation['pandhoraLb'] != 0) {\r\n setReferenceDate('2019-07-24');\r\n } else {\r\n setReferenceDate('2016-06-07');\r\n }\r\n }\r\n // Debounce is call if the user do not make any changes in the time set.\r\n debouncedChangeHandlerEssencial();\r\n }\r\n\r\n // If debouncedChangeHandlerEssencial called happens the save value is true, then post the allocation\r\n // and set save = false\r\n if (save) {\r\n setSave(false);\r\n postAllocation();\r\n }\r\n\r\n /**\r\n * If anything changed on slider set save = true\r\n */\r\n const stopChange = () => {\r\n setSave(true)\r\n }\r\n\r\n /**\r\n * Debounce is call if the user do not make any changes in the time set.\r\n */\r\n const debouncedChangeHandlerEssencial = useCallback(\r\n debounce(stopChange, 5000)\r\n , []);\r\n\r\n /**\r\n * Return chart containing the return of the created portfolio\r\n * and the available benchmarks\r\n *\r\n */\r\n const returnChart = () => {\r\n if (!portfolio || !marketData || !portfolioExPandhora) return null;\r\n\r\n // Portfolio quotas\r\n const quotas = portfolio.quotas();\r\n\r\n // Portfolio ex-pandhora quotas\r\n const quotasExPandhora = portfolioExPandhora.quotas();\r\n\r\n // Benchmark series\r\n const benchmarkReturnSeries = {}\r\n Object.keys(marketData.returnsMap).forEach(date => benchmarkReturnSeries[date] = marketData.returnsMap[date][benchmark])\r\n // Sets first return to 0.\r\n let benchmarkReturnSeriesSlice = removeDatesLTE(benchmarkReturnSeries, referenceDate)\r\n benchmarkReturnSeriesSlice[Object.keys(benchmarkReturnSeriesSlice)[0]] = 0.0;\r\n const benchmarkQuotas = Statistics.quotasSeries(benchmarkReturnSeriesSlice)\r\n let show_count = 1;\r\n\r\n return (\r\n
\r\n \r\n
\r\n { setBenchmark(\"CDI\"); }}\r\n >\r\n {\"CDI\"}\r\n \r\n\r\n setBenchmark(\"Ibovespa\")}\r\n >\r\n {\"Ibovespa\"}\r\n \r\n
\r\n
\r\n {\r\n return { x: date, y: (quotas[date] * 10000).toFixed(2) };\r\n }),\r\n borderColor: [\"#ffb800\"],\r\n backgroundColor: [\"transparent\"],\r\n pointStyle: 'rectRounded',\r\n },\r\n {\r\n label: \"Sua carteira atual\",\r\n data: Object.keys(quotasExPandhora).map((date) => {\r\n return { x: date, y: (quotasExPandhora[date] * 10000).toFixed(2) };\r\n }),\r\n borderColor: [\"black\"],\r\n backgroundColor: [\"transparent\"],\r\n pointStyle: 'rectRounded',\r\n },\r\n {\r\n label: benchmark,\r\n data: Object.keys(benchmarkQuotas).map((date) => {\r\n return {\r\n x: date,\r\n y: (benchmarkQuotas[date] * 10000).toFixed(2),\r\n };\r\n }),\r\n borderColor: [\"#C4C4C4\"],\r\n backgroundColor: [\"transparent\"],\r\n pointStyle: 'rectRounded',\r\n },\r\n ],\r\n\r\n labels: Object.keys(quotas).map((d, index) =>\r\n moment(d + \"T00:00:00\").format(\"DD/MM/YYYY\")\r\n ),\r\n }}\r\n />\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n\r\n < div className=\"Result__return-chart-section-title col-lg-12\">\r\n Veja a comparação entre as diferentes alocações:\r\n
\r\n
\r\n A simulação ao lado mostra a rentabilidade que teria sido atingida\r\n caso fossem investidos 10 mil reais nas carteiras no período. Caso\r\n queira simular outra composição, é só retornar à página anterior.\r\n Rentabilidade passada não é garantia de rentabilidade futura.\r\n
\r\n
\r\n Porcentagem de Quant:\r\n
\r\n
\r\n Pandhora Long Bias {Math.round(allocation['pandhoraLb'] * 100.0)} % \r\n
\r\n
\r\n {\r\n portfolioWithPandhora('pandhoraLb', value)\r\n }}\r\n label=\"Pandhora Long Bias\"\r\n />\r\n
\r\n
\r\n Pandhora Essencial {Math.round(allocation['pandhoraEssencial'] * 100.0)} % \r\n
\r\n
\r\n {\r\n portfolioWithPandhora('pandhoraEssencial', value)\r\n }}\r\n label=\"Pandhora Essencial\"\r\n />\r\n
\r\n
\r\n
\r\n
\r\n {portfolio ? returnChart() : }\r\n \r\n {portfolio ? (\r\n \"**Retornos de um investimento de R$10.000\"\r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default PerformanceChart;\r\n","import React from \"react\";\r\n\r\n// Presenters --------------------------------------------------------//\r\nimport Button from \"../../presenters/button\";\r\n\r\n/**\r\n * Display a banner that redirects to the page\r\n * to invest in Pandhora's funds.\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst InvestBanner = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Criamos fundos ideais
para\r\n construção de patrimônio com \r\n segurança e diversificação.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default InvestBanner;\r\n","import React from \"react\";\r\nimport Table from \"../../presenters/table\";\r\nimport Skeleton from \"react-loading-skeleton\";\r\n\r\n/**\r\n * Display a table with the performance of the client's portfolio\r\n * in different windows.\r\n * \r\n * @param {} portfolio The backtested portfolio with the client's asset allocation \r\n * @returns \r\n * \r\n * @author Giovanna Marinelli\r\n */\r\nconst PerformanceTable = ({ portfolio, portfolioExPandhora }) => {\r\n const formatPercentage = (val) => {\r\n return val ? (100*val).toFixed(2) + \"%\" : \"0.00%\";\r\n }\r\n return (\r\n
\r\n { portfolio && portfolioExPandhora ?\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Mês\r\n \r\n \r\n Ano\r\n \r\n \r\n 3 meses\r\n \r\n \r\n 6 meses\r\n \r\n \r\n 12 meses\r\n \r\n \r\n Início\r\n \r\n \r\n \r\n \r\n \r\n Carteira com a Pandhora\r\n {formatPercentage(portfolio.returnMTD())}\r\n {formatPercentage(portfolio.returnYTD())}\r\n {formatPercentage(portfolio.return3M())}\r\n {formatPercentage(portfolio.return6M())}\r\n {formatPercentage(portfolio.return12M())}\r\n {formatPercentage(portfolio.returnSI())}\r\n \r\n \r\n Sua carteira atual\r\n {formatPercentage(portfolioExPandhora.returnMTD())}\r\n {formatPercentage(portfolioExPandhora.returnYTD())}\r\n {formatPercentage(portfolioExPandhora.return3M())}\r\n {formatPercentage(portfolioExPandhora.return6M())}\r\n {formatPercentage(portfolioExPandhora.return12M())}\r\n {formatPercentage(portfolioExPandhora.returnSI())}\r\n \r\n \r\n
\r\n
: \r\n }\r\n
\r\n ) \r\n};\r\n\r\nexport default PerformanceTable;\r\n","import React from \"react\";\r\n\r\n// Components\r\nimport Table from \"../../presenters/table\";\r\nimport Skeleton from \"react-loading-skeleton\";\r\nimport moment from \"moment\";\r\n\r\n/**\r\n * Display a table with the statistics of the backtested\r\n * portfolio\r\n *\r\n * @param {Portfolio} portfolio the backtested portfolio\r\n * @returns\r\n * @author Giovanna Marinelli\r\n */\r\nconst StatisticsTable = ({ portfolio, portfolioExPandhora }) => {\r\n /**\r\n * Format a numeric value as a number with two decimal places\r\n *\r\n * @param {number} val The numeric value\r\n * @returns the formated numeric value\r\n */\r\n const formatNumeric = (val) => {\r\n return val ? val.toFixed(2) : \"0.00\";\r\n };\r\n\r\n /**\r\n * Format a numeric value as a percentage with two decimal places\r\n *\r\n * @param {number} val The numeric value to be formatted\r\n * @returns the formated numeric value\r\n */\r\n const formatPercentage = (val) => {\r\n return val ? (100 * val).toFixed(2) + \"%\" : \"0.00%\";\r\n };\r\n\r\n /**\r\n * Returns a string containing the date range in which\r\n * the client portfolio was backtested\r\n *\r\n * @returns a string with the date range\r\n */\r\n const portfolioDateRange = () => {\r\n if (\r\n portfolio &&\r\n portfolio.returns &&\r\n Object.keys(portfolio.returns).length > 0\r\n ) {\r\n const dates = Object.keys(portfolio.returns);\r\n const startDate = new Date(dates[0] + \"T00:00:00\");\r\n const endDate = new Date(dates[dates.length - 1] + \"T00:00:00\");\r\n const startDateStr = moment(startDate).format(\"DD/MM/YYYY\");\r\n const endDateStr = moment(endDate).format(\"DD/MM/YYYY\");\r\n\r\n return `(de ${startDateStr} a ${endDateStr})`;\r\n }\r\n return undefined;\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n Estatísticas de performance\r\n
\r\n
\r\n
\r\n
\r\n {portfolio ? portfolioDateRange() : }\r\n
\r\n
\r\n {portfolio ? (\r\n \r\n \r\n \r\n \r\n \r\n Carteira com a Pandhora\r\n \r\n \r\n Sua carteira atual\r\n \r\n \r\n \r\n \r\n \r\n Sharpe\r\n \r\n {formatNumeric(portfolio.sharpe())}\r\n \r\n \r\n {\" \"}\r\n {formatNumeric(portfolioExPandhora.sharpe())}\r\n \r\n \r\n \r\n Retorno anualizado\r\n \r\n {formatPercentage(portfolio.cagr())}\r\n \r\n \r\n {\" \"}\r\n {formatPercentage(portfolioExPandhora.cagr())}\r\n \r\n \r\n \r\n Volatilidade anualizada\r\n \r\n {formatPercentage(portfolio.volatility())}\r\n \r\n \r\n {\" \"}\r\n {formatPercentage(portfolioExPandhora.volatility())}\r\n \r\n \r\n \r\n Max. Drawdown\r\n \r\n {formatPercentage(portfolio.maxDrawdown())}\r\n \r\n \r\n {\" \"}\r\n {formatPercentage(portfolioExPandhora.maxDrawdown())}\r\n \r\n \r\n \r\n
\r\n ) : (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default StatisticsTable;\r\n","import React from \"react\";\r\nimport { Doughnut } from \"react-chartjs-2\";\r\nimport ASSET_CLASSES from \"../../asset-classes\";\r\nimport Skeleton from \"react-loading-skeleton\";\r\n\r\n/**\r\n * Display different portfolios compositions\r\n * according the allocation in Pandhora funds and the \r\n * client's allocation in other asset classes.\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst PortfolioComposition = ({ portfolio, portfolioExPandhora }) => {\r\n /**\r\n * Create the legend of the chart indicating\r\n * which color corresponts to which asset class.\r\n *\r\n * @param {string} name The name of the class\r\n * @param {string} span The alternative (nick) name of the class\r\n * @param {string} color The color of the class displayed on chart\r\n */\r\n const createLegend = (name, span, color) => {\r\n return (\r\n
\r\n \r\n {`${name} `}\r\n {span ? (\r\n {`(${span})`}\r\n ) : undefined}\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Plot a chart with an allocation between the different asset classes\r\n * and Pandhora's funds.\r\n */\r\n const plotChart = (targetPositions, title) => {\r\n const labels = Object.keys(ASSET_CLASSES).map((k) => ASSET_CLASSES[k].name);\r\n const colors = Object.keys(ASSET_CLASSES).map(\r\n (k) => ASSET_CLASSES[k].color\r\n );\r\n return (\r\n
\r\n
{title}
\r\n (targetPositions[assetClass]*100.0).toFixed(2)\r\n ),\r\n backgroundColor: colors,\r\n },\r\n ],\r\n // These labels appear in the legend and in the tooltips when hovering different arcs\r\n labels: labels,\r\n backgroundColor: colors,\r\n }}\r\n />\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n Composição da carteira\r\n
\r\n {portfolio ? (\r\n Object.keys(ASSET_CLASSES).map((key) => {\r\n const assetClass = ASSET_CLASSES[key];\r\n return createLegend(\r\n assetClass.name,\r\n assetClass.altName,\r\n assetClass.colorName\r\n );\r\n })\r\n ) : (\r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n {portfolio ? (\r\n plotChart(portfolio.targetPositions, 'Carteira com a Pandhora')\r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n {portfolio ? (\r\n plotChart(portfolioExPandhora.targetPositions, 'Sua carteira atual')\r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default PortfolioComposition;\r\n","export default __webpack_public_path__ + \"static/media/loading_pandhora.00007e54.gif\";","import React from \"react\";\r\nimport Button from \"../../presenters/button\";\r\n\r\nconst Disclaimer = () => {\r\n return (\r\n <>\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n As informações apresentadas neste recurso ("Simulador") são meramente\r\n ilustrativas e baseadas em dados teóricos a partir de cotas de fundos e índices de\r\n mercado disponíveis publicamente. As informações presentes neste material\r\n técnico são baseadas em simulações e os resultados reais poderão ser\r\n significativamente diferentes. Rentabilidade obtida no passado não representa\r\n garantia de resultados futuros. A rentabilidade divulgada não é líquida de\r\n impostos. O investimento em Fundo não é garantido pelo Fundo Garantidor de\r\n Crédito - FGC. A Pandhora não comercializa ou distribui quotas de fundos de\r\n investimento, portanto todas as informações contidas neste website não devem\r\n ser consideradas como oferta de venda de cotas de fundos de investimentos ou\r\n de qualquer título ou valor mobiliàrio, recomendação de investimento e nem\r\n devem servir como única base para tomada de decisões de investimento. A\r\n Pandhora Investimentos se exime de qualquer responsabilidade, direta ou indireta,\r\n por todos e quaisquer prejuízos decorrentes de operações realizadas com base\r\n nas informações aqui prestadas, notadamente relacionadas à decisão de\r\n investimento do cliente.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Conheça nossos fundos
\r\n e revolucione seus investimentos.\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\n\r\nexport default Disclaimer;\r\n","// React ----------------------------------------------------------------//\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n// Presenters -----------------------------------------------------------//\r\nimport { Alert, Button, Hero } from \"../../presenters\";\r\n\r\n// Components -----------------------------------------------------------//\r\nimport PerformanceChartSection from \"./performance-chart\";\r\nimport InvestBannerSection from \"./invest-banner\";\r\nimport PerformanceTableSection from \"./performance-table\";\r\nimport StatisticsTableSection from \"./statistics-table\";\r\nimport PortfolioCompositionSection from \"./portfolio-composition\";\r\nimport LoadingGif from '../../img/loading_pandhora.gif';\r\nimport ImageLinkedin from \"../../img/linkedin.png\";\r\nimport ImageWhatsApp from \"../../img/whatsapp.png\";\r\nimport ImageTelegram from \"../../img/telegram.png\";\r\nimport axios from \"axios\";\r\nimport _, { random } from \"lodash\";\r\n\r\n// CSS ------------------------------------------------------------------//\r\nimport \"./index.css\";\r\nimport ASSET_CLASSES from \"../../asset-classes\";\r\n\r\n// Utils ---------------------------------------------------------------//\r\nimport { API, Backtester, MarketData } from \"../../utils\";\r\nimport Disclaimer from \"./disclaimer\";\r\n\r\n\r\n\r\n/**\r\n * Display the results of the simulation with the parameters\r\n * \r\n * chose on the main page.\r\n *\r\n * @author Giovanna Marinelli\r\n */\r\nconst Result = (props) => {\r\n const history = useHistory();\r\n const shareLink = window.location.href;\r\n\r\n const [copyLink, setCopyLink] = useState({ \"pressed\": false, \"action\": false, \"text\": \"Copiar Link\" });\r\n\r\n const [launchFirstTime, setlaunchFirstTime] = useState(true);\r\n const [referenceDate, setReferenceDate] = useState('2016-06-07');\r\n\r\n /**\r\n * Method to scroll page top\r\n *\r\n */\r\n const scrollPageUp = () => {\r\n window.scrollTo(0, 0)\r\n }\r\n\r\n\r\n /**\r\n * First time page load and url has reload=true, page go top\r\n *\r\n */\r\n if (launchFirstTime) {\r\n // Verify if url has reload=true\r\n if (performance.getEntriesByType(\"navigation\")[0].type === \"reload\") {\r\n scrollPageUp();\r\n }\r\n\r\n setlaunchFirstTime(false);\r\n }\r\n\r\n /**\r\n * Create a portfolio from a set of target weights\r\n *\r\n * @param marketData A market data object containing all the necessary\r\n * market data to generate the portfolio\r\n * @param targetWeights The target weights on rebalance.\r\n */\r\n const createPortfolioFromTargetWeights = (marketData, targetWeights) => {\r\n // Backtest the portfolio with the specified target weights\r\n const backtester = new Backtester();\r\n const portfolio = backtester.createPortfolio(targetWeights, marketData);\r\n\r\n // Add a benchmark\r\n const benchmark = {};\r\n Object.keys(marketData.returnsMap).forEach(\r\n (date) => (benchmark[date] = marketData.returnsMap[date][\"CDI\"] || 0.0)\r\n );\r\n\r\n portfolio.setBenchmarkReturns(benchmark);\r\n\r\n // Return the created portfolio\r\n return portfolio;\r\n };\r\n\r\n /**\r\n * Copy and interation buttonn copy.\r\n * @param shareLink The url with results to be share\r\n */\r\n const copyButton = () => {\r\n navigator.clipboard.writeText(shareLink);\r\n setCopyLink({ \"pressed\": true, \"text\": \"Copiado\" });\r\n };\r\n\r\n /**\r\n * Create a portfolio from the fetched allocation.\r\n *\r\n * @param {MarketData} marketData The market data necessary to calculate\r\n * the portfolio\r\n * @returns A Portfolio object witht he backtested portfolio\r\n */\r\n const createPortfolio = (marketData) => {\r\n // Create targetWeights from allocation\r\n const targetWeights = {};\r\n Object.keys(_.omit(allocation, \"id\")).forEach(\r\n (symbol) =>\r\n (targetWeights[ASSET_CLASSES[symbol].dbName] = allocation[symbol])\r\n );\r\n // Return portfolio\r\n return createPortfolioFromTargetWeights(marketData, targetWeights);\r\n };\r\n\r\n /**\r\n * Create a portfolio with allocation without Pandhora LB and Essencial.\r\n * @param {MarketData} marketData The market data necessary to calculate\r\n * the portfolio\r\n */\r\n const createPortfolioExPandhora = (marketData) => {\r\n // Create targetWeights from allocation\r\n const targetWeights = {};\r\n Object.keys(_.omit(allocationInitial, \"id\")).forEach(\r\n (symbol) =>\r\n (targetWeights[ASSET_CLASSES[symbol].dbName] = allocationInitial[symbol])\r\n );\r\n // Distribute pandhora allocation betwehn the other classes that\r\n // the user have allocation. In the case that the user only chose\r\n // allocation in pandhora funds, all will be 0.0\r\n // TODO: Do not hardcode categories.\r\n const essencial = 'Pandhora Essencial FIC FIM';\r\n const lb = \"Pandhora Long Bias FIC FIM\"\r\n\r\n const assetClasses = Object.keys(targetWeights);\r\n\r\n // Find how many classes' allocation are != 0.0\r\n const pandhoraFunds = new Set([essencial, lb])\r\n let countCClasses = 0.0;\r\n\r\n assetClasses.forEach((assetClass) => {\r\n if (targetWeights[assetClass] !== 0.0 && !pandhoraFunds.has(assetClass)) {\r\n countCClasses++;\r\n }\r\n });\r\n // Sum allocation of LB and Essencial\r\n const pandhoraAllocation =\r\n (targetWeights[essencial] +\r\n targetWeights[lb]);\r\n\r\n // The sum allocation calculate above is reallocated in other asset class,\r\n // then Essencial and LB is removed\r\n assetClasses.forEach((assetClass) => {\r\n if (targetWeights[assetClass] !== 0.0 && !pandhoraFunds.has(assetClass)) {\r\n targetWeights[assetClass] /= (1 - pandhoraAllocation);\r\n }\r\n });\r\n\r\n // Set pandhora funds allocation to 0\r\n targetWeights[essencial] = 0.0;\r\n targetWeights[lb] = 0.0;\r\n\r\n return createPortfolioFromTargetWeights(marketData, targetWeights);\r\n };\r\n\r\n // Portfolio allocation\r\n const [allocationInitial, setAllocationInitial] = useState(undefined);\r\n const [allocation, setAllocation] = useState(undefined);\r\n\r\n // Portfolio allocation type\r\n const [allocationConfig, setAllocationConfig] = useState(undefined);\r\n\r\n // Indexes data\r\n const [indexData, setIndexData] = useState(undefined);\r\n\r\n // Fund quotas data\r\n const [fundData, setFundData] = useState(undefined);\r\n\r\n // Error state\r\n const [error, setError] = useState(false);\r\n\r\n // Loading State\r\n const [loading, setLoading] = useState(true);\r\n const [loading2, setLoading2] = useState(true);\r\n const [loading3, setLoading3] = useState(true);\r\n\r\n\r\n /**\r\n * Get data given a URL, the data method set to save data received and the reference load\r\n * @param {url} url Url to get the data\r\n * @param {setHook} setHook setStatus method to be saved the get result\r\n * @param {setLoadingHook} setLoadingHook setStatus method to determ if the load is finished\r\n */\r\n const fetchData = async (url, setHook, setLoadingHook) => {\r\n try {\r\n const result = await axios(url);\r\n setHook(result.data);\r\n setLoadingHook(false)\r\n } catch (e) {\r\n console.error(\"Whoopsie!\", e);\r\n setError(true);\r\n }\r\n };\r\n\r\n /**\r\n * Get data given a URL, the data method set to save data received and the reference load\r\n * @param {url} url Url to get the data\r\n * @param {setHook} setHook setStatus method to be saved the get result\r\n * @param {setLoadingHook} setLoadingHook setStatus method to determ if the load is finished\r\n */\r\n const fetchDataAllocation = async (url, setHook, setLoadingHook) => {\r\n try {\r\n const result = await axios(url);\r\n if (result.data != undefined) {\r\n if ((result.data['pandhoraLb'] != 0.0) || result.data['pandhoraLb'] != 0) {\r\n setReferenceDate('2019-07-24');\r\n } else {\r\n setReferenceDate('2016-06-07');\r\n }\r\n }\r\n setAllocationConfig({ 'perfil': result.data['perfil'], 'id': result.data['id'] })\r\n delete result.data['perfil'];\r\n delete result.data['id'];\r\n setAllocationInitial(result.data);\r\n setHook(result.data);\r\n setLoadingHook(false)\r\n\r\n } catch (e) {\r\n console.error(\"Whoopsie!\", e);\r\n setError(true);\r\n }\r\n };\r\n\r\n // Fetch allocation\r\n useEffect(() => {\r\n const url = `${API.URL}/allocation/${props.match.params.id}`;\r\n fetchDataAllocation(url, setAllocation, setLoading);\r\n }, []);\r\n\r\n // Fetch index data\r\n useEffect(() => {\r\n const indexIds = Object.keys(ASSET_CLASSES)\r\n .map((k) => ASSET_CLASSES[k].indexId)\r\n .filter((e) => e && e !== null)\r\n .reduce((str, elem) => (str += elem + \",\"), \"\")\r\n .slice(0, -1);\r\n const url = `${API.URL}/index/daily?ids=${indexIds}`;\r\n\r\n fetchData(url, setIndexData, setLoading2);\r\n }, []);\r\n\r\n\r\n // Fetch fund quotas\r\n useEffect(() => {\r\n const fundIds = Object.keys(ASSET_CLASSES)\r\n .map((k) => ASSET_CLASSES[k].fundId)\r\n .filter((e) => e && e !== null)\r\n .reduce((str, elem) => (str += elem + \",\"), \"\")\r\n .slice(0, -1);\r\n const url = `${API.URL}/fund/daily?ids=${fundIds}`;\r\n fetchData(url, setFundData, setLoading3);\r\n }, []);\r\n\r\n let portfolio;\r\n let portfolioExPandhora;\r\n let marketData;\r\n\r\n /**\r\n * Select from a list of dictionary the datas to be used on calculus.\r\n * @param {datas} datas list of dictionary with all values and reference dates\r\n * @param {_referenceDate} _referenceDate date to be used as filter(less than equals)\r\n */\r\n const removeDatesLTE = (datas, _referenceDate) => {\r\n let item;\r\n let arraydata = []\r\n for (var i in datas) {\r\n item = datas[i];\r\n if (item['referenceDate'] >= _referenceDate) {\r\n arraydata.push(item);\r\n }\r\n }\r\n return arraydata;\r\n }\r\n\r\n if (fundData && indexData) {\r\n\r\n let indexDataSlice = removeDatesLTE(indexData, referenceDate);\r\n let fundDataSlice = removeDatesLTE(fundData, referenceDate);\r\n\r\n marketData = new MarketData(indexDataSlice, fundDataSlice);\r\n\r\n portfolio = createPortfolio(marketData);\r\n portfolioExPandhora = createPortfolioExPandhora(marketData);\r\n }\r\n\r\n const redirectOnError = () => {\r\n history.push(\"/\");\r\n };\r\n\r\n return (\r\n
\r\n {loading || loading2 || loading3 ?\r\n
\r\n \r\n
:\r\n <>\r\n {\r\n error ? (\r\n \r\n \r\n Um erro ocorreu ao calcular o seu resultado. Por favor tente\r\n novamente mais tarde ou contate o administrador da página.\r\n \r\n {setTimeout(redirectOnError, 5000)}\r\n \r\n ) : null\r\n }\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n Compartilhar em \r\n
\r\n \"linkedin\" { window.open(\"https://www.linkedin.com/sharing/share-offsite/?url=\" + shareLink.replace(\"#\", \"%23\"), '_blank').focus() }} />\r\n \"whatsapp\" { window.open(\"https://wa.me/?text=\" + shareLink.replace(\"#\", \"%23\"), '_blank').focus() }} />\r\n \"telegram\" { window.open(\"https://t.me/share/url?url=\" + shareLink.replace(\"#\", \"%23\"), '_blank').focus() }} />\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Result;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADLSURBVHgB7ZPBDYJAEEX/jA1gB9gJV2I8UAGWoHcNi7EAW6AGQ7xaCiVw1rjrgB5YQjCyJsbIS3bzZw7zks0sMPICsqr0FEPrg6QSzApJmMERtiqtldyeHP8pcoZbtdfIJT4uIKzlLurhhBS/AGEom2OACccywgdMgZvOsF+c+wVJbqw6nVNnv9qwx0LYGOnvQutpGUPoGl5B0t/mS3eBMRnoMgXxrM7WRIrdBXxVUFEJFRaSVy174C5QUdHIvf9lmOANRsEfCEa+zx0k/Dp8nng1ZAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKaSURBVHgBfZS/b9NQEMfPjk3AaRKjZMiAS8JAKtGhHRhoByqBGElG2FIxUgkhhbJBgAVVDEiIEdH+BVAYQFCkdqAMDAlLaQZIiCOFqLbi/LAT55e5e2qiBDU96enF9rvPfe/uXTj4z3K5nOx2uxNTU1MxnufnOI6THccx+v1+pt1ub9Tr9e1IJJKHSVYul+N4qIIODlmh+sfZ136yNbBms5nTNC0x6scNfui6/tDv96fsvg1ffn+GLVxWxxoelEQJ5kLzcD0aA9l9GqrVaioQCDwaQorFYiIUCr027Ao8210DzdImqg1IQbi3sMpAqOgu+j1nkEajkeNOcOEnOykGUPzT0EQVk2AEenA5BX27byAo4iIVsiwnPv36COm/aZhHycnF+6D4FNhVvx4JoQCiS4QLodmTrVarzPt8vpjL5Ro6nA/OsD2KuyRIE9OiumH3wOv1xngEhK0R6YOdVFldayKEfHRLB/Ln8VlujnThGyrSETSN6RynhAVsHgB2Pcz3ej04JUpjEV5+f8HeJRdXIYhFJFtQFiEamBmDeDAIQvICQna8ojcclAKYis4+qlUV1tOvIDF/C5LYTkoxelird9lNeI+LOnQGu1ir1X7w2N51pMGVc9fGolBNHmPLs3p2CCDTD2tGyigL27bfDu5JBe+JfOfDypG5022llqs1laVLKp5eXQPTNPM4YxGhVCqFBUGQ9/Q9gGM6QYrI6CLevrgCnU4HKpXKMr0TcC3h1OIFMuHG7E02H1l9H2dnC2tTGIKowJcwBZodnGYwDGNZUZRt9hFpbwYTinQHU3O63S57Ntumo5kHbCej6cZC5lRVXRpVyuH0pkVRNNB5EwuVIXqhUIh7PJ44KjyL/ydhdDYQnMEzG8PoI/YPswuAm+4++N8AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGUSURBVHgBrZI9SwNBEIbfmd0oWtmI4Ack/8DCziYp7AQRLKxEi1PEQhQLQVDRWtEqCoJ/wdZG09griFjp4WdjYSEi5m7HuUv8iPFEQ1447nbnnWdm5xaogwi1aveyhYupYTbU9n9I/jprG2hAHI3qqkWfov1TYlT1NTUFpiGt2i1OBB+nkKPfIds3OUM8j0D6wOUkwZ5+XAhhNl6KnFRDtq562KT6CW661K6Ucgk+O3iOuBdwy+92EinYz3btCLEZVHtWTRVcNa6HtrgKNC6SuJmvsTBgn3j7dpkY5arfJQUyqYXgyZ5y88smCUYr4/QQeu2tTCQ+iI4rUoFHhsyEXmcuoOcz0/SyXw2IjO40Rn1s5O/TxoRZ7b03dLyKiY6reM/Kgboz+EEibsWNdy0l35MY6g61TDrJosPPBV5XgZMMpa6SAZECG8RjSIQIpC1+66/Vq+VXxQXnGMs8/gpRSlMEcMXXnBvvyBBkDRVHUUhZyRA2dxEAkxk/bt3rnNPyI+9diaF91CwduN253kD+Mo166g3DUJ95kVpwFgAAAABJRU5ErkJggg==\"","import React from \"react\";\r\nimport { ParameterActions } from \"../actions\";\r\n\r\nconst defaultState = {\r\n definedParameters: false,\r\n posFixado: null,\r\n creditoPrivado: null,\r\n multimercado: null,\r\n rendaVariavelGlobal: null,\r\n rendaFixaGlobal: null,\r\n rendaVariavel: null,\r\n};\r\n\r\nconst parametersReducer = (state = defaultState, action) => {\r\n switch (action.type) {\r\n case ParameterActions.SetParameters:\r\n return action.payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default parametersReducer;\r\n","import { combineReducers } from \"redux\";\r\nimport parametersReducer from \"./parameters\";\r\n\r\nconst coreReducer = combineReducers({\r\n parameters: parametersReducer,\r\n});\r\n\r\nexport default coreReducer;\r\n","import { createStore } from \"redux\";\r\nimport coreReducer from \"./reducers\";\r\n\r\nconst store = createStore(coreReducer);\r\n\r\nexport default store;\r\n","import React, { useState, useEffect } from 'react'\r\nimport \"./index.css\";\r\nimport { Route, Switch } from 'react-router-dom';\r\n\r\nconst Page = ({ children }) => {\r\n const [collapsed, setCollapsed] = useState(true);\r\n const [headerIsTop, setHeaderIsTop] = useState(true);\r\n\r\n /**\r\n * Collapse header when app\r\n */\r\n const toggleNavbar = () => {\r\n setCollapsed && setCollapsed(!collapsed);\r\n };\r\n\r\n /**\r\n * Creates a moviment when user scroll to top. \r\n */\r\n const listenScrollEvent = (event) => {\r\n if (window.scrollY < 73) {\r\n setHeaderIsTop && setHeaderIsTop(true);\r\n } else {\r\n setHeaderIsTop && setHeaderIsTop(false);\r\n }\r\n }\r\n /**\r\n * Listen scroll event when scroll full top\r\n */\r\n useEffect(() => {\r\n window.addEventListener('scroll', listenScrollEvent);\r\n\r\n return () =>\r\n window.removeEventListener('scroll', listenScrollEvent);\r\n }, []);\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Login\r\n Quero Investir\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Login\r\n Quero Investir\r\n
\r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n

\r\n A Pandhora Investimentos Ltda.(“Pandhora”) é uma gestora de\r\n recursos devidamente credenciada na Comissão de Valores\r\n Mobiliários - CVM como administradora de carteira, de acordo com o\r\n Ato Declaratório CVM n.º 17.517 e constituída sob os moldes da\r\n Instrução CVM Nº558/15. A gestora é aderente ao códigos ANBIMA de\r\n Regulação e Melhores Práticas para Administração de Recursos de\r\n Terceiros e código ANBIMA de Regulação e Melhores Práticas para o\r\n Programa de Certificação Continuada. A Pandhora não comercializa\r\n ou distribui quotas de fundos de investimento, portanto todas as\r\n informações contidas neste website não devem ser consideradas como\r\n oferta de venda de cotas de fundos de investimentos ou de qualquer\r\n título ou valor mobiliário, recomendação de investimento e nem\r\n deve servir como única base para tomada de decisões de\r\n investimento. Fundos de investimentos não contam com a garantia do\r\n administrador do fundo, do gestor da carteira, de qualquer\r\n mecanismo de seguro ou, ainda, do Fundo Garantidor de Créditos -\r\n FGC. A rentabilidade obtida no passado não representa garantia de\r\n rentabilidade futura. A rentabilidade divulgada não é líquida de\r\n impostos. Ao investidor é recomendada a leitura cuidadosa do\r\n prospecto e do regulamento do fundo de investimento ao aplicar os\r\n seus recursos. O Fundo Pandhora não se responsabiliza pela\r\n publicação acidental de informações incorretas, nem por decisões\r\n de investimentos tomadas com base neste material. O conteúdo deste\r\n website não pode ser reproduzido sem prévia e expressa\r\n autorização. A Pandhora, seus sócios e funcionários não se\r\n responsabilizam pelo uso indevido do conteúdo deste website, pela\r\n publicação acidental de informações incorretas, nem por decisões\r\n de investimentos tomadas com base neste material. SUPERVISÃO E\r\n FISCALIZAÇÃO: Comissão de Valores Mobiliários – CVM. Serviço de\r\n Atendimento ao Cidadão em www.cvm.gov.br\r\n

\r\n
\r\n
\r\n

Pandhora Investimentos LTDA - Todos os direitos reservados

\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Page;","import { HashRouter, Route, Switch } from \"react-router-dom\";\r\nimport Main from \"./pages/main\";\r\nimport Result from \"./pages/result\";\r\n\r\n// Redux\r\nimport { Provider } from \"react-redux\";\r\nimport store from \"./redux/store\";\r\nimport Page from \"./pages/page\";\r\n\r\nconst App = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","const reportWebVitals = onPerfEntry => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}