mirror of
https://github.com/Magnus167/msyrs.git
synced 2025-08-20 04:00:01 +00:00
435 lines
11 KiB
Plaintext
Vendored
435 lines
11 KiB
Plaintext
Vendored
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "31d0d7e3",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Running this noteboook\n",
|
|
"\n",
|
|
"Create a new Python Venv using:\n",
|
|
"\n",
|
|
"```bash\n",
|
|
"python -m venv .venv\n",
|
|
"# source .venv/bin/activate\n",
|
|
"./.venv/Scripts/activate\n",
|
|
"```\n",
|
|
"\n",
|
|
"Install `evcxr_jupyter` and `jupyterlab` using:\n",
|
|
"\n",
|
|
"```bash\n",
|
|
"cargo install evcxr_jupyter\n",
|
|
"evcxr_jupyter --install\n",
|
|
"pip install jupyterlab\n",
|
|
"jupyter lab\n",
|
|
"```\n",
|
|
"\n",
|
|
"Or try following this guide here: [DataCrayon - Setup Jupyter with Rust](https://datacrayon.com/data-analysis-with-rust-notebooks/setup-anaconda-jupyter-and-rust/)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8d04a212-4025-41d7-809e-864649b08ab5",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Setup kernel\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "9edf8272-762c-48c6-a003-2b4f484471b1",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
":dep msyrs = { path = \"../../msyrs\" }\n",
|
|
":dep polars"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "22e1ae9e-14b8-4be4-b852-8f0fb420eaca",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"use msyrs::download::{JPMaQSDownload, JPMaQSDownloadGetIndicatorArgs};\n",
|
|
"use msyrs::utils as msyrs_utils;\n",
|
|
"use msyrs::utils::qdf as msyrs_qdf;\n",
|
|
"use polars::frame::DataFrame;"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "0c8ac34a-d0e5-458d-81a3-f7825ad50612",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Download data\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "57a15e6b",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"let cids_dm = vec![\n",
|
|
" \"AUD\", \"CAD\", \"CHF\", \"EUR\", \"GBP\", \"JPY\", \"NOK\", \"NZD\", \"SEK\", \"USD\",\n",
|
|
"];\n",
|
|
"let cids_em = vec![\n",
|
|
" \"CLP\", \"COP\", \"CZK\", \"HUF\", \"IDR\", \"ILS\", \"INR\", \"KRW\", \"MXN\", \"PLN\", \"THB\", \"TRY\", \"TWD\",\n",
|
|
" \"ZAR\",\n",
|
|
"];\n",
|
|
"\n",
|
|
"// cids = cids_dm + cids_em\n",
|
|
"let cids: Vec<String> = cids_dm\n",
|
|
" .iter()\n",
|
|
" .chain(cids_em.iter())\n",
|
|
" .map(|s| s.to_string())\n",
|
|
" .collect();\n",
|
|
"\n",
|
|
"let non_dux = [\"IDR\", \"NZD\"];\n",
|
|
"let cids_dux: Vec<String> = cids\n",
|
|
" .iter()\n",
|
|
" .filter(|s| !non_dux.contains(&s.as_str()))\n",
|
|
" .map(|s| s.to_string())\n",
|
|
" .collect();\n",
|
|
"let ecos = vec![\n",
|
|
" \"CPIC_SA_P1M1ML12\",\n",
|
|
" \"CPIC_SJA_P3M3ML3AR\",\n",
|
|
" \"CPIC_SJA_P6M6ML6AR\",\n",
|
|
" \"CPIH_SA_P1M1ML12\",\n",
|
|
" \"CPIH_SJA_P3M3ML3AR\",\n",
|
|
" \"CPIH_SJA_P6M6ML6AR\",\n",
|
|
" \"INFTEFF_NSA\",\n",
|
|
" \"INTRGDP_NSA_P1M1ML12_3MMA\",\n",
|
|
" \"INTRGDPv5Y_NSA_P1M1ML12_3MMA\",\n",
|
|
" \"PCREDITGDP_SJA_D1M1ML12\",\n",
|
|
" \"RGDP_SA_P1Q1QL4_20QMA\",\n",
|
|
" \"RYLDIRS02Y_NSA\",\n",
|
|
" \"RYLDIRS05Y_NSA\",\n",
|
|
" \"PCREDITBN_SJA_P1M1ML12\",\n",
|
|
"];\n",
|
|
"let mkts = vec![\n",
|
|
" \"DU02YXR_NSA\",\n",
|
|
" \"DU05YXR_NSA\",\n",
|
|
" \"DU02YXR_VT10\",\n",
|
|
" \"DU05YXR_VT10\",\n",
|
|
" \"EQXR_NSA\",\n",
|
|
" \"EQXR_VT10\",\n",
|
|
" \"FXXR_NSA\",\n",
|
|
" \"FXXR_VT10\",\n",
|
|
" \"FXCRR_NSA\",\n",
|
|
" \"FXTARGETED_NSA\",\n",
|
|
" \"FXUNTRADABLE_NSA\",\n",
|
|
"];\n",
|
|
"\n",
|
|
"let xcats: Vec<String> = ecos\n",
|
|
" .iter()\n",
|
|
" .chain(mkts.iter())\n",
|
|
" .map(|s| s.to_string())\n",
|
|
" .collect();\n",
|
|
"\n",
|
|
"let cids_str: Vec<&str> = cids.iter().map(AsRef::as_ref).collect();\n",
|
|
"let xcats_str: Vec<&str> = xcats.iter().map(AsRef::as_ref).collect();\n",
|
|
"let download_tickers = msyrs_utils::misc::create_interesecting_tickers(&cids_str, &xcats_str);"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "3ba562d3-2f32-4da3-891e-451288077530",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Import download functions\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "137d6b3e-498d-48b1-8e3c-2f9fedfb64e2",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"use msyrs::download::{JPMaQSDownload, JPMaQSDownloadGetIndicatorArgs};\n",
|
|
"\n",
|
|
"use msyrs::utils as msyrs_utils;\n",
|
|
"use msyrs::utils::qdf as msyrs_qdf;\n",
|
|
"\n",
|
|
"use polars::prelude::*;"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "677da413-44b1-4746-b723-c17b0ff0c8a8",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Check connection\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "6bcbfc0c-8249-4253-80b9-257115b50055",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"let mut jpamqs_download = JPMaQSDownload::default();\n",
|
|
"\n",
|
|
"match jpamqs_download.check_connection() {\n",
|
|
" Ok(_) => println!(\"Connection to DataQuery API successful\"),\n",
|
|
" Err(e) => println!(\"Error connecting to DataQuery API: {:?}\", e),\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "612e565f-4fa6-400b-a5ac-a4358dbc05ef",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Get catalogue\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "9ac7096a-fae8-43e9-9584-c5f055a9f14e",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"let tickers: Vec<String> = jpamqs_download.get_catalogue().unwrap();\n",
|
|
"let some_tickers = tickers.iter().take(100).map(|s| s.to_string()).collect::<Vec<String>>();\n",
|
|
"for ticker in some_tickers.clone() {\n",
|
|
" print!(\"{}, \", ticker);\n",
|
|
"}\n",
|
|
"println!(\"\");"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "f3a0bb91-3b3a-4c7e-959e-37311827b884",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Setup download args\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "e6a9506c",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Define tickers for download\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "bd10ce0d",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"// cids = cids_dm + cids_em\n",
|
|
"let cids: Vec<String> = cids_dm\n",
|
|
" .iter()\n",
|
|
" .chain(cids_em.iter())\n",
|
|
" .map(|s| s.to_string())\n",
|
|
" .collect();\n",
|
|
"\n",
|
|
"let non_dux = [\"IDR\", \"NZD\"];\n",
|
|
"#[allow(unused_variables)]\n",
|
|
"let cids_dux: Vec<String> = cids\n",
|
|
" .iter()\n",
|
|
" .filter(|s| !non_dux.contains(&s.as_str()))\n",
|
|
" .map(|s| s.to_string())\n",
|
|
" .collect();\n",
|
|
"let ecos = vec![\n",
|
|
" \"CPIC_SA_P1M1ML12\",\n",
|
|
" \"CPIC_SJA_P3M3ML3AR\",\n",
|
|
" \"CPIC_SJA_P6M6ML6AR\",\n",
|
|
" \"CPIH_SA_P1M1ML12\",\n",
|
|
" \"CPIH_SJA_P3M3ML3AR\",\n",
|
|
" \"CPIH_SJA_P6M6ML6AR\",\n",
|
|
" \"INFTEFF_NSA\",\n",
|
|
" \"INTRGDP_NSA_P1M1ML12_3MMA\",\n",
|
|
" \"INTRGDPv5Y_NSA_P1M1ML12_3MMA\",\n",
|
|
" \"PCREDITGDP_SJA_D1M1ML12\",\n",
|
|
" \"RGDP_SA_P1Q1QL4_20QMA\",\n",
|
|
" \"RYLDIRS02Y_NSA\",\n",
|
|
" \"RYLDIRS05Y_NSA\",\n",
|
|
" \"PCREDITBN_SJA_P1M1ML12\",\n",
|
|
"];\n",
|
|
"let mkts = vec![\n",
|
|
" \"DU02YXR_NSA\",\n",
|
|
" \"DU05YXR_NSA\",\n",
|
|
" \"DU02YXR_VT10\",\n",
|
|
" \"DU05YXR_VT10\",\n",
|
|
" \"EQXR_NSA\",\n",
|
|
" \"EQXR_VT10\",\n",
|
|
" \"FXXR_NSA\",\n",
|
|
" \"FXXR_VT10\",\n",
|
|
" \"FXCRR_NSA\",\n",
|
|
" \"FXTARGETED_NSA\",\n",
|
|
" \"FXUNTRADABLE_NSA\",\n",
|
|
"];\n",
|
|
"\n",
|
|
"let xcats: Vec<String> = ecos\n",
|
|
" .iter()\n",
|
|
" .chain(mkts.iter())\n",
|
|
" .map(|s| s.to_string())\n",
|
|
" .collect();\n",
|
|
"\n",
|
|
"let cids_str: Vec<&str> = cids.iter().map(AsRef::as_ref).collect();\n",
|
|
"let xcats_str: Vec<&str> = xcats.iter().map(AsRef::as_ref).collect();\n",
|
|
"let download_tickers = msyrs_utils::misc::create_interesecting_tickers(&cids_str, &xcats_str);"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "45b1f5fa-d99b-4f24-9b0b-1e04f484efc2",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "52d4ec91-a024-4f83-aaec-692f5d2645f9",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Download data as a dataframe"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "12e7055b-c68f-4b6e-9bb3-43c1886dab97",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"let all_metrics: Vec<String> = [\"value\", \"grading\", \"eop_lag\", \"mop_lag\"]\n",
|
|
" .iter()\n",
|
|
" .map(|x| x.to_string())\n",
|
|
" .collect();\n",
|
|
"\n",
|
|
"let download_args = JPMaQSDownloadGetIndicatorArgs {\n",
|
|
" tickers: download_tickers,\n",
|
|
" metrics: all_metrics // defaults to all metrics if not set\n",
|
|
" ..Default::default()\n",
|
|
"};\n",
|
|
"\n",
|
|
"let mut jpmaqs_client = JPMaQSDownload::default();\n",
|
|
"let downloaded_df = jpmaqs_client\n",
|
|
" .get_indicators_qdf(JPMaQSDownloadGetIndicatorArgs {\n",
|
|
" tickers: download_tickers,\n",
|
|
" ..Default::default()\n",
|
|
" })\n",
|
|
" .unwrap();\n",
|
|
"\n",
|
|
"downloaded_df.head(Some(100))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a0193ded",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Utility functions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "6f6c6455",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Reduce DF"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "10b264fe",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"let eq_df = msyrs_qdf::reduce_dataframe(\n",
|
|
" downloaded_df.clone(),\n",
|
|
" None,\n",
|
|
" Some(vec![\"EQXR_NSA\", \"EQXR_VT10\"]),\n",
|
|
" None,\n",
|
|
" // None,\n",
|
|
" None,\n",
|
|
" None,\n",
|
|
" false,\n",
|
|
")\n",
|
|
".unwrap();\n",
|
|
"\n",
|
|
"println!(\"{:?}\", eq_df.head(Some(10)));"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "f3f3b0c6",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"let fx_df = msyrs_qdf::reduce_dataframe(\n",
|
|
" downloaded_df,\n",
|
|
" None,\n",
|
|
" Some(vec![\n",
|
|
" \"FXXR_NSA\",\n",
|
|
" \"FXXR_VT10\",\n",
|
|
" \"FXCRR_NSA\",\n",
|
|
" \"FXTARGETED_NSA\",\n",
|
|
" \"FXUNTRADABLE_NSA\",\n",
|
|
" ]),\n",
|
|
" None,\n",
|
|
" None,\n",
|
|
" None,\n",
|
|
" true, // intersect = true \n",
|
|
")\n",
|
|
".unwrap();\n",
|
|
"\n",
|
|
"println!(\"{:?}\", eq_df.head(Some(10)));"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "722063d1",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Update DF"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "00ecdb90",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"let custom_df = msyrs_qdf::update_dataframe(&fx_df, &eq_df).unwrap();\n",
|
|
"\n",
|
|
"println!(\"{:?}\", custom_df.head(Some(10)));"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Rust",
|
|
"language": "rust",
|
|
"name": "rust"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": "rust",
|
|
"file_extension": ".rs",
|
|
"mimetype": "text/rust",
|
|
"name": "rust",
|
|
"pygment_lexer": "rust",
|
|
"version": "3.12.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|