diff --git a/Client/WebServer/css/prism.css b/Client/WebServer/css/prism.css new file mode 100644 index 000000000..53766d7dd --- /dev/null +++ b/Client/WebServer/css/prism.css @@ -0,0 +1,143 @@ +/* PrismJS 1.22.0 +https://prismjs.com/download.html#themes=prism&languages=markup+clike+javascript+json+json5+jsonp */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.token.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + diff --git a/Client/WebServer/externalScripts/prism.js b/Client/WebServer/externalScripts/prism.js new file mode 100644 index 000000000..3fcd3fb22 --- /dev/null +++ b/Client/WebServer/externalScripts/prism.js @@ -0,0 +1,1520 @@ +/* PrismJS 1.22.0 +https://prismjs.com/download.html#themes=prism&languages=markup+clike+javascript+json+json5+jsonp */ +/// + +var _self = (typeof window !== 'undefined') + ? window // if in browser + : ( + (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) + ? self // if in worker + : {} // if in node js + ); + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT + * @author Lea Verou + * @namespace + * @public + */ +var Prism = (function (_self){ + +// Private helper vars +var lang = /\blang(?:uage)?-([\w-]+)\b/i; +var uniqueId = 0; + + +var _ = { + /** + * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the + * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load + * additional languages or plugins yourself. + * + * By setting this value to `true`, Prism will not automatically highlight all code elements on the page. + * + * You obviously have to change this value before the automatic highlighting started. To do this, you can add an + * empty Prism object into the global scope before loading the Prism script like this: + * + * ```js + * window.Prism = window.Prism || {}; + * Prism.manual = true; + * // add a new + @@ -116,8 +118,8 @@ - - + + diff --git a/Client/httpInterface.js b/Client/httpInterface.js index 6191fb906..128345d78 100644 --- a/Client/httpInterface.js +++ b/Client/httpInterface.js @@ -791,6 +791,13 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE sendStyleSheet('font-awasome.css') } break + + case 'prism.css': + { + sendStyleSheet('prism.css') + } + break + case 'ExecuteTerminalCommand': { let command = unescape(requestParameters[2]) diff --git a/Projects/Superalgos/Schemas/DocSchema.json b/Projects/Superalgos/Schemas/DocSchema.json index 6692ea77a..0fdf947c6 100644 --- a/Projects/Superalgos/Schemas/DocSchema.json +++ b/Projects/Superalgos/Schemas/DocSchema.json @@ -30,14 +30,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -63,14 +55,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -93,14 +77,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -123,14 +99,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -177,10 +145,6 @@ "style": "Text", "text": "Select Configure Plotter Module on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -202,16 +166,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "codeName is the name used in the code to refer to the module." }, { "style": "List", - "text": "codeName is the name used in the code to refer to the module." - }, - { - "style": "List", - "text": "isLegacy is true for plotters modules developed entirely in JavaScript, and is false or doesn't show in the configuration for plotters built with the tools featured in the data mine hierarchy." + "text": "isLegacy is true for plotters modules developed entirely in JavaScript, and is false or doesn't show in the configuration for plotters built with the tools featured in the data mine hierarchy." }, { "style": "Text", @@ -223,27 +183,27 @@ }, { "style": "Text", - "text": " default " + "text": " default " }, { "style": "Text", - "text": " histogram " + "text": " histogram " }, { "style": "Text", - "text": " band " + "text": " band " }, { "style": "Text", - "text": " moving-average " + "text": " moving-average " }, { "style": "Text", - "text": " oscillator " + "text": " oscillator " }, { "style": "Text", - "text": " trend " + "text": " trend " }, { "style": "Text", @@ -251,15 +211,15 @@ }, { "style": "Text", - "text": "1. name the image in the following format: image-name.png;" + "text": "1. name the image in the following format: image-name.png;" }, { "style": "Text", - "text": "1. place images in the WebServer\\Images\\Icons folder;" + "text": "1. place images in the WebServer\\Images\\Icons folder;" }, { "style": "Text", - "text": "1. in the configuration of the module, use the name as is (e.g.: \"icon\": \"image-name\")" + "text": "1. in the configuration of the module, use the name as is (e.g.: \"icon\": \"image-name\")" } ] }, @@ -315,7 +275,7 @@ }, { "style": "Text", - "text": " 1. Identifying points defined by [x,y] coordinates" + "text": " 1. Identifying points defined by [x,y] coordinates" }, { "style": "Text", @@ -389,10 +349,6 @@ "style": "Text", "text": "Select Configure Panel Data on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -405,17 +361,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "valueDecimals sets the number of decimals to be shown on the corresponding data field." - }, - { - "style": "Text", - "text": "" + "text": "valueDecimals sets the number of decimals to be shown on the corresponding data field." }, { "style": "Text", @@ -441,13 +389,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "labelPosition and valuePosition represent the vertical distance of the corresponding fields to the top margin of the panel." + "text": "labelPosition and valuePosition represent the vertical distance of the corresponding fields to the top margin of the panel." } ] }, @@ -501,7 +445,7 @@ }, { "style": "Text", - "text": "The definition of a point consists of the name of the point and the corresponding values for the x and y coordinates. To create such definitions, point and point formulas are used." + "text": "The definition of a point consists of the name of the point and the corresponding values for the x and y coordinates. To create such definitions, point and point formulas are used." }, { "style": "Title", @@ -523,7 +467,7 @@ }, { "style": "Text", - "text": "These coordinate points are used to define polygons. Values for [x,y]coordinates are entered with a point formula." + "text": "These coordinate points are used to define polygons. Values for [x,y]coordinates are entered with a point formula." }, { "style": "Text", @@ -549,7 +493,7 @@ }, { "style": "Text", - "text": "To represent some form of variation of the price or a price derivative over time, a typical point formula consists of the following two coordinates: x = datetime and y = rate." + "text": "To represent some form of variation of the price or a price derivative over time, a typical point formula consists of the following two coordinates: x = datetime and y = rate." }, { "style": "Text", @@ -559,10 +503,6 @@ "style": "Text", "text": "Point SMA 20 Begin" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.begin" @@ -573,11 +513,7 @@ }, { "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "The example above shows the definition of the first of two points necessary to draw the segment of the 20-periods SMA curve for any particular period or candle. In this case, x = record.begin is the starting datetime of the period and y = record.previous.sma20 is the rate of the 20-periods SMA of the previous period." + "text": "The example above shows the definition of the first of two points necessary to draw the segment of the 20-periods SMA curve for any particular period or candle. In this case, x = record.begin is the starting datetime of the period and y = record.previous.sma20 is the rate of the 20-periods SMA of the previous period." }, { "style": "Note", @@ -591,10 +527,6 @@ "style": "Text", "text": "Point SMA 20 End" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.end" @@ -603,10 +535,6 @@ "style": "Text", "text": "y = record.sma20" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "The above system works very well for plotting all sorts of information over the candles, on the charts." @@ -623,10 +551,6 @@ "style": "Text", "text": "Point RSI Begin" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.begin" @@ -635,18 +559,10 @@ "style": "Text", "text": "y = record.previous.value" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Point RSI End" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.end" @@ -655,10 +571,6 @@ "style": "Text", "text": "y = record.value" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Points do not necessarily need to refer to values on the dataset produced by the corresponding data product. For example, absolute values for the y-axis may be used to describe fixed graphical elements, for instance, a horizontal line, or a box." @@ -667,10 +579,6 @@ "style": "Text", "text": "Point Begin 20" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.begin" @@ -679,18 +587,10 @@ "style": "Text", "text": "y = 20" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Point End 20" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.end" @@ -699,18 +599,10 @@ "style": "Text", "text": "y = 20" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Point Begin 30" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.begin" @@ -719,18 +611,10 @@ "style": "Text", "text": "y = 30" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Point End 30" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "x = record.end" @@ -739,10 +623,6 @@ "style": "Text", "text": "y = 30" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "The above four points are used to paint the background of the 20 to 30 value range of the RSI chart. The first two points are also used to draw the dotted line signaling the 20-value mark, and the last two are used for the dotted line indicating the 30-value mark." @@ -771,7 +651,7 @@ }, { "style": "Text", - "text": "The foremost requirement for images is that they are in the png format, 24 bits, with transparency, a low case extension, and are square." + "text": "The foremost requirement for images is that they are in the png format, 24 bits, with transparency, a low case extension, and are square." }, { "style": "Text", @@ -779,7 +659,7 @@ }, { "style": "Text", - "text": "Images must the stored in the following path: \\BackendServers\\WebServer\\Images\\Icons\\style-01" + "text": "Images must the stored in the following path: \\BackendServers\\WebServer\\Images\\Icons\\style-01" }, { "style": "Note", @@ -801,10 +681,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -822,16 +698,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "codeName is the name of the image, without the .png extension." }, { "style": "List", - "text": "codeName is the name of the image, without the .png extension." - }, - { - "style": "List", - "text": "size is the size at which the image shall be rendered, in pixels." + "text": "size is the size at which the image shall be rendered, in pixels." } ] }, @@ -845,7 +717,7 @@ }, { "style": "Text", - "text": "The node is optional. When the node is not present in the definition of the image or when the condition validates true, the image is rendered on screen. When the condition validates false the image is not rendered. As such, the node allows dynamically switching the rendering of the corresponding image on and off ." + "text": "The node is optional. When the node is not present in the definition of the image or when the condition validates true, the image is rendered on screen. When the condition validates false the image is not rendered. As such, the node allows dynamically switching the rendering of the corresponding image on and off ." }, { "style": "Title", @@ -889,10 +761,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -910,16 +778,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "offsetX is an offset in the X axis, in pixels, applied to displace the image in relation to the coordinate point defined by the reference of the node. Negative values displace the image to the left and positive values to the right." }, { "style": "List", - "text": "offsetX is an offset in the X axis, in pixels, applied to displace the image in relation to the coordinate point defined by the reference of the node. Negative values displace the image to the left and positive values to the right." - }, - { - "style": "List", - "text": "offsetY is an offset in the Y axis. Negative values displace the image downwards and positive values displace the image upwards." + "text": "offsetY is an offset in the Y axis. Negative values displace the image downwards and positive values displace the image upwards." } ] }, @@ -973,10 +837,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -999,19 +859,15 @@ }, { "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": " paletteColor is one of the predefined colors available, as described in the configuration of the Style* node." + "text": " paletteColor is one of the predefined colors available, as described in the configuration of the Style* node." }, { "style": "List", - "text": "opacity is probably self-explanatory, and may range from 0 for a fully transparent object to 1 for a solid object." + "text": "opacity is probably self-explanatory, and may range from 0 for a fully transparent object to 1 for a solid object." }, { "style": "List", - "text": "fontSize is self explanatory too; values above zero produce the expected results." + "text": "fontSize is self explanatory too; values above zero produce the expected results." } ] }, @@ -1025,7 +881,7 @@ }, { "style": "Text", - "text": "The node is optional. When the node is not present in the definition of the text node or when the condition validates true, the text is rendered on screen. When the condition validates false, text is not rendered. As such, the node allows dynamically switching the rendering of the corresponding text on and off ." + "text": "The node is optional. When the node is not present in the definition of the text node or when the condition validates true, the text is rendered on screen. When the condition validates false, text is not rendered. As such, the node allows dynamically switching the rendering of the corresponding text on and off ." }, { "style": "Title", @@ -1069,10 +925,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -1090,16 +942,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "offsetX is an offset in the X axis, in pixels, applied to displace the text in relation to the coordinate point defined by the reference of the node. Negative values displace the text to the left and positive values to the right." }, { "style": "List", - "text": "offsetX is an offset in the X axis, in pixels, applied to displace the text in relation to the coordinate point defined by the reference of the node. Negative values displace the text to the left and positive values to the right." - }, - { - "style": "List", - "text": "offsetY is an offset in the Y axis. Negative values displace the text downwards and positive values displace the image upwards." + "text": "offsetY is an offset in the Y axis. Negative values displace the text downwards and positive values displace the image upwards." } ] }, @@ -1161,7 +1009,7 @@ }, { "style": "Text", - "text": "The node is optional. When the node is not present in the definition of the polygon or when the condition validates true, the polygon is rendered on screen. When the condition validates false the polygon is not rendered. As such, the node allows dynamically switching the rendering of the corresponding polygon on and off." + "text": "The node is optional. When the node is not present in the definition of the polygon or when the condition validates true, the polygon is rendered on screen. When the condition validates false the polygon is not rendered. As such, the node allows dynamically switching the rendering of the corresponding polygon on and off." }, { "style": "Title", @@ -1277,29 +1125,17 @@ "style": "Text", "text": "To continue the example of the Percentage Bandwidth plotter, the following is the condition that determines the newly added styles:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "record.previous.movingAverage > record.movingAverage" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "As hinted earlier, when the condition is met, the default style is modified by a second style that may be created on the menu of the style condition node." }, { "style": "Text", - "text": "The definition of secondary styles is slightly different from that of the default style, as—in such cases—the atMousePosition property may no longer be defined:" - }, - { - "style": "Text", - "text": "" + "text": "The definition of secondary styles is slightly different from that of the default style, as—in such cases—the atMousePosition property may no longer be defined:" }, { "style": "Text", @@ -1324,10 +1160,6 @@ { "style": "Text", "text": "}" - }, - { - "style": "Text", - "text": "" } ] }, @@ -1367,10 +1199,6 @@ "style": "Text", "text": "A typical definition for a polygon body style looks like this:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -1411,18 +1239,10 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "A typical definition for a polygon border style has a couple more properties:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -1479,10 +1299,6 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "The first section of the definition refers, as explicitly stated, to the default state of the style." @@ -1493,7 +1309,7 @@ }, { "style": "List", - "text": "opacity is probably self-explanatory: it may range from 0 for a fully transparent object to 1 for a solid object." + "text": "opacity is probably self-explanatory: it may range from 0 for a fully transparent object to 1 for a solid object." }, { "style": "Text", @@ -1505,71 +1321,71 @@ }, { "style": "Text", - "text": " DARK 48, 48, 54   " + "text": " DARK 48, 48, 54   " }, { "style": "Text", - "text": " LIGHT 234, 226, 222   " + "text": " LIGHT 234, 226, 222   " }, { "style": "Text", - "text": " GREY 150, 150, 150   " + "text": " GREY 150, 150, 150   " }, { "style": "Text", - "text": " LIGHT_GREY 247, 247, 247   " + "text": " LIGHT_GREY 247, 247, 247   " }, { "style": "Text", - "text": " WHITE 255, 255, 255   " + "text": " WHITE 255, 255, 255   " }, { "style": "Text", - "text": " BLACK 0, 0, 0   " + "text": " BLACK 0, 0, 0   " }, { "style": "Text", - "text": " GOLDEN_ORANGE 240, 162, 2   " + "text": " GOLDEN_ORANGE 240, 162, 2   " }, { "style": "Text", - "text": " RUSTED_RED 204, 88, 53   " + "text": " RUSTED_RED 204, 88, 53   " }, { "style": "Text", - "text": " GREEN 188, 214, 67   " + "text": " GREEN 188, 214, 67   " }, { "style": "Text", - "text": " RED 223, 70, 60   " + "text": " RED 223, 70, 60   " }, { "style": "Text", - "text": " PATINATED_TURQUOISE 27, 153, 139   " + "text": " PATINATED_TURQUOISE 27, 153, 139   " }, { "style": "Text", - "text": " TITANIUM_YELLOW 244, 228, 9   " + "text": " TITANIUM_YELLOW 244, 228, 9   " }, { "style": "Text", - "text": " MANGANESE_PURPLE 91,80, 122   " + "text": " MANGANESE_PURPLE 91,80, 122   " }, { "style": "Text", - "text": " TURQUOISE 74, 207, 217   " + "text": " TURQUOISE 74, 207, 217   " }, { "style": "Text", - "text": " DARK_TURQUOISE 2, 149, 170   " + "text": " DARK_TURQUOISE 2, 149, 170   " }, { "style": "Text", - "text": "* lineWidth is the width of the border line, which should be greater than 0." + "text": "* lineWidth is the width of the border line, which should be greater than 0." }, { "style": "List", - "text": "lineDash is used to turn the border into a dashed-line; the first value corresponds to the length of the dash while the second value defines the length of the space." + "text": "lineDash is used to turn the border into a dashed-line; the first value corresponds to the length of the dash while the second value defines the length of the space." } ] }, @@ -1663,11 +1479,11 @@ }, { "style": "List", - "text": "Condition A: chart.at01hs.candle.close > chart.at01hs.bollingerBand.MovingAverage → This means that the latest candle at the 1 hour chart closed above the Bollinger Bands moving average." + "text": "Condition A: chart.at01hs.candle.close > chart.at01hs.bollingerBand.MovingAverage → This means that the latest candle at the 1 hour chart closed above the Bollinger Bands moving average." }, { "style": "List", - "text": "Condition B: chart.at01hs.candle.previous.max > chart.at01hs.bollingerBand.previous.MovingAverage → This means that the maximum value of the candle before the last one, was higher than the Bollinger Bands moving average." + "text": "Condition B: chart.at01hs.candle.previous.max > chart.at01hs.bollingerBand.previous.MovingAverage → This means that the maximum value of the candle before the last one, was higher than the Bollinger Bands moving average." }, { "style": "Text", @@ -1719,10 +1535,6 @@ "style": "Text", "text": "Select Configure Super Scripts on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -1735,13 +1547,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name of the hierarchy as is used in the system's code." + "text": "codeName is the name of the hierarchy as is used in the system's code." } ] }, @@ -1947,10 +1755,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -1972,20 +1776,16 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "host is the machine or hardware represented by the network node. The default parameter is localhost, but if you intend to access the backend services of this node from a remote computer, then you must change localhost for the IP Address of the machine on which the node is running, for example, to 147.0.0.1." }, { "style": "List", - "text": "host is the machine or hardware represented by the network node. The default parameter is localhost, but if you intend to access the backend services of this node from a remote computer, then you must change localhost for the IP Address of the machine on which the node is running, for example, to 147.0.0.1." + "text": "webPort is the port used by the Web Server, at this stage 34248." }, { "style": "List", - "text": "webPort is the port used by the Web Server, at this stage 34248." - }, - { - "style": "List", - "text": "webSocketsPort is the port used by the system to communicate over the local area network, by default set at 18041." + "text": "webSocketsPort is the port used by the system to communicate over the local area network, by default set at 18041." } ] }, @@ -2235,10 +2035,6 @@ "style": "Text", "text": "Select Configure Session on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -2251,13 +2047,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." + "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." }, { "style": "Title", @@ -2649,7 +2441,7 @@ }, { "style": "Text", - "text": "Possible values are Above and Below." + "text": "Possible values are Above and Below." }, { "style": "Text", @@ -2675,7 +2467,7 @@ }, { "style": "Text", - "text": "Possible values are Above and Below." + "text": "Possible values are Above and Below." }, { "style": "Text", @@ -2935,15 +2727,11 @@ }, { "style": "List", - "text": "base asset profit loss = base asset end balance - base asset begin balance" + "text": "base asset profit loss = base asset end balance - base asset begin balance" }, { "style": "List", - "text": "quoted asset profit loss = quoted asset end balance - quoted asset begin balance" - }, - { - "style": "Text", - "text": "" + "text": "quoted asset profit loss = quoted asset end balance - quoted asset begin balance" }, { "style": "Text", @@ -2973,18 +2761,10 @@ "style": "Text", "text": " sessionParameters.sessionQuotedAsset.config.initialBalance" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "In the case of the position base asset and position quoted asset:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.position.positionBaseAsset.profitLoss.value =" @@ -3013,10 +2793,6 @@ "style": "Text", "text": " tradingEngine.current.position.positionQuotedAsset.beginBalance" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "In the context of the episode statistics or the position statistics, the calculation is done consolidating the profits of both assets." @@ -3029,10 +2805,6 @@ "style": "Text", "text": "In the context of the episode statistics:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.episode.episodeStatistics.profitLoss.value =" @@ -3049,18 +2821,10 @@ "style": "Text", "text": " tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "In the context of the position statistics:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.position.positionStatistics.profitLoss.value =" @@ -3077,10 +2841,6 @@ "style": "Text", "text": " tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value" }, - { - "style": "Text", - "text": "" - }, { "style": "Title", "text": "Adding a Profit Loss node" @@ -3101,7 +2861,7 @@ }, { "style": "Text", - "text": "Hit ratio results from multiplying the number of hits by 100 and dividing it by the number of positions: hit ratio = hits * 100 / positions." + "text": "Hit ratio results from multiplying the number of hits by 100 and dividing it by the number of positions: hit ratio = hits * 100 / positions." }, { "style": "Title", @@ -3187,7 +2947,7 @@ }, { "style": "Text", - "text": "percentage filled = size filled * 100 / size" + "text": "percentage filled = size filled * 100 / size" }, { "style": "Title", @@ -3277,7 +3037,7 @@ }, { "style": "Text", - "text": "annualized rate of return = (((investment + profits) / investments) ^ (365 / days)) - 1" + "text": "annualized rate of return = (((investment + profits) / investments) ^ (365 / days)) - 1" }, { "style": "Text", @@ -3287,10 +3047,6 @@ "style": "Text", "text": "The formulas:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value =" @@ -3331,18 +3087,10 @@ "style": "Text", "text": "(365 / tradingEngine.current.episode.episodeStatistics.days.value)) - 1" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "The JavaScript code:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value =" @@ -3407,10 +3155,6 @@ "style": "Text", "text": " ) - 1" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "In the context of the episode statistics, the calculation is done using the consolidated balance, as explained in the profit loss definition." @@ -3423,10 +3167,6 @@ "style": "Text", "text": "The JavaScript code:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value =" @@ -3503,10 +3243,6 @@ "style": "Text", "text": " ) - 1" }, - { - "style": "Text", - "text": "" - }, { "style": "Title", "text": "Adding a Annualized Rate Of Return node" @@ -3991,15 +3727,15 @@ }, { "style": "List", - "text": "Not Open: the object is not open at the current candle." + "text": "Not Open: the object is not open at the current candle." }, { "style": "List", - "text": "Open: the object is open at the current candle." + "text": "Open: the object is open at the current candle." }, { "style": "List", - "text": "Closed: the object closes at the current candle." + "text": "Closed: the object closes at the current candle." }, { "style": "Title", @@ -4165,15 +3901,15 @@ }, { "style": "Text", - "text": "Possible values for lock are open and closed." + "text": "Possible values for lock are open and closed." }, { "style": "Text", - "text": "The moment an order is closed, the system checks the spawnMultipleOrders parameter at the order's configuration in the trading system. If the value is false, the system sets the lock to closed so that the data structure may not be used again during the same position." + "text": "The moment an order is closed, the system checks the spawnMultipleOrders parameter at the order's configuration in the trading system. If the value is false, the system sets the lock to closed so that the data structure may not be used again during the same position." }, { "style": "Text", - "text": "At the moment of opening an order, the system checks the spawnMultipleOrders parameter at the order's configuration in the trading system. If the value is false, the system checks the value of the lock. If the value is open, then it may create the order; if it is closed then the order may not be created." + "text": "At the moment of opening an order, the system checks the spawnMultipleOrders parameter at the order's configuration in the trading system. If the value is false, the system checks the value of the lock. If the value is open, then it may create the order; if it is closed then the order may not be created." }, { "style": "Title", @@ -4500,11 +4236,11 @@ }, { "style": "List", - "text": "The configuration of the execution algorithm: The parameter percentageOfStageTargetSize determines what fraction of the target size the algorithm will attempt to execute." + "text": "The configuration of the execution algorithm: The parameter percentageOfStageTargetSize determines what fraction of the target size the algorithm will attempt to execute." }, { "style": "List", - "text": "The configuration of the order: The parameter percentageOfAlgorithmSize determines what fraction of the size handled by the algorithm the order shall be constrained to." + "text": "The configuration of the order: The parameter percentageOfAlgorithmSize determines what fraction of the size handled by the algorithm the order shall be constrained to." }, { "style": "Title", @@ -4639,7 +4375,7 @@ }, { "style": "Text", - "text": "No Exit is the default value until a new value is assigned before the object is closed. Other possible values vary with the context." + "text": "No Exit is the default value until a new value is assigned before the object is closed. Other possible values vary with the context." }, { "style": "Text", @@ -4647,23 +4383,23 @@ }, { "style": "List", - "text": "Last Candle Reached: the object was closed because the last candle was reached." + "text": "Last Candle Reached: the object was closed because the last candle was reached." }, { "style": "List", - "text": "Position Closed: the position was closed." + "text": "Position Closed: the position was closed." }, { "style": "List", - "text": "Take Profit: the take profit target was hit." + "text": "Take Profit: the take profit target was hit." }, { "style": "List", - "text": "Stop Loss: the stop loss target was hit." + "text": "Stop Loss: the stop loss target was hit." }, { "style": "List", - "text": "Closing Stage: the current stage started closing because the Close Stage is opening." + "text": "Closing Stage: the current stage started closing because the Close Stage is opening." }, { "style": "Title", @@ -4751,7 +4487,7 @@ }, { "style": "Text", - "text": "The two possible values for the cycle node are First and Second." + "text": "The two possible values for the cycle node are First and Second." }, { "style": "Title", @@ -4768,14 +4504,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -5026,10 +4754,6 @@ "style": "Text", "text": "Select Configure Base Asset on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5051,20 +4775,16 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "initialBalance is the amount of capital you wish to allocate to the trading system." }, { "style": "List", - "text": "initialBalance is the amount of capital you wish to allocate to the trading system." + "text": "minimumBalance is the threshold of accummulated losses that switches off the session; when your overall balance (balanceAssetA + balanceAssetB) drops to this value, all trading stops; think of the minimumBalance as a general safety switch." }, { "style": "List", - "text": "minimumBalance is the threshold of accummulated losses that switches off the session; when your overall balance (balanceAssetA + balanceAssetB) drops to this value, all trading stops; think of the minimumBalance as a general safety switch." - }, - { - "style": "List", - "text": "maximumBalance is a similar concept as with the minimumBalance but on the high side of the initialBalance." + "text": "maximumBalance is a similar concept as with the minimumBalance but on the high side of the initialBalance." } ] }, @@ -5182,10 +4902,6 @@ "style": "Text", "text": "

On Backtesting Sessions

" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5202,22 +4918,14 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "initialDatetime is the datetime the session starts at." + "text": "initialDatetime is the datetime the session starts at." }, { "style": "Text", "text": "

On Paper Trading, Forward Testing and Live Trading Sessions

" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5240,11 +4948,7 @@ }, { "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": " finalDatetime is the datetime the session finishes at. If you don't set a finalDatetime* at the level of the testing session or the trading system, then the session runs for one year." + "text": " finalDatetime is the datetime the session finishes at. If you don't set a finalDatetime* at the level of the testing session or the trading system, then the session runs for one year." }, { "style": "Text", @@ -5256,11 +4960,11 @@ }, { "style": "List", - "text": "initialDatetime, in combination with the allowStartingFromThePast parameter, is a hack to allow a live session to start from a date in the past. If there is a valid initialDatetime and allowStartingFromThePast is true, then the live session effectively starts from the specified date in the past. If allowStartingFromThePast is false the initialDatetime is ignored and the session starts from the present time." + "text": "initialDatetime, in combination with the allowStartingFromThePast parameter, is a hack to allow a live session to start from a date in the past. If there is a valid initialDatetime and allowStartingFromThePast is true, then the live session effectively starts from the specified date in the past. If allowStartingFromThePast is false the initialDatetime is ignored and the session starts from the present time." }, { "style": "List", - "text": "allowStartingFromThePast may be true or false." + "text": "allowStartingFromThePast may be true or false." } ] }, @@ -5274,7 +4978,7 @@ }, { "style": "Text", - "text": "In the context of backtesting sessions, what time frame you decide to run the session depends on the trading system being tested. If the trading system makes decisions based on the 1-hour candle and above, then 01-hs may be the best choice. However, if decisions are influenced by sub-hour candles then you should match the time frame accordingly." + "text": "In the context of backtesting sessions, what time frame you decide to run the session depends on the trading system being tested. If the trading system makes decisions based on the 1-hour candle and above, then 01-hs may be the best choice. However, if decisions are influenced by sub-hour candles then you should match the time frame accordingly." }, { "style": "Text", @@ -5282,7 +4986,7 @@ }, { "style": "Text", - "text": "In the context of live sessions, that is, paper trading, forward testing, and live trading, you should run the session on the 01-min time frame so that the trading bot reacts fast when the price tags the take profit or stop loss targets. Remember that stop and take profit orders are not placed at the exchange after the take position event, that is, once you enter the position. Instead, the trading bot checks the current price upon each execution cycle and determines whether targets have been hit or not. If targets are hit, only then orders are placed. That is why running live trading sessions at the 01-min time frame is recommended. Learn more about the management of take profit and stop loss targets." + "text": "In the context of live sessions, that is, paper trading, forward testing, and live trading, you should run the session on the 01-min time frame so that the trading bot reacts fast when the price tags the take profit or stop loss targets. Remember that stop and take profit orders are not placed at the exchange after the take position event, that is, once you enter the position. Instead, the trading bot checks the current price upon each execution cycle and determines whether targets have been hit or not. If targets are hit, only then orders are placed. That is why running live trading sessions at the 01-min time frame is recommended. Learn more about the management of take profit and stop loss targets." }, { "style": "Text", @@ -5310,7 +5014,7 @@ }, { "style": "Text", - "text": "Let's say it's 2020-06-11T11:39:30:00.000Z, that is, 11 hours, 39 minutes and 30 seconds of June 11th, 2020." + "text": "Let's say it's 2020-06-11T11:39:30:00.000Z, that is, 11 hours, 39 minutes and 30 seconds of June 11th, 2020." }, { "style": "List", @@ -5358,7 +5062,7 @@ }, { "style": "Text", - "text": "This means that running the session (for this particular trading system) at the 30-minute time frame has higher probabilities of conditions evaluating 30-minute candles to be true during the session." + "text": "This means that running the session (for this particular trading system) at the 30-minute time frame has higher probabilities of conditions evaluating 30-minute candles to be true during the session." }, { "style": "Success", @@ -5392,10 +5096,6 @@ "style": "Text", "text": "Select Configure Time Frame on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5408,17 +5108,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "value is the setting for the time frame. You may use any of the values below." - }, - { - "style": "Text", - "text": "" + "text": "value is the setting for the time frame. You may use any of the values below." }, { "style": "Text", @@ -5460,18 +5152,10 @@ "style": "Text", "text": "45-min" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Available options at larger time frames are:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "01-hs" @@ -5503,10 +5187,6 @@ { "style": "Text", "text": "24-hs" - }, - { - "style": "Text", - "text": "" } ] }, @@ -5542,10 +5222,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5568,19 +5244,15 @@ }, { "style": "Text", - "text": "" + "text": " positionRate is the slippage value applied to the rate of all market orders throughout the position, expressed as a percentage (i.e.:* 0.1 means 0.1%)." }, { "style": "Text", - "text": " positionRate is the slippage value applied to the rate of all market orders throughout the position, expressed as a percentage (i.e.:* 0.1 means 0.1%)." - }, - { - "style": "Text", - "text": " stopLoss is the slippage value applied to the stop loss target defined by the formulas of each stop loss phase in the manage stage of the trading system, expressed as a percentage (i.e.: 0.2 means 0.2%). The slippage value is applied to the value resulting from the corresponding stop loss formula, and the actual stop loss target is the resulting number. For example, if the stop loss formula results in 1000 and the stopLoss slippage value is 0.2, then the resulting stop loss target is 1000 ± 1000 0.2 / 100. Read below for an explanation on when the slippage is added or subtracted." + "text": " stopLoss is the slippage value applied to the stop loss target defined by the formulas of each stop loss phase in the manage stage of the trading system, expressed as a percentage (i.e.: 0.2 means 0.2%). The slippage value is applied to the value resulting from the corresponding stop loss formula, and the actual stop loss target is the resulting number. For example, if the stop loss formula results in 1000 and the stopLoss slippage value is 0.2, then the resulting stop loss target is 1000 ± 1000 0.2 / 100. Read below for an explanation on when the slippage is added or subtracted." }, { "style": "List", - "text": "takeProfit works similarly as the stopLoss setting, but affecting the take profit target instead of the stop loss target." + "text": "takeProfit works similarly as the stopLoss setting, but affecting the take profit target instead of the stop loss target." }, { "style": "Text", @@ -5636,10 +5308,6 @@ "style": "Text", "text": "Select Configure Fee Structure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5657,16 +5325,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "maker is the setting for the fee the exchange charges when an order adds liquidity to the market, such as with limit orders." }, { "style": "List", - "text": "maker is the setting for the fee the exchange charges when an order adds liquidity to the market, such as with limit orders." - }, - { - "style": "List", - "text": "taker is the setting for the fee the exchange charges when an order takes liquidity from the market, such as with market or instant orders." + "text": "taker is the setting for the fee the exchange charges when an order takes liquidity from the market, such as with market or instant orders." }, { "style": "Note", @@ -5706,10 +5370,6 @@ "style": "Text", "text": "Select Configure Slippage on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5727,16 +5387,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "strategy determines whether to take a snapshot at the trigger on event or not; possible values are true or false." }, { "style": "List", - "text": "strategy determines whether to take a snapshot at the trigger on event or not; possible values are true or false." - }, - { - "style": "List", - "text": "position determines whether to take a snapshot at the take position event or not; possible values are true or false." + "text": "position determines whether to take a snapshot at the take position event or not; possible values are true or false." } ] }, @@ -5768,10 +5424,6 @@ "style": "Text", "text": "Select Configure Slippage on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5789,16 +5441,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "date determines whether the date is shown in the progress notice below the trading process instance node; possible values are true or false." }, { "style": "List", - "text": "date determines whether the date is shown in the progress notice below the trading process instance node; possible values are true or false." - }, - { - "style": "List", - "text": "candleIndex determines whether the index of the candle is shown in the progress notice below the trading process instance node; possible values are true or false." + "text": "candleIndex determines whether the index of the candle is shown in the progress notice below the trading process instance node; possible values are true or false." } ] }, @@ -5815,7 +5463,7 @@ }, { "style": "Text", - "text": "Parameters defined in the configuration file of these node become available to trading systems using the following path: sessionParameters.userDefinedParameters.config.parameterName." + "text": "Parameters defined in the configuration file of these node become available to trading systems using the following path: sessionParameters.userDefinedParameters.config.parameterName." }, { "style": "Text", @@ -5837,10 +5485,6 @@ "style": "Text", "text": "Select Configure Slippage on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5857,13 +5501,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "param1Name is an example of a name. You may change the names of the parameters as required. Values including text strings go between quotation marks, while numeric values, without. You may define as many parameters as you wish; simply separate them with a comma to keep a valid JSON format for the configuration file." + "text": "param1Name is an example of a name. You may change the names of the parameters as required. Values including text strings go between quotation marks, while numeric values, without. You may define as many parameters as you wish; simply separate them with a comma to keep a valid JSON format for the configuration file." } ] }, @@ -5881,7 +5521,7 @@ }, { "style": "Text", - "text": "When a time frames filter is set up, a Time.Frames.json file is created by the indicator process in the corresponding output folder. This file is read by others—such as the charting system—to get the information regarding which time frames are available and which are not, to avoid reporting errors." + "text": "When a time frames filter is set up, a Time.Frames.json file is created by the indicator process in the corresponding output folder. This file is read by others—such as the charting system—to get the information regarding which time frames are available and which are not, to avoid reporting errors." }, { "style": "Important", @@ -5907,10 +5547,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5929,15 +5565,11 @@ }, { "style": "Text", - "text": "" + "text": " dailyTimeFrames features the time frames corresponding to the daily files* type of data structure; in practical terms, the time frames below one hour." }, { "style": "Text", - "text": " dailyTimeFrames features the time frames corresponding to the daily files* type of data structure; in practical terms, the time frames below one hour." - }, - { - "style": "Text", - "text": " marketTimeFrames features the time frames corresponding to the market files* type of data structure; in practical terms, the time frames of one hour and above." + "text": " marketTimeFrames features the time frames corresponding to the market files* type of data structure; in practical terms, the time frames of one hour and above." }, { "style": "Text", @@ -5977,10 +5609,6 @@ "style": "Text", "text": "Select Configure Session on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -5993,13 +5621,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." + "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." }, { "style": "Title", @@ -6051,10 +5675,6 @@ "style": "Text", "text": "Select Configure Session on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -6072,16 +5692,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." }, { "style": "List", - "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." - }, - { - "style": "List", - "text": "balancePercentage is a number defining the percentage of the initialBalance specified in the base aset configuration that will be used for trading. For instance, \"balancePercentage\": 1 means that 1% of your balance will be made available. Just like the initialBalance is scaled down, the minimumBalance and maximumBalance are also scaled down accordingly (see base asset)." + "text": "balancePercentage is a number defining the percentage of the initialBalance specified in the base aset configuration that will be used for trading. For instance, \"balancePercentage\": 1 means that 1% of your balance will be made available. Just like the initialBalance is scaled down, the minimumBalance and maximumBalance are also scaled down accordingly (see base asset)." }, { "style": "Text", @@ -6187,10 +5803,6 @@ "style": "Text", "text": "Select Configure Session on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -6203,13 +5815,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." + "text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify." }, { "style": "Title", @@ -6260,10 +5868,6 @@ "style": "Text", "text": "Select Configure Sensor Bot Instance on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": " {" @@ -6278,11 +5882,7 @@ }, { "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": " startDate is the desired starting date* of the data product the sensor bot instance builds, in the YYYY-MM-DD format. The sensor bot instance queries its data source for data starting on the configured startDate." + "text": " startDate is the desired starting date* of the data product the sensor bot instance builds, in the YYYY-MM-DD format. The sensor bot instance queries its data source for data starting on the configured startDate." }, { "style": "Text", @@ -6290,7 +5890,7 @@ }, { "style": "Text", - "text": " * In the case the startDate is changed after the sensor bot has started building a data product, either for an earlier or later date, the sensor re-evaluates the feasibility of starting at the new date. The actual date may or may not change; regardless, the sensor bot discards the existing data product and starts over from the newly discovered date. In other words, if the startDate is changed, the sensor bot starts over." + "text": " * In the case the startDate is changed after the sensor bot has started building a data product, either for an earlier or later date, the sensor re-evaluates the feasibility of starting at the new date. The actual date may or may not change; regardless, the sensor bot discards the existing data product and starts over from the newly discovered date. In other words, if the startDate is changed, the sensor bot starts over." }, { "style": "Text", @@ -6372,10 +5972,6 @@ "style": "Text", "text": "Select Configure Data Mine on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -6388,13 +5984,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name of the data mine as used within the code of the system." + "text": "codeName is the name of the data mine as used within the code of the system." } ] }, @@ -6433,14 +6025,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -6475,10 +6059,6 @@ "style": "Text", "text": "Select Configure Bot on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -6495,13 +6075,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name of the bot as used within the code of the system." + "text": "codeName is the name of the bot as used within the code of the system." } ] }, @@ -6549,10 +6125,6 @@ "style": "Text", "text": "Multi-Period-Market:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": " {" @@ -6585,18 +6157,10 @@ "style": "Text", "text": " }" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Multi-Period-Daily:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": " {" @@ -6629,13 +6193,9 @@ "style": "Text", "text": " }" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name of the process as used within the code of the system." + "text": "codeName is the name of the process as used within the code of the system." } ] }, @@ -6727,10 +6287,6 @@ "style": "Text", "text": "Select Configure Status Dependency on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -6743,13 +6299,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "mainUtility determines the type of status dependency, with possible values being Self Reference, Market Starting Point, or Market Ending Point." + "text": "mainUtility determines the type of status dependency, with possible values being Self Reference, Market Starting Point, or Market Ending Point." } ] }, @@ -6878,14 +6430,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -6947,10 +6491,6 @@ "style": "Text", "text": "Select Configure Product on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -6972,16 +6512,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "codeName is the name of the product as it is used within the bot's code." }, { "style": "List", - "text": "codeName is the name of the product as it is used within the bot's code." - }, - { - "style": "List", - "text": "pluralVariableName is the plural form of the variable." + "text": "pluralVariableName is the plural form of the variable." } ] }, @@ -7017,10 +6553,6 @@ "style": "Text", "text": "Multi-Period-Market:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -7065,18 +6597,10 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Multi-Period-Daily:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -7138,32 +6662,28 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "codeName is the name of the dataset as used within the code." }, { "style": "List", - "text": "codeName is the name of the dataset as used within the code." + "text": "type refers to the type of dataset; possible values are Market Files and Daily Files." }, { "style": "List", - "text": "type refers to the type of dataset; possible values are Market Files and Daily Files." + "text": "validTimeFrames refers to the time frames handled by the dataset." }, { "style": "List", - "text": "validTimeFrames refers to the time frames handled by the dataset." + "text": "filePath sets the path on which files are stored; the proper name of the data mine, the bot and the product need to be entered." }, { "style": "List", - "text": "filePath sets the path on which files are stored; the proper name of the data mine, the bot and the product need to be entered." + "text": "fileName sets the name of the files that constitute the dataset." }, { "style": "List", - "text": "fileName sets the name of the files that constitute the dataset." - }, - { - "style": "List", - "text": "timeFrames sets the name and path of the file indicating which time frames shall be filtered when the users sets a time frames filter." + "text": "timeFrames sets the name and path of the file indicating which time frames shall be filtered when the users sets a time frames filter." } ] }, @@ -7199,10 +6719,6 @@ "style": "Text", "text": "Select Configure Bot on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -7215,13 +6731,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name of the bot as used within the code of the system." + "text": "codeName is the name of the bot as used within the code of the system." } ] }, @@ -7399,10 +6911,6 @@ "style": "Text", "text": "Select Configure Property on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -7423,17 +6931,13 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name of the record as it is used in the bot's code." + "text": "codeName is the name of the record as it is used in the bot's code." }, { "style": "Text", - "text": " isCalculated determines if the field is stored in the dataset or if, instead, is calculated at a later stage. A value true* means that the record is not stored. In the case isCaculated is not defined in the configuration, it is assumed to be false." + "text": " isCalculated determines if the field is stored in the dataset or if, instead, is calculated at a later stage. A value true* means that the record is not stored. In the case isCaculated is not defined in the configuration, it is assumed to be false." }, { "style": "Text", @@ -7455,15 +6959,151 @@ }, { "style": "Text", - "text": "In the context of the trading engine, formulas are used to create user defined statistics." + "text": "In the context of a trading system, formulas are used to determine the values for several properties, such as the target rate, target size, managed stop loss, managed take profit, and so on." }, { "style": "Text", - "text": "Formulas may use indicators and object properties made available by the trading engine. They must evaluate to a number." + "text": "Formulas may use indicators and trading engine properties. The main difference between writing a formula and writing a condition is that while conditions must evaluate to true or false, formulas must evaluate to a number." + }, + { + "style": "Text", + "text": "A simple math example:" + }, + { + "style": "Text", + "text": "This simple formula may be used to define an initial take profit target 3% above the rate at which the position was taken." + }, + { + "style": "Text", + "text": "tradingEngine.current.position.entryTargetRate.value * 1.03" }, { "style": "Note", - "text": "To learn how to write formulas, see syntax overview." + "text": "You may use any variable made available by the trading engine, as explained on the accessing runtime data page." + }, + { + "style": "Text", + "text": "A simple JavaScript example:" + }, + { + "style": "Text", + "text": "A bit of very basic JavaScript, introducing conditional statements, allows more intelligence. For example, in this case, we ask if the proposed formula results in a number greater than the current stop loss value; if it does, then the proposed formula is used; if not, then the current stop loss value is left as is." + }, + { + "style": "Text", + "text": "This is—basically—a trailing stop loss 2% below the moving average that may go higher if the moving average goes up, but it may never come down—thanks to the use of the IF ELSE clause." + }, + { + "style": "Text", + "text": "if (chart.at01hs.bollingerBand.movingAverage * 0.98 > tradingEngine.current.position.stopLoss.value)" + }, + { + "style": "Text", + "text": " {chart.at01hs.bollingerBand.movingAverage * 0.98}" + }, + { + "style": "Text", + "text": " else" + }, + { + "style": "Text", + "text": " {tradingEngine.current.position.stopLoss.value}" + }, + { + "style": "Text", + "text": "For developers:" + }, + { + "style": "Text", + "text": "To build more complex logic within a formula, create a function that implements the logic and returns a numerical value, and then call the function:" + }, + { + "style": "Text", + "text": "function orderRate() {" + }, + { + "style": "Text", + "text": " const ORDER_STEP_NUMBER = 1 // Secuential step number, starting with 1 from the closest to the price." + }, + { + "style": "Text", + "text": " const BUY_SELL_SIGN = -1 // 1 for buy orders, -1 for sell orders." + }, + { + "style": "Text", + "text": " const STEP_SEPARATION = 0.15 // % of separation of stair steps between them." + }, + { + "style": "Text", + "text": " const BASE_FACTOR = 0.2 // % above or below bollinger band without bias." + }, + { + "style": "Text", + "text": " const BIAS_FACTOR = 0.3 // % to move the whole stair of orders up or down depending on the bias." + }, + { + "style": "Text", + "text": " const BAND_RATE = chart.at01min.bollingerBand.lowerBand // Upper Bollinger Band for sell orders, and Lower for buy orders." + }, + { + "style": "Text", + "text": " let inbalance = tradingEngine.current.episode.episodeBaseAsset.beginBalance.value - tradingEngine.current.episode.episodeBaseAsset.balance.value" + }, + { + "style": "Text", + "text": " let BIAS_SIGN" + }, + { + "style": "Text", + "text": " if (inbalance === 0) {" + }, + { + "style": "Text", + "text": " BIAS_SIGN = 0" + }, + { + "style": "Text", + "text": " }" + }, + { + "style": "Text", + "text": " if (inbalance < 0) {" + }, + { + "style": "Text", + "text": " BIAS_SIGN = + 1" + }, + { + "style": "Text", + "text": " }" + }, + { + "style": "Text", + "text": " if (inbalance > 0) {" + }, + { + "style": "Text", + "text": " BIAS_SIGN = - 1" + }, + { + "style": "Text", + "text": " }" + }, + { + "style": "Text", + "text": " let rate = BAND_RATE + BUY_SELL_SIGN BAND_RATE (BASE_FACTOR + ORDER_STEP_NUMBER STEP_SEPARATION + BIAS_SIGN BIAS_FACTOR) / 100" + }, + { + "style": "Text", + "text": " return rate" + }, + { + "style": "Text", + "text": "}" + }, + { + "style": "Text", + "text": "orderRate()" }, { "style": "Title", @@ -7471,7 +7111,7 @@ }, { "style": "Text", - "text": "To add the formula node, select Add Missing Items on the parent node menu." + "text": "To add a formula, select Add Formula on the corresponding parent node menu." } ] }, @@ -7524,10 +7164,6 @@ "style": "Text", "text": "This is an example of a procedure loop code snippet, in particular, the code that initializes the array used in the calculation of the Popular SMAs product of the Simple Moving Average (SMA) indicator." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "/ Initialization Code. /" @@ -7536,10 +7172,6 @@ "style": "Text", "text": "variable.last200 = []" }, - { - "style": "Text", - "text": "" - }, { "style": "Title", "text": "Adding a Procedure Initialization node" @@ -7633,14 +7265,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -7691,10 +7315,6 @@ "style": "Text", "text": "Select Configure Plotter on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -7707,13 +7327,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name of the plotter as it is used within the bot's code." + "text": "codeName is the name of the plotter as it is used within the bot's code." } ] }, @@ -8127,7 +7743,7 @@ }, { "style": "Text", - "text": "To switch from one phase to the next phase in the sequence, the next phase event is used. When the situation described in the next phase event validates true, the switch occurs and the next phase becomes the active phase." + "text": "To switch from one phase to the next phase in the sequence, the next phase event is used. When the situation described in the next phase event validates true, the switch occurs and the next phase becomes the active phase." }, { "style": "Text", @@ -8219,7 +7835,7 @@ }, { "style": "Note", - "text": "A move-to-phase event must reference a phase node. When the situation in the move-to-phase event evaluates true the management shifts to the referenced phase." + "text": "A move-to-phase event must reference a phase node. When the situation in the move-to-phase event evaluates true the management shifts to the referenced phase." }, { "style": "Title", @@ -8313,53 +7929,29 @@ "style": "Text", "text": "If you are trading the whole balance assigned to the trading system on each position, then your target size will look like this:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.episode.episodeBaseAsset.balance.value" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "... or..." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.episode.episodeQuotedAsset.balance.value" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "If you are not trading the entire balance on each position, then you may define the target size as a percentage of the balances, or in any other way you may see fit. For such cases, the following formula may be of use for the close stage target size:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngine.current.strategyOpenStage.stageBaseAsset.sizeFilled.value - tradingEngine.current.strategyOpenStage.stageBaseAsset.feesPaid.value" }, { "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "Of course, you may need to adjust the above to use stageBaseAsset or stageQuotedAsset, as required. In short, the formula returns the amount of the asset obtained by the transactions triggered during the open stage, minus the fees (and slippage, which is already subtracted from the size filled)." + "text": "Of course, you may need to adjust the above to use stageBaseAsset or stageQuotedAsset, as required. In short, the formula returns the amount of the asset obtained by the transactions triggered during the open stage, minus the fees (and slippage, which is already subtracted from the size filled)." }, { "style": "Title", @@ -8443,7 +8035,7 @@ }, { "style": "Text", - "text": "For example, tradingEngine.current.position.entryTargetRate.value or tradingEngine.current.position.exitTargetRate.value." + "text": "For example, tradingEngine.current.position.entryTargetRate.value or tradingEngine.current.position.exitTargetRate.value." }, { "style": "Text", @@ -8459,11 +8051,11 @@ }, { "style": "Text", - "text": "The horizontal segment marks the target rate defined at the open stage. If you are using market orders to take the position, then using tradingEngine.current.episode.candle.close.value may offer a good representation of the rate of market orders. If you are using limit orders, then you may decide at which rate you wish to take the position, and the horizontal segment of the triangle will match the chosen rate." + "text": "The horizontal segment marks the target rate defined at the open stage. If you are using market orders to take the position, then using tradingEngine.current.episode.candle.close.value may offer a good representation of the rate of market orders. If you are using limit orders, then you may decide at which rate you wish to take the position, and the horizontal segment of the triangle will match the chosen rate." }, { "style": "Text", - "text": "The third vertex of the triangle points to a [datetime, rate] coordinate. The datetime is given by the candle on which the manage stage closes, that is, the candle at which the stop loss or take profit targets are hit. The rate portion of the coordinate is given by the target rate defined in the close stage." + "text": "The third vertex of the triangle points to a [datetime, rate] coordinate. The datetime is given by the candle on which the manage stage closes, that is, the candle at which the stop loss or take profit targets are hit. The rate portion of the coordinate is given by the target rate defined in the close stage." }, { "style": "Text", @@ -8491,16 +8083,12 @@ }, { "style": "Text", - "text": "The difference in rate between the moment in time the target is hit and the time the 1-hour candle closes may be significant. As a result, if the close stage target rate is defined as tradingEngine.current.episode.candle.close.value, the resulting simulation may show significant slippage, and diverge from what the trade would look like if running on the 1-minute time frame, like you would when trading live." + "text": "The difference in rate between the moment in time the target is hit and the time the 1-hour candle closes may be significant. As a result, if the close stage target rate is defined as tradingEngine.current.episode.candle.close.value, the resulting simulation may show significant slippage, and diverge from what the trade would look like if running on the 1-minute time frame, like you would when trading live." }, { "style": "Text", "text": "To solve the above issue, you may use a more ellaborate formula for the target rate in the close stage:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "targetRate()" @@ -8569,10 +8157,6 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "This formula discriminates among three possible outcomes:" @@ -8711,10 +8295,6 @@ "style": "Text", "text": "To configure the execution algorithm node, select Configure on the menu." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -8727,13 +8307,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "percentageOfStageTargetSize is the definition of how much of the target size of the whole stage will be handled by the one specific execution algorithm, expressed as a percentage of the total target size. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the algorithm will not be executed." + "text": "percentageOfStageTargetSize is the definition of how much of the target size of the whole stage will be handled by the one specific execution algorithm, expressed as a percentage of the total target size. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the algorithm will not be executed." } ] }, @@ -8775,16 +8351,12 @@ }, { "style": "Text", - "text": "algorithmSize = targetSize * percentageOfStageTargetSize / 100" + "text": "algorithmSize = targetSize * percentageOfStageTargetSize / 100" }, { "style": "Text", "text": "The actual code:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "let algorithmSizeInBaseAsset = tradingEngineStage.stageBaseAsset.targetSize.value * executionAlgorithm.config.percentageOfStageTargetSize / 100" @@ -8793,10 +8365,6 @@ "style": "Text", "text": "let algorithmSizeInQuotedAsset = tradingEngineStage.stageQuotedAsset.targetSize.value * executionAlgorithm.config.percentageOfStageTargetSize / 100" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Similarly, the size of an order is defined as a percentage of the size that the particular algorithm is allowed to execute (see the configuration)." @@ -8807,24 +8375,16 @@ }, { "style": "Text", - "text": "orderSize = algorithmSize * percentageOfAlgorithmSize / 100" + "text": "orderSize = algorithmSize * percentageOfAlgorithmSize / 100" }, { "style": "Text", "text": "The actual code:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "tradingEngineOrder.orderBaseAsset.size.value = algorithmSizeInBaseAsset * tradingSystemOrder.config.percentageOfAlgorithmSize / 100" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "Because each execution algorithm may define multiple orders, the typical scenario is that all orders defined within an algorithm add up to 100% of the size allocated to the algorithm." @@ -8857,10 +8417,6 @@ "style": "Text", "text": "The simplified logic for non-coders:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "if ( targetSize + sizePlaced > targetSize )" @@ -8869,18 +8425,10 @@ "style": "Text", "text": " { orderSize = targetSize - sizePlaced }" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "The actual code:" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "if (" @@ -8905,10 +8453,6 @@ "style": "Text", "text": " }" }, - { - "style": "Text", - "text": "" - }, { "style": "Note", "text": "See the order's configuration to learn how to set up the order size." @@ -8977,10 +8521,6 @@ "style": "Text", "text": "To configure the market buy order node, select Configure on the menu." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -8998,16 +8538,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." }, { "style": "List", - "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." - }, - { - "style": "List", - "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." + "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } ] }, @@ -9039,10 +8575,6 @@ "style": "Text", "text": "To configure the market sell order node, select Configure on the menu." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9060,16 +8592,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." }, { "style": "List", - "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." - }, - { - "style": "List", - "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." + "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } ] }, @@ -9125,10 +8653,6 @@ "style": "Text", "text": "To configure the limit buy order node, select Configure on the menu." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9146,16 +8670,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." }, { "style": "List", - "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." - }, - { - "style": "List", - "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." + "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } ] }, @@ -9187,10 +8707,6 @@ "style": "Text", "text": "To configure the limit sell order node, select Configure on the menu." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9208,16 +8724,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." }, { "style": "List", - "text": "percentageOfAlgorithmSize is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the order will not be executed." - }, - { - "style": "List", - "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." + "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } ] }, @@ -9235,11 +8747,11 @@ }, { "style": "Text", - "text": "An order defined in an execution algorithm will be executed only if the event evaluates true." + "text": "An order defined in an execution algorithm will be executed only if the event evaluates true." }, { "style": "Text", - "text": "If you wish orders to be placed as defined immediately after the take position event has been triggered, the use the statement true your only create order event condition." + "text": "If you wish orders to be placed as defined immediately after the take position event has been triggered, the use the statement true your only create order event condition." }, { "style": "Title", @@ -9335,10 +8847,6 @@ "style": "Text", "text": "To configure the simulated partial fill node, select Configure on the menu." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9351,13 +8859,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "fillProbability indicates the probability of an order getting filled upon each tag of the price. Values may range from 0 to 1. The value 0 indicates that there are 0% chances of the order getting filled. With such a setting, the order will never get filled in the simulation. The value 1 indicates that there is a 100% probability of the order getting filled. With such a setting, the order is filled upon the first tag of the price. A value of 0.5 indicates a 50% probability, thus, it takes two tags of the price for the order to fill completely with such a setting." + "text": "fillProbability indicates the probability of an order getting filled upon each tag of the price. Values may range from 0 to 1. The value 0 indicates that there are 0% chances of the order getting filled. With such a setting, the order will never get filled in the simulation. The value 1 indicates that there is a 100% probability of the order getting filled. With such a setting, the order is filled upon the first tag of the price. A value of 0.5 indicates a 50% probability, thus, it takes two tags of the price for the order to fill completely with such a setting." } ] }, @@ -9419,10 +8923,6 @@ "style": "Text", "text": "To configure the simulated fees paid node, select Configure on the menu." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9435,13 +8935,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "percentage is the percentage to be applied to calculate the fees for the specific order." + "text": "percentage is the percentage to be applied to calculate the fees for the specific order." } ] }, @@ -9656,10 +9152,6 @@ "style": "Text", "text": "Select Configure Crypto Exchange on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9705,16 +9197,12 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "codeName is the name of the exchange as handled in the code of the system." }, { "style": "List", - "text": "codeName is the name of the exchange as handled in the code of the system." - }, - { - "style": "List", - "text": "API holds a series of definitions used only in the case in which the sensor bot fetches trades (using the Historic-Trades process) instead of the OHLCV process that fetches one-minute candles and is the current default. In such a case, finding the right set of parameters to work with a specific exchange may be challenging, nd involves understanding how the exchanges API and the CCXT Library API work. In other words, there is no hard rule as of what each of the values should be. Determining each of this values requires exploring the exchange's API documentation, as well as the documentation of the CCXT Library." + "text": "API holds a series of definitions used only in the case in which the sensor bot fetches trades (using the Historic-Trades process) instead of the OHLCV process that fetches one-minute candles and is the current default. In such a case, finding the right set of parameters to work with a specific exchange may be challenging, nd involves understanding how the exchanges API and the CCXT Library API work. In other words, there is no hard rule as of what each of the values should be. Determining each of this values requires exploring the exchange's API documentation, as well as the documentation of the CCXT Library." } ] }, @@ -9742,10 +9230,6 @@ "style": "Text", "text": "Select Configure Exchange Assets on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9760,11 +9244,7 @@ }, { "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": " addMissingAssets acts as a filter to determine which assets of a (potentially long) list of assets listed at the exchange will be added when the Add Missing Assets* option in the menu is used. Because many exchanges do not offer a list of assets, the system fetches assets from actual markets (pairs) listed at the exchange. You may add missing assets filtered by the quotedAsset or by the baseAsset. For example, the above configuration would add all assets listed in markets in which BTC is the quoted asset." + "text": " addMissingAssets acts as a filter to determine which assets of a (potentially long) list of assets listed at the exchange will be added when the Add Missing Assets* option in the menu is used. Because many exchanges do not offer a list of assets, the system fetches assets from actual markets (pairs) listed at the exchange. You may add missing assets filtered by the quotedAsset or by the baseAsset. For example, the above configuration would add all assets listed in markets in which BTC is the quoted asset." } ] }, @@ -9796,10 +9276,6 @@ "style": "Text", "text": "Select Configure Asset on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -9814,11 +9290,7 @@ }, { "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": " codeName is the ticker of the asset as listed by the exchange (i.e.:* BTC, BTH, ETH, LTC, BNB, USDT, USD, etc.)" + "text": " codeName is the ticker of the asset as listed by the exchange (i.e.:* BTC, BTH, ETH, LTC, BNB, USDT, USD, etc.)" }, { "style": "Note", @@ -9988,10 +9460,6 @@ "style": "Text", "text": "Select Configure Key on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -10008,13 +9476,9 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "codeName is the name or label of your key, as supplied by the exchange." + "text": "codeName is the name or label of your key, as supplied by the exchange." }, { "style": "Warning", @@ -10049,14 +9513,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -10080,10 +9536,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": " {" @@ -10161,40 +9613,36 @@ "text": " }" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "backgroundColor refers to the background of the design space (see table below)." }, { "style": "List", - "text": "backgroundColor refers to the background of the design space (see table below)." - }, - { - "style": "List", - "text": "node refers to all nodes in the design space." + "text": "node refers to all nodes in the design space." }, { "style": "Text", - "text": " * imageSize refers to the size of icons representing nodes." + "text": " * imageSize refers to the size of icons representing nodes." }, { "style": "List", - "text": "type refers to the type of node, as indicated by the string of text below each node." + "text": "type refers to the type of node, as indicated by the string of text below each node." }, { "style": "List", - "text": "name refers to the name or label of the node, as indicated above the node." + "text": "name refers to the name or label of the node, as indicated above the node." }, { "style": "List", - "text": "menuItem refers to items on the right-hand side of the menu." + "text": "menuItem refers to items on the right-hand side of the menu." }, { "style": "Text", - "text": " * fontSize refers to the size of the font of the string of text." + "text": " * fontSize refers to the size of the font of the string of text." }, { "style": "Text", - "text": " * imageSize refers to the size of the icon illustrating the menu item." + "text": " * imageSize refers to the size of the icon illustrating the menu item." }, { "style": "Text", @@ -10206,63 +9654,63 @@ }, { "style": "Text", - "text": " DARK 48, 48, 54   " + "text": " DARK 48, 48, 54   " }, { "style": "Text", - "text": " LIGHT 234, 226, 222   " + "text": " LIGHT 234, 226, 222   " }, { "style": "Text", - "text": " GREY 150, 150, 150   " + "text": " GREY 150, 150, 150   " }, { "style": "Text", - "text": " LIGHT_GREY 247, 247, 247   " + "text": " LIGHT_GREY 247, 247, 247   " }, { "style": "Text", - "text": " WHITE 255, 255, 255   " + "text": " WHITE 255, 255, 255   " }, { "style": "Text", - "text": " BLACK 0, 0, 0   " + "text": " BLACK 0, 0, 0   " }, { "style": "Text", - "text": " GOLDEN_ORANGE 240, 162, 2   " + "text": " GOLDEN_ORANGE 240, 162, 2   " }, { "style": "Text", - "text": " RUSTED_RED 204, 88, 53   " + "text": " RUSTED_RED 204, 88, 53   " }, { "style": "Text", - "text": " GREEN 188, 214, 67   " + "text": " GREEN 188, 214, 67   " }, { "style": "Text", - "text": " RED 223, 70, 60   " + "text": " RED 223, 70, 60   " }, { "style": "Text", - "text": " PATINATED_TURQUOISE 27, 153, 139   " + "text": " PATINATED_TURQUOISE 27, 153, 139   " }, { "style": "Text", - "text": " TITANIUM_YELLOW 244, 228, 9   " + "text": " TITANIUM_YELLOW 244, 228, 9   " }, { "style": "Text", - "text": " MANGANESE_PURPLE 91,80, 122   " + "text": " MANGANESE_PURPLE 91,80, 122   " }, { "style": "Text", - "text": " TURQUOISE 74, 207, 217   " + "text": " TURQUOISE 74, 207, 217   " }, { "style": "Text", - "text": " DARK_TURQUOISE 2, 149, 170   " + "text": " DARK_TURQUOISE 2, 149, 170   " }, { "style": "Text", @@ -10290,10 +9738,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -10346,41 +9790,37 @@ "style": "Text", "text": "}" }, + { + "style": "List", + "text": "node refers to every node in the design space." + }, { "style": "Text", - "text": "" + "text": " * radiusPercentage is the radius of the circular nodes' menu applied as a percentage of an arbitrary default radius." + }, + { + "style": "Text", + "text": " * massPercentage is the refernce mass of nodes that affect the attraction and repulsion of the environment's pysics whe the physics setting is set to true." + }, + { + "style": "Text", + "text": " * menuItem refers to the items on the right-hand side of nodes' menus." + }, + { + "style": "Text", + "text": " * widthPercentage is the reference width of an item applied as a percentage of an arbitrary default width." + }, + { + "style": "Text", + "text": " * heightPercentage is the reference height of an item applied as a percentage of an arbitrary default height." + }, + { + "style": "Text", + "text": " * radiusPercentage is the reference radious of the circular matrix that governs the distribution of items in the circular menu. Larger numbers cause items to spread appart while smaller numbers makes items lie closer to each other." }, { "style": "List", - "text": "node refers to every node in the design space." - }, - { - "style": "Text", - "text": " * radiusPercentage is the radius of the circular nodes' menu applied as a percentage of an arbitrary default radius." - }, - { - "style": "Text", - "text": " * massPercentage is the refernce mass of nodes that affect the attraction and repulsion of the environment's pysics whe the physics setting is set to true." - }, - { - "style": "Text", - "text": " * menuItem refers to the items on the right-hand side of nodes' menus." - }, - { - "style": "Text", - "text": " * widthPercentage is the reference width of an item applied as a percentage of an arbitrary default width." - }, - { - "style": "Text", - "text": " * heightPercentage is the reference height of an item applied as a percentage of an arbitrary default height." - }, - { - "style": "Text", - "text": " * radiusPercentage is the reference radious of the circular matrix that governs the distribution of items in the circular menu. Larger numbers cause items to spread appart while smaller numbers makes items lie closer to each other." - }, - { - "style": "List", - "text": "physics determines wether the environment is static (false) or dynamic (true). When physics is set to true, nodes in the design space are affected by th gravitational pull and repulsion of other nodes." + "text": "physics determines wether the environment is static (false) or dynamic (true). When physics is set to true, nodes in the design space are affected by th gravitational pull and repulsion of other nodes." } ] }, @@ -10555,10 +9995,6 @@ "style": "Text", "text": "Select Configure Rate Scale on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -10584,24 +10020,20 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "minValue is a date in the Epoch time format that represents the value of the scale at the left border of the chart." }, { "style": "List", - "text": "minValue is a date in the Epoch time format that represents the value of the scale at the left border of the chart." + "text": "maxValue is a date in the Epoch time format that represents the value of the scale at the right border of the chart." }, { "style": "List", - "text": "maxValue is a date in the Epoch time format that represents the value of the scale at the right border of the chart." + "text": "autoMinScale sets the mode of the scale for the minimum value; true sets the value to automatic, false sets the value to manual." }, { "style": "List", - "text": "autoMinScale sets the mode of the scale for the minimum value; true sets the value to automatic, false sets the value to manual." - }, - { - "style": "List", - "text": "autoMaxScale sets the mode of the scale for the maximum value; true sets the value to automatic, false sets the value to manual." + "text": "autoMaxScale sets the mode of the scale for the maximum value; true sets the value to automatic, false sets the value to manual." }, { "style": "Title", @@ -10733,10 +10165,6 @@ "style": "Text", "text": "Select Configure Rate Scale on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -10762,24 +10190,20 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "minValue is a numerical value that represents the value of the scale at the bottom of the chart." }, { "style": "List", - "text": "minValue is a numerical value that represents the value of the scale at the bottom of the chart." + "text": "maxValue is a numerical value that represents the value of the scale at the top of the chart." }, { "style": "List", - "text": "maxValue is a numerical value that represents the value of the scale at the top of the chart." + "text": "autoMinScale sets the mode of the scale for the minimum value; true sets the value to automatic, false sets the value to manual." }, { "style": "List", - "text": "autoMinScale sets the mode of the scale for the minimum value; true sets the value to automatic, false sets the value to manual." - }, - { - "style": "List", - "text": "autoMaxScale sets the mode of the scale for the maximum value; true sets the value to automatic, false sets the value to manual." + "text": "autoMaxScale sets the mode of the scale for the maximum value; true sets the value to automatic, false sets the value to manual." }, { "style": "Title", @@ -10875,10 +10299,6 @@ "style": "Text", "text": "Select Configure Frame Scale on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -10891,17 +10311,13 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "List", - "text": "value can be any of the time frames supported by the system:" + "text": "value can be any of the time frames supported by the system:" }, { "style": "Text", - "text": " * 01-hs, 02-hs, 03-hs, 04-hs, 06-hs, 08-hs, 12-hs, and 24-hs." + "text": " * 01-hs, 02-hs, 03-hs, 04-hs, 06-hs, 08-hs, 12-hs, and 24-hs." }, { "style": "Note", @@ -10979,10 +10395,6 @@ "style": "Text", "text": "Select Configure Layers Manager in the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -11016,20 +10428,16 @@ "text": "}" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "visibleLayers keeps track of how many layers the managers is rolled to, that is, how many layers it is displaying." }, { "style": "List", - "text": "visibleLayers keeps track of how many layers the managers is rolled to, that is, how many layers it is displaying." + "text": "panelLocation keeps track of the position of the panel relative to the four screen corners." }, { "style": "List", - "text": "panelLocation keeps track of the position of the panel relative to the four screen corners." - }, - { - "style": "List", - "text": "label2FontSize allows adjusting the font size of the second-order label of each layer, displaying the name of the exchange and market." + "text": "label2FontSize allows adjusting the font size of the second-order label of each layer, displaying the name of the exchange and market." } ] }, @@ -11065,10 +10473,6 @@ "style": "Text", "text": "Select Configure Layer on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -11087,15 +10491,11 @@ }, { "style": "Text", - "text": "" + "text": " status may be on or off* and refers to the layer being visible or not on the charts." }, { "style": "Text", - "text": " status may be on or off* and refers to the layer being visible or not on the charts." - }, - { - "style": "Text", - "text": " showPanels may be true or false; true shows the plotter panel that may be associated with the data product as per the plotter module definitions; false* makes panels invisible." + "text": " showPanels may be true or false; true shows the plotter panel that may be associated with the data product as per the plotter module definitions; false* makes panels invisible." }, { "style": "Title", @@ -11211,14 +10611,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" - }, { "style": "Title", "text": "Running a Data Mine Tasks node" @@ -11265,14 +10657,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" - }, { "style": "Title", "text": "Running a Trading Mine Tasks node" @@ -11520,14 +10904,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -11613,14 +10989,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -11853,14 +11221,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -11907,14 +11267,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -11960,14 +11312,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -11998,14 +11342,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12040,14 +11376,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12070,14 +11398,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12100,14 +11420,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12130,14 +11442,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12160,14 +11464,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12190,14 +11486,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12220,14 +11508,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12258,14 +11538,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12279,7 +11551,7 @@ }, { "style": "Text", - "text": "Plugin files distributed with the system are stored in the corresponding folders on the following path: \\Projects\\[ProjectName]\\Plugins\\." + "text": "Plugin files distributed with the system are stored in the corresponding folders on the following path: \\Projects\\[ProjectName]\\Plugins\\." }, { "style": "Text", @@ -12312,14 +11584,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12350,14 +11614,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12409,10 +11665,6 @@ "style": "Text", "text": "Select Configure on the menu to access the configuration." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{" @@ -12565,93 +11817,89 @@ "style": "Text", "text": "}" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "{% include tip.html content=\"Configuration items are listed in the order of appearance in the HTML layout, that is, the sequence of HTML elements mentioned earlier.\" %}" }, { "style": "List", - "text": "title is the

tag, the main title of the page." + "text": "title is the

tag, the main title of the page." }, { "style": "List", - "text": "summary is a block of text preceded with the word Summary." + "text": "summary is a block of text preceded with the word Summary." }, { "style": "List", - "text": "subTitle is the

tag, the secondary title of the page." + "text": "subTitle is the

tag, the secondary title of the page." }, { "style": "List", - "text": "gif is the name of an image in the GIF format. Do not include the .gif extension in the configuration, and make sure that the name of the file features the extension in lowercase. The file must be stored in the \\Projects\\[Project-Name]\\Gifsfolder. The optimum size of the image is 400 px in width. For a step showing only a gif image, use 580 px for the height." + "text": "gif is the name of an image in the GIF format. Do not include the .gif extension in the configuration, and make sure that the name of the file features the extension in lowercase. The file must be stored in the \\Projects\\[Project-Name]\\Gifsfolder. The optimum size of the image is 400 px in width. For a step showing only a gif image, use 580 px for the height." }, { "style": "List", - "text": "image is the name of one of the icons stored in the \\Projects\\[Project-Name]\\Iconsfolder, without the extension. When the configuration exists, the icon is placed within a table, on the left-hand side of the text block featured in the definition field. When there is no icon, the definition occupies the full width." + "text": "image is the name of one of the icons stored in the \\Projects\\[Project-Name]\\Iconsfolder, without the extension. When the configuration exists, the icon is placed within a table, on the left-hand side of the text block featured in the definition field. When there is no icon, the definition occupies the full width." }, { "style": "List", - "text": "definition is a block of text in bold style ( HTML tag)." + "text": "definition is a block of text in bold style ( HTML tag)." }, { "style": "List", - "text": "bulletListIntro is a block of text that serves as an introduction to the array of bullet points below." + "text": "bulletListIntro is a block of text that serves as an introduction to the array of bullet points below." }, { "style": "List", - "text": "bulletArray is the definition of any number of bullet points. The first field on each bullet is rendered in bold style and the second, in plain style. If the fields are left empty, the bullet list will still be included in the HTML, therefore, if you don't want bullets you must delete the whole definition of the bullet array from the configuration." + "text": "bulletArray is the definition of any number of bullet points. The first field on each bullet is rendered in bold style and the second, in plain style. If the fields are left empty, the bullet list will still be included in the HTML, therefore, if you don't want bullets you must delete the whole definition of the bullet array from the configuration." }, { "style": "List", - "text": "paragraph1 is a regular block of text." + "text": "paragraph1 is a regular block of text." }, { "style": "List", - "text": "callOut is a block of text in bold style with a green border and the left-hand side of the block." + "text": "callOut is a block of text in bold style with a green border and the left-hand side of the block." }, { "style": "List", - "text": "externalLink allows you to set up a link that opens in a new tab at the end of the callOut block. Enter the URL in the first field and the anchor text in the second." + "text": "externalLink allows you to set up a link that opens in a new tab at the end of the callOut block. Enter the URL in the first field and the anchor text in the second." }, { "style": "List", - "text": "paragraph2 is a regular block of text." + "text": "paragraph2 is a regular block of text." }, { "style": "List", - "text": "note is a block of text within a blue box preceded with the string Note:." + "text": "note is a block of text within a blue box preceded with the string Note:." }, { "style": "List", - "text": "tip is a block of text within a green box preceded with the string Tip:." + "text": "tip is a block of text within a green box preceded with the string Tip:." }, { "style": "List", - "text": "important is a block of text within a yellow box preceded with the string Important:." + "text": "important is a block of text within a yellow box preceded with the string Important:." }, { "style": "List", - "text": "warning is a block of text within a red box preceded with the string Warning:." + "text": "warning is a block of text within a red box preceded with the string Warning:." }, { "style": "List", - "text": "position determines the position of the floating HTML. There are three alternatives: Left, Right, or leave the field empty to position the page in the center of the screen." + "text": "position determines the position of the floating HTML. There are three alternatives: Left, Right, or leave the field empty to position the page in the center of the screen." }, { "style": "List", - "text": "slider determines the position of the horizontal slider. There are four alternatives: toTop, Right, or leave the field empty to position the page in the center of the screen." + "text": "slider determines the position of the horizontal slider. There are four alternatives: toTop, Right, or leave the field empty to position the page in the center of the screen." }, { "style": "List", - "text": "pressButton allows you to forcefully Stop the tutorial, go to the Next step, go to the Previous step, or Skip a step. When a step is loaded and one of these options is configured in this field, the action is applied immediately." + "text": "pressButton allows you to forcefully Stop the tutorial, go to the Next step, go to the Previous step, or Skip a step. When a step is loaded and one of these options is configured in this field, the action is applied immediately." }, { "style": "List", - "text": "documentationURL opens the Superalgos Documentation in the URL you configure. Use the complete URL, including the https:// protocol header." + "text": "documentationURL opens the Superalgos Documentation in the URL you configure. Use the complete URL, including the https:// protocol header." } ] }, @@ -12717,18 +11965,10 @@ "style": "Text", "text": "Setting up a reference to any node in the workspace and using the below parameter makes the step load next to the referenced node." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": " \"positionAtReferenceParent\": true," }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "

Messages

" @@ -12737,10 +11977,6 @@ "style": "Text", "text": "Setting up a reference to any node in the workspace and using the below parameters allows placing different types of messages on the referenced node." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": " \"setErrorMessageReferenceParent\": \"This is a simulated error message!\"" @@ -12761,10 +11997,6 @@ "style": "Text", "text": " \"setStatusReferenceParent\": \"This is a simulated status message!\"" }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": "

Centering and Zooming Into a Time Machine

" @@ -12789,10 +12021,6 @@ "style": "Text", "text": " \"repositionAtTimeMachineReferenceParent\": true," }, - { - "style": "Text", - "text": "
" - }, { "style": "Text", "text": "

Pressing Keys When on a Time Machine

" @@ -12801,10 +12029,6 @@ "style": "Text", "text": "Setting up a reference to a time machine node in the charting space hierarchy and using the below parameters allows simulating the pressing of relevant key combinations when on a time machine." }, - { - "style": "Text", - "text": "" - }, { "style": "Text", "text": " \"keyPressedTimeMachineReferenceParent\": {" @@ -12830,16 +12054,12 @@ "text": " }" }, { - "style": "Text", - "text": "" + "style": "List", + "text": "shiftKey, ctrlKey, and metaKey (Mac OS equivalent to Control) may be true or false." }, { "style": "List", - "text": "shiftKey, ctrlKey, and metaKey (Mac OS equivalent to Control) may be true or false." - }, - { - "style": "List", - "text": "key may be any letter or number." + "text": "key may be any letter or number." }, { "style": "Text", @@ -12847,11 +12067,7 @@ }, { "style": "Text", - "text": "The example below changes the configuration of the three different scale nodes under a time machine. In this case, the time machine is the node referenced, the nodePath is the path of the node whose configuration must be changed relative to the referenceParent, and the properties parameter is the actual configuration to be set." - }, - { - "style": "Text", - "text": "" + "text": "The example below changes the configuration of the three different scale nodes under a time machine. In this case, the time machine is the node referenced, the nodePath is the path of the node whose configuration must be changed relative to the referenceParent, and the properties parameter is the actual configuration to be set." }, { "style": "Text", @@ -12956,10 +12172,6 @@ { "style": "Text", "text": " ]" - }, - { - "style": "Text", - "text": "" } ] }, @@ -12998,14 +12210,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -13044,14 +12248,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] }, @@ -13086,14 +12282,6 @@ { "style": "Text", "text": "Select Configure on the menu to access the configuration." - }, - { - "style": "Text", - "text": "" - }, - { - "style": "Text", - "text": "" } ] } diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js index d880c8bbe..e8750bf08 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js @@ -52,8 +52,8 @@ function newSuperalgosDocSpace() { function setUpContextMenu() { window.contextMenu = { editParagraph: editParagraph, - toJsCode: toJsCode, - toJsonCode: toJsonCode, + toJavascript: toJavascript, + toJson: toJson, toText: toText, toTitle: toTitle, toSubtitle: toSubtitle, @@ -93,6 +93,12 @@ function newSuperalgosDocSpace() { if (selectedParagraph.id.indexOf('warning') >= 0) { extraClassName = ' ' + 'docs-alert-warning' } + if (selectedParagraph.id.indexOf('javascript') >= 0) { + extraClassName = ' ' + 'language-javascript' + } + if (selectedParagraph.id.indexOf('json') >= 0) { + extraClassName = ' ' + 'language-json' + } textArea = document.createElement('textarea'); textArea.id = "textArea"; @@ -109,11 +115,11 @@ function newSuperalgosDocSpace() { } } - function toJsCode() { + function toJavascript() { } - function toJsonCode() { + function toJson() { }