Files
QuanTAlib/archive/docs/Trading_example.ipynb
T

459 lines
178 KiB
Plaintext
Raw Normal View History

2024-09-24 16:41:26 -07:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>QuanTAlib, 0.2.1</span></li></ul></div></div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#r \"nuget: QuanTAlib\"\n",
"#r \"nuget: Plotly.NET;\"\n",
"#r \"nuget: Plotly.NET.Interactive;\"\n",
"\n",
"using QuanTAlib;\n",
"using Plotly.NET;\n",
"using Plotly.NET.LayoutObjects;"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div id=\"8bb5a297-5aad-408f-9315-9cbfc44d1157\"><!-- Plotly chart will be drawn inside this DIV --></div><script type=\"text/javascript\">\r\n",
"var renderPlotly_8bb5a2975aad408f93159cbfc44d1157 = function() {\r\n",
" var fsharpPlotlyRequire = requirejs.config({context:'fsharp-plotly',paths:{plotly:'https://cdn.plot.ly/plotly-2.18.1.min'}}) || require;\r\n",
" fsharpPlotlyRequire(['plotly'], function(Plotly) {\r\n",
" var data = [{\"type\":\"candlestick\",\"name\":\"SPY\",\"x\":[\"2022-02-01T14:30:00\",\"2022-02-02T14:30:00\",\"2022-02-03T14:30:00\",\"2022-02-04T14:30:00\",\"2022-02-07T14:30:00\",\"2022-02-08T14:30:00\",\"2022-02-09T14:30:00\",\"2022-02-10T14:30:00\",\"2022-02-11T14:30:00\",\"2022-02-14T14:30:00\",\"2022-02-15T14:30:00\",\"2022-02-16T14:30:00\",\"2022-02-17T14:30:00\",\"2022-02-18T14:30:00\",\"2022-02-22T14:30:00\",\"2022-02-23T14:30:00\",\"2022-02-24T14:30:00\",\"2022-02-25T14:30:00\",\"2022-02-28T14:30:00\",\"2022-03-01T14:30:00\",\"2022-03-02T14:30:00\",\"2022-03-03T14:30:00\",\"2022-03-04T14:30:00\",\"2022-03-07T14:30:00\",\"2022-03-08T14:30:00\",\"2022-03-09T14:30:00\",\"2022-03-10T14:30:00\",\"2022-03-11T14:30:00\",\"2022-03-14T13:30:00\",\"2022-03-15T13:30:00\",\"2022-03-16T13:30:00\",\"2022-03-17T13:30:00\",\"2022-03-18T13:30:00\",\"2022-03-21T13:30:00\",\"2022-03-22T13:30:00\",\"2022-03-23T13:30:00\",\"2022-03-24T13:30:00\",\"2022-03-25T13:30:00\",\"2022-03-28T13:30:00\",\"2022-03-29T13:30:00\",\"2022-03-30T13:30:00\",\"2022-03-31T13:30:00\",\"2022-04-01T13:30:00\",\"2022-04-04T13:30:00\",\"2022-04-05T13:30:00\",\"2022-04-06T13:30:00\",\"2022-04-07T13:30:00\",\"2022-04-08T13:30:00\",\"2022-04-11T13:30:00\",\"2022-04-12T13:30:00\",\"2022-04-13T13:30:00\",\"2022-04-14T13:30:00\",\"2022-04-18T13:30:00\",\"2022-04-19T13:30:00\",\"2022-04-20T13:30:00\",\"2022-04-21T13:30:00\",\"2022-04-22T13:30:00\",\"2022-04-25T13:30:00\",\"2022-04-26T13:30:00\",\"2022-04-27T13:30:00\",\"2022-04-28T13:30:00\",\"2022-04-29T13:30:00\",\"2022-05-02T13:30:00\",\"2022-05-03T13:30:00\",\"2022-05-04T13:30:00\",\"2022-05-05T13:30:00\",\"2022-05-06T13:30:00\",\"2022-05-09T13:30:00\",\"2022-05-10T13:30:00\",\"2022-05-11T13:30:00\",\"2022-05-12T13:30:00\",\"2022-05-13T13:30:00\",\"2022-05-16T13:30:00\",\"2022-05-17T13:30:00\",\"2022-05-18T13:30:00\",\"2022-05-19T13:30:00\",\"2022-05-20T13:30:00\",\"2022-05-23T13:30:00\",\"2022-05-24T13:30:00\",\"2022-05-25T13:30:00\",\"2022-05-26T13:30:00\",\"2022-05-27T13:30:00\",\"2022-05-31T13:30:00\",\"2022-06-01T13:30:00\",\"2022-06-02T13:30:00\",\"2022-06-03T13:30:00\",\"2022-06-06T13:30:00\",\"2022-06-07T13:30:00\",\"2022-06-08T13:30:00\",\"2022-06-09T13:30:00\",\"2022-06-10T13:30:00\",\"2022-06-13T13:30:00\",\"2022-06-14T13:30:00\",\"2022-06-15T13:30:00\",\"2022-06-16T13:30:00\",\"2022-06-17T13:30:00\",\"2022-06-21T13:30:00\",\"2022-06-22T13:30:00\",\"2022-06-23T13:30:00\",\"2022-06-24T13:30:00\",\"2022-06-27T13:30:00\",\"2022-06-28T13:30:00\",\"2022-06-29T13:30:00\",\"2022-06-30T13:30:00\",\"2022-07-01T13:30:00\",\"2022-07-05T13:30:00\",\"2022-07-06T13:30:00\",\"2022-07-07T13:30:00\",\"2022-07-08T13:30:00\",\"2022-07-11T13:30:00\",\"2022-07-12T13:30:00\",\"2022-07-13T13:30:00\",\"2022-07-14T13:30:00\",\"2022-07-15T13:30:00\",\"2022-07-18T13:30:00\",\"2022-07-19T13:30:00\",\"2022-07-20T13:30:00\",\"2022-07-21T13:30:00\",\"2022-07-22T13:30:00\",\"2022-07-25T13:30:00\",\"2022-07-26T13:30:00\",\"2022-07-27T13:30:00\",\"2022-07-28T13:30:00\",\"2022-07-29T13:30:00\",\"2022-08-01T13:30:00\",\"2022-08-02T13:30:00\",\"2022-08-03T13:30:00\",\"2022-08-04T13:30:00\",\"2022-08-05T13:30:00\",\"2022-08-08T13:30:00\",\"2022-08-09T13:30:00\",\"2022-08-10T13:30:00\",\"2022-08-11T13:30:00\",\"2022-08-12T13:30:00\",\"2022-08-15T13:30:00\",\"2022-08-16T13:30:00\",\"2022-08-17T13:30:00\",\"2022-08-18T13:30:00\",\"2022-08-19T13:30:00\",\"2022-08-22T13:30:00\",\"2022-08-23T13:30:00\",\"2022-08-24T13:30:00\",\"2022-08-25T13:30:00\",\"2022-08-26T13:30:00\",\"2022-08-29T13:30:00\",\"2022-08-30T13:30:00\",\"2022-08-31T13:30:00\",\"2022-09-01T13:30:00\",\"2022-09-02T13:30:00\",\"2022-09-06T13:30:00\",\"2022-09-07T13:30:00\",\"2022-09-08T13:30:00\",\"2022-09-09T13:30:00\",\"2022-09-12T13:30:00\",\"2022-09-13T13:30:00\",\"2022-09-14T13:30:00\",\"2022-09-15T13:30:00\",\"2022-09-16T13:30:00\",\"2022-09-19T13:30:00\",\"2022-09-20T13:30:00\",\"2022-09-21T13:30:00\",\"2022-09-22T13:30:00\",\"2022-09-23T13:30:00\",\"2022-09-26T13:30:00\",\"2022-09-27T13:30:00\",\"2022-09-28T13:30:00\",\"2022-09-29T13:30:00\",\"2022-09
" var layout = {\"width\":1200,\"height\":400,\"template\":{\"layout\":{\"title\":{\"x\":0.05},\"font\":{\"color\":\"rgba(42, 63, 95, 1.0)\"},\"paper_bgcolor\":\"rgba(255, 255, 255, 1.0)\",\"plot_bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"autotypenumbers\":\"strict\",\"colorscale\":{\"diverging\":[[0.0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1.0,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0.0,\"ticks\":\"\"}},\"geo\":{\"showland\":true,\"landcolor\":\"rgba(229, 236, 246, 1.0)\",\"showlakes\":true,\"lakecolor\":\"rgba(255, 255, 255, 1.0)\",\"subunitcolor\":\"rgba(255, 255, 255, 1.0)\",\"bgcolor\":\"rgba(255, 255, 255, 1.0)\"},\"mapbox\":{\"style\":\"light\"},\"polar\":{\"bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"radialaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"},\"angularaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"yaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"zaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true}},\"ternary\":{\"aaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"baxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"caxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"bgcolor\":\"rgba(229, 236, 246, 1.0)\"},\"xaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"yaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"shapedefaults\":{\"line\":{\"color\":\"rgba(42, 63, 95, 1.0)\"}},\"colorway\":[\"rgba(99, 110, 250, 1.0)\",\"rgba(239, 85, 59, 1.0)\",\"rgba(0, 204, 150, 1.0)\",\"rgba(171, 99, 250, 1.0)\",\"rgba(255, 161, 90, 1.0)\",\"rgba(25, 211, 243, 1.0)\",\"rgba(255, 102, 146, 1.0)\",\"rgba(182, 232, 128, 1.0)\",\"rgba(255, 151, 255, 1.0)\",\"rgba(254, 203, 82, 1.0)\"]},\"data\":{\"bar\":[{\"marker\":{\"line\":{\"color\":\"rgba(229, 236, 246, 1.0)\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"s
" var config = {\"responsive\":true};\r\n",
" Plotly.newPlot('8bb5a297-5aad-408f-9315-9cbfc44d1157', data, layout, config);\r\n",
" });\r\n",
"};\r\n",
"if ((typeof(requirejs) !== typeof(Function)) || (typeof(requirejs.config) !== typeof(Function))) {\r\n",
" var script = document.createElement(\"script\");\r\n",
" script.setAttribute(\"src\", \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js\");\r\n",
" script.onload = function(){\r\n",
" renderPlotly_8bb5a2975aad408f93159cbfc44d1157();\r\n",
" };\r\n",
" document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n",
"}\r\n",
"else {\r\n",
" renderPlotly_8bb5a2975aad408f93159cbfc44d1157();\r\n",
"}\r\n",
"</script></div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"string symbol=\"SPY\"; // we'll focus on SPY symbol\n",
"int warmup = 50; // we'll allow 50 bars to pass by with no trading - for warm-up\n",
"Yahoo_Feed bars = new(symbol,350); //collect bars of symbol from Yahoo feed\n",
"TSeries data = bars.Close; //we need just one average value - (Open+High+Low+CLose)/4\n",
"\n",
"//make a chart\n",
"var d = Chart2D.Chart.Candlestick<double, double, double, double, DateTime, string>(bars.Open.v.Skip(warmup).ToList(), bars.High.v.Skip(warmup).ToList(),\n",
"bars.Low.v.Skip(warmup).ToList(), bars.Close.v.Skip(warmup).ToList(), bars.Open.t.Skip(warmup).ToList(), symbol)\n",
" .WithSize(1200,400).WithMargin(Margin.init<int, int, int, int, int, bool>(30,10,40,30,1,false)).WithXAxisRangeSlider(RangeSlider.init(Visible:false)).WithTitle(symbol);\n",
"d"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div id=\"0c6f2d29-6b96-477e-9ea1-dcb79e3a5a25\"><!-- Plotly chart will be drawn inside this DIV --></div><script type=\"text/javascript\">\r\n",
"var renderPlotly_0c6f2d296b96477e9ea1dcb79e3a5a25 = function() {\r\n",
" var fsharpPlotlyRequire = requirejs.config({context:'fsharp-plotly',paths:{plotly:'https://cdn.plot.ly/plotly-2.18.1.min'}}) || require;\r\n",
" fsharpPlotlyRequire(['plotly'], function(Plotly) {\r\n",
" var data = [{\"type\":\"scatter\",\"name\":\"Fast MA\",\"mode\":\"lines\",\"x\":[\"2022-02-01T14:30:00\",\"2022-02-02T14:30:00\",\"2022-02-03T14:30:00\",\"2022-02-04T14:30:00\",\"2022-02-07T14:30:00\",\"2022-02-08T14:30:00\",\"2022-02-09T14:30:00\",\"2022-02-10T14:30:00\",\"2022-02-11T14:30:00\",\"2022-02-14T14:30:00\",\"2022-02-15T14:30:00\",\"2022-02-16T14:30:00\",\"2022-02-17T14:30:00\",\"2022-02-18T14:30:00\",\"2022-02-22T14:30:00\",\"2022-02-23T14:30:00\",\"2022-02-24T14:30:00\",\"2022-02-25T14:30:00\",\"2022-02-28T14:30:00\",\"2022-03-01T14:30:00\",\"2022-03-02T14:30:00\",\"2022-03-03T14:30:00\",\"2022-03-04T14:30:00\",\"2022-03-07T14:30:00\",\"2022-03-08T14:30:00\",\"2022-03-09T14:30:00\",\"2022-03-10T14:30:00\",\"2022-03-11T14:30:00\",\"2022-03-14T13:30:00\",\"2022-03-15T13:30:00\",\"2022-03-16T13:30:00\",\"2022-03-17T13:30:00\",\"2022-03-18T13:30:00\",\"2022-03-21T13:30:00\",\"2022-03-22T13:30:00\",\"2022-03-23T13:30:00\",\"2022-03-24T13:30:00\",\"2022-03-25T13:30:00\",\"2022-03-28T13:30:00\",\"2022-03-29T13:30:00\",\"2022-03-30T13:30:00\",\"2022-03-31T13:30:00\",\"2022-04-01T13:30:00\",\"2022-04-04T13:30:00\",\"2022-04-05T13:30:00\",\"2022-04-06T13:30:00\",\"2022-04-07T13:30:00\",\"2022-04-08T13:30:00\",\"2022-04-11T13:30:00\",\"2022-04-12T13:30:00\",\"2022-04-13T13:30:00\",\"2022-04-14T13:30:00\",\"2022-04-18T13:30:00\",\"2022-04-19T13:30:00\",\"2022-04-20T13:30:00\",\"2022-04-21T13:30:00\",\"2022-04-22T13:30:00\",\"2022-04-25T13:30:00\",\"2022-04-26T13:30:00\",\"2022-04-27T13:30:00\",\"2022-04-28T13:30:00\",\"2022-04-29T13:30:00\",\"2022-05-02T13:30:00\",\"2022-05-03T13:30:00\",\"2022-05-04T13:30:00\",\"2022-05-05T13:30:00\",\"2022-05-06T13:30:00\",\"2022-05-09T13:30:00\",\"2022-05-10T13:30:00\",\"2022-05-11T13:30:00\",\"2022-05-12T13:30:00\",\"2022-05-13T13:30:00\",\"2022-05-16T13:30:00\",\"2022-05-17T13:30:00\",\"2022-05-18T13:30:00\",\"2022-05-19T13:30:00\",\"2022-05-20T13:30:00\",\"2022-05-23T13:30:00\",\"2022-05-24T13:30:00\",\"2022-05-25T13:30:00\",\"2022-05-26T13:30:00\",\"2022-05-27T13:30:00\",\"2022-05-31T13:30:00\",\"2022-06-01T13:30:00\",\"2022-06-02T13:30:00\",\"2022-06-03T13:30:00\",\"2022-06-06T13:30:00\",\"2022-06-07T13:30:00\",\"2022-06-08T13:30:00\",\"2022-06-09T13:30:00\",\"2022-06-10T13:30:00\",\"2022-06-13T13:30:00\",\"2022-06-14T13:30:00\",\"2022-06-15T13:30:00\",\"2022-06-16T13:30:00\",\"2022-06-17T13:30:00\",\"2022-06-21T13:30:00\",\"2022-06-22T13:30:00\",\"2022-06-23T13:30:00\",\"2022-06-24T13:30:00\",\"2022-06-27T13:30:00\",\"2022-06-28T13:30:00\",\"2022-06-29T13:30:00\",\"2022-06-30T13:30:00\",\"2022-07-01T13:30:00\",\"2022-07-05T13:30:00\",\"2022-07-06T13:30:00\",\"2022-07-07T13:30:00\",\"2022-07-08T13:30:00\",\"2022-07-11T13:30:00\",\"2022-07-12T13:30:00\",\"2022-07-13T13:30:00\",\"2022-07-14T13:30:00\",\"2022-07-15T13:30:00\",\"2022-07-18T13:30:00\",\"2022-07-19T13:30:00\",\"2022-07-20T13:30:00\",\"2022-07-21T13:30:00\",\"2022-07-22T13:30:00\",\"2022-07-25T13:30:00\",\"2022-07-26T13:30:00\",\"2022-07-27T13:30:00\",\"2022-07-28T13:30:00\",\"2022-07-29T13:30:00\",\"2022-08-01T13:30:00\",\"2022-08-02T13:30:00\",\"2022-08-03T13:30:00\",\"2022-08-04T13:30:00\",\"2022-08-05T13:30:00\",\"2022-08-08T13:30:00\",\"2022-08-09T13:30:00\",\"2022-08-10T13:30:00\",\"2022-08-11T13:30:00\",\"2022-08-12T13:30:00\",\"2022-08-15T13:30:00\",\"2022-08-16T13:30:00\",\"2022-08-17T13:30:00\",\"2022-08-18T13:30:00\",\"2022-08-19T13:30:00\",\"2022-08-22T13:30:00\",\"2022-08-23T13:30:00\",\"2022-08-24T13:30:00\",\"2022-08-25T13:30:00\",\"2022-08-26T13:30:00\",\"2022-08-29T13:30:00\",\"2022-08-30T13:30:00\",\"2022-08-31T13:30:00\",\"2022-09-01T13:30:00\",\"2022-09-02T13:30:00\",\"2022-09-06T13:30:00\",\"2022-09-07T13:30:00\",\"2022-09-08T13:30:00\",\"2022-09-09T13:30:00\",\"2022-09-12T13:30:00\",\"2022-09-13T13:30:00\",\"2022-09-14T13:30:00\",\"2022-09-15T13:30:00\",\"2022-09-16T13:30:00\",\"2022-09-19T13:30:00\",\"2022-09-20T13:30:00\",\"2022-09-21T13:30:00\",\"2022-09-22T13:30:00\",\"2022-09-23T13:30:00\",\"2022-09-26T13:30:00\",\"2022-09-27T13:30:00\",\"2022-09-28T13:30:00\",\"2022-09-29T1
" var layout = {\"width\":1200,\"height\":400,\"template\":{\"layout\":{\"title\":{\"x\":0.05},\"font\":{\"color\":\"rgba(42, 63, 95, 1.0)\"},\"paper_bgcolor\":\"rgba(255, 255, 255, 1.0)\",\"plot_bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"autotypenumbers\":\"strict\",\"colorscale\":{\"diverging\":[[0.0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1.0,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0.0,\"ticks\":\"\"}},\"geo\":{\"showland\":true,\"landcolor\":\"rgba(229, 236, 246, 1.0)\",\"showlakes\":true,\"lakecolor\":\"rgba(255, 255, 255, 1.0)\",\"subunitcolor\":\"rgba(255, 255, 255, 1.0)\",\"bgcolor\":\"rgba(255, 255, 255, 1.0)\"},\"mapbox\":{\"style\":\"light\"},\"polar\":{\"bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"radialaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"},\"angularaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"yaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"zaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true}},\"ternary\":{\"aaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"baxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"caxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"bgcolor\":\"rgba(229, 236, 246, 1.0)\"},\"xaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"yaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"shapedefaults\":{\"line\":{\"color\":\"rgba(42, 63, 95, 1.0)\"}},\"colorway\":[\"rgba(99, 110, 250, 1.0)\",\"rgba(239, 85, 59, 1.0)\",\"rgba(0, 204, 150, 1.0)\",\"rgba(171, 99, 250, 1.0)\",\"rgba(255, 161, 90, 1.0)\",\"rgba(25, 211, 243, 1.0)\",\"rgba(255, 102, 146, 1.0)\",\"rgba(182, 232, 128, 1.0)\",\"rgba(255, 151, 255, 1.0)\",\"rgba(254, 203, 82, 1.0)\"]},\"data\":{\"bar\":[{\"marker\":{\"line\":{\"color\":\"rgba(229, 236, 246, 1.0)\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"s
" var config = {\"responsive\":true};\r\n",
" Plotly.newPlot('0c6f2d29-6b96-477e-9ea1-dcb79e3a5a25', data, layout, config);\r\n",
" });\r\n",
"};\r\n",
"if ((typeof(requirejs) !== typeof(Function)) || (typeof(requirejs.config) !== typeof(Function))) {\r\n",
" var script = document.createElement(\"script\");\r\n",
" script.setAttribute(\"src\", \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js\");\r\n",
" script.onload = function(){\r\n",
" renderPlotly_0c6f2d296b96477e9ea1dcb79e3a5a25();\r\n",
" };\r\n",
" document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n",
"}\r\n",
"else {\r\n",
" renderPlotly_0c6f2d296b96477e9ea1dcb79e3a5a25();\r\n",
"}\r\n",
"</script></div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"JMA_Series fastMA = new(data,12); //typically MACD uses EMA(12), but let's try with superior JMA(12)\n",
"JMA_Series slowMA = new(data,26); //likewise, let's use JMA(26) instead of EMA(26)\n",
"\n",
"//make a chart\n",
"var cfast = Chart2D.Chart.Line<DateTime,double,bool>(fastMA.t.Skip(warmup).ToList(), fastMA.v.Skip(warmup).ToList(), false, \"Fast MA\").WithLineStyle(Width: 2, Color: Color.fromString(\"blue\"));\n",
"var cslow = Chart2D.Chart.Line<DateTime,double,bool>(slowMA.t.Skip(warmup).ToList(), slowMA.v.Skip(warmup).ToList(), false, \"Slow MA\").WithLineStyle(Width: 2, Color: Color.fromString(\"red\"));\n",
"var chart = Chart.Combine(new []{cfast,cslow}).WithSize(1200,400).WithMargin(Margin.init<int, int, int, int, int, bool>(30,10,40,30,1,false))\n",
" .WithXAxisRangeSlider(RangeSlider.init(Visible:false)).WithTitle($\"slow MA and fast MA of {symbol} OHLC4\");\n",
"chart"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div id=\"18dec751-7e2f-4979-be4a-6ac3fc553df2\"><!-- Plotly chart will be drawn inside this DIV --></div><script type=\"text/javascript\">\r\n",
"var renderPlotly_18dec7517e2f4979be4a6ac3fc553df2 = function() {\r\n",
" var fsharpPlotlyRequire = requirejs.config({context:'fsharp-plotly',paths:{plotly:'https://cdn.plot.ly/plotly-2.18.1.min'}}) || require;\r\n",
" fsharpPlotlyRequire(['plotly'], function(Plotly) {\r\n",
" var data = [{\"type\":\"scatter\",\"name\":\"MACD\",\"mode\":\"lines\",\"x\":[\"2022-02-01T14:30:00\",\"2022-02-02T14:30:00\",\"2022-02-03T14:30:00\",\"2022-02-04T14:30:00\",\"2022-02-07T14:30:00\",\"2022-02-08T14:30:00\",\"2022-02-09T14:30:00\",\"2022-02-10T14:30:00\",\"2022-02-11T14:30:00\",\"2022-02-14T14:30:00\",\"2022-02-15T14:30:00\",\"2022-02-16T14:30:00\",\"2022-02-17T14:30:00\",\"2022-02-18T14:30:00\",\"2022-02-22T14:30:00\",\"2022-02-23T14:30:00\",\"2022-02-24T14:30:00\",\"2022-02-25T14:30:00\",\"2022-02-28T14:30:00\",\"2022-03-01T14:30:00\",\"2022-03-02T14:30:00\",\"2022-03-03T14:30:00\",\"2022-03-04T14:30:00\",\"2022-03-07T14:30:00\",\"2022-03-08T14:30:00\",\"2022-03-09T14:30:00\",\"2022-03-10T14:30:00\",\"2022-03-11T14:30:00\",\"2022-03-14T13:30:00\",\"2022-03-15T13:30:00\",\"2022-03-16T13:30:00\",\"2022-03-17T13:30:00\",\"2022-03-18T13:30:00\",\"2022-03-21T13:30:00\",\"2022-03-22T13:30:00\",\"2022-03-23T13:30:00\",\"2022-03-24T13:30:00\",\"2022-03-25T13:30:00\",\"2022-03-28T13:30:00\",\"2022-03-29T13:30:00\",\"2022-03-30T13:30:00\",\"2022-03-31T13:30:00\",\"2022-04-01T13:30:00\",\"2022-04-04T13:30:00\",\"2022-04-05T13:30:00\",\"2022-04-06T13:30:00\",\"2022-04-07T13:30:00\",\"2022-04-08T13:30:00\",\"2022-04-11T13:30:00\",\"2022-04-12T13:30:00\",\"2022-04-13T13:30:00\",\"2022-04-14T13:30:00\",\"2022-04-18T13:30:00\",\"2022-04-19T13:30:00\",\"2022-04-20T13:30:00\",\"2022-04-21T13:30:00\",\"2022-04-22T13:30:00\",\"2022-04-25T13:30:00\",\"2022-04-26T13:30:00\",\"2022-04-27T13:30:00\",\"2022-04-28T13:30:00\",\"2022-04-29T13:30:00\",\"2022-05-02T13:30:00\",\"2022-05-03T13:30:00\",\"2022-05-04T13:30:00\",\"2022-05-05T13:30:00\",\"2022-05-06T13:30:00\",\"2022-05-09T13:30:00\",\"2022-05-10T13:30:00\",\"2022-05-11T13:30:00\",\"2022-05-12T13:30:00\",\"2022-05-13T13:30:00\",\"2022-05-16T13:30:00\",\"2022-05-17T13:30:00\",\"2022-05-18T13:30:00\",\"2022-05-19T13:30:00\",\"2022-05-20T13:30:00\",\"2022-05-23T13:30:00\",\"2022-05-24T13:30:00\",\"2022-05-25T13:30:00\",\"2022-05-26T13:30:00\",\"2022-05-27T13:30:00\",\"2022-05-31T13:30:00\",\"2022-06-01T13:30:00\",\"2022-06-02T13:30:00\",\"2022-06-03T13:30:00\",\"2022-06-06T13:30:00\",\"2022-06-07T13:30:00\",\"2022-06-08T13:30:00\",\"2022-06-09T13:30:00\",\"2022-06-10T13:30:00\",\"2022-06-13T13:30:00\",\"2022-06-14T13:30:00\",\"2022-06-15T13:30:00\",\"2022-06-16T13:30:00\",\"2022-06-17T13:30:00\",\"2022-06-21T13:30:00\",\"2022-06-22T13:30:00\",\"2022-06-23T13:30:00\",\"2022-06-24T13:30:00\",\"2022-06-27T13:30:00\",\"2022-06-28T13:30:00\",\"2022-06-29T13:30:00\",\"2022-06-30T13:30:00\",\"2022-07-01T13:30:00\",\"2022-07-05T13:30:00\",\"2022-07-06T13:30:00\",\"2022-07-07T13:30:00\",\"2022-07-08T13:30:00\",\"2022-07-11T13:30:00\",\"2022-07-12T13:30:00\",\"2022-07-13T13:30:00\",\"2022-07-14T13:30:00\",\"2022-07-15T13:30:00\",\"2022-07-18T13:30:00\",\"2022-07-19T13:30:00\",\"2022-07-20T13:30:00\",\"2022-07-21T13:30:00\",\"2022-07-22T13:30:00\",\"2022-07-25T13:30:00\",\"2022-07-26T13:30:00\",\"2022-07-27T13:30:00\",\"2022-07-28T13:30:00\",\"2022-07-29T13:30:00\",\"2022-08-01T13:30:00\",\"2022-08-02T13:30:00\",\"2022-08-03T13:30:00\",\"2022-08-04T13:30:00\",\"2022-08-05T13:30:00\",\"2022-08-08T13:30:00\",\"2022-08-09T13:30:00\",\"2022-08-10T13:30:00\",\"2022-08-11T13:30:00\",\"2022-08-12T13:30:00\",\"2022-08-15T13:30:00\",\"2022-08-16T13:30:00\",\"2022-08-17T13:30:00\",\"2022-08-18T13:30:00\",\"2022-08-19T13:30:00\",\"2022-08-22T13:30:00\",\"2022-08-23T13:30:00\",\"2022-08-24T13:30:00\",\"2022-08-25T13:30:00\",\"2022-08-26T13:30:00\",\"2022-08-29T13:30:00\",\"2022-08-30T13:30:00\",\"2022-08-31T13:30:00\",\"2022-09-01T13:30:00\",\"2022-09-02T13:30:00\",\"2022-09-06T13:30:00\",\"2022-09-07T13:30:00\",\"2022-09-08T13:30:00\",\"2022-09-09T13:30:00\",\"2022-09-12T13:30:00\",\"2022-09-13T13:30:00\",\"2022-09-14T13:30:00\",\"2022-09-15T13:30:00\",\"2022-09-16T13:30:00\",\"2022-09-19T13:30:00\",\"2022-09-20T13:30:00\",\"2022-09-21T13:30:00\",\"2022-09-22T13:30:00\",\"2022-09-23T13:30:00\",\"2022-09-26T13:30:00\",\"2022-09-27T13:30:00\",\"2022-09-28T13:30:00\",\"2022-09-29T13:3
" var layout = {\"width\":1200,\"height\":400,\"template\":{\"layout\":{\"title\":{\"x\":0.05},\"font\":{\"color\":\"rgba(42, 63, 95, 1.0)\"},\"paper_bgcolor\":\"rgba(255, 255, 255, 1.0)\",\"plot_bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"autotypenumbers\":\"strict\",\"colorscale\":{\"diverging\":[[0.0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1.0,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0.0,\"ticks\":\"\"}},\"geo\":{\"showland\":true,\"landcolor\":\"rgba(229, 236, 246, 1.0)\",\"showlakes\":true,\"lakecolor\":\"rgba(255, 255, 255, 1.0)\",\"subunitcolor\":\"rgba(255, 255, 255, 1.0)\",\"bgcolor\":\"rgba(255, 255, 255, 1.0)\"},\"mapbox\":{\"style\":\"light\"},\"polar\":{\"bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"radialaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"},\"angularaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"yaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"zaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true}},\"ternary\":{\"aaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"baxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"caxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"bgcolor\":\"rgba(229, 236, 246, 1.0)\"},\"xaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"yaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"shapedefaults\":{\"line\":{\"color\":\"rgba(42, 63, 95, 1.0)\"}},\"colorway\":[\"rgba(99, 110, 250, 1.0)\",\"rgba(239, 85, 59, 1.0)\",\"rgba(0, 204, 150, 1.0)\",\"rgba(171, 99, 250, 1.0)\",\"rgba(255, 161, 90, 1.0)\",\"rgba(25, 211, 243, 1.0)\",\"rgba(255, 102, 146, 1.0)\",\"rgba(182, 232, 128, 1.0)\",\"rgba(255, 151, 255, 1.0)\",\"rgba(254, 203, 82, 1.0)\"]},\"data\":{\"bar\":[{\"marker\":{\"line\":{\"color\":\"rgba(229, 236, 246, 1.0)\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"s
" var config = {\"responsive\":true};\r\n",
" Plotly.newPlot('18dec751-7e2f-4979-be4a-6ac3fc553df2', data, layout, config);\r\n",
" });\r\n",
"};\r\n",
"if ((typeof(requirejs) !== typeof(Function)) || (typeof(requirejs.config) !== typeof(Function))) {\r\n",
" var script = document.createElement(\"script\");\r\n",
" script.setAttribute(\"src\", \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js\");\r\n",
" script.onload = function(){\r\n",
" renderPlotly_18dec7517e2f4979be4a6ac3fc553df2();\r\n",
" };\r\n",
" document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n",
"}\r\n",
"else {\r\n",
" renderPlotly_18dec7517e2f4979be4a6ac3fc553df2();\r\n",
"}\r\n",
"</script></div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"SUB_Series MACD_line = new(fastMA, slowMA); //MACD line is just a SUBtraction fastMA-slowMA\n",
"JMA_Series signal_line = new(MACD_line, 9); //signal line is an EMA(9) of MACD; we use superior JMA(9) instead\n",
"\n",
"//make a chart\n",
"var cfast = Chart2D.Chart.Line<DateTime,double,bool>(MACD_line.t.Skip(warmup).ToList(), MACD_line.v.Skip(warmup).ToList(), false, \"MACD\").WithLineStyle(Width: 2, Color: Color.fromString(\"orange\"));\n",
"var cslow = Chart2D.Chart.Line<DateTime,double,bool>(signal_line.t.Skip(warmup).ToList(), signal_line.v.Skip(warmup).ToList(), false, \"signal\").WithLineStyle(Width: 2, Color: Color.fromString(\"green\"));\n",
"var chart = Chart.Combine(new []{cfast,cslow}).WithSize(1200,400).WithMargin(Margin.init<int, int, int, int, int, bool>(30,10,40,30,1,false))\n",
" .WithXAxisRangeSlider(RangeSlider.init(Visible:false)).WithTitle($\"MACD line and signal line of fastMA-slowMA\");\n",
"chart"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div id=\"43537bfa-dd33-422b-acac-cb6ccdd8f5ce\"><!-- Plotly chart will be drawn inside this DIV --></div><script type=\"text/javascript\">\r\n",
"var renderPlotly_43537bfadd33422bacaccb6ccdd8f5ce = function() {\r\n",
" var fsharpPlotlyRequire = requirejs.config({context:'fsharp-plotly',paths:{plotly:'https://cdn.plot.ly/plotly-2.18.1.min'}}) || require;\r\n",
" fsharpPlotlyRequire(['plotly'], function(Plotly) {\r\n",
" var data = [{\"type\":\"bar\",\"x\":[\"2022-02-01T14:30:00\",\"2022-02-02T14:30:00\",\"2022-02-03T14:30:00\",\"2022-02-04T14:30:00\",\"2022-02-07T14:30:00\",\"2022-02-08T14:30:00\",\"2022-02-09T14:30:00\",\"2022-02-10T14:30:00\",\"2022-02-11T14:30:00\",\"2022-02-14T14:30:00\",\"2022-02-15T14:30:00\",\"2022-02-16T14:30:00\",\"2022-02-17T14:30:00\",\"2022-02-18T14:30:00\",\"2022-02-22T14:30:00\",\"2022-02-23T14:30:00\",\"2022-02-24T14:30:00\",\"2022-02-25T14:30:00\",\"2022-02-28T14:30:00\",\"2022-03-01T14:30:00\",\"2022-03-02T14:30:00\",\"2022-03-03T14:30:00\",\"2022-03-04T14:30:00\",\"2022-03-07T14:30:00\",\"2022-03-08T14:30:00\",\"2022-03-09T14:30:00\",\"2022-03-10T14:30:00\",\"2022-03-11T14:30:00\",\"2022-03-14T13:30:00\",\"2022-03-15T13:30:00\",\"2022-03-16T13:30:00\",\"2022-03-17T13:30:00\",\"2022-03-18T13:30:00\",\"2022-03-21T13:30:00\",\"2022-03-22T13:30:00\",\"2022-03-23T13:30:00\",\"2022-03-24T13:30:00\",\"2022-03-25T13:30:00\",\"2022-03-28T13:30:00\",\"2022-03-29T13:30:00\",\"2022-03-30T13:30:00\",\"2022-03-31T13:30:00\",\"2022-04-01T13:30:00\",\"2022-04-04T13:30:00\",\"2022-04-05T13:30:00\",\"2022-04-06T13:30:00\",\"2022-04-07T13:30:00\",\"2022-04-08T13:30:00\",\"2022-04-11T13:30:00\",\"2022-04-12T13:30:00\",\"2022-04-13T13:30:00\",\"2022-04-14T13:30:00\",\"2022-04-18T13:30:00\",\"2022-04-19T13:30:00\",\"2022-04-20T13:30:00\",\"2022-04-21T13:30:00\",\"2022-04-22T13:30:00\",\"2022-04-25T13:30:00\",\"2022-04-26T13:30:00\",\"2022-04-27T13:30:00\",\"2022-04-28T13:30:00\",\"2022-04-29T13:30:00\",\"2022-05-02T13:30:00\",\"2022-05-03T13:30:00\",\"2022-05-04T13:30:00\",\"2022-05-05T13:30:00\",\"2022-05-06T13:30:00\",\"2022-05-09T13:30:00\",\"2022-05-10T13:30:00\",\"2022-05-11T13:30:00\",\"2022-05-12T13:30:00\",\"2022-05-13T13:30:00\",\"2022-05-16T13:30:00\",\"2022-05-17T13:30:00\",\"2022-05-18T13:30:00\",\"2022-05-19T13:30:00\",\"2022-05-20T13:30:00\",\"2022-05-23T13:30:00\",\"2022-05-24T13:30:00\",\"2022-05-25T13:30:00\",\"2022-05-26T13:30:00\",\"2022-05-27T13:30:00\",\"2022-05-31T13:30:00\",\"2022-06-01T13:30:00\",\"2022-06-02T13:30:00\",\"2022-06-03T13:30:00\",\"2022-06-06T13:30:00\",\"2022-06-07T13:30:00\",\"2022-06-08T13:30:00\",\"2022-06-09T13:30:00\",\"2022-06-10T13:30:00\",\"2022-06-13T13:30:00\",\"2022-06-14T13:30:00\",\"2022-06-15T13:30:00\",\"2022-06-16T13:30:00\",\"2022-06-17T13:30:00\",\"2022-06-21T13:30:00\",\"2022-06-22T13:30:00\",\"2022-06-23T13:30:00\",\"2022-06-24T13:30:00\",\"2022-06-27T13:30:00\",\"2022-06-28T13:30:00\",\"2022-06-29T13:30:00\",\"2022-06-30T13:30:00\",\"2022-07-01T13:30:00\",\"2022-07-05T13:30:00\",\"2022-07-06T13:30:00\",\"2022-07-07T13:30:00\",\"2022-07-08T13:30:00\",\"2022-07-11T13:30:00\",\"2022-07-12T13:30:00\",\"2022-07-13T13:30:00\",\"2022-07-14T13:30:00\",\"2022-07-15T13:30:00\",\"2022-07-18T13:30:00\",\"2022-07-19T13:30:00\",\"2022-07-20T13:30:00\",\"2022-07-21T13:30:00\",\"2022-07-22T13:30:00\",\"2022-07-25T13:30:00\",\"2022-07-26T13:30:00\",\"2022-07-27T13:30:00\",\"2022-07-28T13:30:00\",\"2022-07-29T13:30:00\",\"2022-08-01T13:30:00\",\"2022-08-02T13:30:00\",\"2022-08-03T13:30:00\",\"2022-08-04T13:30:00\",\"2022-08-05T13:30:00\",\"2022-08-08T13:30:00\",\"2022-08-09T13:30:00\",\"2022-08-10T13:30:00\",\"2022-08-11T13:30:00\",\"2022-08-12T13:30:00\",\"2022-08-15T13:30:00\",\"2022-08-16T13:30:00\",\"2022-08-17T13:30:00\",\"2022-08-18T13:30:00\",\"2022-08-19T13:30:00\",\"2022-08-22T13:30:00\",\"2022-08-23T13:30:00\",\"2022-08-24T13:30:00\",\"2022-08-25T13:30:00\",\"2022-08-26T13:30:00\",\"2022-08-29T13:30:00\",\"2022-08-30T13:30:00\",\"2022-08-31T13:30:00\",\"2022-09-01T13:30:00\",\"2022-09-02T13:30:00\",\"2022-09-06T13:30:00\",\"2022-09-07T13:30:00\",\"2022-09-08T13:30:00\",\"2022-09-09T13:30:00\",\"2022-09-12T13:30:00\",\"2022-09-13T13:30:00\",\"2022-09-14T13:30:00\",\"2022-09-15T13:30:00\",\"2022-09-16T13:30:00\",\"2022-09-19T13:30:00\",\"2022-09-20T13:30:00\",\"2022-09-21T13:30:00\",\"2022-09-22T13:30:00\",\"2022-09-23T13:30:00\",\"2022-09-26T13:30:00\",\"2022-09-27T13:30:00\",\"2022-09-28T13:30:00\",\"2022-09-29T13:30:00\",\"2022-09-30T13:30:00\",\"2022-10-
" var layout = {\"width\":1200,\"height\":400,\"template\":{\"layout\":{\"title\":{\"x\":0.05},\"font\":{\"color\":\"rgba(42, 63, 95, 1.0)\"},\"paper_bgcolor\":\"rgba(255, 255, 255, 1.0)\",\"plot_bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"autotypenumbers\":\"strict\",\"colorscale\":{\"diverging\":[[0.0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1.0,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0.0,\"ticks\":\"\"}},\"geo\":{\"showland\":true,\"landcolor\":\"rgba(229, 236, 246, 1.0)\",\"showlakes\":true,\"lakecolor\":\"rgba(255, 255, 255, 1.0)\",\"subunitcolor\":\"rgba(255, 255, 255, 1.0)\",\"bgcolor\":\"rgba(255, 255, 255, 1.0)\"},\"mapbox\":{\"style\":\"light\"},\"polar\":{\"bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"radialaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"},\"angularaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"yaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"zaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true}},\"ternary\":{\"aaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"baxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"caxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"bgcolor\":\"rgba(229, 236, 246, 1.0)\"},\"xaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"yaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"shapedefaults\":{\"line\":{\"color\":\"rgba(42, 63, 95, 1.0)\"}},\"colorway\":[\"rgba(99, 110, 250, 1.0)\",\"rgba(239, 85, 59, 1.0)\",\"rgba(0, 204, 150, 1.0)\",\"rgba(171, 99, 250, 1.0)\",\"rgba(255, 161, 90, 1.0)\",\"rgba(25, 211, 243, 1.0)\",\"rgba(255, 102, 146, 1.0)\",\"rgba(182, 232, 128, 1.0)\",\"rgba(255, 151, 255, 1.0)\",\"rgba(254, 203, 82, 1.0)\"]},\"data\":{\"bar\":[{\"marker\":{\"line\":{\"color\":\"rgba(229, 236, 246, 1.0)\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"s
" var config = {\"responsive\":true};\r\n",
" Plotly.newPlot('43537bfa-dd33-422b-acac-cb6ccdd8f5ce', data, layout, config);\r\n",
" });\r\n",
"};\r\n",
"if ((typeof(requirejs) !== typeof(Function)) || (typeof(requirejs.config) !== typeof(Function))) {\r\n",
" var script = document.createElement(\"script\");\r\n",
" script.setAttribute(\"src\", \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js\");\r\n",
" script.onload = function(){\r\n",
" renderPlotly_43537bfadd33422bacaccb6ccdd8f5ce();\r\n",
" };\r\n",
" document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n",
"}\r\n",
"else {\r\n",
" renderPlotly_43537bfadd33422bacaccb6ccdd8f5ce();\r\n",
"}\r\n",
"</script></div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"SUB_Series histogram = new(MACD_line, signal_line); //MACD histogram is an oscillator of MACD-signal\n",
"\n",
"//make a chart\n",
"var cfast = Chart2D.Chart.Column<double, DateTime, bool,bool,bool>(values: histogram.v.Skip(warmup).ToList(), Keys: histogram.t.Skip(warmup).ToList())\n",
".WithSize(1200,400).WithMargin(Margin.init<int, int, int, int, int, bool>(30,10,40,30,1,false)).WithXAxisRangeSlider(RangeSlider.init(Visible:false))\n",
".WithTitle(\"MACD histogram of MACD-signal\");\n",
"cfast"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div id=\"7b3fa6cd-1591-4d06-9d28-bc9918d0a545\"><!-- Plotly chart will be drawn inside this DIV --></div><script type=\"text/javascript\">\r\n",
"var renderPlotly_7b3fa6cd15914d069d28bc9918d0a545 = function() {\r\n",
" var fsharpPlotlyRequire = requirejs.config({context:'fsharp-plotly',paths:{plotly:'https://cdn.plot.ly/plotly-2.18.1.min'}}) || require;\r\n",
" fsharpPlotlyRequire(['plotly'], function(Plotly) {\r\n",
" var data = [{\"type\":\"scatter\",\"name\":\"state\",\"mode\":\"lines\",\"x\":[\"2022-02-01T14:30:00\",\"2022-02-02T14:30:00\",\"2022-02-03T14:30:00\",\"2022-02-04T14:30:00\",\"2022-02-07T14:30:00\",\"2022-02-08T14:30:00\",\"2022-02-09T14:30:00\",\"2022-02-10T14:30:00\",\"2022-02-11T14:30:00\",\"2022-02-14T14:30:00\",\"2022-02-15T14:30:00\",\"2022-02-16T14:30:00\",\"2022-02-17T14:30:00\",\"2022-02-18T14:30:00\",\"2022-02-22T14:30:00\",\"2022-02-23T14:30:00\",\"2022-02-24T14:30:00\",\"2022-02-25T14:30:00\",\"2022-02-28T14:30:00\",\"2022-03-01T14:30:00\",\"2022-03-02T14:30:00\",\"2022-03-03T14:30:00\",\"2022-03-04T14:30:00\",\"2022-03-07T14:30:00\",\"2022-03-08T14:30:00\",\"2022-03-09T14:30:00\",\"2022-03-10T14:30:00\",\"2022-03-11T14:30:00\",\"2022-03-14T13:30:00\",\"2022-03-15T13:30:00\",\"2022-03-16T13:30:00\",\"2022-03-17T13:30:00\",\"2022-03-18T13:30:00\",\"2022-03-21T13:30:00\",\"2022-03-22T13:30:00\",\"2022-03-23T13:30:00\",\"2022-03-24T13:30:00\",\"2022-03-25T13:30:00\",\"2022-03-28T13:30:00\",\"2022-03-29T13:30:00\",\"2022-03-30T13:30:00\",\"2022-03-31T13:30:00\",\"2022-04-01T13:30:00\",\"2022-04-04T13:30:00\",\"2022-04-05T13:30:00\",\"2022-04-06T13:30:00\",\"2022-04-07T13:30:00\",\"2022-04-08T13:30:00\",\"2022-04-11T13:30:00\",\"2022-04-12T13:30:00\",\"2022-04-13T13:30:00\",\"2022-04-14T13:30:00\",\"2022-04-18T13:30:00\",\"2022-04-19T13:30:00\",\"2022-04-20T13:30:00\",\"2022-04-21T13:30:00\",\"2022-04-22T13:30:00\",\"2022-04-25T13:30:00\",\"2022-04-26T13:30:00\",\"2022-04-27T13:30:00\",\"2022-04-28T13:30:00\",\"2022-04-29T13:30:00\",\"2022-05-02T13:30:00\",\"2022-05-03T13:30:00\",\"2022-05-04T13:30:00\",\"2022-05-05T13:30:00\",\"2022-05-06T13:30:00\",\"2022-05-09T13:30:00\",\"2022-05-10T13:30:00\",\"2022-05-11T13:30:00\",\"2022-05-12T13:30:00\",\"2022-05-13T13:30:00\",\"2022-05-16T13:30:00\",\"2022-05-17T13:30:00\",\"2022-05-18T13:30:00\",\"2022-05-19T13:30:00\",\"2022-05-20T13:30:00\",\"2022-05-23T13:30:00\",\"2022-05-24T13:30:00\",\"2022-05-25T13:30:00\",\"2022-05-26T13:30:00\",\"2022-05-27T13:30:00\",\"2022-05-31T13:30:00\",\"2022-06-01T13:30:00\",\"2022-06-02T13:30:00\",\"2022-06-03T13:30:00\",\"2022-06-06T13:30:00\",\"2022-06-07T13:30:00\",\"2022-06-08T13:30:00\",\"2022-06-09T13:30:00\",\"2022-06-10T13:30:00\",\"2022-06-13T13:30:00\",\"2022-06-14T13:30:00\",\"2022-06-15T13:30:00\",\"2022-06-16T13:30:00\",\"2022-06-17T13:30:00\",\"2022-06-21T13:30:00\",\"2022-06-22T13:30:00\",\"2022-06-23T13:30:00\",\"2022-06-24T13:30:00\",\"2022-06-27T13:30:00\",\"2022-06-28T13:30:00\",\"2022-06-29T13:30:00\",\"2022-06-30T13:30:00\",\"2022-07-01T13:30:00\",\"2022-07-05T13:30:00\",\"2022-07-06T13:30:00\",\"2022-07-07T13:30:00\",\"2022-07-08T13:30:00\",\"2022-07-11T13:30:00\",\"2022-07-12T13:30:00\",\"2022-07-13T13:30:00\",\"2022-07-14T13:30:00\",\"2022-07-15T13:30:00\",\"2022-07-18T13:30:00\",\"2022-07-19T13:30:00\",\"2022-07-20T13:30:00\",\"2022-07-21T13:30:00\",\"2022-07-22T13:30:00\",\"2022-07-25T13:30:00\",\"2022-07-26T13:30:00\",\"2022-07-27T13:30:00\",\"2022-07-28T13:30:00\",\"2022-07-29T13:30:00\",\"2022-08-01T13:30:00\",\"2022-08-02T13:30:00\",\"2022-08-03T13:30:00\",\"2022-08-04T13:30:00\",\"2022-08-05T13:30:00\",\"2022-08-08T13:30:00\",\"2022-08-09T13:30:00\",\"2022-08-10T13:30:00\",\"2022-08-11T13:30:00\",\"2022-08-12T13:30:00\",\"2022-08-15T13:30:00\",\"2022-08-16T13:30:00\",\"2022-08-17T13:30:00\",\"2022-08-18T13:30:00\",\"2022-08-19T13:30:00\",\"2022-08-22T13:30:00\",\"2022-08-23T13:30:00\",\"2022-08-24T13:30:00\",\"2022-08-25T13:30:00\",\"2022-08-26T13:30:00\",\"2022-08-29T13:30:00\",\"2022-08-30T13:30:00\",\"2022-08-31T13:30:00\",\"2022-09-01T13:30:00\",\"2022-09-02T13:30:00\",\"2022-09-06T13:30:00\",\"2022-09-07T13:30:00\",\"2022-09-08T13:30:00\",\"2022-09-09T13:30:00\",\"2022-09-12T13:30:00\",\"2022-09-13T13:30:00\",\"2022-09-14T13:30:00\",\"2022-09-15T13:30:00\",\"2022-09-16T13:30:00\",\"2022-09-19T13:30:00\",\"2022-09-20T13:30:00\",\"2022-09-21T13:30:00\",\"2022-09-22T13:30:00\",\"2022-09-23T13:30:00\",\"2022-09-26T13:30:00\",\"2022-09-27T13:30:00\",\"2022-09-28T13:30:00\",\"2022-09-29T13:
" var layout = {\"width\":1200,\"height\":400,\"template\":{\"layout\":{\"title\":{\"x\":0.05},\"font\":{\"color\":\"rgba(42, 63, 95, 1.0)\"},\"paper_bgcolor\":\"rgba(255, 255, 255, 1.0)\",\"plot_bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"autotypenumbers\":\"strict\",\"colorscale\":{\"diverging\":[[0.0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1.0,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0.0,\"ticks\":\"\"}},\"geo\":{\"showland\":true,\"landcolor\":\"rgba(229, 236, 246, 1.0)\",\"showlakes\":true,\"lakecolor\":\"rgba(255, 255, 255, 1.0)\",\"subunitcolor\":\"rgba(255, 255, 255, 1.0)\",\"bgcolor\":\"rgba(255, 255, 255, 1.0)\"},\"mapbox\":{\"style\":\"light\"},\"polar\":{\"bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"radialaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"},\"angularaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"yaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"zaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true}},\"ternary\":{\"aaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"baxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"caxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"bgcolor\":\"rgba(229, 236, 246, 1.0)\"},\"xaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"yaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"shapedefaults\":{\"line\":{\"color\":\"rgba(42, 63, 95, 1.0)\"}},\"colorway\":[\"rgba(99, 110, 250, 1.0)\",\"rgba(239, 85, 59, 1.0)\",\"rgba(0, 204, 150, 1.0)\",\"rgba(171, 99, 250, 1.0)\",\"rgba(255, 161, 90, 1.0)\",\"rgba(25, 211, 243, 1.0)\",\"rgba(255, 102, 146, 1.0)\",\"rgba(182, 232, 128, 1.0)\",\"rgba(255, 151, 255, 1.0)\",\"rgba(254, 203, 82, 1.0)\"]},\"data\":{\"bar\":[{\"marker\":{\"line\":{\"color\":\"rgba(229, 236, 246, 1.0)\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"s
" var config = {\"responsive\":true};\r\n",
" Plotly.newPlot('7b3fa6cd-1591-4d06-9d28-bc9918d0a545', data, layout, config);\r\n",
" });\r\n",
"};\r\n",
"if ((typeof(requirejs) !== typeof(Function)) || (typeof(requirejs.config) !== typeof(Function))) {\r\n",
" var script = document.createElement(\"script\");\r\n",
" script.setAttribute(\"src\", \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js\");\r\n",
" script.onload = function(){\r\n",
" renderPlotly_7b3fa6cd15914d069d28bc9918d0a545();\r\n",
" };\r\n",
" document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n",
"}\r\n",
"else {\r\n",
" renderPlotly_7b3fa6cd15914d069d28bc9918d0a545();\r\n",
"}\r\n",
"</script></div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"COMPARE_Series over = new(histogram,0); //generate over/under series when histogram is above/below zero\n",
"CROSS_Series trades = new(histogram,0); //generate a signal series where histogram crosses zero (from below and from above)\n",
"\n",
"//make a chart\n",
"var cover = Chart2D.Chart.Line<DateTime,double,bool>(over.t.Skip(warmup).ToList(),over.v.Skip(warmup).ToList(),false,\"state\").WithLineStyle(Width: 1, Color: Color.fromString(\"blue\"));\n",
"var cbars = Chart2D.Chart.Area<DateTime, double,bool>(trades.t.Skip(warmup).ToList(), trades.v.Skip(warmup).ToList(),false );\n",
"var chart = Chart.Combine(new []{cover,cbars}).WithSize(1200,400).WithMargin(Margin.init<int, int, int, int, int, bool>(30,10,40,30,1,false))\n",
" .WithXAxisRangeSlider(RangeSlider.init(Visible:false)).WithTitle(\"in-market signal and trading orders based on MACD histogram\");\n",
"chart"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div><div id=\"2eb1687f-6e83-44a4-ab2e-aaa8de02052f\"><!-- Plotly chart will be drawn inside this DIV --></div><script type=\"text/javascript\">\r\n",
"var renderPlotly_2eb1687f6e8344a4ab2eaaa8de02052f = function() {\r\n",
" var fsharpPlotlyRequire = requirejs.config({context:'fsharp-plotly',paths:{plotly:'https://cdn.plot.ly/plotly-2.18.1.min'}}) || require;\r\n",
" fsharpPlotlyRequire(['plotly'], function(Plotly) {\r\n",
" var data = [{\"type\":\"scatter\",\"mode\":\"lines\",\"x\":[\"2022-02-01T14:30:00\",\"2022-02-02T14:30:00\",\"2022-02-03T14:30:00\",\"2022-02-04T14:30:00\",\"2022-02-07T14:30:00\",\"2022-02-08T14:30:00\",\"2022-02-09T14:30:00\",\"2022-02-10T14:30:00\",\"2022-02-11T14:30:00\",\"2022-02-14T14:30:00\",\"2022-02-15T14:30:00\",\"2022-02-16T14:30:00\",\"2022-02-17T14:30:00\",\"2022-02-18T14:30:00\",\"2022-02-22T14:30:00\",\"2022-02-23T14:30:00\",\"2022-02-24T14:30:00\",\"2022-02-25T14:30:00\",\"2022-02-28T14:30:00\",\"2022-03-01T14:30:00\",\"2022-03-02T14:30:00\",\"2022-03-03T14:30:00\",\"2022-03-04T14:30:00\",\"2022-03-07T14:30:00\",\"2022-03-08T14:30:00\",\"2022-03-09T14:30:00\",\"2022-03-10T14:30:00\",\"2022-03-11T14:30:00\",\"2022-03-14T13:30:00\",\"2022-03-15T13:30:00\",\"2022-03-16T13:30:00\",\"2022-03-17T13:30:00\",\"2022-03-18T13:30:00\",\"2022-03-21T13:30:00\",\"2022-03-22T13:30:00\",\"2022-03-23T13:30:00\",\"2022-03-24T13:30:00\",\"2022-03-25T13:30:00\",\"2022-03-28T13:30:00\",\"2022-03-29T13:30:00\",\"2022-03-30T13:30:00\",\"2022-03-31T13:30:00\",\"2022-04-01T13:30:00\",\"2022-04-04T13:30:00\",\"2022-04-05T13:30:00\",\"2022-04-06T13:30:00\",\"2022-04-07T13:30:00\",\"2022-04-08T13:30:00\",\"2022-04-11T13:30:00\",\"2022-04-12T13:30:00\",\"2022-04-13T13:30:00\",\"2022-04-14T13:30:00\",\"2022-04-18T13:30:00\",\"2022-04-19T13:30:00\",\"2022-04-20T13:30:00\",\"2022-04-21T13:30:00\",\"2022-04-22T13:30:00\",\"2022-04-25T13:30:00\",\"2022-04-26T13:30:00\",\"2022-04-27T13:30:00\",\"2022-04-28T13:30:00\",\"2022-04-29T13:30:00\",\"2022-05-02T13:30:00\",\"2022-05-03T13:30:00\",\"2022-05-04T13:30:00\",\"2022-05-05T13:30:00\",\"2022-05-06T13:30:00\",\"2022-05-09T13:30:00\",\"2022-05-10T13:30:00\",\"2022-05-11T13:30:00\",\"2022-05-12T13:30:00\",\"2022-05-13T13:30:00\",\"2022-05-16T13:30:00\",\"2022-05-17T13:30:00\",\"2022-05-18T13:30:00\",\"2022-05-19T13:30:00\",\"2022-05-20T13:30:00\",\"2022-05-23T13:30:00\",\"2022-05-24T13:30:00\",\"2022-05-25T13:30:00\",\"2022-05-26T13:30:00\",\"2022-05-27T13:30:00\",\"2022-05-31T13:30:00\",\"2022-06-01T13:30:00\",\"2022-06-02T13:30:00\",\"2022-06-03T13:30:00\",\"2022-06-06T13:30:00\",\"2022-06-07T13:30:00\",\"2022-06-08T13:30:00\",\"2022-06-09T13:30:00\",\"2022-06-10T13:30:00\",\"2022-06-13T13:30:00\",\"2022-06-14T13:30:00\",\"2022-06-15T13:30:00\",\"2022-06-16T13:30:00\",\"2022-06-17T13:30:00\",\"2022-06-21T13:30:00\",\"2022-06-22T13:30:00\",\"2022-06-23T13:30:00\",\"2022-06-24T13:30:00\",\"2022-06-27T13:30:00\",\"2022-06-28T13:30:00\",\"2022-06-29T13:30:00\",\"2022-06-30T13:30:00\",\"2022-07-01T13:30:00\",\"2022-07-05T13:30:00\",\"2022-07-06T13:30:00\",\"2022-07-07T13:30:00\",\"2022-07-08T13:30:00\",\"2022-07-11T13:30:00\",\"2022-07-12T13:30:00\",\"2022-07-13T13:30:00\",\"2022-07-14T13:30:00\",\"2022-07-15T13:30:00\",\"2022-07-18T13:30:00\",\"2022-07-19T13:30:00\",\"2022-07-20T13:30:00\",\"2022-07-21T13:30:00\",\"2022-07-22T13:30:00\",\"2022-07-25T13:30:00\",\"2022-07-26T13:30:00\",\"2022-07-27T13:30:00\",\"2022-07-28T13:30:00\",\"2022-07-29T13:30:00\",\"2022-08-01T13:30:00\",\"2022-08-02T13:30:00\",\"2022-08-03T13:30:00\",\"2022-08-04T13:30:00\",\"2022-08-05T13:30:00\",\"2022-08-08T13:30:00\",\"2022-08-09T13:30:00\",\"2022-08-10T13:30:00\",\"2022-08-11T13:30:00\",\"2022-08-12T13:30:00\",\"2022-08-15T13:30:00\",\"2022-08-16T13:30:00\",\"2022-08-17T13:30:00\",\"2022-08-18T13:30:00\",\"2022-08-19T13:30:00\",\"2022-08-22T13:30:00\",\"2022-08-23T13:30:00\",\"2022-08-24T13:30:00\",\"2022-08-25T13:30:00\",\"2022-08-26T13:30:00\",\"2022-08-29T13:30:00\",\"2022-08-30T13:30:00\",\"2022-08-31T13:30:00\",\"2022-09-01T13:30:00\",\"2022-09-02T13:30:00\",\"2022-09-06T13:30:00\",\"2022-09-07T13:30:00\",\"2022-09-08T13:30:00\",\"2022-09-09T13:30:00\",\"2022-09-12T13:30:00\",\"2022-09-13T13:30:00\",\"2022-09-14T13:30:00\",\"2022-09-15T13:30:00\",\"2022-09-16T13:30:00\",\"2022-09-19T13:30:00\",\"2022-09-20T13:30:00\",\"2022-09-21T13:30:00\",\"2022-09-22T13:30:00\",\"2022-09-23T13:30:00\",\"2022-09-26T13:30:00\",\"2022-09-27T13:30:00\",\"2022-09-28T13:30:00\",\"2022-09-29T13:30:00\",\"2022-09-3
" var layout = {\"width\":1200,\"height\":400,\"template\":{\"layout\":{\"title\":{\"x\":0.05},\"font\":{\"color\":\"rgba(42, 63, 95, 1.0)\"},\"paper_bgcolor\":\"rgba(255, 255, 255, 1.0)\",\"plot_bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"autotypenumbers\":\"strict\",\"colorscale\":{\"diverging\":[[0.0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1.0,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0.0,\"ticks\":\"\"}},\"geo\":{\"showland\":true,\"landcolor\":\"rgba(229, 236, 246, 1.0)\",\"showlakes\":true,\"lakecolor\":\"rgba(255, 255, 255, 1.0)\",\"subunitcolor\":\"rgba(255, 255, 255, 1.0)\",\"bgcolor\":\"rgba(255, 255, 255, 1.0)\"},\"mapbox\":{\"style\":\"light\"},\"polar\":{\"bgcolor\":\"rgba(229, 236, 246, 1.0)\",\"radialaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"},\"angularaxis\":{\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"yaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true},\"zaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"gridwidth\":2.0,\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"backgroundcolor\":\"rgba(229, 236, 246, 1.0)\",\"showbackground\":true}},\"ternary\":{\"aaxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"baxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"caxis\":{\"ticks\":\"\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\"},\"bgcolor\":\"rgba(229, 236, 246, 1.0)\"},\"xaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"yaxis\":{\"title\":{\"standoff\":15},\"ticks\":\"\",\"automargin\":\"height+width+left+right+top+bottom\",\"linecolor\":\"rgba(255, 255, 255, 1.0)\",\"gridcolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinecolor\":\"rgba(255, 255, 255, 1.0)\",\"zerolinewidth\":2.0},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"shapedefaults\":{\"line\":{\"color\":\"rgba(42, 63, 95, 1.0)\"}},\"colorway\":[\"rgba(99, 110, 250, 1.0)\",\"rgba(239, 85, 59, 1.0)\",\"rgba(0, 204, 150, 1.0)\",\"rgba(171, 99, 250, 1.0)\",\"rgba(255, 161, 90, 1.0)\",\"rgba(25, 211, 243, 1.0)\",\"rgba(255, 102, 146, 1.0)\",\"rgba(182, 232, 128, 1.0)\",\"rgba(255, 151, 255, 1.0)\",\"rgba(254, 203, 82, 1.0)\"]},\"data\":{\"bar\":[{\"marker\":{\"line\":{\"color\":\"rgba(229, 236, 246, 1.0)\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"s
" var config = {\"responsive\":true};\r\n",
" Plotly.newPlot('2eb1687f-6e83-44a4-ab2e-aaa8de02052f', data, layout, config);\r\n",
" });\r\n",
"};\r\n",
"if ((typeof(requirejs) !== typeof(Function)) || (typeof(requirejs.config) !== typeof(Function))) {\r\n",
" var script = document.createElement(\"script\");\r\n",
" script.setAttribute(\"src\", \"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js\");\r\n",
" script.onload = function(){\r\n",
" renderPlotly_2eb1687f6e8344a4ab2eaaa8de02052f();\r\n",
" };\r\n",
" document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n",
"}\r\n",
"else {\r\n",
" renderPlotly_2eb1687f6e8344a4ab2eaaa8de02052f();\r\n",
"}\r\n",
"</script></div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"EQUITY_Series folio = new(trades, data, Long:true, Short:false, Warmup:warmup); //generate equity curve from trades and\n",
"\n",
"//make a chart\n",
"var cbars = Chart2D.Chart.Area<DateTime, double,bool>(folio.t.Skip(warmup).ToList(), folio.v.Skip(warmup).ToList(),false ).WithSize(1200,400).WithMargin(Margin.init<int, int, int, int, int, bool>(30,10,40,30,1,false))\n",
" .WithXAxisRangeSlider(RangeSlider.init(Visible:false)).WithTitle($\"Equity curve (long trades only) for MACD on {symbol}\");\n",
"cbars"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div class=\"dni-plaintext\"><pre>107.93999999999998</pre></div><style>\r\n",
".dni-code-hint {\r\n",
" font-style: italic;\r\n",
" overflow: hidden;\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview {\r\n",
" white-space: nowrap;\r\n",
"}\r\n",
".dni-treeview td {\r\n",
" vertical-align: top;\r\n",
" text-align: start;\r\n",
"}\r\n",
"details.dni-treeview {\r\n",
" padding-left: 1em;\r\n",
"}\r\n",
"table td {\r\n",
" text-align: start;\r\n",
"}\r\n",
"table tr { \r\n",
" vertical-align: top; \r\n",
" margin: 0em 0px;\r\n",
"}\r\n",
"table tr td pre \r\n",
"{ \r\n",
" vertical-align: top !important; \r\n",
" margin: 0em 0px !important;\r\n",
"} \r\n",
"table th {\r\n",
" text-align: start;\r\n",
"}\r\n",
"</style>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"// some what-if examples\n",
"string symbol=\"IBM\";\n",
"int warmup = 50;\n",
"Yahoo_Feed bars = new(symbol,350);\n",
"TSeries data = bars.Close;\n",
"HEMA_Series fastMA = new(data,12);\n",
"JMA_Series slowMA = new(data,23,-100);\n",
"SUB_Series MACD_line = new(fastMA, slowMA);\n",
"JMA_Series signal_line = new(MACD_line, 9);\n",
"SUB_Series histogram = new(MACD_line, signal_line);\n",
"CROSS_Series trades = new(histogram,0);\n",
"EQUITY_Series folio = new(trades, data, Long:true, Short:false, Warmup:warmup);\n",
"folio[^1].v"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".NET (C#)",
"language": "C#",
"name": ".net-csharp"
},
"language_info": {
"name": "polyglot-notebook"
},
"polyglot_notebook": {
"kernelInfo": {
"defaultKernelName": "csharp",
"items": [
{
"aliases": [
"C#",
"c#"
],
"languageName": "C#",
"name": "csharp"
},
{
"aliases": [
"frontend"
],
"name": "vscode"
}
]
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}