No files matched your search
@@ -563,7 +563,7 @@ exports.newHttpInterface = function newHttpInterface(WEB_SERVER, DATA_FILE_SERVE
|
||||
}
|
||||
|
||||
function cleanFileName(fileName) {
|
||||
for (let i = 0; i < 10; i++) {
|
||||
for (let i = 0; i < 100; i++) {
|
||||
fileName = fileName
|
||||
.replace(' ', '-')
|
||||
.replace('--', '-')
|
||||
|
||||
@@ -38,8 +38,8 @@
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete"
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity"
|
||||
}
|
||||
],
|
||||
"isProjectHead": true,
|
||||
@@ -81,8 +81,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -112,8 +112,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -162,8 +162,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -202,8 +202,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -223,8 +223,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -256,8 +256,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -302,8 +302,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -336,8 +336,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -370,8 +370,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -404,8 +404,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -448,8 +448,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -498,8 +498,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -529,8 +529,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -565,8 +565,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -601,8 +601,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -642,8 +642,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -683,8 +683,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -710,8 +710,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -739,8 +739,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -768,8 +768,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -797,8 +797,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -826,8 +826,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -855,8 +855,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -884,8 +884,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -927,8 +927,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
@@ -979,8 +979,8 @@
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete",
|
||||
"iconPathOff": "delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -462,6 +462,12 @@
|
||||
"propertyName": "miscellaneousFunctions",
|
||||
"functionName": "newSuperalgosUtilitiesMiscellaneousFunctions",
|
||||
"fileName": "MiscellaneousFunctions.js"
|
||||
},
|
||||
{
|
||||
"name": "Docs Functions",
|
||||
"propertyName": "docsFunctions",
|
||||
"functionName": "newSuperalgosUtilitiesDocsFunctions",
|
||||
"fileName": "DocsFunctions.js"
|
||||
}
|
||||
],
|
||||
"taskModules": [
|
||||
|
||||
|
After Width: | Height: | Size: 3.5 MiB |
|
After Width: | Height: | Size: 489 KiB |
|
After Width: | Height: | Size: 602 KiB |
|
After Width: | Height: | Size: 5.7 MiB |
|
After Width: | Height: | Size: 4.0 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 250 KiB |
|
After Width: | Height: | Size: 75 KiB |
@@ -1 +1 @@
|
||||
{"type":"Data Mine","name":"Masters","config":"{\n\"codeName\": \"Masters\"\n}","project":"Superalgos","sensorBots":[{"type":"Sensor Bot","name":"Exchange Raw Data","config":"{\n\"codeName\": \"Exchange-Raw-Data\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Historic-OHLCVs","config":"{\n \"codeName\": \"Historic-OHLCVs\",\n \"description\": \"Retrieves and saves historical maket data\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 60000,\n \"retryWaitTime\": 10000,\n \"botModule\": \"Exchange Raw Data Historic OHLCVs\"\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[],"id":"dfe2556e-a765-4e38-9d30-7f91090c0069","savedPayload":{"position":{"x":7542.108005075513,"y":17855.768569069416},"targetPosition":{"x":7502.950147409498,"y":18153.20202748156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"ea39c98b-18e2-44ce-9f7f-86a8a76a688a","savedPayload":{"position":{"x":7868.207004814731,"y":17677.190023306815},"targetPosition":{"x":7685.578576112114,"y":17915.196025394187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[],"dataMineDataDependencies":[],"id":"5c7fae5a-6da6-4864-a167-f2f21d578c72","savedPayload":{"position":{"x":7685.578576112114,"y":17915.196025394187},"targetPosition":{"x":7502.950147409498,"y":18153.20202748156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e","savedPayload":{"position":{"x":7780.114007162883,"y":18038.396997772034},"targetPosition":{"x":7502.950147409498,"y":18153.20202748156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"","project":"Superalgos","id":"957e7e3a-b167-40be-93b5-9ba4ceff56e5","savedPayload":{"position":{"x":7800.383605821641,"y":18192.359885147573},"targetPosition":{"x":7502.950147409498,"y":18153.20202748156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"fe40a546-43ee-49df-908a-7e72f598f0cd","savedPayload":{"position":{"x":7740.956149496868,"y":18335.830456184176},"targetPosition":{"x":7502.950147409498,"y":18153.20202748156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc","savedPayload":{"position":{"x":7502.950147409498,"y":18153.20202748156},"targetPosition":{"x":7225.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Candles","config":"{\n\"codeName\": \"Candles\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"One-Min","config":"{\n\"codeName\": \"One-Min\"\n}","project":"Superalgos","id":"1c3696e4-c28e-4744-9100-706d6dce0c3c","savedPayload":{"position":{"x":7675.786287656112,"y":18268.007057191084},"targetPosition":{"x":7525.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"id":"2443883b-6959-42a3-ae3b-ef3102ffcdcc","savedPayload":{"position":{"x":7525.786287656112,"y":18268.007057191084},"targetPosition":{"x":7225.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Volumes","config":"{\n\"codeName\": \"Volumes\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"One-Min","config":"{\n\"codeName\": \"One-Min\"\n}","proLine truncated
|
||||
{"type":"Data Mine","name":"Masters","config":"{\n\"codeName\": \"Masters\"\n}","project":"Superalgos","sensorBots":[{"type":"Sensor Bot","name":"Exchange Raw Data","config":"{\n\"codeName\": \"Exchange-Raw-Data\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Historic-OHLCVs","config":"{\n \"codeName\": \"Historic-OHLCVs\",\n \"description\": \"Retrieves and saves historical maket data\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 60000,\n \"retryWaitTime\": 10000,\n \"botModule\": \"Exchange Raw Data Historic OHLCVs\"\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[],"id":"dfe2556e-a765-4e38-9d30-7f91090c0069","savedPayload":{"position":{"x":19495.67390477555,"y":18276.314530096774},"targetPosition":{"x":19456.516047109537,"y":18573.747988508916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"ea39c98b-18e2-44ce-9f7f-86a8a76a688a","savedPayload":{"position":{"x":19821.77290451477,"y":18097.735984334173},"targetPosition":{"x":19639.144475812154,"y":18335.741986421544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[],"dataMineDataDependencies":[],"id":"5c7fae5a-6da6-4864-a167-f2f21d578c72","savedPayload":{"position":{"x":19639.144475812154,"y":18335.741986421544},"targetPosition":{"x":19456.516047109537,"y":18573.747988508916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e","savedPayload":{"position":{"x":19733.679906862923,"y":18458.94295879939},"targetPosition":{"x":19456.516047109537,"y":18573.747988508916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"","project":"Superalgos","id":"957e7e3a-b167-40be-93b5-9ba4ceff56e5","savedPayload":{"position":{"x":19753.94950552168,"y":18612.90584617493},"targetPosition":{"x":19456.516047109537,"y":18573.747988508916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"fe40a546-43ee-49df-908a-7e72f598f0cd","savedPayload":{"position":{"x":19694.52204919691,"y":18756.376417211533},"targetPosition":{"x":19456.516047109537,"y":18573.747988508916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc","savedPayload":{"position":{"x":19456.516047109537,"y":18573.747988508916},"targetPosition":{"x":19179.35218735615,"y":18688.55301821844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Candles","config":"{\n\"codeName\": \"Candles\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"One-Min","config":"{\n\"codeName\": \"One-Min\"\n}","project":"Superalgos","id":"1c3696e4-c28e-4744-9100-706d6dce0c3c","savedPayload":{"position":{"x":19629.35218735615,"y":18688.55301821844},"targetPosition":{"x":19479.35218735615,"y":18688.55301821844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"id":"2443883b-6959-42a3-ae3b-ef3102ffcdcc","savedPayload":{"position":{"x":19479.35218735615,"y":18688.55301821844},"targetPosition":{"x":19179.35218735615,"y":18688.55301821844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Volumes","config":"{\n\"codeName\": \"Volumes\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"One-Min","config":"{\n\"codeName\": \"One-Min\"\Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Getting Started","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b","savedPayload":{"position":{"x":23490.023749611923,"y":29239.135911211026},"targetPosition":{"x":23779.801497498644,"y":29316.781624741783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"343313ae-5705-484d-8bf8-aed25ba61cfa","savedPayload":{"position":{"x":23779.801497498644,"y":29316.781624741783},"targetPosition":{"x":24069.579245385365,"y":29394.42733827254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8f38508-1cac-4ab1-815f-d338fc813377","savedPayload":{"position":{"x":24069.579245385365,"y":29394.42733827254},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f","savedPayload":{"position":{"x":23799.549372136753,"y":28802.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7c8b312c-09bf-4c59-853f-1592391a9c57","savedPayload":{"position":{"x":24059.356993272086,"y":28652.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"8d58e84b-d7ef-464f-8079-0ec0887e3da3","savedPayload":{"position":{"x":24059.356993272086,"y":28952.457809532632},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf29e3bd-9386-408b-9091-042da0c53e81","savedPayload":{"position":{"x":24209.356993272086,"y":29212.265430667965},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"a707814e-b81b-4102-9b5b-4e2fe969324f","savedPayload":{"position":{"x":24437.002706802843,"y":28602.739808143135},"targetPosition":{"x":24514.6484203336,"y":28892.517556029856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"refeLine truncated
|
||||
{"type":"Workspace","name":"Getting Started","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b","savedPayload":{"position":{"x":23490.023749611923,"y":29239.135911211026},"targetPosition":{"x":23779.801497498644,"y":29316.781624741783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"343313ae-5705-484d-8bf8-aed25ba61cfa","savedPayload":{"position":{"x":23779.801497498644,"y":29316.781624741783},"targetPosition":{"x":24069.579245385365,"y":29394.42733827254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8f38508-1cac-4ab1-815f-d338fc813377","savedPayload":{"position":{"x":24069.579245385365,"y":29394.42733827254},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f","savedPayload":{"position":{"x":23799.549372136753,"y":28802.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7c8b312c-09bf-4c59-853f-1592391a9c57","savedPayload":{"position":{"x":24059.356993272086,"y":28652.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"8d58e84b-d7ef-464f-8079-0ec0887e3da3","savedPayload":{"position":{"x":24059.356993272086,"y":28952.457809532632},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf29e3bd-9386-408b-9091-042da0c53e81","savedPayload":{"position":{"x":24209.356993272086,"y":29212.265430667965},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"a707814e-b81b-4102-9b5b-4e2fe969324f","savedPayload":{"position":{"x":24437.002706802843,"y":28602.739808143135},"targetPosition":{"x":24514.6484203336,"y":28892.517556029856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"refeLine truncated
|
||||
@@ -59,20 +59,29 @@
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Work in Progress"
|
||||
"style": "Chapter",
|
||||
"text": "X->Superalgos->Topic->Trading Farms->Superalgos may coordinate Data Tasks and Trading Tasks across different machines on a network. Trading farms provide a robust environment for smart and scalable deployments.",
|
||||
"updated": 1611503033139
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Work in Progress"
|
||||
"style": "Chapter",
|
||||
"text": "XI->Superalgos->Topic->Crypto Ecosystem->The crypto ecosystem manages the interactions with parties external to Superalgos, primarily exchanges. ",
|
||||
"updated": 1611503004599
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Work in Progress"
|
||||
"style": "Chapter",
|
||||
"text": "XII->Superalgos->Topic->Data Mines->Data Mines deal with bots that process data and feature a visual scripting framework that solves most all of the infrastructure intricacies of building indicators and plotters.",
|
||||
"updated": 1611503425133
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Work in Progress"
|
||||
"style": "Chapter",
|
||||
"text": "XIII->Superalgos->Topic->Integrations->Superalgos integrates with Telegram Bots to broadcast announcements emerging from trading sessions. On the other hand, Superalgos supports receiving webhook messages, enabling automated actions originating from messages sent from third-party services, like TradingView.",
|
||||
"updated": 1611503645995
|
||||
},
|
||||
{
|
||||
"style": "Chapter",
|
||||
"text": "XIV->Superalgos->Topic->Productivity Tools->This chapter discusses a collection of tools that help optimize productivity.",
|
||||
"updated": 1611503697142
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode."
|
||||
"style": "Warning",
|
||||
"text": "This operation can not be undone.",
|
||||
"updated": 1611398340598
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "LF Trading Bot",
|
||||
"definition": {
|
||||
"text": "The Low Frequency Trading Bot is an implementation of at the Masters Trading Mine of a Trading Bot specialized in executing strategies for time frames of 1 minute and above. ",
|
||||
"updated": 1611581184850
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "LF",
|
||||
"definition": {
|
||||
"text": "LF is the abbreviation of Low Frequency, and most likey refering to the Low Frequency Trading Bot implemented at the Masters Trading Mine.",
|
||||
"updated": 1611577213413
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use doscs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "Node JS Javsacript",
|
||||
"definition": {
|
||||
"text": "A Task in Superalgos runs in Node JS, which means that the Conditions and Formulas you write at your Trading System must comply with Javascript for Node JS syntax. ",
|
||||
"updated": 1611323749488
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The same is true for properties values in configs. They need to be valid data types of Javascript for Node JS.",
|
||||
"updated": 1611323797820
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -4,9 +4,75 @@
|
||||
"text": "ROI is a ratio that compares the profit loss with the cost of the investment, expressed as a percentage."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Block",
|
||||
"text": "Content",
|
||||
"updated": 1611332841853
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode."
|
||||
"text": "In general financial terms, ROI is equal to the Net Return on Investment divided by the Cost of Investment, expressed as a percentage."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In Superalgos, the Net Return on Investment is the profit loss, as defined elsewhere. The Cost of Investment is solely the begin balance, as the fees are subtracted from the balance to calculate the profit loss, so we don’t need to account for them in the divisor side of the ratio."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "That is:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "ROI = profit loss / begin balance * 100"
|
||||
},
|
||||
{
|
||||
"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 formula:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.current.episode.episodeBaseAsset.ROI.value =\n tradingEngine.current.episode.episodeBaseAsset.profitLoss.value /\n tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * 100 \n \ntradingEngine.current.episode.episodeQuotedAsset.ROI.value =\n tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value /\n tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value * 100",
|
||||
"updated": 1611332768337
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": " "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the context of the position base asset and position quoted asset, the size filled is used instead of the balance, so that ROI may be properly calculated for complex execution algorithms.",
|
||||
"updated": 1611332787435
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The formula:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.current.position.positionBaseAsset.ROI.value =\n tradingEngine.current.position.positionBaseAsset.profitLoss.value * 100 /\n tradingEngine.current.strategyOpenStage.stageBaseAsset.sizeFilled.value\n \ntradingEngine.current.position.positionQuotedAsset.ROI.value =\n tradingEngine.current.position.positionQuotedAsset.profitLoss.value * 100 /\n tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value",
|
||||
"updated": 1611332799800
|
||||
},
|
||||
{
|
||||
"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.",
|
||||
"updated": 1611332810457
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": " Note: 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 formula:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.current.episode.episodeStatistics.ROI.value =\n (\n tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * \n tradingEngine.current.episode.endRate.value +\n tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value\n ) / (\n tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * \n tradingEngine.current.episode.beginRate.value +\n tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value\n ) * 100",
|
||||
"updated": 1611332824026
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
|
||||
@@ -31,10 +31,6 @@
|
||||
"text": "The market ending point is a status dependency existing both in Multi-Period-Market and Multi-Period-Daily processes so that the process establishing the reference knows the datetime of the end of the market.",
|
||||
"updated": 1609787745299
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The image above shows a case of a self-reference status dependency as well as a market ending point status dependency."
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
"text": "Configuring"
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"topic": "Crypto Ecosystem",
|
||||
"pageNumber": "1",
|
||||
"type": "Crypto Ecosystem Hierarchy",
|
||||
"definition": {
|
||||
"text": "The crypto ecosystem hierarchy organizes the infrastructure of exchanges, markets and user accounts.",
|
||||
"updated": 1611502351384
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Crypto Ecosystem->Definition",
|
||||
"updated": 1611345733796
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Crypto Ecosystem->Content",
|
||||
"updated": 1611345736864
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Crypto Exchanges",
|
||||
"updated": 1611345864281
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Crypto Exchanges->Definition",
|
||||
"updated": 1611345871538
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Crypto Exchange",
|
||||
"updated": 1611346094494
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Crypto Exchange->Definition",
|
||||
"updated": 1611346105028
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Crypto Exchange->2",
|
||||
"updated": 1611346132838
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Exchange Assets",
|
||||
"updated": 1611346189806
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exchange Assets->Definition",
|
||||
"updated": 1611346192805
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Exchange Markets",
|
||||
"updated": 1611346210580
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exchange Markets->Definition",
|
||||
"updated": 1611346214054
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Exchange Accounts",
|
||||
"updated": 1611346229086
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exchange Accounts->Definition",
|
||||
"updated": 1611346232501
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exchange Accounts->Content",
|
||||
"updated": 1611346236477
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "1",
|
||||
"type": "Data Mine Hierarchy",
|
||||
"definition": {
|
||||
"text": "Data mines enable the processing of data by consuming datasets others have produced, performing calculations, and outputting a new value-added data product that others may consume.",
|
||||
"updated": 1611407680590
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Superalgos puts a powerful data processing and visualization system in your hands. Use it to the fullest and you will see your intelligence increase by orders of magnitude.",
|
||||
"updated": 1611407700153
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Anyone may access raw trades and order book data from exchanges. Anyone may access information in the form of standard indicators and technical studies."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "However, Superalgos allows you to perform any sort of processing over existing information across the whole span of the market, store the results into new datasets, and make them available to trading strategies. Moreover, it allows you to produce elaborate graphical representations of data, which is instantly browsable over the charts."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Data mines’ functionality is highly flexible and works under the same paradigm used for building strategies. They provide a visual interface and a framework that leads you through the process of creating new bots, with minimal coding skills required."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The vast majority of the complexity of processing data is handled internally by the bots, and you don’t need to deal with it or even understand it. The system isolates complexity and only exposes you to the crucial elements that impact what you wish to accomplish."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This section of the documentation provides you with the technical understanding of how data is handled by the system. The core of the functionality this section unveils covers—in essence—the following points:"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The capacity to define any number of calculation processes that may feed on each other’s outputs, resulting in a wealth of information that may be consumed by trading strategies."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The properties and characteristics of datasets resulting from the execution of such processes—how and where they are stored, in what format, how they are consumed internally, and potentially, by other systems."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The capacity to visualize the data over the charts and browse it with all the features built in the charting system."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Data Mine",
|
||||
"updated": 1611407778880
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Mine->Definition",
|
||||
"updated": 1611407782909
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Mine->Content",
|
||||
"updated": 1611407786577
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables No Discussion"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Data Mine->2",
|
||||
"updated": 1611407832651
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Sensor Bot",
|
||||
"updated": 1611407910652
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Sensor Bot->Definition",
|
||||
"updated": 1611407914247
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Indicator Bot",
|
||||
"updated": 1611407935038
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Indicator Bot->Definition",
|
||||
"updated": 1611407948292
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Plotter",
|
||||
"updated": 1611407956192
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Plotter->Definition",
|
||||
"updated": 1611407972840
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "2",
|
||||
"type": "Indicator Bots",
|
||||
"definition": {
|
||||
"text": "Indicator bots enable the processing of data by consuming datasets others have produced, performing calculations, and outputting a new value-added data product that others may consume.",
|
||||
"updated": 1611408124910
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Indicator Bot->Definition",
|
||||
"updated": 1611408242603
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Indicator Bot->Content",
|
||||
"updated": 1611408247595
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables No Discussion"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Indicator Bot->2",
|
||||
"updated": 1611408262027
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "3",
|
||||
"type": "Indicator Bots - Process Definition",
|
||||
"definition": {
|
||||
"text": "The process definition is the compilation of configurations, dependencies, and references that make up a process.",
|
||||
"updated": 1611410324543
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Process Definition->Definition",
|
||||
"updated": 1611408487552
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Process Definition->Content",
|
||||
"updated": 1611408491273
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Process Definition->2",
|
||||
"updated": 1611409733095
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Process Output",
|
||||
"updated": 1611408788144
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Process Output->Definition",
|
||||
"updated": 1611408791768
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables",
|
||||
"updated": 1611409787758
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Process Output->2"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Output Dataset Folder",
|
||||
"updated": 1611408893086
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Output Dataset Folder->Definition",
|
||||
"updated": 1611408897031
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Output Dataset Folder->Content",
|
||||
"updated": 1611408901554
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Output Dataset",
|
||||
"updated": 1611408932688
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Output Dataset->Definition",
|
||||
"updated": 1611408940761
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Output Dataset->Content",
|
||||
"updated": 1611408945614
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Process Dependencies",
|
||||
"updated": 1611409011999
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Process Dependencies->Definition",
|
||||
"updated": 1611409021282
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Process Dependencies->Content",
|
||||
"updated": 1611409025810
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables",
|
||||
"updated": 1611409846972
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Process Dependencies->4",
|
||||
"updated": 1611409904800
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Status Dependency",
|
||||
"updated": 1611409068335
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Status Dependency->Definition",
|
||||
"updated": 1611409075880
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Status Dependency->Content",
|
||||
"updated": 1611409079269
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Data Dependency",
|
||||
"updated": 1611409226728
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Dependency->Definition",
|
||||
"updated": 1611409243546
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Dependency->Content",
|
||||
"updated": 1611409247489
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Data Mine Data Dependencies",
|
||||
"updated": 1611409321781
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Mine Data Dependencies->Definition",
|
||||
"updated": 1611409326033
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Mine Data Dependencies->Content",
|
||||
"updated": 1611409329439
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Bot Data Dependencies",
|
||||
"updated": 1611409418545
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Bot Data Dependencies->Definition",
|
||||
"updated": 1611409422639
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Bot Data Dependencies->Content",
|
||||
"updated": 1611409426189
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Data Dependency Folder",
|
||||
"updated": 1611409491551
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Dependency Folder->Definition",
|
||||
"updated": 1611409495392
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Dependency Folder->Content",
|
||||
"updated": 1611409498720
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Status Report",
|
||||
"updated": 1611409535037
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Status Report->Definition",
|
||||
"updated": 1611409555435
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Status Report->Content",
|
||||
"updated": 1611409559374
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Execution Started Event",
|
||||
"updated": 1611409586862
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Execution Started Event->Definition",
|
||||
"updated": 1611409590304
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Execution Started Event->Content",
|
||||
"updated": 1611409593797
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Execution Finished Event",
|
||||
"updated": 1611409630398
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Execution Finished Event->Definition",
|
||||
"updated": 1611409635844
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Execution Finished Event->Content",
|
||||
"updated": 1611409640116
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "4",
|
||||
"type": "Indicator Bots - Product Definition",
|
||||
"definition": {
|
||||
"text": "The product definition is the compilation of configurations, references, and JavaScript code that make up the data product.",
|
||||
"updated": 1611425764441
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Product Definition->Definition",
|
||||
"updated": 1611425809992
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Product Definition->Content",
|
||||
"updated": 1611425814195
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Product Definition->2",
|
||||
"updated": 1611425866970
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Dataset Definition",
|
||||
"updated": 1611425958957
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Dataset Definition->Definition",
|
||||
"updated": 1611425968181
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Dataset Definition->Content",
|
||||
"updated": 1611425972488
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Record Definition",
|
||||
"updated": 1611426032529
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Record Definition->Definition",
|
||||
"updated": 1611426038754
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Record Definition->Content",
|
||||
"updated": 1611426042645
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables",
|
||||
"updated": 1611426075537
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Record Definition->4",
|
||||
"updated": 1611426088183
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Record Property",
|
||||
"updated": 1611426123252
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Record Property->Definition",
|
||||
"updated": 1611426129988
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Record Property->Content",
|
||||
"updated": 1611426133406
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Record Formula",
|
||||
"updated": 1611426162635
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Record Formula->Definition",
|
||||
"updated": 1611426176713
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Calculations Procedure",
|
||||
"updated": 1611426226554
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Calculations Procedure->Definition",
|
||||
"updated": 1611426233636
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Calculations Procedure->Content",
|
||||
"updated": 1611426238550
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Calculations Procedure->5",
|
||||
"updated": 1611426280589
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Procedure Initialization",
|
||||
"updated": 1611426543003
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Procedure Initialization->Definition",
|
||||
"updated": 1611426555977
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Procedure Loop",
|
||||
"updated": 1611426364374
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Procedure Loop->Definition",
|
||||
"updated": 1611426368953
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Procedure Javascript Code",
|
||||
"updated": 1611426387898
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Procedure Javascript Code->Definition",
|
||||
"updated": 1611426391763
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Data Building Procedure",
|
||||
"updated": 1611426735172
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Building Procedure->Definition",
|
||||
"updated": 1611426741534
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Building Procedure->Content",
|
||||
"updated": 1611426749058
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Data Building Procedure->3",
|
||||
"updated": 1611426785067
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "6",
|
||||
"type": "Indicator Bots - Data Mining Workflow",
|
||||
"definition": {
|
||||
"text": "When running on a data mining operation, indicators follow a cycle designed to fulfill their purpose: to process data others have produced and make the result available for others to consume.",
|
||||
"updated": 1611427674749
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Indicators take datasets produced by sensors or by other indicators as input. These inputs are determined by the data dependencies defined. The calculations procedure and the data building procedure produce the intended transformations. The data building procedure stores the results in datasets that others may use as input, and the calculations procedure may make certain pieces of information available without ever writing it in the files.",
|
||||
"updated": 1611427699110
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following is the breakdown of the cycle."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "1. Loading of data dependencies"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Datasets produced by indicators are sets of text files with data stored in the form of arrays. Each value in a record is separated by colons, and each record is delimited by square brackets. Records are too separated by colons. The format in which data is stored in files aims to make files as lightweight as possible."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, the following fragment features three records in the 24-hours Multi-Period-Market Bollinger Bands Data.json file:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "... ,[1586044800000,1586131199999,6339.464,440.8934655492186,881.7869310984372],[1586131200000,1586217599999,6440.327,424.9041072418576,849.8082144837152],[1586217600000,1586303999999,6530.541,382.3824677453191,764.7649354906382], ..."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "That is what the system encounters at the time of reading a typical file in a dataset, which is the first step in the runtime cycle."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "2. Inflation of files into JSON objects with named properties"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Once a file is loaded in memory, it is inflated into a JSON object structure, with named properties. This is the second step in the cycle and aims to make accessing each record—from within the code—much easier."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "3. Calculation of properties not stored in the dataset"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Because performance is inversely related to the weight of files, developers may choose not to store all indicator properties in files. They may choose to leave properties that are easy to calculate out of the dataset and make them available as calculated properties instead. Calculated properties are calculated by the calculations procedure and fed to the record definition formulas to be made available as an integral part of the object other indicators may access."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, picture an indicator that offers buy, sell, and total volumes. Because the total volume is so easy to calculate, the developer of such an indicator may choose to store the buy and sell volumes only and make the total volume available as a calculated property."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Make your indicators more efficient by limiting the amount of information you store in files.",
|
||||
"updated": 1611428939223
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The third step in the runtime cycle is, therefore, to run the calculations procedure of each data dependency and add the calculated properties to the JSON object structure in memory, so that all properties are available for the next steps in the cycle."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "4. Products structure"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Steps 1, 2, and 3 are run for each one of the data dependencies, and the results are put inside an object named products. In this way, all data dependencies may be easily accessed with the following kind of syntax:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "products.pluralVariableName[index].property"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example: ",
|
||||
"updated": 1611428967240
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "products.bollingerBands[10].deviation"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Each product remains an array of JSON objects with named variables."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "5. Data building"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The fifth step in the runtime cycle is running the indicator’s data building procedure. This is where the developer codes the logic to go over the input datasets and perform the calculations required to produce the indicator’s output."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Indicators may have multiple products, thus, the data building procedure corresponding to each product is run sequentially, in the order products have been defined around the indicator bot node."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As transformations for a given product are finished, the results are appended to the products object and made available immediately for the rest of the products in the queue to use as input, in addition to the original data dependencies. Data dependencies are the same for all products, as data dependencies are defined at the level of processes."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "6. Writing the output"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The final step is turning the object-formatted records back into a minimized array format, and saving the corresponding files in the dataset."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "7",
|
||||
"type": "Indicator Bots - Coding the Indicator's Logic",
|
||||
"definition": {
|
||||
"text": "Learn how to use data dependencies, the variable object, and how to deal with indicators with irregular periods.",
|
||||
"updated": 1611429211176
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Main Data Dependency",
|
||||
"updated": 1611430812568
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The data building procedure works under the premise that the algorithm loops around a data collection and that—for each loop—generates a record for the product being built. For example, the SMA indicator loops around the candles product of the Candles Volumes indicator, thus, candles is the main data dependency. In the case of the bollingerChannels product, the main data dependency is the bollingerBands product of the Bollinger Bands indicator."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The main data dependency is the first dependency declared at the level of the processes. This dependency is made available in the record object, which features three properties:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "previous: ",
|
||||
"updated": 1611429276716
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "mainDependency.records[index - 1]"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "current: ",
|
||||
"updated": 1611429281291
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "mainDependency.records[index]",
|
||||
"updated": 1611429297570
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "next: ",
|
||||
"updated": 1611429287433
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "mainDependency.records[index + 1]"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The variable index is the index in the array of the main dependency."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, you may use the statement record.propertyName to access the value of any of the properties in the input datasets for the current record, or record.previous.propertyName to access the value of the property in the previous record."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The order in which dependencies are defined determines which one is the main data dependency.",
|
||||
"updated": 1611429327162
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Multiple Data Dependencies",
|
||||
"updated": 1611430826204
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The products object features a property for each data dependency, and each property is named with the pluralVariableName defined in the product’s configuration. Each property features an array with the dependency’s data collection."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Data collections of different products may begin and end at different points in time. For example, it takes 20 candles to build the first bollingerBands object of the Bollinger Bands indicator, or 200 candles to build the first popularSMAs object of the SMA indicator. Therefore, the record in i position in the array of one product may not correspond to the same period of time of the record in the same position of a different product."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To overcome that hurdle, the getElement function, which takes two parameters, may be used:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "The name of the data collection (pluralVariableName) you wish to consult."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "An object with begin and end properties, for example, the tenth candle."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The function returns the record that matches the begin and end datetime of the second parameter."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is an example from the Candle Patterns indicator, which has the candles product of the Candles Volumes indicator as the main data dependency:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "let candle = record.current // Calling \"Candles\"\nlet basicCandle = getElement ('basicCandles', candle) // Calling \"Basic Candles\"",
|
||||
"updated": 1611430980056
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Variable Object",
|
||||
"updated": 1611431014179
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The output generated must be stored as new properties of the variable object, which is made available to record properties under the record definition node."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the case of the data building procedure loop, the variable object may also be used to store and—later—retrieve information between different loop cycles, or even between different executions of the indicator process. Such a feature is not available in the calculations procedure loop, as the object does not persist beyond each loop in that context."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Multi-Period-Daily"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In time frames below one hour, the system allows to access data up to 48 hours in the past, relative to the current record. If more than 48-hours worth of data is required to produce the desired data building, then data must be stored into the variable object to be retrieved later on, as explained above."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Procedures may only access data up to 48 hours in the past counting from the datetime of the record being processed. For example, the calculation of a moving average spanning 100 periods requires temporarily storing data in an array, as the 45 minutes time frame needs 75-hours worth of data.",
|
||||
"updated": 1611431032118
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following is an example of a procedure loop code, in particular, the code that calculates the Popular SMAs product of the Simple Moving Average (SMA) indicator. Notice how the output generated by the calculateSMA function is stored into the variable object, and how an array stored in the variable object is used to overcome the 48-hours data-access limitation of Multi-Priod-Daily time frames."
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "/* Loop Code. */\n\nlet candle = record.current // Our main dependency is candles \nvariable.last200.push(candle.close) // Add the current close value to the last 200 array.\n\nif (variable.last200.length > 200) { // Store data in the variable object to overcome the limitations in multi-period-daily.\n variable.last200.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 200 elements.\n}\n\nvariable.sma20 = calculateSMA(20)\nvariable.sma50 = calculateSMA(50)\nvariable.sma100 = calculateSMA(100)\nvariable.sma200 = calculateSMA(200)\n\nfunction calculateSMA(periods) { // Having a function saves us from duplicating code.\n /* We check we have enough values to make the calculation */\n if (variable.last200.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last200.length - periods; i < variable.last200.length; i++) { // Iterate through the last periods\n sum = sum + variable.last200[i]\n }\n let sma = sum / periods\n return sma\n}",
|
||||
"updated": 1611431047895
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Irregular Periods",
|
||||
"updated": 1611431066723
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Occasionally, a one-to-one mapping of the periods of the data dependency with the periods of the resulting product does not exist. For example, in the case of the bollingerChannels product, using the bollingerBands as the main dependency. In such a case, the algorithm may read the 1-hour bollingerBands as input but the resulting object may span several hours."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "By default, the system pushes a record into the data collection for every loop. To build products that span several periods of the main dependency, you must make the push from within your own code."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When the system detects a push in the procedure loop code, it cancels the automatic push on each loop."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following example taken from the data building procedure loop of the Bollinger Channels Object indicator features several instances of arbitrary use of pushes."
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "if (record.next !== undefined) {\n\n if (\n record.current.direction === record.next.direction) {\n\n if (variable.channel === undefined) {\n\n variable.channel = {\n begin: undefined,\n end: undefined,\n direction: undefined,\n period: 0,\n firstMovingAverage: 0,\n lastMovingAverage: 0,\n firstDeviation: 0,\n lastDeviation: 0\n }\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 2\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.next.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.next.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.next.deviation\n\n } else {\n\n variable.channel.period++\n variable.channel.end = record.next.end\n variable.channel.lastMovingAverage = record.next.movingAverage\n variable.channel.lastDeviation = record.next.deviation\n\n }\n } else {\n\n if (variable.channel !== undefined) {\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The variable.channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.current.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.current.deviation\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n }\n} else {\n if (variable.channel !== undefined) {\n variable.channel.period++\n variable.channel.end = record.current.end\n variable.channel.lastMovingAverage = record.current.movingAverage\n variable.channel.lastDeviation = record.current.deviation\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The variable.channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.current.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.current.deviation\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n}",
|
||||
"updated": 1611431088524
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Managing Undefined Objects",
|
||||
"updated": 1611431116629
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In many instances, objects may be undefined. For example, the first 199 candles in the data collection corresponding to a 200-period moving average may be undefined, as the data building procedure may only build the object once the 200th candle is evaluated."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Storing undifined property values is highly undesirable, as that would likely produce errors downstream when others attempt to consume the products produced by the indicator. How to handle such circumstances is up to the developer."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Bollinger Channels Object example above features deliberate handling of undefined objects."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the case of a 200-period moving average discussed above, the developer may want to produce an arbitrary estimation of the moving average for the first 199 candles, or simply set the value to zero for the first 199 candles. The later was the choice for the popularSMAs product as may be observed in the code of the initialization procedure:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "/* Initialization Code*/\n\nvariable.previousEMA20 = 0\nvariable.previousEMA50 = 0\nvariable.previousEMA100 = 0\nvariable.previousEMA200 = 0",
|
||||
"updated": 1611431131070
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "8",
|
||||
"type": "Plotters",
|
||||
"definition": {
|
||||
"text": "Plotters read data products created by bots and map certain coordinate points to use them as vertices for polygons, which are assigned styles to create graphic representations of the underlying data.",
|
||||
"updated": 1611431276108
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Plotter->Definition",
|
||||
"updated": 1611431307735
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Plotter->Content",
|
||||
"updated": 1611431313998
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Plotter->2",
|
||||
"updated": 1611431826589
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Plotter Module",
|
||||
"updated": 1611431881154
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Plotter Module->Definition",
|
||||
"updated": 1611431891320
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Plotter Module->Content",
|
||||
"updated": 1611431894467
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "9",
|
||||
"type": "Plotters - Plotter Panel",
|
||||
"definition": {
|
||||
"text": "A plotter panel allows building panels with numerical representations of data.",
|
||||
"updated": 1611432021846
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Plotter Panel->Definition",
|
||||
"updated": 1611432049796
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Plotter Panel->Content",
|
||||
"updated": 1611432052734
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Plotter Panel->4",
|
||||
"updated": 1611432061472
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Panel Data",
|
||||
"updated": 1611432322437
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Panel Data->Definition",
|
||||
"updated": 1611432326601
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Panel Data->Content",
|
||||
"updated": 1611432330023
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Data Formula",
|
||||
"updated": 1611432338583
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Data Formula->Definition",
|
||||
"updated": 1611432348376
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Text Style",
|
||||
"updated": 1611432394440
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Text Style->Definition",
|
||||
"updated": 1611432402298
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Text Style->Content",
|
||||
"updated": 1611432405386
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "10",
|
||||
"type": "Plotters - Shapes",
|
||||
"definition": {
|
||||
"text": "Shapes define coordinate points to use as vertex for polygons, which are assigned styles.",
|
||||
"updated": 1611432676884
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Shapes->Definition",
|
||||
"updated": 1611432703073
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Shapes->Content",
|
||||
"updated": 1611432706401
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Shapes->2",
|
||||
"updated": 1611432712346
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Chart Points",
|
||||
"updated": 1611432774706
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Chart Points->Definition",
|
||||
"updated": 1611432778350
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Chart Points->Content",
|
||||
"updated": 1611432781813
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Chart Points->8",
|
||||
"updated": 1611432807680
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Point",
|
||||
"updated": 1611432845898
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Point->Definition",
|
||||
"updated": 1611432849816
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Point->Content",
|
||||
"updated": 1611432853027
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Point Formula",
|
||||
"updated": 1611432862646
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Point Formula->Definition",
|
||||
"updated": 1611432866497
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Point Formula->Content",
|
||||
"updated": 1611432870720
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Polygon",
|
||||
"updated": 1611433008071
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon->Definition",
|
||||
"updated": 1611433012029
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon->Content",
|
||||
"updated": 1611433015599
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Polygon->8",
|
||||
"updated": 1611433074724
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Polygon Condition",
|
||||
"updated": 1611433130396
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Condition->Definition",
|
||||
"updated": 1611433134852
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Condition->Content",
|
||||
"updated": 1611433139614
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Polygon Body",
|
||||
"updated": 1611433166294
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Body->Definition",
|
||||
"updated": 1611433175296
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Body->Content",
|
||||
"updated": 1611433178676
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Style",
|
||||
"updated": 1611433231745
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Style->Definition",
|
||||
"updated": 1611433235523
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Style->Content",
|
||||
"updated": 1611433238663
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Style Condition",
|
||||
"updated": 1611433273738
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Style Condition->Definition",
|
||||
"updated": 1611433277376
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Style Condition->Content",
|
||||
"updated": 1611433280995
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Polygon Border",
|
||||
"updated": 1611433347131
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Border->Definition",
|
||||
"updated": 1611433354769
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Border->Content",
|
||||
"updated": 1611433358287
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Polygon Vertex",
|
||||
"updated": 1611433401279
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Vertex->Definition",
|
||||
"updated": 1611433405348
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Polygon Vertex->Content",
|
||||
"updated": 1611433408699
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"topic": "Data Mines",
|
||||
"pageNumber": "11",
|
||||
"type": "How to Build an Indicator - Video Series",
|
||||
"definition": {
|
||||
"text": "This video series goes through the entire process of building an indicator, step by step.",
|
||||
"updated": 1611434001380
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This video series focuses on the “how to” aspect of building an indicator. It does not go through definitions nor does it explain the underlying concepts. Therefore, it is highly recommended to read the data mines page as well as the pages about indicator bots before attempting to build an indicator.",
|
||||
"updated": 1611434011723
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Reading the whole documentation on indicators and plotters is certainly desirable and will save you time in the long run.",
|
||||
"updated": 1611434037598
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "The video series on how to build an indicator was produced for the Beta 5 version of the system; however, the functionality still works similarly. That said, there may be minor differences that are yet to be documented. Please drop by the Develop group and ask any questions you may have, particularly if something is not working as expected, or as instructed in the videos.",
|
||||
"updated": 1611434212027
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 1 - Visual Definitions",
|
||||
"updated": 1611434706444
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Setting up the multi-period-market and multi-period-daily process definitions, status and data dependencies, execution events, and dataset definitions for the main product.",
|
||||
"updated": 1611434720860
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
"text": "KXKKS_o8Zjw",
|
||||
"updated": 1611434740393
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 2 - Code & Record Definition",
|
||||
"updated": 1611435476284
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Reviewing common coding practice and configuring record properties and their formulas.",
|
||||
"updated": 1611435495283
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
"text": "zx5N5D2tkwo",
|
||||
"updated": 1611435834819
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 3 - Testing & Troubleshooting",
|
||||
"updated": 1611435879103
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Setting up a data mining task to run the bot instance, checking the dataset files for errors, and troubleshooting common issues with the code and the process definitions.",
|
||||
"updated": 1611435892931
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
"text": "gjv5lPmLVSI",
|
||||
"updated": 1611435919312
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 4 - Plotters",
|
||||
"updated": 1611435948687
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "How to create the device that will interpret the dataset generated by the indicator and render a graphical representation over the charts.",
|
||||
"updated": 1611435955116
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
"text": "UBtUtUfZPk4",
|
||||
"updated": 1611436312247
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 5 - Trading Bot Dependencies",
|
||||
"updated": 1611436344230
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Before you may use the new indicator on a trading system, you must create the corresponding dependencies on the Low frequency trading bot.",
|
||||
"updated": 1611436373962
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To call the properties of a new indicator from within the definitions of a trading system, you first need to let the Low Frequency trading bot that your data mine exists. To do this, you need to add the corresponding data dependencies at the trading bot’s Trading process definitions.",
|
||||
"updated": 1611436404033
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/how-to-build-an-indicator-step-5.gif",
|
||||
"updated": 1611436528224
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Because the Low Frequency trading bot is a plugin, the modifications you make to the hierarchy do not persist after closing the frontend app. The workaround is to take a backup of the hierarchy after making the modifications, and replace the plugin file with the backup. Should you decide to contribute your data mine to the project, we will incorporate the dependencies in the official release.",
|
||||
"updated": 1611436549743
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,288 @@
|
||||
{
|
||||
"topic": "Integrations",
|
||||
"pageNumber": "1",
|
||||
"type": "Telegram Announcements",
|
||||
"definition": {
|
||||
"text": "Setup a Telegram bot to broadcast the activity of trading sessions to a Telegram group. You may produce plain-text or dynamic-content announcements at every event in your trading systems.",
|
||||
"updated": 1611484869105
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Overview",
|
||||
"updated": 1611484892100
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The announcements feature allows users to set up notifications tied to specific events, and triggered once each particular event becomes active while running any of the available types of trading sessions."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may use this feature to stay informed about the actions of your strategies while trading live, or to broadcast signals over a Telegram group while paper trading, for instance."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Supported events are:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trigger-on event"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Trigger-off event"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Take position event"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Stop and take profit next-phase events"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In addition, you can implement announcements at the level of stop and take profit phases, a particular case that shall be discussed too."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The current implementation is based on broadcasting announcements via Telegram bots. The system uses Telegram’s bots API to interact with a Telegram bot you will create. The bot will be added as a user in the Telegram group of your choice in which it will deliver the announcements as per the configuration you will set up in the system."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Setting Up a Telegram Bot and a Telegram Group"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Telegram’s documentation explains the details of how to use Telegram bots:",
|
||||
"updated": 1611485108327
|
||||
},
|
||||
{
|
||||
"style": "Link",
|
||||
"text": "Bots: An introduction for developers->core.telegram.org/bots",
|
||||
"updated": 1611485151851
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may choose to read Telegram’s documentation or simple follow the next few steps, which have been extracted for your convenience:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1. Go to Telegram and find the user @BotFather: You may use the link or simply search for the user.",
|
||||
"updated": 1611485257909
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "2. Type and send /newbot: BotFather will ask you to pick a name for your bot. Once the name is set, it will respond with the token (a text string) to access the HTTP API.",
|
||||
"updated": 1611485277898
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You will need this token at a later time."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "3. Create a Telegram: Your bot will broadcast the announcements here.",
|
||||
"updated": 1611485421498
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "4. Add your bot in the group: And add @myidbot as user in the group too.",
|
||||
"updated": 1611485472896
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "5. Type and send /getgroupid in the group: IDBot will answer with the group’s ID.",
|
||||
"updated": 1611485491256
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You will need this ID at a later time."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Setting Up the Telegram Bot in Superalgos"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You will set up your bot in a backtesting session, so that you may easily test the announcements."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "1. Go to any of your backtesting sessions and add a Social Bot node using the session’s menu: A social bot will be added along with a telegram bot.",
|
||||
"updated": 1611485546279
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "2. Select Edit Telegram Bot on the telegram bot menu: Replace the placeholder text with the actual botToken and chatId you got earlier.",
|
||||
"updated": 1611485581216
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n\"botToken\": \"927642627:2B1QkNX2620C2B1ZTp9JrQUV04YKtJrQ2t4\",\n\"chatId\":-388158765\n}",
|
||||
"updated": 1611485597629
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The system now has everything it needs to communicate with your Telegram bot."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Create Your Announcements"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may create as many announcements as you wish, on any of the events listed in the Overview section above by clicking Add Announcement on the corresponding event node menu."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There are two different ways in which you may customize announcements:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Plain text"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Dynamic content"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "The Weak-hands buster strategy shipping with Superalgos features a complete set of announcements. Check them out and reuse them in your setup!",
|
||||
"updated": 1611485640517
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Plain Text"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To set a plain text announcement, click Edit Announcement on the announcement node menu and set a message on the field text."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n\"text\": \"WHB Triggered-on!\"\n}",
|
||||
"updated": 1611485680647
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Dynamic Content"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To broadcast more elaborate messages that may include dynamic values of any of the current indicators or internal variables, set the message in the formula attached to the announcement instead."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The typical set up for a dynamic message consists of building a string by alternating “text between double quotes” with variables, separating them with plus signs (+)."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, a typical announcement formula for the take position event may look like this:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "\"Selling BTC at $\" + candle.close.toFixed(0) + \", with stop at $\" + stopLoss.toFixed(0) + \" and TP target at $\" + takeProfit.toFixed(0)"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ".toFixed(0) rounds the number to zero decimal places. The above formula would result in something like:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "Selling BTC at $9703, with stop at $9896 and TP target at $9115"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "If your formula is valid, the system will ignore the plain text version you may have set up in the announcement configuration. If for any reason the formula results in an error, then the plain text version will be used.",
|
||||
"updated": 1611485748590
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Announcements on Stop and Take Profit Phases"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We mentioned earlier that, beyond setting announcements on events, you may also implement announcements at the level of a stop or take profit phase. These are useful to broadcast the management of dynamic stop and take profit targets."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When implemented at the level of a phase, the announcement is triggered every time the value of the underlying variable (the stop or take profit target) changes. This is an important difference, as the value may change at every candle (if you are using formulas that use variables)."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This could result in too many announcements in relatively short intervals."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The valueVariation parameter introduced in the announcement configuration may be used to filter out announcements until a certain threshold is achieved. The value you enter will set the percentage of variation that needs to occur before a new announcement is broadcasted."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For instance, \"valueVariation\": 0.5 means a new announcement will be broadcasted every time the value of the underlying variable changes by 0.5%."
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n\"text\": \"Write here what you want to announce.\",\n\"valueVariantion\": 0.5\n}",
|
||||
"updated": 1611485849624
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Finishing the Setup"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is unlikely that you will want to use the announcements feature from within a backtesting session. A more likely scenario is you will want to use it with a paper trading session (to generate signals) or from a live trading session, to monitor the activity of your live trading."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "All you need to do to finish your set up is detach the social bot node from the backtesting session and attach it to the session you wish to use it in. Make sure the corresponding tasks are stopped before detaching and attaching the social bot."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Commercial Setups"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are settting up a signals business or require a more complex setup to broadcast announcements from multiple sessions, multiple strategies, or even to multiple groups, the following considerations may help you decide how to move forwards."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Telegram does not allow running multiple instances of the same bot. Doing so may produce warnings, cause errors, delays in message delivery, lost messages, and erratic behavior in general.",
|
||||
"updated": 1611485876079
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The solution is quite simple. Set up multiple bots. The rule of thumb is you should use one bot for each trading session. Remember you can include as many bots as you wish in your Telegram groups. That is, you may have different bots broadcast from different sessions in the same group."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If you wish to broadcast signals from multiple sessions to the same Telegram Group, you may name each bot in a way that each references their specific session, so that group members know exactly what each message is referring to.",
|
||||
"updated": 1611485909076
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, let’s say you are broadcasting signals from different markets… you may name your bots BTC/USDT, ETH/USDT and XMR/BTC."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Or maybe you have different strategies, then simply name the bots after each strategy."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This makes it really easy for group members to know what market or strategy the bot broadcasting the signal is referring to."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Another example… let’s say you are running a trading operation for friends and family. Each person is working with a different initial capital, different assets or different exchanges. in such case, you may set up multiple Telegram groups and multiple bots, so that each person may get precise information on what the bots are doing."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"topic": "Integrations",
|
||||
"pageNumber": "2",
|
||||
"type": "Webhook Notifications",
|
||||
"definition": {
|
||||
"text": "Receive webhook notifications from other systems and use them as signals in your strategies.",
|
||||
"updated": 1611486052936
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Overview",
|
||||
"updated": 1611486037477
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Superalgos allows you to receive webhook notifications from TradingView or any other system supporting webhooks. You may use this feature to turn notifications into signals upon which you may act from within your strategies."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The system’s Web Server receives notifications and serves them to a sensor bot running as a data mining task. The sensor creates a data product with several properties which are made available to be used from within strategies."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The rest of this page describes the set up process and how to use webhook notifications from within Superalgos."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up the Webhooks Sensor Bot Tasks"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Masters data mine features the definition of the Webhooks sensor bot used to monitor incoming notifications. You need to run an instance of this bot in the data mining section of the exchange and market of your choice."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The default workspace does not feature these tasks. To create a task for the Webhooks sensor bot, you need to uninstall and re-install the corresponding market."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Once the Webhooks sensor task is set up and running, you are all set at the application level. It’s that simple."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Run a Quick Local Test"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Before setting up the actual signal at the corresponding provider, you may run a quick local test that will help you familiarize with how Superalgos handles webhooks."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the crypto ecosystem node menu, select Add Signals Providers. A structure of nodes is added with a signals provider node that allows you to run a little test. Select Configure Signals Provider on the menu."
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n\"webhookURL\": \"Webhook/New-Message/Trading-View/Binance/BTC-USDT\",\n\"testMessage\": \"\"\n}",
|
||||
"updated": 1611486196742
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "webhookURL: This is the URL you need to use for testing purposes. Make sure you refer to the correct exchange and market."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "testMessage: Enter any message, for testing purposes."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Once the test message is configured, select Send Test Message on the menu."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Webhooks Sensor Bot Output"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Webhooks sensor bot outputs a single file, Data.json, in the following location: ",
|
||||
"updated": 1611486267182
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "\\Data-Storage\\Exchange\\Market\\Masters\\Webhooks\\Output\\External-Signals\\Single-File\\",
|
||||
"updated": 1611486278677
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may open the file and see if the content corresponds to what is expected."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Make sure the Webhooks sensor bot task is running. The process is configured to run every 30 seconds by default. If that time has passed, you should find the messages you may have sent.",
|
||||
"updated": 1611486302392
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is what the file may look like, assuming you sent four different test messages:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "[[1587998459260,\"Trading-View\",\"Sell\"],[1587998475409,\"Trading-View\",\"Buy\"],[1587998530190,\"Trading-View\",\"A custom signal I just configured\"],[1588000300940,\"Trading-View\",\"This is my new message\"]]"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As per the record definition of the Webhooks sensor bot in the Masters data mine, each record in the file features three fields:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "timestamp: the Unix datetime of the message."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "source: the name of the signal provider."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "message: the message set up at the provider’s system."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Using Webhooks Signals from within Strategies"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may use each of the three available properties with the following syntax:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.timestamp"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.source"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.message"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, a simple condition evaluating to true when a the last message received is a buy signal from TradingView would look like this:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.source === \"Trading-View\" && chart.atAnyTimeFrame.externalSignal.message === \"Buy\""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may also use the previous property to check the previous message, as follows:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "chart.atAnyTimeFrame.externalSignal.previous.message === \"Buy\""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It may be wise to verify the date of the message, or to check if the message corresponds to a certain time frame. To do that, you may use the isItInside function as follows:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "isItInside(chart.atAnyTimeFrame.externalSignal, chart.at01hs.candle)"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the above example, the first parameter chart.atAnyTimeFrame.externalSignal is the signal object you wish to check, and the second parameter chart.at01hs.candle is any other object that is delimited in time. In this case, the condition validates true if the last message falls within the last 1-hour candle."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up Alerts/Messages at the Provider"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You will use the following syntax to craft the URL you need to configure for the webhooks at the provider:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "http://YourIPAddress:Port/Webhook/New-Message/Provider-Name/Exchange/Market"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "http://182.45.73.1:34247/Webhook/New-Message/Trading-View/Binance/BTC-USDT"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Set-up Your Network to Accept Incoming Connections"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Needless to say, you need to configure your network / router / firewall to allow incoming webhook messages on the corresponding port."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"topic": "Productivity Tools",
|
||||
"pageNumber": "1",
|
||||
"type": "Backups",
|
||||
"definition": {
|
||||
"text": "The backup feature is designed to preserve the integrity of references as you would expect when you wish to restore a data structure to a previous state of affairs.",
|
||||
"updated": 1611489612653
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Introduction",
|
||||
"updated": 1611489635384
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you back up a single node, a structure of nodes, a complete hierarchy or even the workspace, all existing references are stored in the resulting JSON file."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you restore a workspace backup, the current workspace is discarded entirely and replaced with the backup. Now, let’s see what happens when you restore anything other than a workspace, that is, any of the data structures contained in the workspace."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In particular, what we want to analyze is what happens with each type of reference that may be present in the structure."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "What happens with each type of reference when the back up is restored varies depending on one factor: the original structure is present in the workspace, or instead, it has been deleted prior to restoring the backup."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Outgoing References"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Outgoing references are kept no matter if the original structure of nodes still exists or not."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, in a task set up for running a testing session, the trading bot process instance references the trading bot Multi-Period process, and the session references a trading sytem."
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/backups-01.gif",
|
||||
"updated": 1611489923510
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As the capture above shows, when restoring the backup of a task, both outgoing references are maintained, even when the original task has not been deleted."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This means that restoring a back up is a viable way to duplicate structures of nodes with outgoing references when you expect outgoing references to be preserved."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Incoming References"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Incoming references are restored only when the original structure of nodes is deleted before restoring the backup."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let’s take a trading system as an example. Trading systems usually have several incoming references originating at different testing and live trading sessions."
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/backups-02.gif",
|
||||
"updated": 1611489956681
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The capture above shows that restoring a backup of a trading system when the orginal definition is still in the workspace causes the incoming references to be lost."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "However, as the capture below shows, if the original structure of nodes is deleted before the backup is restored, then the incoming references are restored as well."
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/backups-03.gif",
|
||||
"updated": 1611489978479
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Internal References"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Internal references are kept internally only when the original structure of nodes is deleted before restoring the backup. If the original structure of nodes is present, then the references will point to the original nodes on the original structure of nodes."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let’s see what happens when we restore a backup of a shapes node without deleting the original node first:"
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/backups-04.gif",
|
||||
"updated": 1611490001325
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As expected, the references from vertices in the restored backup do not point to the points in the same structure, but instead point to the original points in the original strucutre."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "On the other hand, if the original structure of nodes is deleted before restoring the backup, then the references point to the nodes within the same structure:"
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/backups-05.gif",
|
||||
"updated": 1611490016934
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Conclusion"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The backup feature is designed to preserve the integrity of references as you would expect when you wish to restore a data structure to a previous state of affairs."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "However, the tool’s particular behavior when restoring a backup without deleting the original structure may be of use in certain ocassions. In such cases, the backup feature behaves differently than the clone feature.",
|
||||
"updated": 1611490099609
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"topic": "Productivity Tools",
|
||||
"pageNumber": "2",
|
||||
"type": "Clones",
|
||||
"definition": {
|
||||
"text": "The clone feature is designed to produce copies of data structures when you need to replicate nodes and expect the copies to behave similarly to the original.",
|
||||
"updated": 1611490308337
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Introduction",
|
||||
"updated": 1611490329180
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We will analyze the case of clones under the same lens we analyzed how backups work: we will study how clones treat outgoing, incoming and internal references."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Unlike with backups, clones behave in the same way independently of the existence of the original structure of nodes in the workspace, therefore, we will not make such distinction in the following paragraphs."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Outgoing References"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Outgoing references are kept intact."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Pretty much like with backups, a clone preserves outgoing references."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The same example as with backups apply: cloning a task running a session produces a copy of the task with the trading bot process instance maintaining the reference to the trading bot Multi-Period process, and the session maintaining the reference with the corresponding trading system."
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/clones-01.gif",
|
||||
"updated": 1611490442818
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Incoming References"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Incoming references are discarded."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let’s go back to the example of a trading system, like we did when exploring backups:"
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/clones-02.gif",
|
||||
"updated": 1611490471957
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The capture above shows that restoring a clone of a trading system does not restore incoming references, even when the original structure of nodes is deleted before restoration."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Internal References"
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Internal references are kept intact."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Going back to the shapes node example, the capture below shows how restonring a clone keeps internal references intact:"
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
"text": "GIFs/Superalgos/Docs/design-space/clones-03.gif",
|
||||
"updated": 1611490496345
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Conclusion"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The clone feature is designed to produce copies of data structures when you need to replicate nodes and expect the copies to behave similarly to the original."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"topic": "Productivity Tools",
|
||||
"pageNumber": "3",
|
||||
"type": "Shares",
|
||||
"definition": {
|
||||
"text": "The share feature works almost the same as the back up feature, but discarding personal information like exchange keys.",
|
||||
"updated": 1611490590355
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The share feature works almost the same as the back up feature, with the sole difference that shares do not store personal information, like exchange API keys.",
|
||||
"updated": 1611490600062
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "On that note, we will not analyze this feature further, other than reminding the user that it is recommended to develop the habit to only share shares and not backups, to avoid the potential accidental dissemination of exchange keys."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "On a different note, it is also critical to bring one more issue to your attention regarding sharing work and—what’s more more important— using other people’s work."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may have noticed that the system accepts JavaScript code in a multitude of input forms such as configurations, conditions, formulas and more. At this point, there is no restriction to the code that may be used. This is a design feature, as we wish advanced users to be able to use their programing skills to make the most out of the system."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "However, this also means that using workspaces or any other data structure coming from untrusted sources is not free of risks. On the contrary, it may be a high-risk choice, as it is possible to introduce malicious code that may, for example, attempt to steal people’s API keys."
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "Beware of using shared data structures from untrusted sources as they may contain malicious code that could, for example, steal your exchange keys.",
|
||||
"updated": 1611490613530
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"topic": "Productivity Tools",
|
||||
"pageNumber": "4",
|
||||
"type": "Screen Capture and Sharing",
|
||||
"definition": {
|
||||
"text": "Share you screen with friends and colleagues capturing still images or videos directly from within the frontend.",
|
||||
"updated": 1611490773902
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hit Ctrl + F8 to capture a static PNG image.",
|
||||
"updated": 1611490790992
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hit Ctrl + F9 to start capturing a GIF video, and hit the same key combination again to end the capture. Once the capture ends, it takes some time to process the capture and generate the final file."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hit Ctrl + F10 to start capturing a WEBM video, and hit the same key combination again to end the capture. WEBM videos are processed instantly."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In all three cases, the browser downloads the resulting file and makes it available in the downloads folder."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "GIF files tend to grow a lot in long captures, but are more universal, thus more devices can display them properly. WEBM files are a lot more efficient, but do not work in Apple and, potentially, other platforms or devices.",
|
||||
"updated": 1611490891864
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"topic": "Trading Engine",
|
||||
"pageNumber": "9",
|
||||
"type": "Distance to Events",
|
||||
"definition": {
|
||||
"text": "Track the number of periods that have passed since the last occurrence of each type of event. On this page: Trigger On, Trigger Off, Take Position, Close Position, Next Phase, Move to Phase, Create Order, Cancel Order, Close Order.",
|
||||
"updated": 1611327154424
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Distance To Event->Definition",
|
||||
"updated": 1611327304404
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Distance To Event->Content",
|
||||
"updated": 1611327325113
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables No Discussion"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Distance To Event->2",
|
||||
"updated": 1611327347651
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"topic": "Trading Engine",
|
||||
"pageNumber": "10",
|
||||
"type": "Balances",
|
||||
"definition": {
|
||||
"text": "Keep track of the balances of each asset, at different points in time. On this page: Balance, Begin Balance, and End Balance.",
|
||||
"updated": 1611331647405
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Balances are the basis of the account-keeping features, by which you may know exactly how much of each asset there is on the account at any given point in time.",
|
||||
"updated": 1611331659066
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The system keeps track of balances in multiple contexts, but also saves snapshots of what the balance was at key moments in time, so that such information may be available both to study the results of operations, and so that it may be used form within trading strategies."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "It is important to understand that balances are an internal concept managed by the trading engine, and are calculated based on the information processed by the trading bot. Balances do not necessarily reflect the actual amount of assets at the exchange."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Balance",
|
||||
"updated": 1611331710709
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Balance->Definition",
|
||||
"updated": 1611331715062
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Balance->Content",
|
||||
"updated": 1611331718713
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Begin Balance",
|
||||
"updated": 1611331731595
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Begin Balance->Definition",
|
||||
"updated": 1611331735070
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Begin Balance->Content",
|
||||
"updated": 1611331738675
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "End Balance",
|
||||
"updated": 1611331749501
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->End Balance->Definition",
|
||||
"updated": 1611331752868
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->End Balance->Content",
|
||||
"updated": 1611331756749
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"topic": "Trading Engine",
|
||||
"pageNumber": "11",
|
||||
"type": "Common Metrics - Hits, Fails, Hit Ratio, Profit Loss, ROI, Annualized Rate of Return",
|
||||
"definition": {
|
||||
"text": "These metrics are available in different contexts, for instance, at the level of the Episode, the Position or the Position, and both for the base and quoted assets.",
|
||||
"updated": 1611333971023
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Hits",
|
||||
"updated": 1611331909747
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Hits->Definition",
|
||||
"updated": 1611331919409
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Hits->Content",
|
||||
"updated": 1611331922558
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Fails",
|
||||
"updated": 1611331934877
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Fails->Definition",
|
||||
"updated": 1611331939264
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Fails->Content",
|
||||
"updated": 1611331942803
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Hit Ratio",
|
||||
"updated": 1611331974360
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Hit Ratio->Definition",
|
||||
"updated": 1611331977537
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Hit Ratio->Content",
|
||||
"updated": 1611331980968
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Profit Loss",
|
||||
"updated": 1611332640555
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Profit Loss->Definition",
|
||||
"updated": 1611332643604
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Profit Loss->Content",
|
||||
"updated": 1611332647277
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "ROI",
|
||||
"updated": 1611332671387
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->ROI->Definition",
|
||||
"updated": 1611332674792
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->ROI->Content",
|
||||
"updated": 1611332677943
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Annualized Rate Of Return",
|
||||
"updated": 1611332963859
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Annualized Rate Of Return->Definition",
|
||||
"updated": 1611332970973
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Annualized Rate Of Return->Content",
|
||||
"updated": 1611332975434
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"topic": "Trading Engine",
|
||||
"pageNumber": "12",
|
||||
"type": "Accounts Specific to the Open and Close Stages",
|
||||
"definition": {
|
||||
"text": "Learn about accounts specific to the context of the open and close stages. On this page: Target Size, Size Placed, Size Filled, and Fees Paid.",
|
||||
"updated": 1611335734722
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Target Size",
|
||||
"updated": 1611335751425
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Target Size->Definition",
|
||||
"updated": 1611335756518
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Target Size->Content",
|
||||
"updated": 1611335759648
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Size Placed",
|
||||
"updated": 1611335767899
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Size Placed->Definition",
|
||||
"updated": 1611335798845
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Size Placed->Content",
|
||||
"updated": 1611335806225
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Size Filled",
|
||||
"updated": 1611335816288
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Size Filled->Definition",
|
||||
"updated": 1611335820275
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Size Filled->Content",
|
||||
"updated": 1611335823030
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Fees Paid",
|
||||
"updated": 1611335839409
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Fees Paid->Definition",
|
||||
"updated": 1611335846433
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Fees Paid->Content",
|
||||
"updated": 1611335849981
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"topic": "Trading Engine",
|
||||
"pageNumber": "13",
|
||||
"type": "Accounts Specific to Orders",
|
||||
"definition": {
|
||||
"text": "Learn about accounts specific to the context of orders. On this page: Rate, Actual Rate, Size, Percentage Filled, Fees Paid, and Lock.",
|
||||
"updated": 1611336548381
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Rate",
|
||||
"updated": 1611336589519
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Rate->Definition",
|
||||
"updated": 1611336592312
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Rate->Content",
|
||||
"updated": 1611336595025
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Actual Rate",
|
||||
"updated": 1611336604269
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Actual Rate->Definition",
|
||||
"updated": 1611336607169
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Actual Rate->Content",
|
||||
"updated": 1611336610243
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Size",
|
||||
"updated": 1611336619074
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Size->Definition",
|
||||
"updated": 1611336621768
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Size->Content",
|
||||
"updated": 1611336624678
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Percentage Filled",
|
||||
"updated": 1611336634683
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Percentage Filled->Definition",
|
||||
"updated": 1611336637426
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Percentage Filled->Content",
|
||||
"updated": 1611336641053
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Fees Paid",
|
||||
"updated": 1611336663062
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Fees Paid->Definition",
|
||||
"updated": 1611336665926
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Fees Paid->Content",
|
||||
"updated": 1611336669591
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Lock",
|
||||
"updated": 1611336682293
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Lock->Definition",
|
||||
"updated": 1611336685521
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Lock->Content",
|
||||
"updated": 1611336688288
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"topic": "Trading Engine",
|
||||
"pageNumber": "14",
|
||||
"type": "Market Data",
|
||||
"definition": {
|
||||
"text": "Write a summary for this topic page."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Begin",
|
||||
"updated": 1611336944906
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Begin->Definition",
|
||||
"updated": 1611336947757
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Begin->Content",
|
||||
"updated": 1611336952843
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "End",
|
||||
"updated": 1611336959587
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->End->Definition",
|
||||
"updated": 1611336962371
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->End->Content",
|
||||
"updated": 1611336966142
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Begin Rate",
|
||||
"updated": 1611336976107
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Begin Rate->Definition",
|
||||
"updated": 1611336978830
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Begin Rate->Content",
|
||||
"updated": 1611336981597
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "End Rate",
|
||||
"updated": 1611336991778
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->End Rate->Definition",
|
||||
"updated": 1611336994931
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->End Rate->Content",
|
||||
"updated": 1611336998261
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Candle",
|
||||
"updated": 1611337007474
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Candle->Definition",
|
||||
"updated": 1611337017053
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Candle->Content",
|
||||
"updated": 1611337019761
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Concept->Reusable Snippets->Note for Hierarchy Tables No Discussion"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Candle->2",
|
||||
"updated": 1611337398702
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
{
|
||||
"topic": "Trading Engine",
|
||||
"pageNumber": "15",
|
||||
"type": "Identity and Status",
|
||||
"definition": {
|
||||
"text": "Keep track of information related to the identity or status of the particular object, in the corresponding context. On this page: Index, Serial Number, Identifier, Exchange Id, Status, Exit Type, Situation Name, Situation Name, Algorithm Name, and Algorithm Name.",
|
||||
"updated": 1611337690744
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This page compiles nodes common to many different contexts and which have a relationship with the identity, status, or similar properties of the object.",
|
||||
"updated": 1611337706400
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Index",
|
||||
"updated": 1611338005986
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Index->Definition",
|
||||
"updated": 1611338008928
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Index->Content",
|
||||
"updated": 1611338011615
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Serial Number",
|
||||
"updated": 1611338019622
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Serial Number->Definition",
|
||||
"updated": 1611338022203
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Serial Number->Content",
|
||||
"updated": 1611338024711
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Identifier",
|
||||
"updated": 1611338034234
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Identifier->Definition",
|
||||
"updated": 1611338037288
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Identifier->Content",
|
||||
"updated": 1611338041111
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Exchange Id",
|
||||
"updated": 1611338051756
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exchange Id->Definition",
|
||||
"updated": 1611338054763
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exchange Id->Content",
|
||||
"updated": 1611338057839
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Status",
|
||||
"updated": 1611338066340
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Status->Definition",
|
||||
"updated": 1611338069198
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Status->Content",
|
||||
"updated": 1611338075010
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Exit Type",
|
||||
"updated": 1611338088984
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exit Type->Definition",
|
||||
"updated": 1611338091878
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Exit Type->Content",
|
||||
"updated": 1611338095878
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Situation Name",
|
||||
"updated": 1611338259000
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Situation Name->Definition",
|
||||
"updated": 1611338261763
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Situation Name->Content",
|
||||
"updated": 1611338265343
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Strategy Name",
|
||||
"updated": 1611338279553
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Strategy Name->Definition",
|
||||
"updated": 1611338282513
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Algorithm Name",
|
||||
"updated": 1611338404013
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Algorithm Name->Definition",
|
||||
"updated": 1611338523928
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Algorithm Name->Content",
|
||||
"updated": 1611338526964
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Order Name",
|
||||
"updated": 1611338535849
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Order Name->Definition",
|
||||
"updated": 1611338538713
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Order Name->Content",
|
||||
"updated": 1611338541890
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"topic": "Trading Farms",
|
||||
"pageNumber": "1",
|
||||
"type": "Trading Farms Fundamental Concepts",
|
||||
"definition": {
|
||||
"text": "How to set up a flexible and scalable crypto-trading farm running Superalgos distributed on multiple machines.",
|
||||
"updated": 1611343209935
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Superalgos is designed for coordinated, flexible, and scalable trading operations.",
|
||||
"updated": 1611343220386
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In its current version, the system may be deployed in multiple machines—as many as desired—and each machine may constitute a node in a network of nodes. In fact, different networks of nodes may live within the same computer network."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Each node on a network may specialize in a single type of process or handle multiple processes of different types."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, you may have a set of nodes running data mining operations extracting data from multiple markets and multiple exchanges. You may have a set of nodes specializing in processing indicators and technical studies. And you may have a set of nodes specializing in running trading sessions."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may also use different criteria to arrange the network. For example, you may have a node running combined data mining, data processing, and trading operations on a single exchange or market, and other nodes running similar combined operations on other exchanges or markets."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Or you may have a network of nodes for your testing environment and another network of nodes for your production environment."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "In other words, the system allows building any arrangement of networks of nodes responding to the organizational logic of your preference."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "What is unique about Superalgos is that the system keeps track of the network arrangements you create and makes sure that all components and data structures in the system can seamlessly track dependencies across the network. This means, for example, that trading sessions running on Node X may access data in Node Y and Node Z without requiring any sort of configuration."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "On top of that, the operation may be managed entirely from any node on the network. In fact, it may be managed from a computer in the network not running Superalgos, by pointing the browser to any of the nodes in the network to run the frontend."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following explanations assume that you are familiar with the basic workings of Superalgos, and in particular, of the Network hierarchy. If that is not the case, then please read the Network pages before diving into building a trading farm."
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "At this stage, Superalgos does not implement any form of security measures, therefore, the system is to be used in the context of a restricted Local Area Network only.",
|
||||
"updated": 1611343257268
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"topic": "Trading Farms",
|
||||
"pageNumber": "2",
|
||||
"type": "Set Up a Network of Nodes",
|
||||
"definition": {
|
||||
"text": "Install Superalgos on each machine, to then create and set up a network node for each machine.",
|
||||
"updated": 1611343340124
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This page does not go through the process of setting up a computer network. Instead, it assumes the network is already set up. So, do verify the local area network setup and make sure your computer network is functioning properly before starting.",
|
||||
"updated": 1611343358129
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In a network of nodes, each node has it’s own web server, web sockets server, and task server."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The default web server and web sockets ports used by Superalgos are 34248 and 18041 respectively. If you wish to change these defaults, you must modify the.env file on the root folder, and also \\TaskServer\\.env.",
|
||||
"updated": 1611343376974
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Before You Begin"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Make a quick list with the name you wish to give to each node and the corresponding IP address on the network. You will need those to configure each network node."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Also, you may want to plan what your operation should look like."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "First and foremost, you may want to decide on which node you will keep the workspace on which the network of nodes shall be configured. We call this, the home node."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is not a requirement, as you may keep different workspaces in different nodes, and even set up different networks on different workspaces, but it’s the most usual setup."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Also, you may want to plan which nodes in the network should run which data-mining tasks, which nodes should run which trading sessions, and so on. As hinted in the fundamental concepts page, possibilities are endless, so we are not going to cover alternatives here. If you know exactly what you want to do, it should be easy to implement. That said, you are free to explore and experiment as well."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Start Here"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "1. Set up Superalgos on each machine. Once Superalgos is installed, run the system for the first time using the node run noBrowser command. The noBrowser parameter runs the backend without firing up the frontend."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "On computers with 8 GB of RAM or less, such as minicomputers or single-board computers like the Raspberry Pi, use node run noBrowser minMemo to run the app. minMemo sets up the system to run with minimal RAM requirements.",
|
||||
"updated": 1611343440835
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Leave the machine online, with the backend running."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "2. Run the frontend to access the home node."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may access the home node locally, that is, running the browser on the machine where the home node is running, or you may run the browser on any other machine in the physical network—even one not running Superalgos—by navigating to the home node’s IP address."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "If you are accessing the home node remotely, you need to configure the My Computer network node to use the machine’s IP address instead of localhost in the host parameter. This enables the web sockets connection.",
|
||||
"updated": 1611343511090
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "For organizational purposes and to avoid confusion later on, it is recommended to clean up the home node’s workspace uninstalling the markets that you don’t need.",
|
||||
"updated": 1611343505445
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Click to learn how to uninstall an existing market"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "3. Add and configure a network node for each machine."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Adding a Network Node"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To add a network node, select Add Network Node on the Superalgos Network node menu. A network node is added along with the basic structure of nodes to set up a node."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Configuring the Network Node"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Select Configure on the menu to access the configuration."
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "{\n\"host\": \"localhost\",\n\"webPort\": \"34248\",\n\"webSocketsPort\": \"18041\"\n}",
|
||||
"updated": 1611344373383
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "host is the machine or hardware represented by the network node. The default parameter is localhost, but if you intend to access the backend services of this node from a remote computer, then you must change localhost for the IP Address of the machine on which the node is running, for example, to 147.0.0.1."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "webPort is the port used by the Web Server, at this stage 34248."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "webSocketsPort is the port used by the system to communicate over the local area network, by default set at 18041."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Configure the first node and hit F5 to refresh the page. Once the page reloads, a notice indicating the system is connecting with the new network node will show on the top of the screen. Repeat the process for each machine."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"topic": "Trading Farms",
|
||||
"pageNumber": "3",
|
||||
"type": "Set Up Each Node on the Network",
|
||||
"definition": {
|
||||
"text": "Install the markets you wish to work with and remove the tasks where you don't need them.",
|
||||
"updated": 1611344470552
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you install a market, several structures of nodes are created on each of the main sections of the network hierarchy for all nodes defined on the network: data storage, data mining, testing environment, and production environment, as well as the corresponding time machines in the charting space.",
|
||||
"updated": 1611344492853
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In other words, the process of installing a new market replicates all data structures in all nodes."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You will most likely want to delete the tasks that you don’t need on certain nodes, and keep only those that you wish each node to handle.",
|
||||
"updated": 1611344498395
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"topic": "Trading Farms",
|
||||
"pageNumber": "4",
|
||||
"type": "Operating a Trading Farm",
|
||||
"definition": {
|
||||
"text": "Operate tasks in remote nodes pretty much as if they were running on the home node.",
|
||||
"updated": 1611344573684
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The operation of a trading farm is done from within the home node. There is no need to use the frontend application with any other node in the network, although you may if you wish."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Running or stopping tasks residing in any of the network nodes is a transparent operation, and works in the same way as if the tasks were in the home node. When a task is started, the process takes a snapshot of the state of the network at that point and traces all dependencies before starting the job at hand."
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "This means that changes made in the distribution of tasks in the network at any point are recognized by each task upon starting."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "However, entities that don’t run in tasks—such as time machines and timeline charts in the charting space—function with the state of the network upon starting the frontend app. This means that, for example, if you move a data mining task to a different node, the associated chart will show the data in the former node until you refresh the browser."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Finally, when uninstalling a market, the system will attempt to uninstall the corresponding tasks on all network nodes. If you wish to uninstall markets on specific nodes only, you may delete data structures individually instead."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,226 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "1",
|
||||
"type": "How to Troubleshoot an Issue",
|
||||
"definition": {
|
||||
"text": "Following these logical steps will help you better understand the system and find solutions to most of the issues you may run into.",
|
||||
"updated": 1611509381460
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There are several reasons why you may experience issues while using Superalgos. It may be due to a lack of understanding of how the system works, because you may be skipping a step or two in the process you are trying to engage with, or because something may not be working as it should.",
|
||||
"updated": 1611509396717
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Whatever the reason may be, this page provides a step-by-step process that will help you understand what is going on so that your issue may be resolved in the most efficient possible way."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In other words, following this step-by-step troubleshooting guide will either lead you to discovering what you may be doing wrong so that you may fix your issue and move on, or to gathering all the relevant information required for the Team to investigate the issue."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Thoroughly following this troubleshooting guide—step by step—is a requirement for reporting an issue. We can not afford to investigate issues that you may solve on your own, or without the appropriate information. Doing so would rob the project of valuable resources.",
|
||||
"updated": 1611509548445
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Start Here"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "1. Understand what you are doing and how the feature works"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you are following the Download and Set Up guide or the Welcome tutorial, read caferully and make sure you haven’t skipped any steps."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you are already using the system, take some time to search the documentation and read the pages related to the matters you are working with. Use the search box on the top-right corner to search for the specific matter (i.e. backtesting, data mining, etc.)",
|
||||
"updated": 1611509580552
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you are having trouble with a specific node on the design space, open the menu and click the button. A new tab will open in your browser with the description of the corresponding node in the corresponding hierarchy directory. Read about the node, it’s parent node, and its offspring."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you are having trouble operating the charts, make sure you revisit the Welcome tutorial and the interface section of the Charting Space."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "There is no substitute for knowledge. The more you understand, the less time and effort you will waste with issues related to a lack of understanding, and the more focused your questions will be when asking for help. You may be inclined to take a shortcut and ask the community before doing your research. This may save you some time occasionally and may be appropriate in cases in which you need a little guidance or need to clear a quick doubt, particularly if you are a beginner and are still following the Getting Started Guide. However, the problem with lack of understanding is that it is a persistent condition until you deal with the root cause. The way to deal with the root cause is taking the time to read the documentation. Otherwise, you will find yourself dealing with the same constraints over and over again. Acquiring knowledge while being mindful of the Team’s time is the first step towards becoming a valuable member of the community.",
|
||||
"updated": 1611509589990
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "2. Scan the troubleshooting section"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Chances are someone else has experienced a similar issue as you may be experiencing now. We do our best to compile common issues into specific troubleshooting pages, so make sure you take a look there before moving on."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "3. Is your processor stuck at 100%?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Open your operating system’s Task Manager application and verify the CPU load while you reproduce the issue you are experiencing. If your CPU is running at 100% for more than 30 to 60 seconds, all sorts of problems may arise, as your hardware is not able to cope with the system requirements."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If this is the case, try closing any other applications that may be demanding CPU time, and follow the guidelines proposed in the My System Gets Slow page to lower the demands on the processor."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you may not reproduce the issue while your CPU is working at less than 100%, then that may have been the cause of the problem."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "4. Does the issue persist when using the latest version of the software?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Running the latest version of the software is virtually mandatory, as bugs affecting you may have already been solved. Make sure you are running the latest stable software version in the master branch of the Superalgos repository, or the latest software in the develop branch."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Making sure means installing the latest version, right now.",
|
||||
"updated": 1611509626109
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "5. Does the issue persist when using one of the official workspaces?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the issue may not be reproduced using one of the official workspaces, that likely means that modifications you may have introduced may be playing a role in the issue. In and of itself, this is a crucial piece of information that helps start the process of isolating the issue."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the issue happens in a modified workspace only, take some time going through the modifications you introduced."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Start over and reproduce the modifications on the official workspace, one at a time, and make a quick test after each mod is applied. This process done right should lead you to the exact node, structure of nodes, configuration, parameter, or—in general—the modification that may be involved in the cause of the issue."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "This doesn’t necessarily mean that you made a mistake when modifying the official workspace. It simply pinpoints where the problem may be, and it’s a crucial part of the investigation that you should conduct before going any further.",
|
||||
"updated": 1611509652152
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "6. Simplify the context and isolate the issue"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you are doing several things at the same time and something goes wrong, it is sometimes hard to identify what is it that may be causing the issue. The next logical step to take is to further isolate the issue. You do this by removing pieces from the context so that you may focus on the core of the matter."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example:"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are having an issue while backtesting a strategy, you do not need your data mining operation to be running. In such a case, stop the data mining operation and everything else you may be doing, and run the backtest only."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you are having an issue running one of the Masters indicators, you do not need all indicators to be running at the same time. Make sure the said indicator dependencies are running, and stop the rest of the indicators."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you are having an issue with a chart and you have three other charts on the screen at the same time, try zooming-in the chart and see if you still experience the issue. Or turn all layers off and leave on only the layer you may be having difficulties with."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you are running multiple live trading sessions and experience an issue with one of them, stop the rest of the sessions and try to reproduce the issue with the first one."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The point to take home is that the narrower the scope of the investigation, the easier it is to find the cause of the problem.",
|
||||
"updated": 1611509672765
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "7. May this be an issue with data?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If your machine shut down unexpectedly or you closed the backend servers running in the console application without first stopping your data mining tasks, chances are some of your data may have been corrupted. If you suspect this may have something to do with your issue, then you should check the integrity of your data."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "8. May this be an issue with the frontend application?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If your issue happens within the frontend application, then you should either be getting an on-screen error or an error on your browser console application."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The error on-screen or logged at the browser console may give you a hint of what may be going on. If you are a technical person, this may help solve your issue on your own."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Make sure you grab the screen showing these errors so that you may report them later.",
|
||||
"updated": 1611509685850
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Remember that Chrome is the only supported browser. If you are using any other browser and have frontend issues, we may not be able to reproduce the issue. Do not report an issue with the frontend unless you are using Chrome.",
|
||||
"updated": 1611509692825
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "9. May this be an issue with the backend application?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If there are issues with the backend application, then errors must be logged at the console where you are running the backend. The same errors are logged in the Log-Files folder and the specific sub-folders corresponding to the processes involved in the matter."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": " Note: Make sure you check the logs for the specific processes involved in the matter, and save the corresponding log files with these errors so that you may report them later."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If you are a developer, remember that you may easily debug a task to find the root cause of the issue.",
|
||||
"updated": 1611509706433
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "10. May this be an issue related to your particular setup?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Deploying and running Superalgos in complex or very particular setups augments the probability of issues related to the setup itself, which may be very hard or even impossible for the Team to reproduce. The team will investigate issues that happen while running Superalgos in your local machine, or while running in a classic trading farm setup as described in the documentation. We can not investigate issues unrelated to the software itself."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you have issues with a particular setup, feel free to ask for help from other users in the community, but do not open an issue for the Team to look into."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Has Your Issue Not Been Resolved?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If following this guide didn’t solve your issue, do not worry… your efforts shall not go in vain!"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Investigating your issue must have taught you a lot about how the system works, and it’s a requisite for reporting an issue so that the Team may investigate it. So, please, go ahead and do just that. Make sure you follow the instructions on How to Report an Issue and provide all the valuable information you have gathered while following this guide.",
|
||||
"updated": 1611509744676
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "2",
|
||||
"type": "How to Report an Issue",
|
||||
"definition": {
|
||||
"text": "Reporting an issue is a process that entails doing some basic research, carefully describing how to reproduce the issue, and gathering crucial information.",
|
||||
"updated": 1611510213732
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Before you consider reporting an issue, make sure you do everything within your reach to investigate the problem. In most cases, you will find that there is no issue at all and that you were making a mistake, skipping a step in the process, or not fulfilling a requirement.",
|
||||
"updated": 1611510227112
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "The How to Troubleshoot an Issue guide takes you through a step-by-step process to investigate your issue and gather all relevant information. Carefully following the guide is a requirement for reporting an issue. If the very act of going through the troubleshooting steps does not solve your issue, then come back here once you have finished gathering the required information, as instructed in the guide. Remember, reporting an issue requires understanding what the issue is about, being able to explain how to reproduce it, and providing all relevant information.",
|
||||
"updated": 1611510328837
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "1. Search for Similar Issues",
|
||||
"updated": 1611511273179
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Go to the Issues page in the Superalgos repository and use the search box to find issues that may be similar to yours."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Search for open and closed issues (remove the is open tag).",
|
||||
"updated": 1611510615215
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Try different keywords you would use to describe the issue."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you find an issue that is similar to yours, read the whole thread. You may find information conducive to solving the issue, proposed workarounds, or reports on the status of the solution to the issue."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you believe you have information relevant to the issue that has not yet been offered by other users, then go ahead and reply to the issue with everything you know about your case."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If there are no issues similar to yours, or your issue happens in a different context not addressed in the issues you’ve found, then go on with the next few steps."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "2. Are you Ready to Report an Issue?",
|
||||
"updated": 1611511264814
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Please, make an honest assessment of the following questions:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Have you followed the How to Troubleshoot an Issue guide to the best of your abilities?",
|
||||
"updated": 1611510652729
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Have you tested your issue with today’s version of the software?"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Have you verified that none of the troubleshooting pages in the documentation addresses and solves your issue?"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Have you captured and saved the associated errors in the browser console or the Log-Files folder?"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "In case your issue is related to the frontend… are you using Chrome or Safari to test the issue?",
|
||||
"updated": 1611510679400
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you answer no to any of the above, then you are not ready to open an issue. If you may confidently answer yes to all questions, then please proceed."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "3. Consider the Following",
|
||||
"updated": 1611511254512
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the issue may be reproduced on one of the official workspaces, then report the issue as such. Issues occurring on custom workspaces have a lower priority."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Issues that may not be reproduced have lower priority than those that may be reproduced."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "4. Open a New Issue",
|
||||
"updated": 1611511249720
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Click the New Issue button and select Get Started on the Bug report item. The following form will open:"
|
||||
},
|
||||
{
|
||||
"style": "Png",
|
||||
"text": "PNGs/Superalgos/Docs/third-parties/report-an-issue-01.png",
|
||||
"updated": 1611510882221
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Carefully complete the form following the below guidelines:",
|
||||
"updated": 1611510902570
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Title"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Do your best to describe the issue in a single, short sentence. Take your time. A good practice is describing what happens and in which context. For example: “WHB backtest stops short of finalDatetime”."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Context"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Complete and adjust the contents leaving the information that fits your case and deleting the information that doesn’t."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Operating System: Windows / MacOs / Linux / Other (include the version on either case)"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Software version: today’s master branch / today’s develop branch"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Workspace version: default Workspace.json (Getting Started Guide) / Simple Workspace.json / Workspace - Binance - WHB - BBTB.json / My custom workspace"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Reproducible: the issue may / may not be reproduced."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Explain Your Issue",
|
||||
"updated": 1611511238751
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Explain what the problem seems to be."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Clearly explain what you wish to accomplish."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Explain, step by step, what you’ve done to achieve the goal. The Team will follow these steps to reproduce the issue, so be precise."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Explain what is the result you expect from your actions."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Explain what happens instead of the expected results."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Explain what errors you have found on-screen, on the browser console application, or in the Log-Files folder."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Reproduce the Issue on Video",
|
||||
"updated": 1611511228776
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The most important aspect of investigating an issue is being able to reproduce it. Capturing a video showing the steps that lead to the issue would be of great help."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the issue happens within the browser, you may use the systems’ video capture feature:"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hit Ctrl + F8 to capture a static PNG image."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hit Ctrl + F9 to start capturing a GIF video, and hit the same key combination again to end the capture. Once the capture ends, it takes some time to process the capture and generate the final file."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Hit Ctrl + F10 to start capturing a WEBM video, and hit the same key combination again to end the capture. WEBM videos are processed instantly."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In all three cases, the browser downloads the resulting file and makes it available in the downloads folder."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "GIF files tend to grow a lot in long captures, but are more universal, thus more devices can display them properly. WEBM files are a lot more efficient, but do not work in Apple and, potentially, other platforms or devices.",
|
||||
"updated": 1611511119973
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In case the issue does not happen at the browser, for example, if it happens at the console, LICEcap is a lightweight, simple system that can help you capture GIF videos outside of Superalgos."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Bear in mind that GitHub issues accept files 10MB and lighter only.",
|
||||
"updated": 1611511131091
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Attach Relevant Log Files",
|
||||
"updated": 1611511219274
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you have on-screen errors or errors at the browser console, screen captures are fine."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you have errors in the backend, attach the logs you have collected while following the troubleshooting guide."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "GitHub issues do not allow uploading JSON files. Make a ZIP file with all relevant logs instead.",
|
||||
"updated": 1611511170225
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Custom Workspace?",
|
||||
"updated": 1611511208878
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the issue happens under specific conditions on a custom workspace, attach a share of the workspace. Do not attach backups as those may contain personal information such as API Keys."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Upload your workspace to the issue only if you feel comfortable with sharing it openly. If there are data structures that you prefer not to share, consider removing them so that you may share the non-sensitive bits only. If the issue happens precisely with the sensitive data structures in your workspace, then clearly explain the matter and wait for further instructions.",
|
||||
"updated": 1611511186403
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "5. Enable Github Notifications",
|
||||
"updated": 1611511204195
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Make sure you enable GitHub notifications when someone responds to the issue, as developers may want to ask for more information."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "3",
|
||||
"type": "How to Upgrade Your Existing Installation",
|
||||
"definition": {
|
||||
"text": "Staying up to date with the latest version of the software is highly recommended. Learn how to do it and what precautions to take.",
|
||||
"updated": 1611511361415
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You should expect new releases of Superalgos to become available every few months. Release announcements are made through the Official Superalgos Telegram Announcements Channel.",
|
||||
"updated": 1611511377439
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "During this beta stage, patches may be released as frequently as several times per week. Due to their high-frequency, minor updates go unannounced. If you ever experience a malfunction, make sure you upgrade your installation to the latest version available in the Superalgos repository before reporting a bug.",
|
||||
"updated": 1611511390486
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "New Releases"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are upgrading to a new official release, make sure you follow these instructions as well as those under the All Upgrades section."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Read the Announcement Carefully"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Read and understand the announcement explaining the changes and how they may impact your workflow. Most importantly, find out if the new version requires upgrading your workspace."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Check the Getting Started Guide"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It would be wise to go through the potentially new Getting Started Guide in the documentation, as it may reveal important information."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Back Up Your Personal Work"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the new version requires upgrading to a new workspace, you must decide which parts of your work you wish to backup so that you may restore them on the upgraded workspace (e.g.: you may want to backup your trading systems, data mines, super scripts, specific settings or configurations such as testing sessions, time machines, and so on)."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If there is no need to upgrade the workspace, that means that the new version of the system should work well with your existing workspace, provided that you are only one version behind."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "All Upgrades"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Back Up the Workspace"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Always back up your existing workspace before switching versions. You may go back to a working version of the software in case something goes wrong with the new one, by installing the previous version of the system and restoring your old workspace from a backup file if needed."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Put the House in Order"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "1. Stop all tasks that may be running in the network hierarchy, and close your browser. Allow a minute or two until all activity stops before closing the Console/Command Line/Terminal running the servers."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "2. Check if you have any personal files, such as your workspace backups and so on in your Superalgos-master folders. Move them to a different location if you do, or take precautions not to delete them in the next step."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "3. You will keep the Data-Storage and My-Workspaces folders intact and delete all the remaining folders within the Superalgos folder."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "You do not need to get rid of the historic market data or the workspaces you have been working with every time you upgrade your system. Do not delete your Data-Storage or your My-Workspaces folder.",
|
||||
"updated": 1611511439947
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Install the New Version",
|
||||
"updated": 1611511465990
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Always follow the instructions in the Official Announcements Channel and the official blog post about the new release.",
|
||||
"updated": 1611511529701
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Always beware of what random people may post in open Telegram groups or forums. Patches and releases will always be made available at the master branch of the Superalgos repository.",
|
||||
"updated": 1611511536779
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Empty Cache and Hard Reload"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Once the system loads in your browser window and before you start working, you need to empty Chrome’s cache and do a hard reload to make sure the browser does use the newly installed files."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "1. Hit F12 to open Chrome’s Developer Tools. You do not need to use the Developers Tools, but opening it allows performing the next task."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "2. Right-click on the refresh icon and select Empty Cache and Hard Reload from the drop-down menu. Once refreshed, you may close Developer Tools with F12."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "F12 to open Developer Tools, then right-click on the refresh icon."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Final Tunning and Testing"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Occasionally, the new version of the system may introduce changes that may require you to update your existing trading systems or some other parts of your workspace. If that is the case, an official announcement should explain how to proceed."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is the time to restore any of the work you may have backed up earlier."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Before going deep back to work, it is always recommeended to test the new version a bit and make sure that your existing work performs as you would expect."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you run into any issues, feel free to drop us a line in our Community."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "4",
|
||||
"type": "Initial Setup - Node is not Recognized as an Internal or External Command",
|
||||
"definition": {
|
||||
"text": "Make sure Node JS is properly installed and that you are running the commando from within the correct folder.",
|
||||
"updated": 1611511701216
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Have You Installed Node JS?",
|
||||
"updated": 1611511729403
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Download and Set Up guide walks you through the process of installing Node JS, an open-source server environment required to run Superalgos. Make sure you have installed the software correctly. Double-check in case the installation hasn’t finished yet."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Are you running the command from the correct folder?"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Make sure you run the command from within the Superalgos-master folder."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Test if Node JS is installed"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Run the command...",
|
||||
"updated": 1611511888280
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "node --version"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "... to test if Node JS is installed. If Node JS is installed, the system should return a version number. If it doesn’t, please install Node JS again."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "5",
|
||||
"type": "Initial Setup - Superalgos Failed to Connect Via Websockets",
|
||||
"definition": {
|
||||
"text": "If you are accessing the backend from another computer in the network, you need to configure the Network Node with the appropriate IP Address.",
|
||||
"updated": 1611513085643
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When you create a trading farm set up by which you intend to access the backend services running on a machine from a remote computer in the network, you must configure the Network Node in the remote computer to use the IP Address of the machine where the backend services are running.",
|
||||
"updated": 1611513097561
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Configuring the Network Node"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Select Configure on the menu to access the configuration."
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n\"host\": \"localhost\",\n\"webPort\": \"34248\",\n\"webSocketsPort\": \"18041\"\n}",
|
||||
"updated": 1611513108585
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "host is the machine or hardware represented by the network node. The default parameter is localhost, but if you intend to access the backend services of this node from a remote computer, then you must change localhost for the IP Address of the machine on which the node is running, for example, to 147.0.0.1."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "webPort is the port used by the Web Server, at this stage 34248."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "webSocketsPort is the port used by the system to communicate over the local area network, by default set at 18041."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "After configuring the network node refresh the page with F5 and the GIU should connect with the backend.",
|
||||
"updated": 1611513135633
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "6",
|
||||
"type": "Perception Issues - My System Gets Slow",
|
||||
"definition": {
|
||||
"text": "Understand how the system uses the available hardware so that you may implement workarounds and best practices.",
|
||||
"updated": 1611513348468
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Dynamically rendering all the visual features in the system puts a significant load on the machine’s graphics processing unit (GPU). Running multiple tasks at the same time is demanding on the central processing unit (CPU). Depending on your machine’s capacity, this may result in the system getting slow and sometimes even unresponsive.",
|
||||
"updated": 1611513372759
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you experience such symptoms, there are several actions you may take to mitigate them."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Learn about the system requirements to better understand what to expect in terms of the performance of your hardware.",
|
||||
"updated": 1611513387104
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Close The Browser’s Developer Tools"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may have opened Developer Tools at some point. Developer Tools may slow animation renderings to a crawl, as slow as one frame per second. In case it is open, make sure you close Developer Tools."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Stop Data Mining Tasks That You May Not Need Running"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Data mining is a CPU-intensive activity. If you are designing a strategy, you probably don’t need to have a live stream of information being processed in realtime. Learn to segment your activities and only start the tasks that you need for the work you are doing."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may also consider applying a Time Frames Filter to process the ones you require only.",
|
||||
"updated": 1611513521057
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Open Either the Design Space or the Charting Space"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Leaving the slider halfway up or down the screen causes both the design space and the charting space to consume resources. Make sure the slider is either fully up or down."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Display Less Data on the Charts"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Make sure you set the time scale to manual mode and adjust it so that fewer candles are displayed on the screen. Try switching the time frame box to the higher time frames so that candle density decreases."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may also want to switch off the layers you may not be using. Remember, every piece of graphical information you see on the screen represents data your system is reading from your disk and processing to display in a graphical form."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Also turn off the layers in the Trading Engine and Trading System layer managers. Those layers interact with the design space to show information in realtime over the trading engine and trading system hierarchies."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Collapse Unused Hierarchies",
|
||||
"updated": 1611513572645
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The physics that govern nodes in the design space help structures of nodes to self-organize. This comes at a cost in terms of GPU processing power."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Make sure all hierarchies you are not using are collapsed."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may also want to close any of the structures of nodes that you may not be using within the hierarchy that you may need to expand."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "If these workarounds do not solve your problem and you often experience slowness or unresponsiveness when using your computer, you may want to consider upgrading your equipment. You shouldn’t risk your capital with an insufficient trading infrastructure.",
|
||||
"updated": 1611513583937
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "See the Effects of Your Actions"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There’s a handy built-in tool to meassure the performance of the animation that you may use to see the effects of turning off layers, lowering the density of information and so on."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Click Ctrl + Shift + Alt + F11 and the following performance readings will show up on your screen:"
|
||||
},
|
||||
{
|
||||
"style": "Png",
|
||||
"text": "PNGs/Superalgos/Docs/charts/frames-per-second-tool.png",
|
||||
"updated": 1611513729958
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The frame rate displayed at the bottom should increase the more of the actions suggested here you implement."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "7",
|
||||
"type": "Perception Issues - There Are No Candles on The Charts",
|
||||
"definition": {
|
||||
"text": "It takes time for your data mining operation to download data from the exchange and process the raw data to build candles. Check the progress of your data mining operation in the network hierarchy.",
|
||||
"updated": 1611513813893
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There are a few reasons why you may be having issues finding candles on the charts. Please, consider the following…",
|
||||
"updated": 1611513833239
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Check the Progress of the Data Mining Operation"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are just getting started with Superalgos, still following the getting started guide, bear in mind it takes time for data to be downloaded from the exchange. Depending on the power of your hardware and the speed of your internet connection, it may take anything from half an hour to several hours to see the first few candles, particularly those of the Binance exchange, as the market spans back to September 2017."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Check the data mining operation on the network hierarchy. You will be able to see candles on the screen only after the OHLCV Sensor Bot and the Candles Volumes indicator in the Masters task manager of the corresponding exchange data tasks node and market have both reached 100% progress."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If you are not sure what the above paragraph refers to, go back to the Welcome tutorial as a refresher.",
|
||||
"updated": 1611513856516
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Switch Candles Layer Off and Back On and Refresh the Page"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Zoom into the chart until you see the layer manager featuring the candles layer. Turn off the candles layer and turn it back on. This forces to candles layer to reload."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Check the Time, Rate and Time Frame Scales"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It may happen that you attempted to manipulate the charts and something went wrong in the process."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Try setting the time frame scale to 24 hours, and both the time scale and rate scale to automatic mode. Setting the time scale to automatic mode brings the whole span of the market in focus on the chart. Setting the rate scale to automatic mode sets the scale to fit the entire range of prices in the market. The goal is to make sure that all scales are set in a way in which—if there is any data to show—it will show."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Check the Integrity of Your Data"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Your PC may have been forcefully shut down or you may have closed the console running the Superalgos backend while running a data-mining operation. Such situations may cause some data to become corrupt."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "1. Check the integrity of the sensor bot data"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Go to the Exchange-Raw-Data folder under Data-Storage > Exchange > Market > Masters and keep opening the subfolders to get to the last day available, and open the Data.json file. If the file opens fine, this may mean that the data you downloaded from the exchange is safe."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the last file in Exchange-Raw-Data does not open properly then delete the whole Data-Storage > Exchange > Market and run the data mining operation. This will have the OHLCV sensor bot download all the data from the exchange again, and all indicators calculated from scratch."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the sensor data seems fine, then proceed with the next step."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "2. Check the integrity of indicator’s data"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are having issues with candles you need to check the data of the Candles Volumes indicator of the Masters Data Mine located deep in Multi-Period-Daily and Multi-Period-Market folders under Data-Storage > Exchange > Market > Masters > Candles-Volumes > Output > Candles."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you find any .tmp files or you can’t open some of the latest Data.json files in a regular text editor, or some files are empty, chances are the files have been corrupted."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Something similar may have happened with other indicators as well, so make sure you check the data storage folders of indicators that may not be working or that you may be experiencing issues with.",
|
||||
"updated": 1611513920939
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If that is the case, then you will delete the folder for each data mine within Data-Storage > Exchange > Market, but will leave Exchange-Raw-Data intact, and get the data mining operation running afterward. This will regenerate all indicators data products, including Candles Volumes."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "3. Remember that there is a proper way to close the system!"
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Check for Errors at the Browser"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Open Chrome’s DevTools with the F12 key (when the browser is in focus) and click the Console tab. Then go back to Superalgos and reproduce the issue. The console may display network errors and warnings of different sorts. Those are not important and you may safely ignore them."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Do pay attention to other kinds of errors, such as files that can not be loaded, or errors in specific system components."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "8",
|
||||
"type": "Perception Issues - Market Data or Indicators Seem to be Outdated",
|
||||
"definition": {
|
||||
"text": "For data to be up to date, the Masters and Sparta task managers need to be running.",
|
||||
"updated": 1611514061066
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are running the system for the first time or you stopped running the system for some time, data will not be up to date. Every time you start the system, it will take some time for data to catch up with the present time.",
|
||||
"updated": 1611514064800
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To update your datasets until the present time you need to Run All Tasks in your Masters and Sparta task managers for the exchanges and markets you wish to work with, and allow enough time for the processes to go through the missing data."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "9",
|
||||
"type": "Perception Issues - Indicator Data Seems Wrong",
|
||||
"definition": {
|
||||
"text": "Make sure you compare with the actual source of the raw data and research the raw data before reporting an issue.",
|
||||
"updated": 1611514878598
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may be comparing one of Superalgos’ indicators with indicators produced by other sources like TradingView, Sierra Chart, or any other provider. You may have found some differences, probably minor, in some of the indicator properties for certain candles, or maybe even throughout the data set.",
|
||||
"updated": 1611514888972
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "One of the most likely reasons for these mostly minor discrepancies is that the raw data exchanges provide is not always consistent. For example, occasionally a one-minute candle may be missing in the data set. Or some candles may not start exactly at the zero-seconds mark."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Our OHLCVs sensor bot fetching data from exchanges works recursively to ensure no data is missed, however, we have no control over the data the exchange delivers at any point."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Furthermore, there is no information as to how third-parties obtain the data they serve, or what measures they may be taking when they detect inconsistencies in the datasets."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is reasonable to conclude that minor differences with third-party providers are to be expected."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you worry about the quality of the data of any of the indicators running on Superalgos, the first thing to do is to compare the data with the source, not a third-party—that is, the actual exchange."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you find inconsistencies in some of our data with the data provided by the exchange, then, the second step to investigate what the issue may be is to compare the raw data, that is, one-minute candles. If you find differences in the one-minute candles provided by Superalgos and the one-minute candles provided by the exchange, then we may have a case in which the sensor bot requires some debugging to find out what the problem may be. In such a case, please open an issue pointing us to the specific candles that you found to be wrong."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If one-minute candles seem to be correct and there is an inconsistency in the data provided by a Superalgos indicator, first, make sure that candles are correct throughout the period required to calculate the indicator. For example, in the case of a 50-periods moving average, you need to check the last 50 candles from the point in which you find a discrepancy in the indicator. If such is the case, please open an issue indicating the process you went through to determine that there is something wrong with the said indicator and point us to the specific point in time where the indicator is wrong."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "10",
|
||||
"type": "Investigating Issues - I Think I Broke Something... How Do I Start Over?",
|
||||
"definition": {
|
||||
"text": "If you think you may have accidentally broken something within the workspace, you may easily go back to the original release settings.",
|
||||
"updated": 1611515018864
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Superalgos is a large system and the learning curve may be a little steep. In the beginning, you may feel a bit lost, and in an attempt to make something work, you may accidentally detach nodes from their hierarchies, remove references, delete nodes, or even entire data structures.",
|
||||
"updated": 1611515027037
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If basic things are not working for you as expected and you think the issue may be that you accidentally broke something, do not panic! You can always go back to the original release settings by restoring a workspace the Getting Started plugin workspace by selecting it from the Workspaces Tab on the left-hand side of the screen."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "11",
|
||||
"type": "Investigating Issues - On-Screen Errors and Warnings",
|
||||
"definition": {
|
||||
"text": "When running a task or working on a strategy, errors in the session or the syntax of conditions and formulas are signaled at the offending node.",
|
||||
"updated": 1611515342007
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The frontend application marks errors by drawing a red ring around the offending node and offers a brief description of the error on-screen. At the same time, a page describing the error details is made available on the documentation tab.",
|
||||
"updated": 1611515405270
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When running a trading session, the session node is usually the one featuring the error notice."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When working on a strategy, errors in the syntax or logic of conditions and formulas are displayed similarly. In such a context, make sure you turn on the Trading System Errors and Trading System Warnings layers of the corresponding session and look around within your workspace. Hover the mouse pointer over the node with a red ring and you should get a description of what is that is causing the unexpected behavior.",
|
||||
"updated": 1611515450259
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "12",
|
||||
"type": "Investigating Issues - Check for Errors at the Browser",
|
||||
"definition": {
|
||||
"text": "When errors occur in the frontend application, you should either get an on-screen error, or an error should be logged in the browser console.",
|
||||
"updated": 1611515570461
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Open Chrome’s DevTools with the F12 key (when the browser is in focus) and click the Console tab. Then go back to Superalgos and reproduce the issue. The console may display network errors and warnings of different sorts. Those are not important and you may safely ignore them.",
|
||||
"updated": 1611515578715
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Do pay attention to other kinds of errors, such as files that can not be loaded, or errors in specific system components."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"topic": "Troubleshooting",
|
||||
"pageNumber": "13",
|
||||
"type": "Investigating Issues - Check the Integrity of Your Data",
|
||||
"definition": {
|
||||
"text": "When data mining processes are not shut down gracefully, your data may get corrupted.",
|
||||
"updated": 1611515660531
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Your PC may have been forcefully shut down or you may have closed the console running the Superalgos backend while running a data-mining operation. Such situations may cause some data to become corrupt.",
|
||||
"updated": 1611515685392
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "1. Check the Integrity of the Sensor Bot Data",
|
||||
"updated": 1611515705862
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Go to the Exchange-Raw-Data folder under Data-Storage > Exchange > Market > Masters and keep opening the subfolders to get to the last day available, and open the Data.json file. If the file opens fine, this may mean that the data you downloaded from the exchange is safe."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the last file in Exchange-Raw-Data does not open properly then delete the whole Data-Storage > Exchange > Market and run the data mining operation. This will have the OHLCV sensor bot download all the data from the exchange again, and all indicators calculated from scratch."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If the sensor data seems fine, then proceed with the next step."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "2. Check the Integrity of Indicator’s Data",
|
||||
"updated": 1611515724143
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you are having issues with candles you need to check the data of the Candles Volumes indicator of the Masters Data Mine located deep in Multi-Period-Daily and Multi-Period-Market folders under Data-Storage > Exchange > Market > Masters > Candles-Volumes > Output > Candles."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you find any .tmp files or you can’t open some of the latest Data.json files in a regular text editor, or some files are empty, chances are the files have been corrupted."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": " Note: Something similar may have happened with other indicators as well, so make sure you check the data storage folders of indicators that may not be working or that you may be experiencing issues with."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If that is the case, then you will delete the folder for each data mine within Data-Storage > Exchange > Market, but will leave Exchange-Raw-Data intact, and get the data mining operation running afterward. This will regenerate all indicators data products, including Candles Volumes."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "3. Remember There is a Proper Way to Close the System!",
|
||||
"updated": 1611515754787
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"topic": "TS LF Trading Bot Errors",
|
||||
"pageNumber": "1",
|
||||
"type": "TS LF Trading Bot Error - Evaluating Condition Error",
|
||||
"definition": {
|
||||
"text": "An error occured while evaluation a User Defined Condition at the Trading System.",
|
||||
"updated": 1611568961215
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "While running at the TS, the Low Frequency Trading Bot encountered an error while trying to evaluate one of your conditions defined at the Trading System. Conditions are arbitrary Javascript Code that user can write as they want and in some cases they do not write valid Javascript for Nod JS. ",
|
||||
"updated": 1611569329977
|
||||
},
|
||||
{
|
||||
"style": "Error",
|
||||
"text": "Evaluating Condition Error",
|
||||
"updated": 1611569347664
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Error Details"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the following section you will find the specific information received when this error occured."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You will only see it if you opened this page as a result of the error actually happening.",
|
||||
"updated": 1611569373599
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Message"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following is the Error Message of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569424352
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorMessage"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Stack"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following is the Error Stack of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569434043
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorStack"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Code"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the Error Code of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569440715
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorCode"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Details"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing are all the Error details of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569446711
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorDetails"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Node Name",
|
||||
"updated": 1611571361685
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the node's name of the Node most related to this error:",
|
||||
"updated": 1611571455498
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "nodeName"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Node Code"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the code stored at the node that produced the error at the LF Trading Bot:",
|
||||
"updated": 1611569545869
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "nodeCode",
|
||||
"updated": 1611569590234
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"topic": "TS LF Trading Bot Errors",
|
||||
"pageNumber": "2",
|
||||
"type": "TS LF Trading Bot Error - Evaluating Formula Error",
|
||||
"definition": {
|
||||
"text": "An error occured while evaluation a User Defined Formula at the Trading System.",
|
||||
"updated": 1611568961215
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "While running at the TS, the Low Frequency Trading Bot encountered an error while trying to evaluate one of your formulas defined at the Trading System. Formulas are arbitrary Javascript Code that user can write as they want and in some cases they do not write valid Javascript for Nod JS. ",
|
||||
"updated": 1611569329977
|
||||
},
|
||||
{
|
||||
"style": "Error",
|
||||
"text": "Evaluating Formula Error",
|
||||
"updated": 1611569347664
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Error Details"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the following section you will find the specific information received when this error occured."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You will only see it if you opened this page as a result of the error actually happening.",
|
||||
"updated": 1611569373599
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Message"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following is the Error Message of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569424352
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorMessage"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Stack"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following is the Error Stack of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569434043
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorStack"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Code"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the Error Code of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569440715
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorCode"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Error Details"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing are all the Error details of the Exception that occured at the LF Trading Bot:",
|
||||
"updated": 1611569446711
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "errorDetails"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Node Name",
|
||||
"updated": 1611571361685
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the node's name of the Node most related to this error:",
|
||||
"updated": 1611571455498
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "nodeName"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Node Code"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the code stored at the node that produced the error at the LF Trading Bot:",
|
||||
"updated": 1611569545869
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "nodeCode",
|
||||
"updated": 1611569590234
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"topic": "TS LF Trading Bot Errors",
|
||||
"pageNumber": "3",
|
||||
"type": "TS LF Trading Bot Error - Formula Value Not A Number",
|
||||
"definition": {
|
||||
"text": "When evaluated by teh LF Trading Bot, a Formula must return a numeric value. In this case it did not, and for that reason this error happened..",
|
||||
"updated": 1611568961215
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "While running at the TS, the Low Frequency Trading Bot encountered an error while trying to evaluate one of your formulas defined at the Trading System. Formulas are supposed to return a numeric value an this one did not.",
|
||||
"updated": 1611579417164
|
||||
},
|
||||
{
|
||||
"style": "Error",
|
||||
"text": "Formula Value Not A Number",
|
||||
"updated": 1611580236800
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Error Details"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the following section you will find the specific information received when this error occured."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You will only see it if you opened this page as a result of the error actually happening.",
|
||||
"updated": 1611569373599
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Node Name",
|
||||
"updated": 1611571361685
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the node's name of the Node most related to this error:",
|
||||
"updated": 1611571455498
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "nodeName"
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Node Code"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the code stored at the node that produced the error at the LF Trading Bot:",
|
||||
"updated": 1611569545869
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "nodeCode",
|
||||
"updated": 1611569590234
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Node Value",
|
||||
"updated": 1611579496738
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The follwing is the value of the node at the moment that this error happened at the LF Trading Bot:",
|
||||
"updated": 1611579550831
|
||||
},
|
||||
{
|
||||
"style": "Placeholder",
|
||||
"text": "nodeValue",
|
||||
"updated": 1611579573236
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||