This commit is contained in:
Luis Fernando Molina committed 2020-12-11 20:02:17 +01:00
1 parent 4515fa35e4
commit b05a196b3a
349 files changed
-12286

No files matched your search

@@ -1,26 +0,0 @@
{
"type": "Actual Rate",
"definition": "Actual rate is the number reported by the exchange as the rate at which an order was filled.",
"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."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,3 +0,0 @@
{
"type": "Actual Size"
}
@@ -1,22 +0,0 @@
{
"type": "Algorithm Name",
"definition": "Algorithm name is the name of the execution algorithm that opened the order, as specified in the trading system.",
"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."
},
{
"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."
}
]
}
@@ -1,3 +0,0 @@
{
"type": "Amount Received"
}
@@ -1,3 +0,0 @@
{
"type": "Announcement Condition"
}
@@ -1,3 +0,0 @@
{
"type": "Announcement Formula"
}
@@ -1,3 +0,0 @@
{
"type": "Announcement"
}
@@ -1,234 +0,0 @@
{
"type": "Annualized Rate Of Return",
"definition": "Annualized rate of return is the equivalent ROI scaled to one year.",
"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."
},
{
"style": "Text",
"text": "The formula:"
},
{
"style": "Text",
"text": "annualized rate of return = (((investment + profits) / investments) ^ (365 / days)) - 1"
},
{
"style": "Text",
"text": "In the context of the episode base asset and episode quoted asset, the calculation is done relative to the corresponding assets, and the overall context."
},
{
"style": "Text",
"text": "The formulas:"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value ="
},
{
"style": "Text",
"text": "((( tradingEngine.current.episode.episodeBaseAsset.beginBalance.value +"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeBaseAsset.profitLoss.value ) /"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeBaseAsset.beginBalance.value) ^"
},
{
"style": "Text",
"text": "(365 / tradingEngine.current.episode.episodeStatistics.days.value)) - 1"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value ="
},
{
"style": "Text",
"text": "((( tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value +"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value ) /"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value) ^"
},
{
"style": "Text",
"text": "(365 / tradingEngine.current.episode.episodeStatistics.days.value)) - 1"
},
{
"style": "Text",
"text": "The JavaScript code:"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value ="
},
{
"style": "Text",
"text": "Math.pow("
},
{
"style": "Text",
"text": " ( tradingEngine.current.episode.episodeBaseAsset.beginBalance.value +"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeBaseAsset.profitLoss.value ) /"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeBaseAsset.beginBalance.value"
},
{
"style": "Text",
"text": " ,"
},
{
"style": "Text",
"text": " (365 / tradingEngine.current.episode.episodeStatistics.days.value)"
},
{
"style": "Text",
"text": " ) - 1"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value ="
},
{
"style": "Text",
"text": "Math.pow("
},
{
"style": "Text",
"text": " ( tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value +"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value ) /"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value"
},
{
"style": "Text",
"text": " ,"
},
{
"style": "Text",
"text": " (365 / tradingEngine.current.episode.episodeStatistics.days.value)"
},
{
"style": "Text",
"text": " ) - 1"
},
{
"style": "Text",
"text": "In the context of the episode statistics, the calculation is done using the consolidated balance, as explained in the profit loss definition."
},
{
"style": "Note",
"text": "When the context does not refer to either of the assets in particular, then both asset balances are consolidated, and denominated in the quoted asset."
},
{
"style": "Text",
"text": "The JavaScript code:"
},
{
"style": "Text",
"text": "tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value ="
},
{
"style": "Text",
"text": "Math.pow("
},
{
"style": "Text",
"text": " ("
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeBaseAsset.beginBalance.value *"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.beginRate.value +"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value +"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeBaseAsset.profitLoss.value +"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value"
},
{
"style": "Text",
"text": " ) /"
},
{
"style": "Text",
"text": " ("
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeBaseAsset.beginBalance.value *"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.beginRate.value +"
},
{
"style": "Text",
"text": " tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value"
},
{
"style": "Text",
"text": " )"
},
{
"style": "Text",
"text": " ,"
},
{
"style": "Text",
"text": " ("
},
{
"style": "Text",
"text": " 365 / tradingEngine.current.episode.episodeStatistics.days.value"
},
{
"style": "Text",
"text": " )"
},
{
"style": "Text",
"text": " ) - 1"
},
{
"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."
}
]
}
@@ -1,50 +0,0 @@
{
"type": "Asset",
"definition": "An asset node is the definition of an asset listed at the corresponding exchange.",
"paragraphs": [
{
"style": "Title",
"text": "Adding a Asset node"
},
{
"style": "Text",
"text": "To add an asset, select Add Asset on the exchange assets node menu."
},
{
"style": "Text",
"text": "To add assets in bulk, select Add Missing Assets on the exchange assets node menu. Beware that the exchange may handle hundreds of assets. Before using this option you may want to implement a filter using the exchange assets configuration."
},
{
"style": "Text",
"text": "{% include /crypto_ecosystem/exchange-assets.md heading=\"\" icon=\"no\" adding=\"\" configuring=\"#####\" starting=\"\" content=\"no\" definition=\"no\" table=\"\" more=\"yes\"%}"
},
{
"style": "Title",
"text": "Configuring a Asset node"
},
{
"style": "Text",
"text": "Select Configure Asset on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": "\"codeName\": \"BTC\""
},
{
"style": "Text",
"text": "}"
},
{
"style": "Text",
"text": " codeName is the ticker of the asset as listed by the exchange (i.e.:* BTC, BTH, ETH, LTC, BNB, USDT, USD, etc.)"
},
{
"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."
}
]
}
@@ -1,66 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"style": "Note",
"text": "After adding a session node, make sure you establish a reference to the trading system you want it to work with."
},
{
"style": "Title",
"text": "Configuring a Backtesting Session node"
},
{
"style": "Text",
"text": "Select Configure Session on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": "\"folderName\": \"Session-Name\""
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "folderName allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify."
},
{
"style": "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."
},
{
"style": "Text",
"text": "After a few seconds, a literal indication of the progress of the calculations appears below the session node, displaying the date that is currently being processed. Once the calculation is finished, the session stops and the date below the session node dissapears."
},
{
"style": "Text",
"text": "To stop a backtesting session, select Stop on the menu."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Balance",
"definition": "Balance is the running balance, that is, the amount of the asset that exists at any point in time.",
"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."
},
{
"style": "Title",
"text": "Adding a Balance node"
},
{
"style": "Text",
"text": "To add the balance node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,26 +0,0 @@
{
"type": "Begin Balance",
"definition": "Begin balance is the balance at the datetime of the begin property of the parent node or concept.",
"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."
},
{
"style": "Text",
"text": "In the context of a position, it is the balance at the datetime the position started."
},
{
"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."
}
]
}
@@ -1,30 +0,0 @@
{
"type": "Begin Rate",
"definition": "Begin rate is the close rate of the candle corresponding to the datetime of the begin property.",
"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."
},
{
"style": "Text",
"text": "In the context of a position, it is the close rate of the last closed candle at the moment the take position event was triggered."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Begin",
"definition": "Begin is the datetime at the moment the object represented by the parent node began to exist.",
"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."
},
{
"style": "Title",
"text": "Adding a Begin node"
},
{
"style": "Text",
"text": "To add the begin node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,38 +0,0 @@
{
"type": "Bot Data Dependencies",
"definition": "A bot data dependencies node is an organizational device used to arrange data dependencies corresponding to a specific bot.",
"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."
},
{
"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."
},
{
"style": "Text",
"text": "The bot data dependencies node may also be created automatically. When created using the Add All Data Dependencies option on the data mine data dependencies node, the node inherits the label of the corresponding bot in the corresponding data mine."
},
{
"style": "Note",
"text": "See the data dependency node definition and the Adding a Data Dependecy Node section for all the details."
},
{
"style": "Title",
"text": "Configuring a Bot Data Dependencies node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,3 +0,0 @@
{
"type": "Bot Layers"
}
@@ -1,42 +0,0 @@
{
"type": "Bot Products",
"definition": "A bot products node is an organizational device used to arrange data products corresponding to a specific bot.",
"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."
},
{
"style": "Text",
"text": "The use of the bot products node is optional, as data products may also exist outside of bot products."
},
{
"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."
},
{
"style": "Text",
"text": "The bot products node may also be created automatically. When created using the Add All Data Products option on the data mine products node, the node inherits the label of the corresponding bot in the corresponding data mine."
},
{
"style": "Note",
"text": "See the data product node definition and the Adding a Data Product Node section for all the details."
},
{
"style": "Title",
"text": "Configuring a Bot Products node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,34 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "For example, imagine an indicator that stores buy and sell volumes... does it need to store the total volume? Given that it is so easy to calculate, the answer is probably not. It is up to the developer to decide, but it is certainly not required."
},
{
"style": "Note",
"text": "The calculations procedure is used to calculate properties that the developer chooses not to store in the dataset."
},
{
"style": "Note",
"text": "To fully understand the role of the calculations procedure, please refer to the data mining workflow page."
},
{
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Cancel Order Event",
"definition": "The cancel order event makes cancelling limit orders possible.",
"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."
},
{
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"type": "Cancel Order",
"definition": "Counts the periods since the last time an order was canceled.",
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"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.",
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Chart Points",
"definition": "A chart points groups definitions of coordinate points used to define polygons.",
"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."
},
{
"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."
}
]
}
@@ -1,18 +0,0 @@
{
"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.",
"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."
},
{
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Close Execution",
"definition": "The close execution node groups all execution algorithms involved in the process of closing a position.",
"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."
},
{
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"type": "Close Order",
"definition": "Counts the periods since the last time an order was closed.",
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"type": "Close Position",
"definition": "Counts the periods since the last time a position was closed.",
"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."
}
]
}
@@ -1,26 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,34 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "In a way, the close stage is virtually a mirror of the open stage, as the same definitions are required to close a position. There are a few logical differences, though."
},
{
"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."
},
{
"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."
},
{
"style": "Note",
"text": "Only one close stage may exist in each strategy."
}
]
}
@@ -1,14 +0,0 @@
{
"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.",
"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."
}
]
}
@@ -1,46 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "<b>For example:</b>"
},
{
"style": "Text",
"text": "<b>Situation 1</b>"
},
{
"style": "List",
"text": "Condition A: chart.at01hs.candle.close > chart.at01hs.bollingerBand.MovingAverage &#8594; This means that the latest candle at the 1 hour chart closed above the Bollinger Bands moving average."
},
{
"style": "List",
"text": "Condition B: chart.at01hs.candle.previous.max > chart.at01hs.bollingerBand.previous.MovingAverage &#8594; This means that the maximum value of the candle before the last one, was higher than the Bollinger Bands moving average."
},
{
"style": "Text",
"text": "In the example above, conditions A and B are comparison statements that may evaluate either _true_ or _false_. In the case both would evaluate _true_ then Situation 1 would be true as well."
},
{
"style": "Note",
"text": "To learn how to write conditions, start with the Syntax Overview."
},
{
"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."
}
]
}
@@ -1,30 +0,0 @@
{
"type": "Create Order Event",
"definition": "The create order event controls the placement of orders.",
"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."
},
{
"style": "Text",
"text": "An order defined in an execution algorithm will be executed only if the event evaluates true."
},
{
"style": "Text",
"text": "If you wish orders to be placed as defined immediately after the take position event has been triggered, the use the statement true your only create order event condition."
},
{
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"type": "Create Order",
"definition": "Counts the periods since the last time an order was created.",
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"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.",
"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."
}
]
}
@@ -1,74 +0,0 @@
{
"type": "Crypto Exchange",
"definition": "A crypto exchange node holds the definitions of assets and markets in a specific exchange.",
"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."
},
{
"style": "Title",
"text": "Configuring a Crypto Exchange node"
},
{
"style": "Text",
"text": "Select Configure Crypto Exchange on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": " \"codeName\": \"binance\","
},
{
"style": "Text",
"text": " \"API\": ["
},
{
"style": "Text",
"text": " {"
},
{
"style": "Text",
"text": " \"method\": \"fetchTrades\","
},
{
"style": "Text",
"text": " \"fetchType\": \"by Id\","
},
{
"style": "Text",
"text": " \"fetchTradesMethod\": \"publicGetHistoricalTrades\","
},
{
"style": "Text",
"text": " \"firstId\": \"f\""
},
{
"style": "Text",
"text": " }"
},
{
"style": "Text",
"text": " ]"
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "codeName is the name of the exchange as handled in the code of the system."
},
{
"style": "List",
"text": "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."
}
]
}
@@ -1,18 +0,0 @@
{
"type": "Crypto Exchanges",
"definition": "The crypto exchanges node groups definitions of the different exchanges the user may interact with.",
"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."
},
{
"style": "Note",
"text": "Only one crypto exchanges node may exist on the hierarchy."
}
]
}
@@ -1,30 +0,0 @@
{
"type": "Current",
"definition": "The current object refers to the context in which instances of several other objects exist&mdash;like episode, strategy, position, strategy stages, and so on&mdash;in particular, the instances that are open at the time of evaluation, hence the adjective current.",
"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."
},
{
"style": "Text",
"text": "The generation of offspring nodes under the current section of the hierarchy keeps track of information within the scope of the embodied concept: episode, strategy, position, and so on."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,38 +0,0 @@
{
"type": "Cycle",
"definition": "The trading bot performs its duties in regards to exchange orders and accounts in two consecutive cycles for each candle.",
"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."
},
{
"style": "Text",
"text": "In the second cycle, it creates the orders at the exchange, provided conditions where met on the previous cycle."
},
{
"style": "Text",
"text": "The two possible values for the cycle node are First and Second."
},
{
"style": "Title",
"text": "Adding a Cycle node"
},
{
"style": "Text",
"text": "To add the cycle node, select Add Missing Items on the parent node menu."
},
{
"style": "Title",
"text": "Configuring a Cycle node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,26 +0,0 @@
{
"type": "Dashboard",
"definition": "A dashboard is a collection of time machines, each containing any number of charts.",
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Adding a Dashboard node"
},
{
"style": "Text",
"text": "To add a dashboard, select Add Dashboard on the Charting Space node menu."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Data Building Procedure",
"definition": "The data building procedure processes information to be fed to properties that are stored in the output dataset.",
"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."
},
{
"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."
}
]
}
@@ -1,34 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Data Dependency Folder node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,46 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "<img src=\"Projects/Superalgos/Docs-Gifs/indicators-process-dependencies-02.gif\"></img>"
},
{
"style": "Text",
"text": "The image above shows data dependencies in one bot referencing dataset definitions of another bot."
},
{
"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."
},
{
"style": "Text",
"text": "{% include tip.html content=\"Remember that a data dependency must establish a reference to the appropriate dataset definition. When adding data dependencies manually, you also need to manually establish the reference.\" %}"
},
{
"style": "Text",
"text": "In cases in which multiple data dependencies must be established, you may use the option to create data dependencies in bulk:"
},
{
"style": "Text",
"text": " The Add All Data Dependencies* option on the data mine data dependencies node menu adds a bot data dependency for each bot in the data mine, and a data dependency for each dataset definition or each product of each bot. You may use this option after manually adding a data mine data dependencies node and manually establishing the reference with the desired data mine, or after adding all data mine data dependencies, by which the references with data mines are established automatically."
},
{
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"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.",
"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."
}
]
}
@@ -1,38 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"style": "Text",
"text": "The smarter use of the node involves using the Add All Data Mine Dependencies option on the parent node menu. This action creates a data mine data dependencies node for each data mine in the workspace, establishing a reference with the corresponding data mines. This is the first step in the direction of quickly setting up multiple data dependencies when needed."
},
{
"style": "Note",
"text": "See the data dependency node definition and the Adding a Data Dependecy Node section for all the details."
},
{
"style": "Title",
"text": "Configuring a Data Mine Data Dependencies node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,42 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Text",
"text": "The smarter use of the node involves using the Add All Data Mine Products option on the parent node menu. This action creates a data mine products node for each data mine in the workspace, establishing a reference with the corresponding data mines. This is the first step in the direction of quickly setting up multiple data products when needed."
},
{
"style": "Note",
"text": "See the data product node definition and the Adding a Data Product Node section for all the details."
},
{
"style": "Title",
"text": "Configuring a Data Mine Products node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,46 +0,0 @@
{
"type": "Data Mine Tasks",
"definition": "The data mine tasks node is an organizational device that groups tasks corresponding to the referenced data mine.",
"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."
},
{
"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."
},
{
"style": "Text",
"text": "The smarter use of the node involves using the Add Missing Data Mine Tasks option on the parent node menu. This action creates a data mine tasks node for each data mine in the workspace, establishing a reference with the corresponding data mines. This is the first step in the direction of quickly setting up tasks for each bot in a given data mine."
},
{
"style": "Note",
"text": "See the task node definition and the Adding a Task Node section for all the details."
},
{
"style": "Title",
"text": "Configuring a Data Mine Tasks node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
},
{
"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."
}
]
}
@@ -1,50 +0,0 @@
{
"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&mdash;the source code.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Data Mine node"
},
{
"style": "Text",
"text": "Select Configure Data Mine on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": "\"codeName\": \"Supermine\""
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "codeName is the name of the data mine as used within the code of the system."
}
]
}
@@ -1,34 +0,0 @@
{
"type": "Data Mines Data",
"definition": "Session independent data refers to data generated by sensors and indicators, not related to trading sessions.",
"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."
},
{
"style": "Text",
"text": "Many of them require references to the nodes that delimit the context for which the data is applicable. For example, the market data products node must reference one of the installed markets, in particular, the market on which the data mining operation is run. These references help other entities understand the context to which the data belongs to."
},
{
"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"
},
{
"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."
},
{
"style": "Note",
"text": "Only one session-independent data node may exist on each data storage node."
}
]
}
@@ -1,30 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Data Product Folder node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,50 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "A data product node must reference a product definition in the corresponding bot."
},
{
"style": "Important",
"text": "Data products may only be stored on the same network node on which the task&mdash;data mining or trading&mdash;runs."
},
{
"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."
},
{
"style": "Note",
"text": "Remember to establish a reference with a product definition of the corresponding bot in the corresponding data or trading mine."
},
{
"style": "Text",
"text": "In cases in which multiple data products must be added, you may use the option to create data products in bulk."
},
{
"style": "Text",
"text": "Select the Add All Data Products option on the data or trading mine products node menu. This adds a bot products node for each bot in the data or trading mine, and a data product for each product definition of each bot."
},
{
"style": "Text",
"text": "You may use this option after manually adding a data or trading mine products node and manually establishing the reference with the desired data mine, or after adding all data or trading mine data products, by which the references with data or trading mines are established automatically."
},
{
"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.\" %}"
}
]
}
@@ -1,46 +0,0 @@
{
"type": "Data Storage",
"definition": "The data storage node holds the definitions as to what data is stored in the corresponding network node.",
"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."
},
{
"style": "Text",
"text": "Like with the data mining section and the sections referring to trading operations (testing and production environments), the data storage section is too organized by exchange, market, and data or trading mines. See the sorting of tasks page for the details."
},
{
"style": "Text",
"text": "The storage of data is split between data mines data and "
},
{
"style": "Text",
"text": "The data stored on each node of the network may be accessed by others, including the charting system, to visualize information via plotters defined in data mines, by trading systems to make trading decisions, and even by third-party systems. The information regarding trading mine data is explained in length in the trading engine section of the documentation."
},
{
"style": "Text",
"text": "The setup of data storage definitions is done automatically when the install market function under the exchange markets node of the Crypto Ecosystem hierarchy is used. However, when data mining or trading tasks are created manually, the data storage definitions must be created manually as well, using the tools available in each of the data structures below this node."
},
{
"style": "Text",
"text": "{% include node-deletion-warning.html %}"
},
{
"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."
},
{
"style": "Note",
"text": "Only one data storage node may exist on each network node."
}
]
}
@@ -1,3 +0,0 @@
{
"type": "Data Tasks"
}
@@ -1,166 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Dataset Definition node"
},
{
"style": "Text",
"text": "Select Configure Definition on the menu to access the configuration."
},
{
"style": "Text",
"text": "<b>Multi-Period-Market:</b>"
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": " \"codeName\": \"Multi-Period-Market\","
},
{
"style": "Text",
"text": " \"type\": \"Market Files\","
},
{
"style": "Text",
"text": " \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],"
},
{
"style": "Text",
"text": " \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\","
},
{
"style": "Text",
"text": " \"fileName\": \"Data.json\","
},
{
"style": "Text",
"text": " \"timeFrames\": {"
},
{
"style": "Text",
"text": " \"filePath\": \"\","
},
{
"style": "Text",
"text": " \"fileName\": \"\""
},
{
"style": "Text",
"text": " }"
},
{
"style": "Text",
"text": "}"
},
{
"style": "Text",
"text": "<b>Multi-Period-Daily:</b>"
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": " \"codeName\": \"Multi-Period-Daily\","
},
{
"style": "Text",
"text": " \"type\": \"Daily Files\","
},
{
"style": "Text",
"text": " \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],"
},
{
"style": "Text",
"text": " \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\","
},
{
"style": "Text",
"text": " \"fileName\": \"Data.json\","
},
{
"style": "Text",
"text": " \"dataRange\": {"
},
{
"style": "Text",
"text": " \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\","
},
{
"style": "Text",
"text": " \"fileName\": \"Data.Range.json\""
},
{
"style": "Text",
"text": " },"
},
{
"style": "Text",
"text": " \"timeFrames\": {"
},
{
"style": "Text",
"text": " \"filePath\": \"\","
},
{
"style": "Text",
"text": " \"fileName\": \"\""
},
{
"style": "Text",
"text": " }"
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "codeName is the name of the dataset as used within the code."
},
{
"style": "List",
"text": "type refers to the type of dataset; possible values are Market Files and Daily Files."
},
{
"style": "List",
"text": "validTimeFrames refers to the time frames handled by the dataset."
},
{
"style": "List",
"text": "filePath sets the path on which files are stored; the proper name of the data mine, the bot and the product need to be entered."
},
{
"style": "List",
"text": "fileName sets the name of the files that constitute the dataset."
},
{
"style": "List",
"text": "timeFrames sets the name and path of the file indicating which time frames shall be filtered when the users sets a time frames filter."
}
]
}
@@ -1,26 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "In the context of a position, it counts the number of days a position has been open."
},
{
"style": "Title",
"text": "Adding a Days node"
},
{
"style": "Text",
"text": "To add the days node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,30 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Design Space node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,22 +0,0 @@
{
"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.",
"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."
},
{
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"type": "Dynamic Indicators",
"definition": "",
"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."
}
]
}
@@ -1,26 +0,0 @@
{
"type": "End Balance",
"definition": "End balance is the balance at the datetime of the end property of the parent node or concept.",
"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."
},
{
"style": "Text",
"text": "In the context of a position, it is the balance at the datetime the position was closed."
},
{
"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."
}
]
}
@@ -1,30 +0,0 @@
{
"type": "End Rate",
"definition": "End rate is the close rate of the candle corresponding to the datetime of the end property.",
"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."
},
{
"style": "Text",
"text": "In the context of a position, it is the close rate of the last closed candle at the moment the close stage is closed."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,26 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Adding a End node"
},
{
"style": "Text",
"text": "To add the end node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,22 +0,0 @@
{
"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.",
"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."
},
{
"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."
}
]
}
@@ -1,26 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "Refresh this concepts by reading about the initial target definitions at the trading system."
},
{
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"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.",
"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."
},
{
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"type": "Episode Counters",
"definition": "The episode counters node features counters of instances of objects that come to exist during the duration of the episode.",
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"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.",
"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."
},
{
"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."
}
]
}
@@ -1,14 +0,0 @@
{
"type": "Episode Statistics",
"definition": "Episode statistics keeps track of several metrics in the context of the episode.",
"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."
}
]
}
@@ -1,46 +0,0 @@
{
"type": "Episode",
"definition": "Episode is the object that handles the information corresponding to the whole run of the trading bot&mdash;beginning to end&mdash;between the specified initial datetime and final datetime, in the time range parameter of the trading session.",
"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&mdash;and accumulates&mdash;the results of all positions entered throughout a complete run of a trading session."
},
{
"style": "Text",
"text": "In this section of the hierarchy, you have access to:"
},
{
"style": "List",
"text": " <b>running balances and overall performance metrics</b> denominated in both the base and quoted assets;"
},
{
"style": "List",
"text": "<b>counters</b>, such as the number of positions taken, orders placed, hits, fails, and so on;"
},
{
"style": "List",
"text": "<b>statistics</b>, such as performance metrics consolidating both assets, number of days in the episode, or user-defined statistics;"
},
{
"style": "List",
"text": "<b>the distance to certain events</b>, such as the number of candles to the last take position event, or the last create order event;"
},
{
"style": "List",
"text": "<b>rates describing each candle</b> in the episode, such as the open, close, min and max rates;"
},
{
"style": "Title",
"text": "Adding a Episode node"
},
{
"style": "Text",
"text": "To add the episode node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,26 +0,0 @@
{
"type": "Exchange Account Asset",
"definition": "The exchange account asset represents a single asset the user has at the exchange.",
"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."
},
{
"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."
},
{
"style": "Note",
"text": "Remember to establish a reference with an asset defined under the exchange assets node."
}
]
}
@@ -1,46 +0,0 @@
{
"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.",
"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."
},
{
"style": "Title",
"text": "Configuring a Exchange Account Key node"
},
{
"style": "Text",
"text": "Select Configure Key on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": "\"codeName\": \"Paste your exchange API name or label here\","
},
{
"style": "Text",
"text": "\"secret\": \"Paste your exchange API secret key here.\""
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "codeName is the name or label of your key, as supplied by the exchange."
},
{
"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."
}
]
}
@@ -1,18 +0,0 @@
{
"type": "Exchange Accounts",
"definition": "The exchange accounts node groups the different accounts the user may have with the corresponding exchange.",
"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."
},
{
"style": "Note",
"text": "Only one exchange accounts node may exist on each exchange."
}
]
}
@@ -1,42 +0,0 @@
{
"type": "Exchange Assets",
"definition": "The exchange assets node groups the definitions of assets.",
"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."
},
{
"style": "Note",
"text": "Only one exchange assets node may exist on each exchange."
},
{
"style": "Title",
"text": "Configuring a Exchange Assets node"
},
{
"style": "Text",
"text": "Select Configure Exchange Assets on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": "\"addMissingAssets\": { \"quotedAsset\": \"BTC\"}"
},
{
"style": "Text",
"text": "}"
},
{
"style": "Text",
"text": " addMissingAssets acts as a filter to determine which assets of a (potentially long) list of assets listed at the exchange will be added when the Add Missing Assets* option in the menu is used. Because many exchanges do not offer a list of assets, the system fetches assets from actual markets (pairs) listed at the exchange. You may add missing assets filtered by the quotedAsset or by the baseAsset. For example, the above configuration would add all assets listed in markets in which BTC is the quoted asset."
}
]
}
@@ -1,42 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Note",
"text": "Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Exchange Data Products node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,42 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Note",
"text": "Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,26 +0,0 @@
{
"type": "Exchange Id",
"definition": "Exchange ID is a unique identifier the exchange assigns to the order, so that it may be unequivocally identified.",
"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."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,3 +0,0 @@
{
"type": "Exchange Learning Products"
}
@@ -1,3 +0,0 @@
{
"type": "Exchange Learning Tasks"
}
@@ -1,18 +0,0 @@
{
"type": "Exchange Markets",
"definition": "The exchange markets node groups the definitions of markets.",
"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."
},
{
"style": "Note",
"text": "Only one exchange assets node may exist on each exchange."
}
]
}
@@ -1,30 +0,0 @@
{
"type": "Exchange Orders",
"definition": "Exchange orders is the section of the data structure that keeps track of orders of all types.",
"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."
},
{
"style": "Text",
"text": "Orders are organized by type, such as market orders and limit orders, and also by the type of transaction, such as buy or sell orders."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,42 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Note",
"text": "Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Exchange Trading Products node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
}
]
}
@@ -1,42 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Note",
"text": "Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,58 +0,0 @@
{
"type": "Execution Algorithm",
"definition": "An execution algorithm is a set of instructions used to place and manage orders at the exchange.",
"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."
},
{
"style": "Text",
"text": "Then, the logic in each algorithm may remain simple, while the combined work of multiple algorithms may deal with the required complexity."
},
{
"style": "Text",
"text": "Each algorithm may be assigned a fraction of the target size (see the configuration section), thus, the extent of each algorithm's involvement in the execution is defined by this parameter."
},
{
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Execution Algorithm node"
},
{
"style": "Text",
"text": "To configure the execution algorithm node, select Configure on the menu."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": " \"percentageOfStageTargetSize\": 100"
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "percentageOfStageTargetSize is the definition of how much of the target size of the whole stage will be handled by the one specific execution algorithm, expressed as a percentage of the total target size. Posible values are real numbers between 0 and 100, including the extremes. If you set the value to 0, the algorithm will not be executed."
}
]
}
@@ -1,30 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "<img src=\"Projects/Superalgos/Docs-Gifs/indicators-process-execution-started-finished-events-01.gif\"></img>"
},
{
"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."
},
{
"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."
}
]
}
@@ -1,38 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "Bots form a sort of multi-branched execution sequence with an indeterminate number of dependencies. Every time the bot further down the tree of dependencies finishes a cycle, it triggers the execution of multiple bots listening to its execution finished event."
},
{
"style": "Text",
"text": "In the context of a trading process instance running a trading session on the network hierarchy, the execution started event may be used to force the trading process to run only after the last indicator bot dependency finishes its job. This guarantees that all dependencies are up to date and that the trading bot will evaluate the information corresponding to the same candles for all indicators used by the trading system."
},
{
"style": "Text",
"text": "Not setting up this event on a trading session may result in eventual data inconsistencies, as&mdash;in theory&mdash;the trading bot may run with some indicators up to date and some slightly delayed."
},
{
"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."
},
{
"style": "Text",
"text": "{% include tip.html content=\"Remember that an execution started event must establish a reference to the appropriate execution finished event.\" %}"
}
]
}
@@ -1,22 +0,0 @@
{
"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.",
"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."
},
{
"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."
}
]
}
@@ -1,26 +0,0 @@
{
"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.",
"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."
},
{
"style": "Text",
"text": "Refresh this concepts by reading about the initial target definitions at the trading system."
},
{
"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."
}
]
}
@@ -1,46 +0,0 @@
{
"type": "Exit Type",
"definition": "Exit type refers to the reason why the object is closed.",
"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."
},
{
"style": "Text",
"text": "In the context of the episode object:"
},
{
"style": "List",
"text": "Last Candle Reached: the object was closed because the last candle was reached."
},
{
"style": "List",
"text": "Position Closed: the position was closed."
},
{
"style": "List",
"text": "Take Profit: the take profit target was hit."
},
{
"style": "List",
"text": "Stop Loss: the stop loss target was hit."
},
{
"style": "List",
"text": "Closing Stage: the current stage started closing because the Close Stage is opening."
},
{
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Fails",
"definition": "Fails counts the number of positions that closed with a negative profit loss, in the context of the parent node.",
"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."
},
{
"style": "Title",
"text": "Adding a Fails node"
},
{
"style": "Text",
"text": "To add the fails node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,82 +0,0 @@
{
"type": "Fee Structure",
"definition": "The fee structure is a parameter fundamental to the calculation of fees, both in testing and live trading sessions.",
"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."
},
{
"style": "Text",
"text": "Exchanges don't usually report the amount charged in fees on each transaction, thus, the system calculates fees and subtract them from balances. Learn more about the handling of fees."
},
{
"style": "Important",
"text": "The accuracy of the internal account-keeping depends on this parameter. Make sure you obtain the correct fee structure from the exchange corresponding to the tier of your account."
},
{
"style": "Text",
"text": "To illustrate how fees affect your bottom line, take a look at the image below."
},
{
"style": "Text",
"text": "<img src=\"Projects/Superalgos/Docs-Gifs/trading-simulation-fees-fails.gif\"></img>"
},
{
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Fee Structure node"
},
{
"style": "Text",
"text": "Select Configure Fee Structure on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": "\"maker\": 0.15,"
},
{
"style": "Text",
"text": "\"taker\": 0.25"
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "maker is the setting for the fee the exchange charges when an order adds liquidity to the market, such as with limit orders."
},
{
"style": "List",
"text": "taker is the setting for the fee the exchange charges when an order takes liquidity from the market, such as with market or instant orders."
},
{
"style": "Note",
"text": "If the fee structure parameter is left empty or detached both from your session and your trading system, fees are not computed during simulations."
},
{
"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."
}
]
}
@@ -1,30 +0,0 @@
{
"type": "Fees Paid",
"definition": "Fees paid is the amount paid in fees.",
"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."
},
{
"style": "Success",
"text": "Exchange fees are estimated using the fee structure parameter set for the trading session. It is, therefore, important to set the correct values for that parameter."
},
{
"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."
},
{
"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."
}
]
}
@@ -1,3 +0,0 @@
{
"type": "Fees To Be Paid"
}
@@ -1,3 +0,0 @@
{
"type": "Final Value"
}
@@ -1,166 +0,0 @@
{
"type": "Formula",
"definition": "A formula is a mathematical expression intended to determine a numerical value to be applied dynamically to a certain property.",
"paragraphs": [
{
"style": "Title",
"text": "How the Formula node works"
},
{
"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": "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."
},
{
"style": "Text",
"text": "<b>A simple math example:</b>"
},
{
"style": "Text",
"text": "This simple formula may be used to define an initial take profit target 3% above the rate at which the position was taken."
},
{
"style": "Text",
"text": "tradingEngine.current.position.entryTargetRate.value * 1.03"
},
{
"style": "Note",
"text": "You may use any variable made available by the trading engine, as explained on the accessing runtime data page."
},
{
"style": "Text",
"text": "<b>A simple JavaScript example:</b>"
},
{
"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&mdash;basically&mdash;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&mdash;thanks to the use of the IF ELSE clause."
},
{
"style": "Text",
"text": "if (chart.at01hs.bollingerBand.movingAverage * 0.98 > tradingEngine.current.position.stopLoss.value)"
},
{
"style": "Text",
"text": " {chart.at01hs.bollingerBand.movingAverage * 0.98}"
},
{
"style": "Text",
"text": " else"
},
{
"style": "Text",
"text": " {tradingEngine.current.position.stopLoss.value}"
},
{
"style": "Text",
"text": "<b>For developers:</b>"
},
{
"style": "Text",
"text": "To build more complex logic within a formula, create a function that implements the logic and returns a numerical value, and then call the function:"
},
{
"style": "Text",
"text": "function orderRate() {"
},
{
"style": "Text",
"text": " const ORDER_STEP_NUMBER = 1 // Secuential step number, starting with 1 from the closest to the price."
},
{
"style": "Text",
"text": " const BUY_SELL_SIGN = -1 // 1 for buy orders, -1 for sell orders."
},
{
"style": "Text",
"text": " const STEP_SEPARATION = 0.15 // % of separation of stair steps between them."
},
{
"style": "Text",
"text": " const BASE_FACTOR = 0.2 // % above or below bollinger band without bias."
},
{
"style": "Text",
"text": " const BIAS_FACTOR = 0.3 // % to move the whole stair of orders up or down depending on the bias."
},
{
"style": "Text",
"text": " const BAND_RATE = chart.at01min.bollingerBand.lowerBand // Upper Bollinger Band for sell orders, and Lower for buy orders."
},
{
"style": "Text",
"text": " let inbalance = tradingEngine.current.episode.episodeBaseAsset.beginBalance.value - tradingEngine.current.episode.episodeBaseAsset.balance.value"
},
{
"style": "Text",
"text": " let BIAS_SIGN"
},
{
"style": "Text",
"text": " if (inbalance === 0) {"
},
{
"style": "Text",
"text": " BIAS_SIGN = 0"
},
{
"style": "Text",
"text": " }"
},
{
"style": "Text",
"text": " if (inbalance < 0) {"
},
{
"style": "Text",
"text": " BIAS_SIGN = + 1"
},
{
"style": "Text",
"text": " }"
},
{
"style": "Text",
"text": " if (inbalance > 0) {"
},
{
"style": "Text",
"text": " BIAS_SIGN = - 1"
},
{
"style": "Text",
"text": " }"
},
{
"style": "Text",
"text": " let rate = BAND_RATE + BUY_SELL_SIGN BAND_RATE (BASE_FACTOR + ORDER_STEP_NUMBER STEP_SEPARATION + BIAS_SIGN BIAS_FACTOR) / 100"
},
{
"style": "Text",
"text": " return rate"
},
{
"style": "Text",
"text": "}"
},
{
"style": "Text",
"text": "orderRate()"
},
{
"style": "Title",
"text": "Adding a Formula node"
},
{
"style": "Text",
"text": "To add a formula, select Add Formula on the corresponding parent node menu."
}
]
}
@@ -1,86 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"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."
},
{
"style": "Note",
"text": "After adding a session node, make sure you establish a reference to the trading system you want it to work with."
},
{
"style": "Title",
"text": "Configuring a Forward Testing Session node"
},
{
"style": "Text",
"text": "Select Configure Session on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": "\"folderName\": \"Session-Name\","
},
{
"style": "Text",
"text": "\"balancePercentage\": 1"
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "folderName allows you to set a significant name to the folder in which the data products&mdash;and logs&mdash;generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify."
},
{
"style": "List",
"text": "balancePercentage is a number defining the percentage of the initialBalance specified in the base aset configuration that will be used for trading. For instance, \"balancePercentage\": 1 means that 1% of your balance will be made available. Just like the initialBalance is scaled down, the minimumBalance and maximumBalance are also scaled down accordingly (see base asset)."
},
{
"style": "Text",
"text": "Your base asset is USDT and your initialBalance is USDT 10,000."
},
{
"style": "Text",
"text": "If you set up your forward-testing session with \"balancePercentage\": \"1\", then USDT 10,000 * 1% = USDT 100. This is the balance that will be available to your forward-testing session."
},
{
"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."
},
{
"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."
},
{
"style": "Text",
"text": "To stop a backtesting session, select Stop on the menu."
}
]
}
@@ -1,3 +0,0 @@
{
"type": "Head Of The Market"
}
@@ -1,54 +0,0 @@
{
"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.",
"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."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Heartbeats node"
},
{
"style": "Text",
"text": "Select Configure Slippage on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": " \"date\": true,"
},
{
"style": "Text",
"text": " \"candleIndex\": false"
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "date determines whether the date is shown in the progress notice below the trading process instance node; possible values are true or false."
},
{
"style": "List",
"text": "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."
}
]
}
@@ -1,26 +0,0 @@
{
"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.",
"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."
},
{
"style": "Note",
"text": "Please refer to the definition of hits for the details."
},
{
"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."
}
]
}
@@ -1,22 +0,0 @@
{
"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.",
"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."
},
{
"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."
}
]
}
@@ -1,30 +0,0 @@
{
"type": "Hits",
"definition": "Hits counts the number of positions that closed with a positive profit loss, in the context of the parent node.",
"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."
},
{
"style": "Text",
"text": "However, when the context of the asset is not specified&mdash;such as under the statistics node&mdash;then hits are calculated in a consolidated manner, converting the respective balances to perform the calculations."
},
{
"style": "Note",
"text": "The consolidated calculations are explained thoroughly in the profit loss node."
},
{
"style": "Title",
"text": "Adding a Hits node"
},
{
"style": "Text",
"text": "To add the hits node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Identifier",
"definition": "Identifier is a unique alphanumeric string by which the object represented by the parent node may be unequivocally identified.",
"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."
},
{
"style": "Title",
"text": "Adding a Identifier node"
},
{
"style": "Text",
"text": "To add the identifier node, select Add Missing Items on the parent node menu."
}
]
}
@@ -1,22 +0,0 @@
{
"type": "Image Condition",
"definition": "An image condition is a rule that allows establishing when an image shall be rendered and when not.",
"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 ."
},
{
"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."
}
]
}
@@ -1,58 +0,0 @@
{
"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.",
"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."
},
{
"style": "Note",
"text": "See the configuration for further details."
},
{
"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."
},
{
"style": "Title",
"text": "Configuring a Image Position node"
},
{
"style": "Text",
"text": "Select Configure on the menu to access the configuration."
},
{
"style": "Text",
"text": "{"
},
{
"style": "Text",
"text": " \"offsetX\": 0,"
},
{
"style": "Text",
"text": " \"offsetY\": 10"
},
{
"style": "Text",
"text": "}"
},
{
"style": "List",
"text": "offsetX is an offset in the X axis, in pixels, applied to displace the image in relation to the coordinate point defined by the reference of the node. Negative values displace the image to the left and positive values to the right."
},
{
"style": "List",
"text": "offsetY is an offset in the Y axis. Negative values displace the image downwards and positive values displace the image upwards."
}
]
}
Loaded 100 of 349 files, more files were not shown because too many files have changed in this diff. Show more