{"id":152157,"date":"2022-08-11T11:52:00","date_gmt":"2022-08-11T15:52:00","guid":{"rendered":"https:\/\/ibkrcampus.com\/?p=152157"},"modified":"2023-03-01T16:48:26","modified_gmt":"2023-03-01T21:48:26","slug":"building-a-zipline-bundle-for-yahoo-csv-files-part-i","status":"publish","type":"post","link":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/","title":{"rendered":"Building a Zipline Bundle for Yahoo CSV Files &#8211; Part I"},"content":{"rendered":"\n<p>Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis. In this post, we are going to focus on how to load our own data files. Through an example, we will create a bundle to load data from csv files downloaded from Yahoo finance.<\/p>\n\n\n\n<p>We cover:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zipline recap<\/li>\n\n\n\n<li>A bundle overview<\/li>\n\n\n\n<li>Creating a bundle for Yahoo csv daily data<\/li>\n\n\n\n<li>Registering the bundle<\/li>\n\n\n\n<li>Ingesting data into Zipline<\/li>\n\n\n\n<li>Run a backtest with the new bundle<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zipline-recap\">Zipline recap<\/h2>\n\n\n\n<p>As we saw in the&nbsp;<a href=\"https:\/\/blog.quantinsti.com\/zipline-library-installation-windows\/\">last post<\/a>, the Zipline library is a powerful tool for backtesting that lets us focus on the strategy not without first making every effort to have the system ready.<\/p>\n\n\n\n<p>Although Quantopian has stopped operations, we can still enjoy the great work they did with the Zipline library.<\/p>\n\n\n\n<p>In this blog, we will see how to load data in Zipline from several sources such as Yahoo. The data will come from csv files for undated instruments such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stocks,<\/li>\n\n\n\n<li>ETFs,<\/li>\n\n\n\n<li>CFDs,<\/li>\n\n\n\n<li>FX, etc.<\/li>\n<\/ul>\n\n\n\n<p>Before reading on, it&#8217;s imperative to remember that if you want to simplify your life, you can use&nbsp;<a href=\"https:\/\/blueshift.quantinsti.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Blueshift<\/a>&nbsp;that provides historical data for backtesting and real-time data with connection to several brokers to put your algorithm live without the slightest effort. Otherwise, keep reading.<\/p>\n\n\n\n<p>Zipline calls this the&nbsp;<em><strong>ingest<\/strong><\/em>&nbsp;process. The connector that lets us be able to read a data source and load to Zipline is the&nbsp;<em><strong>bundle<\/strong><\/em>&nbsp;script.<\/p>\n\n\n\n<p>By default, the Zipline library comes with a few bundles to connect with eg. Quandl Wiki DB and csv files. Yet usually we need to connect to other data sources with different formats, column names, etc.<\/p>\n\n\n\n<p>For this reason, we need to create a bundle in order to be able to ingest the data and run backtests over them. That\u2019s the topic we discuss here.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"a-bundle-overview\">A bundle overview<\/h2>\n\n\n\n<p>A bundle is an ETL tool. The Extraction, Transformation and Load (ETL) is a well-known process in data science. It means that the bundle Python script needs to connect to a data source (web, file or database).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Extract<\/strong>&nbsp;the data and load into memory in a convenient data structure as a DataFrame.<\/li>\n\n\n\n<li>Normalize the data by cleaning and&nbsp;<strong>Transforming<\/strong>&nbsp;the NA, column names, dates and times, etc.<\/li>\n\n\n\n<li>Finally,&nbsp;<strong>load<\/strong>&nbsp;the normalized data into the Zipline data repository. By default is an SQLite although can be any other DB.<\/li>\n<\/ul>\n\n\n\n<p>Although it may seem like an overwhelming task, we can use the available&nbsp;<em>csvdir<\/em>&nbsp;bundle as a template. So the bundle development will be a bit easier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"creating-a-bundle-for-yahoo-csv-daily-data\"><strong>Creating a bundle for Yahoo csv daily data<\/strong><\/h2>\n\n\n\n<p>Let&#8217;s assume we have a folder with daily data downloaded from Yahoo. Note that, by default, the&nbsp;<em>csvdir.py<\/em>&nbsp;script looks for the data inside folders named&nbsp;<em>daily<\/em>&nbsp;and&nbsp;<em>minute<\/em>, hence we need to include Yahoo&#8217;s csv files inside the&nbsp;<em>daily<\/em>&nbsp;folder.<\/p>\n\n\n\n<p>The whole process in one line:<\/p>\n\n\n\n<p><strong>We need to read the data, transform them to the Zipline format and load them into the Zipline repository. This is the ETL process.<\/strong><\/p>\n\n\n\n<p>We will use the csvdir bundle included with the library as a template. The&nbsp;<em>csvdir.py<\/em>&nbsp;script &nbsp;is inside the following folder:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/opt\/miniconda3\/envs\/zipline35\/lib\/python3.5\/site-packages\/zipline\/data\/bundles\n<\/code><\/pre>\n\n\n\n<p>The marked part of the path depends on your machine and on the Conda environment name you are using. Our customized bundle file must be in that folder too.<\/p>\n\n\n\n<p>First, let&#8217;s create a copy of the&nbsp;<em>csvdir.py<\/em>&nbsp;to a recognizable name for what we are going to do. For example, here, we will make a bundle for Yahoo data listed on the NYSE. For example&nbsp;<em>yahoo_NYSE.py<\/em><\/p>\n\n\n\n<p>Open the new&nbsp;<em>yahoo_NYSE.py&nbsp;<\/em>bundle in your favourite &nbsp;editor. We are going to start editing it to adapt the Yahoo data to Zipline data format and be able to use it in the ingestion process.<\/p>\n\n\n\n<p>If we look inside the file, we have functions, classes and methods needed to undertake in the ETL process. In this post we won&#8217;t explain all the code, you have the\u00a0API documentation\u00a0for that. Here we&#8217;ll look at the parts needed for understanding and change.<\/p>\n\n\n\n<p>Change the name of the main function, I like to use the same name as the file name. So the name will be&nbsp;<em>yahoo_NYSE.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"195\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-1-1100x195.png\" alt=\"\" class=\"wp-image-152328 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-1-1100x195.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-1-700x124.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-1-300x53.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-1-768x136.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-1.png 1334w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/195;\" \/><\/figure>\n\n\n\n<p>This function accepts two input parameters. The first one is a list offor the data frequency. Minute, daily or both. The second one, is the folder where we have the Yahoo daily data for this case. We don&#8217;t use these parameters at this point, but it is useful to be aware of them.<\/p>\n\n\n\n<p>The output of this function is a class named CSVDIRBundle, modify this name as, for example, Yahoo_NYSEBundle.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"132\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-2-1100x132.png\" alt=\"\" class=\"wp-image-152329 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-2-1100x132.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-2-700x84.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-2-300x36.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-2-768x92.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-2.png 1346w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/132;\" \/><\/figure>\n\n\n\n<p>At lines 92, 97 and 98 it\u2019s needed to change the bundle name, this is the function name we call with the&nbsp;<em>ingest<\/em>&nbsp;zipline\u2019s command. Line 97 indicates the name we will be registering as a bundle inside Zipline.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"909\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-3-1100x909.png\" alt=\"\" class=\"wp-image-152330 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-3-1100x909.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-3-700x579.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-3-300x248.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-3-768x635.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-3.png 1338w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/909;\" \/><\/figure>\n\n\n\n<p>Inside the function declared at line 98, we can see the data format expected by Zipline, there is some code to deal with the input parameters and works with metadata, splits, etc.<\/p>\n\n\n\n<p>We need to modify the market calendar CSVDIR in order to use the generic market calendar for the NYSE at line 161.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"38\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-4-1100x38.png\" alt=\"\" class=\"wp-image-152331 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-4-1100x38.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-4-700x24.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-4-300x10.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-4-768x27.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-4.png 1330w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/38;\" \/><\/figure>\n\n\n\n<p>The function needed to modify in order to adapt our data into Zipline format is named&nbsp;<em>_pricing_iter<\/em>&nbsp;at line 171. This function reads the csv files and loads them into the Zipline DB.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"34\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-5-1100x34.png\" alt=\"\" class=\"wp-image-152332 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-5-1100x34.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-5-700x22.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-5-300x9.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-5-768x24.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-5.png 1276w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/34;\" \/><\/figure>\n\n\n\n<p>Here we can see the key part of the code:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"207\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-6-1100x207.png\" alt=\"\" class=\"wp-image-152333 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-6-1100x207.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-6-700x132.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-6-300x57.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-6-768x145.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-6.png 1220w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/207;\" \/><\/figure>\n\n\n\n<p>It reads the csv files and after that, we can inspect the content, modify the column names, drop the NA or any other change required in the data. For example, in line 188, we drop the possible duplicate dates.<\/p>\n\n\n\n<p>We can include as many&nbsp;<em>print<\/em>&nbsp;sentences as needed to trace the code execution.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"620\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-7-1100x620.png\" alt=\"\" class=\"wp-image-152334 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-7-1100x620.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-7-700x394.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-7-300x169.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-7-768x433.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-7.png 1370w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/620;\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>The key here is to align the csv data index with the NYSE market calendar. Line 207 needs the&nbsp;<em>sessions<\/em>&nbsp;variable to do that.<\/p>\n\n\n\n<p>We create the sessions dates from our data first date to the last date. Include this line at line 154, after the time frame is defined.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"39\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-8-1100x39.png\" alt=\"\" class=\"wp-image-152335 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-8-1100x39.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-8-700x25.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-8-300x11.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-8-768x27.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-8.png 1348w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/39;\" \/><\/figure>\n\n\n\n<p>Include the variable name in the parameters of the&nbsp;<em>write<\/em>&nbsp;function calling, line 156.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"97\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-9-1100x97.png\" alt=\"\" class=\"wp-image-152336 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-9-1100x97.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-9-700x62.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-9-300x26.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-9-768x68.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-9.png 1342w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/97;\" \/><\/figure>\n\n\n\n<p>And accept it in the input parameters of the&nbsp;<em>_pricing_iter&nbsp;<\/em>function.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"30\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-10-1100x30.png\" alt=\"\" class=\"wp-image-152337 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-10-1100x30.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-10-700x19.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-10-300x8.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-10-768x21.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-10.png 1408w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/30;\" \/><\/figure>\n\n\n\n<p>Finally, comment or drop the last code line, because we want to use the NYSE calendar with these data files.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1100\" height=\"34\" data-src=\"\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-11-1100x34.png\" alt=\"\" class=\"wp-image-152338 lazyload\" data-srcset=\"https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-11-1100x34.png 1100w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-11-700x22.png 700w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-11-300x9.png 300w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-11-768x24.png 768w, https:\/\/ibkrcampus.com\/campus\/wp-content\/uploads\/sites\/2\/2022\/08\/quantinsti-zipline-python-11.png 1356w\" data-sizes=\"(max-width: 1100px) 100vw, 1100px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1100px; aspect-ratio: 1100\/34;\" \/><\/figure>\n\n\n\n<p><em>Stay tuned for the next installment to learn how to test the new bundle.<\/em><\/p>\n\n\n\n<p><em>Visit QuantInsti for additional insight on this topic: <a href=\"https:\/\/blog.quantinsti.com\/zipline-bundle-yahoo\/\">https:\/\/blog.quantinsti.com\/zipline-bundle-yahoo\/<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis.<\/p>\n","protected":false},"author":387,"featured_media":106317,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[339,343,349,338,350,341,344],"tags":[7091,806,4922,595,9418],"contributors-categories":[13654],"class_list":{"0":"post-152157","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-data-science","8":"category-programing-languages","9":"category-python-development","10":"category-ibkr-quant-news","11":"category-quant-asia-pacific","12":"category-quant-development","13":"category-quant-regions","14":"tag-conda","15":"tag-data-science","16":"tag-econometrics","17":"tag-python","18":"tag-zipline","19":"contributors-categories-quantinsti"},"pp_statuses_selecting_workflow":false,"pp_workflow_action":"current","pp_status_selection":"publish","acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Building a Zipline Bundle for Yahoo CSV Files &#8211; Part I<\/title>\n<meta name=\"description\" content=\"Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.interactivebrokers.com\/campus\/wp-json\/wp\/v2\/posts\/152157\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Zipline Bundle for Yahoo CSV Files - Part I | IBKR Quant Blog\" \/>\n<meta property=\"og:description\" content=\"Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/\" \/>\n<meta property=\"og:site_name\" content=\"IBKR Campus US\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-11T15:52:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-01T21:48:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/10\/digital-map.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mario Pisa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mario Pisa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\n\t    \"@context\": \"https:\\\/\\\/schema.org\",\n\t    \"@graph\": [\n\t        {\n\t            \"@type\": \"NewsArticle\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/#article\",\n\t            \"isPartOf\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/\"\n\t            },\n\t            \"author\": {\n\t                \"name\": \"Mario Pisa\",\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/person\\\/f2bfe36ae4f6f088b98f90558d37ed12\"\n\t            },\n\t            \"headline\": \"Building a Zipline Bundle for Yahoo CSV Files &#8211; Part I\",\n\t            \"datePublished\": \"2022-08-11T15:52:00+00:00\",\n\t            \"dateModified\": \"2023-03-01T21:48:26+00:00\",\n\t            \"mainEntityOfPage\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/\"\n\t            },\n\t            \"wordCount\": 1142,\n\t            \"publisher\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/#primaryimage\"\n\t            },\n\t            \"thumbnailUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/10\\\/digital-map.jpg\",\n\t            \"keywords\": [\n\t                \"conda\",\n\t                \"Data Science\",\n\t                \"Econometrics\",\n\t                \"Python\",\n\t                \"zipline\"\n\t            ],\n\t            \"articleSection\": [\n\t                \"Data Science\",\n\t                \"Programming Languages\",\n\t                \"Python Development\",\n\t                \"Quant\",\n\t                \"Quant Asia Pacific\",\n\t                \"Quant Development\",\n\t                \"Quant Regions\"\n\t            ],\n\t            \"inLanguage\": \"en-US\"\n\t        },\n\t        {\n\t            \"@type\": \"WebPage\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/\",\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/\",\n\t            \"name\": \"Building a Zipline Bundle for Yahoo CSV Files - Part I | IBKR Quant Blog\",\n\t            \"isPartOf\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#website\"\n\t            },\n\t            \"primaryImageOfPage\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/#primaryimage\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/#primaryimage\"\n\t            },\n\t            \"thumbnailUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/10\\\/digital-map.jpg\",\n\t            \"datePublished\": \"2022-08-11T15:52:00+00:00\",\n\t            \"dateModified\": \"2023-03-01T21:48:26+00:00\",\n\t            \"description\": \"Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis.\",\n\t            \"inLanguage\": \"en-US\",\n\t            \"potentialAction\": [\n\t                {\n\t                    \"@type\": \"ReadAction\",\n\t                    \"target\": [\n\t                        \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/\"\n\t                    ]\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"@type\": \"ImageObject\",\n\t            \"inLanguage\": \"en-US\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\\\/#primaryimage\",\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/10\\\/digital-map.jpg\",\n\t            \"contentUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2021\\\/10\\\/digital-map.jpg\",\n\t            \"width\": 900,\n\t            \"height\": 506,\n\t            \"caption\": \"Currency\"\n\t        },\n\t        {\n\t            \"@type\": \"WebSite\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#website\",\n\t            \"url\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/\",\n\t            \"name\": \"IBKR Campus US\",\n\t            \"description\": \"Financial Education from Interactive Brokers\",\n\t            \"publisher\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\"\n\t            },\n\t            \"potentialAction\": [\n\t                {\n\t                    \"@type\": \"SearchAction\",\n\t                    \"target\": {\n\t                        \"@type\": \"EntryPoint\",\n\t                        \"urlTemplate\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/?s={search_term_string}\"\n\t                    },\n\t                    \"query-input\": {\n\t                        \"@type\": \"PropertyValueSpecification\",\n\t                        \"valueRequired\": true,\n\t                        \"valueName\": \"search_term_string\"\n\t                    }\n\t                }\n\t            ],\n\t            \"inLanguage\": \"en-US\"\n\t        },\n\t        {\n\t            \"@type\": \"Organization\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\",\n\t            \"name\": \"Interactive Brokers\",\n\t            \"alternateName\": \"IBKR\",\n\t            \"url\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/\",\n\t            \"logo\": {\n\t                \"@type\": \"ImageObject\",\n\t                \"inLanguage\": \"en-US\",\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/logo\\\/image\\\/\",\n\t                \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/05\\\/ibkr-campus-logo.jpg\",\n\t                \"contentUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/05\\\/ibkr-campus-logo.jpg\",\n\t                \"width\": 669,\n\t                \"height\": 669,\n\t                \"caption\": \"Interactive Brokers\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/logo\\\/image\\\/\"\n\t            },\n\t            \"publishingPrinciples\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/about-ibkr-campus\\\/\",\n\t            \"ethicsPolicy\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/cyber-security-notice\\\/\"\n\t        },\n\t        {\n\t            \"@type\": \"Person\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/person\\\/f2bfe36ae4f6f088b98f90558d37ed12\",\n\t            \"name\": \"Mario Pisa\",\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/author\\\/mariopisa\\\/\"\n\t        }\n\t    ]\n\t}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building a Zipline Bundle for Yahoo CSV Files &#8211; Part I","description":"Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.interactivebrokers.com\/campus\/wp-json\/wp\/v2\/posts\/152157\/","og_locale":"en_US","og_type":"article","og_title":"Building a Zipline Bundle for Yahoo CSV Files - Part I | IBKR Quant Blog","og_description":"Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis.","og_url":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/","og_site_name":"IBKR Campus US","article_published_time":"2022-08-11T15:52:00+00:00","article_modified_time":"2023-03-01T21:48:26+00:00","og_image":[{"width":900,"height":506,"url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/10\/digital-map.jpg","type":"image\/jpeg"}],"author":"Mario Pisa","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Mario Pisa","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/#article","isPartOf":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/"},"author":{"name":"Mario Pisa","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/person\/f2bfe36ae4f6f088b98f90558d37ed12"},"headline":"Building a Zipline Bundle for Yahoo CSV Files &#8211; Part I","datePublished":"2022-08-11T15:52:00+00:00","dateModified":"2023-03-01T21:48:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/"},"wordCount":1142,"publisher":{"@id":"https:\/\/ibkrcampus.com\/campus\/#organization"},"image":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/#primaryimage"},"thumbnailUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/10\/digital-map.jpg","keywords":["conda","Data Science","Econometrics","Python","zipline"],"articleSection":["Data Science","Programming Languages","Python Development","Quant","Quant Asia Pacific","Quant Development","Quant Regions"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/","url":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/","name":"Building a Zipline Bundle for Yahoo CSV Files - Part I | IBKR Quant Blog","isPartOf":{"@id":"https:\/\/ibkrcampus.com\/campus\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/#primaryimage"},"image":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/#primaryimage"},"thumbnailUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/10\/digital-map.jpg","datePublished":"2022-08-11T15:52:00+00:00","dateModified":"2023-03-01T21:48:26+00:00","description":"Zipline is a fantastic tool for backtesting and data is the main raw material for doing this kind of analysis.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/building-a-zipline-bundle-for-yahoo-csv-files-part-i\/#primaryimage","url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/10\/digital-map.jpg","contentUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/10\/digital-map.jpg","width":900,"height":506,"caption":"Currency"},{"@type":"WebSite","@id":"https:\/\/ibkrcampus.com\/campus\/#website","url":"https:\/\/ibkrcampus.com\/campus\/","name":"IBKR Campus US","description":"Financial Education from Interactive Brokers","publisher":{"@id":"https:\/\/ibkrcampus.com\/campus\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ibkrcampus.com\/campus\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ibkrcampus.com\/campus\/#organization","name":"Interactive Brokers","alternateName":"IBKR","url":"https:\/\/ibkrcampus.com\/campus\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/logo\/image\/","url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2024\/05\/ibkr-campus-logo.jpg","contentUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2024\/05\/ibkr-campus-logo.jpg","width":669,"height":669,"caption":"Interactive Brokers"},"image":{"@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/logo\/image\/"},"publishingPrinciples":"https:\/\/www.interactivebrokers.com\/campus\/about-ibkr-campus\/","ethicsPolicy":"https:\/\/www.interactivebrokers.com\/campus\/cyber-security-notice\/"},{"@type":"Person","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/person\/f2bfe36ae4f6f088b98f90558d37ed12","name":"Mario Pisa","url":"https:\/\/www.interactivebrokers.com\/campus\/author\/mariopisa\/"}]}},"jetpack_featured_media_url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2021\/10\/digital-map.jpg","_links":{"self":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts\/152157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/users\/387"}],"replies":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/comments?post=152157"}],"version-history":[{"count":0,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts\/152157\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/media\/106317"}],"wp:attachment":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/media?parent=152157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/categories?post=152157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/tags?post=152157"},{"taxonomy":"contributors-categories","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/contributors-categories?post=152157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}