From 0404aa110f667cd53fe87a109cadf06d98614f4b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 10 Dec 2020 16:41:27 +0100 Subject: [PATCH] Titles and Subtitles --- Client/WebServer/index.html | 6 +- Projects/Superalgos/Schemas/DocSchema.json | 5560 ++++++++++------- .../UI/Spaces/Docs-Space/DocsSpace.js | 100 +- 3 files changed, 3397 insertions(+), 2269 deletions(-) diff --git a/Client/WebServer/index.html b/Client/WebServer/index.html index a4f8c342c..26c3eb06f 100644 --- a/Client/WebServer/index.html +++ b/Client/WebServer/index.html @@ -109,14 +109,16 @@ diff --git a/Projects/Superalgos/Schemas/DocSchema.json b/Projects/Superalgos/Schemas/DocSchema.json index 842a0bdbc..6692ea77a 100644 --- a/Projects/Superalgos/Schemas/DocSchema.json +++ b/Projects/Superalgos/Schemas/DocSchema.json @@ -2,7 +2,11 @@ { "type": "Superalgos Project", "definition": "The Superalgos Project hierarchy governs the assets that relate to Superalgos. In its current state, it serves the purpose of spawning hierarchies.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Superalgos Project node works" + }, { "style": "Text", "text": "Superalgos is a multi-project platform meaning that other crypto-projects may be integrated. It is in this context that project-specific hierarchies exist." @@ -10,15 +14,19 @@ { "style": "Text", "text": "A crypto-project integration means that Superalgos users will able to connect to blockchain nodes from within Superalgos, exposing the blockchain data to the rest of the Superalgos infrastructure. Users will be able to mine the node's data, build indicators, use them from within trading systems, and visualize blockchain information on the charts—among other things." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Superalgos Project node" + }, { "style": "Text", "text": "To add the superalgos project node, select Add Missing Projects on the workspace node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Superalgos Project node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -31,8 +39,7 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Project Definition" @@ -40,14 +47,19 @@ { "type": "Spaces", "definition": "Spaces refers to the different types of spaces for which definitions exist in the form of hierarchies. At this stage, the node may spawn the Design Space and the Charting Space hierarchies.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Spaces node" + }, { "style": "Text", "text": "To add the spaces node, select Add Spaces on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Spaces node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -60,20 +72,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Mines", "definition": "Mines refers to the different types of mines for which definitions exist in the form of hierarchies. At this stage, the node may spawn Data Mine, Trading Mine, and Learning Mine hierarchies.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Mines node" + }, { "style": "Text", "text": "To add the mines node, select Add Mines on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Mines node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -86,20 +102,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Other Hierarchies", "definition": "Other hierarchies refers to hierarchies other than those defining spaces and mines. At this stage, the node may spawn Trading System, Network, Super Scripts, Trading Engine, and Tutorial hierarchies.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Other Hierarchies node" + }, { "style": "Text", "text": "To add the other hierarchies node, select Add Other Hierarchies on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Other Hierarchies node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -112,8 +132,7 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Workspace" @@ -121,7 +140,11 @@ { "type": "Plotter Module", "definition": "A plotter module is a device within a plotter that contains the definitions to create the visualization for a product definition.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Plotter Module node works" + }, { "style": "Text", "text": "A single plotter may have several modules. Different modules may be used to plot each product of the bot, or as best suits the expected use-pattern." @@ -137,15 +160,19 @@ { "style": "Text", "text": "" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Plotter Module node" + }, { "style": "Text", "text": "To add a plotter module, select Add Plotter Module on the plotter node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plotter Module node" + }, { "style": "Text", "text": "Select Configure Plotter Module on the menu to access the configuration." @@ -234,8 +261,7 @@ "style": "Text", "text": "1. in the configuration of the module, use the name as is (e.g.: \"icon\": \"image-name\")" } - ], - "starting": [] + ] }, { "type": "Nodes Values" @@ -270,7 +296,11 @@ { "type": "Shapes", "definition": "The shapes node contains definitions of polygons and styles to be rendered on a per-period basis over the charts.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Shapes node works" + }, { "style": "Text", "text": "A plotter recursively renders graphics for each period or candle. This means that a definition of what shapes need to be drawn for a single period is required. The plotter does the same thing for every period or candle that is visible on the screen at any point in time, for any time frame, as long as the corresponding data is available." @@ -298,51 +328,63 @@ { "style": "Text", "text": " 4. Defining conditional styles" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Shapes node" + }, { "style": "Text", "text": "To add a shapes node, select Add Shapes on the plotter module menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Plotter Panel", "definition": "A plotter panel usually shows numerical representations of data over the charts on a small window or panel. The plotter panel node features definitions to make that possible.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Plotter Panel node works" + }, { "style": "Text", "text": "Beyond the graphic representation of data over the charts, plotters may also feature a data panel, that is, a numerical representation of the data showing the exact figures corresponding to the column or period that is in focus (the point of the charts where the mouse pointer is at any point)." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Plotter Panel node" + }, { "style": "Text", "text": "To add a plotter panel, select Add Plotter Panel on the plotter module node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Panel Data", "definition": "A panel data node represents a data field to be plotted on the plotter panel.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Panel Data node works" + }, { "style": "Text", "text": "The system renders a panel featuring a centered, single-column vertical arrangement of data, with a label and a data field right below it. The label of each data field on the panel is given—by default—by the label set for each panel data node." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Panel Data node" + }, { "style": "Text", "text": "To add a panel data node, select Add Panel Data on the plotter panel menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Panel Data node" + }, { "style": "Text", "text": "Select Configure Panel Data on the menu to access the configuration." @@ -407,26 +449,30 @@ "style": "List", "text": "labelPosition and valuePosition represent the vertical distance of the corresponding fields to the top margin of the panel." } - ], - "starting": [] + ] }, { "type": "Data Formula", "definition": "A data formula is a device used to assign a value to the panel data, usually in the form of the name of the corresponding record property.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Data Formula node" + }, { "style": "Text", "text": "To add a data formula, select Add Data Formula on the plotter panel menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Javascript Code", "definition": "The JavaScript code node may hold any snippet of valid JavaScript.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Javascript Code node works" + }, { "style": "Text", "text": "The system allows developers great flexibility as all valid JavaScript code is allowed." @@ -434,39 +480,47 @@ { "style": "Important", "text": "Until a robust JavaScript editor is implemented on the UI, it is recommended to write code on an external editor and paste it in the UI code bubble to ensure consistency." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Javascript Code node" + }, { "style": "Text", "text": "To add a JavaScript code node, select Add Code on the corresponding parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Chart Points", "definition": "A chart points groups definitions of coordinate points used to define polygons.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Chart Points node works" + }, { "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." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Chart Points node" + }, { "style": "Text", "text": "To add a chart points node, select Add Chart Points on the shapes menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Point", "definition": "A point is a definition of an [x,y] coordinate. The value [x] usually represents a datetime. The value [y] may refer to a price or some other concept.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Point node works" + }, { "style": "Text", "text": "These coordinate points are used to define polygons. Values for [x,y]coordinates are entered with a point formula." @@ -474,21 +528,25 @@ { "style": "Text", "text": "{% include tip.html content=\"Each point should be given a significant name so that it is easier to identify them at the time of establishing references with polygon vertices.\" %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Point node" + }, { "style": "Text", "text": "To add a point, select Add Point on the chart points node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Point Formula", "definition": "A point formula is a node used to input the [x,y] coordinates of a point.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Point Formula node works" + }, { "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." @@ -692,21 +750,25 @@ { "style": "Note", "text": "The reason from separating the definition of points from the definition of polygons is that any point may be used by one or more polygons." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Point Formula node" + }, { "style": "Text", "text": "To add a point formula, select Add Point Formula on the point node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Image", "definition": "The image node allows overlaying an image over the charts, controlling its position, size, and when it shall be rendered.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Image node works" + }, { "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." @@ -722,15 +784,19 @@ { "style": "Note", "text": "See the configuration for further details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Image node" + }, { "style": "Text", "text": "To add the image node, select Add Image on the parent node menu. " - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Image node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -767,31 +833,38 @@ "style": "List", "text": "size is the size at which the image shall be rendered, in pixels." } - ], - "starting": [] + ] }, { "type": "Image Condition", "definition": "An image condition is a rule that allows establishing when an image shall be rendered and when not.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Image Condition node works" + }, { "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 ." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Image Condition node" + }, { "style": "Text", "text": "To add the image condition node, select Add Image Condition on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Image Position", "definition": "The image position node is a reference to a point defined in the chart points, and serves to determine the position in which the image shall be placed.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Image Position node works" + }, { "style": "Text", "text": "The image position node works similarly to the polygon vertex in the sense that it must establish a reference with a point in the charts point to acquire a defined coordinate that determines where the image shall be placed." @@ -799,15 +872,19 @@ { "style": "Note", "text": "See the configuration for further details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Image Position node" + }, { "style": "Text", "text": "To add the image position node, select Add Image Position on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Image Position node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -844,43 +921,54 @@ "style": "List", "text": "offsetY is an offset in the Y axis. Negative values displace the image downwards and positive values displace the image upwards." } - ], - "starting": [] + ] }, { "type": "Text", "definition": "The text node allows overlaying text on the charts, controlling its position, size, appearance, and when it shall be rendered.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Text node works" + }, { "style": "Text", "text": "The node's offspring control the different aspects of how, where, and when text shall be rendered over the charts." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Text node" + }, { "style": "Text", "text": "To add the text node, select Add Text on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Text Style", "definition": "The text style is a definition of color, opacity, and font size that determines the appearance of the text to be rendered over the charts.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Text Style node works" + }, { "style": "Note", "text": "See the configuration for further details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Text Style node" + }, { "style": "Text", "text": "To add the text style node, select Add Text Style on the parent node menu. " - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Text Style node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -925,31 +1013,38 @@ "style": "List", "text": "fontSize is self explanatory too; values above zero produce the expected results." } - ], - "starting": [] + ] }, { "type": "Text Condition", "definition": "A text condition is a rule that allows establishing when text shall be rendered and when not.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Text Condition node works" + }, { "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 ." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Text Condition node" + }, { "style": "Text", "text": "To add the text condition node, select Add Text Condition on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Text Position", "definition": "The text position node is a reference to a point defined in the chart points, and serves to determine the position in which text shall be rendered.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Text Position node works" + }, { "style": "Text", "text": "The text position node works similarly to the image position node in the sense that it must establish a reference with a point in the charts point to acquire a defined coordinate that determines where the text shall be placed." @@ -957,15 +1052,19 @@ { "style": "Note", "text": "See the configuration for further details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Text Position node" + }, { "style": "Text", "text": "To add the text position node, select Add Text Position on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Text Position node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -1002,31 +1101,38 @@ "style": "List", "text": "offsetY is an offset in the Y axis. Negative values displace the text downwards and positive values displace the image upwards." } - ], - "starting": [] + ] }, { "type": "Text Formula", "definition": "The text formula determines the content that shall be rendered over the charts.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Text Formula node works" + }, { "style": "Text", "text": "The text formula may use any of the variables available to the plotter, and may produce either a numeric or a text string result." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Text Formula node" + }, { "style": "Text", "text": "To add the text formula node, select Add Text Formula on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Polygon", "definition": "A polygon features definitions that makeup shapes and their styles.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Polygon node works" + }, { "style": "Text", "text": "Polygons are defined by two or more vertices, which map points in a charts point. The graphic representation of polygons originates in styles applied to either or both polygon bodies and polygon borders." @@ -1034,33 +1140,41 @@ { "style": "Note", "text": "The order in which polygons are ordered around the parent shapes node determines the order in which they are drawn on the screen. In cases on which polygons intersect, those drawn last are drawn on top of those drawn first." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Polygon node" + }, { "style": "Text", "text": "To add a polygon, select Add Polygon on the shapes node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Polygon Condition", "definition": "A polygon condition is a rule that allows establishing when a polygon shall be rendered and when not.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Polygon Condition node works" + }, { "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." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Polygon Condition node" + }, { "style": "Text", "text": "To add a polygon condition, select Add Polygon Condition on a polygon node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Polygon Condition node" + }, { "style": "Text", "text": "Select Edit Condition on the menu to access the configuration." @@ -1069,49 +1183,60 @@ "style": "Text", "text": "Polygon conditions work pretty much like conditions used on trading systems. The main difference is that the variables available are solely those provided by the bot product definition that reference the corresponding plotter module." } - ], - "starting": [] + ] }, { "type": "Polygon Body", "definition": "A polygon body is the fill of a shape made out of at least three vertices.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Polygon Body node works" + }, { "style": "Text", "text": "A polygon body needs at least three vertices to be defined. A body serves to create a fill for the outlines of any sort of polygon, either closed or open, by giving it a style." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Polygon Body node" + }, { "style": "Text", "text": "To add a polygon body, select Add Polygon Body on the polygon node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Polygon Border", "definition": "A polygon border is a shape defined by at least two vertices used to draw lines or to apply a style to the stroke of a closed shape.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Polygon Border node works" + }, { "style": "Text", "text": "A polygon border needs at least two vertices to be defined. A border serves to create a stroke for the outlines of any sort of polygon, either closed or open, by giving it a style." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Polygon Border node" + }, { "style": "Text", "text": "To add a polygon border, select Add Polygon Border on the polygon node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Style Condition", "definition": "A style condition is a rule that allows applying an alternative style in cases where the rule validates true.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Style Condition node works" + }, { "style": "Text", "text": "Style conditions offer a way to introduce additional intelligence on the visual representation of data by using styles that respond to certain conditions." @@ -1127,15 +1252,19 @@ { "style": "Text", "text": "Style conditions me be created in a sequence so that the style may continue changing upon the validation of a series of style conditions. The system evaluates all style conditions in a sequential order determined by their position in the rotational symmetry around the parent node. Each condition that is met may modify or add up to the resulting style that is rendered on screen. That is, the final style is the result of the sequential application of the styles defined for each condition that is met, on top of the default style." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Style Condition node" + }, { "style": "Text", "text": "To add a style condition, select Add Style Condition on a polygon border or polygon body node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Style Condition node" + }, { "style": "Text", "text": "Select Edit Condition on the menu to access the configuration." @@ -1200,13 +1329,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Style", "definition": "A style is a definition of color and opacity in case of a polygon body, and color, opacity and line thickness in case of polygon borders.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Style node works" + }, { "style": "Text", "text": "A style applied to a polygon body or a polygon border node acts as the default style. Styles including colors, opacity, line width, and more, are defined in the node's configuration." @@ -1214,15 +1346,19 @@ { "style": "Note", "text": "See the configuration for further details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Style node" + }, { "style": "Text", "text": "To add a style, select Add Style on a polygon border or polygon body node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Style node" + }, { "style": "Text", "text": "Select Configure Style on the menu to access the configuration." @@ -1435,13 +1571,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Polygon Vertex", "definition": "A polygon vertex is a reference to a point defined in the chart points, constituting a specific coordinate to be used as a vertex of a shape.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Polygon Vertex node works" + }, { "style": "Text", "text": "Vertices are the main element defining polygons. Once created, each vertex must establish a reference to the corresponding point in the charts point." @@ -1457,9 +1596,11 @@ { "style": "Important", "text": "Bear in mind that the order in which vertices in a polygon are arranged around the parent polygon node when their rotational symmetry property is selected, is the order in which the plotter computes the points. This means that points need to be in the correct order, for example, when drawing a box. Imagine drawing a box on a piece of paper without lifting the pencil... that is how the plotter does it." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Polygon Vertex node" + }, { "style": "Text", "text": "To add a polygon vertex, select Add Polygon Vertex on the polygon node menu." @@ -1468,14 +1609,16 @@ "style": "Text", "text": "{% include tip.html content=\"Remember that a vertex must establish a reference to a point in the charts point to be properly defined\" %}" } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Situation", "definition": "A situation refers to a specific state of the market in which a certain event should take place, as defined by any number of conditions.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Situation node works" + }, { "style": "Text", "text": "In other words, you define situations in which you wish a certain event to happen (i.e.: trigger on the strategy, take a position, etc.) and each situation is described as a set of conditions that need to be met for the event to be triggered." @@ -1487,21 +1630,25 @@ { "style": "Text", "text": "An event may have more than one situation attached to it. In such a case, when any of the situations gets validated, the event gets triggered. That is, events may be triggered in different circumstances, meaning that you are free to define different situations upon which the same event would be triggered. In such a case, when any of the situations evaluate true, then the event is triggered." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Situation node" + }, { "style": "Text", "text": "To add a situation, select Add Situation on the corresponding event node menu. A situation is added along with a condition and JavaScript code node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Condition", "definition": "Conditions are rules within a situation. When all conditions under a situation validate true, then the situation gets validated as well, and the associated event is triggered.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Condition node works" + }, { "style": "Text", "text": "Therefore, conditions are used to mathematically describe what needs to happen with the market for a certain action to be taken." @@ -1529,21 +1676,25 @@ { "style": "Note", "text": "To learn how to write conditions, start with the Syntax Overview." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Condition node" + }, { "style": "Text", "text": "To add a condition, select Add Condition on the corresponding situation node menu. A condition with its JavaScript code node is added." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Super Scripts", "definition": "The super scripts hierarchy holds definitions of scripts used to automate certain aspects of the administration and maintenance of the workspace, such as installing and deleting markets.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Super Scripts node works" + }, { "style": "Text", "text": "The super scripts hierarchy may be used by developers who wish to create their own scripts for automating the deployment or manitenance of all sorts of structures of nodes across any of the hierarchies in the design space." @@ -1551,15 +1702,19 @@ { "style": "Text", "text": "Regular users will find little to do with this hierarchy, even though they may use it indirectly, for instance, when installing or uninstalling markets." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Super Scripts node" + }, { "style": "Text", "text": "To add a super scripts hierarchy, select Add Super Scripts on the other hierarchies node menu in the Superalgos Project hierarchy." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Super Scripts node" + }, { "style": "Text", "text": "Select Configure Super Scripts on the menu to access the configuration." @@ -1588,31 +1743,38 @@ "style": "List", "text": "codeName is the name of the hierarchy as is used in the system's code." } - ], - "starting": [] + ] }, { "type": "Scripts Library", "definition": "A script library is a collection of related scripts.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Scripts Library node works" + }, { "style": "Text", "text": "The script library node plays an organizational role, grouping masters scripts according to the criteria of the developer." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Scripts Library node" + }, { "style": "Text", "text": "To add a scripts library, select Add Scripts Library on the super scripts node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Master Script", "definition": "A master script contains the definitions of any number of template scripts along with the master JavaScript code providing the logic to implement them.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Master Script node works" + }, { "style": "Text", "text": "In general terms, master scripts serve to atomize the complexity of the task at hand by subdividing the task into any number of specific scopes, handled by individual template scripts. The master script controls the execution of template scripts and solves issues beyond their scope." @@ -1620,21 +1782,25 @@ { "style": "Text", "text": "The current implementation of the Masters super scripts hierarchy features two master scripts you may use as examples. The Setup Market master script deals with all the steps required to install a new market, while the Delete Market Dependencies master script deals with uninstalling markets." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Master Script node" + }, { "style": "Text", "text": "To add a master script, select Add Master Script on the scripts library node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Template Script", "definition": "The template script node holds the definitions concerned with the scope of a particular structure of nodes.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Template Script node works" + }, { "style": "Text", "text": "As such, a template script features all the components required to deal with such scope only." @@ -1642,21 +1808,25 @@ { "style": "Text", "text": "In the particular Masters super script implementation, each template script in the Setup Markets master script features a structure of nodes to be created in a specific location, and the associated JavaScript code deals with implementing such structure of nodes and establishing the corresponding references." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Template Script node" + }, { "style": "Text", "text": "To add a template script, select Add Template Script on the scripts master script node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Template Structure", "definition": "The template structure holds the structure of nodes with all its configurations and properties, exactly as it should be implemented.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Template Structure node works" + }, { "style": "Text", "text": "Properties include the physical arrangement of nodes, references and so on." @@ -1664,28 +1834,29 @@ { "style": "Note", "text": "The actual structure of nodes contained in the template usually originates as a clone of an existing structure of nodes." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Template Structure node" + }, { "style": "Text", "text": "To add a tempalte strucutre, select Add Teemplate Structure on the template script node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Template Target", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Template Target node" + }, { "style": "Text", "text": "To add a template target, select Add Template Target on the template script node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Super Action" @@ -1693,7 +1864,11 @@ { "type": "Network", "definition": "The network hierarchy provides the control functions for running data-mining and trading operations. Because operations may be run either on a single machine or distributed over a network of machines, it also contains definitions regarding the physical location in which nodes live or function.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Network node works" + }, { "style": "Text", "text": "The network hierarchy defines where in the network you run each of the bots you choose to run, and where the data they output is stored." @@ -1721,21 +1896,25 @@ { "style": "Warning", "text": "At this stage, the system does not implement any form of security measures, therefore, Superalgos is to be run in the context of a restricted Local Area Network only, unless you implement your own network security." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Network node" + }, { "style": "Text", "text": "To add a network, select Add Network on the other hierarchies node menu in the Superalgos Project hierarchy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Network Node", "definition": "A network node represents a machine running Superalgos, on which processes run and data is stored.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Network Node node works" + }, { "style": "Text", "text": "By default, processes are set up to run locally in a network node representing your local machine. However, the system is prepared to run distributed on a network of nodes, or what we call a trading farm." @@ -1751,15 +1930,19 @@ { "style": "Text", "text": "If you need finer control over the operation you wish to deploy on the network, then you may use the individual functions available under each section of the hierarchy under the network node." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Network Node node" + }, { "style": "Text", "text": "To add a network node, select Add Network Node on the Superalgos Network node menu. A network node is added along with the basic structure of nodes to set up a node." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Network Node node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -1804,13 +1987,16 @@ "style": "List", "text": "webSocketsPort is the port used by the system to communicate over the local area network, by default set at 18041." } - ], - "starting": [] + ] }, { "type": "Task Manager", "definition": "A task manager is a device used to organize and control any number of tasks, which, in turn, control bot instances. You use a task manager to start or stop several tasks at the same time.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Task Manager node works" + }, { "style": "Text", "text": "Task managers are used both in the context of data mining and trading operations, to facilitate the organization of tasks." @@ -1822,16 +2008,19 @@ { "style": "Text", "text": "{% include tip.html content=\"The key aspect of a task manager is that it allows starting and stopping all tasks at once.\" %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Task Manager node" + }, { "style": "Text", "text": "To add a task manager, select Add Task Manager on the parent node menu." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Task Manager node" + }, { "style": "Text", "text": "Select Run All Tasks or Stop All Tasks on the menu to start and stop all tasks respectively." @@ -1841,13 +2030,19 @@ { "type": "Task", "definition": "A task is the device used to control bot instances, that is, to start and stop bots, including sensors, indicators and the trading bot.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Task node works" + }, { "style": "Text", "text": "Each task controls a single bot. A bot instance running on its own task is independent from other bots at the operating system level, thus, may not be affected by errors ocurring on those other bots." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Task node" + }, { "style": "Text", "text": "To add a task, select Add Task on the task manager node menu." @@ -1855,10 +2050,11 @@ { "style": "Text", "text": "{% include tip.html content=\"Instead of adding nodes, configuring them, and setting references one by one, you may want to clone an existing, fully functional task with all its offspring.\" %}" - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Task node" + }, { "style": "Text", "text": "Select Run on the menu to start a task. When a task is started, the process instance of the bot instance attached to the task is started. Also, a visual indication that both the task and the process instance are running appear surrounding the corresponding nodes, in the form of a progress ring." @@ -1872,7 +2068,11 @@ { "type": "Trading Bot Instance", "definition": "A trading bot instance is a reference to the trading bot as defined in the Masters data mine. The instance of the bot runs the defined processes and generates the defined data products.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Bot Instance node works" + }, { "style": "Text", "text": "{{site.data.concepts.trading_bot}}" @@ -1880,16 +2080,19 @@ { "style": "Text", "text": "The trading bot instance holds no definitions as to what the bot does. Instead, its process instance references the process definition in the Masters data mine. That is how the indicator bot instance obtains the information of what it needs to do once it is run." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Bot Instance node" + }, { "style": "Text", "text": "To add a trading bot instance, select Add Trading Bot Instance on the task node menu. When a trading bot instance is added, it is created with one trading process instance, and a market reference." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Trading Bot Instance node" + }, { "style": "Text", "text": "You do not start or stop a trading bot instance directly. Instead, you start or stop the corresponding task." @@ -1902,20 +2105,27 @@ { "type": "Sensor Process Instance", "definition": "A sensor process instance is a reference to the process definition of a sensor bot, as defined in a data mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Sensor Process Instance node works" + }, { "style": "Text", "text": "For example, in the case of an instance of the Masters data mine Exchange Raw Data sensor bot, the bot process instance references the Historic OHLCVs process definition. Once the reference is established, the sensor process instance adopts the name of the process definition it references." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Sensor Process Instance node" + }, { "style": "Text", "text": "To add a sensor process instance, select Add Sensor Process Instance on the sensor bot instance node menu." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Sensor Process Instance node" + }, { "style": "Text", "text": "You do not start or stop a sensor process instance directly. Instead, you start or stop the corresponding task." @@ -1925,7 +2135,11 @@ { "type": "Indicator Process Instance", "definition": "An indicator process instance is a reference to the process definition of an indicator bot, as defined in a data mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Indicator Process Instance node works" + }, { "style": "Text", "text": "Indicator bot instances usually require two indicator process instances. One of them references the indicator's multi-period-market process definition and the second references the multi-period-daily process definition." @@ -1933,16 +2147,19 @@ { "style": "Text", "text": "Once the reference is established, the indicator process instance adopts the name of the process definition it references." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Indicator Process Instance node" + }, { "style": "Text", "text": "To add an indicator process instance, select Add Indicator Process Instance on the indicator bot instance node menu." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Indicator Process Instance node" + }, { "style": "Text", "text": "You do not start or stop an indicator process instance directly. Instead, you start or stop the corresponding task." @@ -1952,13 +2169,19 @@ { "type": "Trading Process Instance", "definition": "A trading process instance is a reference to the process definition of the trading bot, as defined in the Masters data mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Process Instance node works" + }, { "style": "Text", "text": "The trading process instance must reference the Multi-Period process definition of the Jason trading bot in the Masters data mine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Process Instance node" + }, { "style": "Text", "text": "To add a trading process instance, select Add Trading Process Instance on the trading bot instance node menu. When a trading process instance is added, it is created with a market reference." @@ -1966,10 +2189,11 @@ { "style": "Note", "text": "After adding a trading process instance node, make sure you establish the reference to the Multi-Period process definition of the Jason trading bot in the Masters data mine." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Trading Process Instance node" + }, { "style": "Text", "text": "You do not start or stop a trading process instance directly. Instead, you start or stop the corresponding task." @@ -1982,13 +2206,19 @@ { "type": "Backtesting Session", "definition": "A backtesting session is a trading mode by which the trading bot instance reads historic market data in a user-defined datetime range, applies the rules defined in the associated trading system, and generates a trading simulation.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Backtesting Session node works" + }, { "style": "Text", "text": "A backtesting session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Backtesting Session node" + }, { "style": "Text", "text": "To add a backtesting session, select Add Backtesting Session on the trading process instance node menu. When a session is added, it is created with the full set of parameters." @@ -1996,9 +2226,11 @@ { "style": "Note", "text": "After adding a session node, make sure you establish a reference to the trading system you want it to work with." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Backtesting Session node" + }, { "style": "Text", "text": "Select Configure Session on the menu to access the configuration." @@ -2026,9 +2258,11 @@ { "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." - } - ], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Backtesting Session node" + }, { "style": "Text", "text": "Before you start a backtesting session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select Run on the menu to start the session." @@ -2046,7 +2280,11 @@ { "type": "Trading Engine", "definition": "The trading engine hierarchy is the data structure used by the trading bot to keep runtime information highly accessible and exposed to others.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Engine node works" + }, { "style": "Text", "text": "You will use this hierarchy for two main purposes:" @@ -2058,9 +2296,11 @@ { "style": "List", "text": "To keep track of the actions of the trading bot via the design space visual environment and panels over the charts. By analyzing runtime information, you may gain a detailed understanding of what happens, when, and why, throughout a trading session." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Engine node" + }, { "style": "Text", "text": "{% include tip.html content=\"There may be more than one trading engine in a workspace. Cloning the default trading engine is the best way to start a new one.\" %}" @@ -2069,40 +2309,44 @@ "style": "Text", "text": "To add the trading engine node from scratch, select Add Trading Engine on the other hierarchies node menu in the Superalgos Project hierarchy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Dynamic Indicators", "definition": "", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Dynamic Indicators node" + }, { "style": "Text", "text": "To add the dynamic indicators node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Indicator Function", "definition": "", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Indicator Function node" + }, { "style": "Text", "text": "To add the indicator function node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Episode", "definition": "Episode is the object that handles the information corresponding to the whole run of the trading bot—beginning to end—between the specified initial datetime and final datetime, in the time range parameter of the trading session.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Episode node works" + }, { "style": "Text", "text": "In other words, episode is the context framed between the datetimes that make up the whole trading session, as per the session's configuration. As such, an episode keeps track of—and accumulates—the results of all positions entered throughout a complete run of a trading session." @@ -2130,130 +2374,145 @@ { "style": "List", "text": "rates describing each candle in the episode, such as the open, close, min and max rates;" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Episode node" + }, { "style": "Text", "text": "To add the episode node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Episode Counters", "definition": "The episode counters node features counters of instances of objects that come to exist during the duration of the episode.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Episode Counters node" + }, { "style": "Text", "text": "To add the episode counters node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Position Counters", "definition": "The position counters node features counters of instances of objects that come to exist during the duration of the position.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Position Counters node" + }, { "style": "Text", "text": "To add the position counters node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategy Counters", "definition": "The strategy counters node features counters of instances of objects that come to exist while the strategy is open.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Strategy Counters node" + }, { "style": "Text", "text": "To add the strategy counters node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Order Counters", "definition": "The order counters node features counters of instances of objects that come to exist while the order is open.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Order Counters node" + }, { "style": "Text", "text": "To add the order counters node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Positions", "definition": "Positions counts the number of times positions have been opened, in the context of the parent node.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Positions node" + }, { "style": "Text", "text": "To add the positions node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategies", "definition": "Strategies counts the number of times strategies have been triggered-on, in the context of the parent node.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Strategies node" + }, { "style": "Text", "text": "To add the strategies node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Orders", "definition": "Orders counts the number of times orders have been placed, in the context of the parent node.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Orders node" + }, { "style": "Text", "text": "To add the orders node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Fails", "definition": "Fails counts the number of positions that closed with a negative profit loss, in the context of the parent node.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Fails node works" + }, { "style": "Note", "text": "The workings of the fail counts are analogous to the workings of the hits counts, reversing the sign. That is, when profit loss is negative, it is counted as a fail. Please refer to the definition of hits for the details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Fails node" + }, { "style": "Text", "text": "To add the fails node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Hits", "definition": "Hits counts the number of positions that closed with a positive profit loss, in the context of the parent node.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Hits node works" + }, { "style": "Text", "text": "In the context of the quoted asset or the base asset, hits are calculated relative to the asset in question. That is, if the base asset profit loss is positive, then a hit is counted for the base asset." @@ -2265,81 +2524,86 @@ { "style": "Note", "text": "The consolidated calculations are explained thoroughly in the profit loss node." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Hits node" + }, { "style": "Text", "text": "To add the hits node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Periods", "definition": "Periods counts the number of candles that have been evaluated, in the context of the parent node.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Periods node" + }, { "style": "Text", "text": "To add the periods node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "User Defined Counter", "definition": "", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a User Defined Counter node" + }, { "style": "Text", "text": "To add the user defined counter node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Episode Statistics", "definition": "Episode statistics keeps track of several metrics in the context of the episode.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Episode Statistics node" + }, { "style": "Text", "text": "To add the episode statistics node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Stop Loss", "definition": "Stop loss is the current stop loss target, as defined in the manage stage of the corresponding strategy.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Stop Loss node" + }, { "style": "Text", "text": "To add the stop loss node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Take Profit", "definition": "Take profit is the current take profit target, as defined in the manage stage of the corresponding strategy.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Take Profit node" + }, { "style": "Text", "text": "To add the take profit node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Initial Value" @@ -2350,33 +2614,39 @@ { "type": "Stop Loss Phase", "definition": "Stop loss phase is the numeric value of the phase that is currently open, and thus, defining the value of the stop loss.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Stop Loss Phase node" + }, { "style": "Text", "text": "To add the stop loss phase node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Take Profit Phase", "definition": "Take profit phase is the numeric value of the phase that is currently open, and thus, defining the value of the take profit.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Take Profit Phase node" + }, { "style": "Text", "text": "To add the take profit phase node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Take Profit Position", "definition": "Take profit position indicates if the take profit target is above or below the position rate.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Take Profit Position node works" + }, { "style": "Text", "text": "Possible values are Above and Below." @@ -2384,21 +2654,25 @@ { "style": "Text", "text": "The implications of setting the take profit target above or below the position rate are explained on the trading system section of the documentation, in particular while describing the initial target rate definition." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Take Profit Position node" + }, { "style": "Text", "text": "To add the take profit position node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Stop Loss Position", "definition": "Stop Loss position indicates if the stop loss target is above or below the position rate.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Stop Loss Position node works" + }, { "style": "Text", "text": "Possible values are Above and Below." @@ -2406,209 +2680,251 @@ { "style": "Text", "text": "The implications of setting the stop loss target above or below the position rate are explained on the trading system section of the documentation, in particular while describing the initial target rate definition." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Stop Loss Position node" + }, { "style": "Text", "text": "To add the stop loss position node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Position Statistics", "definition": "Position statistics keeps track of several metrics in the context of the position.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Position Statistics node" + }, { "style": "Text", "text": "To add the position statistics node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Stage Base Asset", "definition": "The stage base asset node keeps track of the evolution of variables related to the base asset throughout the stage.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Stage Base Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Stage Base Asset node" + }, { "style": "Text", "text": "To add the stage base asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Stage Quoted Asset", "definition": "The stage quoted asset node keeps track of the evolution of variables related to the quoted asset throughout the stage.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Stage Quoted Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Stage Quoted Asset node" + }, { "style": "Text", "text": "To add the stage quoted asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Episode Base Asset", "definition": "The episode base asset node keeps track of the evolution of variables and metrics denominated in the base asset, throughout the episode.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Episode Base Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Episode Base Asset node" + }, { "style": "Text", "text": "To add the episode base asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Episode Quoted Asset", "definition": "The episode quoted asset node keeps track of the evolution of variables and metrics denominated in the quoted asset, throughout the episode.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Episode Quoted Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Episode Quoted Asset node" + }, { "style": "Text", "text": "To add the episode quoted asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Position Base Asset", "definition": "The position base asset node keeps track of the evolution of variables related to the base asset throughout the position.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Position Base Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Position Base Asset node" + }, { "style": "Text", "text": "To add the position base asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Position Quoted Asset", "definition": "The position quoted asset node keeps track of the evolution of variables related to the quoted asset throughout the position.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Position Quoted Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Position Quoted Asset node" + }, { "style": "Text", "text": "To add the position quoted asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Order Statistics", "definition": "Order statistics keeps track of several metrics in the context of the order.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Order Statistics node" + }, { "style": "Text", "text": "To add the order statistics node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Order Base Asset", "definition": "The order base asset node keeps track of the evolution of certain properties of orders, denominated in the base asset.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Order Base Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Order Base Asset node" + }, { "style": "Text", "text": "To add the order base asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Order Quoted Asset", "definition": "The order quoted asset node keeps track of the evolution of certain properties of orders, denominated in the quoted asset.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Order Quoted Asset node works" + }, { "style": "Note", "text": "Learn more about how accounts for the base asset and the quoted asset are kept in the base asset and quoted asset page on the trading engine section of the documentation." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Order Quoted Asset node" + }, { "style": "Text", "text": "To add the order quoted asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "User Defined Statistic", "definition": "A user defined statistic allows users to create custom metrics by defining the corresponding calculation in a formula, in the context of the parent node.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the User Defined Statistic node works" + }, { "style": "Text", "text": "The current contexts in which custom statistics may be defined are episodes, positions, and orders." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a User Defined Statistic node" + }, { "style": "Text", "text": "To add the user defined statistic node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Profit Loss", "definition": "Profit loss is the difference between the balance at the end and the balance at the beginning of a certain period, given by the context.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Profit Loss node works" + }, { "style": "Text", "text": "In the context of the base asset or the quoted asset, the calculation is done by subtracting the balances in the corresponding assets, using the variable appropriate to the larger context (i.e.: episode, position, etc.)." @@ -2764,39 +3080,47 @@ { "style": "Text", "text": "" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Profit Loss node" + }, { "style": "Text", "text": "To add the profit loss node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Hit Ratio", "definition": "Hit ratio is the percentage of positions that closed with a positive profit loss, in the context of the parent node.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Hit Ratio node works" + }, { "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." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Hit Ratio node" + }, { "style": "Text", "text": "To add the hit ratio node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Days", "definition": "Days counts the number of days through which the trading bot has cycled since the object represented by the parent node was open.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Days node works" + }, { "style": "Text", "text": "In the context of an episode, it counts the number of days in the episode." @@ -2804,21 +3128,25 @@ { "style": "Text", "text": "In the context of a position, it counts the number of days a position has been open." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Days node" + }, { "style": "Text", "text": "To add the days node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Size Filled", "definition": "Size filled is the amount of the order that has been filled at the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Size Filled node works" + }, { "style": "Text", "text": "In the context of a strategy stage, the size filled refers to the sum of the size filled for all orders placed on the corresponding stage." @@ -2834,21 +3162,25 @@ { "style": "Text", "text": "In liquid markets, market orders should usually fill immediately. However, limit orders may fill incrementally. Size filled keeps track of how much of the size placed has been filled on every execution." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Size Filled node" + }, { "style": "Text", "text": "To add the size filled node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Percentage Filled", "definition": "Percentage filled represents the portion of the order that has been filled, expressed as a percentage.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Percentage Filled node works" + }, { "style": "Text", "text": "The formula:" @@ -2856,21 +3188,25 @@ { "style": "Text", "text": "percentage filled = size filled * 100 / size" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Percentage Filled node" + }, { "style": "Text", "text": "To add the percentage filled node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Actual Rate", "definition": "Actual rate is the number reported by the exchange as the rate at which an order was filled.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Actual Rate node works" + }, { "style": "Text", "text": "When the system consults the status of open orders with the exchange, the exchange responds with the size filled and the actual rate for the particular order. In case an order is filled incrementally, the value is updated accordingly." @@ -2878,21 +3214,25 @@ { "style": "Text", "text": "The system uses the actual rate to update the calculation of balances, which are otherwise calculated with the original rate, by default." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Actual Rate node" + }, { "style": "Text", "text": "To add the actual rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Fees Paid", "definition": "Fees paid is the amount paid in fees.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Fees Paid node works" + }, { "style": "Text", "text": "The exchange does not explicitly indicate how much has been paid in fees for a given transaction. Instead, when Superalgos verifies if an order has been filled or not, the exchange reports the size filled and the actual rate only." @@ -2904,16 +3244,16 @@ { "style": "Text", "text": "Exchanges deduct fees from the asset you are receiving. For instance, if you are selling BTC in the BTC-USDT market, then you are receiving USDT, and the exchange will deduct the fees directly from the amount of USDT you are receiving." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Fees Paid node" + }, { "style": "Text", "text": "To add the fees paid node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "ROI", @@ -2922,7 +3262,11 @@ { "type": "Annualized Rate Of Return", "definition": "Annualized rate of return is the equivalent ROI scaled to one year.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Annualized Rate Of Return node works" + }, { "style": "Text", "text": "In other words, it is the equivalent annual return received over a given period." @@ -3162,21 +3506,25 @@ { "style": "Text", "text": "" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Annualized Rate Of Return node" + }, { "style": "Text", "text": "To add the annualized rate of return node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Hit Fail", "definition": "Hit fail states whether a transaction is successful or not, hit meaning it is successful and fail meaning it is not.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Hit Fail node works" + }, { "style": "Text", "text": "Superalgos marks positions and even entire episodes as hits or fails, by evaluating profit loss for the corresponding context. If profit loss is positive, then the position or episode is a hit. If profit loss is negative, it is a fail." @@ -3184,21 +3532,25 @@ { "style": "Note", "text": "Please refer to the definition of hits for the details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Hit Fail node" + }, { "style": "Text", "text": "To add the hit fail node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Current", "definition": "The current object refers to the context in which instances of several other objects exist—like episode, strategy, position, strategy stages, and so on—in particular, the instances that are open at the time of evaluation, hence the adjective current.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Current node works" + }, { "style": "Text", "text": "Conceptually, current is used as an adjective applied to different concepts, such as the current episode, the current strategy, the current position, or the current strategy stage, to indicate the instance that is passing at the moment." @@ -3210,39 +3562,47 @@ { "style": "Text", "text": "In other words, the episode, strategy and position nodes within the current section of the hierarchy feature information relative to the instances of the episode, strategy, and position that are currently passing, at any point in time." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Current node" + }, { "style": "Text", "text": "To add the current node, select Add Missing Items on the trading engine node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Balance", "definition": "Balance is the running balance, that is, the amount of the asset that exists at any point in time.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Balance node works" + }, { "style": "Text", "text": "The balance of an asset changes every time an order involving the asset is filled. When the trading bot consults the exchange to find out the status of each order placed, the exchange answers with the size filled and actual rate for the order. That is the information used to calculate balances." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Balance node" + }, { "style": "Text", "text": "To add the balance node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Begin Balance", "definition": "Begin balance is the balance at the datetime of the begin property of the parent node or concept.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Begin Balance node works" + }, { "style": "Text", "text": "In the context of an episode, it is the balance at the datetime the episode started." @@ -3250,21 +3610,25 @@ { "style": "Text", "text": "In the context of a position, it is the balance at the datetime the position started." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Begin Balance node" + }, { "style": "Text", "text": "To add the begin balance node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "End Balance", "definition": "End balance is the balance at the datetime of the end property of the parent node or concept.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the End Balance node works" + }, { "style": "Text", "text": "In the context of an episode, it is the balance at the datetime the episode ended." @@ -3272,174 +3636,195 @@ { "style": "Text", "text": "In the context of a position, it is the balance at the datetime the position was closed." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a End Balance node" + }, { "style": "Text", "text": "To add the end balance node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Distance To Event", "definition": "Distance to event features counters indicating how many periods (candles) have passed since the last occurrence of certain events, in the context of the episode.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Distance To Event node works" + }, { "style": "Text", "text": "The information may be used from within strategies, for example, to leave a cool-down period in-between positions, to separate orders in specific intervals, or to achieve any particular logic that may require counting how much time has passed since the last time a specific event was triggered." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Distance To Event node" + }, { "style": "Text", "text": "To add the distance to event node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trigger On", "definition": "Counts the periods since the last time a strategy was triggered on.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Trigger On node" + }, { "style": "Text", "text": "To add the trigger on node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trigger Off", "definition": "Counts the periods since the last time a strategy was triggered off.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Trigger Off node" + }, { "style": "Text", "text": "To add the trigger off node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Take Position", "definition": "Counts the periods since the last time a position was taken.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Take Position node" + }, { "style": "Text", "text": "To add the take position node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Close Position", "definition": "Counts the periods since the last time a position was closed.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Close Position node" + }, { "style": "Text", "text": "To add the close position node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Next Phase", "definition": "Counts the periods since the last time a next phase event was triggered.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Next Phase node" + }, { "style": "Text", "text": "To add the next phase node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Move To Phase", "definition": "Counts the periods since the last time a move to phase event was triggered.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Move To Phase node" + }, { "style": "Text", "text": "To add the move to phase node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Create Order", "definition": "Counts the periods since the last time an order was created.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Create Order node" + }, { "style": "Text", "text": "To add the create order node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Cancel Order", "definition": "Counts the periods since the last time an order was canceled.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Cancel Order node" + }, { "style": "Text", "text": "To add the cancel order node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Close Order", "definition": "Counts the periods since the last time an order was closed.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Close Order node" + }, { "style": "Text", "text": "To add the close order node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategy Trigger Stage", "definition": "Strategy trigger stage is the section of the data structure that keeps track of information specific to the scope of the trigger stage during the period the stage is open.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Strategy Trigger Stage node works" + }, { "style": "Text", "text": "The trigger stage is active from the instant the trigger-on event is triggered until either the trigger-off event or the take position event gets triggered. Therefore, this section of the data structure features information spaning those periods only." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Strategy Trigger Stage node" + }, { "style": "Text", "text": "To add the strategy trigger stage node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategy Manage Stage", "definition": "Strategy manage stage is the section of the data structure that keeps track of information specific to the scope of the manage stage during the period the stage is open.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Strategy Manage Stage node works" + }, { "style": "Text", "text": "The manage stage is active from the instant the take position event is triggered until the instant either the stop or take profit targets are hit." @@ -3447,21 +3832,25 @@ { "style": "Text", "text": "Therefore, this section of the data structure features information spaning those periods only." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Strategy Manage Stage node" + }, { "style": "Text", "text": "To add the strategy manage stage node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategy Open Stage", "definition": "Strategy open stage is the section of the data structure that keeps track of information specific to the scope of the open stage during the period the stage is open.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Strategy Open Stage node works" + }, { "style": "Text", "text": "The open stage is open from the instant the take position event gets triggered, and starts closing from the instant one of the following things happen:" @@ -3477,21 +3866,25 @@ { "style": "List", "text": "the take profit or stop loss targets are hit." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Strategy Open Stage node" + }, { "style": "Text", "text": "To add the strategy open stage node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategy Close Stage", "definition": "Strategy close stage is the section of the data structure that keeps track of information specific to the scope of the close stage during the period the stage is open.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Strategy Close Stage node works" + }, { "style": "Text", "text": "The close stage is active from the instant either the stop loss or take profit targets are hit until the instant the target size is filled or the close stage event is triggered." @@ -3499,21 +3892,25 @@ { "style": "Text", "text": "Therefore, this section of the data structure features information spaning those periods only." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Strategy Close Stage node" + }, { "style": "Text", "text": "To add the strategy close stage node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategy", "definition": "The strategy section of the trading engine keeps track of information relating to the trading strategies that are triggered-on, during the time they remain open.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Strategy node works" + }, { "style": "Text", "text": "The strategy node is available both in the current context and the last context, that is, you may retrieve information of the strategy that was last triggered or the one currently open." @@ -3529,34 +3926,39 @@ { "style": "Text", "text": "Most interestingly, the strategy section provides information such as which situation was responsible for triggering the strategy. This may be particularly useful in complex strategies in which the trigger on event may be defined by multiple situations." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Strategy node" + }, { "style": "Text", "text": "To add the strategy node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Strategy Name", "definition": "Strategy name features the name of the strategy that is currently open.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Strategy Name node" + }, { "style": "Text", "text": "To add the strategy name node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Index", "definition": "Index is the position of the parent object in the corresponding data collection, as determined by the context.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Index node works" + }, { "style": "Text", "text": "In the context of a candle, index is the position of the current candle in the array of candles within the larger context, for example, an episode." @@ -3564,21 +3966,25 @@ { "style": "Text", "text": "Trading systems may feature more than one strategy. In the context of a strategy, index is the position of the strategy within the trading system." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Index node" + }, { "style": "Text", "text": "To add the index node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Status", "definition": "Status refers to the state of the object represented by the parent node at the moment of evaluation.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Status node works" + }, { "style": "Text", "text": "There are three possible status:" @@ -3594,21 +4000,25 @@ { "style": "List", "text": "Closed: the object closes at the current candle." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Status node" + }, { "style": "Text", "text": "To add the status node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Situation Name", "definition": "Situation name features the name of the situation that triggered a certain event, which is dependent on the context.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Situation Name node works" + }, { "style": "Text", "text": "In the context of a strategy, it is the name of the situation that triggered-on the strategy." @@ -3620,93 +4030,113 @@ { "style": "Text", "text": "In the context of an order, it's the situation that triggered the create order event." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Situation Name node" + }, { "style": "Text", "text": "To add the situation name node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Algorithm Name", "definition": "Algorithm name is the name of the execution algorithm that opened the order, as specified in the trading system.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Algorithm Name node works" + }, { "style": "Text", "text": "Assigning names to execution algorithms in the definition of the trading system makes tracking the execution of orders easier." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Algorithm Name node" + }, { "style": "Text", "text": "To add the algorithm name node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Order Name", "definition": "Order name is the name of the order as specified in the trading system.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Order Name node works" + }, { "style": "Text", "text": "Assigning names to orders in the definition of the trading system makes tracking the execution of orders easier." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Order Name node" + }, { "style": "Text", "text": "To add the order name node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Serial Number", "definition": "Serial number is a sequential number assigned to the object represented by the parent node at the moment it is opened.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Serial Number node works" + }, { "style": "Text", "text": "Serial numbers start at 1 and increment by 1 with each intance of the object that is opened." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Serial Number node" + }, { "style": "Text", "text": "To add the serial number node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Identifier", "definition": "Identifier is a unique alphanumeric string by which the object represented by the parent node may be unequivocally identified.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Identifier node works" + }, { "style": "Text", "text": "The property is what would be used to access a specific known record." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Identifier node" + }, { "style": "Text", "text": "To add the identifier node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Exchange Id", "definition": "Exchange ID is a unique identifier the exchange assigns to the order, so that it may be unequivocally identified.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exchange Id node works" + }, { "style": "Text", "text": "By default, it is the rate at the close of the last candle at the moment the order is placed. All market orders have the default rate value." @@ -3714,21 +4144,25 @@ { "style": "Text", "text": "In the case of limit orders, it is the rate as specified by the formula under the order rate node. If no such definition exists, then limit orders use the default value as well." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exchange Id node" + }, { "style": "Text", "text": "To add the exchange id node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Lock", "definition": "Lock is an internal mechanism that blocks the data structure of the order at the trading engine when the definition of the order at the trading system disallows spawning multiple orders.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Lock node works" + }, { "style": "Text", "text": "Possible values for lock are open and closed." @@ -3740,39 +4174,47 @@ { "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." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Lock node" + }, { "style": "Text", "text": "To add the lock node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Begin", "definition": "Begin is the datetime at the moment the object represented by the parent node began to exist.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Begin node works" + }, { "style": "Text", "text": "In the context of a candle, it is the datetime of the open of the candle as provided by the exchange." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Begin node" + }, { "style": "Text", "text": "To add the begin node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "End", "definition": "End is the datetime on which the object represented by the parent node ceased to exist. In case the object has not been closed yet, it is the datetime at the moment of evaluation.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the End node works" + }, { "style": "Text", "text": "In the context of a candle, it is the datetime of the close of the candle as provided by the exchange." @@ -3780,16 +4222,16 @@ { "style": "Text", "text": "In every other context, the datetime is given by the datetime of the moment of evaluation. When evaluating a point in time in which the object remains open, end stores the datetime of that moment, because the object existed until that point in time when the value was last being updated. Once the object is closed, the end value is not modified again." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a End node" + }, { "style": "Text", "text": "To add the end node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Last Begin" @@ -3800,59 +4242,67 @@ { "type": "Open", "definition": "Open is the rate at the datetime of the begin property, as provided by the exchange. That is, the rate at the open of the candle.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Open node" + }, { "style": "Text", "text": "To add the open node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Close", "definition": "Close is the rate at the datetime of the end property, as provided by the exchange. That is, the rate at the close of the candle.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Close node" + }, { "style": "Text", "text": "To add the close node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Min", "definition": "Min is the minimum rate registered by the exchange during the period between the datetimes of the begin and end properties, as provided by the exchange.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Min node" + }, { "style": "Text", "text": "To add the min node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Max", "definition": "Max is the maximum rate registered by the exchange during the period between the datetimes of the begin and end properties, as provided by the exchange.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Max node" + }, { "style": "Text", "text": "To add the max node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Begin Rate", "definition": "Begin rate is the close rate of the candle corresponding to the datetime of the begin property.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Begin Rate node works" + }, { "style": "Text", "text": "In the context of a strategy, it is the close rate of the last closed candle at the moment the strategy was triggered." @@ -3864,21 +4314,25 @@ { "style": "Text", "text": "In the context of an episode, it is the close rate of the last closed candle at the moment the episode starts." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Begin Rate node" + }, { "style": "Text", "text": "To add the begin rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "End Rate", "definition": "End rate is the close rate of the candle corresponding to the datetime of the end property.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the End Rate node works" + }, { "style": "Text", "text": "In the context of a strategy, it is the close rate of the last closed candle at the moment the strategy is triggered-off." @@ -3890,21 +4344,25 @@ { "style": "Text", "text": "In the context of an episode, it is the close rate of the last closed candle at the moment the episode ends." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a End Rate node" + }, { "style": "Text", "text": "To add the end rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Position", "definition": "Position is the section of the data structure that keeps track of information within the scope of each position, and during the time a position is open.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Position node works" + }, { "style": "Text", "text": "The position node is available both in the current context and the last context, that is, you may retrieve information of the position that was last opened or the one currently open." @@ -3936,21 +4394,25 @@ { "style": "List", "text": "rates describing each candle in the episode, such as the open, close, min and max rates;" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Position node" + }, { "style": "Text", "text": "To add the position node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Rate", "definition": "Rate is the rate at which the order is placed.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Rate node works" + }, { "style": "Text", "text": "By default, it is the rate at the close of the last candle at the moment the order is placed. All market orders have the default rate value." @@ -3962,52 +4424,60 @@ { "style": "Text", "text": "The rate is used by the system for all internal calculations affecting the accounts kept in both assets." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Rate node" + }, { "style": "Text", "text": "To add the rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Entry Target Rate", "definition": "Entry target rate is the target rate set on the initial targets definition, in the open stage of the strategy.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Entry Target Rate node works" + }, { "style": "Text", "text": "Refresh this concepts by reading about the initial target definitions at the trading system." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Entry Target Rate node" + }, { "style": "Text", "text": "To add the entry target rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Exit Target Rate", "definition": "Exit target rate is the target rate set on the initial targets definition, in the close stage of the strategy.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exit Target Rate node works" + }, { "style": "Text", "text": "Refresh this concepts by reading about the initial target definitions at the trading system." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exit Target Rate node" + }, { "style": "Text", "text": "To add the exit target rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Stage Defined In" @@ -4015,7 +4485,11 @@ { "type": "Size", "definition": "Size is the size set for the order through a combination of formulas and configurations defined in the trading system, and is the value passed on to the exchange as the size of the order.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Size node works" + }, { "style": "Text", "text": "The system provides a flexible and robust infrastructure to control execution. The size of a single order results from the combination of multiple settings." @@ -4031,16 +4505,16 @@ { "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." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Size node" + }, { "style": "Text", "text": "To add the size node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Actual Size" @@ -4054,7 +4528,11 @@ { "type": "Entry Target Size", "definition": "Entry target size is the target size set on the initial targets definition, in the open stage of the strategy.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Entry Target Size node works" + }, { "style": "Text", "text": "Refer to the explanations on the entry target size for some relevant context." @@ -4062,21 +4540,25 @@ { "style": "Text", "text": "Refresh this concepts by reading about the initial target definitions at the trading system." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Entry Target Size node" + }, { "style": "Text", "text": "To add the entry target size node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Exit Target Size", "definition": "Exit target size is the target size set on the initial targets definition, in the close stage of the strategy.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exit Target Size node works" + }, { "style": "Text", "text": "Both entry and exit target sizes may be defined either denominated in the base asset or the quoted asset. Nevertheless, the sytem keeps track of target sizes in both assets. If the target is defined denominated in the base asset, then the target for the quoted asset is calculated using the current rate, and viceversa." @@ -4084,21 +4566,25 @@ { "style": "Text", "text": "Refresh this concepts by reading about the initial target definitions at the trading system." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exit Target Size node" + }, { "style": "Text", "text": "To add the exit target size node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Size Placed", "definition": "Size placed is the size of the order placed at the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Size Placed node works" + }, { "style": "Text", "text": "In the context of a strategy stage, the size placed refers to the sum of the sizes placed for all orders placed on the corresponding stage." @@ -4106,21 +4592,25 @@ { "style": "Text", "text": "In the context of an order, it refers to the size placed for the particular order." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Size Placed node" + }, { "style": "Text", "text": "To add the size placed node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Target Size", "definition": "Target size is the target set on the initial targets definition which, in the context of a strategy stage, acts as a limit.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Target Size node works" + }, { "style": "Text", "text": "Both the close and open stages may have multiple execution algorithms, each with multiple orders defined. In this context, the target size acts as a limit, as it is defined by the user as the maximum size allowed for any given position." @@ -4128,21 +4618,25 @@ { "style": "Text", "text": "Before placing an order, the system makes sure that the size limit embodied in the target size would not be breached by opening a new order." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Target Size node" + }, { "style": "Text", "text": "To add the target size node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Exit Type", "definition": "Exit type refers to the reason why the object is closed.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exit Type node works" + }, { "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." @@ -4170,16 +4664,16 @@ { "style": "List", "text": "Closing Stage: the current stage started closing because the Close Stage is opening." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exit Type node" + }, { "style": "Text", "text": "To add the exit type node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Process Date" @@ -4190,7 +4684,11 @@ { "type": "Last", "definition": "The last object stores instances of position and strategy objects, in particular the instances that were last open at the time of evaluation, hence the adjective last.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Last node works" + }, { "style": "Text", "text": "Conceptually, last is used as an adjective applied to these concepts, such as the last position or the last strategy, providing the context on which those concepts exist." @@ -4210,34 +4708,39 @@ { "style": "List", "text": "From within a trading system, your strategies may make decisions factoring in what happened with the last position or strategy. For example, you may want to affect the size of the next position depending on the result of the last one." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Last node" + }, { "style": "Text", "text": "To add the last node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Candle", "definition": "The candle structure of nodes stores the properties that make up each candle in the episode, including open and close datetime, and the rates for open, min, max, and close.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Candle node" + }, { "style": "Text", "text": "To add the candle node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Cycle", "definition": "The trading bot performs its duties in regards to exchange orders and accounts in two consecutive cycles for each candle.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Cycle node works" + }, { "style": "Text", "text": "In the first cycle, it checks the status of orders at the exchange, synchronizes the accounts, and verifies if conditions to place new orders are met." @@ -4249,15 +4752,19 @@ { "style": "Text", "text": "The two possible values for the cycle node are First and Second." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Cycle node" + }, { "style": "Text", "text": "To add the cycle node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Cycle node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -4270,13 +4777,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Exchange Orders", "definition": "Exchange orders is the section of the data structure that keeps track of orders of all types.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exchange Orders node works" + }, { "style": "Text", "text": "The function of this section of the trading engine is to provide the data structure to hold the information of orders as they are open and closed." @@ -4288,109 +4798,125 @@ { "style": "Text", "text": "Each section of the hierarchy must have the definition of as many orders of each type as the trading system is capable of placing concurrently. For example, if the execution algorithm may place up to three limit buy orders to open a position, then three limit orders must exist under the limit buy orders section of the hierarchy. Each order defined in the trading system must reference the data structure of a matching type of order in the trading engine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exchange Orders node" + }, { "style": "Text", "text": "To add the exchange orders node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market Buy Orders", "definition": "Market buy orders is the section of the data structure that keeps track of this specific type of order.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Market Buy Orders node" + }, { "style": "Text", "text": "To add the market buy orders node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market Order", "definition": "Market order is the section of the data structure that keeps track of the properties of a specific market order, as defined in the trading system.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Order node works" + }, { "style": "Text", "text": "Each market order defined in the trading system must reference the data structure of a market order in the trading engine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Order node" + }, { "style": "Text", "text": "To add the market order node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market Sell Orders", "definition": "Market sell orders is the section of the data structure that keeps track of this specific type of order.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Market Sell Orders node" + }, { "style": "Text", "text": "To add the market sell orders node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Limit Buy Orders", "definition": "Limit buy orders is the section of the data structure that keeps track of this specific type of order.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Limit Buy Orders node" + }, { "style": "Text", "text": "To add the limit buy orders node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Limit Sell Orders", "definition": "Limit sell orders is the section of the data structure that keeps track of this specific type of order.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Limit Sell Orders node" + }, { "style": "Text", "text": "To add the limit sell orders node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Limit Order", "definition": "Limit order is the section of the data structure that keeps track of the properties of a specific limit order, as defined in the trading system.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Limit Order node works" + }, { "style": "Text", "text": "Each limit order defined in the trading system must reference the data structure of a limit order in the trading engine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Limit Order node" + }, { "style": "Text", "text": "To add the limit order node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trading Parameters", "definition": "Parameters are properties of trading sessions, defined by users, to determine their behavior and improve the quality of simulations.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Parameters node works" + }, { "style": "Text", "text": "The behavior of parameters may vary depending on the type of session." @@ -4398,9 +4924,11 @@ { "style": "Text", "text": "Each testing session has its own set of parameters. This allows you to configure different trading sessions with different parameters, and go back and forth between them as required. For instance, you may have different backtesting sessions with different date ranges, different exchange fees or different slippage settings to account for different possible scenarios." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Parameters node" + }, { "style": "Text", "text": "To add a parameters node, select Add Parameters on the session or the trading system menu, depending on the context. When a parameters node is added, the full set of parameters are created with it." @@ -4409,9 +4937,7 @@ "style": "Text", "text": "If you already have a parameters node but are missing some of the parameters, then select Add Missing Params on the menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Learning Parameters" @@ -4419,13 +4945,19 @@ { "type": "Trading System Reference", "definition": "A trading engine reference determines which trading system shall be evaluated by the trading bot to run the trading session.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading System Reference node works" + }, { "style": "Text", "text": "In other words, the trading system reference lets the process instance know which trading rules to process for the given session." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading System Reference node" + }, { "style": "Text", "text": "To add a trading ensystemgine reference, select Add Missing Children on the trading session node menu." @@ -4434,20 +4966,24 @@ "style": "Note", "text": "After adding a trading system reference node, make sure you establish the reference to the corresponding trading system hierarchy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trading Engine Reference", "definition": "A trading engine reference determines which trading engine the trading bot shall use to structure the data it processes while running the trading session.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Engine Reference node works" + }, { "style": "Text", "text": "In other words, the trading engine reference lets the process instance know which data structure to use to store information related to the trading session. This means that a workspace may have more than one trading engine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Engine Reference node" + }, { "style": "Text", "text": "To add a trading engine reference, select Add Missing Children on the trading session node menu." @@ -4456,20 +4992,24 @@ "style": "Note", "text": "After adding a trading engine reference node, make sure you establish the reference to the corresponding trading engine hierarchy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Session Base Asset", "definition": "The base asset is the asset whose price is determined by the market. It is usually the first asset in the pair, as listed by the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Session Base Asset node works" + }, { "style": "Text", "text": "Among other things, the parameter allows defining an initial balance of the corresponding asset, which may be used for trading with the corresponding trading system and trading session. Please see the configuration." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Session Base Asset node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." @@ -4477,9 +5017,11 @@ { "style": "Note", "text": "After adding a base asset node, make sure you establish a reference to the asset in a specific market of a specific exchange in the Crypto Ecosystem hierarchy." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Session Base Asset node" + }, { "style": "Text", "text": "Select Configure Base Asset on the menu to access the configuration." @@ -4529,13 +5071,19 @@ { "type": "Session Quoted Asset", "definition": "The quoted asset is the asset on which the price of the base asset is denominated in the market. It is usually the second asset in the pair, as listed by the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Session Quoted Asset node works" + }, { "style": "Text", "text": "The parameter allows defining an initial balance of the corresponding asset, which may be used for trading with the corresponding trading system and trading session. Please see the configuration." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Session Quoted Asset node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." @@ -4544,20 +5092,24 @@ "style": "Note", "text": "After adding a quoted asset node, make sure you establish a reference to the second asset in the same market of the same exchange as the reference established with the base asset." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market Base Asset", "definition": "The market base asset is the asset in the pair used to provide a quote—a price—for the quoted asset, as listed at the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Base Asset node works" + }, { "style": "Text", "text": "A market base asset must reference an asset defined under the exchange assets node." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Base Asset node" + }, { "style": "Text", "text": "To add a market base asset, select Add Market Base Asset on the market node menu." @@ -4566,20 +5118,24 @@ "style": "Note", "text": "Remember to establish a reference with an asset defined under the exchange assets node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market Quoted Asset", "definition": "The market quoted asset is the asset in the pair for which a quote is given, denominated in the base asset, as listed at the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Quoted Asset node works" + }, { "style": "Text", "text": "A market quoted asset must reference an asset defined under the exchange assets node." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Quoted Asset node" + }, { "style": "Text", "text": "To add a market quoted asset, select Add Market Quoted Asset on the market node menu." @@ -4588,14 +5144,16 @@ "style": "Note", "text": "Remember to establish a reference with an asset defined under the exchange assets node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Time Range", "definition": "The time range parameter determines the period of time on which the trading session is run.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Time Range node works" + }, { "style": "Text", "text": "The parameter offers precise control over the duration, starting and ending points of the session. Several options are available, and there are differences in how backtesting and the rest of the types of trading sessions function in this regard." @@ -4603,15 +5161,19 @@ { "style": "Text", "text": "Check the configuration to learn more." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Time Range node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Time Range node" + }, { "style": "Text", "text": "Select Configure Time Range on the menu to access the configuration. The configuration varies slightly depending on the type of session you are running." @@ -4700,13 +5262,16 @@ "style": "List", "text": "allowStartingFromThePast may be true or false." } - ], - "starting": [] + ] }, { "type": "Time Frame", "definition": "The time frame determines the collection of candles to be analyzed during a backtesting session, and the frequency with which the trading bot runs on paper trading, forward testing, and live trading sessions.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Time Frame node works" + }, { "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." @@ -4810,15 +5375,19 @@ { "style": "Text", "text": "In a backtesting session, the collection of candles evaluated is determined by the time frame selected to better simulate what would happen if the live trading session was run in the same time frame." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Time Frame node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Time Frame node" + }, { "style": "Text", "text": "Select Configure Time Frame on the menu to access the configuration." @@ -4939,13 +5508,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Slippage", "definition": "The slippage is an assumption on the difference between the simulated rate and the actual fill rate of a market order, most relevant in the context of backtesting and paper-trading sessions. The parameter is a tool to make simulations more realistic.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Slippage node works" + }, { "style": "Text", "text": "In the context of forward testing and live trading sessions, slippage does not affect the actual transactions. However, the parameter is taken into account when creating the live trading simulation until the actual order fill values are obtained from the exchange." @@ -4953,15 +5525,19 @@ { "style": "Note", "text": "Check the configuration section for the details on how slippage works." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Slippage node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Slippage node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -5010,13 +5586,16 @@ "style": "Text", "text": "{% include note.html content=\"If the slippage parameter is left empty or detached both from your session and your trading system, slippage is not computed during simulations.\"%}" } - ], - "starting": [] + ] }, { "type": "Fee Structure", "definition": "The fee structure is a parameter fundamental to the calculation of fees, both in testing and live trading sessions.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Fee Structure node works" + }, { "style": "Text", "text": "Exchange fees are a crucial part of trading. A strategy may work like a charm when you leave fees out of the equation but would lead you to bankruptcy in a live trading situation." @@ -5040,15 +5619,19 @@ { "style": "Text", "text": "The trade hits the take profit target above the Position Rate level, however, due to fees, the trade has a negative 0.32% ROI." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Fee Structure node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Fee Structure node" + }, { "style": "Text", "text": "Select Configure Fee Structure on the menu to access the configuration." @@ -5093,25 +5676,32 @@ "style": "Important", "text": "Remember that, for the time being, and until the new execution engine is released, all orders placed by the trading bot are market orders, thus, the taker fee applies in all cases." } - ], - "starting": [] + ] }, { "type": "Snapshots", "definition": "Snapshots are CSV files output by the trading bot listing every trade in a backtesting session. The snapshots parameter determines whether snapshots shall be produced, and how.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Snapshots node works" + }, { "style": "Text", "text": "Learn more about snapshots and check the configuration file to control if and how snapshots are produced." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Snapshots node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Snapshots node" + }, { "style": "Text", "text": "Select Configure Slippage on the menu to access the configuration." @@ -5148,25 +5738,32 @@ "style": "List", "text": "position determines whether to take a snapshot at the take position event or not; possible values are true or false." } - ], - "starting": [] + ] }, { "type": "Heartbeats", "definition": "During a trading session, the backend communicates with the frontend via heartbeats to inform the frontend about the status of the session. The parameter controls what information is made available to the user through the frontend.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Heartbeats node works" + }, { "style": "Text", "text": "This parameter affects how you see the progress of the trading session below the trading bot instance node on the design space." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Heartbeats node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Heartbeats node" + }, { "style": "Text", "text": "Select Configure Slippage on the menu to access the configuration." @@ -5203,8 +5800,7 @@ "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." } - ], - "starting": [] + ] }, { "type": "Learning Algorithm" @@ -5212,7 +5808,11 @@ { "type": "User Defined Parameters", "definition": "Users may define parameters to be used within the trading system during the trading session.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the User Defined Parameters node works" + }, { "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." @@ -5220,15 +5820,19 @@ { "style": "Text", "text": "These parameters may be useful, for example, when you wish to use a constant multiple times across several nodes in the definition of a strategy. Instead of feeding a constant value to all formulas involved, you may feed the parameter instead. This gives you the added benefit of being able to change the value of such a constant in a single point." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a User Defined Parameters node" + }, { "style": "Text", "text": "To add a parameter that may be missing, select Add Missing Params on the parameters node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a User Defined Parameters node" + }, { "style": "Text", "text": "Select Configure Slippage on the menu to access the configuration." @@ -5261,13 +5865,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Time Frames Filter", "definition": "The time frame filters node allows control over which time frames are to be calculated by each indicator bot instance running on the data mining operation.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Time Frames Filter node works" + }, { "style": "Text", "text": "Limiting the number of time frames calculated by any given indicator to the few that may be required by a particular trading system has a significant positive impact on performance: it reduces the load on the CPU, the memory requirements, and the requirements of storage space, in proportion with the time frames you remove." @@ -5283,15 +5890,19 @@ { "style": "Note", "text": "When no time frames filter is defined, the bot processes all time frames by default." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Time Frames Filter node" + }, { "style": "Text", "text": "To add the time frames filter node, select Add Time Frames Filter on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Time Frames Filter node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -5332,19 +5943,24 @@ "style": "Text", "text": "{% include tip.html content=\"Remove the time frames you are not interested in, making sure the JSON file is still valid.\" %}" } - ], - "starting": [] + ] }, { "type": "Paper Trading Session", "definition": "A paper trading session is a trading mode by which the trading bot instance reads a live market data feed, applies the rules defined in the associated trading system, and generates a trading simulation.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Paper Trading Session node works" + }, { "style": "Text", "text": "A paper trading session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Paper Trading Session node" + }, { "style": "Text", "text": "To add a paper trading session, select Add Paper Trading Session on the trading process instance node menu. When a session is added, it is created with the full set of parameters." @@ -5352,9 +5968,11 @@ { "style": "Note", "text": "After adding a session node, make sure you establish a reference to the trading system you want it to work with." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Paper Trading Session node" + }, { "style": "Text", "text": "Select Configure Session on the menu to access the configuration." @@ -5382,9 +6000,11 @@ { "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." - } - ], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Paper Trading Session node" + }, { "style": "Text", "text": "Before you start a paper trading session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select Run on the menu to start the session." @@ -5398,7 +6018,11 @@ { "type": "Forward Testing Session", "definition": "A forward testing session is a trading mode by which the trading bot instance performs live trading with a user-defined fraction of the available capital.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Forward Testing Session node works" + }, { "style": "Text", "text": "A forward testing session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it." @@ -5406,9 +6030,11 @@ { "style": "Important", "text": "Running a live session requires the setup of a key reference at the market reference. It also requires a live data feed, meaning that the corresponding sensor bot, along with all indicators used by the referenced trading system, must be up and running. Finally, a live session also requires at least 48 hours of historic market data. Bear in mind that the trading system may require even more historic market data to properly analyze the market." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Forward Testing Session node" + }, { "style": "Text", "text": "To add a forward testing session, select Add Forward Testing Session on the trading process instance node menu. When a session is added, it is created with the full set of parameters." @@ -5416,9 +6042,11 @@ { "style": "Note", "text": "After adding a session node, make sure you establish a reference to the trading system you want it to work with." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Forward Testing Session node" + }, { "style": "Text", "text": "Select Configure Session on the menu to access the configuration." @@ -5466,9 +6094,11 @@ { "style": "Important", "text": "You need to take this into account at the time of defining your positionSize formula. If the formula is a constant, you may easily run out of balance, as only a fraction of the balance will be available for the strategy to use. It may be a good idea to set up your positionSize as a function of your available balance instead." - } - ], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Forward Testing Session node" + }, { "style": "Text", "text": "Before you start a forward testing session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select Run on the menu to start the session." @@ -5482,7 +6112,11 @@ { "type": "Key Reference", "definition": "The key reference is a reference to an exchange account key as defined in a specific user account, in a specific exchange, on the Crypto Ecosystem hierarchy.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Key Reference node works" + }, { "style": "Text", "text": "Usually, exchanges require autentication via your exchange account key for monetary transactions only. However, some exchanges may require autentication in other contexts as well, for instance, to retrieve information above a certain quota, or to retrieve raw trades data instead of OHLCV data." @@ -5502,9 +6136,11 @@ { "style": "Important", "text": "Most exchanges do not allow the same exchange account key to be used with multiple processes querying the exchange API. This means that if you are trading with multiple trading systems or multiple sessions on the same exchange, each session requires different exchange account keys." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Key Reference node" + }, { "style": "Text", "text": "To add a key reference, select Add Key Reference on the task node menu." @@ -5513,14 +6149,16 @@ "style": "Note", "text": "Remember to establish a reference with a valid exchange account key after creating the key reference." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Live Trading Session", "definition": "A live trading session is a trading mode by which the trading bot instance reads a live market data feed, applies the rules as defined in the associated trading system, places the corresponding orders at the associated exchange, and stores the defined data products.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Live Trading Session node works" + }, { "style": "Text", "text": "A live trading session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it." @@ -5528,9 +6166,11 @@ { "style": "Important", "text": "Running a live session requires the setup of a key reference at the market reference. It also requires a live data feed, meaning that the corresponding sensor bot, along with all indicators used by the referenced trading system, must be up and running. Finally, a live session also requires at least 48 hours of historic market data. Bear in mind that the trading system may require even more historic market data to properly analyze the market." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Live Trading Session node" + }, { "style": "Text", "text": "To add a live trading session, select Add Live Trading Session on the trading process instance node menu. When a session is added, it is created with the full set of parameters." @@ -5538,9 +6178,11 @@ { "style": "Note", "text": "After adding a session node, make sure you establish a reference to the trading system you want it to work with." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Live Trading Session node" + }, { "style": "Text", "text": "Select Configure Session on the menu to access the configuration." @@ -5568,9 +6210,11 @@ { "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." - } - ], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Live Trading Session node" + }, { "style": "Text", "text": "Before you start a live trading session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select Run on the menu to start the session." @@ -5587,7 +6231,11 @@ { "type": "Sensor Bot Instance", "definition": "A sensor bot instance is a reference to a sensor bot as defined in a data mine. The instance of the bot runs the defined processes and generates the defined data products.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Sensor Bot Instance node works" + }, { "style": "Text", "text": "{{site.data.concepts.sensor_bot}}" @@ -5595,15 +6243,19 @@ { "style": "Text", "text": "The sensor bot instance holds no definitions as to what the bot does. Instead, its process instance references a process definition in the corresponding data mine. That is how the sensor bot instance obtains the information regarding what it needs to do once it is run." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Sensor Bot Instance node" + }, { "style": "Text", "text": "To add a sensor bot instance, select Add Sensor Bot Instance on the task node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Sensor Bot Instance node" + }, { "style": "Text", "text": "Select Configure Sensor Bot Instance on the menu to access the configuration." @@ -5643,9 +6295,11 @@ { "style": "Text", "text": " * Notice that the above starts a chain reaction among all indicator bots that have a data dependency with the sensor bot's output dataset. Also, if the actual date ends up changing, all indicators that determine the starting date of the market by looking at the date discovered by the sensor bot have to discard their existing data products and start over from the new date." - } - ], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Sensor Bot Instance node" + }, { "style": "Text", "text": "You do not start or stop a sensor bot instance directly. Instead, you start or stop the corresponding task." @@ -5655,7 +6309,11 @@ { "type": "Indicator Bot Instance", "definition": "An indicator bot instance is a reference to an indicator bot as defined in a data mine. The instance of the bot runs the defined processes and generates the defined data products.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Indicator Bot Instance node works" + }, { "style": "Text", "text": "{{site.data.concepts.indicator_bot}}" @@ -5663,16 +6321,19 @@ { "style": "Text", "text": "The indicator bot instance holds no definitions as to what the bot does. Instead, its processes instances reference the process definitions in the corresponding data mine. That is how the indicator bot instance obtains the information of what it needs to do once it is run." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Indicator Bot Instance node" + }, { "style": "Text", "text": "To add an indicator bot instance, select Add Indicator Bot Instance on the task node menu." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Indicator Bot Instance node" + }, { "style": "Text", "text": "You do not start or stop an indicator bot instance directly. Instead, you start or stop the corresponding task." @@ -5682,7 +6343,11 @@ { "type": "Data Mine", "definition": "A data mine is a hierarchy that contains definitions of sensor and indicators bots, and their plotters. These definitions make up the actual programs of such bots—the source code.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Mine node works" + }, { "style": "Text", "text": "In a way, data mines are catalogs of bots that anyone may create. This hierarchy provides all the tools required to create sensors, indicators, and plotters, with minimal coding required." @@ -5690,15 +6355,19 @@ { "style": "Text", "text": "Because the hierarchy provides definitions, it does not intervene in the execution of bots. Instead, the definitions in data mines are instantiated from the network hierarchy by bot instances. Bot instances and process instances are the ones running the code according to the definitions in the corresponding data mine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Mine node" + }, { "style": "Text", "text": "To add a data mine, select Add Data Mine on the mines node menu in the Superalgos Project hierarchy." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Data Mine node" + }, { "style": "Text", "text": "Select Configure Data Mine on the menu to access the configuration." @@ -5727,13 +6396,16 @@ "style": "List", "text": "codeName is the name of the data mine as used within the code of the system." } - ], - "starting": [] + ] }, { "type": "Trading Mine", "definition": "A trading mine is a hierarchy that contains definitions of trading bots and their plotters. These definitions make up the actual programs of such bots—the source code.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Mine node works" + }, { "style": "Text", "text": "Altough Superalgos is starting out with a single trading bot, the system is prepared to feature as many trading bots as developers are willing to create. As such, a trading mine is a catalog of trading bots." @@ -5745,15 +6417,19 @@ { "style": "Text", "text": "Trading mines work similarly to data mines in the sense that they provide the same kind of tools to structure the definitions of bots, including process definitions, product definitions, and plotters." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Mine node" + }, { "style": "Text", "text": "To add the trading mine node, select Add Trading Mine on the other hierarchies node menu in the Superalgos Project hierarchy." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Trading Mine node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -5766,8 +6442,7 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Learning Mine" @@ -5775,19 +6450,27 @@ { "type": "Sensor Bot", "definition": "A sensor bot is an algorithm that extracts raw data from external sources (i.e.: exchanges, Twitter, etc.) and stores it in a dataset that other bots may consume.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Sensor Bot node works" + }, { "style": "Text", "text": "The sensor bot node holds all definitions required for a sensor bot to function. Definitions are split between the definition of processes and products. A sensor's processes is an algorithm that obtains data from a third pary and produces an output for other bots to consume. Part of that output is the data products the bot creates." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Sensor Bot node" + }, { "style": "Text", "text": "To add a sensor bot, select Add Sensor Bot on the data mine node menu. A sensor bot is created along with the basic structure of nodes required to define it." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Sensor Bot node" + }, { "style": "Text", "text": "Select Configure Bot on the menu to access the configuration." @@ -5820,13 +6503,16 @@ "style": "List", "text": "codeName is the name of the bot as used within the code of the system." } - ], - "starting": [] + ] }, { "type": "Process Definition", "definition": "The process definition node groups all definitions required for a process to function. The Multi-Period-Market Process deals with time frames of one hour and above. The Multi-Period-Daily Process deals with time frames of 45 minutes and below.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Process Definition node works" + }, { "style": "Text", "text": "As hinted above, most bots—in particular indicators—have two different processes. The reason is that different data structures need to be handled in different manners. The Multi-Period-Daily process handles daily files, while the Multi-Period-Market process handles market files." @@ -5842,15 +6528,19 @@ { "style": "Note", "text": "The way in which datasets are structured by each of the processes is determined by the corresponding dataset definitions." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Process Definition node" + }, { "style": "Text", "text": "To add a process definition, select Add Process Definition on the bot's menu. A process definition node is created along with the basic structure of nodes comprising the definition." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Process Definition node" + }, { "style": "Text", "text": "Select Configure Process on the menu to access the configuration." @@ -5947,44 +6637,52 @@ "style": "List", "text": "codeName is the name of the process as used within the code of the system." } - ], - "starting": [] + ] }, { "type": "Process Output", "definition": "The process output groups the definitions of which datasets are impacted by the process, that is, which datasets the process builds or takes a part in building.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Process Output node" + }, { "style": "Text", "text": "To add a process output node, select Add Missing Items on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Process Dependencies", "definition": "Process dependencies are references to various data structures on which the process depends to function.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Process Dependencies node works" + }, { "style": "Text", "text": "While processes run autonomously, most processes participate in a value-adding chain by which a process produces a data product that other processes may consume as an input to be processed further. This means that bots—while autonomous in their particular jobs—do depend both on other bots and on the data other bots produce." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Process Dependencies node" + }, { "style": "Text", "text": "To add a process dependencies node, select Add Missing Items on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Status Dependency", "definition": "Status dependencies are references to a status report that define which process the process establishing the reference depends on.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Status Dependency node works" + }, { "style": "Text", "text": "The reference is established to acquire the information relative to what the target process is doing. For example, by reading a status report a process may learn when was the last time the referenced process ran, and what was the last file processed." @@ -6008,9 +6706,11 @@ { "style": "Text", "text": "The image above shows a case of a self-reference status dependency as well as a market ending point status dependency." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Status Dependency node" + }, { "style": "Text", "text": "To add a status dependency, select Add Status Dependency on the process dependencies node menu." @@ -6018,9 +6718,11 @@ { "style": "Text", "text": "{% include tip.html content=\"Remember that a status dependency must be configured, and must establish a reference to the appropriate status report.\" %}" - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Status Dependency node" + }, { "style": "Text", "text": "Select Configure Status Dependency on the menu to access the configuration." @@ -6049,13 +6751,16 @@ "style": "List", "text": "mainUtility determines the type of status dependency, with possible values being Self Reference, Market Starting Point, or Market Ending Point." } - ], - "starting": [] + ] }, { "type": "Status Report", "definition": "Status reports serve as temporal annotations that bots read every time they run to know what was done in the previous cycle and what the state of affairs is at present. Status reports are dynamic, and they change constantly, with updates after every cycle of the associated process.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Status Report node works" + }, { "style": "Text", "text": "Bots do not run continuously. Instead, they run in cycles. A cycle usually lasts until there is no more data to process, and once they finish, they shut down until the next cycle is due. A status report is a file every bot writes at the end of each cycle with information about the last run, including the datetime of the run and the last record processed." @@ -6063,21 +6768,25 @@ { "style": "Text", "text": "A status report may be consumed by the same bot producing it, or by other bots." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Status Report node" + }, { "style": "Text", "text": "To add a status report, select Add Missing Items on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Execution Started Event", "definition": "The execution started event is the event that triggers the execution of a process. It usually references the execution finished event of another process on which the process depends on.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Execution Started Event node works" + }, { "style": "Text", "text": "These references determine when a process is due for another run. By listening to the execution finished event of the process it depends on, it may wake up just in time to process the new batch of data the dependency has just delivered." @@ -6093,9 +6802,11 @@ { "style": "Text", "text": "Not setting up this event on a trading session may result in eventual data inconsistencies, as—in theory—the trading bot may run with some indicators up to date and some slightly delayed." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Execution Started Event node" + }, { "style": "Text", "text": "To add an execution started event, select Add Missing Items on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them." @@ -6104,14 +6815,16 @@ "style": "Text", "text": "{% include tip.html content=\"Remember that an execution started event must establish a reference to the appropriate execution finished event.\" %}" } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Execution Finished Event", "definition": "The execution finished event is the event that processes trigger once they have finished an execution cycle. The event is broadcasted to whoever wants to listen, so that other bots may know when the process has finished its execution cycle.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Execution Finished Event node works" + }, { "style": "Text", "text": "The execution finished event is responsible for triggering the execution of every process that depends on the data a bot produces. If bot Alice depends on bot Bob, Alice listens to the execution finished event of Bob so that it may start a new execution cycle as soon as Bob finishes its cycle. Alice listens to Bob's execution finished event by establishing a reference from its execution started event." @@ -6123,21 +6836,25 @@ { "style": "Text", "text": "The image above shows a reference established from the execution started event of a process to the execution finished event of another process." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Execution Finished Event node" + }, { "style": "Text", "text": "To add an execution finished event, select Add Missing Items on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Output Dataset Folder", "definition": "An output dataset folder is an organizational device used to create arrangements of output datasets, particularly useful when the bot has many products.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Output Dataset Folder node works" + }, { "style": "Text", "text": "In cases in which a single bot has many different products, output dataset folders may help organize the outputs referencing each product, making their management easier. Folders may be nested like folders in the file system." @@ -6145,15 +6862,19 @@ { "style": "Text", "text": "The use of output dataset folders is optional, as product definitions may also exist outside of folders." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Output Dataset Folder node" + }, { "style": "Text", "text": "To add the output dataset folder node, select Add Output Dataset Folder on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Output Dataset Folder node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -6166,13 +6887,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Product Definition Folder", "definition": "A product definition folder is an organizational device used to create arrangements of product definitions, particularly useful when the bot has many products.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Product Definition Folder node works" + }, { "style": "Text", "text": "In cases in which a single bot has many different products, product definitions folders may help organize those products, making their management easier. Folders may be nested like folders in the file system." @@ -6180,21 +6904,25 @@ { "style": "Text", "text": "The use of product definition folders is optional, as product definitions may also exist outside of folders." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Product Definition Folder node" + }, { "style": "Text", "text": "To add the product definition folder node, select Add Product Definition Folder on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Product Definition", "definition": "The product definition node holds all definitions that make up a product, including how the product is calculated and the datasets the product is comprised of.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Product Definition node works" + }, { "style": "Text", "text": "A bot may feature multiple products, thus, there may be multiple product definitions. Three main aspects need to be defined in terms of products: the characteristics of the dataset, the composition of each record, and the way records are calculated." @@ -6202,15 +6930,19 @@ { "style": "Note", "text": "A product definition usually references a plotter module, which provides a graphic representation of the underlying dataset" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Product Definition node" + }, { "style": "Text", "text": "To add a product definition, select Add Product Definition on the bot's node menu. A product definition is created along with the basic structure of nodes required to make up a product." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Product Definition node" + }, { "style": "Text", "text": "Select Configure Product on the menu to access the configuration." @@ -6251,25 +6983,32 @@ "style": "List", "text": "pluralVariableName is the plural form of the variable." } - ], - "starting": [] + ] }, { "type": "Dataset Definition", "definition": "A data set is a collection of files stored in the designated location, as per the definitions on the referenced data product in the corresponding data mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Dataset Definition node works" + }, { "style": "Text", "text": "A good part of what makes datasets easy to consume by other bots is the fact that they are standardized in terms of their structure. It is that structure that is specified in the dataset definitions." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Dataset Definition node" + }, { "style": "Text", "text": "To add a dataset definition, select Add Dataset Definition on the bot's node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Dataset Definition node" + }, { "style": "Text", "text": "Select Configure Definition on the menu to access the configuration." @@ -6426,13 +7165,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Indicator Bot", "definition": "An indicator bot is an algorithm that processes information that other bots have generated, and produces elaborate datasets for others to consume.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Indicator Bot node works" + }, { "style": "Text", "text": "The indicator bot node holds all definitions required for an indicator bot to function. Definitions are split between the definition of processes and products. Processes are algorithms that go through an input dataset, perform certain calculations, and produce an output. Products are the outcome of the work produced by these algorithms, in the form of ellaborate data sets." @@ -6440,15 +7182,19 @@ { "style": "Text", "text": "Most of the behavior expected from an indicator bot is defined by the structure of nodes in the hierarchy and the references among the nodes within these definitions. As such, you do not need to code any of the functions that make up the infrastructure functionality. Dependencies, outputs, data structures, execution sequences, and several other problems are handled by the definitions embodied in the structure of nodes that make up an indicator, and are configured in the visual environment of the design space. Coding is limited to the actual calculation and data building procedures." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Indicator Bot node" + }, { "style": "Text", "text": "To add an indicator bot, select Add Indicator Bot on the data mine node menu. An indicator bot is created along with the basic structure of nodes required to define it." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Indicator Bot node" + }, { "style": "Text", "text": "Select Configure Bot on the menu to access the configuration." @@ -6477,13 +7223,16 @@ "style": "List", "text": "codeName is the name of the bot as used within the code of the system." } - ], - "starting": [] + ] }, { "type": "Output Dataset", "definition": "The output dataset is a reference to a dataset definition. By establishing such reference, the process acquires the definitions as of how the dataset is to be constructed.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Output Dataset node works" + }, { "style": "Text", "text": "There are other effects of establishing a reference from the output dataset to a product dataset definition. Upon execution, every time a process finishes a processing cycle, it triggers an event that may be consumed by other entities. This event indicates that the datasets impacted by the process have been updated." @@ -6503,9 +7252,11 @@ { "style": "Note", "text": "An output dataset must reference a dataset definition." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Output Dataset node" + }, { "style": "Text", "text": "Output datasets may be added in bulk, for all defined products, or one by one." @@ -6526,14 +7277,16 @@ "style": "Note", "text": "Make sure each product has properly defined dataset definitions before creating output datasets in bulk. You may always delete the output datasets and re-create them at will." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Data Dependency", "definition": "Data dependencies are references established with dataset definitions of other bots, determining which datasets the process establishing the reference uses as input.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Dependency node works" + }, { "style": "Text", "text": "Most bots consume data other bots have produced. Because bots need the data as input for their calculations, processes establish a data dependency with the dataset definitions of other bots. The reference provides the process with all the information needed to decode the dataset, enabling it to perform the required calculations." @@ -6545,9 +7298,11 @@ { "style": "Text", "text": "The image above shows data dependencies in one bot referencing dataset definitions of another bot." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Dependency node" + }, { "style": "Text", "text": "To add a single data dependency, select Add Data Dependency on the process dependencies, bot data dependencies, or data dependency folder node menus." @@ -6568,14 +7323,16 @@ "style": "Text", "text": "It is unlikely that a bot requires numerous data dependencies, thus, the most common scenario is setting up individual data dependencies and establishing references manually. However, if your bot requires multiple data dependencies, the bulk features may be quite useful, as you may create all data dependencies for any given data mine, and simply delete those that are not required." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Record Definition", "definition": "The record definition is where indicators define how many properties, what properties and in which order those properties will be made available in each record.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Record Definition node works" + }, { "style": "Text", "text": "Bots store data in the form of arrays of records, in a minimized plain text file and the standard JSON format, although not as objects with named properties, but as arrays." @@ -6595,21 +7352,25 @@ { "style": "Text", "text": "Storing objects with named properties in the JSON format would be inappropriate as labels would repeat over and over, creating a ridiculous amount of unnecessary information. However, storing arrays in the JSON standard facilitates the handling of files in the context of JavaScript and Node.JS." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Record Definition node" + }, { "style": "Text", "text": "To add a record definition node, select Add Record Definition on the product definition node menu. A record definition node is created along with the first record property." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Record Property", "definition": "A record property is a piece of information that may be stored as part of the dataset or made available as a calculated property.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Record Property node works" + }, { "style": "Text", "text": "Records may have as many properties as required." @@ -6621,15 +7382,19 @@ { "style": "Text", "text": "{% include tip.html content=\"The first two records are usually the begin and end records, featuring the corresponding datetimes that indicate when the record starts and ends.\" %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Record Property node" + }, { "style": "Text", "text": "To add a record property, select Add Record Property on the bot's node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Record Property node" + }, { "style": "Text", "text": "Select Configure Property on the menu to access the configuration." @@ -6678,194 +7443,37 @@ "style": "Text", "text": "The image above shows a record definition with four record properties." } - ], - "starting": [] + ] }, { "type": "Formula", "definition": "A formula is a mathematical expression intended to determine a numerical value to be applied dynamically to a certain property.", - "content": [ + "paragraphs": [ { - "style": "Text", - "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": "Title", + "text": "How the Formula node works" }, { "style": "Text", - "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." + "text": "In the context of the trading engine, formulas are used to create user defined statistics." }, { "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": "" - }, - { - "style": "Text", - "text": "tradingEngine.current.position.entryTargetRate.value * 1.03" - }, - { - "style": "Text", - "text": "" + "text": "Formulas may use indicators and object properties made available by the trading engine. They must evaluate to a number." }, { "style": "Note", - "text": "You may use any variable made available by the trading engine, as explained on the accessing runtime data page." + "text": "To learn how to write formulas, see syntax overview." + }, + { + "style": "Title", + "text": "Adding a Formula node" }, { "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": "" - }, - { - "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": "" - }, - { - "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": "" - }, - { - "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": "Text", - "text": "" + "text": "To add the formula node, select Add Missing Items on the parent node menu." } - ], - "adding": [ - { - "style": "Text", - "text": "To add a formula, select Add Formula on the corresponding parent node menu." - } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Announcement Formula" @@ -6873,7 +7481,11 @@ { "type": "Calculations Procedure", "definition": "The calculations procedure processes information to be fed to calculated properties. Calculated properties are not stored in the data set; instead, they are calculated in real-time as the data is consumed by others.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Calculations Procedure node works" + }, { "style": "Text", "text": "Bots store data in the minimized array format as a strategy to build the lightest possible datasets. For the same reason, a bot may choose not to store easily calculable information." @@ -6889,21 +7501,25 @@ { "style": "Note", "text": "To fully understand the role of the calculations procedure, please refer to the data mining workflow page." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Calculations Procedure node" + }, { "style": "Text", "text": "To add a calculations procedure, select Add Missing Items on the product definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Procedure Initialization", "definition": "The procedure initialization is used to initialize variables used by the procedure loop.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Procedure Initialization node works" + }, { "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." @@ -6923,57 +7539,69 @@ { "style": "Text", "text": "" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Procedure Initialization node" + }, { "style": "Text", "text": "To add a procedure initialization, select Add Procedure Initialization on the corresponding procedure node menu. A procedure initialization node is created along with the corresponding JavaScript node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Procedure Loop", "definition": "The procedure loop holds the JavaScript code that reads an input, processes the information, and generates an output recursively.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Procedure Loop node works" + }, { "style": "Note", "text": "Please refer to the coding references page to learn how to code the indicator's logic." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Procedure Loop node" + }, { "style": "Text", "text": "To add a procedure loop, select Add Procedure loop on the corresponding procedure node menu. A procedure loop node is created along with the corresponding JavaScript node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Data Building Procedure", "definition": "The data building procedure processes information to be fed to properties that are stored in the output dataset.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Building Procedure node works" + }, { "style": "Text", "text": "This procedure holds the core logic of the bot, as it features the code that performs the calculations required to produce the new data set. The code is split between a procedure initialization and a procedure loop." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Building Procedure node" + }, { "style": "Text", "text": "To add a data buildings procedure, select Add Missing Items on the product definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trading Bot", "definition": "A trading bot is a computer program that—based on datasets exposed as products by other bots (counting sensors, indicators and even other trading bots)—applies the trading logic defined on a trading system to, on one side, generate a complete trading simulation (outputting datasets that include trades, the action of strategies, validation of conditions, etc.), and on the other side, manage the execution of orders when on a forward testing or live trading session.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Bot node works" + }, { "style": "Text", "text": "In Superalgos, a trading bot is a computer program designed to leverage the Superalgos infrastructure to provide smart trading features to users building, testing, and deploying trading systems. As such, a trading bot does not feature trading logic in and of itself. Instead, it executes the logic defined in trading systems." @@ -6989,15 +7617,19 @@ { "style": "Text", "text": "Trading mines make building trading bots a more accessible feat, providing a framework to produce compartmentalized definitions for the bots' processes and products, just like data mines do for sensors and indicators." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Bot node" + }, { "style": "Text", "text": "To add the trading bot node, select Add Trading Bot on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Trading Bot node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -7010,8 +7642,7 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Learning Bot" @@ -7019,7 +7650,11 @@ { "type": "Plotter", "definition": "A plotter is a device used to produce a graphic representation of datasets generated by bots.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Plotter node works" + }, { "style": "Text", "text": "Plotters usually have a one-to-one relationship with bots, as they are often created as a customized solution. However, in practice, there is no constraint to creating any number of plotters for a single bot or a single plotter for multiple bots." @@ -7039,15 +7674,19 @@ { "style": "List", "text": "Apply graphical styles to those lines and polygons." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Plotter node" + }, { "style": "Text", "text": "To add a plotter, select Add Plotter on the data mine node menu. An indicator bot is created along with the basic structure of nodes required to define it." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plotter node" + }, { "style": "Text", "text": "Select Configure Plotter on the menu to access the configuration." @@ -7076,13 +7715,16 @@ "style": "List", "text": "codeName is the name of the plotter as it is used within the bot's code." } - ], - "starting": [] + ] }, { "type": "Trading System", "definition": "A trading system is a framework handling the low-level logic that serves to structure the processes and methods used to implement and deploy trading strategies.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading System node works" + }, { "style": "Text", "text": "In practical terms, a trading system is a hierarchical arrangement organizing the actionable aspects of your investment plan. The hierarchy contains definitions regarding any number of trading strategies, all operating on the same market and sharing the same initial capital allocation." @@ -7102,9 +7744,11 @@ { "style": "Text", "text": "As a corollary to the above, if you wish strategies to operate in different markets, or you wish strategies to be able to take positions simultaneously, then you must set up those strategies in different trading systems." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading System node" + }, { "style": "Text", "text": "To add a trading system, select Add Trading System on the other hierarchies node menu in the Superalgos Project hierarchy." @@ -7113,14 +7757,16 @@ "style": "Text", "text": "{% include tip.html content=\"You may work with as many trading systems as you wish\" %}" } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trading Strategy", "definition": "A trading strategy is the description of a set of actions or events run in stages. Events are triggered upon the validation of precise conditions describing specific market situations. Trading strategies are designed to achieve a specific goal within the broader plan of a trading system via taking and managing positions.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Strategy node works" + }, { "style": "Text", "text": "The definition of a strategy may be analyzed in three sections:" @@ -7188,9 +7834,11 @@ { "style": "Text", "text": "However, Superalgos is flexible enough to allow you to override this hard interpretation of the concept of a position. For example, you may design market-making strategies, a strategy to balance portfolios, or develop all sorts of ideas that don't necessarily fit in that part of the definition." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Strategy node" + }, { "style": "Text", "text": "To add a strategy, select Add Strategy on the trading system node menu. The strategy node is created along with the rest of the basic structure of nodes required to define each of the strategy stages and their events." @@ -7203,14 +7851,16 @@ "style": "Important", "text": "Strategies within the same trading system work in the same market, have the same base asset, and —most importantly—share the same capital. This means that only one strategy in the trading system may be triggered at any one point and that no other strategy in the trading system may be triggered until the first one is triggered off. If you wish to have more than one strategy trading at the same time, then those strategies must be put in separate trading systems. " } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trigger Stage", "definition": "The trigger stage deals with monitoring the market in search of trading opportunities with the corresponding strategy.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trigger Stage node works" + }, { "style": "Text", "text": "A trading system may have multiple strategies designed for the same market." @@ -7238,9 +7888,11 @@ { "style": "Text", "text": "However, the strategy may also be triggered off without taking a position. When a strategy is triggered off, the trading system goes back to monitoring the trigger-on definitions for all strategies, and capital is released to be used by whatever strategy is triggered-on next." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trigger Stage node" + }, { "style": "Text", "text": "To add a trigger stage node, select Add Missing Stages on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events." @@ -7249,14 +7901,16 @@ "style": "Note", "text": "Only one trigger stage may exist in each strategy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trigger On Event", "definition": "The trigger-on event defines the set of rules that need to be met for the corresponding strategy to be triggered on. A strategy that is triggered may use all the capital available to the trading system, and prevents other strategies in the system from triggering.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trigger On Event node works" + }, { "style": "Text", "text": "In conceptual terms, the trigger-on event is the mechanism you use to define the specific situations in which you would consider trading with the corresponding strategy. Think of the trigger-on event as the definition of the scenario in which the trading idea behind the strategy should be carefully considered." @@ -7264,21 +7918,25 @@ { "style": "Text", "text": "Once a strategy is triggered-on, the system starts evaluating the take position event. In conceptual terms, it means that the system has been alerted that the trading idea behind the corresponding trading strategy has produced a signal and that it should carefully monitor the market for the opportunity to take a position." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trigger On Event node" + }, { "style": "Text", "text": "To add a trigger-on event node, select Add Missing Events on the trigger stage node menu. All events that may be missing are created along with the rest of the basic structure of nodes required to define each of them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Trigger Off Event", "definition": "The trigger-off event defines the situation in which the corresponding strategy shall be triggered-off. A strategy that is triggered-off releases the capital in reserve and makes it available to other strategies in the trading system.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trigger Off Event node works" + }, { "style": "Text", "text": "In conceptual terms, the trigger-off event is the mechanism you use to define the situation in which the corresponding strategy should stop considering the trading opportunity signaled by the trigger-on event. That is, you use the trigger off event to describe the scenario for the invalidation of the trading idea behind the strategy." @@ -7290,21 +7948,25 @@ { "style": "Text", "text": "In the first scenario, the strategy remains on until the position is closed. As the position is closed, the strategy is triggered-off. In the second scenario, the strategy is triggered-off immediately." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trigger Off Event node" + }, { "style": "Text", "text": "To add a trigger-off event node, select Add Missing Events on the trigger stage node menu. All events that may be missing are created along with the rest of the basic structure of nodes required to define each of them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Take Position Event", "definition": "The take position event defines the situation that needs to be met to take a position.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Take Position Event node works" + }, { "style": "Text", "text": "The trigger-on event merely selects a strategy to be considered for trading under the current market situation. The actual decision to enter a position may require more specific conditions to be met. For that reason, the take position event is a separate entity from the trigger-on event." @@ -7316,21 +7978,25 @@ { "style": "Text", "text": "Once the take position event is triggered, the decision to take a position has been made and there is nothing else to consider in that regard. Therefore, the runtime evaluation of the trading system shifts from the trigger stage to the open stage." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Take Position Event node" + }, { "style": "Text", "text": "To add a take position event node, select Add Missing Events on the trigger stage node menu. All events that may be missing are created along with the rest of the basic structure of nodes required to define each of them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Open Stage", "definition": "The open stage deals with the definitions that make up the logic to enter a position, including the target rate and size, and order execution.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Open Stage node works" + }, { "style": "Text", "text": "The open stage comes into play once the take position event is triggered." @@ -7358,9 +8024,11 @@ { "style": "List", "text": "the take profit or stop loss targets are hit." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Open Stage node" + }, { "style": "Text", "text": "To add an open stage node, select Add Missing Stages on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events." @@ -7369,14 +8037,16 @@ "style": "Note", "text": "Only one open stage may exist in each strategy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Close Stage Event", "definition": "The close stage event defines the set of rules that need to be met for the corresponding stage to be closed.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Close Stage Event node works" + }, { "style": "Text", "text": "Both the open and close stages are closed once the target size is filled." @@ -7384,34 +8054,39 @@ { "style": "Text", "text": "However, Superalgos allows an extra level of control so that the user may choose to close either stage given specific market situations. Such is the intent of the close stage event." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Close Stage Event node" + }, { "style": "Text", "text": "To add the close stage event node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Initial Targets", "definition": "The initial targets node holds the most basic definitions about the position to be taken: the target rate and the target size.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Initial Targets node" + }, { "style": "Text", "text": "To add the initial targets node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Managed Stop Loss", "definition": "The managed stop loss node features the definition of the phases that make up the management of the stop loss target as the position develops.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Managed Stop Loss node works" + }, { "style": "Text", "text": "A stop loss target is a crucial element of a trading strategy, as it is the device in charge of preserving capital. Used wisely, the management of the stop loss may also play the role of protecting unrealized profits." @@ -7427,21 +8102,25 @@ { "style": "Note", "text": "The above example of a constant stop loss followed by a trailing stop is merely an example of a typical setup. The formulas you use to determine the rate of the target on each phase may be anything you choose, thus, you may achieve whatever behavior you imagine and can describe mathematically." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Managed Stop Loss node" + }, { "style": "Text", "text": "To add a stop node, select Add Missing Items on the manage stage node menu. All items that may be missing are created along with the rest of the basic structure of nodes required to define each of them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Phase", "definition": "The management of take profit and stop loss targets is done in phases. Phase 1 sets the initial targets, either for the managed stop loss or the managed take profit, and becomes active as soon as the first order is placed. Subsequent phases allows switching to different formulas given certain market situations.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Phase node works" + }, { "style": "Text", "text": "The default management of phases is sequential, meaning that phase 2 comes after phase 1, phase 3 comes after phase 2, and so on." @@ -7469,21 +8148,25 @@ { "style": "Text", "text": "{% include tip.html content=\"This explanation about phase 1 may be extended to any other phase, as they all work similarly, and it applies both for managed stop loss phases and managed take profit phases.\" %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Phase node" + }, { "style": "Text", "text": "To add a new phase, select Add Phase on the stop or take-profit node menu. A new phase is added along with the basic structure of nodes required to define each of them and their events." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Next Phase Event", "definition": "The next phase event determines when there should be a switch of phases to the next phase in a predefined sequence.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Next Phase Event node works" + }, { "style": "Text", "text": "The management of a position is —by default—done in sequential phases, each phase with its formula. To move from one phase to the next, a situation you define must be validated." @@ -7503,21 +8186,25 @@ { "style": "Text", "text": "{% include tip.html content=\"To set up a next phase event, add the node and define the situation that should trigger the event.\" %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Next Phase Event node" + }, { "style": "Text", "text": "To add a next phase event, select Add Next Phase Event on the corresponding phase node menu. The event is added along with the basic structure of nodes to define it." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Move To Phase Event", "definition": "The move to phase event determines when there should be a switch of phases from the current phase to an arbitrary phase determined by a reference.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Move To Phase Event node works" + }, { "style": "Text", "text": "While phases are defined in a sequence and you may choose to manage the position by shifting from one phase to the next in the sequence, the move to phase event offers an alternative." @@ -7533,9 +8220,11 @@ { "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." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Move To Phase Event node" + }, { "style": "Text", "text": "To add a move-to-phase event, select Add Move to Phase Event on the corresponding phase node menu. The event is added along with the basic structure of nodes to define it." @@ -7544,14 +8233,16 @@ "style": "Note", "text": "Remember to establish a reference with the phase you wish to activate once the situation associated with the event validates true." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Managed Take Profit", "definition": "The managed take profit node features the definition of the phases that make up the management of the take profit target as the position develops.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Managed Take Profit node works" + }, { "style": "Text", "text": "A take profit target bears an important role in your strategy, as it plays a crucial role in determining the risk/reward ratio of the trading opportunity that materialized, and upon which your strategy acted to take a position." @@ -7563,21 +8254,25 @@ { "style": "Note", "text": "The system provides the same functionality for managing the take profit target as explained for the managed stop loss target, so please make sure you go through that section too. " - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Managed Take Profit node" + }, { "style": "Text", "text": "To add a take profit node, select Add Missing Items on the manage stage node menu. All items that may be missing are created along with the rest of the basic structure of nodes required to define each of them." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Target Size In Base Asset", "definition": "Target size in base asset is used to define the size of the position, denominating it in the base asset.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Target Size In Base Asset node works" + }, { "style": "Text", "text": "The system supports defining the size of the position in either asset involved in the market: the base asset, or the quoted asset, as per the exchange listing of the market." @@ -7665,21 +8360,25 @@ { "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)." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Target Size In Base Asset node" + }, { "style": "Text", "text": "To add the target size in base asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Target Size In Quoted Asset", "definition": "Target size in quoted asset is used to define the size of the position, denominating it in the quoted asset.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Target Size In Quoted Asset node works" + }, { "style": "Text", "text": "If you prefer to define the size of the position denominated in the quoted asset, then use this node and delete the target size in base asset node." @@ -7687,21 +8386,25 @@ { "style": "Important", "text": "Make sure you read the definition of the target size in base asset node to get the proper context for this definition." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Target Size In Quoted Asset node" + }, { "style": "Text", "text": "To add the target size in quoted asset node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Target Rate", "definition": "The target rate is a reference rate that may affect simulations and that, in combination with the placement of managed stop loss and managed take profit targets, is used to determine whether the targets have been hit.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Target Rate node works" + }, { "style": "Text", "text": "

Internal Use

" @@ -7893,21 +8596,25 @@ { "style": "Note", "text": "As you see, flexibility is a key design feature in Superalgos." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Target Rate node" + }, { "style": "Text", "text": "To add the target rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Order Rate", "definition": "The order rate node defines the rate of limit orders.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Order Rate node works" + }, { "style": "Text", "text": "Because the purpose of limit orders is to have control over the rate at which the order is executed, the definition of the order rate is required for all limit orders." @@ -7915,21 +8622,25 @@ { "style": "Note", "text": "Please, read about limit orders to complement the information in this definition." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Order Rate node" + }, { "style": "Text", "text": "To add the order rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Open Execution", "definition": "The open execution node groups all execution algorithms involved in the process of opening a position.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Open Execution node works" + }, { "style": "Text", "text": "One of the crucial elements that make up trading intelligence is the capacity to control every aspect of order execution, as the execution itself entails strategic elements that directly affect performance." @@ -7949,21 +8660,25 @@ { "style": "Text", "text": "This model allows the granular control of orders with which you may build algorithms that may interact with other algorithms, and so on." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Open Execution node" + }, { "style": "Text", "text": "To add the open execution node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Execution Algorithm", "definition": "An execution algorithm is a set of instructions used to place and manage orders at the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Execution Algorithm node works" + }, { "style": "Text", "text": "Any given strategy may have simple or very complex execution requirements. To deal with complexity, Superalgos allows users to set up as many execution algorithms as required." @@ -7979,15 +8694,19 @@ { "style": "Text", "text": "An execution algorithm is a set of instructions in the sense that the orders defined in each algorithm are themselves the instructions. That is, an execution algorithm is a set of predefined orders which may be created or canceled given specific market situations." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Execution Algorithm node" + }, { "style": "Text", "text": "To add the execution algorithm node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Execution Algorithm node" + }, { "style": "Text", "text": "To configure the execution algorithm node, select Configure on the menu." @@ -8016,13 +8735,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Market Buy Order", "definition": "A market buy order is an instruction sent to the exchange to buy the base asset, for immediate execution at current market prices.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Buy Order node works" + }, { "style": "Text", "text": "Traders usually use market orders when the priority is the certainty of execution over the rate of execution. Depending on the size of the order and the liquidity of the particular market/exchange, market orders may experience more or less slippage." @@ -8238,15 +8960,19 @@ { "style": "List", "text": "The size filled at the level of the stage must be within the target size defined under the initial targets node." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Buy Order node" + }, { "style": "Text", "text": "To add the market buy order node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Market Buy Order node" + }, { "style": "Text", "text": "To configure the market buy order node, select Configure on the menu." @@ -8283,25 +9009,32 @@ "style": "List", "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } - ], - "starting": [] + ] }, { "type": "Market Sell Order", "definition": "A market sell order is an instruction sent to the exchange to sell the base asset, for immediate execution at current market prices.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Sell Order node works" + }, { "style": "Text", "text": "{% include tip.html content=\"Please read the definition of market buy order for relevant information about how orders in general—and market orders in particular—work. \" %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Sell Order node" + }, { "style": "Text", "text": "To add the market sell order node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Market Sell Order node" + }, { "style": "Text", "text": "To configure the market sell order node, select Configure on the menu." @@ -8338,13 +9071,16 @@ "style": "List", "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } - ], - "starting": [] + ] }, { "type": "Limit Buy Order", "definition": "A limit buy order is an instruction sent to the exchange to buy the base asset, for execution at a specific rate or better.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Limit Buy Order node works" + }, { "style": "Text", "text": "Traders usually use limit orders when the priority is the rate of execution over the certainty of execution. Limit orders are much more efficient than market orders in terms of rate, particularly for larger sizes which—when executed as market orders—may suffer considerable slippage filled as fast as possible with the order book of the particular instant." @@ -8372,15 +9108,19 @@ { "style": "Text", "text": "{% include tip.html content=\"Please read the definition of market buy order for relevant information about how orders in general work, in particular, the section about Order Size, Filling of Orders, Closing of Orders, and Spawning Multiple Orders. \" %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Limit Buy Order node" + }, { "style": "Text", "text": "To add the limit buy order node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Limit Buy Order node" + }, { "style": "Text", "text": "To configure the limit buy order node, select Configure on the menu." @@ -8417,25 +9157,32 @@ "style": "List", "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } - ], - "starting": [] + ] }, { "type": "Limit Sell Order", "definition": "A limit sell order is an instruction sent to the exchange to sell the base asset, for execution at a specific rate or better.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Limit Sell Order node works" + }, { "style": "Text", "text": "{% include tip.html content=\"Please read the definition of limit buy order for relevant information about how limit orders work. Also, please read the definition of " - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Limit Sell Order node" + }, { "style": "Text", "text": "To add the limit sell order node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Limit Sell Order node" + }, { "style": "Text", "text": "To configure the limit sell order node, select Configure on the menu." @@ -8472,13 +9219,16 @@ "style": "List", "text": "spawnMultipleOrders is the parameter that indicates whether additional spawned orders are allowed (true) or not (false)." } - ], - "starting": [] + ] }, { "type": "Create Order Event", "definition": "The create order event controls the placement of orders.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Create Order Event node works" + }, { "style": "Text", "text": "Even though the decision to take a position may have been made, the user may still decide to exert additional control over the placement of orders. Such is the intent of the create order event." @@ -8490,39 +9240,47 @@ { "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." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Create Order Event node" + }, { "style": "Text", "text": "To add the create order event node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Cancel Order Event", "definition": "The cancel order event makes cancelling limit orders possible.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Cancel Order Event node works" + }, { "style": "Text", "text": "The cancel order event defines the market situations in which a limit order shall be canceled. When the event is triggered, the order is closed, even when the order may have been partially filled. In such a case, the size filled remains as is, and all accounts are computed accordingly, with the partial fill." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Cancel Order Event node" + }, { "style": "Text", "text": "To add the cancel order event node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Simulated Exchange Events", "definition": "The simulated exchange event node allows to override the parameters set at the level of the trading session on a per order basis to determine how each order shall be simulated.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Simulated Exchange Events node works" + }, { "style": "Text", "text": "The offspring nodes under simulated exchange events allow setting order-specific parameters for the size filled, actual rate, and fees paid, so that each order may be simulated in a specific manner." @@ -8530,21 +9288,25 @@ { "style": "Text", "text": "If either of the offspring nodes is not present or is undefined, then the parameters configured at the level of the trading session are factored in by default." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Simulated Exchange Events node" + }, { "style": "Text", "text": "To add the simulated exchange events node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Simulated Partial Fill", "definition": "The simulated partial fill parameter allows simulating the partial fill of orders.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Simulated Partial Fill node works" + }, { "style": "Text", "text": "Upon each execution, the simulation verifies if the current candle intersects the rate set for the order. If it does, it uses the value in this parameter as a factor to determine and keep track of what percentage of the order is filled." @@ -8556,15 +9318,19 @@ { "style": "Text", "text": "When the parameter is not present or undefined, the simulation assumes the order is filled as soon as the rate is hit." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Simulated Partial Fill node" + }, { "style": "Text", "text": "To add the simulated partial fill node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Simulated Partial Fill node" + }, { "style": "Text", "text": "To configure the simulated partial fill node, select Configure on the menu." @@ -8593,13 +9359,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Simulated Actual Rate", "definition": "The simulated actual rate node allows setting a specific rate value for the simulation of each order, overriding the slippage parameter of the trading session.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Simulated Actual Rate node works" + }, { "style": "Text", "text": "The slippage parameter of the trading session allows setting a blanket slippage for all orders in the trading system. The simulated actual rate node allows control on a per-order basis, so each order may be simulated with a specific rate." @@ -8607,21 +9376,25 @@ { "style": "Note", "text": "If the node is not present or the parameter is undefined, the slippage parameter set up for the trading session is used." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Simulated Actual Rate node" + }, { "style": "Text", "text": "To add the simulated actual rate node, select Add Missing Items on the parent node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Simulated Fees Paid", "definition": "The simulated fees paid node allows setting a specific fee for the simulation of each order, overriding the fee structure parameter of the trading session.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Simulated Fees Paid node works" + }, { "style": "Text", "text": "The fee structure parameter of the trading session allows setting a blanket fee structure (maker and taker) for all orders in the trading system. The simulated fees paid node allows control on a per-order basis, so each order may be simulated with a specific fee." @@ -8629,15 +9402,19 @@ { "style": "Note", "text": "If the node is not present or the parameter is undefined, the fee structure parameter set up for the trading session is used." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Simulated Fees Paid node" + }, { "style": "Text", "text": "To add the simulated fees paid node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Simulated Fees Paid node" + }, { "style": "Text", "text": "To configure the simulated fees paid node, select Configure on the menu." @@ -8666,13 +9443,16 @@ "style": "List", "text": "percentage is the percentage to be applied to calculate the fees for the specific order." } - ], - "starting": [] + ] }, { "type": "Manage Stage", "definition": "The manage stage deals with the setting and management of stop loss and take profit targets, both to protect your capital and to increase the efficiency of your trading system.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Manage Stage node works" + }, { "style": "Text", "text": "The first and foremost rule of trading is to preserve capital and its main goal is to increase it." @@ -8732,9 +9512,11 @@ { "style": "Text", "text": "That said, the default behavior of the system may be hacked to avoid the eventual risk of excessive slippage: set your stop loss and take profit targets tighter than intended." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Manage Stage node" + }, { "style": "Text", "text": "To add a manage stage node, select Add Missing Stages on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events." @@ -8743,14 +9525,16 @@ "style": "Note", "text": "Only one manage stage may exist in each strategy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Close Stage", "definition": "The close stage deals with the definitions that make up the logic to close a position, including the target rate and size, and order execution.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Close Stage node works" + }, { "style": "Text", "text": "The close stage is opened when either the stop loss or take profit targets are hit." @@ -8762,9 +9546,11 @@ { "style": "Text", "text": "For example, in the open stage, you probably defined the target size as a function of the capital allocated to the trading system. In the close stage, you will likely want to define the target size as a function of the size filled, that is, the amount of the orders placed that was filled during the open stage." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Close Stage node" + }, { "style": "Text", "text": "To add a close stage node, select Add Missing Stages on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events." @@ -8773,27 +9559,29 @@ "style": "Note", "text": "Only one close stage may exist in each strategy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Close Execution", "definition": "The close execution node groups all execution algorithms involved in the process of closing a position.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Close Execution node works" + }, { "style": "Text", "text": "The close execution section of the close stage works similarly to the open execution in the open stage. Please refer to the explanations of the open stage for the details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Close Execution node" + }, { "style": "Text", "text": "To add a close execution node, select Add Close Execution on the open stage node menu." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Social Bots" @@ -8810,15 +9598,16 @@ { "type": "Crypto Ecosystem", "definition": "The crypto ecosystem is a hierarchy that contains definitions about third-parties, including exchanges and their markets, as well as accounts of users with those third parties.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Crypto Ecosystem node works" + }, { "style": "Text", "text": "There is only one crypto ecosystem hierarchy. You will use it to define which exchanges and which markets you wish to work with, as well as the details of your accounts with those exchanges." } - ], - "adding": [], - "configuring": [], - "starting": [] + ] }, { "type": "Super Actions" @@ -8832,8 +9621,11 @@ { "type": "Crypto Exchanges", "definition": "The crypto exchanges node groups definitions of the different exchanges the user may interact with.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Crypto Exchanges node" + }, { "style": "Text", "text": "To add a crypto exchanges node, select Add Crypto Exchanges on the crypto ecosystem node menu." @@ -8842,21 +9634,24 @@ "style": "Note", "text": "Only one crypto exchanges node may exist on the hierarchy." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Crypto Exchange", "definition": "A crypto exchange node holds the definitions of assets and markets in a specific exchange.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Crypto Exchange node" + }, { "style": "Text", "text": "To add a crypto exchange, select Add Crypto Exchange on the crypto exchanges node menu. The crypto exchange node is created along with the rest of the basic structure of nodes required to define assets, markets and user accounts." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Crypto Exchange node" + }, { "style": "Text", "text": "Select Configure Crypto Exchange on the menu to access the configuration." @@ -8921,14 +9716,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Exchange Assets", "definition": "The exchange assets node groups the definitions of assets.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Exchange Assets node" + }, { "style": "Text", "text": "To add an exchange assets node, select Add Exchange Assets on the crypto exchanges node menu. The exchange assets node is created along with a first asset." @@ -8936,9 +9733,11 @@ { "style": "Note", "text": "Only one exchange assets node may exist on each exchange." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Exchange Assets node" + }, { "style": "Text", "text": "Select Configure Exchange Assets on the menu to access the configuration." @@ -8967,14 +9766,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Asset", "definition": "An asset node is the definition of an asset listed at the corresponding exchange.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Asset node" + }, { "style": "Text", "text": "To add an asset, select Add Asset on the exchange assets node menu." @@ -8986,9 +9787,11 @@ { "style": "Text", "text": "{% include /crypto_ecosystem/exchange-assets.md heading=\"\" icon=\"no\" adding=\"\" configuring=\"#####\" starting=\"\" content=\"no\" definition=\"no\" table=\"\" more=\"yes\"%}" - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Asset node" + }, { "style": "Text", "text": "Select Configure Asset on the menu to access the configuration." @@ -9021,14 +9824,16 @@ "style": "Note", "text": "When a configured asset is within the system's icon catalog, the standard asset icon is replaced with the logotype of the corresponding asset." } - ], - "starting": [] + ] }, { "type": "Exchange Markets", "definition": "The exchange markets node groups the definitions of markets.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Exchange Markets node" + }, { "style": "Text", "text": "To add an exchange markets node, select Add Exchange Markets on the crypto exchange node menu. The exchange markets node is created along with the basic structure of nodes to define the first market." @@ -9037,20 +9842,24 @@ "style": "Note", "text": "Only one exchange assets node may exist on each exchange." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market", "definition": "A market is the definition of a pair of assets (i.e.: BTC-USDT) listed as a market in the corresponding exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market node works" + }, { "style": "Important", "text": "Only markets that are effectively listed on the exchange may be configured and used with the system. Check with the exchange and make sure you understand what tickers they are using, which is the base asset and which the quoted asset on the listed markets." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market node" + }, { "style": "Text", "text": "To add a market, select Add Market on the exchange markets node menu. The market node is created along with the basic structure of nodes used to define the market. This option does not generate the super actions required to install and uninstall markets." @@ -9059,15 +9868,16 @@ "style": "Text", "text": "To add markets in bulk, select Add Missing Markets on the exchange markets node menu. This option adds all markets listed at the exchange that may result from the combination of assets listed under the exchange assets node, along with the required super actions to intall those markets." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Exchange Accounts", "definition": "The exchange accounts node groups the different accounts the user may have with the corresponding exchange.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Exchange Accounts node" + }, { "style": "Text", "text": "To add an exchange accounts node, select Add Exchange Account on the crypto exchange node menu. The exchange account node is created along with the basic structure of nodes used to define keys and user assets with the exchange." @@ -9076,15 +9886,16 @@ "style": "Note", "text": "Only one exchange accounts node may exist on each exchange." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "User Account", "definition": "A user account represents a single account with the corresponding exchange, holding the definitions of user assets, including keys and balances.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a User Account node" + }, { "style": "Text", "text": "To add a user account, select Add User Account on the exchange accounts node menu. The user account node is created along with the basic structure of nodes used to define keys and user assets with the exchange." @@ -9093,15 +9904,16 @@ "style": "Text", "text": "{% include tip.html content=\"You may add and administer as many user accounts as you wish.\" %}" } - ], - "configuring": [], - "starting": [] + ] }, { "type": "User Assets", "definition": "The user assets node groups the assets the user has at the exchange.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a User Assets node" + }, { "style": "Text", "text": "To add user assets node, select Add User Assets on the user account node menu. The user assets node is created along with the first exchange account asset." @@ -9110,15 +9922,16 @@ "style": "Note", "text": "Only one user assets node may exist under a user account." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "User Keys", "definition": "The user keys node groups the various exchange account keys the user may have under the corresponding account with the exchange.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a User Keys node" + }, { "style": "Text", "text": "To add user keys node, select Add User Keys on the user account node menu. The user keys node is created along with the first exchange account key." @@ -9127,20 +9940,24 @@ "style": "Note", "text": "Only one user keys node may exist under a user account." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Exchange Account Asset", "definition": "The exchange account asset represents a single asset the user has at the exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exchange Account Asset node works" + }, { "style": "Text", "text": "The exchange account asset is a reference to an asset defined under the exchange assets node." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exchange Account Asset node" + }, { "style": "Text", "text": "To add an exchange account asset node, select Add Asset on the user assets node menu." @@ -9149,21 +9966,24 @@ "style": "Note", "text": "Remember to establish a reference with an asset defined under the exchange assets node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Exchange Account Key", "definition": "The exchange account key holds the definition of the key name and secret provided by the corresponding exchange to access the user account via the exchange API.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Exchange Account Key node" + }, { "style": "Text", "text": "To add an exchange account key, select Add Key on the user keys node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Exchange Account Key node" + }, { "style": "Text", "text": "Select Configure Key on the menu to access the configuration." @@ -9200,25 +10020,32 @@ "style": "Warning", "text": "To keep your exchange keys safe, never share data structures you may download from the system, as downloads contain all information in the data structure, including personal information such as exchange keys. Use the share option on the menu instead. The share option strips sensitive information and outputs a file that is safe for sharing." } - ], - "starting": [] + ] }, { "type": "Design Space", "definition": "The design space is the visual environment that hosts all system and user definitions. In practical terms, it is the black space below the slider that splits the screen horizontally, separating the design space in the bottom from the charting space on top. As a hierarchy, it features nodes that enable user-control over certain aspects of the look, feel, and behavior of the space.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Design Space node works" + }, { "style": "Text", "text": "Think of the design space as your desktop, or the control room of the system." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Design Space node" + }, { "style": "Text", "text": "To add the design space node, select Add Design Space on the spaces node of the Superalgos Project hierarchy." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Design Space node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -9231,20 +10058,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Space Style", "definition": "The space style node features controls over the look and feel of the space, in particular, of background colors and font sizes.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Space Style node" + }, { "style": "Text", "text": "To add the space style node, select Add Space Style on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Space Style node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -9437,20 +10268,24 @@ "style": "Text", "text": "." } - ], - "starting": [] + ] }, { "type": "Space Settings", "definition": "The space settings node features controls over the phisics, proportions, and positioning of icons representing node, and their menus.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Space Settings node" + }, { "style": "Text", "text": "To add the space settings node, select Add Space Settings on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Space Settings node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -9547,13 +10382,16 @@ "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." } - ], - "starting": [] + ] }, { "type": "Charting Space", "definition": "The charting space is the hierarchy that governs the configuration of the charts, and the bidimensional space on which charts are drawn.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Charting Space node works" + }, { "style": "Text", "text": "Think of the charting space as a huge drawing board. You may have lots of information plotted on different parts of the space and use a viewport to look into that space." @@ -9562,10 +10400,7 @@ "style": "Text", "text": "There is only one charting space hierarchy, thus all charts are configured here. As is common throughout the system, different concepts and elements of the charts such as scales, data layers and so on, are represented by nodes in the hierarchy. The system allows great flexibility on how to visualize information over the charts by adding, configuring, and arranging these nodes." } - ], - "adding": [], - "configuring": [], - "charts": [] + ] }, { "type": "Project Dashboards" @@ -9573,7 +10408,11 @@ { "type": "Dashboard", "definition": "A dashboard is a collection of time machines, each containing any number of charts.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Dashboard node works" + }, { "style": "Text", "text": "The concept of the dashboard allows having multiple charts configured all at once, so that you may consult different exchanges, different markets, different time frames, or different technical studies on demand, simply by moving around and zooming in or out. You may put charts side by side, or even superimpose them to study market flows, search for arbitrage opportunities, or simply keep them in sight when you analyze particular market situations." @@ -9581,21 +10420,25 @@ { "style": "Text", "text": "At the moment, the functionality of a dashboard is trivial: grouping time machines. However, in the future, it will offer various features to enhance the user experience." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Dashboard node" + }, { "style": "Text", "text": "To add a dashboard, select Add Dashboard on the Charting Space node menu." } - ], - "configuring": [], - "charts": [] + ] }, { "type": "Time Machine", "definition": "A time machine synchronizes multiple timeline charts over the same timeline. Timeline charts within a time machine may have different rate scales or time frame scales, but their time scale will always match.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Time Machine node works" + }, { "style": "Text", "text": "Think of a time machine as an aide that helps you keep any number of pieces of information synchronized on the same time scale. Every data structure that you set up within the same time machine, will always be synchronized in time. Put in other words, the open and closing datetime of each dataset will always be aligned on the vertical axis." @@ -9603,21 +10446,25 @@ { "style": "Text", "text": "On the other hand, when you arrange charts on different time machines, they are completely independent of one another." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Time Machine node" + }, { "style": "Text", "text": "To add a time machine, select Add Time Machine on the Dashboard node menu." } - ], - "configuring": [], - "charts": [] + ] }, { "type": "Viewport", "definition": "The viewport is a window through which you may look into the charting space.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Viewport node works" + }, { "style": "Text", "text": "The viewport offers an opening into the visual environment in which you may see, analyze and go over every piece of data involved in the process of trading cryptocurrencies:" @@ -9638,18 +10485,19 @@ "style": "Note", "text": "The information that is out of focus, that is, out of the viewport, is not read nor rendered graphically, thus, does not consume resources." } - ], - "adding": [], - "configuring": [], - "charts": [] + ] }, { "type": "Time Scale", "definition": "The time scale controls the scale of the horizontal axis, that is, the timeline of the corresponding time machine, and of all of the timeline charts within it.", - "content": [ + "paragraphs": [ { - "style": "Text", - "text": "{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Scale Minimum and Maximum Values" + "style": "Title", + "text": "How the Time Scale node works" + }, + { + "style": "Subtitle", + "text": "Scale Minimum and Maximum Values" }, { "style": "Text", @@ -9660,8 +10508,8 @@ "text": "In technical terms, the minimum and maximum scale values are constantly changing as, whenever you pan across the charts, you are directly affecting the minimum and maximum scale values. That said, the actual scale doesn't change when panning across a chart." }, { - "style": "Text", - "text": "{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Automatic Scale" + "style": "Subtitle", + "text": "Automatic Scale" }, { "style": "Text", @@ -9684,21 +10532,25 @@ "text": "Having the time scale set to automatic by default helps finding the data as soon as it starts being processed the first time you run the Masters bot instances." }, { - "style": "Text", - "text": "{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Manual Scale" + "style": "Subtitle", + "text": "Manual Scale" }, { "style": "Text", "text": "The scale features a manual mode. When in manual mode the scale does not change, even if the minimum and maximum values change while panning through a chart. This is the natural state of the time scale." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Time Scale node" + }, { "style": "Text", "text": "To add a time scale, select Add Time Scale on the time machine node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Time Scale node" + }, { "style": "Text", "text": "Select Configure Rate Scale on the menu to access the configuration." @@ -9750,9 +10602,11 @@ { "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." - } - ], - "charts": [ + }, + { + "style": "Title", + "text": "Time Scale at the Charts" + }, { "style": "Text", "text": "

Automatic Scale

" @@ -9802,7 +10656,11 @@ { "type": "Rate Scale", "definition": "The rate scale controls the scale of the vertical axis, that is, the scale of the quoted asset, either of the time machine or of the timeline chart, depending on where the node is located.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Rate Scale node works" + }, { "style": "Text", "text": "Rate scales may exist both at the level of a time machine and at the level of a timeline chart, each affecting the corresponding concept." @@ -9812,8 +10670,8 @@ "text": "When set at the level of the time machine, the scale settings affect all charts within the time machine. When set at the level of the timeline chart, the settings override the rate scale at the time machine level. This allows having multiple charts on the same time machine, each with a different rate scale." }, { - "style": "Text", - "text": "{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Scale Minimum and Maximum Values" + "style": "Subtitle", + "text": "Scale Minimum and Maximum Values" }, { "style": "Text", @@ -9824,8 +10682,8 @@ "text": "In technical terms, the minimum and maximum scale values are constantly changing as, whenever you pan across the charts, you are directly affecting the minimum and maximum scale values. That said, the actual scale may change dynamically or not, depending on the scale-automation settings." }, { - "style": "Text", - "text": "{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Automatic Scale" + "style": "Subtitle", + "text": "Automatic Scale" }, { "style": "Text", @@ -9844,29 +10702,33 @@ "text": "The scale may be automated on either, or both minimum and maximum values at the same time. In the later case, no data point in the span of the chart ever remains out of the visible area of the chart, as the lowest data point aligns with the bottom of the chart and the highest aligns with the top." }, { - "style": "Text", - "text": "{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Manual Scale" + "style": "Subtitle", + "text": "Manual Scale" }, { "style": "Text", "text": "The system also features a manual mode. When in manual mode the scale does not change, even if the minimum and maximum values change while panning across a chart. This design feature allows comparing different periods using the same scale, which may be valuable in many cases." }, { - "style": "Text", - "text": "{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Scale Offset" + "style": "Subtitle", + "text": "Scale Offset" }, { "style": "Text", "text": "The offset is a feature of the rate scale by which the scale may be shifted upwards or downwards. As a result, charts aligned on the vertical axis—synchronized in datetime by a shared time machine—may be put one above the other. In technical terms, what happens is that the scale is shifted upwards or downwards." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Rate Scale node" + }, { "style": "Text", "text": "To add a rate scale, select Add Rate Scale on the time machine or the timeline chart node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Rate Scale node" + }, { "style": "Text", "text": "Select Configure Rate Scale on the menu to access the configuration." @@ -9918,9 +10780,11 @@ { "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." - } - ], - "charts": [ + }, + { + "style": "Title", + "text": "Rate Scale at the Charts" + }, { "style": "Text", "text": "

Automatic Scale

" @@ -9986,19 +10850,27 @@ { "type": "Time Frame Scale", "definition": "The time frame scale controls the time frame setting, that is, the period represented by each candle, either of the time machine or of the timeline chart, depending on where the node is located.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Time Frame Scale node works" + }, { "style": "Text", "text": "When the time frame scale is set at the level of the time machine, the scale setting affects all charts within the time machine. When set at the level of the timeline chart, the setting overrides the time frame scale at the time machine level. This allows comparing charts in different time frames, but still synchronized at the datetime level." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Time Frame Scale node" + }, { "style": "Text", "text": "To add a time frame scale, select Add Time Frame Scale on the time machine or the timeline chart node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Time Frame Scale node" + }, { "style": "Text", "text": "Select Configure Frame Scale on the menu to access the configuration." @@ -10034,9 +10906,11 @@ { "style": "Note", "text": " The values entered via the design space and the charts are synchronized and stored in the node." - } - ], - "charts": [ + }, + { + "style": "Title", + "text": "Time Frame Scale at the Charts" + }, { "style": "Text", "text": "1. To set a time frame value, place the mouse pointer over the corresponding time machine or timeline chart time frame box and scroll the mouse wheel." @@ -10050,7 +10924,11 @@ { "type": "Timeline Chart", "definition": "The timeline chart represents a chart within a time machine, which may have independent rate and time frame scales, as well as particular layers.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Timeline Chart node works" + }, { "style": "Text", "text": "In other words, a timeline chart—often referred simply as chart—is a set of information to be displayed over a timeline. The information may include candles—the main and foremost resource—as well as any other indicator, study or—in general—data products that may be available." @@ -10062,33 +10940,41 @@ { "style": "Text", "text": "The information that each timeline chart makes available on the screen is given by the layers set up in the corresponding layers manager." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Timeline Chart node" + }, { "style": "Text", "text": "To add a timeline chart, select Add Timeline Chart on the preferred time machine node menu." } - ], - "configuring": [], - "charts": [] + ] }, { "type": "Layer Manager", "definition": "The layer manager determines which layers will be visible on the corresponding timeline chart.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Layer Manager node works" + }, { "style": "Text", "text": "In other words, you use the layers manager node to configure which data products you wish to be made available for visualization purposes on the charts, in particular, on a specific timeline chart to which the layers manager node is attached to." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Layer Manager node" + }, { "style": "Text", "text": "To add a layers manager, select Add Layers Manager on the preferred timeline chart node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Layer Manager node" + }, { "style": "Text", "text": "Select Configure Layers Manager in the menu to access the configuration." @@ -10145,19 +11031,24 @@ "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." } - ], - "charts": [] + ] }, { "type": "Layer", "definition": "A layer represents a reference to a data product in the data storage node of the network hierarchy. Conceptually, it means that a certain data product, which exists in a certain location on the network, holds the data to be rendered on the charts.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Layer node works" + }, { "style": "Text", "text": "To set up a layer, you need to establish a reference with the data product of your choice." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Layer node" + }, { "style": "Text", "text": "To add a layer, select Add Layer on the layer manager node menu." @@ -10165,9 +11056,11 @@ { "style": "Note", "text": "After adding a layer node, make sure you establish a reference to the corresponding data product in the data storage node of the network hierarchy." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Layer node" + }, { "style": "Text", "text": "Select Configure Layer on the menu to access the configuration." @@ -10203,9 +11096,11 @@ { "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." - } - ], - "charts": [ + }, + { + "style": "Title", + "text": "Layer at the Charts" + }, { "style": "Text", "text": "To turn layers on and off, simply click on the layer in the corresponding products panel." @@ -10237,7 +11132,11 @@ { "type": "Data Storage", "definition": "The data storage node holds the definitions as to what data is stored in the corresponding network node.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Storage node works" + }, { "style": "Text", "text": "Bot instances running on the data mining and trading sections of a network node produce data products that need to be stored somewhere, specifically. The data storage node and its chain of offspring determine which data is to be stored where; that is, in what network node." @@ -10261,9 +11160,11 @@ { "style": "Text", "text": "{% include node-deletion-warning.html %}" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Storage node" + }, { "style": "Text", "text": "To add a data storage, select Add Data Storage on the network node menu." @@ -10272,20 +11173,24 @@ "style": "Note", "text": "Only one data storage node may exist on each network node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Data Mine Tasks", "definition": "The data mine tasks node is an organizational device that groups tasks corresponding to the referenced data mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Mine Tasks node works" + }, { "style": "Text", "text": "The data mine tasks node must reference the definition of a data mine. The node may spawn tasks for each bot in the data mine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Mine Tasks node" + }, { "style": "Text", "text": "To add a data mine tasks node, select Add Data Mine Tasks on the parent node menu. This action adds the node but does not establish a reference with any data mine." @@ -10297,9 +11202,11 @@ { "style": "Note", "text": "See the task node definition and the Adding a Task Node section for all the details." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Data Mine Tasks node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10311,9 +11218,11 @@ { "style": "Text", "text": "" - } - ], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Data Mine Tasks node" + }, { "style": "Text", "text": "Select Run All Task Managers or Stop All Task Managers on the menu to start and stop all tasks under this node." @@ -10323,13 +11232,19 @@ { "type": "Trading Mine Tasks", "definition": "The trading mine tasks node is an organizational device that groups tasks corresponding to the referenced trading mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Mine Tasks node works" + }, { "style": "Text", "text": "The market trading tasks node must reference the definition of a data mine. The node may spawn tasks for each bot in the data mine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Mine Tasks node" + }, { "style": "Text", "text": "To add a trading mine tasks node, select Add Trading Mine Tasks on the parent node menu. This action adds the node but does not establish a reference with any data mine." @@ -10341,9 +11256,11 @@ { "style": "Note", "text": "See the task node definition and the Adding a Task Node section for all the details." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Trading Mine Tasks node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10355,9 +11272,11 @@ { "style": "Text", "text": "" - } - ], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Trading Mine Tasks node" + }, { "style": "Text", "text": "Select Run All Task Managers or Stop All Task Managers on the menu to start and stop all tasks under this node." @@ -10370,7 +11289,11 @@ { "type": "Market Data Tasks", "definition": "A market data tasks node groups data mining tasks operating in a specific market.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Data Tasks node works" + }, { "style": "Text", "text": "The market data tasks node must reference a market defined in the Crypto Ecosystem hierarchy." @@ -10378,9 +11301,11 @@ { "style": "Text", "text": "This node may spawn individual data products or may deploy data products in bulk organized by data mine and by bots. See the data products node for the details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Data Tasks node" + }, { "style": "Text", "text": "To add a market data tasks node, select Add Market Data on the parent node menu." @@ -10392,10 +11317,11 @@ { "style": "Text", "text": "You may also add market data tasks nodes in bulk for all markets that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select Add Missing Markets on the parent node menu. A market data tasks node is created for each defined market, each with the corresponding reference." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Market Data Tasks node" + }, { "style": "Text", "text": "Select Run All Data Mine Tasks or Stop All Data Mine Tasks on the menu to start and stop all tasks under this node." @@ -10405,7 +11331,11 @@ { "type": "Market Trading Tasks", "definition": "A market trading tasks node groups trading tasks operating in a specific market.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Trading Tasks node works" + }, { "style": "Text", "text": "The market trading tasks node must reference a market defined in the Crypto Ecosystem hierarchy." @@ -10413,9 +11343,11 @@ { "style": "Text", "text": "This node may spawn individual data products or may deploy data products in bulk organized by data mine and by bots. See the data products node for the details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Trading Tasks node" + }, { "style": "Text", "text": "To add a market trading tasks node, select Add Market Data on the parent node menu." @@ -10427,10 +11359,11 @@ { "style": "Text", "text": "You may also add market trading tasks nodes in bulk for all markets that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select Add Missing Markets on the parent node menu. A market trading tasks node is created for each defined market, each with the corresponding reference." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Market Trading Tasks node" + }, { "style": "Text", "text": "Select Run All Trading Mine Tasks or Stop All Trading Mine Tasks on the menu to start and stop all tasks under this node." @@ -10443,7 +11376,11 @@ { "type": "Exchange Data Tasks", "definition": "The exchange data tasks node organizes data mining tasks by exchange. That is, each exchange installed in the system has an exchange data tasks node grouping all market data tasks corresponding to the said exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exchange Data Tasks node works" + }, { "style": "Text", "text": "The exchange data tasks node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange." @@ -10451,9 +11388,11 @@ { "style": "Text", "text": "When representing an exchange featured in the system's icons library, the standard exchange data tasks icon is replaced by the exchange's logo." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exchange Data Tasks node" + }, { "style": "Text", "text": "To add a specific exchange data tasks node, select Add Exchange Data Tasks on the parent node menu." @@ -10465,10 +11404,11 @@ { "style": "Text", "text": "You may also add exchange data tasks node in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select Add Missing Exchanges on the parent node menu. An exchange data tasks node is created for each defined exchange, each with the corresponding reference." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Exchange Data Tasks node" + }, { "style": "Text", "text": "Select Run All Market Data Tasks or Stop All Market Data Tasks on the menu to start and stop all tasks under this node." @@ -10478,7 +11418,11 @@ { "type": "Exchange Trading Tasks", "definition": "The exchange trading tasks node organizes trading tasks by exchange. That is, each exchange installed in the system has an exchange trading tasks node grouping all market trading tasks corresponding to the said exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exchange Trading Tasks node works" + }, { "style": "Text", "text": "The exchange trading tasks node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange." @@ -10486,9 +11430,11 @@ { "style": "Text", "text": "When representing an exchange featured in the system's icons library, the standard exchange trading tasks icon is replaced by the exchange's logo." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exchange Trading Tasks node" + }, { "style": "Text", "text": "To add a specific exchange trading tasks node, select Add Exchange Trading Tasks on the parent node menu." @@ -10500,10 +11446,11 @@ { "style": "Text", "text": "You may also add exchange trading tasks node in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select Add Missing Exchanges on the parent node menu. An exchange trading tasks node is created for each defined exchange, each with the corresponding reference." - } - ], - "configuring": [], - "starting": [ + }, + { + "style": "Title", + "text": "Running a Exchange Trading Tasks node" + }, { "style": "Text", "text": "Select Run All Market Trading Tasks or Stop All Market Trading Tasks on the menu to start and stop all tasks under this node." @@ -10537,7 +11484,11 @@ { "type": "Exchange Data Products", "definition": "The exchange data products node organizes data mines data by exchange. That is, each exchange installed in the system has an exchange data products node grouping all market data products nodes corresponding to the said exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exchange Data Products node works" + }, { "style": "Text", "text": "The exchange data products node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange." @@ -10545,9 +11496,11 @@ { "style": "Text", "text": "When representing an exchange featured in the system's icons library, the standard exchange data tasks icon is replaced by the exchange's logo." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exchange Data Products node" + }, { "style": "Text", "text": "To add a specific exchange data products node, select Add Exchange Data Products on the parent node menu." @@ -10559,9 +11512,11 @@ { "style": "Text", "text": "You may also add exchange data products nodes in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select Add Missing Exchanges on the parent node menu. An exchange data products node is created for each defined exchange, each with the corresponding reference." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Exchange Data Products node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10574,13 +11529,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Data Mines Data", "definition": "Session independent data refers to data generated by sensors and indicators, not related to trading sessions.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Mines Data node works" + }, { "style": "Text", "text": "As explained in the sorting of tasks page, data mines data is sorted by exchange, market, and the corresponding data mine, sensor or indicator bot, and bot product. That is, most of the nodes in this section of the hierarchy play an organizational role." @@ -10592,9 +11550,11 @@ { "style": "Text", "text": "Whenever you create data mining tasks manually from within the Network hierarchy (as opposed to using the install market function under the exchange markets node of the Crypto Ecosystem hierarchy" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Mines Data node" + }, { "style": "Text", "text": "To add a session-independent data node, select Add Session-independent Data on the network node menu." @@ -10603,9 +11563,7 @@ "style": "Note", "text": "Only one session-independent data node may exist on each data storage node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Project Data Products" @@ -10619,7 +11577,11 @@ { "type": "Exchange Trading Products", "definition": "The exchange trading products node organizes trading mines data by exchange. That is, each exchange installed in the system has an exchange trading products node grouping all session references corresponding to the said exchange.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Exchange Trading Products node works" + }, { "style": "Text", "text": "The exchange trading products node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange." @@ -10627,9 +11589,11 @@ { "style": "Text", "text": "When representing an exchange featured in the system's icons library, the standard exchange trading products icon is replaced by the exchange's logo." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Exchange Trading Products node" + }, { "style": "Text", "text": "To add a specific exchange trading products node, select Add Exchange Trading Products on the parent node menu." @@ -10641,9 +11605,11 @@ { "style": "Text", "text": "You may also add exchange trading products nodes in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select Add Missing Exchanges on the trading mines data node menu. An exchange trading products node is created for each defined exchange, each with the corresponding reference." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Exchange Trading Products node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10656,8 +11622,7 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Exchange Learning Products" @@ -10665,7 +11630,11 @@ { "type": "Trading Mines Data", "definition": "Session-based data refers to data that is generated as a consequence of running a trading session, that is, data the trading bot instance generates while running backtesting, paper trading, forward testing, or live trading sessions.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Mines Data node works" + }, { "style": "Text", "text": "As explained in the sorting of tasks page, trading mines data is sorted by exchange, market, the corresponding trading session, and the corresponding trading mine, trading bot, and bot product. That is, most of the nodes in this section of the hierarchy play an organizational role." @@ -10677,9 +11646,11 @@ { "style": "Text", "text": "Whenever you create trading tasks manually from within the Network hierarchy (as opposed to using the install market function under the exchange markets node of the Crypto Ecosystem hierarchy" - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Mines Data node" + }, { "style": "Text", "text": "To add a session-based data node, select Add Session-based Data on the network node menu." @@ -10688,9 +11659,7 @@ "style": "Note", "text": "Only one session-based data node may exist on each data storage node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Learning Mines Data" @@ -10698,13 +11667,19 @@ { "type": "Trading Session Reference", "definition": "A session reference establishes which session is the one which shall store data in the current location.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Session Reference node works" + }, { "style": "Text", "text": "A such, the session reference node must establish a reference with a trading session. Also, its offspring nodes determine precisely which data products are stored." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Session Reference node" + }, { "style": "Text", "text": "To add a session reference node, select Add Session Reference on the network node menu." @@ -10717,9 +11692,7 @@ "style": "Text", "text": "You may also add session reference nodes in bulk for all sessions defined in the same network that are not yet defined. To do that, select Add Missing Sessions on the exchange trading products node menu. A session reference node is created for each defined trading session in the node, each with the corresponding reference." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Learning Session Reference" @@ -10727,7 +11700,11 @@ { "type": "Market Data Products", "definition": "A market data products node represents the group of data products generated in a specific market.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Data Products node works" + }, { "style": "Text", "text": "The market data products node must reference a market defined in the Crypto Ecosystem hierarchy." @@ -10735,9 +11712,11 @@ { "style": "Text", "text": "This node may spawn individual data products or may deploy data products in bulk organized by data mine and by bots. See the data products node for the details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Data Products node" + }, { "style": "Text", "text": "To add a market data products node, select Add Market Data on the parent node menu." @@ -10750,14 +11729,16 @@ "style": "Text", "text": "You may also add market data products nodes in bulk for all markets that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select Add Missing Markets on the parent node menu. A market data products node is created for each defined market, each with the corresponding reference." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market Trading Products", "definition": "A market trading products node features the group of data products generated by the referenced session in a specific market.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Market Trading Products node works" + }, { "style": "Text", "text": "The market trading products node must reference a market defined in the Crypto Ecosystem hierarchy." @@ -10765,9 +11746,11 @@ { "style": "Text", "text": "This node may spawn individual data products or may deploy data products in bulk organized by trading mine and by trading bots. See the data products node for the details." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Market Trading Products node" + }, { "style": "Text", "text": "To add a market trading products node, select Add Market Trading Data on the parent node menu." @@ -10776,9 +11759,7 @@ "style": "Note", "text": "Remember to establish a reference with a market defined in the Crypto Ecosystem hierarchy after adding the node." } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Market Learning Products" @@ -10786,7 +11767,11 @@ { "type": "Data Product", "definition": "A data product represents the collection of datasets generated by the instance of a bot as defined in the corresponding data mine or trading mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Product node works" + }, { "style": "Text", "text": "Data products exist in the context of trading mines data and data mines data nodes. In the first case, a data product is the collection of datasets generated by an instance of a trading bot as defined in a trading mine, running a trading session. In the latter case, it is the collection of datasets generated by either a sensor bot or an indicator bot instance, as defined in a data mine, and running a data mining task." @@ -10798,9 +11783,11 @@ { "style": "Important", "text": "Data products may only be stored on the same network node on which the task—data mining or trading—runs." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Product node" + }, { "style": "Text", "text": "To add a single data product, select Add Data Product on the market trading products, market data products, bot products, or data products folder node menus." @@ -10825,14 +11812,16 @@ "style": "Text", "text": "{% include tip.html content=\"If adding data products in bulk results in adding data products that are not required, you may easily delete those.\" %}" } - ], - "configuring": [], - "starting": [] + ] }, { "type": "Data Mine Products", "definition": "Data mine products are references established with data mines to facilitate establishing data product references with multiple products in the given data mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Mine Products node works" + }, { "style": "Text", "text": "The node may be used as an organizational device, simply to arrange bot products. However, the smart use of the node involves automating the deployment of multiple data products." @@ -10840,9 +11829,11 @@ { "style": "Text", "text": "The use of the data mine products node is optional, as data products may also exist outside of data mine products nodes." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Mine Products node" + }, { "style": "Text", "text": "To add a data mine products node, select Add Data Mine Products on the parent node menu. This action adds the node but does not establish a reference with any data mine." @@ -10854,9 +11845,11 @@ { "style": "Note", "text": "See the data product node definition and the Adding a Data Product Node section for all the details." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Data Mine Products node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10869,13 +11862,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Trading Mine Products", "definition": "Trading mine products are references established with trading mines to facilitate establishing data product references with multiple products in the given mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Trading Mine Products node works" + }, { "style": "Text", "text": "At this point, Superalgos ships with a single trading mine, featuring a single low frequency trading bot. However, developers may create their own trading bots or fork the existing one." @@ -10887,9 +11883,11 @@ { "style": "Text", "text": "The use of the trading mine products node is optional, as data products may also exist outside of trading mine products nodes." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Trading Mine Products node" + }, { "style": "Text", "text": "To add a trading mine products node, select Add Trading Mine Products on the parent node menu. This action adds the node but does not establish a reference with any trading mine." @@ -10901,9 +11899,11 @@ { "style": "Note", "text": "See the data product node definition and the Adding a Data Product Node section for all the details." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Trading Mine Products node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10916,8 +11916,7 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Learning Mine Products" @@ -10925,7 +11924,11 @@ { "type": "Bot Products", "definition": "A bot products node is an organizational device used to arrange data products corresponding to a specific bot.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Bot Products node works" + }, { "style": "Text", "text": "The device exists as an offspring of a data or trading mine products node, and does not require a reference to a bot in the given data or trading mine." @@ -10933,9 +11936,11 @@ { "style": "Text", "text": "The use of the bot products node is optional, as data products may also exist outside of bot products." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Bot Products node" + }, { "style": "Text", "text": "To add a bot products node, select Add Bot Products on the parent node menu." @@ -10947,9 +11952,11 @@ { "style": "Note", "text": "See the data product node definition and the Adding a Data Product Node section for all the details." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Bot Products node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10962,25 +11969,32 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Data Product Folder", "definition": "A data product folder node is an organizational device used to map the arrangement of product definition folders as may exist in the bot definition of the corresponding data or trading mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Product Folder node works" + }, { "style": "Text", "text": "The use of the data product folder node is optional, as data products may also exist outside of data product folders." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Product Folder node" + }, { "style": "Text", "text": "To add the data product folder node, select Add Data Product Folder on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Data Product Folder node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -10993,13 +12007,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugins", "definition": "The plugins hierarchy defines which plugins are to be included in the current workspace. In the context of this hierarchy, plugins are JSON files featuring the description of a hierarchy such as a data mine, trading mine, trading engine, or trading system.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Plugins node works" + }, { "style": "Text", "text": "In the context of a community-driven project, a plugin is a device that serves to distribute community-generated intelligence. The project distributes several plugins contributed by the community." @@ -11007,15 +12024,19 @@ { "style": "Text", "text": "{% include important.html content=\"Hierarchies included in the workspace as plugins are not saved at the workspace level. As such, changes made in those hierarchies do not persist. If you wish to modify a plugin and keep working with the modified version in the future, you must either clone or backup the plugin and work on the resulting copy instead. Learn more about the differences between backups and " - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Plugins node" + }, { "style": "Text", "text": "To add the plugins node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugins node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11028,20 +12049,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin Project", "definition": "In the context of a multi-project platform, the plugin project node represents the project to which the defined plugins correspond to.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Plugin Project node" + }, { "style": "Text", "text": "To add the plugin project node, select Add Missing Projects on the parent node menu. The system adds a plugin project node for each project defined in the workspace." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin Project node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11054,20 +12079,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin Data Mines", "definition": "The plugin data mines node features the definitions of data mines to be included as plugins in the current workspace.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Plugin Data Mines node" + }, { "style": "Text", "text": "To add the plugin data mines node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin Data Mines node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11080,20 +12109,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin Trading Mines", "definition": "The plugin trading mines node features the definitions of trading mines to be included as plugins in the current workspace.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Plugin Trading Mines node" + }, { "style": "Text", "text": "To add the plugin trading mines node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin Trading Mines node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11106,20 +12139,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin Trading Systems", "definition": "The plugin data mines node features the definitions of data mines to be included as plugins in the current workspace.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Plugin Trading Systems node" + }, { "style": "Text", "text": "To add the plugin trading systems node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin Trading Systems node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11132,20 +12169,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin Trading Engines", "definition": "The plugin data mines node features the definitions of data mines to be included as plugins in the current workspace.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Plugin Trading Engines node" + }, { "style": "Text", "text": "To add the plugin trading engines node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin Trading Engines node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11158,20 +12199,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin Super Scripts", "definition": "The plugin super scripts node features the definitions of super scripts to be included as plugins in the current workspace.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Plugin Super Scripts node" + }, { "style": "Text", "text": "To add the plugin super scripts node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin Super Scripts node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11184,25 +12229,32 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin Tutorials", "definition": "The plugin tutorials node features the definitions of tutorials to be included as plugins in the current workspace.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Plugin Tutorials node works" + }, { "style": "Important", "text": "Tutorials included in the workspace as plugins do not keep track of users' progress, thus, may not return to the last step using the Resume button on the menu." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Plugin Tutorials node" + }, { "style": "Text", "text": "To add the plugin tutorials node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin Tutorials node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11215,13 +12267,16 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin File", "definition": "A plugin file is the JSON file that constitutes the plugin. In the context of the plugins hierarchy, a plugin is the definition of a hierarchy.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Plugin File node works" + }, { "style": "Text", "text": "Plugin files distributed with the system are stored in the corresponding folders on the following path: \\Projects\\[ProjectName]\\Plugins\\." @@ -11241,15 +12296,19 @@ { "style": "Text", "text": "{% include important.html content=\"Hierarchies included in the workspace as plugins are not saved at the workspace level. As such, changes made in those hierarchies do not persist. If you wish to modify a plugin and keep working with the modified version in the future, you must either clone or backup the plugin and work on the resulting copy instead. Learn more about the differences between backups and " - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Plugin File node" + }, { "style": "Text", "text": "To add the plugin file node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin File node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11262,25 +12321,32 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Plugin File Position", "definition": "The position of the plugin file position node determines the position in the workspace on which the plugin hierarchy is placed.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Plugin File Position node works" + }, { "style": "Text", "text": "To define where the hierarchy defined in a plugin file is positioned in the workspace, move the plugin file position node to the desired position in the workspace, and pin the node. Then, collapse the plugin file node so that the plugin file position node is no longer visible." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Plugin File Position node" + }, { "style": "Text", "text": "To add the plugin file position node, select Add Missing Items on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Plugin File Position node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11293,25 +12359,32 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Tutorial", "definition": "The tutorial hierarchy features a free arrangement of tutorial topic and tutorial step nodes that make up a tutorial. Each node in the hierarchy, including the parent tutorial node, represents a HTML page that is overlaid on top of both the design space and the charting space. ", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Tutorial node works" + }, { "style": "Text", "text": "Nodes in the hierarchy may be arranged freely, meaning that there may be as many tutorial topics and tutorial steps as desired. In general terms, all types of nodes behave similarly in the sense that each node, independently of the precise type, represents a tutorial step in and of itself. There are subtle differences to be covered where appropriate." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Tutorial node" + }, { "style": "Text", "text": "To add the tutorial node, select Add Tutorial on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Tutorial node" + }, { "style": "Text", "text": "The configuration of each node in the tutorial hierarchy determines the content of each step. All types of nodes share the same basic configuration. However, tutorial step nodes have extra properties, described elsewhere." @@ -11580,43 +12653,54 @@ "style": "List", "text": "documentationURL opens the Superalgos Documentation in the URL you configure. Use the complete URL, including the https:// protocol header." } - ], - "starting": [] + ] }, { "type": "Tutorial Topic", "definition": "A tutorial topic is an organizational device that helps to keep tutorial step nodes arranged in a logical hierarchy by topics and subtopics.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Tutorial Topic node works" + }, { "style": "Text", "text": "Tutorial topics may be nested within other tutorial topics in unlimited levels, and each level may feature multiple tutorial steps." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Tutorial Topic node" + }, { "style": "Text", "text": "To add the tutorial topic node, select Add Tutorial Topic on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Tutorial Topic node" + }, { "style": "Note", "text": "The configuration of the tutorial topic node is the same as the tutorial node. Refer to the latter, please." } - ], - "starting": [] + ] }, { "type": "Tutorial Step", "definition": "A tutorial step is a type of node within a tutorial that may not have offspring. As such, it is the smallest unit of information in the hierarchy.", - "content": [], - "adding": [ + "paragraphs": [ + { + "style": "Title", + "text": "Adding a Tutorial Step node" + }, { "style": "Text", "text": "To add the tutorial step node, select Add Tutorial Step on the parent node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Tutorial Step node" + }, { "style": "Note", "text": "The basic configuration of the tutorial step node is the same as the tutorial node. Refer to the latter, please." @@ -11877,19 +12961,24 @@ "style": "Text", "text": "
" } - ], - "starting": [] + ] }, { "type": "Data Mine Data Dependencies", "definition": "Data mine data dependencies are references established with entire data mines to facilitate establishing data dependencies with multiple datasets in the given data mine.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Mine Data Dependencies node works" + }, { "style": "Text", "text": "The node may be used as an organizational device, simply to arrange bot data dependencies. However, the smart use of the node involves automating the deployment of multiple data dependencies and their references." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Mine Data Dependencies node" + }, { "style": "Text", "text": "To add a data mine data dependencies node, select Add Data Mine Data Dependencies on the parent node menu. This action adds the node but does not establish a reference with any data mine." @@ -11901,9 +12990,11 @@ { "style": "Note", "text": "See the data dependency node definition and the Adding a Data Dependecy Node section for all the details." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Data Mine Data Dependencies node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11916,19 +13007,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Bot Data Dependencies", "definition": "A bot data dependencies node is an organizational device used to arrange data dependencies corresponding to a specific bot.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Bot Data Dependencies node works" + }, { "style": "Text", "text": "The device exists as an offspring of a data mine data dependencies node, and does not require a reference to a bot in the given data mine." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Bot Data Dependencies node" + }, { "style": "Text", "text": "To add the bot data dependencies node, select Add Bot Data Dependencies on the parent node menu. When adding a bot data dependency in this manner, the node does not inherit any particular label. In fact, it may even host data dependencies pointing to other data mines." @@ -11940,9 +13036,11 @@ { "style": "Note", "text": "See the data dependency node definition and the Adding a Data Dependecy Node section for all the details." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Bot Data Dependencies node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11955,19 +13053,24 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] }, { "type": "Data Dependency Folder", "definition": "A data dependency folder node is an organizational device used to map the arrangement of product definition folders of a given bot.", - "content": [ + "paragraphs": [ + { + "style": "Title", + "text": "How the Data Dependency Folder node works" + }, { "style": "Text", "text": "The use of product data dependency folders is optional, as data dependencies may also exist outside of folders." - } - ], - "adding": [ + }, + { + "style": "Title", + "text": "Adding a Data Dependency Folder node" + }, { "style": "Text", "text": "To add the data dependency folder node, select Add Data Dependency Folder on the parent node menu." @@ -11975,9 +13078,11 @@ { "style": "Text", "text": "The data dependency folder node may be added automatically when using the Add All Data Dependencies option on the data mine data dependencies node menu." - } - ], - "configuring": [ + }, + { + "style": "Title", + "text": "Configuring a Data Dependency Folder node" + }, { "style": "Text", "text": "Select Configure on the menu to access the configuration." @@ -11990,7 +13095,6 @@ "style": "Text", "text": "" } - ], - "starting": [] + ] } ] \ No newline at end of file diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js index 34a18a047..7c007da28 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocsSpace.js @@ -56,6 +56,8 @@ function newSuperalgosDocSpace() { toJsCode: toJsCode, toJsonCode: toJsonCode, toText: toText, + toTitle: toTitle, + toSubtitle: toSubtitle, toNote: toNote, toWarning: toWarning, toImportant: toImportant, @@ -71,6 +73,15 @@ function newSuperalgosDocSpace() { if (selectedParagraph === undefined) { return } let extraClassName = '' + if (selectedParagraph.id.indexOf('definition') >= 0) { + extraClassName = ' ' + 'docs-definitionTable' + } + if (selectedParagraph.id.indexOf('title') >= 0) { + extraClassName = ' ' + 'docs-h3' + } + if (selectedParagraph.id.indexOf('subtitle') >= 0) { + extraClassName = ' ' + 'docs-h4' + } if (selectedParagraph.id.indexOf('note') >= 0) { extraClassName = ' ' + 'docs-alert-note' } @@ -87,7 +98,7 @@ function newSuperalgosDocSpace() { textArea = document.createElement('textarea'); textArea.id = "textArea"; textArea.spellcheck = false; - textArea.className = "docs-text-area"+ extraClassName + textArea.className = "docs-text-area" + extraClassName textArea.style.height = selectedParagraphHeight textArea.value = selectedParagraphData selectedParagraph.innerHTML = "" @@ -117,6 +128,18 @@ function newSuperalgosDocSpace() { renderPage() } + function toTitle() { + let docSchemaParagraph = docSchemaParagraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Title' + renderPage() + } + + function toSubtitle() { + let docSchemaParagraph = docSchemaParagraphMap.get(selectedParagraph.id) + docSchemaParagraph.style = 'Subtitle' + renderPage() + } + function toNote() { let docSchemaParagraph = docSchemaParagraphMap.get(selectedParagraph.id) docSchemaParagraph.style = 'Note' @@ -215,6 +238,10 @@ function newSuperalgosDocSpace() { contextMenuClickablDiv.addEventListener('contextmenu', e => { e.preventDefault() + if (EDITOR_ON_FOCUS === true) { + exitEditMode() + return + } if (contextMenuGetSelection() === false) { /* The click was in a place where we can not recognize an editable piece. @@ -281,6 +308,12 @@ function newSuperalgosDocSpace() { if (paragraphNode.id.indexOf('text') >= 0) { selectedParagraphData = paragraphNode.innerText } + if (paragraphNode.id.indexOf('title') >= 0) { + selectedParagraphData = paragraphNode.innerText + } + if (paragraphNode.id.indexOf('subtitle') >= 0) { + selectedParagraphData = paragraphNode.innerText + } if (paragraphNode.id.indexOf('note') >= 0) { selectedParagraphData = paragraphNode.innerText.substring(6, paragraphNode.innerText.length) } @@ -358,16 +391,15 @@ function newSuperalgosDocSpace() { HTML = HTML + '
' - /* Content Section */ - if (nodeDocsDefinition.content !== undefined) { - for (let i = 0; i < nodeDocsDefinition.content.length; i++) { - let paragraph = nodeDocsDefinition.content[i] + if (nodeDocsDefinition.paragraphs !== undefined) { + for (let i = 0; i < nodeDocsDefinition.paragraphs.length; i++) { + let paragraph = nodeDocsDefinition.paragraphs[i] let innerHTML = addToolTips(renderingNode, paragraph.text) let styleClass = '' let prefix = '' let sufix = '' let role = '' - let key = 'content-paragraph-' + i + let key = 'paragraph-' + i switch (paragraph.style) { case 'Text': { @@ -375,6 +407,23 @@ function newSuperalgosDocSpace() { prefix = '' role = '' key = key + '-text' + innerHTML = addToolTips(renderingNode, paragraph.text) + break + } + case 'Title': { + styleClass = 'class="docs-h3"' + prefix = '' + role = '' + key = key + '-title' + innerHTML = paragraph.text + break + } + case 'Subtitle': { + styleClass = '' + prefix = 'class="docs-h4"' + role = '' + key = key + '-subtitle' + innerHTML = paragraph.text break } case 'Note': { @@ -382,6 +431,7 @@ function newSuperalgosDocSpace() { prefix = ' Note:' role = 'role="alert"' key = key + '-note' + innerHTML = addToolTips(renderingNode, paragraph.text) break } case 'Success': { @@ -389,6 +439,7 @@ function newSuperalgosDocSpace() { prefix = ' Tip:' role = 'role="alert"' key = key + '-success' + innerHTML = addToolTips(renderingNode, paragraph.text) break } case 'Important': { @@ -396,6 +447,7 @@ function newSuperalgosDocSpace() { prefix = ' Important:' role = 'role="alert"' key = key + '-important' + innerHTML = addToolTips(renderingNode, paragraph.text) break } case 'Warning': { @@ -403,6 +455,7 @@ function newSuperalgosDocSpace() { prefix = ' Warning:' role = 'role="alert"' key = key + '-warning' + innerHTML = addToolTips(renderingNode, paragraph.text) break } case 'List': { @@ -411,47 +464,16 @@ function newSuperalgosDocSpace() { sufix = '' role = '' key = key + '-list' + innerHTML = addToolTips(renderingNode, paragraph.text) break } } - HTML = HTML + '

' + prefix + ' ' + innerHTML + sufix +'

' + HTML = HTML + '

' + prefix + ' ' + innerHTML + sufix + '

' docSchemaParagraphMap.set(key, paragraph) } } - /* Adding Section */ - if (nodeDocsDefinition.adding !== undefined) { - if (nodeDocsDefinition.adding.length > 0) { - HTML = HTML + '

Adding a ' + renderingNode.type + '

' - for (let i = 0; i < nodeDocsDefinition.adding.length; i++) { - let paragraph = nodeDocsDefinition.adding[i] - HTML = HTML + '

' + paragraph.text + '

' - } - } - } - - /* Configuring Section */ - if (nodeDocsDefinition.configuring !== undefined) { - if (nodeDocsDefinition.configuring.length > 0) { - HTML = HTML + '

Configuring a ' + renderingNode.type + '

' - for (let i = 0; i < nodeDocsDefinition.configuring.length; i++) { - let paragraph = nodeDocsDefinition.configuring[i] - HTML = HTML + '

' + paragraph.text + '

' - } - } - } - - /* Starting Section */ - if (nodeDocsDefinition.starting !== undefined) { - if (nodeDocsDefinition.starting.length > 0) { - HTML = HTML + '

Starting a ' + renderingNode.type + '

' - for (let i = 0; i < nodeDocsDefinition.starting.length; i++) { - let paragraph = nodeDocsDefinition.starting[i] - HTML = HTML + '

' + paragraph.text + '

' - } - } - } HTML = HTML + '
' // Content Ends HTML = HTML + '' // Container Ends