Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop

This commit is contained in:
DougJCook committed 2021-02-28 18:25:41 -05:00
commit d92cba5d5f
52 files changed
+1243 -178

No files matched your search

+1 -1
View File
@@ -60,7 +60,7 @@
<span class="credits-red">relentlessly improving</span> thanks to the involvement of contributors:</p>
<p>Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Matías Benitez, Ira Miller, Eduardo Remis,
Jeff Braun, rico4dev, 9808us, Barry Low, Nikola Bjelogrlic, Hirajin Koizuko, Francisco J. Santillán, Norman,
Viktoria B., Guillermo V., Daniel J.,
Viktoria B., Guillermo V., Carl J, Daniel J.,
Javier A., Gustavo J., Romina GS, Pedro P., Thais M., Andrey M., Loui M., Natalia M., Bashar A., Carlos V.,
Diego M., CarnivalBen,
Sebastian E., Bogdan P., Marko V., Igor S., Niksa K., Rodrigo M., Nicanor M., Alejandro P., Mateo H., Lan
Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -1 +0,0 @@
{"type":"Workspace","name":"Hello World Strategy","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":"Sparta","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Sparta","project":"Superalgos","tasks":[{"type":"Task","name":"Simple Moving Average (SMA)","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Simple Moving Average (SMA)","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Market","project":"Superalgos","id":"fde9aeb6-2b65-4ba5-a8b3-07f2b189a9ec","savedPayload":{"position":{"x":23310.348760844034,"y":29310.042580543206},"targetPosition":{"x":23600.126508730755,"y":29387.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"456269f6-9849-4d5f-9c8c-7cd7d1eef297"}}},{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Daily","project":"Superalgos","id":"17d24742-6026-4fe5-b400-69df5a057aa1","savedPayload":{"position":{"x":23387.99447437479,"y":29175.556259718},"targetPosition":{"x":23600.126508730755,"y":29387.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"333ae5d7-7ec1-4f08-b206-91e3b4f2c99f"}}}],"id":"a773898a-8b8f-4654-b907-a4f0b988d59e","savedPayload":{"position":{"x":23600.126508730755,"y":29387.688294073963},"targetPosition":{"x":23859.934129866087,"y":29537.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a98d1697-98c9-44dc-a4b2-b777917ca292","savedPayload":{"position":{"x":23859.934129866087,"y":29537.688294073963},"targetPosition":{"x":24119.74175100142,"y":29687.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"802f1ee2-1dba-4999-8b29-068b68aee9ef","savedPayload":{"position":{"x":24119.74175100142,"y":29687.688294073963},"targetPosition":{"x":24379.549372136753,"y":29837.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d24c01eb-3d21-430e-a965-cbf645bb7853","savedPayload":{"position":{"x":24379.549372136753,"y":29837.688294073963},"targetPosition":{"x":24639.356993272086,"y":29987.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Sparta","id":"9cfffc48-486a-48cb-b641-98c82e314d3a"}}},{"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":"9de8a5c8-7c2e-4625-afa4-176c43777eb3","savedPayload":{"position":{"x":24002.960890204195,"y":28751.292191006072},"targetPosition":{"x":24215.09292456016,"y":28963.424225362036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"d96308e3-a9ae-4a87-ad7c-cf7948fe0939","savedPayload":{"position":{"x":24215.09292456016,"y":28963.424225362036},"targetPosition":{"x":24427.224958916122,"y":29175.556259718},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa7991b3-e23e-4c27Line truncated
@@ -0,0 +1 @@
{"type":"Workspace","name":"Hello World Tutorial","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":"Sparta","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Sparta","project":"Superalgos","tasks":[{"type":"Task","name":"Simple Moving Average (SMA)","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Simple Moving Average (SMA)","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Market","project":"Superalgos","id":"fde9aeb6-2b65-4ba5-a8b3-07f2b189a9ec","savedPayload":{"position":{"x":23969.74175100142,"y":29687.688294073963},"targetPosition":{"x":24119.74175100142,"y":29687.688294073963},"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":"456269f6-9849-4d5f-9c8c-7cd7d1eef297"}}},{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Daily","project":"Superalgos","id":"17d24742-6026-4fe5-b400-69df5a057aa1","savedPayload":{"position":{"x":24044.74175100142,"y":29557.784483506297},"targetPosition":{"x":24119.74175100142,"y":29687.688294073963},"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":"333ae5d7-7ec1-4f08-b206-91e3b4f2c99f"}}}],"id":"a773898a-8b8f-4654-b907-a4f0b988d59e","savedPayload":{"position":{"x":24119.74175100142,"y":29687.688294073963},"targetPosition":{"x":24249.645561569087,"y":29762.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a98d1697-98c9-44dc-a4b2-b777917ca292","savedPayload":{"position":{"x":24249.645561569087,"y":29762.688294073963},"targetPosition":{"x":24379.549372136753,"y":29837.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"802f1ee2-1dba-4999-8b29-068b68aee9ef","savedPayload":{"position":{"x":24379.549372136753,"y":29837.688294073963},"targetPosition":{"x":24509.45318270442,"y":29912.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d24c01eb-3d21-430e-a965-cbf645bb7853","savedPayload":{"position":{"x":24509.45318270442,"y":29912.688294073963},"targetPosition":{"x":24639.356993272086,"y":29987.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Sparta","id":"9cfffc48-486a-48cb-b641-98c82e314d3a"}}},{"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":"9de8a5c8-7c2e-4625-afa4-176c43777eb3","savedPayload":{"position":{"x":24414.356993272086,"y":29297.976862370964},"targetPosition":{"x":24489.356993272086,"y":29427.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"d96308e3-a9ae-4a87-ad7c-cf7948fe0939","savedPayload":{"position":{"x":24489.356993272086,"y":29427.88067293863},"targetPosition":{"x":24564.356993272086,"y":29557.784483506297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa7991b3-e23e-4cLine truncated
@@ -116,10 +116,6 @@
"style": "Json",
"text": " \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Superalgos\",\n \"category\": \"Topic\",\n \"type\": \"Trading System Hierarchy\"\n }\n }",
"updated": 1613842185832
},
{
"style": "Text",
"text": "asdf"
}
]
}
@@ -0,0 +1,49 @@
{
"topic": "Debugging Your Indicator",
"pageNumber": "1",
"type": "Debugging - First Step",
"definition": {
"text": "Using an Integrated development environment (IDE) will help you catch bugs.",
"updated": 1614257102916,
"translations": [
{
"language": "CN",
"text": "Using an Integrated development environment (IDE) will help you catch bugs. ",
"updated": 1614338765880
}
]
},
"paragraphs": [
{
"style": "Note",
"text": "For the following steps, we are going to show the concept of debugging using Visual Studio Code. You may use any other Integrated development environment (IDE) that you feel comfortable with.",
"updated": 1614264361700
},
{
"style": "Subtitle",
"text": "<hr>",
"updated": 1614264382973
},
{
"style": "Subtitle",
"text": "\"Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time.\" -Thomas Edison"
},
{
"style": "Subtitle",
"text": "<hr>"
},
{
"style": "Text",
"text": "So, you've come up with your new indicator idea, jotted down the outlines, translated it into code - Perfect!...then it stops with an error.",
"updated": 1614257276497
},
{
"style": "Text",
"text": "Grab some coffee and mosquito repellent - We're going bug hunting."
},
{
"style": "Text",
"text": "<a href=\"https://visualstudio.microsoft.com/free-developer-offers/\" target=\"_blank\">Get Visual Studio Code</a>"
}
]
}
@@ -0,0 +1,83 @@
{
"topic": "Debugging Your Indicator",
"pageNumber": "2",
"type": "Debugging - Setting up your IDE",
"definition": {
"text": "Toggling Breakpoints is telling the program where to slow down - Where we'd like to take control",
"updated": 1614511933639,
"translations": [
{
"language": "CN",
"text": "Toggling Breakpoints is telling the the program where to slow down - Where we'd like to take control.",
"updated": 1614338778954,
"style": "Definition"
}
]
},
"paragraphs": [
{
"style": "Text",
"text": "Start up your IDE and Add the \"TaskServer\" folder (../Superalgos/TaskServer) to your workspace.",
"updated": 1614331592978
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/1_open-folder.png",
"updated": 1614329413344
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/2_taskserver-folder.png",
"updated": 1614331239911
},
{
"style": "Text",
"text": "Also Add the \"Projects\" (../Superalgos/Projects) folder to your workspace.",
"updated": 1614331619021
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/3_add-folder.png",
"updated": 1614331194799
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/4_projects-folder.png",
"updated": 1614331302498
},
{
"style": "Text",
"text": "Locate and open the file \"SingleMarketFunctions.js\" (..Superalgos\\Projects\\Superalgos\\TS\\Function-Libraries\\SingleMarketFunctions.js)."
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/5_locate-singlemarket-in-tree.png"
},
{
"style": "Text",
"text": "Now we will have to find the line in the code where we'd like the process to stop, and show us what's really happening.",
"updated": 1614331648050
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/6_find-line-for-breakpoint.png"
},
{
"style": "Text",
"text": "This point would be the line that says:"
},
{
"style": "Javascript",
"text": "\"eval(dataBuildingProcedure.loop.procedureJavascriptCode.code)\""
},
{
"style": "Text",
"text": "Insert a breakpoint (F9) at this line."
},
{
"style": "Note",
"text": "Using \"CTRL+F\" allows us to find what we search for in the code.",
"updated": 1614265550399
}
]
}
@@ -0,0 +1,91 @@
{
"topic": "Debugging Your Indicator",
"pageNumber": "3",
"type": "Debugging - Start Your Processes",
"definition": {
"text": "Start the Task in Debug mode while running a debug session in your IDE.",
"updated": 1614332155989,
"translations": [
{
"language": "CN",
"text": "Start the Task in Debug mode while running a debug session in your IDE. ",
"updated": 1614338791705,
"style": "Definition"
}
]
},
"paragraphs": [
{
"style": "Text",
"text": "Start your Superalgos UI by going to the terminal and enter \"node run\".",
"updated": 1614332264940
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/8_node-run.png"
},
{
"style": "Text",
"text": "Start a Debug Session in your IDE by clicking \"Run -> Start Debugging\" (F5)",
"updated": 1614332454563
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/9_start-debugging.png"
},
{
"style": "Text",
"text": "Go to your Network node and find the Data Task for your indicator.",
"updated": 1614332492978
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/10_network.png"
},
{
"style": "Text",
"text": "Expand the Data Tasks and hover over the Task node for your indicator and click \"Debug\" (the Task will start up, but in Debug mode).",
"updated": 1614332581381
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/11_expand-data-tasks.png"
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/12_debug-your-indicator-task.png",
"updated": 1614332699707
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/13_check-your-indicator-starts.png"
},
{
"style": "Text",
"text": "Start the needed tasks connected to your indicator (i.e.: Exchange Raw Data and Candle Volumes) by hovering over the nodes and click \"Run\".",
"updated": 1614512004319
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/15_run-ohlcvs.png"
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/16_run-dependencies.png"
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/14_check-debug-terminal.png"
},
{
"style": "Note",
"text": "Check your Superalgos terminal to see if everything starts up as planned.",
"updated": 1614512021346
},
{
"style": "Note",
"text": "Deleting existing data from your indicator in the..Superalgos/Data-Storage/ folder might speed up the data mining process.",
"updated": 1614512028147
}
]
}
@@ -0,0 +1,71 @@
{
"topic": "Debugging Your Indicator",
"pageNumber": "4",
"type": "Debugging - Let The Hunt Begin!",
"definition": {
"text": "Use F11 to zoom in to the code once it stops at the breaking point, and use F5 to take it step by step forward.",
"updated": 1614333358461,
"translations": [
{
"language": "CN",
"text": "Use F11 to zoom in to the code once it stops at the breaking point, and use F5 to take it step by step forward. ",
"updated": 1614338803641,
"style": "Definition"
}
]
},
"paragraphs": [
{
"style": "Title",
"text": "Ssssh, be quiet... wait for it...",
"updated": 1614512153973
},
{
"style": "Text",
"text": "As soon as the data for your indicator is being processed, your IDE will pause the process at the break point we set earlier...",
"updated": 1614512188902
},
{
"style": "Javascript",
"text": "(eval(dataBuildingProcedure.loop.procedureJavascriptCode.code))"
},
{
"style": "Text",
"text": "... allowing you to zoom in to the details what's really going on."
},
{
"style": "Text",
"text": "Keep an eye out for when your Breaking point changes from a dot to an arrow.",
"updated": 1614334261604
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/7_breaking-point-indication.png"
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/17_stopped-at-breaking-point.png"
},
{
"style": "Text",
"text": "Use F11 to zoom into the code and F5 to step forward."
},
{
"style": "Text",
"text": "Keep stepping forward to follow the flow of data."
},
{
"style": "Text",
"text": "Monitor what's going on in the code, and hover over your variables to check what values they get."
},
{
"style": "Png",
"text": "PNGs/Superalgos/Docs/debugging-your-indicator/18_zoomed-in-getting-values.png"
},
{
"style": "Note",
"text": "Tip: In cases where the values turn to \"NaN\" or stays \"undefined\" without a logical reason - There's a point to raise doubt.",
"updated": 1614512232138
}
]
}
@@ -0,0 +1,29 @@
{
"topic": "Debugging Your Indicator",
"pageNumber": "5",
"type": "Debugging - Found something!",
"definition": {
"text": "Rinse and repeat.",
"updated": 1614512264174,
"translations": [
{
"language": "CN",
"text": "Rinse and repeat.",
"updated": 1614338812128,
"style": "Definition"
}
]
},
"paragraphs": [
{
"style": "Text",
"text": "When you've spotted what may be the cause of the error, stop all processes in the UI, modify the code for your indicator and re-debug your code.",
"updated": 1614265041452
},
{
"style": "Note",
"text": "Use \"if/else\" statements or assign values to variables that get questionable values and re-test your indicator, ruling out possible causes - one by one.",
"updated": 1614512286715
}
]
}
@@ -1,24 +1,61 @@
{
"topic": "Trading Farms",
"pageNumber": "1",
"type": "Trading Farms Fundamental Concepts",
"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
"text": "How to set up a flexible and scalable crypto-trading farm running Superalgos distributed on multiple machines. ",
"updated": 1614352880564
},
"paragraphs": [
{
"style": "Text",
"text": "Superalgos is designed for coordinated, flexible, and scalable trading operations.",
"updated": 1611343220386
"style": "Title",
"text": "Introduction",
"updated": 1614353180566
},
{
"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."
"text": "Superalgos is designed for coordinated, flexible, and scalable trading operations."
},
{
"style": "Title",
"text": "Network",
"updated": 1614353250354
},
{
"style": "Text",
"text": "A Network, represented by the Network Hierarchy it is just a definition that allows the system to know where Tasks need to be run, and where data is hosted. At any workspace you mighd define one or even more than one Netwrok Hiererchy. For simplicity we will continue the explanation assuming only one Network is defined.",
"updated": 1614353405812
},
{
"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, because they are just an abstractions, not something physical.",
"updated": 1614353448225
},
{
"style": "Title",
"text": "Purpose"
},
{
"style": "Text",
"text": "The whole purpose of the Network definition is to let the system know where each task must run and where the data is localted. ",
"updated": 1614353600414
},
{
"style": "Success",
"text": "A Superalgos Client can become a node in a Network definition if you configure a Network Node with the IP and ports of a certain Superalgos Client."
},
{
"style": "Title",
"text": "Organization",
"updated": 1614353624048
},
{
"style": "Text",
"text": "There are many different way you might want to organize the Tasks across several Clients. It is really up to you. The system don't care or have any preferred way for you to do so. It just need to know where each Task runs, and where the Data is located. That's it."
},
{
"style": "Callout",
"text": "Each node on a network may specialize in a single type of process or handle multiple processes of different types."
"text": "Each node on a Network may specialize in a single type of process or handle multiple processes of different types."
},
{
"style": "Text",
@@ -36,18 +73,51 @@
"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": "Title",
"text": "Auto Tracking of Dependencies",
"updated": 1614353913256
},
{
"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."
"text": "When you define a Task, inside of it you are referencing a Process Definition, which has in turn definition regarding to which other processes it depends on (for example to start after some other process finished) and it also has Data Dependencies, which means that in order to run, it needs to read the data output from other processes."
},
{
"style": "Note",
"text": "All these definitions are built-in inside Data Mines, Trading Mines and Learning mines at a conceptual level. This means that a Data Mine does not really know where the data a process depends on actually is, or where a process that it depends on is actually running. That problem is solved at runtime once a Task is executed."
},
{
"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 processes 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.",
"updated": 1614354242360
},
{
"style": "Text",
"text": "This is achieved by sending to a newly executed Task a snapshot of the Network Map at the instant when the Task is being run. From the Mine definition the Task can know which processes and data it depends on, and by looking into the snapshot of the Network, it can guess which Client is hosting the Data or the Tasks that the process depends on, allowing it to communicate with those Client s and fetch the data from them or wait for the right events signaling that the dependen process has finished."
},
{
"style": "Title",
"text": "Peer to Peer",
"updated": 1614354292649
},
{
"style": "Text",
"text": "There is no preferred node where to manage the rest of the Client s.",
"updated": 1614354328656
},
{
"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."
"text": "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 UI.",
"updated": 1614354336816
},
{
"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": "Title",
"text": "Security"
},
{
"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.",
@@ -1,129 +0,0 @@
{
"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,207 @@
{
"topic": "Trading Farms",
"pageNumber": "2",
"type": "Trading Farms - 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": 1614352888183
},
"paragraphs": [
{
"style": "Text",
"text": "There are essentially two approaches from here. ",
"updated": 1614354810094
},
{
"style": "List",
"text": "Install All in One Node: The first one and probably the easiest one is to first install the markets at one Network Node and later move the branches you want to move to other Network Nodes.",
"updated": 1614354841546
},
{
"style": "List",
"text": "Install All in All Nodes: In this approach, you first create all Network Nodes and the install the markets you wish to work with, the install procedure will install each market at all nodes, so then you will need to delete all the duplicate stuff by hand."
},
{
"style": "Title",
"text": "Install Market"
},
{
"style": "Text",
"text": "The procedure to setup a Network Node is by executing the Install Market menu option of a certain Market node. This is a complex procedure that will connect all the dots for you from A to Z. You can do by hand what this procedure does, but it will take you a lot of time and you will need to know all the details of how to connect everything together.",
"updated": 1614355139550
},
{
"style": "Important",
"text": "One of the most important things to undestand of this procedure is that it takes into account the things you have at the workspace at the moment you run this command. "
},
{
"style": "Text",
"text": "For exmaple: if you have 2 trading systems, it will automatically create backtesting and live trading tasks for both of them.",
"updated": 1614355238724
},
{
"style": "Text",
"text": "The procedure will also be applied to each Network Node found at the workspace assuming that you will later delete the Tasks or other branches you don't need. But in order to do so, you need to know what is being added as a result of this execution."
},
{
"style": "Subtitle",
"text": "At the Network Hierarchy"
},
{
"style": "Text",
"text": "Here this procedure will essentially add 2 thigs:"
},
{
"style": "List",
"text": "Tasks: This includes Backtesting, Live Trading, Learning or any other supported type of Task."
},
{
"style": "List",
"text": "Data Products: You can think of this as references to the physical data. This definitions are what tells the system in general where the data is physically located.",
"updated": 1614355507769
},
{
"style": "Subtitle",
"text": "At the Charting Space Hierarchy"
},
{
"style": "Text",
"text": "Here this procedure will add Time Machine s with Timeline Chart s inside of them. Deeper inside this brach, you will find Layer s node, which references the Data Products at the Network Hierarchy. That reference is crucial for the system to know when you turn on a Layer at the charts, where the data needs to be fetched from (which Client).",
"updated": 1614357169345
},
{
"style": "Success",
"text": "If you understand all the previous relationships, you can go ahead and install a market in all Network Node s at the same time, and then try to delete all the duplicated definitions. If you don't have all that clear, it is recommended that you install all your markets at one single Network Node and then move the braches you want from one Network Node to the other."
},
{
"style": "Title",
"text": "Moving Tasks"
},
{
"style": "Text",
"text": "Assuming you will go with the startegy of installing one Network Node first, this is what you need to know on how to move Task s to other Network Nodes.",
"updated": 1614357184981
},
{
"style": "Text",
"text": "There are different types of Tasks and each one needs to be moved together with their corresponding Data Products definitions in order for the system to being able to track dependencies. The Data Products dedinitions are the one under the Data Storage node of a Network Node. They are subdivided in different branches depending of the Type of Data, Project, Exchange, Market and many other stuff, but in the end you will find Data Product nodes which reference Product Definitions inside Mines. When you move Tasks from one Network Node to other you also need to move the related brach at Data Storage to the same Network Node.",
"updated": 1614356433556
},
{
"style": "Text",
"text": "Always remember that the system just needs you to define where you want the Tasks to run and the Data to be Hosted, but there is an implcit relationship between Tasks and Data because a Task produces certain Data, and those definition needs to be consistent and be found at the same Network Node."
},
{
"style": "Warning",
"text": "If you only move a Task and do not move the related Data Products definitions most likely things will stop working right there."
},
{
"style": "Success",
"text": "The refinitions at the Charting System hirierchy do not need to be changed at all. They will continue pointing to the Data Products they were pointint to no matter where you moved those Data Products definitions. If you changed them from one Network Node to another, the Pltotter will simply fetch the data from the Network Node where you left thos Data Product s definitions."
},
{
"style": "Note",
"text": "Whey we say moving what we are saying is detaching a Node brach and re attaching that same brach somewhere else. Note that if you for example make a backup of a branch, restore that somehwhere else without deleting the original branch first, you will inadvertently be creating new ids for each Node at this branch and messing up with incomming references, which will produce things not to work anymoere.",
"updated": 1614357412126
},
{
"style": "Text",
"text": ""
},
{
"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 Client without firing up the UI."
},
{
"style": "Text",
"text": "2. Run the UI 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 Client 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."
}
]
}
@@ -1,25 +0,0 @@
{
"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
}
]
}
@@ -1,15 +1,15 @@
{
"topic": "Trading Farms",
"pageNumber": "4",
"type": "Operating a Trading Farm",
"pageNumber": "3",
"type": "Trading Farms - Operating a Trading Farm",
"definition": {
"text": "Operate tasks in remote nodes pretty much as if they were running on the home node.",
"updated": 1611344573684
"text": "Operate tasks in remote nodes pretty much as if they were running on the home node. ",
"updated": 1614352903667
},
"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."
"text": "The operation of a trading farm is done from within the home node. There is no need to use the UI application with any other node in the network, although you may if you wish."
},
{
"style": "Text",
@@ -21,7 +21,7 @@
},
{
"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."
"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 UI 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",
@@ -0,0 +1,42 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 1,
"type": "Tutorial Step - Welcome",
"definition": {
"text": "Let’s build the mother of all trading strategies: The Moving Average Cross!",
"icon": {
"name": "tutorial",
"project": "Superalgos"
},
"updated": 1614275495850
},
"paragraphs": [
{
"style": "Text",
"text": "For this tutorial I assume that",
"updated": 1614240501976
},
{
"style": "List",
"text": "You have done the Welcome Tutorial in the Getting Started Workspace"
},
{
"style": "List",
"text": "You are comfortable moving around the Workspace and the Charts"
},
{
"style": "List",
"text": "You have a basic understanding about what is a Trading Bot and a strategy",
"updated": 1614275543824
},
{
"style": "Note",
"text": "We will build a bot to backtest a strategy based on Simple Moving Average Cross between SMA50 and SMA200 on 4H TF. A classic!",
"updated": 1614242374513
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,29 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 2,
"type": "Tutorial Step - Look around",
"definition": {
"text": "Workspaces can be changed!",
"updated": 1614241100778,
"icon": {
"name": "layer",
"project": "Superalgos"
}
},
"paragraphs": [
{
"style": "Text",
"text": "I arranged the workspace in a slightly different way compared to Getting Started. It's a good practice to customize the workspace to keep it tidy and clean. Remember that every hierarchy, node or offspring can impact on your machine resources.",
"updated": 1614241304126
},
{
"style": "Success",
"text": "Have a look around, right click on empty space and explore the Workspace I arranged for you!",
"updated": 1614334045360
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,32 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 3,
"type": "Tutorial Step - Custom Data Mine",
"definition": {
"text": "Not only Workspaces can be modified",
"icon": {
"name": "data-mine",
"project": "Superalgos"
},
"updated": 1614241455319
},
"paragraphs": [
{
"style": "Text",
"text": "SA is very modular and can be arranged the way we prefer for our needs.",
"updated": 1614241605095
},
{
"style": "Text",
"text": "I prepared for you a very basic Workspace with a new Data Mine and arranged the nodes deleting all I don't need for this tutorial."
},
{
"style": "Success",
"text": "In SA data mines can be added and removed but the data saved on your hard disk will not be deleted if you remove an indicator!"
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,40 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 4,
"type": "Tutorial Step - The Strategy",
"definition": {
"text": "Let's build the mother of all strategies!",
"icon": {
"name": "strategy",
"project": "Superalgos"
},
"updated": 1614241902261
},
"paragraphs": [
{
"style": "Text",
"text": "To backtest a strategy, first we need to write it or to have it clearly in our mind. So these are the cornerstones on which our test is based:",
"updated": 1614242397042
},
{
"style": "List",
"text": "Strategy uses SMA50 and SMA200"
},
{
"style": "List",
"text": "Strategy is based on 4H TF"
},
{
"style": "List",
"text": "Bot will buy the asset when SMA50 cross up SMA200"
},
{
"style": "List",
"text": "Stop Loss is set at 20% from entry"
},
{
"style": "List",
"text": "Take Profit is set at 100% or on SMA50 cross down SMA200"
}
]
}
@@ -0,0 +1,38 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 5,
"type": "Tutorial Step - Trading System",
"definition": {
"text": "Trading System is already set up. Let's have a look!",
"icon": {
"name": "trading-system-reference",
"project": "Superalgos"
},
"updated": 1614242955916
},
"paragraphs": [
{
"style": "Text",
"text": "The strategy is already deployed. So let's have a look around to understand it!",
"updated": 1614243171735
},
{
"style": "Text",
"text": "As you cand see, a Trading System has 2 main offsprings:"
},
{
"style": "List",
"text": "Dynamic Indicators: This lets you build On-The-Fly indicators",
"updated": 1614243245995
},
{
"style": "List",
"text": "Trading Strategy: Is where we define parameters, conditions and formulas for our strategy",
"updated": 1614243343779
},
{
"style": "Success",
"text": "This tutorial doesn't cover definitions or concepts used in SA. This tutorial is only about how to deploy a strategy!"
}
]
}
@@ -0,0 +1,29 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 6,
"type": "Tutorial Step - Trigger Stage",
"definition": {
"text": "Trigger Stage is a our Talent Scout",
"icon": {
"name": "trigger-stage",
"project": "Superalgos"
},
"updated": 1614243745480
},
"paragraphs": [
{
"style": "Text",
"text": "Our strategy is based on SMA cross and it is in this node that we can instruct the bot to search for conditions that have to be met in order to take a trade.",
"updated": 1614243969544
},
{
"style": "Important",
"text": "This stage is all about checking the market and deciding if some conditions are worth a trade or not!"
},
{
"style": "Text",
"text": "Let's have a look at its 3 offsprings and I show you some little tricks to implement the strategy in the fastest possible way!",
"updated": 1614244059064
}
]
}
@@ -0,0 +1,56 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 7,
"type": "Tutorial Step - Trigger On",
"definition": {
"text": "Reserve some funds!",
"icon": {
"name": "trigger-on",
"project": "Superalgos"
},
"updated": 1614244953169
},
"paragraphs": [
{
"style": "Text",
"text": "Trigger On event is about reserving (locking) your funds and making them available to the bot.",
"updated": 1614244945700
},
{
"style": "Text",
"text": ""
},
{
"style": "Text",
"text": "What I need to do is:"
},
{
"style": "List",
"text": "Define the TF"
},
{
"style": "List",
"text": "Define the SMA50/200 cross"
},
{
"style": "Text",
"text": "To define a cross I use 2 conditions:"
},
{
"style": "Javascript",
"text": "chart.at04hs.popularSMA.sma50 > chart.at04hs.popularSMA.sma200"
},
{
"style": "Javascript",
"text": "chart.at04hs.popularSMA.previous.sma50 < chart.at04hs.popularSMA.previous.sma200"
},
{
"style": "Text",
"text": ""
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,25 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 8,
"type": "Tutorial Step - Trigger Off",
"definition": {
"text": "If you do not need a condition just set it to False or True!",
"icon": {
"name": "trigger-off",
"project": "Superalgos"
},
"updated": 1614333368044
},
"paragraphs": [
{
"style": "Text",
"text": "For my backtest I don't need a Trigger Off condition so I just write false in Javascript code",
"updated": 1614334212315
},
{
"style": "Success",
"text": "Remember that Conditions can be only True or False. When I write some Javascript code inside these type of nodes, they must evaluate True or False because essentially what I'm writing is a test.",
"updated": 1614245807894
}
]
}
@@ -0,0 +1,28 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 9,
"type": "Tutorial Step - Take Position",
"definition": {
"text": "Time to take Position!",
"icon": {
"name": "take-position",
"project": "Superalgos"
},
"updated": 1614246263376
},
"paragraphs": [
{
"style": "Text",
"text": "In this node I use the same trick used for the Trigger Off Event but in this case forcing it to True. I already defined in the Trigger On Event what are my conditions. So in this node I can just copy the two conditions or set it to True.",
"updated": 1614260289104
},
{
"style": "Success",
"text": "Of course if I need more conditions I can add or modify them as per my needs!"
},
{
"style": "Note",
"text": "Cool. My initial definitions are set. It's time to move to the Open Stage!"
}
]
}
@@ -0,0 +1,25 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 10,
"type": "Tutorial Step - Open Stage",
"definition": {
"text": "The Open Stage is where bot take position!",
"icon": {
"name": "open-stage",
"project": "Superalgos"
},
"updated": 1614260398081
},
"paragraphs": [
{
"style": "Text",
"text": "The strategy I want to backtest is based on 4h TF and the strategy is Long. This means that bot will Buy the asset to later Sell it (at a better price we hope!). To keep things simple, all I have to do is to indicate the TF in the Target Rate node using my full balance in the Target Size in Quoted Asset.",
"updated": 1614333476016
},
{
"style": "Success",
"text": "If our market is BTC/USDT then the Quoted Asset is USDT and Base Assest is BTC",
"updated": 1614260724325
}
]
}
@@ -0,0 +1,39 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 11,
"type": "Tutorial Step - Manage Stage",
"definition": {
"text": "The Manage Stage is where the bot check if it has to Take Profit or a Stop Loss",
"icon": {
"name": "manage-stage",
"project": "Superalgos"
},
"updated": 1614261028631
},
"paragraphs": [
{
"style": "Text",
"text": "In this stage bot check if the price has hit Take Profit (TP) or Stop Loss (SL). Initial conditions for my strategy was to set a SL at 20% from entry and a TP at 100% or when MA50 cross under MA200.",
"updated": 1614333590591
},
{
"style": "Text",
"text": "Stop Loss formula:",
"updated": 1614333601220
},
{
"style": "Javascript",
"text": "tradingEngine.tradingCurrent.position.entryTargetRate.value * 0.8",
"updated": 1614261430746
},
{
"style": "Text",
"text": "Take Profit formula is a little bit more elaborate:",
"updated": 1614333616750
},
{
"style": "Javascript",
"text": "if (chart.at04hs.popularSMA.sma50 > chart.at04hs.popularSMA.sma200) {tradingEngine.tradingCurrent.position.entryTargetRate.value * 2} else {chart.at04hs.candle.close}"
}
]
}
@@ -0,0 +1,32 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 12,
"type": "Tutorial Step - Close Stage",
"definition": {
"text": "The Close Stage is in charge of closing the trade",
"icon": {
"name": "close-stage",
"project": "Superalgos"
},
"updated": 1614261551174
},
"paragraphs": [
{
"style": "Text",
"text": "In the previous stage (the Manage Stage) bot is checking if the current price has hit the SL or the TP. Once one of these two events has been hit, then the Close Stage take charge of closing the trade. The way it works is very similar to the Open Stage. Bot need to know at what candle should look",
"updated": 1614261954345
},
{
"style": "Javascript",
"text": "chart.at04hs.candle.close"
},
{
"style": "Text",
"text": "And obviously as opposed to the Open Stage, here we Sell the asset so we need a Market Sell Order and what bot sells is the Quoted asset"
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,30 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 13,
"type": "Tutorial Step - That's it",
"definition": {
"text": "Strategy is defined!",
"icon": {
"name": "announcement",
"project": "Superalgos"
},
"updated": 1614262144926
},
"paragraphs": [
{
"style": "Text",
"text": "As you have seen, implementing a simple strategy is a matter of few lines of code!",
"updated": 1614262171702
},
{
"style": "Success",
"text": "Keep this in mind to deal correctly with Base and Quoted Asset. Base is on top, Quoted is at bottom! So in our case BTC/USD we have BTC is the Base Asset while USDT is the Quoted Asset",
"updated": 1614262277141
},
{
"style": "Warning",
"text": "It doesn't change if you go Short. If strategy is Short then in the Open Stage bot will sell the Base Asset and later buy it back using Quoted Asset!",
"updated": 1614262348272
}
]
}
@@ -0,0 +1,30 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 14,
"type": "Tutorial Step - Update Data Mines",
"definition": {
"text": "Chances are you already have some data mined!",
"icon": {
"name": "data-tasks",
"project": "Superalgos"
},
"updated": 1614267263084
},
"paragraphs": [
{
"style": "Text",
"text": "If you have done the intro Tutorial then probably you already have mined some data. But I added a new indicator that is not present in the initial configuration. So please Run the data Mines and wait until they are 100% ready.",
"updated": 1614267281564
},
{
"style": "Important",
"text": "Make sure that under Sparta Data Mine Tasks the newly added indicator Simple Moving Average is 100% updated.",
"updated": 1614267364900
},
{
"style": "Success",
"text": "Once all indicators are 100% you can stop the data mines and save resources for the backtest",
"updated": 1614267400047
}
]
}
@@ -0,0 +1,38 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 15,
"type": "Tutorial Step - Backtest",
"definition": {
"text": "Make sure Parameters are in place!",
"updated": 1614267651634,
"icon": {
"name": "backtesting-session",
"project": "Superalgos"
}
},
"paragraphs": [
{
"style": "Text",
"text": "Before runnin the backtest, make sure that the Trading Parameters node has consistent data. I already prepared everything for you, but take some time and notice that:",
"updated": 1614267828443
},
{
"style": "List",
"text": "Session Base Asset is set to 0"
},
{
"style": "List",
"text": "Session Quoted Asset is set to 1000 (That is 1000$USDT in this case)"
},
{
"style": "List",
"text": "Slippage is set to 0 because I'm backtesting small amounts and I can assume orders are filled with no slippage",
"updated": 1614267847410
},
{
"style": "Important",
"text": "Are you ready? Run the backtest!",
"updated": 1614267899321
}
]
}
@@ -0,0 +1,28 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 16,
"type": "Tutorial Step - Final Step",
"definition": {
"text": "Time to look at the chart!",
"updated": 1614268141398,
"icon": {
"name": "stop",
"project": "Superalgos"
}
},
"paragraphs": [
{
"style": "Text",
"text": "When backtest finishes I stop the whole hierarchy form the Testing Trading Tasks node. Expand the node and click on Stop All.",
"updated": 1614268732305
},
{
"style": "Success",
"text": "Remember that it's good practice to keep hierarchies collapsed and to stop unuseful tasks to save resources!"
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,49 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 17,
"type": "Tutorial Step - The Chart",
"definition": {
"text": "Enjoy you backtest!",
"icon": {
"name": "charting-space",
"project": "Superalgos"
},
"updated": 1614269880685
},
"paragraphs": [
{
"style": "Text",
"text": "Now it's time to move to the Charting Space and (if not already running) fire up:",
"updated": 1614269938039
},
{
"style": "List",
"text": "Episodes",
"updated": 1614269968163
},
{
"style": "List",
"text": "Strategies",
"updated": 1614269964528
},
{
"style": "List",
"text": "Market",
"updated": 1614269960052
},
{
"style": "List",
"text": "Buy and Sell Market Orders",
"updated": 1614269946923
},
{
"style": "List",
"text": "Position Quoted Asset"
},
{
"style": "Success",
"text": "Take your time and explore the visual results. Apply the SMA indicator to the chart and make sure bot has taken position when expected",
"updated": 1614333706446
}
]
}
@@ -0,0 +1,33 @@
{
"tutorial": "Hello World Tutorial",
"pageNumber": 18,
"type": "Tutorial Step - The End",
"definition": {
"text": "This is the final step in this tutorial but a first big step for you!",
"updated": 1614270786500,
"icon": {
"name": "hits",
"project": "Superalgos"
}
},
"paragraphs": [
{
"style": "Text",
"text": "Now that you have seen how fast and easy is to deploy simple strategies in SA, I leave you with some hints you can explore.",
"updated": 1614270919320
},
{
"style": "Text",
"text": "Maybe you can add a new indicator and use its properties like an additional filter for the Trigger Stage"
},
{
"style": "Text",
"text": "Or you can modify the SL so to have a trailing one istead of being fixed."
},
{
"style": "Note",
"text": "Thank you for your time. You can read a more in depth article here: http://bit.ly/9808usHelloWorld",
"updated": 1614271289324
}
]
}
@@ -190,7 +190,7 @@ exports.newSuperalgosProcessModulesDataset = function (processIndex) {
A. We are interested in a particular Exchange and Market.
B. We have the Network we received from the UI whe the user ran the Task.
C. We have the Product Definition that is the parent node of the Data Set represented by this object.
D. This Product Definition is referenced by one or more Data Products nodes at some branch of the Network Hirierchy.
D. This Product Definition is referenced by one or more Data Products nodes at some branch of the Network Hierarchy.
E. We need to find the right Data Product node, the one who is itself a descendent of the Market Data Products
node that is referencing the market and exchange that we have as a parameter of this function.
+1 -1
View File
@@ -343,7 +343,7 @@ Superalgos is a Community Project built by Contributors for Contributors. Learn
## Top Contributors
Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Matías Benitez, Ira Miller, Eduardo Remis, Jeff Braun, rico4dev, 9808us, Barry Low, Nikola Bjelogrlic, Hirajin Koizuko, Francisco J. Santillán, Norman, Viktoria B., Guillermo V., Daniel J., Javier A., Gustavo J., Romina GS, Pedro P., Thais M., Andrey M., Loui M., Natalia M., Bashar A., Carlos V., Diego M., CarnivalBen, Sebastian E., Bogdan P., Marko V., Igor S., Niksa K., Rodrigo M., Nicanor M., Alejandro P., Mateo H., Lan T., Leon A., Uroš R., Filip M., Vladimir J. and Pavle B.
Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Matías Benitez, Ira Miller, Eduardo Remis, Jeff Braun, rico4dev, 9808us, Barry Low, Nikola Bjelogrlic, Hirajin Koizuko, Francisco J. Santillán, Norman, Viktoria B., Guillermo V., Carl J, Daniel J., Javier A., Gustavo J., Romina GS, Pedro P., Thais M., Andrey M., Loui M., Natalia M., Bashar A., Carlos V., Diego M., CarnivalBen, Sebastian E., Bogdan P., Marko V., Igor S., Niksa K., Rodrigo M., Nicanor M., Alejandro P., Mateo H., Lan T., Leon A., Uroš R., Filip M., Vladimir J. and Pavle B.
# License