This is my contribution to Superalgos
No files matched your search
@@ -5,5 +5,6 @@ debug.log
|
||||
.DS_Store
|
||||
*.db
|
||||
Projects/Superalgos/Icons/Thumbs.db
|
||||
Projects/Superalgos/Icons/Thumbs.db
|
||||
Projects/Superalgos/Icons/Thumbs.db
|
||||
*.bat
|
||||
*.exe
|
||||
|
||||
@@ -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
|
||||
|
||||
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -1 +1 @@
|
||||
{"type":"Learning Engine","name":"Low-Frequency","project":"Superalgos","learningCurrent":{"type":"Learning Current","name":"New Learning Current","project":"Superalgos","learningEpisode":{"type":"Learning Episode","name":"New Learning Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2cc4ea2e-0c49-4dc4-be14-5c37dba3d4a3","savedPayload":{"position":{"x":11579.353376181454,"y":11483.233023771927},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5e87e4cf-d3cf-4ca3-90d0-bcc215ff32df","savedPayload":{"position":{"x":11553.745789630078,"y":11567.649923428959},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7073b390-c791-428b-b75d-11d7bef076ee","savedPayload":{"position":{"x":11512.161325536144,"y":11645.44898372349},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f5dc8eea-94d7-41d7-9c44-3b044fa5cbb7","savedPayload":{"position":{"x":11456.198051533946,"y":11713.640430398615},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f36a352e-9711-490f-9020-84bf3731f93c","savedPayload":{"position":{"x":11388.006604858821,"y":11769.603704400815},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0cd1e3ea-f314-4777-9988-bbde66dd2688","savedPayload":{"position":{"x":11310.207544564291,"y":11811.188168494748},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"1961b061-f041-494f-8c47-004c672c23f3","savedPayload":{"position":{"x":11225.790644907258,"y":11836.795755046123},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"9ffc4653-3d13-4036-b8aa-98e34ea6e497","savedPayload":{"position":{"x":11138,"y":11845.442378864669},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"dc3294b4-3754-4154-808a-6531410f6378","savedPayload":{"position":{"x":11050.209355092742,"y":11836.795755046123},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a009dbfb-9fce-4787-9461-dc63cb0cdf03","savedPayload":{"position":{"x":10965.79245543571,"y":11811.188168494748},"targetPosition":{"x":11138,"y":11395.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"learningEpisodeCounters":{"type":"Learning Episode Counters","name":"New Learning Episode Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"74d652d9-7439-4a8f-a66e-588f1cb24686","savedPayload":{"position":{"x":10975.784040048437,"y":12210.957080582268},"targetPositLine truncated
|
||||
{"type":"Learning Engine","name":"Low-Frequency","project":"Superalgos","learningCurrent":{"type":"Learning Current","name":"New Learning Current","project":"Superalgos","learningEpisode":{"type":"Learning Episode","name":"New Learning Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2cc4ea2e-0c49-4dc4-be14-5c37dba3d4a3","savedPayload":{"position":{"x":11825.790644907258,"y":10354.089002683215},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5e87e4cf-d3cf-4ca3-90d0-bcc215ff32df","savedPayload":{"position":{"x":11910.207544564291,"y":10379.69658923459},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7073b390-c791-428b-b75d-11d7bef076ee","savedPayload":{"position":{"x":11988.006604858821,"y":10421.281053328523},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f5dc8eea-94d7-41d7-9c44-3b044fa5cbb7","savedPayload":{"position":{"x":12056.198051533946,"y":10477.244327330722},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f36a352e-9711-490f-9020-84bf3731f93c","savedPayload":{"position":{"x":12112.161325536144,"y":10545.435774005848},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0cd1e3ea-f314-4777-9988-bbde66dd2688","savedPayload":{"position":{"x":12153.745789630078,"y":10623.23483430038},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"1961b061-f041-494f-8c47-004c672c23f3","savedPayload":{"position":{"x":12179.353376181454,"y":10707.651733957411},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"9ffc4653-3d13-4036-b8aa-98e34ea6e497","savedPayload":{"position":{"x":12188,"y":10795.442378864669},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"dc3294b4-3754-4154-808a-6531410f6378","savedPayload":{"position":{"x":12179.353376181454,"y":10883.233023771927},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a009dbfb-9fce-4787-9461-dc63cb0cdf03","savedPayload":{"position":{"x":12153.745789630078,"y":10967.649923428959},"targetPosition":{"x":11738,"y":10795.442378864669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"learningEpisodeCounters":{"type":"Learning Episode Counters","name":"New Learning Episode Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"74d652d9-7439-4a8f-a66e-588f1cb24686","savedPayload":{"position":{"x":10975.784040048437,"y":12210.957080582268},"targetPositLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Learning Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","learningBots":[{"type":"Learning Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Learning","config":"{\n \"codeName\": \"Learning\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Learning-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Counters","project":"Superalgos","id":"c0de6b69-60e2-4574-890a-35743f75c569","savedPayload":{"position":{"x":11096.193715496249,"y":18419.16327303778},"targetPosition":{"x":10922.997186924276,"y":18003.828513487584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ac1bc967-9c9f-47f0-8815-535abd7cb777"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Counters","project":"Superalgos","id":"da23a8ff-8b3d-4caa-a27c-f59352911212","savedPayload":{"position":{"x":10972.16471539031,"y":18451.134397804504},"targetPosition":{"x":10922.997186924276,"y":18003.828513487584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"6881069e-a4d1-4b41-892f-557d2031adea"}}},{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Statistics","project":"Superalgos","id":"dfdcb71e-c123-429e-bc2d-cf33963378d6","savedPayload":{"position":{"x":10844.152454538604,"y":18446.867460054396},"targetPosition":{"x":10922.997186924276,"y":18003.828513487584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"8408c316-e04d-4b0d-8c81-1bf3b4126894"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Statistics","project":"Superalgos","id":"fa9e000d-199c-4ed4-b10f-6c586bfc2fa5","savedPayload":{"position":{"x":10722.527724997106,"y":18406.708141707517},"targetPosition":{"x":10922.997186924276,"y":18003.828513487584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"553a0b49-2a61-41c4-ac95-f762051c1cab"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"a9a7b1fe-ecff-4d08-bd3b-297e4263c703","savedPayload":{"position":{"x":10617.14383902315,"y":18333.909911899664},"targetPosition":{"x":10922.997186924276,"y":18003.828513487584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a08a3974-75ac-4a2b-bc09-f80547a61381"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"d80bea92-bca6-4826-aa32-34bc7c13f952","savedPayload":{"position":{"x":10536.538372316247,"y":18234.370450262126},"targetPosition":{"x":10922.997186924276,"y":18003.828513487584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"46221186-fff7-4333-a087-a32a649e9ce8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Distance To Learning Event","project":"Superalgos","id":"0b8ef0c4-c7a9-48cf-9f9b-e48d32f5ed27","savedPayload":{"position":{"x":10487.241500409818,"y":18116.153851992807},"targetPosition":{"x":10922.997186924276,"y":18003.828513487584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0d746a41-6726-41fd-9312-862b6835b8ba"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Distance To Learning Event","project":"Superalgos","id":"a8951035-4bf1-4d0d-8666-879b2c481b6d","savedPayload":{"position":{"x":10473.246962685937,"y":17988.837322822303},"targetPosition":{"x":Line truncated
|
||||
{"type":"Learning Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","learningBots":[{"type":"Learning Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Learning","config":"{\n \"codeName\": \"Learning\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Learning-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Learning Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Counters","project":"Superalgos","id":"c0de6b69-60e2-4574-890a-35743f75c569","savedPayload":{"position":{"x":10770.578330127608,"y":18237.318563914418},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ac1bc967-9c9f-47f0-8815-535abd7cb777"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Counters","project":"Superalgos","id":"da23a8ff-8b3d-4caa-a27c-f59352911212","savedPayload":{"position":{"x":10647.18050284652,"y":18202.991870096994},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"6881069e-a4d1-4b41-892f-557d2031adea"}}},{"type":"Output Dataset","name":"Multi-Period-Market Learning Episode Statistics","project":"Superalgos","id":"dfdcb71e-c123-429e-bc2d-cf33963378d6","savedPayload":{"position":{"x":10538.452101828116,"y":18135.29046318318},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"8408c316-e04d-4b0d-8c81-1bf3b4126894"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Learning Episode Statistics","project":"Superalgos","id":"fa9e000d-199c-4ed4-b10f-6c586bfc2fa5","savedPayload":{"position":{"x":10453.201655490207,"y":18039.69910852537},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"553a0b49-2a61-41c4-ac95-f762051c1cab"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"a9a7b1fe-ecff-4d08-bd3b-297e4263c703","savedPayload":{"position":{"x":10398.335647991167,"y":17923.962049174253},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a08a3974-75ac-4a2b-bc09-f80547a61381"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"d80bea92-bca6-4826-aa32-34bc7c13f952","savedPayload":{"position":{"x":10378.298996957856,"y":17797.455613363665},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"46221186-fff7-4333-a087-a32a649e9ce8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Distance To Learning Event","project":"Superalgos","id":"0b8ef0c4-c7a9-48cf-9f9b-e48d32f5ed27","savedPayload":{"position":{"x":10394.71495269444,"y":17670.42860016024},"targetPosition":{"x":10828.2531163121,"y":17791.02984678326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0d746a41-6726-41fd-9312-862b6835b8ba"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Distance To Learning Event","project":"Superalgos","id":"a8951035-4bf1-4d0d-8666-879b2c481b6d","savedPayload":{"position":{"x":10446.25359209659,"y":17553.171982714983},"targetPosition":{"x":10828.2531163121,"y":177Line truncated
|
||||
@@ -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
|
||||
@@ -3039,9 +3039,188 @@
|
||||
"type": "node",
|
||||
"childType": "Learning Current",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "predictions",
|
||||
"type": "node",
|
||||
"childType": "Predictions",
|
||||
"autoAdd": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "Predictions",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Prediction",
|
||||
"relatedUiObject": "Prediction",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Learning Engine->"
|
||||
},
|
||||
"propertyNameAtParent": "predictions",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "predictions",
|
||||
"type": "array",
|
||||
"childType": "Prediction",
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Prediction",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
"label": "Add Missing Children",
|
||||
"relatedUiObject": "Learning Engine",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Path",
|
||||
"label": "Copy Node Path",
|
||||
"iconPathOn": "copy-path",
|
||||
"iconPathOff": "copy-path",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Value",
|
||||
"label": "Copy Node Value",
|
||||
"iconPathOn": "copy-value",
|
||||
"iconPathOff": "copy-value",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Type",
|
||||
"label": "Copy Node Type",
|
||||
"iconPathOn": "copy-type",
|
||||
"iconPathOff": "copy-type",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\n\"initialValue\": 0\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Predictions->"
|
||||
},
|
||||
"propertyNameAtParent": "predictions",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "begin",
|
||||
"type": "node",
|
||||
"childType": "Begin",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "end",
|
||||
"type": "node",
|
||||
"childType": "End",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "predictionValue",
|
||||
"type": "node",
|
||||
"childType": "Prediction Value",
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Prediction Value",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Path",
|
||||
"label": "Copy Node Path",
|
||||
"iconPathOn": "copy-path",
|
||||
"iconPathOff": "copy-path",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Value",
|
||||
"label": "Copy Node Value",
|
||||
"iconPathOn": "copy-value",
|
||||
"iconPathOff": "copy-value",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Copy Node Type",
|
||||
"label": "Copy Node Type",
|
||||
"iconPathOn": "copy-type",
|
||||
"iconPathOff": "copy-type",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{\n\"initialValue\": 0\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Prediction->"
|
||||
},
|
||||
"propertyNameAtParent": "predictionValue",
|
||||
"childrenNodesProperties": [
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
},
|
||||
{
|
||||
"type": "Dynamic Indicators",
|
||||
"menuItems": [
|
||||
@@ -7794,7 +7973,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->"
|
||||
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->Prediction->"
|
||||
},
|
||||
"propertyNameAtParent": "begin"
|
||||
},
|
||||
@@ -7848,7 +8027,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->"
|
||||
"compatibleTypes": "->Trading Episode->Learning Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->Prediction->"
|
||||
},
|
||||
"propertyNameAtParent": "end"
|
||||
},
|
||||
@@ -10430,7 +10609,7 @@
|
||||
}
|
||||
],
|
||||
"initialValues": {
|
||||
"config": "{ \n\"codeName\": \"Time Series Forcasting Tensor Flow JS\"\n}"
|
||||
"config": "{ \n\"backLearningPredictingRatio\": 0.8\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"editors": {
|
||||
@@ -18398,7 +18577,6 @@
|
||||
"isHierarchyHead": true,
|
||||
"addLeftIcons": true,
|
||||
"level": 0,
|
||||
"propertyNameAtParent": "plugins",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "pluginProjects",
|
||||
@@ -18919,13 +19097,12 @@
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n\"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": \n[\n [\"\", \"\"], \n[\"\", \"\"], \n[\"\", \"\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}"
|
||||
"config": "{\"icon\": {\"name\": \"\",\"project\": \"Superalgos\"},\"position\": \"Left\",\"slider\": \"toTop\",\"pressButton\": \"\",\"docs\": {\"project\": \"Superalgos\",\"category\": \"Tutorial\",\"type\": \"\"},\"controlDocs\": {\"panel\": \"\",\"closeTutorialEditor\": false,\"page\": {\"project\": \"Superalgos\",\"category\": \"\",\"type\": \"\"}}}"
|
||||
},
|
||||
"isTitleAllwaysVisible": true,
|
||||
"isHierarchyHead": true,
|
||||
"addLeftIcons": true,
|
||||
"level": 0,
|
||||
"propertyNameAtParent": "tutorials",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "tutorialSteps",
|
||||
@@ -18991,7 +19168,7 @@
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n\"title\": \"\",\n \"summary\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": \n[\n [\"\", \"\"], \n[\"\", \"\"], \n[\"\", \"\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}"
|
||||
"config": "{\"icon\": {\"name\": \"\",\"project\": \"Superalgos\"},\"position\": \"Left\",\"slider\": \"toTop\",\"pressButton\": \"\",\"docs\": {\"project\": \"Superalgos\",\"category\": \"Tutorial\",\"type\": \"\"},\"controlDocs\": {\"panel\": \"\",\"closeTutorialEditor\": false,\"page\": {\"project\": \"Superalgos\",\"category\": \"\",\"type\": \"\"}}}"
|
||||
},
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->*Any Node*->",
|
||||
@@ -19056,7 +19233,7 @@
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": \n[\n [\"\", \"\"], \n[\"\", \"\"], \n[\"\", \"\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}"
|
||||
"config": "{\"icon\": {\"name\": \"\",\"project\": \"Superalgos\"},\"position\": \"Left\",\"slider\": \"toTop\",\"pressButton\": \"\",\"docs\": {\"project\": \"Superalgos\",\"category\": \"Tutorial\",\"type\": \"\"},\"controlDocs\": {\"panel\": \"\",\"closeTutorialEditor\": false,\"page\": {\"project\": \"Superalgos\",\"category\": \"\",\"type\": \"\"}}}"
|
||||
},
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->*Any Node*->",
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"type": "List of Plugin Workspaces and Tutorials",
|
||||
"definition": {
|
||||
"text": "Write here the summary / definition of this Concept."
|
||||
"text": "Tutorials exists withing specific workspaces. This is a list of the workspaces shipping with Superalgos and the tutorials each of the feature.",
|
||||
"updated": 1613848190790
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"type": "Project",
|
||||
"definition": {
|
||||
"text": "Superalgos is a platform that integrates different projects with the goal of automating operation acrross any of them, and extracting valuable information from their own blockchains in order to use them in trading strategies.",
|
||||
"updated": 1609144195229
|
||||
"text": "The Superalgos infrastructure integrates different projects. The main goal of these integrations is to automate cross-project operations, extracting valuable information from blockchains or the particular domain of each project to be used on Trading Systems.",
|
||||
"updated": 1613841611271
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The basic configuration of the tutorial step node is the same as the tutorial node. Refer to the latter, please."
|
||||
"text": "The basic configuration of the tutorial step node is the same as the Tutorial node. Refer to the latter, please.",
|
||||
"updated": 1613846300336
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -36,7 +37,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "<H4>Messages</H4>"
|
||||
"text": "Messages",
|
||||
"updated": 1613846598199
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -94,9 +96,15 @@
|
||||
"style": "List",
|
||||
"text": "key may be any letter or number."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Changing Node's Configurations",
|
||||
"updated": 1613846731449
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Setting up a reference to any node in the design space and using the following parameters allows you to edit the configuration of the referenced nodes and their offspring."
|
||||
"text": "The batchConfigChangesReferenceParent parameter allows you to edit the configuration of a referenced node and their offspring.",
|
||||
"updated": 1613846892311
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -104,8 +112,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "\"batchConfigChangesReferenceParent\": [\n{\n\"nodePath\": \"referenceParent.timeScale\",\n\"properties\": {\n\"autoMinScale\": false,\n\"autoMaxScale\": false,\n\"fromDate\": \"2020-08-31T23:40:00.000Z\",\n\"toDate\": \"2020-09-01T01:00:00.000Z\"\n}\n},\n{\n\"nodePath\": \"referenceParent.rateScale\",\n\"properties\": {\n\"autoMinScale\": false,\n\"autoMaxScale\": false,\n\"minValue\": 11400,\n\"maxValue\": 11800\n}\n},\n{\n\"nodePath\": \"referenceParent.timeFrameScale\",\n\"properties\": {\n\"value\": \"01-min\"\n}\n}\n]",
|
||||
"updated": 1609706585341
|
||||
"text": " \"batchConfigChangesReferenceParent\": [\n {\n \"nodePath\": \"referenceParent.timeScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-08-31T23:40:00.000Z\",\n \"toDate\": \"2020-09-01T01:00:00.000Z\"\n }\n },\n {\n \"nodePath\": \"referenceParent.rateScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"minValue\": 11400,\n \"maxValue\": 11800\n }\n },\n {\n \"nodePath\": \"referenceParent.timeFrameScale\",\n \"properties\": {\n \"value\": \"01-min\"\n }\n }\n ]",
|
||||
"updated": 1613846829780
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -23,7 +23,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The configuration of the tutorial topic node is the same as the tutorial node. Refer to the latter, please."
|
||||
"text": "The configuration of the tutorial topic node is the same as the Tutorial node. Refer to the latter, please.",
|
||||
"updated": 1613846326015
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"type": "Tutorial",
|
||||
"definition": {
|
||||
"text": "The tutorial hierarchy features a free arrangement of tutorial topic and tutorial step nodes that make up a tutorial. Each node in the hierarchy, including the parent tutorial node, represents a HTML page that is overlaid on top of both the design space and the charting space. "
|
||||
"text": "The tutorial hierarchy features a free arrangement of Tutorial Topic and Tutorial Step nodes that make up a tutorial. Each node in the hierarchy, including the parent tutorial node, represents an HTML page that is overlaid on top of both the design space and the charting space.",
|
||||
"updated": 1613839026788
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
@@ -10,7 +11,18 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Nodes in the hierarchy may be arranged freely, meaning that there may be as many tutorial topics and tutorial steps as desired. In general terms, all types of nodes behave similarly in the sense that each node, independently of the precise type, represents a tutorial step in and of itself. There are subtle differences to be covered where appropriate."
|
||||
"text": "Nodes in the hierarchy may be arranged freely, meaning that there may be as many tutorial topics and tutorial steps as desired. ",
|
||||
"updated": 1613839088895
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In general terms, all types of nodes behave similarly in the sense that each node, independently of the precise type, represents a tutorial step in and of itself. Subtle differences shall be covered where appropriate.",
|
||||
"updated": 1613839117191
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "The key similarity among all types of nodes in the hierarchy is that all of them may draw content from a tutorial page in the Docs.",
|
||||
"updated": 1613839286982
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
@@ -23,29 +35,23 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The configuration of each node in the tutorial hierarchy determines the content of each step. All types of nodes share the same basic configuration. However, tutorial step nodes have extra properties, described elsewhere."
|
||||
"text": "The configuration of each node in the tutorial hierarchy determines the content and behavior of each step. All types of nodes share the same basic configuration. However, Tutorial Step nodes have extra properties, described elsewhere.",
|
||||
"updated": 1613839329036
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The layout of the HTML page is fixed (CSS styles are fixed too) and is made out of a sequence of HTML elements, each of which may or may not be used, depending on whether the corresponding configuration parameter exists or not in the configuration."
|
||||
"text": "The layout of the HTML page follows the layout of the referenced page in the Docs, although displayed within the confines of the tutorial window. ",
|
||||
"updated": 1613839417342
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "In other words, you may choose which elements of a potentially long list are used by filling the corresponding parameters with content or not."
|
||||
"text": "In other words, you affect the layout of the step by writing content and applying styles to individual paragraphs in the associated Docs Page.",
|
||||
"updated": 1613839489189
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The HTML page features a limited space and does not support scrolling. If too much information is defined in the configuration, the resulting content overflows the available space. There is no system-side control to deal with such overflows, so it's up to you to spread information across multiple steps and keep each page within its limits."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You may use HTML element tags and inline CSS as part of the content of parameters. Just consider that they shall be embedded in the fixed layout and their effectiveness may vary.",
|
||||
"updated": 1609704857821
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Configuration items are listed in the order of appearance in the HTML layout, that is, the sequence of HTML elements mentioned earlier.",
|
||||
"updated": 1609704957111
|
||||
"text": "The HTML page features a limited space and does not support scrolling. If too much information is defined in the associated Docs Page, the resulting content overflows the available space in the tutorial window. There is no system-side control to deal with such overflows, so it's up to you to spread information across multiple steps and keep each page within its limits.",
|
||||
"updated": 1613839536547
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
@@ -54,93 +60,66 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "title is the main title of the page."
|
||||
"text": "icon: the name and project of one of the icons stored in the \\Projects\\[Project-Name]\\Iconsfolder, without the extension. When the configuration exists, the icon is placed within a table, on the left-hand side of the text block featured in the definition field. When there is no icon, the definition occupies the full width.",
|
||||
"updated": 1613840648780
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "\"icon\": {\n \"name\": \"balance\",\n \"project\": \"Superalgos\"\n }",
|
||||
"updated": 1613840669552
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "summary is a block of text preceded with the word <i>Summary</i>."
|
||||
"text": "position: determines the position of the floating HTML. There are three alternatives... \"Left\", \"Right\", or leave the field empty to position the page in the center of the screen.",
|
||||
"updated": 1613842749882
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": " \"position\": \"Left\"",
|
||||
"updated": 1613840787300
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "subTitle is the secondary title of the page.",
|
||||
"updated": 1609705068885
|
||||
"text": "slider: determines the position of the horizontal slider. There are three alternatives... \"toTop\", \"toBottom\", \"toMiddle\".",
|
||||
"updated": 1613842783566
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "\"slider\": \"toBottom\""
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "gif is the name of an image in the <i>GIF</i> format. Do not include the .gif extension in the configuration, and make sure that the name of the file features the extension in lowercase. The file must be stored in the \\Projects\\[Project-Name]\\Gifsfolder. The optimum size of the image is 400 px in width. For a step showing only a gif image, use 580 px for the height."
|
||||
"text": "pressButton: allows you to forcefully \"Stop\" the tutorial, go to the \"Next\" step, go to the \"Previous\" step, or \"Skip\" a step. When a step is loaded and one of these options is configured in this property, the action is applied immediately. A common use of this feature is to skip a step, for instance, a Tutorial Topic node that is used solely for organizational purposes within the hierarchy, thus has no content.",
|
||||
"updated": 1613842824873
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "\"pressButton\": \"Next\"",
|
||||
"updated": 1613841332185
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "image is the name of one of the icons stored in the \\Projects\\[Project-Name]\\Iconsfolder, without the extension. When the configuration exists, the icon is placed within a table, on the left-hand side of the text block featured in the definition field. When there is no icon, the definition occupies the full width."
|
||||
"text": "docs: the property is used to reference the Docs Tutorial Page that feeds content to the particular tutorial step. The definition requires the name of the Project, the Docs Page Category which is always Tutorial, and the complete name of the tutorial step page.",
|
||||
"updated": 1613841395148
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "\"docs\": {\n \"project\": \"Superalgos\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Scales' Best-Kept Secrets\"\n }",
|
||||
"updated": 1613842164831
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "definition is a block of text in bold style.",
|
||||
"updated": 1609705317162
|
||||
"text": "controlDocs: the property is used to control the behavior of the Docs panel. The panel property may be set to \"Open\" or \"Close\". The property closeTutorialEditor may switch on (true) and off (false) the Docs editor. When set to false, the Docs panel shows the page corresponding to the active tutorial step or the page in the Docs that is requested. When the property is set to true and there is no request to open a Docs page, then the Docs panel shows the search box. The page property is where you define which page in the Docs must be loaded. You must specify the Project, the Docs Page Category, and the type which is the complete name of the page.",
|
||||
"updated": 1613843493276
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "bulletListIntro is a block of text that serves as an introduction to the array of bullet points below."
|
||||
"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": "List",
|
||||
"text": "bulletArray is the definition of any number of bullet points. The first field on each bullet is rendered in bold style and the second, in plain style. If the fields are left empty, the bullet list will still be included in the HTML, therefore, if you don't want bullets you must delete the whole definition of the bullet array from the configuration."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "paragraph1 is a regular block of text."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "callOut is a block of text in bold style with a green border and the left-hand side of the block."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "externalLink allows you to set up a link that opens in a new tab at the end of the callOut block. Enter the URL in the first field and the anchor text in the second. You may also use HTML to include links anywhere else.",
|
||||
"updated": 1609705400186
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "paragraph2 is a regular block of text."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "note is a block of text within a blue box preceded with the string Note.",
|
||||
"updated": 1609705469745
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "tip is a block of text within a green box preceded with the string Tip.",
|
||||
"updated": 1609705475148
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "important is a block of text within a yellow box preceded with the string Important.",
|
||||
"updated": 1609705484520
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "warning is a block of text within a red box preceded with the string Warning.",
|
||||
"updated": 1609705492685
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "position determines the position of the floating HTML. There are three alternatives... Left, Right, or leave the field empty to position the page in the center of the screen.",
|
||||
"updated": 1609705546655
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "slider determines the position of the horizontal slider. There are four alternatives... toTop, Right, or leave the field empty to position the page in the center of the screen.",
|
||||
"updated": 1609705629835
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "pressButton allows you to forcefully Stop the tutorial, go to the Next step, go to the Previous step, or Skip a step. When a step is loaded and one of these options is configured in this field, the action is applied immediately."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "documentationURL: opens the Superalgos Documentation in the URL you configure. Use the complete URL, including the https:// protocol header.",
|
||||
"updated": 1609705696017
|
||||
"style": "Text",
|
||||
"text": "asdf"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"review": "Superalgos Project Review",
|
||||
"pageNumber": 2,
|
||||
"type": "Superalgos Review - INDONESIA TRANSLATION",
|
||||
"definition": {
|
||||
"text": "Write a summary for this review page."
|
||||
},
|
||||
"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,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,82 @@
|
||||
{
|
||||
"topic": "Debugging Your Indicator",
|
||||
"pageNumber": "2",
|
||||
"type": "Debugging - Setting up your IDE",
|
||||
"definition": {
|
||||
"text": "Toggling Breakpoints is telling the the program where to slow down - Where we'd like to take control",
|
||||
"updated": 1614264846619,
|
||||
"translations": [
|
||||
{
|
||||
"language": "CN",
|
||||
"text": "Toggling Breakpoints is telling the the program where to slow down - Where we'd like to take control.",
|
||||
"updated": 1614338778954
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": "Text",
|
||||
"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,90 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": 1614332767583
|
||||
},
|
||||
{
|
||||
"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": 1614333056827
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Deleting existing data from your indicator in the..Superalgos/Data-Storage/ folder might speed up the data mining process",
|
||||
"updated": 1614333417020
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Ssssh, be quite... wait for it...",
|
||||
"updated": 1614264973244
|
||||
},
|
||||
{
|
||||
"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 (eval(dataBuildingProcedure.loop.procedureJavascriptCode.code)), 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": 1614265790102
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"topic": "Debugging Your Indicator",
|
||||
"pageNumber": "5",
|
||||
"type": "Debugging - Found something!",
|
||||
"definition": {
|
||||
"text": "Rinse and repeat",
|
||||
"updated": 1614333501847,
|
||||
"translations": [
|
||||
{
|
||||
"language": "CN",
|
||||
"text": "Rinse and repeat.",
|
||||
"updated": 1614338812128
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": 1614333577089
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -14,8 +14,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add [Node|Concept|Book] from Project: Docs Page Name",
|
||||
"updated": 1613766020535
|
||||
"text": "docs.add [Node|Concept|Book] to Project: Docs Page Name",
|
||||
"updated": 1614076270512
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
@@ -24,18 +24,18 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add Node from Superalgos: Task",
|
||||
"updated": 1609152405379
|
||||
"text": "docs.add Node to Superalgos: Task",
|
||||
"updated": 1614076278432
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add Concept from Superalgos: References",
|
||||
"updated": 1613766054009
|
||||
"text": "docs.add Concept to Superalgos: References",
|
||||
"updated": 1614076283283
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add Book from Superalgos: User Manual",
|
||||
"updated": 1613766091949
|
||||
"text": "docs.add Book to Superalgos: User Manual",
|
||||
"updated": 1614076289103
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -44,8 +44,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add [Topic|Tutorial|Review] from Project: Docs [Topic|Tutorial|Review] Name->Docs Page Name->Docs Page Number",
|
||||
"updated": 1613766367064
|
||||
"text": "docs.add [Topic|Tutorial|Review] to Project: Docs [Topic|Tutorial|Review] Name->Docs Page Name->Docs Page Number",
|
||||
"updated": 1614076299626
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
@@ -54,18 +54,18 @@
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add Topic from Superalgos: Docs Styles->Docs Text Style->1",
|
||||
"updated": 1609152521245
|
||||
"text": "docs.add Topic to Superalgos: Docs Styles->Docs Text Style->1",
|
||||
"updated": 1614076312667
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add Tutorial from Superalgos: How to Build Indicatiors->Intro->1",
|
||||
"updated": 1610707006603
|
||||
"text": "docs.add Tutorial to Superalgos: How to Build Indicatiors->Intro->1",
|
||||
"updated": 1614076317413
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "docs.add Review from Project: Superalgos Project Review->Awasome!->2",
|
||||
"updated": 1610707101903
|
||||
"text": "docs.add Review to Project: Superalgos Project Review->Awasome!->2",
|
||||
"updated": 1614076323955
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -10,9 +10,15 @@
|
||||
"text": "I'm an interactive tutorial, the first in a series designed to facilitate your onboarding and teach you all the basics!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Aku adalah tutorial yang interaktif, yang berkerja untuk memfasilitasi orientasi pemikiran kamu dan mengajari kamu semua dasar tentang Superalgos!",
|
||||
"updated": 1614416780981
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Soy un tutorial interactivo, el primero de una serie diseñada para facilitar tu llegada y enseñarte lo básico.",
|
||||
"updated": 1613594456875
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -22,9 +28,15 @@
|
||||
"text": "I will get you started, show you the tools that will help you move around comfortably, and help you discover all the cool things that Superalgos may do for you.",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Aku akan membantumu dalam memulai, dan menunjukkan alat yang akan membantumu bergerak dengan nyaman, dan menemukan semua hal keren yang akan dilakukan Superalgos untuk tradingmu.",
|
||||
"updated": 1614416877222
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Te pondré en marcha, te mostraré las herramientas que te ayudarán a moverte cómodamente y te ayudaré a descubrir todas las cosas geniales que Superalgos puede hacer por ti.",
|
||||
"updated": 1613594557989
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -33,9 +45,15 @@
|
||||
"text": "I'm the ultimate Superalgos onboarding tool! Starting with Superalgos in any other way is a mistake, as no other resource will get you up to speed faster. I will answer most of your questions!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Aku adalah tutorial orientasi Superalgos yang terbaik! Memulai Superalgos dengan cara yang tidak direkomendasikan sangatlah salah, karena tidak ada sumber lain yang dapat mempercepat kamu selain aku. Aku akan menjawab sebagian besar pertanyaan kamu!",
|
||||
"updated": 1614417059937
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Soy la herramienta definitiva para descubrir Superalgos. Empezar de cualquier otra manera es un error, ya que ningún otro medio te hará descubrir la herramienta más rápido. Intentaré aclarar todas tus dudas.",
|
||||
"updated": 1613594779456
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -44,9 +62,15 @@
|
||||
"text": "Please, always click Next to continue!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Mohon, klik Next untuk melanjutkan",
|
||||
"updated": 1614417191759
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Porfavor, presiona siguiente para continuar",
|
||||
"updated": 1613594696979
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -11,9 +11,15 @@
|
||||
"updated": 1610612226890,
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Saat menjalankan frontend ini, gunakan Chrome, atau Safari di Mac!. Kami developer tidak mencoba aplikasi ini di browser lain.",
|
||||
"updated": 1614417282628
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Cuando ejecute el frontend, utilice Chrome o Safari en Mac. No hemos testeado otros navegadores\n",
|
||||
"updated": 1613594870172
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -23,9 +29,15 @@
|
||||
"text": "It is a well-known fact that browsers behave differently, and we do know of features that do not work on other browsers. If you are on Chrome or Safari, click Next and continue. If not, do the following:",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Sudah menjadi hal yang lumrah bahwa setiap browser berbeda, dan kami tentu saja tidak mengetahui fitur yang berfungsi di browser lain. Jika kamu menggunakan Chrome atau Safari, klik Next dan lanjutkan. Jika tidak, lakukan hal berikut:",
|
||||
"updated": 1614417395532
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Sabemos que los navegadores se comportan de manera diferente, y sabemos de características que no funcionan en otros navegadores. Si está en Chrome o Safari, haga clic en Siguiente y continúe. Si no es así, haga lo siguiente:",
|
||||
"updated": 1613594916732
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -35,9 +47,15 @@
|
||||
"updated": 1611086562247,
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Copy url diatas",
|
||||
"updated": 1614417516319
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Copie la URL actual;",
|
||||
"updated": 1613594931424
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -47,9 +65,15 @@
|
||||
"updated": 1611086588055,
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Tutup browser ini dan jangan tutup tutorialnya",
|
||||
"updated": 1614417498228
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Cierre este navegador tal cual; no cierre el tutorial...",
|
||||
"updated": 1613594962637
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,9 +83,15 @@
|
||||
"updated": 1611086617811,
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Buka Chrome/Safari dan salin url yang sudah dicopy. Kamu akan secepatnya kembali ke tutorial ini.",
|
||||
"updated": 1614417589615
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Abra Chrome/Safari y pega la URL; ¡El tutorial debería estar abierto en este paso cuando vuelvas!",
|
||||
"updated": 1613595008059
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -70,9 +100,15 @@
|
||||
"text": "We offer online support, but we can't help you with any other browser!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Kami memberikan bantuan online, tetapi kami tidak bisa membantumu dengan browser berbeda!",
|
||||
"updated": 1614417653352
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Ofrecemos asistencia en línea, pero no podemos ayudarte otros navegadores.",
|
||||
"updated": 1613595041161
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -10,9 +10,15 @@
|
||||
"text": "Tutorials are defined within the system, so you may create more of us if you wish! But we'll discuss that God-like power later on. Let's focus on the basics first!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Tutorial ini dibuat oleh system, jadi kamu juga bisa membuat tutorial berbeda jika ingin! Tapi kita bahas hal besar itu nanti saja. Untuk sekarang fokus saja ke hal yang basic!",
|
||||
"updated": 1614417905988
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Los tutoriales se definen dentro del sistema, así que puedes crear más como yo si lo deseas. Pero ya hablaremos de ese poder divino más adelante. ¡Centrémonos primero en lo básico!",
|
||||
"updated": 1613595123263
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -22,9 +28,15 @@
|
||||
"text": "Superalgos is inherently a visual tool. The system represents information in hierarchical structures of interconnected nodes, represented by icons. What you see on your right is one of these hierarchies—in particular, a Tutorial hierarchy with a label reading Welcome to Superalgos!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Superalgos merupakan data yang divisualisasikan. Dengan sistem yang merepresentasikan informasi berstruktur hirarki dari nodes yang tersambung (berbentuk icon). Apa yang kamu lihat disebelah bagian dari hirarki juga, secara detail tutorial yang dimaksud adalah Welcome to Superalgos!",
|
||||
"updated": 1614418099585
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Superalgos es intrínsecamente una herramienta visual. El sistema representa la información en estructuras jerárquicas de nodos interconectados, representados por iconos. Lo que ve a su derecha es una de estas jerarquías, en concreto, una jerarquía de Tutorial con una etiqueta que dice Welcome to Superalgos!",
|
||||
"updated": 1613595175809
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -10,9 +10,15 @@
|
||||
"text": "Each node features a menu. The button on the bottom-left expands and collapses the structure of nodes below the current node.",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Setiap node memiliki menunya sendiri. Tombol dikiri bawah bisa membesar dan mengecilkan struktur dari sekumpulan nodes lainnya yang masih berada di node yang sekarang.",
|
||||
"updated": 1614424892833
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Cada nodo cuenta con un menú. El botón de la parte inferior izquierda expande y colapsa la estructura de los nodos por debajo del nodo actual.",
|
||||
"updated": 1613595237180
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -22,9 +28,15 @@
|
||||
"text": "Go ahead and click the expand button!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Ayo coba dengan men-click tombol expand tersebut!",
|
||||
"updated": 1614424924865
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Adelante, haz clic en el botón de expansión.",
|
||||
"updated": 1613595248682
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -33,9 +45,15 @@
|
||||
"text": "The Tutorial node has several offspring, and these have several more offspring. That's why it's a hierarchy!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Node Tutorial memiliki beberapa turunan, dan setiap turunan mempunyai turunannya lagi. Itulah hirarki!",
|
||||
"updated": 1614425111632
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "El nodo Tutorial tiene varios subnodos, y éstos tienen varios subnodos más. ¡Por eso es una jerarquía!",
|
||||
"updated": 1613595290969
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -44,9 +62,15 @@
|
||||
"text": "Structured visual representations of information are at the core of how Superalgos administers the complexity behind flexible and scalable trading operations.",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Representasi visual terstruktur dari informasi merupakan inti dari cara Superalgos mengelola kompleksitas di balik aplikasi trading yang fleksibel dan dapat dikembangkan.",
|
||||
"updated": 1614425276894
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Las representaciones visuales estructuradas de la información son el núcleo de la forma en que Superalgos administra la complejidad de las operaciones de trading flexibles y escalables.",
|
||||
"updated": 1613595317733
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -10,9 +10,15 @@
|
||||
"text": "Before I show you the rest of the menu, let's take a look at another hierarchy: the Network.",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Sebelum aku memperlihatkan bagian lain dari menu, ayo kebeberapa hirarki lain seperti Network.",
|
||||
"updated": 1614425404268
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Antes de mostrarte el resto del menú, vamos a echar un vistazo a otra jerarquía: la Network.",
|
||||
"updated": 1613595345116
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -22,9 +28,15 @@
|
||||
"text": "The Network hierarchy is the control room of the system. This is where you control your Data Tasks, Testing Trading Tasks, and Production Trading Tasks.",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Network merupakan hirarki yang mengatur ruang kendali sistem. Di sinilah kamu bisa mengontrol Data Tasks, Testing Trading Tasks, dan Production Trading Tasks.",
|
||||
"updated": 1614425530127
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "La jerarquía de la red es la sala de control del sistema. Aquí es donde usted controla sus Data Tasks, Testing Trading Tasks, y Production Trading Tasks.",
|
||||
"updated": 1613595453982
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -33,9 +45,15 @@
|
||||
"text": "Expand the hierarchy and take a look inside!",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Besarkan hirarki ini dan lihat didalamnya!",
|
||||
"updated": 1614425575929
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Amplíe la jerarquía y eche un vistazo al interior.",
|
||||
"updated": 1613595398384
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -45,9 +63,15 @@
|
||||
"updated": 1611075903071,
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Lihat nodes yang telah yang sudah kuberitahu sebelumnya? Keren! Kita disini untuk memulai pertama kali mengoperasikan data mining. Tapi, aku punya pertanyaan kepadamu: Apakah kamu mengakses Client secara remote ?",
|
||||
"updated": 1614426192898
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "¿Ves los nodos que he mencionado antes? Genial. Estamos aquí para iniciar tu primera operación de minería de datos. Pero antes de empezar, tengo una pregunta rápida para ti: ¿estás accediendo al Cliente de forma remota?",
|
||||
"updated": 1613595481110
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -10,9 +10,15 @@
|
||||
"text": "Superalgos allows running the Client on a machine and accessing it via Chrome from another machine in the network.",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Superalgos bisa dijalankan secara Clients, melalui mesin dan mengakses dengan Chrome dengan mesin dari jaringan yang berbeda.",
|
||||
"updated": 1614426387929
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Superalgos permite ejecutar el Cliente en una máquina y acceder a él a través de Chrome desde otra máquina de la red.",
|
||||
"updated": 1613595518833
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -22,9 +28,15 @@
|
||||
"text": "Many users choose to run the Client in the cloud, on single-board machines like the Raspberry Pi, or on a dedicated PC that they can leave on at all times when trading live. The My Computer Network Node represents the machine the Client is running on.",
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Banyak pengguna memilih untuk menjalankan Client di cloud, juga di mesin single-board seperti Raspberry Pi, atau di PC khusus yang dapat mereka tinggalkan setiap saat dengan trading tetap berlangsung. Node My Computer Network merepresentasikan Client yang dijalankan sekarang.",
|
||||
"updated": 1614426753535
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "Muchos usuarios optan por ejecutar el Cliente en la nube, en máquinas sencillas como la Raspberry Pi, o en un PC dedicado que pueden dejar encendido en todo momento cuando operan en live. El nodo de red de My Computer Network representa la máquina en la que se ejecuta el Cliente.",
|
||||
"updated": 1613595575444
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -34,9 +46,15 @@
|
||||
"updated": 1611076067427,
|
||||
"translations": [
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"language": "ID",
|
||||
"text": "Saat ini, Superalgos tidak menerapkan keamanan dalam bentuk apa pun. Kamu harus menggunakan sistem dalam konteks Jaringan Restricted Local Area Network saja. Jika kamu memilih untuk menjalankan Client di cloud, Kamu harus mensetup keamanan kamu sendiri.",
|
||||
"updated": 1614426920839
|
||||
=======
|
||||
"language": "ES",
|
||||
"text": "En este momento, Superalgos no implementa ninguna forma de seguridad. Debe utilizar el sistema únicamente en el contexto de una red de área local restringida. Si decide ejecutar el Cliente en la nube, deberá implementar su propia seguridad.",
|
||||
"updated": 1613595591178
|
||||
>>>>>>> 6feb21102a21798288ca4a695c443533363dc39b
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -143,9 +143,6 @@ exports.newSuperalgosBotModulesLearningRecords = function (processIndex) {
|
||||
the Root Node specifically for this property only.
|
||||
*/
|
||||
if (recordProperty.config.nodePath !== undefined) {
|
||||
if (recordProperty.config.nodePath === "learningEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset") {
|
||||
let a = learningEngine
|
||||
}
|
||||
try {
|
||||
propertyRootNode = eval(recordProperty.config.nodePath)
|
||||
} catch (err) {
|
||||
@@ -291,9 +288,6 @@ exports.newSuperalgosBotModulesLearningRecords = function (processIndex) {
|
||||
When we are not dealing with objects, we add every record to the existing file except
|
||||
for the ones that are filtered out at the Product Definition.
|
||||
*/
|
||||
if (product.config.codeName === "Learning-System-Errors") {
|
||||
let a = 1
|
||||
}
|
||||
if (product.config.propertyNameThatDefinesStatus !== undefined && product.config.propertyValueThatPreventsSavingObject !== undefined) {
|
||||
for (let j = 0; j < product.record.properties.length; j++) {
|
||||
let recordProperty = product.record.properties[j]
|
||||
|
||||
@@ -40,6 +40,44 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
let learningSystemModuleObject = TS.projects.superalgos.botModules.learningSystem.newSuperalgosBotModulesLearningSystem(processIndex)
|
||||
learningSystemModuleObject.initialize()
|
||||
|
||||
/*
|
||||
Here we will figure out if we need to load the model from disk, or we will just
|
||||
start a new one.
|
||||
*/
|
||||
if (learningEngine.learningCurrent.learningEpisode.headOfTheMarket.value === true) {
|
||||
/*
|
||||
At the head of the market we always load the model from disk.
|
||||
*/
|
||||
await learningSystemModuleObject.loadModel()
|
||||
|
||||
} else {
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES === true) {
|
||||
/*
|
||||
For Daily Files, we are going to load the model from disk at the first execution
|
||||
(first day) only if the user used the Session Resume option. We will load it from
|
||||
disk at every subsequent day, so as to continue with the training from the previous
|
||||
days.
|
||||
*/
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_FIRST_LOOP === true) {
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_RESUMING === true) {
|
||||
await learningSystemModuleObject.loadModel()
|
||||
}
|
||||
} else {
|
||||
await learningSystemModuleObject.loadModel()
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
Form Market Files, we are only going to load the model from this and continue the
|
||||
training it already has when the user resumes the training session. If the user
|
||||
runs the training session, we will not load from disk, but create a new empty model
|
||||
instead.
|
||||
*/
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_RESUMING === true) {
|
||||
await learningSystemModuleObject.loadModel()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let learningEpisodeModuleObject = TS.projects.superalgos.botModules.learningEpisode.newSuperalgosBotModulesLearningEpisode(processIndex)
|
||||
learningEpisodeModuleObject.initialize()
|
||||
|
||||
@@ -268,6 +306,8 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
}
|
||||
}
|
||||
|
||||
await learningSystemModuleObject.saveModel()
|
||||
|
||||
learningSystemModuleObject.finalize()
|
||||
learningRecordsModuleObject.finalize()
|
||||
learningEpisodeModuleObject.finalize()
|
||||
|
||||
@@ -5,6 +5,8 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
|
||||
*/
|
||||
const MODULE_NAME = 'Learning System'
|
||||
let thisObject = {
|
||||
loadModel: loadModel,
|
||||
saveModel: saveModel,
|
||||
mantain: mantain,
|
||||
reset: reset,
|
||||
run: run,
|
||||
@@ -182,6 +184,14 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
|
||||
learningEngine = undefined
|
||||
sessionParameters = undefined
|
||||
}
|
||||
|
||||
async function loadModel() {
|
||||
await machineLearningLibraryModuleObject.loadModel()
|
||||
}
|
||||
|
||||
async function saveModel() {
|
||||
await machineLearningLibraryModuleObject.saveModel()
|
||||
}
|
||||
|
||||
function mantain() {
|
||||
machineLearningLibraryModuleObject.mantain()
|
||||
@@ -236,15 +246,7 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
|
||||
/*
|
||||
Initialize the Learning Algorithm
|
||||
*/
|
||||
machineLearningLibraryModuleObject.run(onRun)
|
||||
|
||||
function onRun(err) {
|
||||
if (err.result === TS.projects.superalgos.globals.standardResponses.DEFAULT_OK_RESPONSE.result) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
await machineLearningLibraryModuleObject.run()
|
||||
|
||||
} catch (err) {
|
||||
/*
|
||||
|
||||
@@ -143,9 +143,6 @@ exports.newSuperalgosBotModulesTradingRecords = function (processIndex) {
|
||||
the Root Node specifically for this property only.
|
||||
*/
|
||||
if (recordProperty.config.nodePath !== undefined) {
|
||||
if (recordProperty.config.nodePath === "tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset") {
|
||||
let a = tradingEngine
|
||||
}
|
||||
try {
|
||||
propertyRootNode = eval(recordProperty.config.nodePath)
|
||||
} catch (err) {
|
||||
@@ -291,9 +288,6 @@ exports.newSuperalgosBotModulesTradingRecords = function (processIndex) {
|
||||
When we are not dealing with objects, we add every record to the existing file except
|
||||
for the ones that are filtered out at the Product Definition.
|
||||
*/
|
||||
if (product.config.codeName === "Trading-System-Errors") {
|
||||
let a = 1
|
||||
}
|
||||
if (product.config.propertyNameThatDefinesStatus !== undefined && product.config.propertyValueThatPreventsSavingObject !== undefined) {
|
||||
for (let j = 0; j < product.record.properties.length; j++) {
|
||||
let recordProperty = product.record.properties[j]
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -68,7 +68,8 @@ function newSuperalgosFunctionLibraryLearningSessionFunctions() {
|
||||
'Environment Flags->Debug Mode->Production Mode->' +
|
||||
'Supervised Learning->Unsupervised Learning->Self Learning->Reinforcement Learning->' +
|
||||
'Artificial Neural Network->Model->' +
|
||||
'Optimizer->Loss Function->Metrics->' +
|
||||
'Compile->Optimizer->Loss Function->Metrics->' +
|
||||
'Fit Dataset->Verbose->Epochs->Callbacks->' +
|
||||
'Layers API->Code API->' +
|
||||
'Secuential Model->Functional Model->' +
|
||||
'Input Layer->Secuential Layer->Output Layer->'+
|
||||
@@ -117,7 +118,8 @@ function newSuperalgosFunctionLibraryLearningSessionFunctions() {
|
||||
'Begin->End->Exit Type->Status->Begin Rate->End Rate->Stage Base Asset->Stage Quoted Asset->Size Placed->Target Size->Size Filled->Fees Paid->Stage Defined In->' +
|
||||
'Serial Number->Identifier->Begin->End->Begin Rate->End Rate->Strategy Name->Status->Exit Type->' +
|
||||
'Balance->Begin Balance->End Balance->' +
|
||||
'Index->Situation Name->Formula->Periods->'
|
||||
'Index->Situation Name->Formula->Periods->' +
|
||||
'Predictions->Prediction->Begin->End->Prediction Value->'
|
||||
|
||||
let learningEngine = UI.projects.superalgos.functionLibraries.protocolNode.getProtocolNode(node.learningEngineReference.payload.referenceParent, false, true, true, false, false, lightingPath)
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ function newRateScale() {
|
||||
maxValue: undefined,
|
||||
isVisible: true,
|
||||
layersOn: undefined,
|
||||
onKeyPressed: onKeyPressed,
|
||||
onUpstreamScaleChanged: onUpstreamScaleChanged,
|
||||
onMouseOverSomeTimeMachineContainer: onMouseOverSomeTimeMachineContainer,
|
||||
physics: physics,
|
||||
@@ -125,6 +126,25 @@ function newRateScale() {
|
||||
readObjectState()
|
||||
}
|
||||
|
||||
function onKeyPressed(event) {
|
||||
if (event.code === "ArrowUp") {
|
||||
event.delta = 1
|
||||
onMouseWheel(event, false)
|
||||
}
|
||||
if (event.code === "ArrowDown") {
|
||||
event.delta = -1
|
||||
onMouseWheel(event, false)
|
||||
}
|
||||
if (event.code === "ArrowLeft") {
|
||||
event.delta = 1
|
||||
onMouseWheel(event, true)
|
||||
}
|
||||
if (event.code === "ArrowRight") {
|
||||
event.delta = -1
|
||||
onMouseWheel(event, true)
|
||||
}
|
||||
}
|
||||
|
||||
function onMouseOverSomeTimeMachineContainer(event) {
|
||||
if (event.containerId === undefined) {
|
||||
/* This happens when the mouse over was not at the instance of a certain scale, but anywhere else. */
|
||||
@@ -154,7 +174,7 @@ function newRateScale() {
|
||||
scaleDisplayTimer = 0
|
||||
}
|
||||
|
||||
function onMouseWheel(event) {
|
||||
function onMouseWheel(event, autoScale) {
|
||||
if (IS_MAC) {
|
||||
let sensitivity
|
||||
if (event.delta < 0) {
|
||||
@@ -196,7 +216,7 @@ function newRateScale() {
|
||||
}
|
||||
}
|
||||
|
||||
if (event.shiftKey === true) {
|
||||
if (event.shiftKey === true || autoScale === true ) {
|
||||
autoScaleButton.container.eventHandler.raiseEvent('onMouseWheel', event)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ function newTimeFrameScale() {
|
||||
payload: undefined,
|
||||
isVisible: true,
|
||||
layersOn: undefined,
|
||||
onKeyPressed: onKeyPressed,
|
||||
adjustTimeFrame: adjustTimeFrame,
|
||||
onMouseOverSomeTimeMachineContainer: onMouseOverSomeTimeMachineContainer,
|
||||
draw: draw,
|
||||
@@ -83,6 +84,17 @@ function newTimeFrameScale() {
|
||||
onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver)
|
||||
}
|
||||
|
||||
function onKeyPressed(event) {
|
||||
if (event.code === "ArrowUp") {
|
||||
event.delta = 1
|
||||
onMouseWheel(event)
|
||||
}
|
||||
if (event.code === "ArrowDown") {
|
||||
event.delta = -1
|
||||
onMouseWheel(event)
|
||||
}
|
||||
}
|
||||
|
||||
function onMouseOverSomeTimeMachineContainer(event) {
|
||||
if (event.containerId === undefined) {
|
||||
/* This happens when the mouse over was not at the instance of a certain scale, but anywhere else. */
|
||||
|
||||
@@ -9,6 +9,7 @@ function newTimeScale() {
|
||||
isVisible: true,
|
||||
fromDate: undefined,
|
||||
toDate: undefined,
|
||||
onKeyPressed: onKeyPressed,
|
||||
onMouseOverSomeTimeMachineContainer: onMouseOverSomeTimeMachineContainer,
|
||||
physics: physics,
|
||||
draw: draw,
|
||||
@@ -81,6 +82,25 @@ function newTimeScale() {
|
||||
readObjectState()
|
||||
}
|
||||
|
||||
function onKeyPressed(event) {
|
||||
if (event.code === "ArrowUp") {
|
||||
event.delta = 1
|
||||
onMouseWheel(event, true)
|
||||
}
|
||||
if (event.code === "ArrowDown") {
|
||||
event.delta = -1
|
||||
onMouseWheel(event, true)
|
||||
}
|
||||
if (event.code === "ArrowLeft") {
|
||||
event.delta = 1
|
||||
onMouseWheel(event, false)
|
||||
}
|
||||
if (event.code === "ArrowRight") {
|
||||
event.delta = -1
|
||||
onMouseWheel(event, false)
|
||||
}
|
||||
}
|
||||
|
||||
function onMouseOverSomeTimeMachineContainer(event) {
|
||||
if (event.containerId === undefined) {
|
||||
/* This happens when the mouse over was not at the instance of a certain scale, but anywhere else. */
|
||||
@@ -105,7 +125,7 @@ function newTimeScale() {
|
||||
isMouseOver = false
|
||||
}
|
||||
|
||||
function onMouseWheel(event) {
|
||||
function onMouseWheel(event, autoScale) {
|
||||
if (IS_MAC) {
|
||||
let sensitivity
|
||||
if (event.delta < 0) {
|
||||
@@ -147,7 +167,7 @@ function newTimeScale() {
|
||||
}
|
||||
}
|
||||
|
||||
if (event.shiftKey === true) {
|
||||
if (event.shiftKey === true || autoScale === true ) {
|
||||
autoScaleButton.container.eventHandler.raiseEvent('onMouseWheel', event)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ each one with it own timelineCharts, and each one positioned at an especific poi
|
||||
function newTimeMachine() {
|
||||
const MODULE_NAME = 'Time Machine'
|
||||
const logger = newWebDebugLog()
|
||||
|
||||
|
||||
|
||||
let timeFrame = INITIAL_TIME_PERIOD
|
||||
|
||||
@@ -20,6 +20,7 @@ function newTimeMachine() {
|
||||
container: undefined,
|
||||
timeScale: undefined,
|
||||
rateScale: undefined,
|
||||
timeFrameScale: undefined,
|
||||
payload: undefined,
|
||||
edgeEditor: undefined,
|
||||
onFocus: undefined,
|
||||
@@ -171,7 +172,53 @@ function newTimeMachine() {
|
||||
}
|
||||
|
||||
function onKeyPressed(event) {
|
||||
thisObject.edgeEditor.onKeyPressed(event)
|
||||
|
||||
/*
|
||||
We are going to pass this event downstream to see if it belogns to any of the
|
||||
chart's scales or time machine's scales. If it does not belong to any
|
||||
we will apply it to the edge editor.
|
||||
*/
|
||||
let eventTaken = false
|
||||
let point = {
|
||||
x: event.x,
|
||||
y: event.y
|
||||
}
|
||||
let container
|
||||
|
||||
if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) {
|
||||
container = thisObject.rateScale.getContainer(point)
|
||||
if (container !== undefined) {
|
||||
eventTaken = true
|
||||
thisObject.rateScale.onKeyPressed(event)
|
||||
}
|
||||
}
|
||||
|
||||
if (thisObject.timeScale !== undefined && thisObject.timeScale.isVisible === true) {
|
||||
container = thisObject.timeScale.getContainer(point)
|
||||
if (container !== undefined) {
|
||||
eventTaken = true
|
||||
thisObject.timeScale.onKeyPressed(event)
|
||||
}
|
||||
}
|
||||
|
||||
if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) {
|
||||
container = thisObject.timeFrameScale.getContainer(point)
|
||||
if (container !== undefined) {
|
||||
eventTaken = true
|
||||
thisObject.timeFrameScale.onKeyPressed(event)
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < thisObject.timelineCharts.length; i++) {
|
||||
container = thisObject.timelineCharts[i].getContainer(point)
|
||||
if (container !== undefined) {
|
||||
eventTaken = thisObject.timelineCharts[i].onKeyPressed(event)
|
||||
}
|
||||
}
|
||||
|
||||
if (eventTaken === false) {
|
||||
thisObject.edgeEditor.onKeyPressed(event)
|
||||
}
|
||||
}
|
||||
|
||||
function onMouseOver(event) {
|
||||
@@ -665,7 +712,7 @@ function newTimeMachine() {
|
||||
if (description !== undefined) {
|
||||
label = description
|
||||
}
|
||||
UI.projects.superalgos.utilities.drawPrint.printLabel(label, position.x + 20, undefined, undefined, position.y - 10, opacity, fontSize, undefined, 'Left')
|
||||
UI.projects.superalgos.utilities.drawPrint.printLabel(label, position.x + 20, undefined, undefined, position.y - 10, opacity, fontSize, undefined, 'Left')
|
||||
|
||||
if (icon !== undefined) {
|
||||
if (icon.canDrawIcon === true) {
|
||||
|
||||
@@ -2,7 +2,7 @@ function newTimelineChart() {
|
||||
const MODULE_NAME = 'Timeline Chart'
|
||||
|
||||
let logger = newWebDebugLog()
|
||||
|
||||
|
||||
|
||||
let timeFrame = INITIAL_TIME_PERIOD
|
||||
let datetime = NEW_SESSION_INITIAL_DATE
|
||||
@@ -16,6 +16,7 @@ function newTimelineChart() {
|
||||
layerManager: undefined,
|
||||
plotterManager: undefined,
|
||||
upstreamTimeFrame: undefined,
|
||||
onKeyPressed: onKeyPressed,
|
||||
setDatetime: setDatetime,
|
||||
setTimeFrame: setTimeFrame,
|
||||
physics: physics,
|
||||
@@ -231,6 +232,37 @@ function newTimelineChart() {
|
||||
}
|
||||
}
|
||||
|
||||
function onKeyPressed(event) {
|
||||
|
||||
/*
|
||||
We are going to pass this event to the scales and if they take it return true.
|
||||
*/
|
||||
|
||||
let point = {
|
||||
x: event.x,
|
||||
y: event.y
|
||||
}
|
||||
let container
|
||||
|
||||
if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) {
|
||||
container = thisObject.rateScale.getContainer(point)
|
||||
if (container !== undefined) {
|
||||
thisObject.rateScale.onKeyPressed(event)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) {
|
||||
container = thisObject.timeFrameScale.getContainer(point)
|
||||
if (container !== undefined) {
|
||||
thisObject.timeFrameScale.onKeyPressed(event)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
function onScaleChanged(event) {
|
||||
if (thisObject.rateScale !== undefined) {
|
||||
thisObject.rateScale.onUpstreamScaleChanged(event)
|
||||
@@ -292,8 +324,12 @@ function newTimelineChart() {
|
||||
if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) {
|
||||
container = thisObject.rateScale.getContainer(point, purpose)
|
||||
if (container !== undefined) {
|
||||
if (container.isForThisPurpose(purpose)) {
|
||||
if (purpose === undefined) {
|
||||
return container
|
||||
} else {
|
||||
if (container.isForThisPurpose(purpose)) {
|
||||
return container
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -301,8 +337,12 @@ function newTimelineChart() {
|
||||
if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) {
|
||||
container = thisObject.timeFrameScale.getContainer(point, purpose)
|
||||
if (container !== undefined) {
|
||||
if (container.isForThisPurpose(purpose)) {
|
||||
if (purpose === undefined) {
|
||||
return container
|
||||
} else {
|
||||
if (container.isForThisPurpose(purpose)) {
|
||||
return container
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,7 +272,6 @@ function newSuperalgosDocSpace() {
|
||||
|
||||
function onClosing() {
|
||||
thisObject.contextMenu.removeContextMenuFromScreen()
|
||||
UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered = undefined
|
||||
thisObject.isVisible = false
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ function newFloatingLayer() {
|
||||
|
||||
|
||||
let thisObject = {
|
||||
isProximityPhysicsNeeded: false,
|
||||
addFloatingObject: addFloatingObject,
|
||||
removeFloatingObject: removeFloatingObject,
|
||||
getFloatingObject: getFloatingObject,
|
||||
@@ -145,27 +146,9 @@ function newFloatingLayer() {
|
||||
}
|
||||
|
||||
function draw() {
|
||||
drawInvisibleObjects()
|
||||
drawVisibleObjects()
|
||||
}
|
||||
|
||||
function drawInvisibleObjects() {
|
||||
for (let i = 0; i < invisibleFloatingObjects.length; i++) {
|
||||
let floatingObject = invisibleFloatingObjects[i]
|
||||
floatingObject.drawBackground()
|
||||
}
|
||||
|
||||
for (let i = 0; i < invisibleFloatingObjects.length; i++) {
|
||||
let floatingObject = invisibleFloatingObjects[i]
|
||||
floatingObject.drawMiddleground()
|
||||
}
|
||||
|
||||
for (let i = 0; i < invisibleFloatingObjects.length; i++) {
|
||||
let floatingObject = invisibleFloatingObjects[invisibleFloatingObjects.length - i - 1]
|
||||
floatingObject.drawForeground()
|
||||
}
|
||||
}
|
||||
|
||||
function drawVisibleObjects() {
|
||||
for (let i = 0; i < visibleFloatingObjects.length; i++) {
|
||||
let floatingObject = visibleFloatingObjects[i]
|
||||
@@ -283,12 +266,21 @@ function newFloatingLayer() {
|
||||
*/
|
||||
|
||||
try {
|
||||
|
||||
thisObject.isProximityPhysicsNeeded = false // this might be turned on bu the visiblePhysics downstream if needed.
|
||||
|
||||
makeVisible()
|
||||
makeInvisible()
|
||||
visiblePhysics()
|
||||
enginePhysics()
|
||||
proximityPhysics()
|
||||
|
||||
if (thisObject.isProximityPhysicsNeeded === true) {
|
||||
/*
|
||||
This is an expensive calculation, so we are going to do it only when we need to.
|
||||
*/
|
||||
proximityPhysics()
|
||||
}
|
||||
|
||||
function visiblePhysics() {
|
||||
for (let i = 0; i < visibleFloatingObjects.length; i++) {
|
||||
let floatingObject = visibleFloatingObjects[i]
|
||||
|
||||
@@ -444,6 +444,8 @@ function newUiObject() {
|
||||
if (rightDragging !== true) { return }
|
||||
if (thisObject.payload.chainParent !== undefined) { return }
|
||||
|
||||
UI.projects.superalgos.spaces.floatingSpace.floatingLayer.isProximityPhysicsNeeded = true
|
||||
|
||||
let nearbyFloatingObjects = thisObject.payload.floatingObject.nearbyFloatingObjects
|
||||
let compatibleTypes
|
||||
|
||||
@@ -586,6 +588,8 @@ function newUiObject() {
|
||||
if (rightDragging !== true) { return }
|
||||
if (thisObject.payload.referenceParent !== undefined) { return }
|
||||
|
||||
UI.projects.superalgos.spaces.floatingSpace.floatingLayer.isProximityPhysicsNeeded = true
|
||||
|
||||
let nearbyFloatingObjects = thisObject.payload.floatingObject.nearbyFloatingObjects
|
||||
let compatibleTypes
|
||||
|
||||
|
||||
@@ -358,9 +358,6 @@ function newUiObjectTitle() {
|
||||
let phrases = splitTextIntoPhrases(label, 2)
|
||||
let lineSeparator = thisObject.payload.floatingObject.currentFontSize * 1.2
|
||||
|
||||
if (phrases.length > 3) {
|
||||
let a = 1
|
||||
}
|
||||
for (let i = 0; i < phrases.length; i++) {
|
||||
let phrase = phrases[i]
|
||||
let point = {
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Machine-Learning-Demo","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\": \"2021-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"31e87840-fc8a-4305-a97d-3a78b8e4be61","savedPayload":{"position":{"x":23464.726581780902,"y":29681.25609376178},"targetPosition":{"x":23756.270052277963,"y":29610.528413108954},"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":"ddab2649-221f-40c4-8b8e-b3cbceca0c4b","savedPayload":{"position":{"x":23756.270052277963,"y":29610.528413108954},"targetPosition":{"x":24047.813522775024,"y":29539.800732456126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1bca451f-f059-4dc2-87cb-ba2bb1c16ef4","savedPayload":{"position":{"x":24047.813522775024,"y":29539.800732456126},"targetPosition":{"x":24339.356993272086,"y":29469.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Webhooks","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Webhooks","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Webhooks Check-Webhook","project":"Superalgos","id":"4595558a-d0ba-49b1-9c81-67696f23261c","savedPayload":{"position":{"x":23440.376388007382,"y":29426.249327561927},"targetPosition":{"x":23740.036589762283,"y":29440.52390230905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Check-Webhook","id":"69f37820-ab16-4e19-bfd8-386dd6e249a3"}}}],"id":"a7978877-bdef-4e69-a97d-af0560ef219e","savedPayload":{"position":{"x":23740.036589762283,"y":29440.52390230905},"targetPosition":{"x":24039.696791517184,"y":29454.798477056174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf34c6df-d1ac-4f7c-8a6c-7ed9b6de2e00","savedPayload":{"position":{"x":24039.696791517184,"y":29454.798477056174},"targetPosition":{"x":24339.356993272086,"y":29469.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","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"7cdc33e0-c56b-43ce-95f5-db03a171f021","savedPayload":{"position":{"x":23473.12086766021,"y":29251.430518853074},"targetPosition":{"x":23772.356502043287,"y":29272.832273812845},"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":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"4da5ecc7-48e6-4283-8a2f-512528a28fe4","savedPayload":{"position":{"x":23523.911718429878,"y":29104.679993140577},"targetPosition":{"x":23772.356502043287,"y":29272.832273812845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process DefiniLine truncated
|
||||
{"type":"Workspace","name":"Machine-Learning-Demo","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\": \"2021-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"31e87840-fc8a-4305-a97d-3a78b8e4be61","savedPayload":{"position":{"x":23464.726581780902,"y":29681.25609376178},"targetPosition":{"x":23756.270052277963,"y":29610.528413108954},"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":"ddab2649-221f-40c4-8b8e-b3cbceca0c4b","savedPayload":{"position":{"x":23756.270052277963,"y":29610.528413108954},"targetPosition":{"x":24047.813522775024,"y":29539.800732456126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1bca451f-f059-4dc2-87cb-ba2bb1c16ef4","savedPayload":{"position":{"x":24047.813522775024,"y":29539.800732456126},"targetPosition":{"x":24339.356993272086,"y":29469.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Webhooks","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Webhooks","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Webhooks Check-Webhook","project":"Superalgos","id":"4595558a-d0ba-49b1-9c81-67696f23261c","savedPayload":{"position":{"x":23440.376388007382,"y":29426.249327561927},"targetPosition":{"x":23740.036589762283,"y":29440.52390230905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Check-Webhook","id":"69f37820-ab16-4e19-bfd8-386dd6e249a3"}}}],"id":"a7978877-bdef-4e69-a97d-af0560ef219e","savedPayload":{"position":{"x":23740.036589762283,"y":29440.52390230905},"targetPosition":{"x":24039.696791517184,"y":29454.798477056174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf34c6df-d1ac-4f7c-8a6c-7ed9b6de2e00","savedPayload":{"position":{"x":24039.696791517184,"y":29454.798477056174},"targetPosition":{"x":24339.356993272086,"y":29469.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","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"7cdc33e0-c56b-43ce-95f5-db03a171f021","savedPayload":{"position":{"x":23473.12086766021,"y":29251.430518853074},"targetPosition":{"x":23772.356502043287,"y":29272.832273812845},"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":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"4da5ecc7-48e6-4283-8a2f-512528a28fe4","savedPayload":{"position":{"x":23523.911718429878,"y":29104.679993140577},"targetPosition":{"x":23772.356502043287,"y":29272.832273812845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process DefiniLine truncated
|
||||
@@ -354,25 +354,17 @@
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "optimizer",
|
||||
"label": "Add Optimizer",
|
||||
"relatedUiObject": "Optimizer",
|
||||
"propertyToCheckFor": "compile",
|
||||
"label": "Add Compile",
|
||||
"relatedUiObject": "Compile",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "lossFunction",
|
||||
"label": "Add Loss Function",
|
||||
"relatedUiObject": "Loss Function",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "metrics",
|
||||
"label": "Add Metrics",
|
||||
"relatedUiObject": "Metrics",
|
||||
"propertyToCheckFor": "fitDataset",
|
||||
"label": "Add Fit Dataset",
|
||||
"relatedUiObject": "Fit Dataset",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
@@ -408,6 +400,63 @@
|
||||
"type": "node",
|
||||
"childType": "Core API"
|
||||
},
|
||||
{
|
||||
"name": "compile",
|
||||
"type": "node",
|
||||
"childType": "Compile"
|
||||
},
|
||||
{
|
||||
"name": "fitDataset",
|
||||
"type": "node",
|
||||
"childType": "Fit Dataset"
|
||||
}
|
||||
],
|
||||
"icon": "tensorflow"
|
||||
},
|
||||
{
|
||||
"type": "Compile",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "optimizer",
|
||||
"label": "Add Optimizer",
|
||||
"relatedUiObject": "Optimizer",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "lossFunction",
|
||||
"label": "Add Loss Function",
|
||||
"relatedUiObject": "Loss Function",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "metrics",
|
||||
"label": "Add Metrics",
|
||||
"relatedUiObject": "Metrics",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Model->"
|
||||
},
|
||||
"propertyNameAtParent": "compile",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "optimizer",
|
||||
"type": "node",
|
||||
@@ -426,6 +475,173 @@
|
||||
],
|
||||
"icon": "tensorflow"
|
||||
},
|
||||
{
|
||||
"type": "Fit Dataset",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "verbose",
|
||||
"label": "Add Verbose",
|
||||
"relatedUiObject": "Verbose",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "epochs",
|
||||
"label": "Add Epochs",
|
||||
"relatedUiObject": "Epochs",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "callbacks",
|
||||
"label": "Add Callbacks",
|
||||
"relatedUiObject": "Callbacks",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Model->"
|
||||
},
|
||||
"propertyNameAtParent": "fitDataset",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "verbose",
|
||||
"type": "node",
|
||||
"childType": "Verbose"
|
||||
},
|
||||
{
|
||||
"name": "epochs",
|
||||
"type": "node",
|
||||
"childType": "Epochs"
|
||||
},
|
||||
{
|
||||
"name": "callbacks",
|
||||
"type": "node",
|
||||
"childType": "Callbacks"
|
||||
}
|
||||
],
|
||||
"icon": "tensorflow"
|
||||
},
|
||||
{
|
||||
"type": "Verbose",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n \"value\": 1\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Fit Dataset->"
|
||||
},
|
||||
"propertyNameAtParent": "verbose",
|
||||
"childrenNodesProperties": [],
|
||||
"icon": "tensorflow"
|
||||
},
|
||||
{
|
||||
"type": "Epochs",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n \"value\": 1\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Fit Dataset->"
|
||||
},
|
||||
"propertyNameAtParent": "epochs",
|
||||
"childrenNodesProperties": [],
|
||||
"icon": "tensorflow"
|
||||
},
|
||||
{
|
||||
"type": "Callbacks",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n \"value\": \"\"\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Fit Dataset->"
|
||||
},
|
||||
"propertyNameAtParent": "callbacks",
|
||||
"childrenNodesProperties": [],
|
||||
"icon": "tensorflow"
|
||||
},
|
||||
{
|
||||
"type": "Optimizer",
|
||||
"menuItems": [
|
||||
@@ -455,7 +671,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Model->"
|
||||
"compatibleTypes": "->Compile->"
|
||||
},
|
||||
"propertyNameAtParent": "optimizer",
|
||||
"childrenNodesProperties": [],
|
||||
@@ -490,7 +706,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Model->"
|
||||
"compatibleTypes": "->Compile->"
|
||||
},
|
||||
"propertyNameAtParent": "lossFunction",
|
||||
"childrenNodesProperties": [],
|
||||
@@ -520,12 +736,12 @@
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n \"value\": [\"accuracy\"]\n}"
|
||||
"config": "{ \n \"value\": [\"acc\"]\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Model->"
|
||||
"compatibleTypes": "->Compile->"
|
||||
},
|
||||
"propertyNameAtParent": "metrics",
|
||||
"childrenNodesProperties": [],
|
||||
|
||||
@@ -2,7 +2,14 @@
|
||||
"type": "Dimensionality Units",
|
||||
"definition": {
|
||||
"text": "Positive integer, dimensionality of the output space.",
|
||||
"updated": 1613243190046
|
||||
"updated": 1613243190046,
|
||||
"translations": [
|
||||
{
|
||||
"language": "CN",
|
||||
"text": "Positive integer, dimensionality of the output space. In other words, the amount of neurons at the Artificial Neural Network layer.",
|
||||
"updated": 1613805816485
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -2,6 +2,8 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
|
||||
const MODULE_NAME = 'Time Series Forcasting Tensor Flow JS Learning Algorithm'
|
||||
let thisObject = {
|
||||
loadModel: loadModel,
|
||||
saveModel: saveModel,
|
||||
updateChart: updateChart,
|
||||
mantain: mantain,
|
||||
reset: reset,
|
||||
@@ -26,8 +28,6 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
let tensorFlowAPI
|
||||
let tensorFlowModel
|
||||
let tensorFlowData
|
||||
let features = []
|
||||
let labels = []
|
||||
|
||||
return thisObject
|
||||
|
||||
@@ -114,6 +114,7 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
break
|
||||
}
|
||||
case 'Functional Model': {
|
||||
/* To be implemented some day...*/
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -121,6 +122,7 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
}
|
||||
case 'Code API': {
|
||||
tensorFlowAPI = require("@tensorflow/tfjs-core")
|
||||
/* To be implemented some day...*/
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -178,12 +180,16 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
|
||||
if (layerNode.typeOfLayer.layer.dimensionalityUnits !== undefined) {
|
||||
argsObject.units = layerNode.typeOfLayer.layer.dimensionalityUnits.config.value
|
||||
} else {
|
||||
argsObject.units = 1
|
||||
}
|
||||
if (layerNode.typeOfLayer.layer.activationFunction !== undefined) {
|
||||
argsObject.activation = layerNode.typeOfLayer.layer.activationFunction.config.value
|
||||
}
|
||||
if (layerNode.typeOfLayer.layer.bias !== undefined) {
|
||||
argsObject.useBias = true
|
||||
} else {
|
||||
argsObject.useBias = false
|
||||
}
|
||||
if (layerNode.typeOfLayer.layer.kernel !== undefined) {
|
||||
if (layerNode.typeOfLayer.layer.kernel.kernelInitializer !== undefined) {
|
||||
@@ -227,8 +233,20 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
Check if this is the input layer.
|
||||
*/
|
||||
if (secuentialModel.inputLayer.referenceParent.id === layerNode.id) {
|
||||
/*
|
||||
If there is a explicitly defined Input Shape, then we will take it,
|
||||
otherwise, we will count the amount of features declared.
|
||||
*/
|
||||
if (secuentialModel.inputLayer.inputShape !== undefined) {
|
||||
argsObject.inputShape = secuentialModel.inputLayer.inputShape.config.value
|
||||
if (argsObject.inputShape = secuentialModel.inputLayer.inputShape !== undefined) {
|
||||
if (argsObject.inputShape = secuentialModel.inputLayer.inputShape.config.value !== undefined) {
|
||||
argsObject.inputShape = secuentialModel.inputLayer.inputShape.config.value
|
||||
}
|
||||
}
|
||||
}
|
||||
if (argsObject.inputShape === undefined) {
|
||||
argsObject.inputShape = []
|
||||
argsObject.inputShape.push(secuentialModel.inputLayer.inputFeatures.dataFeatures.length)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,40 +256,46 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function compileModel() {
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.optimizer === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.optimizer.config.value === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.lossFunction === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.lossFunction.config.value === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.metrics === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.metrics.config.value === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
let compileArgs = {
|
||||
optimizer: learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.optimizer.config.value,
|
||||
loss: learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.lossFunction.config.value,
|
||||
metrics: [learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.metrics.config.value]
|
||||
}
|
||||
|
||||
tensorFlowModel.compile(compileArgs)
|
||||
function compileModel() {
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.optimizer === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.optimizer.config.value === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.lossFunction === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.lossFunction.config.value === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.metrics === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.metrics.config.value === undefined) {
|
||||
//TODO
|
||||
return
|
||||
}
|
||||
let compileArgs = {
|
||||
optimizer: learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.optimizer.config.value,
|
||||
loss: learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.lossFunction.config.value /*,
|
||||
metrics: [learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.compile.metrics.config.value]*/
|
||||
}
|
||||
|
||||
tensorFlowModel.compile(compileArgs)
|
||||
|
||||
tensorFlowModel.summary()
|
||||
}
|
||||
|
||||
function finalize() {
|
||||
@@ -287,9 +311,26 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
tensorFlowAPI = undefined
|
||||
tensorFlowModel = undefined
|
||||
tensorFlowData = undefined
|
||||
}
|
||||
|
||||
features = []
|
||||
labels = []
|
||||
async function loadModel() {
|
||||
tensorFlowModel = await tensorFlowAPI.loadLayersModel('file://' + getModelPath() + '/model.json')
|
||||
compileModel()
|
||||
}
|
||||
|
||||
async function saveModel() {
|
||||
await tensorFlowModel.save('file://' + getModelPath())
|
||||
}
|
||||
|
||||
function getModelPath() {
|
||||
let fileName = learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.config.codeName
|
||||
let filePath =
|
||||
global.env.PATH_TO_DATA_STORAGE + '/' +
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT +
|
||||
'/Output/' +
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_FOLDER_NAME
|
||||
|
||||
return filePath + '/' + fileName
|
||||
}
|
||||
|
||||
function updateChart(pChart, pExchange, pMarket) {
|
||||
@@ -309,9 +350,11 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
function reset() {
|
||||
}
|
||||
|
||||
function run(callbackFunction) {
|
||||
async function run(callbackFunction) {
|
||||
|
||||
let layersModel = learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.api.layersModel
|
||||
let features = []
|
||||
let labels = []
|
||||
|
||||
/*
|
||||
Building the Features Tensor
|
||||
@@ -332,44 +375,113 @@ exports.newTensorFlowBotModulesTensorFlowLibrary = function (processIndex) {
|
||||
}
|
||||
|
||||
/*
|
||||
Building the Labels Tensor
|
||||
At this point we need to decide if we are going to learn or going to predict.
|
||||
This is regulated by the backLearningPredictingRatio property at the config
|
||||
of the Learning Algorithm of the Learning Session.
|
||||
*/
|
||||
if (layersModel.outputLayer === undefined) {
|
||||
// TODO
|
||||
}
|
||||
if (layersModel.outputLayer.outputLabels === undefined) {
|
||||
// TODO
|
||||
}
|
||||
learningSystem.evalFormulas(layersModel.outputLayer.outputLabels, layersModel.outputLayer.outputLabels.type)
|
||||
let backLearningPredictingRatio = 0.8 // this is the default value.
|
||||
|
||||
for (let i = 0; i < layersModel.outputLayer.outputLabels.dataLabels.length; i++) {
|
||||
let dataLabel = layersModel.outputLayer.outputLabels.dataLabels[i]
|
||||
if (dataLabel.labelFormula === undefined) { continue }
|
||||
let labelValue = learningSystem.formulas.get(dataLabel.labelFormula.id)
|
||||
labels.push(labelValue)
|
||||
if (sessionParameters.learningAlgorithm !== undefined) {
|
||||
if (sessionParameters.learningAlgorithm.config.backLearningPredictingRatio !== undefined) {
|
||||
backLearningPredictingRatio = sessionParameters.learningAlgorithm.config.backLearningPredictingRatio
|
||||
}
|
||||
}
|
||||
|
||||
tensorFlowData = require("@tensorflow/tfjs-data")
|
||||
let initialCandle = Math.trunc(sessionParameters.timeRange.config.initialDatetime / sessionParameters.timeFrame.config.value)
|
||||
let finalCandle = Math.trunc(sessionParameters.timeRange.config.finalDatetime / sessionParameters.timeFrame.config.value)
|
||||
let currentCandle = Math.trunc(learningEngine.learningCurrent.learningEpisode.candle.begin.value / sessionParameters.timeFrame.config.value)
|
||||
let thresholdCandle = (finalCandle - initialCandle) * backLearningPredictingRatio + initialCandle
|
||||
|
||||
let dataset = tensorFlowData.array([features, labels])
|
||||
|
||||
tensorFlowModel.fitDataset(dataset, { epochs: 5 }).then(info => {
|
||||
console.log('Accuracy', info.history.acc);
|
||||
if (currentCandle < thresholdCandle) {
|
||||
await learn()
|
||||
} else {
|
||||
predict()
|
||||
}
|
||||
|
||||
async function learn() {
|
||||
/*
|
||||
if all is good, return this...
|
||||
Building the Labels Tensor
|
||||
*/
|
||||
callbackFunction(TS.projects.superalgos.globals.standardResponses.DEFAULT_OK_RESPONSE)
|
||||
if (layersModel.outputLayer === undefined) {
|
||||
// TODO
|
||||
}
|
||||
if (layersModel.outputLayer.outputLabels === undefined) {
|
||||
// TODO
|
||||
}
|
||||
learningSystem.evalFormulas(layersModel.outputLayer.outputLabels, layersModel.outputLayer.outputLabels.type)
|
||||
|
||||
});
|
||||
for (let i = 0; i < layersModel.outputLayer.outputLabels.dataLabels.length; i++) {
|
||||
let dataLabel = layersModel.outputLayer.outputLabels.dataLabels[i]
|
||||
if (dataLabel.labelFormula === undefined) { continue }
|
||||
let labelValue = learningSystem.formulas.get(dataLabel.labelFormula.id)
|
||||
labels.push(labelValue)
|
||||
}
|
||||
|
||||
tensorFlowData = require("@tensorflow/tfjs-data")
|
||||
|
||||
function* featuresGenerator() {
|
||||
//console.log('Features: ' + features)
|
||||
yield features
|
||||
}
|
||||
|
||||
/*
|
||||
if something is bad, return this...
|
||||
*/
|
||||
//callbackFunction(TS.projects.superalgos.globals.standardResponses.DEFAULT_FAIL_RESPONSE)
|
||||
function* labelsGenerator() {
|
||||
//console.log('Labels: ' + labels)
|
||||
yield labels
|
||||
}
|
||||
|
||||
const xs = tensorFlowData.generator(featuresGenerator)
|
||||
const ys = tensorFlowData.generator(labelsGenerator)
|
||||
const ds = tensorFlowData.zip({ xs, ys }).shuffle(1).batch(1)
|
||||
|
||||
let verbose = 0
|
||||
let ecpochs = 1
|
||||
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset !== undefined) {
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset.verbose !== undefined) {
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset.verbose.config.value !== undefined) {
|
||||
verbose = learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset.verbose.config.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset !== undefined) {
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset.epochs !== undefined) {
|
||||
if (learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset.epochs.config.value !== undefined) {
|
||||
ecpochs = learningSystem.machineLearningLibrary.typeOfLearning.typeOfModel.model.fitDataset.epochs.config.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await tensorFlowModel.fitDataset(ds, {
|
||||
verbose: verbose,
|
||||
epochs: ecpochs
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
async function predict() {
|
||||
let featuresTensor = tensorFlowBackend.tensor([features])
|
||||
let predictions = tensorFlowModel.predict(featuresTensor, { verbose: 1 })
|
||||
|
||||
/*
|
||||
We will download the predictions to an array, and we will store each one at the
|
||||
learning engine data structure.
|
||||
*/
|
||||
let predictionsArray = predictions.dataSync()
|
||||
predictions.dispose()
|
||||
featuresTensor.dispose()
|
||||
|
||||
for (let i = 0; i < predictionsArray.length; i++) {
|
||||
let prediction = predictionsArray[i]
|
||||
if (isNaN(prediction)) {
|
||||
prediction = 0
|
||||
}
|
||||
if (learningEngine.predictions.predictions[i] === undefined) { continue }
|
||||
learningEngine.predictions.predictions[i].predictionValue.value = prediction
|
||||
learningEngine.predictions.predictions[i].begin.value = learningEngine.learningCurrent.learningEpisode.candle.begin.value
|
||||
learningEngine.predictions.predictions[i].end.value = learningEngine.learningCurrent.learningEpisode.candle.end.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function badDefinitionUnhandledException(err, message, node) {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
@echo off
|
||||
:: BatchGotAdmin
|
||||
::-------------------------------------
|
||||
REM --> Check for permissions
|
||||
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
|
||||
|
||||
REM --> If error flag set, we do not have admin.
|
||||
if '%errorlevel%' NEQ '0' (
|
||||
echo Requesting administrative privileges...
|
||||
goto UACPrompt
|
||||
) else ( goto gotAdmin )
|
||||
|
||||
:UACPrompt
|
||||
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
|
||||
set params = %*:"="
|
||||
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
|
||||
|
||||
"%temp%\getadmin.vbs"
|
||||
del "%temp%\getadmin.vbs"
|
||||
exit /B
|
||||
|
||||
:gotAdmin
|
||||
pushd "%CD%"
|
||||
CD /D "%~dp0"
|
||||
::--------------------------------------
|
||||
::ENTER YOUR CODE BELOW:
|
||||
CLS
|
||||
cd D:\Apps\Superalgos
|
||||
echo Requesting data.
|
||||
echo Requesting data confirmed.
|
||||
echo Asking to launch database.
|
||||
echo Sucesfull patching database.
|
||||
echo Welcome to Superalgos.
|
||||
echo
|
||||
echo ,/((//,
|
||||
echo /(((((((((((((.
|
||||
echo / ((((((((((*
|
||||
echo (((((((((,
|
||||
echo (((((((((
|
||||
echo ((((((((
|
||||
echo (. ((((((((
|
||||
echo ,((. /(((((((
|
||||
echo .(((, /((((((*
|
||||
echo ((((, ((((((. /((((((
|
||||
echo /(((((, /(((((((( .(((((.
|
||||
echo ,/((((((((((, /(((((((((/ *((((
|
||||
echo ,((((((((((((((. /((((((((((/ *(((.
|
||||
echo /(((((((((((((/. //((((((((((((. (((/
|
||||
echo .((((((((((((/ ((((((((((((((((( /((
|
||||
echo (((((((((((, *(((((((((((((((((((((. (((
|
||||
echo /((((((((/ (((((((((((((((((((((((((( /(,
|
||||
echo .((((((( .((((((((((((((((((((((((((((( .(
|
||||
echo .(((((/ *(((((((((((((((((((((((((((((
|
||||
echo ,((((* *((((((((((
|
||||
echo .*// .,*,
|
||||
echo .
|
||||
echo *((((((((((((*.
|
||||
echo ./(((((((((((, .(
|
||||
echo .(((((((((((/. *((*
|
||||
echo ,((((((((((((((((((((((((*
|
||||
echo *(((((((((((((((((((((
|
||||
echo /(((((((((((((((*
|
||||
echo ,/((((((*
|
||||
|
||||
echo choose below
|
||||
ECHO 1.Full Ram requirement
|
||||
ECHO 2.Less Ram requirement
|
||||
ECHO.
|
||||
|
||||
CHOICE /C 12 /M "Enter your choice:"
|
||||
|
||||
pause
|
||||
:: Note - list ERRORLEVELS in decreasing order
|
||||
IF ERRORLEVEL 2 GOTO Less Ram requirement
|
||||
IF ERRORLEVEL 1 GOTO Full Ram requirement
|
||||
|
||||
:Full Ram requirement
|
||||
ECHO Full Ram requirement
|
||||
start node run
|
||||
GOTO End
|
||||
|
||||
:Less Ram requirement
|
||||
ECHO Less Ram requirement
|
||||
start node run minMemo
|
||||
GOTO End
|
||||
|
||||
:End
|
||||
@@ -387,6 +387,10 @@ function newCanvas() {
|
||||
thisObject.mouse.action = 'key down'
|
||||
|
||||
checkMediaRecording(event)
|
||||
|
||||
event.x = thisObject.mouse.position.x
|
||||
event.y = thisObject.mouse.position.y
|
||||
|
||||
UI.projects.superalgos.spaces.chartingSpace.onKeyPressed(event)
|
||||
|
||||
/* Shourcuts to Menu Items */
|
||||
|
||||