diff --git a/README.rst b/README.rst index 7f2fa04..d42b825 100644 --- a/README.rst +++ b/README.rst @@ -19,23 +19,17 @@ for a walkthrough of the package's functionality and examples. For a high-level introduction to the investment framework, see this `YouTube video `_ and `Medium article `_. -For an in-depth mathematical introduction to the investment framework, see -these `SSRN articles `_. +For a mathematical introduction to the investment framework, see these +`SSRN articles `_. -For a careful and pedagogical presentation of the investment framework, -see the `Portfolio Construction and Risk Management Book `_ -crowdfunding campaign. +For a pedagogical and deep presentation of the investment framework, +you can access the `Portfolio Construction and Risk Management Book `_. The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum. -If you like this package, we invite you to show your support by giving it a -GitHub star. The greater the number of stars it receives, the more time and -energy we will invest in enhancing its functionality and providing additional -examples. - Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our `website `_. @@ -72,6 +66,6 @@ Disclaimer This package is completely separate from our proprietary solutions and therefore not representative of the quality and functionality offered by the Investment Simulation -and Investment Analysis modules. If you are an institutional investor who wants to +and Investment Analysis modules. If you are an institutional investor and want to experience how these methods can be used for sophisticated analysis in practice, please request a demo by sending an email to demo@fortitudo.tech. diff --git a/docs/build/doctrees/documentation.doctree b/docs/build/doctrees/documentation.doctree index fefe239..0f6eab1 100644 Binary files a/docs/build/doctrees/documentation.doctree and b/docs/build/doctrees/documentation.doctree differ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index b8ed618..7a8da68 100644 Binary files a/docs/build/doctrees/environment.pickle and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 4ef0ff2..8829606 100644 Binary files a/docs/build/doctrees/index.doctree and b/docs/build/doctrees/index.doctree differ diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index e32ede5..109eca1 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 97eebfb36ce3d804e6eb83040da75dbe +config: 87a22906f6ffd59cc805aedeef7b96fe tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt index 3a99aa4..1624a39 100644 --- a/docs/build/html/_sources/index.rst.txt +++ b/docs/build/html/_sources/index.rst.txt @@ -8,23 +8,17 @@ for a walkthrough of the package's functionality and examples. For a high-level introduction to the investment framework, see this `YouTube video `_ and `Medium article `_. -For an in-depth mathematical introduction to the investment framework, see -these `SSRN articles `_. +For a mathematical introduction to the investment framework, see these +`SSRN articles `_. -For a careful and pedagogical presentation of the investment framework, -see the `Portfolio Construction and Risk Management Book `_ -crowdfunding campaign. +For a pedagogical and deep presentation of the investment framework, +you can access the `Portfolio Construction and Risk Management Book `_. The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum. -If you like this package, we invite you to show your support by giving it a -GitHub star. The greater the number of stars it receives, the more time and -energy we will invest in enhancing its functionality and providing additional -examples. - Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our `website `_. @@ -34,7 +28,7 @@ Disclaimer This package is completely separate from our proprietary solutions and therefore not representative of the quality and functionality offered by the Investment Simulation -and Investment Analysis modules. If you are an institutional investor who wants to +and Investment Analysis modules. If you are an institutional investor and want to experience how these methods can be used for sophisticated analysis in practice, please request a demo by sending an email to demo@fortitudo.tech. diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index 30fee9d..f316efc 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js index d06a71d..4d67807 100644 --- a/docs/build/html/_static/doctools.js +++ b/docs/build/html/_static/doctools.js @@ -4,7 +4,7 @@ * * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js index 250f566..367b8ed 100644 --- a/docs/build/html/_static/language_data.js +++ b/docs/build/html/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -13,7 +13,7 @@ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js index 7918c3f..92da3f8 100644 --- a/docs/build/html/_static/searchtools.js +++ b/docs/build/html/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -99,7 +99,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => { .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); // highlight search terms in the summary if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js @@ -116,8 +116,8 @@ const _finishSearch = (resultCount) => { ); else Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, @@ -137,6 +137,22 @@ const _displayNextItem = ( // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -160,13 +176,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -239,16 +268,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -284,16 +304,32 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { let score = Math.round(100 * queryLower.length / title.length) - results.push([ + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", @@ -308,46 +344,47 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -361,7 +398,12 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy @@ -466,14 +508,18 @@ const Search = { // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -496,9 +542,8 @@ const Search = { // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -549,8 +594,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/docs/build/html/contributing.html b/docs/build/html/contributing.html index e50a400..391596f 100644 --- a/docs/build/html/contributing.html +++ b/docs/build/html/contributing.html @@ -17,7 +17,7 @@ - + @@ -38,7 +38,7 @@ fortitudo.tech
- v1.0.7 + v1.1
diff --git a/docs/build/html/documentation.html b/docs/build/html/documentation.html index e40e7e4..ad9ac80 100644 --- a/docs/build/html/documentation.html +++ b/docs/build/html/documentation.html @@ -17,7 +17,7 @@ - + @@ -39,7 +39,7 @@ fortitudo.tech
- v1.0.7 + v1.1
@@ -67,6 +67,7 @@
  • Functions diff --git a/docs/build/html/index.html b/docs/build/html/index.html index bfd1574..54912c1 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -17,8 +17,9 @@ - + + @@ -37,7 +38,7 @@ fortitudo.tech
    - v1.0.7 + v1.1
    @@ -86,19 +87,14 @@

    Fortitudo Technologies Open SourceYouTube video and Medium article. -For an in-depth mathematical introduction to the investment framework, see -these SSRN articles.

    -

    For a careful and pedagogical presentation of the investment framework, -see the Portfolio Construction and Risk Management Book -crowdfunding campaign.

    +For a mathematical introduction to the investment framework, see these +SSRN articles.

    +

    For a pedagogical and deep presentation of the investment framework, +you can access the Portfolio Construction and Risk Management Book.

    The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum.

    -

    If you like this package, we invite you to show your support by giving it a -GitHub star. The greater the number of stars it receives, the more time and -energy we will invest in enhancing its functionality and providing additional -examples.

    Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our website.

    @@ -106,7 +102,7 @@

    Fortitudo Technologies Open Source

    This package is completely separate from our proprietary solutions and therefore not representative of the quality and functionality offered by the Investment Simulation -and Investment Analysis modules. If you are an institutional investor who wants to +and Investment Analysis modules. If you are an institutional investor and want to experience how these methods can be used for sophisticated analysis in practice, please request a demo by sending an email to demo@fortitudo.tech.

    diff --git a/docs/build/html/installation.html b/docs/build/html/installation.html index bb905c3..3a16102 100644 --- a/docs/build/html/installation.html +++ b/docs/build/html/installation.html @@ -17,7 +17,7 @@ - + @@ -38,7 +38,7 @@ fortitudo.tech
    - v1.0.7 + v1.1
    diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index 0981d8b..3929281 100644 --- a/docs/build/html/objects.inv +++ b/docs/build/html/objects.inv @@ -1,7 +1,6 @@ # Sphinx inventory version 2 # Project: fortitudo.tech -# Version: v1.0.7 +# Version: v1.1 # The remainder of this file is compressed using zlib. xڵMo0 kk;+ڡWD, -%8Q`w}P87T'4ۺ*o;jzjɒsrn^vaB f݂I4d; Rp+9{pILa~3}~]sq!N/넨 1;tn^M| . hY-"7m׏@q G8GI3<8 IŜ055V̺ea.R5K@FN@֜;SpN!/p, -}SOՙQ. ˂igT{>SeFfO܊NnT?].h2cp]pPX:>U7;H 1_Yv$c7'G+k@gbIF͟)rrx>lb~5&2>N./݌-2ʥps4;OUD`\)Dz)`Ob \ No newline at end of file +%8Q`w}Đ87T'4ۺ*o;jzjɒsZU[wÄZ{35A$/hv2v#(Wr:,i$^"gfz~]sr!NO넨 1;tn^N| .] i F2fuVOHeɊǦ`v(ȑ?VR{ 8qR2'Lmkn|xh܍[jCZx<OU[ šs^rj<NV7KB$v>kuf nЀ|qfJ'3U`G52l} VtjuAHuA+}oQP;肓ϊ4ƲڠA`n,2β#P|릾I<9 _5_zD=ќ{g]|%lدƅ ϳ.V`{nR9*"^cY`OQr& \ No newline at end of file diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html index db37471..d33ab27 100644 --- a/docs/build/html/py-modindex.html +++ b/docs/build/html/py-modindex.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ fortitudo.tech
    - v1.0.7 + v1.1
    diff --git a/docs/build/html/references.html b/docs/build/html/references.html index 9758a2e..5df3d83 100644 --- a/docs/build/html/references.html +++ b/docs/build/html/references.html @@ -17,7 +17,7 @@ - + @@ -37,7 +37,7 @@ fortitudo.tech
    - v1.0.7 + v1.1
    diff --git a/docs/build/html/search.html b/docs/build/html/search.html index 6254ea4..8c83565 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -17,7 +17,7 @@ - + @@ -38,7 +38,7 @@ fortitudo.tech
    - v1.0.7 + v1.1
    diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index c18871b..8d7f21b 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["contributing", "documentation", "examples", "index", "installation", "references"], "filenames": ["contributing.rst", "documentation.rst", "examples.rst", "index.rst", "installation.rst", "references.rst"], "titles": ["Contributing", "Documentation", "Examples", "Fortitudo Technologies Open Source", "Installation Instructions", "References"], "terms": {"you": [0, 1, 2, 3, 4], "ar": [0, 1, 2, 3], "welcom": [0, 3], "thi": [0, 1, 2, 3, 4], "packag": [0, 1, 2, 3, 4], "fork": 0, "fortitudo": [0, 1, 2, 4], "tech": [0, 1, 2, 3, 4], "github": [0, 2, 3], "repositori": [0, 2], "creat": [0, 4], "pull": 0, "request": [0, 3], "should": [0, 4], "alwai": 0, "sent": 0, "dev": 0, "branch": 0, "we": [0, 2, 3, 4], "especi": 0, "appreci": 0, "relat": [0, 1, 2, 3], "e": [0, 1, 3, 4], "g": [0, 1, 3, 4], "make": [0, 2], "avail": [0, 2], "conda": [0, 4], "forg": [0, 4], "us": [0, 1, 2, 3, 4], "environ": [0, 2, 4], "specifi": [0, 3], "requir": [0, 4], "yml": 0, "file": 0, "locat": 0, "root": 0, "directori": 0, "i": [0, 1, 3], "easiest": 0, "wai": 0, "start": [0, 1, 2], "code": [0, 1, 2], "env": 0, "The": [0, 1, 2, 3, 4], "style": 0, "guid": 0, "mostli": 0, "follow": [0, 1, 2, 4], "pep": 0, "8": [0, 1, 5], "some": [0, 2, 3, 4], "import": [0, 1], "modif": 0, "can": [0, 1, 2, 3, 4], "found": 0, "vscode": 0, "set": [0, 1], "json": 0, "If": [0, 1, 2, 3, 4], "visual": 0, "studio": 0, "sure": 0, "your": [0, 1, 3], "basic": 0, "rule": 0, "most": [0, 1], "addit": [0, 1, 3, 4], "allow": [0, 1, 3], "line": 0, "length": 0, "99": 0, "charact": 0, "both": 0, "docstr": 0, "capit": 0, "ey": 0, "variabl": 0, "type": [0, 1], "hint": 0, "introduc": [0, 1, 2], "484": 0, "do": [0, 4], "group": 0, "oper": 0, "accord": 0, "prioriti": 0, "gener": [0, 1], "name": [0, 1], "convent": 0, "descript": 0, "function": [0, 2, 3], "often": 0, "short": 0, "veri": [0, 1, 2, 3, 4], "mathemat": [0, 2, 3], "part": 0, "replic": [0, 1, 2], "refer": 0, "believ": 0, "easier": [0, 2], "link": [0, 1], "theori": [0, 1, 5], "encourag": 0, "keep": 0, "individu": 0, "small": 0, "avoid": 0, "impos": 0, "object": [0, 1], "orient": 0, "design": 0, "pattern": 0, "p": [1, 2], "l": [1, 2, 5], "paramet": [1, 2, 5], "from": [1, 2, 3], "vorobet": [1, 2, 5], "2022": [1, 2, 5], "2021": [1, 2, 5], "assum": 1, "return": 1, "log": 1, "normal": 1, "distribut": 1, "while": 1, "given": 1, "danish": 1, "common": 1, "expect": 1, "2nd": 1, "half": 1, "exampl": [1, 3, 4], "immedi": 1, "explor": [1, 2, 3, 4], "also": [1, 4], "test": [1, 2, 5], "understand": [1, 2], "result": [1, 2], "sequenti": [1, 2, 5], "In": 1, "abov": 1, "time": [1, 2, 3], "seri": [1, 2], "an": [1, 2, 3], "equiti": 1, "index": 1, "associ": 1, "impli": 1, "volatil": [1, 2], "surfac": 1, "risk": [1, 2, 3, 5], "free": 1, "zero": 1, "coupon": 1, "curv": 1, "credit": 1, "spread": 1, "includ": 1, "valid": 1, "model": [1, 2], "approach": 1, "see": [1, 2, 3], "introduct": [1, 2, 3], "how": [1, 2, 3], "simpl": 1, "well": [1, 3], "view": [1, 2, 3, 5], "factor": [1, 2], "load_paramet": 1, "load": 1, "http": [1, 5], "ssrn": [1, 2, 3, 5], "com": [1, 5], "abstract": [1, 5], "4034316": [1, 5], "tupl": 1, "list": 1, "ndarrai": 1, "instrument": [1, 5], "mean": [1, 2], "vector": [1, 3], "covari": 1, "matrix": 1, "load_pnl": 1, "3936392": [1, 5], "4217884": [1, 5], "4444291": [1, 5], "datafram": 1, "load_risk_factor": 1, "7_riskfactorview": 1, "ipynb": 1, "load_time_seri": 1, "sde": 1, "base": 1, "plot_vol_surfac": 1, "vol_surfac": 1, "figsiz": 1, "none": 1, "plot": 1, "vol": 1, "int": 1, "scenario": [1, 2], "shape": 1, "t": 1, "35": 1, "": [1, 2, 3, 5], "contain": [1, 2], "float": 1, "figur": 1, "size": 1, "default": [1, 2], "10": [1, 5], "7": [1, 5], "ax": 1, "3d": 1, "solv": 1, "problem": 1, "q": 1, "text": 1, "argmin": 1, "left": 1, "x": 1, "ln": 1, "right": 1, "subject": 1, "constraint": [1, 3], "b": 1, "gx": 1, "leq": 1, "h": 1, "wa": 1, "first": 1, "meucci": [1, 5], "2008": [1, 5], "implement": [1, 2, 3], "notat": 1, "entropy_pool": 1, "A": [1, 2, 5], "method": [1, 3], "comput": [1, 5], "posterior": 1, "probabl": 1, "prior": 1, "1": [1, 2, 5], "equal": 1, "m": 1, "inequ": 1, "n": [1, 4], "str": 1, "tnc": 1, "bfg": 1, "below": [1, 2], "when": 1, "work": [1, 2, 3], "thei": 1, "calcul": 1, "moment": 1, "correl": 1, "verifi": 1, "have": [1, 2, 3, 4], "been": 1, "correctli": 1, "varianc": [1, 2, 5], "correlation_matrix": 1, "r": [1, 5], "union": 1, "np": 1, "ones": 1, "covariance_matrix": 1, "portfolio_cvar": 1, "alpha": 1, "demean": [1, 2], "cvar": [1, 2, 3, 5], "exposur": [1, 2], "num_portfolio": 1, "level": [1, 2, 3], "0": [1, 5], "95": 1, "bool": 1, "boolean": 1, "indic": 1, "whether": 1, "true": 1, "portfolio_var": 1, "var": 1, "portfolio_vol": 1, "simulation_mo": 1, "skew": 1, "kurtosi": 1, "4": [1, 5], "consist": 1, "black": 1, "european": 1, "call": 1, "put": 1, "call_opt": 1, "f": 1, "k": 1, "sigma": 1, "formula": 1, "forward": 1, "matur": 1, "strike": 1, "valu": [1, 2, 5], "interest": 1, "rate": 1, "continu": 1, "compound": 1, "spot": 1, "dividend": 1, "yield": 1, "put_opt": 1, "meancvar": 1, "meanvari": 1, "min_": 1, "mathcal": 1, "being": 1, "mathbb": 1, "mu": 1, "geq": 1, "mu_": 1, "target": 1, "v": [1, 2], "ge": 1, "ae": 1, "here": 1, "rel": [1, 2], "market": [1, 2, 5], "rockafellar": [1, 5], "uryasev": [1, 5], "2000": [1, 5], "algorithm": 1, "k\u00fcnzi": [1, 5], "bai": [1, 5], "mayer": [1, 5], "2006": [1, 5], "For": [1, 2, 3, 4], "measur": 1, "standard": 1, "quadrat": 1, "program": 1, "solver": 1, "class": 1, "kwarg": 1, "effici": 1, "bender": 1, "decomposit": 1, "dict": 1, "dictionari": 1, "rais": 1, "valueerror": 1, "infeas": 1, "efficient_fronti": 1, "frontier": 1, "number": [1, 3], "span": 1, "9": [1, 5], "unbound": 1, "efficient_portfolio": 1, "return_target": 1, "minimum": [1, 3], "cvxopt": [1, 4], "These": 1, "adjust": 1, "directli": [1, 3], "instruct": 1, "control": 1, "global": 1, "cvar_opt": 1, "ft": 1, "fals": 1, "r_scalar": 1, "10000": 1, "particular": 1, "instanc": 1, "opt": 1, "scale": 1, "1000": 1, "maxit": 1, "maximum": 1, "iter": 1, "relax": 1, "master": 1, "500": [1, 2], "reltol": 1, "toler": 1, "differ": 1, "between": 1, "current": 1, "best": [1, 4], "upper": 1, "lower": 1, "bound": 1, "1e": 1, "abstol": 1, "absolut": 1, "less": 1, "than": 1, "stop": 1, "one": 1, "condit": [1, 5], "satisfi": 1, "percentag": 1, "case": 1, "due": 1, "converg": 1, "100": 1, "might": [1, 2, 4], "need": 1, "them": [1, 2, 3], "exponenti": [1, 2], "decai": [1, 2], "histor": [1, 2], "stress": [1, 2, 5], "calibr": 1, "which": 1, "new": 1, "sampl": 1, "exp_decay_prob": 1, "half_lif": 1, "life": 1, "normal_exp_decay_calib": 1, "jupyt": 2, "notebook": [2, 4], "combin": 2, "optim": [2, 3, 4, 5], "entropi": [2, 3, 5], "pool": [2, 3, 5], "origin": 2, "heurist": [2, 5], "separ": [2, 3], "bonu": 2, "h1": 2, "stoxx": 2, "50": 2, "accompani": 2, "comparison": 2, "explain": 2, "why": 2, "recommend": [2, 4], "run": [2, 4], "000": 2, "binder": [2, 4], "comment": 2, "illustr": 2, "simul": [2, 3], "portfolio": [2, 3, 5], "faang": 2, "stock": 2, "2023": [2, 5], "bayesian": 2, "network": 2, "causal": [2, 5], "predict": [2, 5], "kristensen": [2, 5], "2024": [2, 5], "effect": 2, "uncertainti": [2, 5], "stack": 2, "deriv": [2, 5], "expsour": 2, "youtub": [2, 3], "playlist": [2, 3], "walkthrough": [2, 3], "good": 2, "place": 2, "limit": [2, 3, 4], "resourc": [2, 3, 4], "support": [2, 3, 4], "pleas": [2, 3, 4], "let": [2, 4], "u": 2, "know": 2, "suggest": 2, "improv": 2, "high": [2, 3], "invest": [2, 3], "framework": [2, 3, 5], "video": [2, 3], "medium": [2, 3], "articl": [2, 3], "depth": [2, 3], "care": [2, 3], "pedagog": [2, 3], "present": [2, 3], "construct": [2, 3], "manag": [2, 3, 5], "book": [2, 3], "crowdfund": [2, 3], "campaign": [2, 3], "cloud": [2, 4], "without": [2, 4], "ani": [2, 4], "local": [2, 4], "instal": 2, "howev": [2, 4], "note": [2, 4], "server": [2, 4], "routin": [2, 4], "want": [2, 3, 4], "access": [2, 4], "stabl": [2, 4], "persist": [2, 4], "storag": [2, 4], "subscrib": [2, 4], "our": [2, 3, 4], "data": [2, 4], "scienc": [2, 4], "fundament": 3, "python": [3, 4], "intend": 3, "advanc": 3, "user": 3, "who": 3, "comfort": 3, "matric": 3, "give": 3, "full": 3, "flexibl": [3, 5], "henc": 3, "input": 3, "check": 3, "intention": 3, "kept": 3, "like": 3, "invit": 3, "show": 3, "star": 3, "greater": 3, "receiv": 3, "more": 3, "energi": 3, "enhanc": 3, "its": 3, "provid": 3, "offer": 3, "novel": 3, "softwar": 3, "quantit": 3, "digit": 3, "consult": 3, "industri": 3, "inform": 3, "visit": 3, "websit": 3, "complet": 3, "proprietari": 3, "solut": 3, "therefor": 3, "repres": 3, "qualiti": 3, "analysi": 3, "modul": 3, "institut": 3, "investor": 3, "experi": 3, "sophist": 3, "practic": [3, 5], "demo": 3, "send": 3, "email": 3, "feedback": 3, "bug": 3, "report": 3, "featur": 3, "upstream": 3, "maintain": 3, "done": 4, "via": 4, "pip": 4, "perform": 4, "handl": 4, "depend": 4, "befor": 4, "step": 4, "c": 4, "scipi": 4, "panda": 4, "matplotlib": 4, "activ": 4, "seaborn": 4, "ipykernel": 4, "jupyterlab": 4, "caus": 4, "issu": 4, "url": 5, "4709317": 5, "2": 5, "j": 5, "aspect": 5, "minim": 5, "cm": 5, "3": 5, "27": 5, "doi": 5, "org": 5, "1007": 5, "s10287": 5, "005": 5, "0042": 5, "fulli": 5, "21": 5, "97": 5, "102": 5, "1213325": 5, "tyrrel": 5, "journal": 5, "41": 5, "21314": 5, "jor": 5, "038": 5, "5": 5, "6": 5, "intuit": 5, "4825945": 5}, "objects": {"fortitudo.tech": [[1, 0, 0, "-", "data"], [1, 0, 0, "-", "entropy_pooling"], [1, 0, 0, "-", "functions"], [1, 0, 0, "-", "optimization"], [1, 0, 0, "-", "option_pricing"], [1, 0, 0, "-", "simulation"]], "fortitudo.tech.data": [[1, 1, 1, "", "load_parameters"], [1, 1, 1, "", "load_pnl"], [1, 1, 1, "", "load_risk_factors"], [1, 1, 1, "", "load_time_series"], [1, 1, 1, "", "plot_vol_surface"]], "fortitudo.tech.entropy_pooling": [[1, 1, 1, "", "entropy_pooling"]], "fortitudo.tech.functions": [[1, 1, 1, "", "correlation_matrix"], [1, 1, 1, "", "covariance_matrix"], [1, 1, 1, "", "portfolio_cvar"], [1, 1, 1, "", "portfolio_var"], [1, 1, 1, "", "portfolio_vol"], [1, 1, 1, "", "simulation_moments"]], "fortitudo.tech.optimization": [[1, 2, 1, "", "MeanCVaR"], [1, 2, 1, "", "MeanVariance"]], "fortitudo.tech.optimization.MeanCVaR": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.optimization.MeanVariance": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.option_pricing": [[1, 1, 1, "", "call_option"], [1, 1, 1, "", "forward"], [1, 1, 1, "", "put_option"]], "fortitudo.tech.simulation": [[1, 1, 1, "", "exp_decay_probs"], [1, 1, 1, "", "normal_exp_decay_calib"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "titleterms": {"contribut": 0, "document": 1, "data": 1, "entropi": 1, "pool": 1, "function": 1, "option": 1, "price": 1, "portfolio": 1, "optim": 1, "simul": 1, "exampl": 2, "fortitudo": 3, "technologi": 3, "open": 3, "sourc": 3, "disclaim": 3, "code": 3, "conduct": 3, "instal": 4, "instruct": 4, "refer": 5}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9, "sphinx": 60}, "alltitles": {"Contributing": [[0, "contributing"]], "Documentation": [[1, "documentation"]], "Data": [[1, "data"]], "Entropy Pooling": [[1, "entropy-pooling"]], "Functions": [[1, "functions"]], "Option Pricing": [[1, "option-pricing"]], "Portfolio Optimization": [[1, "portfolio-optimization"]], "Simulation": [[1, "simulation"]], "Examples": [[2, "examples"]], "Fortitudo Technologies Open Source": [[3, "fortitudo-technologies-open-source"]], "Disclaimer": [[3, "disclaimer"]], "Code of Conduct": [[3, "code-of-conduct"]], "Installation Instructions": [[4, "installation-instructions"]], "References": [[5, "references"]]}, "indexentries": {"meancvar (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanCVaR"]], "meanvariance (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanVariance"]], "call_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.call_option"]], "correlation_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.correlation_matrix"]], "covariance_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.covariance_matrix"]], "efficient_frontier() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_frontier"]], "efficient_frontier() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_frontier"]], "efficient_portfolio() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_portfolio"]], "efficient_portfolio() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_portfolio"]], "entropy_pooling() (in module fortitudo.tech.entropy_pooling)": [[1, "fortitudo.tech.entropy_pooling.entropy_pooling"]], "exp_decay_probs() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.exp_decay_probs"]], "fortitudo.tech.data": [[1, "module-fortitudo.tech.data"]], "fortitudo.tech.entropy_pooling": [[1, "module-fortitudo.tech.entropy_pooling"]], "fortitudo.tech.functions": [[1, "module-fortitudo.tech.functions"]], "fortitudo.tech.optimization": [[1, "module-fortitudo.tech.optimization"]], "fortitudo.tech.option_pricing": [[1, "module-fortitudo.tech.option_pricing"]], "fortitudo.tech.simulation": [[1, "module-fortitudo.tech.simulation"]], "forward() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.forward"]], "load_parameters() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_parameters"]], "load_pnl() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_pnl"]], "load_risk_factors() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_risk_factors"]], "load_time_series() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_time_series"]], "module": [[1, "module-fortitudo.tech.data"], [1, "module-fortitudo.tech.entropy_pooling"], [1, "module-fortitudo.tech.functions"], [1, "module-fortitudo.tech.optimization"], [1, "module-fortitudo.tech.option_pricing"], [1, "module-fortitudo.tech.simulation"]], "normal_exp_decay_calib() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.normal_exp_decay_calib"]], "plot_vol_surface() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.plot_vol_surface"]], "portfolio_cvar() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_cvar"]], "portfolio_var() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_var"]], "portfolio_vol() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_vol"]], "put_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.put_option"]], "simulation_moments() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.simulation_moments"]]}}) \ No newline at end of file +Search.setIndex({"alltitles": {"Code of Conduct": [[3, "code-of-conduct"]], "Contributing": [[0, "contributing"]], "Data": [[1, "data"]], "Disclaimer": [[3, "disclaimer"]], "Documentation": [[1, "documentation"]], "Entropy Pooling": [[1, "entropy-pooling"]], "Examples": [[2, "examples"]], "Fortitudo Technologies Open Source": [[3, "fortitudo-technologies-open-source"]], "Functions": [[1, "functions"]], "Installation Instructions": [[4, "installation-instructions"]], "Option Pricing": [[1, "option-pricing"]], "Portfolio Optimization": [[1, "portfolio-optimization"]], "References": [[5, "references"]], "Simulation": [[1, "simulation"]]}, "docnames": ["contributing", "documentation", "examples", "index", "installation", "references"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9}, "filenames": ["contributing.rst", "documentation.rst", "examples.rst", "index.rst", "installation.rst", "references.rst"], "indexentries": {"call_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.call_option", false]], "correlation_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.correlation_matrix", false]], "covariance_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.covariance_matrix", false]], "efficient_frontier() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_frontier", false]], "efficient_frontier() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_frontier", false]], "efficient_portfolio() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_portfolio", false]], "efficient_portfolio() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_portfolio", false]], "entropy_pooling() (in module fortitudo.tech.entropy_pooling)": [[1, "fortitudo.tech.entropy_pooling.entropy_pooling", false]], "exp_decay_probs() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.exp_decay_probs", false]], "exposure_stacking() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.exposure_stacking", false]], "fortitudo.tech.data": [[1, "module-fortitudo.tech.data", false]], "fortitudo.tech.entropy_pooling": [[1, "module-fortitudo.tech.entropy_pooling", false]], "fortitudo.tech.functions": [[1, "module-fortitudo.tech.functions", false]], "fortitudo.tech.optimization": [[1, "module-fortitudo.tech.optimization", false]], "fortitudo.tech.option_pricing": [[1, "module-fortitudo.tech.option_pricing", false]], "fortitudo.tech.simulation": [[1, "module-fortitudo.tech.simulation", false]], "forward() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.forward", false]], "load_parameters() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_parameters", false]], "load_pnl() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_pnl", false]], "load_risk_factors() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_risk_factors", false]], "load_time_series() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_time_series", false]], "meancvar (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanCVaR", false]], "meanvariance (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanVariance", false]], "module": [[1, "module-fortitudo.tech.data", false], [1, "module-fortitudo.tech.entropy_pooling", false], [1, "module-fortitudo.tech.functions", false], [1, "module-fortitudo.tech.optimization", false], [1, "module-fortitudo.tech.option_pricing", false], [1, "module-fortitudo.tech.simulation", false]], "normal_exp_decay_calib() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.normal_exp_decay_calib", false]], "plot_vol_surface() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.plot_vol_surface", false]], "portfolio_cvar() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_cvar", false]], "portfolio_var() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_var", false]], "portfolio_vol() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_vol", false]], "put_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.put_option", false]], "simulation_moments() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.simulation_moments", false]]}, "objects": {"fortitudo.tech": [[1, 0, 0, "-", "data"], [1, 0, 0, "-", "entropy_pooling"], [1, 0, 0, "-", "functions"], [1, 0, 0, "-", "optimization"], [1, 0, 0, "-", "option_pricing"], [1, 0, 0, "-", "simulation"]], "fortitudo.tech.data": [[1, 1, 1, "", "load_parameters"], [1, 1, 1, "", "load_pnl"], [1, 1, 1, "", "load_risk_factors"], [1, 1, 1, "", "load_time_series"], [1, 1, 1, "", "plot_vol_surface"]], "fortitudo.tech.entropy_pooling": [[1, 1, 1, "", "entropy_pooling"]], "fortitudo.tech.functions": [[1, 1, 1, "", "correlation_matrix"], [1, 1, 1, "", "covariance_matrix"], [1, 1, 1, "", "exposure_stacking"], [1, 1, 1, "", "portfolio_cvar"], [1, 1, 1, "", "portfolio_var"], [1, 1, 1, "", "portfolio_vol"], [1, 1, 1, "", "simulation_moments"]], "fortitudo.tech.optimization": [[1, 2, 1, "", "MeanCVaR"], [1, 2, 1, "", "MeanVariance"]], "fortitudo.tech.optimization.MeanCVaR": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.optimization.MeanVariance": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.option_pricing": [[1, 1, 1, "", "call_option"], [1, 1, 1, "", "forward"], [1, 1, 1, "", "put_option"]], "fortitudo.tech.simulation": [[1, 1, 1, "", "exp_decay_probs"], [1, 1, 1, "", "normal_exp_decay_calib"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "terms": {"": [1, 2, 3, 5], "0": [1, 5], "000": 2, "0042": 5, "005": 5, "038": 5, "1": [1, 2, 5], "10": [1, 5], "100": 1, "1000": 1, "10000": 1, "1007": 5, "102": 5, "1213325": 5, "1e": 1, "2": 5, "2000": [1, 5], "2006": [1, 5], "2008": [1, 5], "2021": [1, 2, 5], "2022": [1, 2, 5], "2023": [2, 5], "2024": [2, 5], "21": 5, "21314": 5, "27": 5, "2nd": 1, "3": 5, "35": 1, "3936392": [1, 5], "3d": 1, "4": [1, 5], "4034316": [1, 5], "41": 5, "4217884": [1, 5], "4444291": [1, 5], "4709317": [1, 5], "4825945": 5, "484": 0, "5": 5, "50": 2, "500": [1, 2], "6": 5, "7": [1, 5], "7_riskfactorview": 1, "8": [0, 1, 5], "9": [1, 5], "95": 1, "97": 5, "99": 0, "A": [1, 2, 5], "For": [1, 2, 3, 4], "If": [0, 1, 2, 3, 4], "In": 1, "The": [0, 1, 2, 3, 4], "These": 1, "abov": 1, "absolut": 1, "abstol": 1, "abstract": [1, 5], "access": [2, 3, 4], "accompani": 2, "accord": 0, "activ": 4, "addit": [0, 1, 4], "adjust": 1, "advanc": 3, "ae": 1, "algorithm": 1, "allow": [0, 1, 3], "alpha": 1, "also": [1, 4], "alwai": 0, "an": [1, 2, 3], "analysi": 3, "ani": [2, 4], "appreci": 0, "approach": 1, "ar": [0, 1, 2, 3], "argmin": 1, "articl": [2, 3], "aspect": 5, "associ": 1, "assum": 1, "avail": [0, 2], "avoid": 0, "ax": 1, "b": 1, "bai": [1, 5], "base": 1, "basic": 0, "bayesian": 2, "been": 1, "befor": 4, "being": 1, "believ": 0, "below": [1, 2], "bender": 1, "best": [1, 4], "between": 1, "bfg": 1, "binder": [2, 4], "black": 1, "bonu": 2, "book": [2, 3], "bool": 1, "boolean": 1, "both": 0, "bound": 1, "branch": 0, "bug": 3, "c": 4, "calcul": 1, "calibr": 1, "call": 1, "call_opt": 1, "campaign": 2, "can": [0, 1, 2, 3, 4], "capit": 0, "care": 2, "case": 1, "caus": 4, "causal": [2, 5], "charact": 0, "check": 3, "class": 1, "cloud": [2, 4], "cm": 5, "code": [0, 1, 2], "com": [1, 5], "combin": 2, "comfort": 3, "comment": 2, "common": 1, "comparison": 2, "complet": 3, "compound": 1, "comput": [1, 5], "conda": [0, 4], "condit": [1, 5], "consist": 1, "constraint": [1, 3], "construct": [2, 3], "consult": 3, "contain": [1, 2], "continu": 1, "control": 1, "convent": 0, "converg": 1, "correctli": 1, "correl": 1, "correlation_matrix": 1, "coupon": 1, "covari": 1, "covariance_matrix": 1, "creat": [0, 4], "credit": 1, "crowdfund": 2, "current": 1, "curv": 1, "cvar": [1, 2, 3, 5], "cvar_opt": 1, "cvxopt": [1, 4], "danish": 1, "data": [2, 4], "datafram": 1, "decai": [1, 2], "decomposit": 1, "deep": 3, "default": [1, 2], "demean": [1, 2], "demo": 3, "depend": 4, "depth": 2, "deriv": [2, 5], "descript": 0, "design": 0, "dev": 0, "dict": 1, "dictionari": 1, "differ": 1, "digit": 3, "directli": [1, 3], "directori": 0, "distribut": 1, "dividend": 1, "do": [0, 4], "docstr": 0, "doi": 5, "done": 4, "due": 1, "e": [0, 1, 3, 4], "easier": [0, 2], "easiest": 0, "effect": 2, "effici": 1, "efficient_fronti": 1, "efficient_portfolio": 1, "email": 3, "encourag": 0, "entropi": [2, 3, 5], "entropy_pool": 1, "env": 0, "environ": [0, 2, 4], "equal": 1, "equiti": 1, "especi": 0, "european": 1, "exampl": [1, 3, 4], "exp_decay_prob": 1, "expect": 1, "experi": 3, "explain": 2, "explor": [1, 2, 3, 4], "exponenti": [1, 2], "exposur": [1, 2], "exposure_stack": 1, "expsour": 2, "ey": 0, "f": 1, "faang": 2, "factor": [1, 2], "fals": 1, "featur": 3, "feedback": 3, "figsiz": 1, "figur": 1, "file": 0, "first": 1, "flexibl": [3, 5], "float": 1, "fold": 1, "follow": [0, 1, 2, 4], "forg": [0, 4], "fork": 0, "formula": 1, "fortitudo": [0, 1, 2, 4], "forward": 1, "found": 0, "framework": [2, 3, 5], "free": 1, "from": [1, 2, 3], "frontier": 1, "ft": 1, "full": 3, "fulli": 5, "function": [0, 2, 3], "fundament": 3, "g": [0, 1, 3, 4], "ge": 1, "gener": [0, 1], "geq": 1, "github": [0, 2], "give": 3, "given": 1, "global": 1, "good": 2, "group": 0, "guid": 0, "gx": 1, "h": 1, "h1": 2, "half": 1, "half_lif": 1, "handl": 4, "have": [1, 2, 3, 4], "henc": 3, "here": 1, "heurist": [2, 5], "high": [2, 3], "hint": 0, "histor": [1, 2], "how": [1, 2, 3], "howev": [2, 4], "http": [1, 5], "i": [0, 1, 3], "illustr": 2, "immedi": 1, "implement": [1, 2, 3], "impli": 1, "import": [0, 1], "impos": 0, "improv": 2, "includ": 1, "index": 1, "indic": 1, "individu": 0, "industri": 3, "inequ": 1, "infeas": 1, "inform": 3, "input": 3, "instal": 2, "instanc": 1, "institut": 3, "instruct": 1, "instrument": [1, 5], "int": 1, "intend": 3, "intention": 3, "interest": 1, "introduc": [0, 1, 2], "introduct": [1, 2, 3], "intuit": 5, "invest": [2, 3], "investor": 3, "ipykernel": 4, "ipynb": 1, "issu": 4, "iter": 1, "j": 5, "jor": 5, "journal": 5, "json": 0, "jupyt": 2, "jupyterlab": 4, "k": 1, "keep": 0, "kept": 3, "know": 2, "kristensen": [2, 5], "kurtosi": 1, "kwarg": 1, "k\u00fcnzi": [1, 5], "l": [1, 2, 5], "left": 1, "length": 0, "leq": 1, "less": 1, "let": [2, 4], "level": [1, 2, 3], "life": 1, "limit": [2, 3, 4], "line": 0, "link": [0, 1], "list": 1, "ln": 1, "load": 1, "load_paramet": 1, "load_pnl": 1, "load_risk_factor": 1, "load_time_seri": 1, "local": [2, 4], "locat": 0, "log": 1, "lower": 1, "m": 1, "maintain": 3, "make": [0, 2], "manag": [2, 3, 5], "market": [1, 2, 5], "master": 1, "mathbb": 1, "mathcal": 1, "mathemat": [0, 2, 3], "matplotlib": 4, "matric": 3, "matrix": 1, "matur": 1, "maximum": 1, "maxit": 1, "mayer": [1, 5], "mean": [1, 2], "meancvar": 1, "meanvari": 1, "measur": 1, "medium": [2, 3], "method": [1, 3], "meucci": [1, 5], "might": [1, 2, 4], "min_": 1, "minim": 5, "minimum": [1, 3], "model": [1, 2], "modif": 0, "modul": 3, "moment": 1, "more": 3, "most": [0, 1], "mostli": 0, "mu": 1, "mu_": 1, "n": [1, 4], "name": [0, 1], "ndarrai": 1, "need": 1, "network": 2, "new": 1, "none": 1, "normal": 1, "normal_exp_decay_calib": 1, "notat": 1, "note": [2, 4], "notebook": [2, 4], "novel": 3, "np": 1, "num_portfolio": 1, "number": 1, "object": [0, 1], "offer": 3, "often": 0, "one": 1, "ones": 1, "oper": 0, "opt": 1, "optim": [2, 3, 4, 5], "org": 5, "orient": 0, "origin": 2, "our": [2, 3, 4], "p": [1, 2], "packag": [0, 1, 2, 3, 4], "panda": 4, "paramet": [1, 2, 5], "part": 0, "particular": 1, "partit": 1, "pattern": 0, "pedagog": [2, 3], "pep": 0, "percentag": 1, "perform": 4, "persist": [2, 4], "pip": 4, "place": 2, "playlist": [2, 3], "pleas": [2, 3, 4], "plot": 1, "plot_vol_surfac": 1, "pool": [2, 3, 5], "portfolio": [2, 3, 5], "portfolio_cvar": 1, "portfolio_var": 1, "portfolio_vol": 1, "posterior": 1, "practic": [3, 5], "predict": [2, 5], "present": [2, 3], "prior": 1, "prioriti": 0, "probabl": 1, "problem": 1, "program": 1, "proprietari": 3, "pull": 0, "put": 1, "put_opt": 1, "python": [3, 4], "q": 1, "quadrat": 1, "qualiti": 3, "quantit": 3, "r": [1, 5], "r_scalar": 1, "rais": 1, "rate": 1, "recommend": [2, 4], "refer": 0, "rel": [1, 2], "relat": [0, 1, 2, 3], "relax": 1, "reltol": 1, "replic": [0, 1, 2], "report": 3, "repositori": [0, 2], "repres": 3, "request": [0, 3], "requir": [0, 4], "resampl": 1, "resourc": [2, 3, 4], "result": [1, 2], "return": 1, "return_target": 1, "right": 1, "risk": [1, 2, 3, 5], "rockafellar": [1, 5], "root": 0, "routin": [2, 4], "rule": 0, "run": [2, 4], "s10287": 5, "sampl": 1, "sample_portfolio": 1, "satisfi": 1, "scale": 1, "scenario": [1, 2], "scienc": [2, 4], "scipi": 4, "sde": 1, "seaborn": 4, "see": [1, 2, 3], "send": 3, "sent": 0, "separ": [2, 3], "sequenti": [1, 2, 5], "seri": [1, 2], "server": [2, 4], "set": [0, 1], "shape": 1, "short": 0, "should": [0, 4], "sigma": 1, "simpl": 1, "simul": [2, 3], "simulation_mo": 1, "size": 1, "skew": 1, "small": 0, "softwar": 3, "solut": 3, "solv": 1, "solver": 1, "some": [0, 2, 3, 4], "sophist": 3, "span": 1, "specifi": [0, 3], "spot": 1, "spread": 1, "ssrn": [1, 2, 3, 5], "stabl": [2, 4], "stack": [1, 2], "standard": 1, "start": [0, 1, 2], "step": 4, "stock": 2, "stop": 1, "storag": [2, 4], "stoxx": 2, "str": 1, "stress": [1, 2, 5], "strike": 1, "studio": 0, "style": 0, "subject": 1, "subscrib": [2, 4], "suggest": 2, "support": [2, 3, 4], "sure": 0, "surfac": 1, "t": 1, "target": 1, "tech": [0, 1, 2, 3, 4], "test": [1, 2, 5], "text": 1, "than": 1, "thei": 1, "them": [1, 2, 3], "theori": [0, 1, 5], "therefor": 3, "thi": [0, 1, 2, 3, 4], "time": [1, 2], "tnc": 1, "toler": 1, "true": 1, "tupl": 1, "type": [0, 1], "tyrrel": 5, "u": 2, "unbound": 1, "uncertainti": [2, 5], "understand": [1, 2], "union": 1, "upper": 1, "upstream": 3, "url": 5, "uryasev": [1, 5], "us": [0, 1, 2, 3, 4], "user": 3, "v": [1, 2], "valid": 1, "valu": [1, 2, 5], "valueerror": 1, "var": 1, "variabl": 0, "varianc": [1, 2, 5], "vector": [1, 3], "veri": [0, 1, 2, 3, 4], "verifi": 1, "via": 4, "video": [2, 3], "view": [1, 2, 3, 5], "visit": 3, "visual": 0, "vol": 1, "vol_surfac": 1, "volatil": [1, 2], "vorobet": [1, 2, 5], "vscode": 0, "wa": 1, "wai": 0, "walkthrough": [2, 3], "want": [2, 3, 4], "we": [0, 2, 3, 4], "websit": 3, "welcom": [0, 3], "well": [1, 3], "when": 1, "whether": 1, "which": 1, "while": 1, "who": 3, "why": 2, "without": [2, 4], "work": [1, 2, 3], "x": 1, "yield": 1, "yml": 0, "you": [0, 1, 2, 3, 4], "your": [0, 1], "youtub": [2, 3], "zero": 1}, "titles": ["Contributing", "Documentation", "Examples", "Fortitudo Technologies Open Source", "Installation Instructions", "References"], "titleterms": {"code": 3, "conduct": 3, "contribut": 0, "data": 1, "disclaim": 3, "document": 1, "entropi": 1, "exampl": 2, "fortitudo": 3, "function": 1, "instal": 4, "instruct": 4, "open": 3, "optim": 1, "option": 1, "pool": 1, "portfolio": 1, "price": 1, "refer": 5, "simul": 1, "sourc": 3, "technologi": 3}}) \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 4946843..d9bb1ec 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -38,7 +38,7 @@ author = 'Fortitudo Technologies' # The full version, including alpha/beta/rc tags -version = 'v1.0.7' +version = 'v1.1' # -- General configuration --------------------------------------------------- diff --git a/docs/source/index.rst b/docs/source/index.rst index 3a99aa4..1624a39 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,23 +8,17 @@ for a walkthrough of the package's functionality and examples. For a high-level introduction to the investment framework, see this `YouTube video `_ and `Medium article `_. -For an in-depth mathematical introduction to the investment framework, see -these `SSRN articles `_. +For a mathematical introduction to the investment framework, see these +`SSRN articles `_. -For a careful and pedagogical presentation of the investment framework, -see the `Portfolio Construction and Risk Management Book `_ -crowdfunding campaign. +For a pedagogical and deep presentation of the investment framework, +you can access the `Portfolio Construction and Risk Management Book `_. The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum. -If you like this package, we invite you to show your support by giving it a -GitHub star. The greater the number of stars it receives, the more time and -energy we will invest in enhancing its functionality and providing additional -examples. - Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our `website `_. @@ -34,7 +28,7 @@ Disclaimer This package is completely separate from our proprietary solutions and therefore not representative of the quality and functionality offered by the Investment Simulation -and Investment Analysis modules. If you are an institutional investor who wants to +and Investment Analysis modules. If you are an institutional investor and want to experience how these methods can be used for sophisticated analysis in practice, please request a demo by sending an email to demo@fortitudo.tech.