{"id":523,"date":"2018-09-06T16:23:37","date_gmt":"2018-09-06T14:23:37","guid":{"rendered":"https:\/\/www.pschatzmann.ch\/home\/?p=523"},"modified":"2020-11-21T22:22:51","modified_gmt":"2020-11-21T21:22:51","slug":"investor-a-polyglot-framework","status":"publish","type":"post","link":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/","title":{"rendered":"Investor &#8211; A Polyglot Framework"},"content":{"rendered":"<p>Because Investor has been implemented in <strong>Java<\/strong> and is available as jars from a <strong>Maven repository <\/strong>we can easily use the framework in all languages which are based on the the JVM.<\/p>\n<p>Here is a quick demo using <a href=\"https:\/\/blog.jupyter.org\/jupyterlab-is-ready-for-users-5a6f039b8906\">Jupyter Lab <\/a>(using <a href=\"http:\/\/beakerx.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">Beakerx<\/a>) with:<br \/>\n&#8211; Scala<br \/>\n&#8211; Java<br \/>\n&#8211; Groovy<br \/>\n&#8211; Kotlin<br \/>\n&#8211; Clojure<\/p>\n<p>Here is a screen shot of Jupyter Lab:<br \/>\n<img decoding=\"async\" src=\"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter-300x156.png\" alt=\"\" width=\"100%\" height=\"156\" class=\"alignnone size-medium wp-image-525\" srcset=\"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter-300x156.png 300w, https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter-768x398.png 768w, https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter.png 1432w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<h3>Scala<\/h3>\n<p><a href=\"https:\/\/www.scala-lang.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Scala<\/a> combines object-oriented and functional programming in one concise, high-level language. Scala&#8217;s static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.<\/p>\n<p>For our demo we just use a very simple example and implement it in the different JVM languages which  are available in BeakerX<\/p>\n<p>Here is the Scala example that I took from my Impact Analysis blog. We use this example as a base line:<\/p>\n<pre><code class=\"Scala\">%%scala\n%classpath config resolver maven-public http:\/\/software.pschatzmann.ch\/repository\/maven-public\/\n%classpath add mvn ch.pschatzmann:investor:0.9-SNAPSHOT\n\nimport ch.pschatzmann.dates._\nimport ch.pschatzmann.stocks._\nimport ch.pschatzmann.stocks.data.universe._\nimport ch.pschatzmann.stocks.input._\nimport ch.pschatzmann.stocks.accounting._\nimport ch.pschatzmann.stocks.accounting.kpi._\nimport ch.pschatzmann.stocks.execution._\nimport ch.pschatzmann.stocks.execution.fees._\nimport ch.pschatzmann.stocks.parameters._\nimport ch.pschatzmann.stocks.strategy._\nimport ch.pschatzmann.stocks.strategy.optimization._\n\nvar account = new Account(\"Simulation\",\"USD\", 100000.00, Context.date(\"2015-01-01\"), new PerTradeFees(10.0))\nvar df = new StockData(new StockID(\"AAPL\", \"NASDAQ\"), new QuandlWIKIReader())\nvar strategy = new RSI2Strategy(df)\nvar trader = new PaperTrader(account)\nvar state = new Fitness(trader).getFitness(strategy, account.getDateRange())\n\n\"Return in USD: \" + state.result().getValue(KPI.AbsoluteReturn)\n\n<\/code><\/pre>\n<pre><code>Return in USD: 36996.0\n<\/code><\/pre>\n<h3>Java<\/h3>\n<p><a href=\"https:\/\/www.oracle.com\/technetwork\/java\/index.html\" rel=\"noopener noreferrer\" target=\"_blank\">Java<\/a> is the most popular general-purpose computer-programming language that is concurrent, class-based, object-oriented and specifically designed to have as few implementation dependencies as possible. It is intended to let application developers &#8220;write once, run anywhere&#8221; meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.<\/p>\n<p>This example is very similar to our scala one: The only differnece is that we use * instead of _ in the package definitions and that the varible definitions need to contain the data type (Class names):<\/p>\n<pre><code class=\"Scala\">%%java\n%classpath config resolver maven-public http:\/\/software.pschatzmann.ch\/repository\/maven-public\/\n%classpath add mvn ch.pschatzmann:investor:0.9-SNAPSHOT\n\nimport ch.pschatzmann.dates.*;\nimport ch.pschatzmann.stocks.*;\nimport ch.pschatzmann.stocks.data.universe.*;\nimport ch.pschatzmann.stocks.input.*;\nimport ch.pschatzmann.stocks.accounting.*;\nimport ch.pschatzmann.stocks.accounting.kpi.*;\nimport ch.pschatzmann.stocks.execution.*;\nimport ch.pschatzmann.stocks.execution.fees.*;\nimport ch.pschatzmann.stocks.parameters.*;\nimport ch.pschatzmann.stocks.strategy.*;\nimport ch.pschatzmann.stocks.strategy.optimization.*;\n\n\nIAccount account = new Account(\"Simulation\",\"USD\", 100000.00, Context.date(\"2015-01-01\"), new PerTradeFees(10.0));\nIStockData sd = new StockData(new StockID(\"AAPL\", \"NASDAQ\"), new QuandlWIKIReader());\nITradingStrategy strategy = new RSI2Strategy(sd);\nITrader trader = new PaperTrader(account);\nState state = new Fitness(trader).getFitness(strategy, account.getDateRange());\n\nreturn \"Return in USD: \" + state.result().getValue(KPI.AbsoluteReturn);\n\n<\/code><\/pre>\n<pre><code>\nReturn in USD: 36996.0\n<\/code><\/pre>\n<h3>Groovy<\/h3>\n<p><a href=\"http:\/\/groovy-lang.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Groovy <\/a>is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming.<\/p>\n<p>Our Groovy example is very simple as well: Like in Scala we do not need to indicate the type: we can just replace the var with a def.<\/p>\n<pre><code class=\"Scala\">%%groovy\n%classpath config resolver maven-public http:\/\/software.pschatzmann.ch\/repository\/maven-public\/\n%classpath add mvn ch.pschatzmann:investor:0.9-SNAPSHOT\n\nimport ch.pschatzmann.dates.*\nimport ch.pschatzmann.stocks.*\nimport ch.pschatzmann.stocks.data.universe.*\nimport ch.pschatzmann.stocks.input.*\nimport ch.pschatzmann.stocks.accounting.*\nimport ch.pschatzmann.stocks.accounting.kpi.*\nimport ch.pschatzmann.stocks.execution.*\nimport ch.pschatzmann.stocks.execution.fees.*\nimport ch.pschatzmann.stocks.execution.price.*\nimport ch.pschatzmann.stocks.parameters.*\nimport ch.pschatzmann.stocks.strategy.*\nimport ch.pschatzmann.stocks.strategy.optimization.*\n\ndef account = new Account(\"Simulation\",\"USD\", 100000.00, Context.date(\"2015-01-01\"), new PerTradeFees(10.0))\ndef sd = new StockData(new StockID(\"AAPL\", \"NASDAQ\"), new QuandlWIKIReader())\ndef strategy = new RSI2Strategy(sd)\ndef trader = new PaperTrader(account)\ndef state = new Fitness(trader).getFitness(strategy, account.getDateRange())\n\n\"Return in USD: \" + state.result().getValue(KPI.AbsoluteReturn)\n<\/code><\/pre>\n<pre><code>\nReturn in USD: 36996.0\n<\/code><\/pre>\n<h3>Kotlin<\/h3>\n<p><a href=\"https:\/\/kotlinlang.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Kotlin<\/a> is a statically typed programming language for modern multiplatform applications 100% interoperable with Java and Android\u2122<\/p>\n<p>Our example is very similar as well: Like in Scala we do not need to indicate the type: we can just replace the var with a val and there is no new operator.<\/p>\n<pre><code class=\"Scala\">%%kotlin\n%classpath config resolver maven-public http:\/\/software.pschatzmann.ch\/repository\/maven-public\/\n%classpath add mvn ch.pschatzmann:investor:0.9-SNAPSHOT\n\nimport ch.pschatzmann.dates.*\nimport ch.pschatzmann.stocks.*\nimport ch.pschatzmann.stocks.data.universe.*\nimport ch.pschatzmann.stocks.input.*\nimport ch.pschatzmann.stocks.accounting.*\nimport ch.pschatzmann.stocks.accounting.kpi.*\nimport ch.pschatzmann.stocks.execution.*\nimport ch.pschatzmann.stocks.execution.fees.*\nimport ch.pschatzmann.stocks.execution.price.*\nimport ch.pschatzmann.stocks.parameters.*\nimport ch.pschatzmann.stocks.strategy.*\nimport ch.pschatzmann.stocks.strategy.optimization.*\n\nval account =  Account(\"Simulation\",\"USD\", 100000.00, Context.date(\"2015-01-01\"),  PerTradeFees(10.0))\nval sd = StockData(StockID(\"AAPL\", \"NASDAQ\"), QuandlWIKIReader())\nval strategy =  RSI2Strategy(sd)\nval trader =  PaperTrader(account)\nval state =  Fitness(trader).getFitness(strategy, account.getDateRange())\n\n\"Return in USD: \" + state.result().getValue(KPI.AbsoluteReturn)\n\n<\/code><\/pre>\n<pre><code>\nReturn in USD: 36996.0\n<\/code><\/pre>\n<h3>Clojure<\/h3>\n<p><a href=\"https:\/\/clojure.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Closure<\/a> is a Lisp dialect and therefore it is very different from all the examples above.<br \/>\nAll commands are in brackets: (). The imports of packages is done with (import (packageName Class1 Class2 &#8230;)) and<br \/>\nvariable assignements are done with (let [variableName expression)].<\/p>\n<p>In order to output the result we just concatenate the pieces as strings with (str expression1 epression2 &#8230;)<\/p>\n<pre><code class=\"Scala\">%%clojure \n%classpath config resolver maven-public http:\/\/software.pschatzmann.ch\/repository\/maven-public\/\n%classpath add mvn ch.pschatzmann:investor:0.9-SNAPSHOT\n\n(import (ch.pschatzmann.stocks Context StockID StockData) \n    (ch.pschatzmann.stocks.accounting Account)\n    (ch.pschatzmann.stocks.execution.fees PerTradeFees)\n    (ch.pschatzmann.stocks.input QuandlWIKIReader)\n    (ch.pschatzmann.stocks.strategy RSI2Strategy)\n    (ch.pschatzmann.stocks.execution PaperTrader)\n    (ch.pschatzmann.stocks.strategy.optimization Fitness)\n    (ch.pschatzmann.stocks.accounting.kpi KPI))\n\n(let [startDate (Context\/date \"2015-01-01\")\n    account (new Account \"Simulation\" \"USD\" 100000.00 startDate (new PerTradeFees 10.0))\n    stockID (new StockID \"AAPL\" \"NASDAQ\")\n    sd (new StockData stockID (new QuandlWIKIReader))\n    strategy (new RSI2Strategy sd)\n    trader  (new PaperTrader account)\n    state (.getFitness (new Fitness trader) strategy (.getDateRange account))]\n\n    (str \"Return in USD: \" (.getValue (.result state) (KPI\/AbsoluteReturn))))\n\n<\/code><\/pre>\n<pre><code>Return in USD: 36996.0\n<\/code><\/pre>\n<h3>Outlook<\/h3>\n<p>I did not provide any examples in Python and Javascript because the stanrad implementations are not based on the JVM. However it should be possible to use Jython or Rhino or Nashorn e.g. with https:\/\/github.com\/scijava\/scijava-jupyter-kernel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Because Investor has been implemented in Java and is available as jars from a Maven repository we can easily use the framework in all languages which are based on the the JVM. Here is a quick demo using Jupyter Lab (using Beakerx) with: &#8211; Scala &#8211; Java &#8211; Groovy &#8211; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":525,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[10,13],"tags":[],"class_list":["post-523","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projects","category-quantitative-trading"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Investor - A Polyglot Framework - Phil Schatzmann<\/title>\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.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Investor - A Polyglot Framework - Phil Schatzmann\" \/>\n<meta property=\"og:description\" content=\"Because Investor has been implemented in Java and is available as jars from a Maven repository we can easily use the framework in all languages which are based on the the JVM. Here is a quick demo using Jupyter Lab (using Beakerx) with: &#8211; Scala &#8211; Java &#8211; Groovy &#8211; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/\" \/>\n<meta property=\"og:site_name\" content=\"Phil Schatzmann\" \/>\n<meta property=\"article:published_time\" content=\"2018-09-06T14:23:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-11-21T21:22:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1432\" \/>\n\t<meta property=\"og:image:height\" content=\"743\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"pschatzmann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"pschatzmann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/\"},\"author\":{\"name\":\"pschatzmann\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"headline\":\"Investor &#8211; A Polyglot Framework\",\"datePublished\":\"2018-09-06T14:23:37+00:00\",\"dateModified\":\"2020-11-21T21:22:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/\"},\"wordCount\":481,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2018\\\/09\\\/jupyter.png\",\"articleSection\":[\"Projects\",\"Quantitative Trading\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/\",\"name\":\"Investor - A Polyglot Framework - Phil Schatzmann\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2018\\\/09\\\/jupyter.png\",\"datePublished\":\"2018-09-06T14:23:37+00:00\",\"dateModified\":\"2020-11-21T21:22:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2018\\\/09\\\/jupyter.png\",\"contentUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2018\\\/09\\\/jupyter.png\",\"width\":1432,\"height\":743},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2018\\\/09\\\/06\\\/investor-a-polyglot-framework\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Investor &#8211; A Polyglot Framework\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#website\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/\",\"name\":\"Phil Schatzmann Consulting\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\",\"name\":\"pschatzmann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\",\"contentUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\",\"width\":305,\"height\":305,\"caption\":\"pschatzmann\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Investor - A Polyglot Framework - Phil Schatzmann","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.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/","og_locale":"en_US","og_type":"article","og_title":"Investor - A Polyglot Framework - Phil Schatzmann","og_description":"Because Investor has been implemented in Java and is available as jars from a Maven repository we can easily use the framework in all languages which are based on the the JVM. Here is a quick demo using Jupyter Lab (using Beakerx) with: &#8211; Scala &#8211; Java &#8211; Groovy &#8211; [&hellip;]","og_url":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/","og_site_name":"Phil Schatzmann","article_published_time":"2018-09-06T14:23:37+00:00","article_modified_time":"2020-11-21T21:22:51+00:00","og_image":[{"width":1432,"height":743,"url":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter.png","type":"image\/png"}],"author":"pschatzmann","twitter_card":"summary_large_image","twitter_misc":{"Written by":"pschatzmann","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#article","isPartOf":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/"},"author":{"name":"pschatzmann","@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"headline":"Investor &#8211; A Polyglot Framework","datePublished":"2018-09-06T14:23:37+00:00","dateModified":"2020-11-21T21:22:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/"},"wordCount":481,"commentCount":0,"publisher":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"image":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#primaryimage"},"thumbnailUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter.png","articleSection":["Projects","Quantitative Trading"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/","url":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/","name":"Investor - A Polyglot Framework - Phil Schatzmann","isPartOf":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#primaryimage"},"image":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#primaryimage"},"thumbnailUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter.png","datePublished":"2018-09-06T14:23:37+00:00","dateModified":"2020-11-21T21:22:51+00:00","breadcrumb":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#primaryimage","url":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter.png","contentUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2018\/09\/jupyter.png","width":1432,"height":743},{"@type":"BreadcrumbList","@id":"https:\/\/www.pschatzmann.ch\/home\/2018\/09\/06\/investor-a-polyglot-framework\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pschatzmann.ch\/home\/"},{"@type":"ListItem","position":2,"name":"Investor &#8211; A Polyglot Framework"}]},{"@type":"WebSite","@id":"https:\/\/www.pschatzmann.ch\/home\/#website","url":"https:\/\/www.pschatzmann.ch\/home\/","name":"Phil Schatzmann Consulting","description":"","publisher":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pschatzmann.ch\/home\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1","name":"pschatzmann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png","url":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png","contentUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png","width":305,"height":305,"caption":"pschatzmann"},"logo":{"@id":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png"}}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/comments?post=523"}],"version-history":[{"count":1,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/523\/revisions"}],"predecessor-version":[{"id":1818,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/523\/revisions\/1818"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/media\/525"}],"wp:attachment":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/media?parent=523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/categories?post=523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/tags?post=523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}