{"id":37639004,"url":"https://github.com/faprieto96/pipoh","last_synced_at":"2026-01-16T11:14:09.040Z","repository":{"id":57452981,"uuid":"441390696","full_name":"faprieto96/pipoh","owner":"faprieto96","description":"Pipoh is a library that implements several diversification techniques base on mean-variance framework. In addition, it includes a novel purely data-driven methods for determining the optimal value of the hyper-parameters associated with each investment strategy.","archived":false,"fork":false,"pushed_at":"2022-08-22T17:47:05.000Z","size":2598,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-05T17:44:30.406Z","etag":null,"topics":["hyper-parameter-optimization","investment","optimization","portfolio"],"latest_commit_sha":null,"homepage":"https://faprieto96.github.io/pipoh/intro.html","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/faprieto96.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-24T06:52:06.000Z","updated_at":"2022-02-20T10:22:39.000Z","dependencies_parsed_at":"2022-08-29T06:51:09.858Z","dependency_job_id":null,"html_url":"https://github.com/faprieto96/pipoh","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/faprieto96/pipoh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faprieto96%2Fpipoh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faprieto96%2Fpipoh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faprieto96%2Fpipoh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faprieto96%2Fpipoh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faprieto96","download_url":"https://codeload.github.com/faprieto96/pipoh/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faprieto96%2Fpipoh/sbom","scorecard":{"id":392672,"data":{"date":"2025-08-11","repo":{"name":"github.com/faprieto96/pipoh","commit":"de4770af1fb99ad152da7309830675ca0b143af2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":0.4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: dist/Pipoh-0.0.1-py3-none-any.whl:1","Warn: binary detected: dist/Pipoh-0.0.3-py3-none-any.whl:1","Warn: binary detected: documentation/_build/html/_static/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/__init__.cpython-310.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/interface_strategy_factory.cpython-310.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/interface_strategy_factory.cpython-37.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/interface_strategy_factory.cpython-39.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/strategy_factory.cpython-310.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/strategy_factory.cpython-37.pyc:1","Warn: binary detected: pipoh/Parents/__pycache__/strategy_factory.cpython-39.pyc:1","Warn: binary detected: pipoh/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/__pycache__/main.cpython-37.pyc:1","Warn: binary detected: pipoh/__pycache__/main.cpython-39.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/classes_init.cpython-37.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/classes_init.cpython-39.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/data_import.cpython-37.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/data_import.cpython-39.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/list_data_repository.cpython-37.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/list_data_repository.cpython-39.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/max_drawdown.cpython-37.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/max_drawdown.cpython-39.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/output_financial_ratios.cpython-37.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/output_financial_ratios.cpython-39.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/rolling_windows_validation.cpython-37.pyc:1","Warn: binary detected: pipoh/common_functions/__pycache__/rolling_windows_validation.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/__pycache__/__init__.cpython-310.pyc:1","Warn: binary detected: pipoh/concrete_factories/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/__init__.cpython-310.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_configuration.cpython-310.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_configuration.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_configuration.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_factory.cpython-310.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_factory.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_factory.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_interface.cpython-310.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_interface.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/__pycache__/bayesian_interface.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/__init__.cpython-310.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_common_functions.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_custom.cpython-310.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_custom.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_custom.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_ew.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_ew.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_wubc.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/bayesian_folder/bayesian_strategies/__pycache__/bayesian_wubc.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/bayesian_configuration.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/bayesian_configuration.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/bayesian_factory.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/bayesian_factory.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/bayesian_interface.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/bayesian_interface.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/gscv_configuration.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/gscv_configuration.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/gscv_factory.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/gscv_factory.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/gscv_interface.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/__pycache__/gscv_interface.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/gscv_strategies/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/gscv_strategies/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/gscv_strategies/__pycache__/bayesian_wlbc.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/gscv_strategies/__pycache__/bayesian_wlbc.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/gscv_folder/gscv_strategies/__pycache__/gscv_custom.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/__pycache__/non_parametric_factory.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/__pycache__/non_parametric_factory.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/__pycache__/non_parametric_interface.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/__pycache__/non_parametric_interface.cpython-39.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/non_parametric_strategies/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/concrete_factories/non_parametric/non_parametric_strategies/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/bayesian_agrupacion_estrategias.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/bayesian_agrupacion_estrategias.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/gscv_agrupacion_estrategias.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/gscv_agrupacion_estrategias.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/non_parametric_agrupacion_estrategias.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/__pycache__/non_parametric_agrupacion_estrategias.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/__init__.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/__init__.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_custom.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_custom.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_dmv.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_dmv.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_dmvy.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_dmvy.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_ew.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_ew.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_ewmv.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_ewmv.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_gmr.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_gmr.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_gmv.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_gmv.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_mv.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_mv.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_wlbc.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_wlbc.cpython-39.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_wubc.cpython-37.pyc:1","Warn: binary detected: pipoh/strategies/individual_strategies/__pycache__/class_wubc.cpython-39.pyc:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: license.txt:0","Info: FSF or OSI recognized license: MIT License: license.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"113 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2018-34 / GHSA-2fc2-6r4j-p65h","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2018-33 / GHSA-cw6w-4rcx-xphc","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2017-1 / GHSA-frgw-fgh6-9g52","Warn: Project is vulnerable to: PYSEC-2024-230 / GHSA-248v-346w-9cwc","Warn: Project is vulnerable to: PYSEC-2022-42986 / GHSA-43fp-rhv2-5gv8","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: GHSA-3ww4-gg4f-jr7f","Warn: Project is vulnerable to: GHSA-5cpq-8wj7-hf2v","Warn: Project is vulnerable to: GHSA-9v9h-cgj8-h64p","Warn: Project is vulnerable to: PYSEC-2023-254 / GHSA-jfhm-5ghh-2f97","Warn: Project is vulnerable to: GHSA-jm77-qphf-c4w8","Warn: Project is vulnerable to: GHSA-v8gr-m533-ghj9","Warn: Project is vulnerable to: GHSA-w7pp-m8wf-vj6r","Warn: Project is vulnerable to: GHSA-x4qr-2fvf-3mr5","Warn: Project is vulnerable to: PYSEC-2021-870 / GHSA-8rh6-h94m-vj54","Warn: Project is vulnerable to: PYSEC-2022-190 / GHSA-2gwj-7jmv-h26r","Warn: Project is vulnerable to: PYSEC-2023-13 / GHSA-2hrw-hx67-34x6","Warn: Project is vulnerable to: GHSA-7xr5-9hcq-chf9","Warn: Project is vulnerable to: PYSEC-2022-245 / GHSA-8x94-hmjh-97hq","Warn: Project is vulnerable to: PYSEC-2023-100 / GHSA-jh3w-4vvf-mjgr","Warn: Project is vulnerable to: PYSEC-2022-213 / GHSA-p64x-8rxx-wf6q","Warn: Project is vulnerable to: PYSEC-2023-12 / GHSA-q2jf-h9jm-m7p4","Warn: Project is vulnerable to: PYSEC-2022-304 / GHSA-qrw5-5h28-6cmg","Warn: Project is vulnerable to: PYSEC-2023-61 / GHSA-r3xc-prgr-mg9p","Warn: Project is vulnerable to: GHSA-rrqc-c2jx-6jgv","Warn: Project is vulnerable to: PYSEC-2022-191 / GHSA-w24h-v9qh-8gxj","Warn: Project is vulnerable to: GHSA-g4m4-9q4c-mfw6","Warn: Project is vulnerable to: GHSA-q5fm-55c2-v6j9","Warn: Project is vulnerable to: PYSEC-2023-62 / GHSA-m2qf-hxjv-5gpq","Warn: Project is vulnerable to: GHSA-6673-4983-2vx5","Warn: Project is vulnerable to: PYSEC-2024-4 / GHSA-2mqj-m65w-jghx","Warn: Project is vulnerable to: PYSEC-2023-165 / GHSA-cwvm-v4w8-q58c","Warn: Project is vulnerable to: PYSEC-2022-42992 / GHSA-hcpj-qp55-gfph","Warn: Project is vulnerable to: PYSEC-2023-137 / GHSA-pr76-5cm5-w9cj","Warn: Project is vulnerable to: PYSEC-2023-161 / GHSA-wfm5-v35h-vwf4","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-29gw-9793-fvw7","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: PYSEC-2022-288 / GHSA-6hrg-qmvc-2xh8","Warn: Project is vulnerable to: GHSA-33p9-3p43-82vq","Warn: Project is vulnerable to: PYSEC-2022-42974 / GHSA-m678-f26j-3hrp","Warn: Project is vulnerable to: PYSEC-2023-157 / GHSA-64x5-55rw-9974","Warn: Project is vulnerable to: PYSEC-2023-272 / GHSA-h56g-gq9v-vc8r","Warn: Project is vulnerable to: PYSEC-2024-165 / GHSA-hrw6-wg82-cm62","Warn: Project is vulnerable to: PYSEC-2022-179 / GHSA-p737-p57g-4cpr","Warn: Project is vulnerable to: PYSEC-2022-211 / GHSA-q874-g24w-4q9g","Warn: Project is vulnerable to: PYSEC-2023-155 / GHSA-r726-vmfq-j9j3","Warn: Project is vulnerable to: PYSEC-2023-23 / GHSA-jrwr-5x3p-hvc3","Warn: Project is vulnerable to: PYSEC-2023-24 / GHSA-vrjv-mxr7-vjf8","Warn: Project is vulnerable to: GHSA-9jmq-rx5f-8jwq","Warn: Project is vulnerable to: PYSEC-2022-180 / GHSA-m87f-39q9-6f55","Warn: Project is vulnerable to: PYSEC-2022-212 / GHSA-v7vq-3x77-87vg","Warn: Project is vulnerable to: GHSA-3f63-hfp8-52jq","Warn: Project is vulnerable to: GHSA-44wm-f244-xhp3","Warn: Project is vulnerable to: PYSEC-2023-227 / GHSA-8ghj-p4vj-mr35","Warn: Project is vulnerable to: GHSA-j7hp-h8jx-5ppr","Warn: Project is vulnerable to: PYSEC-2022-42979 / GHSA-m2vv-5vj5-2hm7","Warn: Project is vulnerable to: OSV-2022-1074","Warn: Project is vulnerable to: OSV-2022-715","Warn: Project is vulnerable to: PYSEC-2023-175","Warn: Project is vulnerable to: GHSA-8gq9-2x98-w8hf","Warn: Project is vulnerable to: GHSA-8qvm-5x2c-j2w7","Warn: Project is vulnerable to: PYSEC-2022-42969","Warn: Project is vulnerable to: PYSEC-2023-238 / GHSA-5wvp-7f3h-6wmm","Warn: Project is vulnerable to: PYSEC-2024-161","Warn: Project is vulnerable to: PYSEC-2023-117 / GHSA-mrwq-x4v8-fh7p","Warn: Project is vulnerable to: PYSEC-2022-202 / GHSA-ffqj-6fqr-9h24","Warn: Project is vulnerable to: GHSA-jh85-wwv9-24hv","Warn: Project is vulnerable to: GHSA-v9hf-5j83-6xpp","Warn: Project is vulnerable to: PYSEC-2023-44 / GHSA-329j-jfvr-rhr6","Warn: Project is vulnerable to: PYSEC-2022-42976 / GHSA-43xg-8wmj-cw8h","Warn: Project is vulnerable to: PYSEC-2022-236 / GHSA-4x9r-j582-cgr8","Warn: Project is vulnerable to: PYSEC-2023-72 / GHSA-59hw-j9g6-mfg3","Warn: Project is vulnerable to: PYSEC-2022-186 / GHSA-9rr6-jpg7-9jg6","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: PYSEC-2024-110 / GHSA-jw8x-6495-233v","Warn: Project is vulnerable to: GHSA-jxfp-4rvq-9h9m","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114","Warn: Project is vulnerable to: GHSA-2m57-hf25-phgg","Warn: Project is vulnerable to: PYSEC-2023-87 / GHSA-rrm6-wvj7-cwh2","Warn: Project is vulnerable to: GHSA-8qw9-gf7w-42x5","Warn: Project is vulnerable to: PYSEC-2024-153 / GHSA-rxff-vr5r-8cj5","Warn: Project is vulnerable to: PYSEC-2022-248 / GHSA-v4hr-4jpx-56gc","Warn: Project is vulnerable to: GHSA-753j-mpmx-qq6g","Warn: Project is vulnerable to: GHSA-7cx3-6m66-7c5m","Warn: Project is vulnerable to: GHSA-8w49-h785-mj3c","Warn: Project is vulnerable to: PYSEC-2023-75 / GHSA-hj3f-6gcp-jg8j","Warn: Project is vulnerable to: GHSA-qppv-j76h-2rpx","Warn: Project is vulnerable to: GHSA-w235-7p84-xx57","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2024-187 / GHSA-rqc4-2hc7-8c8v","Warn: Project is vulnerable to: GHSA-2g68-c3qc-8985","Warn: Project is vulnerable to: GHSA-f9vj-2wh5-fj8j","Warn: Project is vulnerable to: PYSEC-2023-221 / GHSA-hrfv-mqp8-q5rw","Warn: Project is vulnerable to: PYSEC-2023-57 / GHSA-px8h-6qxv-m22q","Warn: Project is vulnerable to: GHSA-q34m-jh98-gwm2","Warn: Project is vulnerable to: PYSEC-2023-58 / GHSA-xg9f-g7g7-2323","Warn: Project is vulnerable to: PYSEC-2022-203","Warn: Project is vulnerable to: GHSA-jfmj-5v4g-7637"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T18:12:11.597Z","repository_id":57452981,"created_at":"2025-08-18T18:12:11.597Z","updated_at":"2025-08-18T18:12:11.597Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478161,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hyper-parameter-optimization","investment","optimization","portfolio"],"created_at":"2026-01-16T11:14:08.190Z","updated_at":"2026-01-16T11:14:09.027Z","avatar_url":"https://github.com/faprieto96.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Welcome to pyInvestment\n\u003cp align=\"center\"\u003e\n    \u003cimg width=40% src=\"https://github.com/faprieto96/pipoh/blob/master/documentation/images/pipoh_logo.png?raw=true\"\u003e\n\u003c/p\u003e\n\n\u003c!-- buttons --\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.python.org/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/python-v3-brightgreen.svg\"\n            alt=\"python\"\u003e\u003c/a\u003e \u0026nbsp;\n    \u003ca href=\"https://pypi.org/project/Pipoh/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/pypi-v0.0.1-brightgreen.svg\"\n            alt=\"pypi\"\u003e\u003c/a\u003e \u0026nbsp;\n    \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg\"\n            alt=\"MIT license\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003c!-- content --\u003e\n\n## Welcome\n\nPipoh is a library that implements several diversification techniques base on mean-variance framework.  The well-known MV portfolio framework is based under the assumption that a rational investor wants to maximize their returns and minimize the risk associated with the portfolio.\n\nIn addition, it includes novel purely data-driven methods for determining the optimal value of the hyper-parameters associated with each investment strategy like **Bayesian Optimization** or **Random Grid Search**.\n\nMain of the capabilities included in Pipoh are:\n- [Diversification techniques for portfolio optimization:](03_mv_formulation_files/index_mv_formulation.md) 11 diversification and mean-variance strategies. \n- [Hyper-parameters description:](https://github.com/faprieto96/pyInvestment) Data-driven method for determining the optimal value of the hyper-parameter associated with each eppoch. \n- [Datasets description:](https://github.com/faprieto96/pyInvestment) 10 datasets focused on different markets. \n- [Performance evaluation metrics:](https://github.com/faprieto96/pyInvestment/blob/master/docs/performance_evaluation_metrics.md) Includes 6 performance metrics.\n\nPipoh is **extensive** and easily **extensible**, and it can be used to formulate your own strategies and use all capabilities of the library like hyper-parameters selection and evaluation metrics.\n\nPipoh has been conceived for different types of end-profiles.\n- Investors and serious investment practitioners.\n- Students that want to take contact with mean-variance strategies.\n- Researchers that are looking for to desing, evaluate and test new strategies.\n\nHead over to the **[Official Documentation](https://faprieto96.github.io/pipoh/intro.html)** to get an in-depth look at the project.\n\n\u003ccenter\u003e\n\u003cimg src=\"https://github.com/faprieto96/pipoh/blob/master/documentation/images/pipoh_architecture.png?raw=true\" style=\"width:100%;\"/\u003e\n\u003c/center\u003e\n\n\n## Getting started\n\nThis project is available on PyPI, meaning that you work with Pipoh just running the following command:\n\n```bash\npip install pipoh\n```\n\n### For development\n\nIf you would like to make major changes to integrate this with your proprietary system, \nit probably makes sense to clone this repository and to just use the source code.\n\n```bash\ngit clone https://github.com/faprieto96/pipoh\n```\n\n\n## Quick examples\n\n### First example: Running an Equally Weighted Strategy without optimization.\n\nAn user wants to run the *Equally Weighted strategy* with the dataset of Emerging Markets. This strategy does not requires an optimization of its parameters.\n\n```python\nimport pipoh\n\n# Equally weighted strategy with dataset of emerging_markets\npipoh(strategy='EW', input_data='emerging_markets')\n```\n\nBy default, Pipoh library will return the performance metrics:\n\n```txt\n{'Mean Return': 0.2538425925925927, \n'Share Ratio': 0.04657430634672944, \n'Calmar Ratio': 0.007121075161565159, \n'Colog Ratio': 0.008545319323776479, \n'MiniMax ratio': 2.9118428040361115, \n'Turnover': 0.0}\n```\n\n### Second case: Running an Weighted Lower Bound Constraint Strategy with an optimization of its hyper-parameters.\n\nUser optimizes the hyper-parameters with the Bayesian optimization.\n\n```python\npipoh(strategy='WLBC', \n      optimization='Bayesian', \n      input_data='emerging_markets', \n      params={'lamb': ('cont', [0.5, 1]), 'lower_bound': ('cont', [0.8, 1])})\n```\n\n```txt\n# Performance evaluation metrics\nEvaluation       Proposed point           Current eval.          Best eval.\ninit     [0.52384733 0.09224026].         43.88902890653751      43.88902890653751\ninit     [0.62067801 0.08772509].         43.88902890653751      43.88902890653751\ninit     [0.63399604 0.00299079].         43.88902890653751      43.88902890653751\n1        [0.56996903 0.03656443].         43.88902890653751      43.88902890653751\n{'Mean Return': 0.12893810329370484, 'Share Ratio': 0.022784737436991786, \n'Calmar Ratio': 0.003331248264446595, 'Colog Ratio': 0.004026306008939107, \n'MiniMax ratio': 1.0000000000000002, 'Turnover': 0.0398582808840518}\n```\n\n\n### Third case: An user defines a customized strategy function.\n\n```python\ndef dominancia_estocastica(self):\n    lambdaValue = self.lambda_value\n    upperBoundValue = self.lower_bound\n    return lambdaValue+upperBoundValue\n\nparams_defined = {'f': dominancia_estocastica, 'hp': {'lambda_value': ('cont', [0, 1]), 'lower_bound': ('cont', [0.1, 0.2])}, 'validation_windows':12}\n\npipoh(strategy='CustomStrategy', optimization='Bayesian', input_data='emerging_markets', params=params_defined)\n```\n\n```txt\nEvaluation \t Proposed point \t  Current eval. \t Best eval.\ninit   \t [0.16350618 0.16670019]. \t  7.530597410893871 \t 7.530597410893871\ninit   \t [0.53640884 0.13407134]. \t  7.530597410893871 \t 7.530597410893871\ninit   \t [0.70007243 0.18761661]. \t  7.530597410893871 \t 7.530597410893871\n1      \t [0.41013578 0.2       ]. \t  7.530597410893871 \t 7.530597410893871\n{'Mean Return': 6.076666666666665, 'Share Ratio': 0.1327915894897509, \n'Calmar Ratio': 0.03640902736169362, 'Colog Ratio': 0.0029018551134198343, \n'MiniMax ratio': 1.1969796454366382, 'Turnover': 0.0}\n```\n\n_Disclaimer: nothing about this project constitues investment advice, and the author bears no responsibiltiy for your subsequent investment decisions. Please refer to the [license](https://github.com/faprieto96/pipoh/blob/master/license.txt) for more information._\n\n\n## Project principles and design decisions\n\n-   It should be easy to swap out individual components of the optimization process\n    with the user's proprietary improvements.\n-   Usability is everything: it is better to be self-explanatory than consistent.\n-   There is no point in portfolio optimization unless it can be practically\n    applied to real asset prices.\n-   Everything that has been implemented should be tested.\n-   Inline documentation is good: dedicated (separate) documentation is better.\n    The two are not mutually exclusive.\n-   Formatting should never get in the way of coding: because of this,\n    I have deferred **all** formatting decisions to [Black](https://github.com/ambv/black).\n\n\n## Citing Pipoh and related work.\n\nPipoh methodology has been approved and peer reviewed by several scientist in the world. Articles related to this work can be checked in the following links.\n\n1. [Mean Squared Variance Portfolio: A Mixed-Integer Linear Programming Formulation](http://dx.doi.org/10.3390/math9030223)\n\nIf you use Pipoh for published work, please cite above works. Citations string:\n\n```text\n1. Fernández-Navarro, F., Martínez-Nieto, L., Carbonero-Ruz, M., \u0026 Montero-Romero, T. (2021). Mean squared variance portfolio: A mixed-integer linear programming formulation. Mathematics, 9(3), http://dx.doi.org/10.3390/math9030223\n```\n\n## Contributing\n\nContributions are _most welcome_. \n\nI'd like to thank all of the people who have contributed to pipoh since its release in 2021.\nSpecial shout-outs to:\n\n-   Francisco de Asís Fernández Navarro\n-   David Becerra Alonso\n\n## Getting in touch\n\nIf you are having a problem with pipoh, please raise a GitHub issue.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaprieto96%2Fpipoh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaprieto96%2Fpipoh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaprieto96%2Fpipoh/lists"}