Massive Refactoring of Episode for Trading Episode done
This commit is contained in:
1 parent
92f6f4f303
commit
c75fc91211
53 files changed
+544
-541
No files matched your search
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Ethereum Integration 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":"New Project Definition","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"790c56a4-deba-499f-9756-115fdb8cab44","savedPayload":{"position":{"x":25276.356993272086,"y":30604.11115747996},"targetPosition":{"x":25218.356993272086,"y":30630.11115747996},"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":"8a5bbe7c-4a5c-4c4a-ad2b-38cf489c859a","savedPayload":{"position":{"x":25218.356993272086,"y":30630.11115747996},"targetPosition":{"x":25145.356993272086,"y":30724.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"56ceaef5-290c-4512-94c9-2f5fd13486d1","savedPayload":{"position":{"x":25145.356993272086,"y":30724.11115747996},"targetPosition":{"x":25092.356993272086,"y":30693.11115747996},"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":"0a8d8265-e0f8-4f3a-96d0-bfe4bbbd3224","savedPayload":{"position":{"x":25136.356993272086,"y":30684.11115747996},"targetPosition":{"x":25152.356993272086,"y":30784.11115747996},"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":"718a49a9-deae-4849-a796-714feb1e08bc","savedPayload":{"position":{"x":25152.356993272086,"y":30784.11115747996},"targetPosition":{"x":25081.356993272086,"y":30703.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"31747cdc-3783-40be-860f-92e381003ffe","savedPayload":{"position":{"x":25081.356993272086,"y":30703.11115747996},"targetPosition":{"x":25092.356993272086,"y":30693.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"1daa3ec2-c891-44ab-997a-f427a8586716","savedPayload":{"position":{"x":25041.356993272086,"y":30670.11115747996},"targetPosition":{"x":25039.356993272086,"y":30732.11115747996},"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":"8225345d-7cd7-4889-99b0-af692402d269","savedPayload":{"position":{"x":24989.356993272086,"y":30689.11115747996},"targetPosition":{"x":25039.356993272086,"y":30732.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":Line truncated
|
||||
{"type":"Workspace","name":"Ethereum Integration 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":"New Project Definition","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"790c56a4-deba-499f-9756-115fdb8cab44","savedPayload":{"position":{"x":25276.356993272086,"y":30604.11115747996},"targetPosition":{"x":25218.356993272086,"y":30630.11115747996},"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":"8a5bbe7c-4a5c-4c4a-ad2b-38cf489c859a","savedPayload":{"position":{"x":25218.356993272086,"y":30630.11115747996},"targetPosition":{"x":25145.356993272086,"y":30724.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"56ceaef5-290c-4512-94c9-2f5fd13486d1","savedPayload":{"position":{"x":25145.356993272086,"y":30724.11115747996},"targetPosition":{"x":25092.356993272086,"y":30693.11115747996},"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":"0a8d8265-e0f8-4f3a-96d0-bfe4bbbd3224","savedPayload":{"position":{"x":25136.356993272086,"y":30684.11115747996},"targetPosition":{"x":25152.356993272086,"y":30784.11115747996},"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":"718a49a9-deae-4849-a796-714feb1e08bc","savedPayload":{"position":{"x":25152.356993272086,"y":30784.11115747996},"targetPosition":{"x":25081.356993272086,"y":30703.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"31747cdc-3783-40be-860f-92e381003ffe","savedPayload":{"position":{"x":25081.356993272086,"y":30703.11115747996},"targetPosition":{"x":25092.356993272086,"y":30693.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"1daa3ec2-c891-44ab-997a-f427a8586716","savedPayload":{"position":{"x":25041.356993272086,"y":30670.11115747996},"targetPosition":{"x":25039.356993272086,"y":30732.11115747996},"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":"8225345d-7cd7-4889-99b0-af692402d269","savedPayload":{"position":{"x":24989.356993272086,"y":30689.11115747996},"targetPosition":{"x":25039.356993272086,"y":30732.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":Line truncated
|
||||
File renamed without changes.
@@ -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":"Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episode Counters","project":"Superalgos","id":"c0de6b69-60e2-4574-890a-35743f75c569","savedPayload":{"position":{"x":11131.109355831457,"y":18399.62641535906},"targetPosition":{"x":10916.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 Episode Counters","project":"Superalgos","id":"da23a8ff-8b3d-4caa-a27c-f59352911212","savedPayload":{"position":{"x":11054.736015653314,"y":18432.230211733928},"targetPosition":{"x":10916.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 Episode Statistics","project":"Superalgos","id":"dfdcb71e-c123-429e-bc2d-cf33963378d6","savedPayload":{"position":{"x":10973.672144862325,"y":18450.245302086223},"targetPosition":{"x":10916.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 Episode Statistics","project":"Superalgos","id":"fa9e000d-199c-4ed4-b10f-6c586bfc2fa5","savedPayload":{"position":{"x":10890.678276352872,"y":18453.05820412071},"targetPosition":{"x":10916.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":10808.580666776874,"y":18440.573127832315},"targetPosition":{"x":10916.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":10730.175051763214,"y":18413.21523751984},"targetPosition":{"x":10916.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 Episode Balances","project":"Superalgos","id":"7f1463e2-38f8-4850-8198-bf9cee6507df","savedPayload":{"position":{"x":10658.13144049401,"y":18371.916173325702},"targetPosition":{"x":10916.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":"ee987e46-ed3c-4ade-8ab8-e6e503f46963"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"3651b117-ece2-4a25-b2a4-21a54a737d50","savedPayload":{"position":{"x":10594.903191744248,"y":18318.082325348263},"targetPosition":{"x":10916.997186924276,"y":18003.828513487584},"floatingObject":{"isPiLine 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":"Trading Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episode Counters","project":"Superalgos","id":"c0de6b69-60e2-4574-890a-35743f75c569","savedPayload":{"position":{"x":11131.109355831457,"y":18399.62641535906},"targetPosition":{"x":10916.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 Episode Counters","project":"Superalgos","id":"da23a8ff-8b3d-4caa-a27c-f59352911212","savedPayload":{"position":{"x":11054.736015653314,"y":18432.230211733928},"targetPosition":{"x":10916.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 Episode Statistics","project":"Superalgos","id":"dfdcb71e-c123-429e-bc2d-cf33963378d6","savedPayload":{"position":{"x":10973.672144862325,"y":18450.245302086223},"targetPosition":{"x":10916.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 Episode Statistics","project":"Superalgos","id":"fa9e000d-199c-4ed4-b10f-6c586bfc2fa5","savedPayload":{"position":{"x":10890.678276352872,"y":18453.05820412071},"targetPosition":{"x":10916.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":10808.580666776874,"y":18440.573127832315},"targetPosition":{"x":10916.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":10730.175051763214,"y":18413.21523751984},"targetPosition":{"x":10916.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 Episode Balances","project":"Superalgos","id":"7f1463e2-38f8-4850-8198-bf9cee6507df","savedPayload":{"position":{"x":10658.13144049401,"y":18371.916173325702},"targetPosition":{"x":10916.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":"ee987e46-ed3c-4ade-8ab8-e6e503f46963"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"3651b117-ece2-4a25-b2a4-21a54a737d50","savedPayload":{"position":{"x":10594.903191744248,"y":18318.082325348263},"targetPosition":{"x":10916.997186924276,"y":18003.828513487584},"floatingObjectLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Trading Engine","name":"Low-Frequency","project":"Superalgos","tradingCurrent":{"type":"Trading Current","name":"New Trading Current","project":"Superalgos","episode":{"type":"Episode","name":"New Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5eb83933-432a-4029-8a3e-e4d8d760dd27","savedPayload":{"position":{"x":31062.57302866531,"y":23980.75347206287},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"8ba7fe0c-c5df-408e-be8a-ebde90f2a50d","savedPayload":{"position":{"x":31134.200052242173,"y":23887.407317556397},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d7faf864-3fa8-4280-b7d3-a022338b0dfe","savedPayload":{"position":{"x":31220.94829000812,"y":23807.91720300039},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f6722d05-77f9-4a68-ba69-38f56cdc7e91","savedPayload":{"position":{"x":31320.18194065536,"y":23744.698395301668},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"613903ae-45e4-4eee-a178-d6ec049490ec","savedPayload":{"position":{"x":31428.885839923623,"y":23699.671765941916},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b2bfb20d-64d5-4c98-b0cd-a466654c1e6a","savedPayload":{"position":{"x":31543.757074840472,"y":23674.205426269647},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"2615490b-e968-4607-a6e5-009c3ae78957","savedPayload":{"position":{"x":31661.305341060608,"y":23669.07315812922},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"6bcc264b-a189-4aca-8397-d3520bdf4078","savedPayload":{"position":{"x":31777.958993997225,"y":23684.430902891014},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"f7e00135-13b1-4265-95da-dd3a2c763b6f","savedPayload":{"position":{"x":31890.173571435444,"y":23719.812023251856},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d9163f6e-0d50-4ddd-b13b-14f7b4124ec8","savedPayload":{"position":{"x":31994.539490223113,"y":23774.141481773273},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"episodeBaseAsset":{"type":"Episode Base Asset","name":"New Episode Base Asset","project":"Superalgos","balance":{"type":"Balance","name":"Base Asset","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"72f6a6b6-f35b-4d80-b8ad-4a4ed55f2387","savedPaylLine truncated
|
||||
{"type":"Trading Engine","name":"Low-Frequency","project":"Superalgos","tradingCurrent":{"type":"Trading Current","name":"New Trading Current","project":"Superalgos","tradingEpisode":{"type":"Trading Episode","name":"New Trading Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5eb83933-432a-4029-8a3e-e4d8d760dd27","savedPayload":{"position":{"x":31062.57302866531,"y":23980.75347206287},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"8ba7fe0c-c5df-408e-be8a-ebde90f2a50d","savedPayload":{"position":{"x":31134.200052242173,"y":23887.407317556397},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d7faf864-3fa8-4280-b7d3-a022338b0dfe","savedPayload":{"position":{"x":31220.94829000812,"y":23807.91720300039},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f6722d05-77f9-4a68-ba69-38f56cdc7e91","savedPayload":{"position":{"x":31320.18194065536,"y":23744.698395301668},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"613903ae-45e4-4eee-a178-d6ec049490ec","savedPayload":{"position":{"x":31428.885839923623,"y":23699.671765941916},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b2bfb20d-64d5-4c98-b0cd-a466654c1e6a","savedPayload":{"position":{"x":31543.757074840472,"y":23674.205426269647},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"2615490b-e968-4607-a6e5-009c3ae78957","savedPayload":{"position":{"x":31661.305341060608,"y":23669.07315812922},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"6bcc264b-a189-4aca-8397-d3520bdf4078","savedPayload":{"position":{"x":31777.958993997225,"y":23684.430902891014},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"f7e00135-13b1-4265-95da-dd3a2c763b6f","savedPayload":{"position":{"x":31890.173571435444,"y":23719.812023251856},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d9163f6e-0d50-4ddd-b13b-14f7b4124ec8","savedPayload":{"position":{"x":31994.539490223113,"y":23774.141481773273},"targetPosition":{"x":31631.862254589007,"y":24343.43070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"episodeBaseAsset":{"type":"Episode Base Asset","name":"New Episode Base Asset","project":"Superalgos","balance":{"type":"Balance","name":"Base Asset","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"72f6a6b6-f35b-4d80-b8ad-4Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Trading Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","tradingBots":[{"type":"Trading Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Trading","config":"{\n \"codeName\": \"Trading\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Trading-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episode Counters","project":"Superalgos","id":"ec8d74ba-a4ad-417a-b479-6bae95b8a1fe","savedPayload":{"position":{"x":24910.97457254189,"y":18457.46644293786},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3ed03a02-381d-43fe-9faa-761728c53bd8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Counters","project":"Superalgos","id":"22b0af33-8c2f-4194-839b-affd18f298d5","savedPayload":{"position":{"x":24834.601232363748,"y":18490.07023931273},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15f5b150-f1cf-403c-8cb9-2c7c4e1db8e8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Statistics","project":"Superalgos","id":"23ab91ae-2e78-4993-bb69-855f69cef1ce","savedPayload":{"position":{"x":24753.53736157276,"y":18508.085329665024},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fc9dc0f7-35e0-4548-bb91-f920825d694f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Statistics","project":"Superalgos","id":"d0a4515a-279d-4c27-8de2-168108861242","savedPayload":{"position":{"x":24670.543493063306,"y":18510.89823169951},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"91953362-8751-4440-a898-21245cd47c15"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"7fc80977-5b37-413e-8107-0a89a16e08b0","savedPayload":{"position":{"x":24588.445883487308,"y":18498.413155411115},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"17fb41f5-61b5-4433-9a10-950ff8216a7e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"a6888750-1043-420c-9253-633e1399c5e4","savedPayload":{"position":{"x":24510.040268473647,"y":18471.05526509864},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"bbc9467d-28bf-432b-9e49-582d1bcabfb9"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Balances","project":"Superalgos","id":"0ad114df-f076-4a86-8c62-4c4a146da73c","savedPayload":{"position":{"x":24437.996657204443,"y":18429.756200904503},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"acddff59-b51b-4b45-b58f-71d4077755ee"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"04b51302-957d-4365-ad55-9f89d60e261c","savedPayload":{"position":{"x":24374.76840845468,"y":18375.922352927064},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFroLine truncated
|
||||
{"type":"Trading Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","tradingBots":[{"type":"Trading Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Trading","config":"{\n \"codeName\": \"Trading\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Trading-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episode Counters","project":"Superalgos","id":"ec8d74ba-a4ad-417a-b479-6bae95b8a1fe","savedPayload":{"position":{"x":24910.97457254189,"y":18457.46644293786},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3ed03a02-381d-43fe-9faa-761728c53bd8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Counters","project":"Superalgos","id":"22b0af33-8c2f-4194-839b-affd18f298d5","savedPayload":{"position":{"x":24834.601232363748,"y":18490.07023931273},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15f5b150-f1cf-403c-8cb9-2c7c4e1db8e8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Statistics","project":"Superalgos","id":"23ab91ae-2e78-4993-bb69-855f69cef1ce","savedPayload":{"position":{"x":24753.53736157276,"y":18508.085329665024},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fc9dc0f7-35e0-4548-bb91-f920825d694f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Statistics","project":"Superalgos","id":"d0a4515a-279d-4c27-8de2-168108861242","savedPayload":{"position":{"x":24670.543493063306,"y":18510.89823169951},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"91953362-8751-4440-a898-21245cd47c15"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"7fc80977-5b37-413e-8107-0a89a16e08b0","savedPayload":{"position":{"x":24588.445883487308,"y":18498.413155411115},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"17fb41f5-61b5-4433-9a10-950ff8216a7e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"a6888750-1043-420c-9253-633e1399c5e4","savedPayload":{"position":{"x":24510.040268473647,"y":18471.05526509864},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"bbc9467d-28bf-432b-9e49-582d1bcabfb9"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Balances","project":"Superalgos","id":"0ad114df-f076-4a86-8c62-4c4a146da73c","savedPayload":{"position":{"x":24437.996657204443,"y":18429.756200904503},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"acddff59-b51b-4b45-b58f-71d4077755ee"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"04b51302-957d-4365-ad55-9f89d60e261c","savedPayload":{"position":{"x":24374.76840845468,"y":18375.922352927064},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":falsLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Trading System","name":"BB Top Bounce","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"S1 - 3H Down","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"99948a6e-e866-4339-86ba-eac367226312","savedPayload":{"position":{"x":30780.386277758334,"y":30051.498744389715},"targetPosition":{"x":31072.097253877637,"y":30121.53235354649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f0534c68-ab47-4370-b1fd-b3be4c1c262f","savedPayload":{"position":{"x":31072.097253877637,"y":30121.53235354649},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"d3bd1690-1f94-484b-ac3c-7be2c7be85ed","savedPayload":{"position":{"x":30878.398033371974,"y":29838.894811327777},"targetPosition":{"x":31121.103131684456,"y":30015.23038701552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2d7334d-cf52-44d9-a20e-5be201ca6799","savedPayload":{"position":{"x":31121.103131684456,"y":30015.23038701552},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"d1fa707f-eb75-4b1c-8117-688b9b94e539","savedPayload":{"position":{"x":31050.30909116737,"y":29679.98186409081},"targetPosition":{"x":31207.058660582155,"y":29935.773913397035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fb71bcfb-2a40-4e8a-b8e8-b492128350a0","savedPayload":{"position":{"x":31207.058660582155,"y":29935.773913397035},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"8c8c5128-b88b-44a5-8e36-d5c61127404f","savedPayload":{"position":{"x":31269.9475509728,"y":29598.95295834618},"targetPosition":{"x":31316.87789048487,"y":29895.25946052472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"22246178-a8f9-4ec8-b55b-36cf7a24fbff","savedPayload":{"position":{"x":31316.87789048487,"y":29895.25946052472},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Medium, Steep or Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerSubChannel.slope === \"Medium\" || chart.at03hs.bollingerSubChannel.slope === \"Steep\" || chart.at03hs.bollingerSubChannel.slope === \"Extreme\" ","project":"Superalgos","id":"bf8df41c-c62f-4cd6-840e-1dd538359c3b","savedPayload":{"position":{"x":31503.875448310486,"y":29608.144010464657},"targetPosition":{"x":31433.841839153712,"y":29899.85498658396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"diLine truncated
|
||||
{"type":"Trading System","name":"BB Top Bounce","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"S1 - 3H Down","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"99948a6e-e866-4339-86ba-eac367226312","savedPayload":{"position":{"x":30780.386277758334,"y":30051.498744389715},"targetPosition":{"x":31072.097253877637,"y":30121.53235354649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f0534c68-ab47-4370-b1fd-b3be4c1c262f","savedPayload":{"position":{"x":31072.097253877637,"y":30121.53235354649},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"d3bd1690-1f94-484b-ac3c-7be2c7be85ed","savedPayload":{"position":{"x":30878.398033371974,"y":29838.894811327777},"targetPosition":{"x":31121.103131684456,"y":30015.23038701552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2d7334d-cf52-44d9-a20e-5be201ca6799","savedPayload":{"position":{"x":31121.103131684456,"y":30015.23038701552},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"d1fa707f-eb75-4b1c-8117-688b9b94e539","savedPayload":{"position":{"x":31050.30909116737,"y":29679.98186409081},"targetPosition":{"x":31207.058660582155,"y":29935.773913397035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fb71bcfb-2a40-4e8a-b8e8-b492128350a0","savedPayload":{"position":{"x":31207.058660582155,"y":29935.773913397035},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"8c8c5128-b88b-44a5-8e36-d5c61127404f","savedPayload":{"position":{"x":31269.9475509728,"y":29598.95295834618},"targetPosition":{"x":31316.87789048487,"y":29895.25946052472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"22246178-a8f9-4ec8-b55b-36cf7a24fbff","savedPayload":{"position":{"x":31316.87789048487,"y":29895.25946052472},"targetPosition":{"x":31363.80822999694,"y":30191.565962703262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Medium, Steep or Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerSubChannel.slope === \"Medium\" || chart.at03hs.bollingerSubChannel.slope === \"Steep\" || chart.at03hs.bollingerSubChannel.slope === \"Extreme\" ","project":"Superalgos","id":"bf8df41c-c62f-4cd6-840e-1dd538359c3b","savedPayload":{"position":{"x":31503.875448310486,"y":29608.144010464657},"targetPosition":{"x":31433.841839153712,"y":29899.85498658396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"diLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Trading System","name":"Lightning Strike","config":"{ \n\"codeName\": \"Lightning Strike\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"My Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Trigger On","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"e2ea7ded-2be1-43a3-a7fa-de3d9b8eeec4","savedPayload":{"position":{"x":30914.345537114667,"y":38604.01436324851},"targetPosition":{"x":31359.096259318965,"y":38830.60964671243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e693623c-e11f-49e3-99da-1897c7a47563","savedPayload":{"position":{"x":31359.096259318965,"y":38830.60964671243},"targetPosition":{"x":31803.948096117412,"y":39057.27709300647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9135663f-deeb-4b3f-8855-91750810a406","savedPayload":{"position":{"x":31803.948096117412,"y":39057.27709300647},"targetPosition":{"x":32249.606420886405,"y":39284.23888962723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"05f2f6b7-15ab-4386-a299-91a949de634e","savedPayload":{"position":{"x":32249.606420886405,"y":39284.23888962723},"targetPosition":{"x":32695.222935590078,"y":39511.15601095159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"Never Trigger Off","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Above MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"false","project":"Superalgos","id":"0eb59e3b-ccc8-4eab-a1f2-a7c8dea28949","savedPayload":{"position":{"x":32077.836612408217,"y":37610.39742636277},"targetPosition":{"x":32232.059454816794,"y":38085.06041310742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31ab47dd-fe2d-47ac-9a77-08ec8beee068","savedPayload":{"position":{"x":32232.059454816794,"y":38085.06041310742},"targetPosition":{"x":32386.31006690743,"y":38559.9136542021},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa93a965-e836-42b3-9784-79acda1468dd","savedPayload":{"position":{"x":32386.31006690743,"y":38559.9136542021},"targetPosition":{"x":32540.740280232243,"y":39035.59720645897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8a46ebed-4ed4-4b70-882b-416ffa1b37f6","savedPayload":{"position":{"x":32540.740280232243,"y":39035.59720645897},"targetPosition":{"x":32695.222935590078,"y":39511.15601095159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Take Position","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"90dda64b-17fd-469c-8066-3855596795ab","savedPayload":{"position":{"x":33610.303575265214,"y":37702.976973794255},"targetPosition":{"x":33383.88254713001,"y":38147.76160391372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4054a522-7863-4ac2-9eab-26db2a6f037f","savedPayload":{"position":{"x":33383.88254713001,"y":38147.76160391372},"targetPosition":{"x":33148.83631252263,"y":38619.95922965271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0b8d71ab-6430-4e3f-840a-162745ab8d22","savedPayload":{"position":{"x":33148.83631252263,"y":38619.95922965271},"targetPosition":{"x":32922.00489673196,"y":39065.5515863614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":falsLine truncated
|
||||
{"type":"Trading System","name":"Lightning Strike","config":"{ \n\"codeName\": \"Lightning Strike\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"My Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Trigger On","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"e2ea7ded-2be1-43a3-a7fa-de3d9b8eeec4","savedPayload":{"position":{"x":30914.345537114667,"y":38604.01436324851},"targetPosition":{"x":31359.096259318965,"y":38830.60964671243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e693623c-e11f-49e3-99da-1897c7a47563","savedPayload":{"position":{"x":31359.096259318965,"y":38830.60964671243},"targetPosition":{"x":31803.948096117412,"y":39057.27709300647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9135663f-deeb-4b3f-8855-91750810a406","savedPayload":{"position":{"x":31803.948096117412,"y":39057.27709300647},"targetPosition":{"x":32249.606420886405,"y":39284.23888962723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"05f2f6b7-15ab-4386-a299-91a949de634e","savedPayload":{"position":{"x":32249.606420886405,"y":39284.23888962723},"targetPosition":{"x":32695.222935590078,"y":39511.15601095159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"Never Trigger Off","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Above MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"false","project":"Superalgos","id":"0eb59e3b-ccc8-4eab-a1f2-a7c8dea28949","savedPayload":{"position":{"x":32077.836612408217,"y":37610.39742636277},"targetPosition":{"x":32232.059454816794,"y":38085.06041310742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31ab47dd-fe2d-47ac-9a77-08ec8beee068","savedPayload":{"position":{"x":32232.059454816794,"y":38085.06041310742},"targetPosition":{"x":32386.31006690743,"y":38559.9136542021},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa93a965-e836-42b3-9784-79acda1468dd","savedPayload":{"position":{"x":32386.31006690743,"y":38559.9136542021},"targetPosition":{"x":32540.740280232243,"y":39035.59720645897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8a46ebed-4ed4-4b70-882b-416ffa1b37f6","savedPayload":{"position":{"x":32540.740280232243,"y":39035.59720645897},"targetPosition":{"x":32695.222935590078,"y":39511.15601095159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Take Position","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"90dda64b-17fd-469c-8066-3855596795ab","savedPayload":{"position":{"x":33610.303575265214,"y":37702.976973794255},"targetPosition":{"x":33383.88254713001,"y":38147.76160391372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4054a522-7863-4ac2-9eab-26db2a6f037f","savedPayload":{"position":{"x":33383.88254713001,"y":38147.76160391372},"targetPosition":{"x":33148.83631252263,"y":38619.95922965271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0b8d71ab-6430-4e3f-840a-162745ab8d22","savedPayload":{"position":{"x":33148.83631252263,"y":38619.95922965271},"targetPosition":{"x":32922.00489673196,"y":39065.5515863614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":falsLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Trading System","name":"WHB v2","config":"{ \n\"codeName\": \"Sparta-WHB-BTC-USDT\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"Steep","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Steep","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"123b1af6-9639-4b6d-a4c3-7a8a9287169c","savedPayload":{"position":{"x":31075.323254310468,"y":29934.630604067414},"targetPosition":{"x":31240.97284151726,"y":29966.829622037207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"427da1e1-cc4a-4c78-88f6-c254d87cc88f","savedPayload":{"position":{"x":31240.97284151726,"y":29966.829622037207},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"1b9e755e-eefe-4b0d-addd-1e19b6a597b6","savedPayload":{"position":{"x":31138.331069950404,"y":29770.489632553574},"targetPosition":{"x":31282.978051943886,"y":29857.402307694647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"55bf7721-7fb2-42f0-8a3c-c2b97e278a29","savedPayload":{"position":{"x":31282.978051943886,"y":29857.402307694647},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"e8db5fac-2f00-47fe-ac57-dc93ad15f2b5","savedPayload":{"position":{"x":31253.678567961866,"y":29637.797514989197},"targetPosition":{"x":31359.876383951527,"y":29768.940895985063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"11e00b31-e7eb-4fe9-b006-dcd640dbbd3b","savedPayload":{"position":{"x":31359.876383951527,"y":29768.940895985063},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"7671ca91-4b4c-40c5-b0c2-199169b013e8","savedPayload":{"position":{"x":31407.45313773691,"y":29552.558879079636},"targetPosition":{"x":31462.392763801556,"y":29712.11513871202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dd938286-61b3-41e4-bfbb-db34971ffa47","savedPayload":{"position":{"x":31462.392763801556,"y":29712.11513871202},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"19b7edeb-b180-429f-9adf-61bf47262033","savedPayload":{"position":{"x":31581.107296689723,"y":29525.054762303866},"targetPosition":{"x":31578.16220310343,"y":29693.779060861507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8f94ab97-1574-4136-9404-b66dfc1e3b9f","savedPayload":{"position":{"x":31578.16220310343,"y":29693.779060861507},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrLine truncated
|
||||
{"type":"Trading System","name":"WHB v2","config":"{ \n\"codeName\": \"Sparta-WHB-BTC-USDT\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"Steep","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Steep","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"123b1af6-9639-4b6d-a4c3-7a8a9287169c","savedPayload":{"position":{"x":31075.323254310468,"y":29934.630604067414},"targetPosition":{"x":31240.97284151726,"y":29966.829622037207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"427da1e1-cc4a-4c78-88f6-c254d87cc88f","savedPayload":{"position":{"x":31240.97284151726,"y":29966.829622037207},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"1b9e755e-eefe-4b0d-addd-1e19b6a597b6","savedPayload":{"position":{"x":31138.331069950404,"y":29770.489632553574},"targetPosition":{"x":31282.978051943886,"y":29857.402307694647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"55bf7721-7fb2-42f0-8a3c-c2b97e278a29","savedPayload":{"position":{"x":31282.978051943886,"y":29857.402307694647},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"e8db5fac-2f00-47fe-ac57-dc93ad15f2b5","savedPayload":{"position":{"x":31253.678567961866,"y":29637.797514989197},"targetPosition":{"x":31359.876383951527,"y":29768.940895985063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"11e00b31-e7eb-4fe9-b006-dcd640dbbd3b","savedPayload":{"position":{"x":31359.876383951527,"y":29768.940895985063},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"7671ca91-4b4c-40c5-b0c2-199169b013e8","savedPayload":{"position":{"x":31407.45313773691,"y":29552.558879079636},"targetPosition":{"x":31462.392763801556,"y":29712.11513871202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dd938286-61b3-41e4-bfbb-db34971ffa47","savedPayload":{"position":{"x":31462.392763801556,"y":29712.11513871202},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"19b7edeb-b180-429f-9adf-61bf47262033","savedPayload":{"position":{"x":31581.107296689723,"y":29525.054762303866},"targetPosition":{"x":31578.16220310343,"y":29693.779060861507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8f94ab97-1574-4136-9404-b66dfc1e3b9f","savedPayload":{"position":{"x":31578.16220310343,"y":29693.779060861507},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"BB Top Bounce","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)","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Market","project":"Superalgos","id":"64a0f312-b72e-494c-8802-70ebb6238c8b","savedPayload":{"position":{"x":24860.356993272086,"y":30929.11115747996},"targetPosition":{"x":24927.356993272086,"y":31018.11115747996},"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":"7a44ff20-1251-4157-9741-a4c2881b179e","savedPayload":{"position":{"x":24962.356993272086,"y":31086.11115747996},"targetPosition":{"x":24927.356993272086,"y":31018.11115747996},"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":"ef39e485-c27d-443b-aa74-b10b8f8d10ad","savedPayload":{"position":{"x":24927.356993272086,"y":31018.11115747996},"targetPosition":{"x":24963.356993272086,"y":31085.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"01a5f038-ab20-44fe-99b0-0d5d3c0d4bcb","savedPayload":{"position":{"x":24963.356993272086,"y":31085.11115747996},"targetPosition":{"x":24878.356993272086,"y":31053.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Exponential Moving Average (EMA)","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Exponential Moving Average (EMA)","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","project":"Superalgos","id":"c95597e5-5d5c-4dd7-9510-99874a022eac","savedPayload":{"position":{"x":24816.356993272086,"y":31085.11115747996},"targetPosition":{"x":24789.356993272086,"y":31068.11115747996},"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":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Daily","project":"Superalgos","id":"e588dc58-d99c-4938-aaab-747d23408301","savedPayload":{"position":{"x":24833.356993272086,"y":31119.11115747996},"targetPosition":{"x":24789.356993272086,"y":31068.11115747996},"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":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"44fefa5e-341a-43c7-8967-7545a6e229ad","savedPayload":{"position":{"x":24789.356993272086,"y":31068.11115747996},"targetPosition":{"x":24874.356993272086,"y":31135.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1e55a456-ff9c-48bf-b9ea-01082495fcc9","savedPayload":{"position":{"x":24874.356993272086,"y":31135.11115747996},"targetPosition":{"x":24878.356993272086,"y":31053.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task"Line truncated
|
||||
{"type":"Workspace","name":"BB Top Bounce","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)","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Simple Moving Average (SMA) Multi-Period-Market","project":"Superalgos","id":"64a0f312-b72e-494c-8802-70ebb6238c8b","savedPayload":{"position":{"x":24860.356993272086,"y":30929.11115747996},"targetPosition":{"x":24927.356993272086,"y":31018.11115747996},"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":"7a44ff20-1251-4157-9741-a4c2881b179e","savedPayload":{"position":{"x":24962.356993272086,"y":31086.11115747996},"targetPosition":{"x":24927.356993272086,"y":31018.11115747996},"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":"ef39e485-c27d-443b-aa74-b10b8f8d10ad","savedPayload":{"position":{"x":24927.356993272086,"y":31018.11115747996},"targetPosition":{"x":24963.356993272086,"y":31085.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"01a5f038-ab20-44fe-99b0-0d5d3c0d4bcb","savedPayload":{"position":{"x":24963.356993272086,"y":31085.11115747996},"targetPosition":{"x":24878.356993272086,"y":31053.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Exponential Moving Average (EMA)","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Exponential Moving Average (EMA)","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","project":"Superalgos","id":"c95597e5-5d5c-4dd7-9510-99874a022eac","savedPayload":{"position":{"x":24816.356993272086,"y":31085.11115747996},"targetPosition":{"x":24789.356993272086,"y":31068.11115747996},"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":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Daily","project":"Superalgos","id":"e588dc58-d99c-4938-aaab-747d23408301","savedPayload":{"position":{"x":24833.356993272086,"y":31119.11115747996},"targetPosition":{"x":24789.356993272086,"y":31068.11115747996},"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":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"44fefa5e-341a-43c7-8967-7545a6e229ad","savedPayload":{"position":{"x":24789.356993272086,"y":31068.11115747996},"targetPosition":{"x":24874.356993272086,"y":31135.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1e55a456-ff9c-48bf-b9ea-01082495fcc9","savedPayload":{"position":{"x":24874.356993272086,"y":31135.11115747996},"targetPosition":{"x":24878.356993272086,"y":31053.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task"Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Exchange Keys Tests","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\": \"2017-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"f17f9567-af83-4292-a0dc-7c1c9dbf53b8","savedPayload":{"position":{"x":23148.696821492267,"y":29710.450985700143},"targetPosition":{"x":23448.696821492267,"y":29710.450985700143},"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":"9eaa4440-c8bc-4daa-b858-efa1845087de","savedPayload":{"position":{"x":23448.696821492267,"y":29710.450985700143},"targetPosition":{"x":23748.696821492267,"y":29710.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"97e5a05e-9463-41a4-8255-a9487df56496","savedPayload":{"position":{"x":23748.696821492267,"y":29710.450985700143},"targetPosition":{"x":24048.696821492267,"y":29710.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"1ef6762d-a20c-46e0-8183-6aac6dd9073a","savedPayload":{"position":{"x":23364.625131645007,"y":29136.186916988216},"targetPosition":{"x":23624.43275278034,"y":29286.186916988216},"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":"7b44275e-9446-4807-b9c2-4ba1107a5295","savedPayload":{"position":{"x":23474.43275278034,"y":29026.379295852883},"targetPosition":{"x":23624.43275278034,"y":29286.186916988216},"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":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"78c835ef-be5b-4e74-8b0c-610afbbef304","savedPayload":{"position":{"x":23624.43275278034,"y":29286.186916988216},"targetPosition":{"x":23836.564787136303,"y":29498.31895134418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4da2db7-fcae-4918-b38a-5e6966a9994b","savedPayload":{"position":{"x":23836.564787136303,"y":29498.31895134418},"targetPosition":{"x":24048.696821492267,"y":29710.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"22a8694f-078e-4f1f-8470-7a7b25237397","savedPayload":{"position":{"x":23971.05110796151,"y":28820.673237813422},"targetPosition":{"x":24048.696821492267,"y":29110.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"ProcLine truncated
|
||||
{"type":"Workspace","name":"Exchange Keys Tests","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\": \"2017-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"f17f9567-af83-4292-a0dc-7c1c9dbf53b8","savedPayload":{"position":{"x":23148.696821492267,"y":29710.450985700143},"targetPosition":{"x":23448.696821492267,"y":29710.450985700143},"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":"9eaa4440-c8bc-4daa-b858-efa1845087de","savedPayload":{"position":{"x":23448.696821492267,"y":29710.450985700143},"targetPosition":{"x":23748.696821492267,"y":29710.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"97e5a05e-9463-41a4-8255-a9487df56496","savedPayload":{"position":{"x":23748.696821492267,"y":29710.450985700143},"targetPosition":{"x":24048.696821492267,"y":29710.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"1ef6762d-a20c-46e0-8183-6aac6dd9073a","savedPayload":{"position":{"x":23364.625131645007,"y":29136.186916988216},"targetPosition":{"x":23624.43275278034,"y":29286.186916988216},"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":"7b44275e-9446-4807-b9c2-4ba1107a5295","savedPayload":{"position":{"x":23474.43275278034,"y":29026.379295852883},"targetPosition":{"x":23624.43275278034,"y":29286.186916988216},"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":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"78c835ef-be5b-4e74-8b0c-610afbbef304","savedPayload":{"position":{"x":23624.43275278034,"y":29286.186916988216},"targetPosition":{"x":23836.564787136303,"y":29498.31895134418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4da2db7-fcae-4918-b38a-5e6966a9994b","savedPayload":{"position":{"x":23836.564787136303,"y":29498.31895134418},"targetPosition":{"x":24048.696821492267,"y":29710.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"22a8694f-078e-4f1f-8470-7a7b25237397","savedPayload":{"position":{"x":23971.05110796151,"y":28820.673237813422},"targetPosition":{"x":24048.696821492267,"y":29110.450985700143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"ProcLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Getting Started","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b","savedPayload":{"position":{"x":23490.023749611923,"y":29239.135911211026},"targetPosition":{"x":23779.801497498644,"y":29316.781624741783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"343313ae-5705-484d-8bf8-aed25ba61cfa","savedPayload":{"position":{"x":23779.801497498644,"y":29316.781624741783},"targetPosition":{"x":24069.579245385365,"y":29394.42733827254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8f38508-1cac-4ab1-815f-d338fc813377","savedPayload":{"position":{"x":24069.579245385365,"y":29394.42733827254},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f","savedPayload":{"position":{"x":23799.549372136753,"y":28802.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7c8b312c-09bf-4c59-853f-1592391a9c57","savedPayload":{"position":{"x":24059.356993272086,"y":28652.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"8d58e84b-d7ef-464f-8079-0ec0887e3da3","savedPayload":{"position":{"x":24059.356993272086,"y":28952.457809532632},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf29e3bd-9386-408b-9091-042da0c53e81","savedPayload":{"position":{"x":24209.356993272086,"y":29212.265430667965},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"a707814e-b81b-4102-9b5b-4e2fe969324f","savedPayload":{"position":{"x":24437.002706802843,"y":28602.739808143135},"targetPosition":{"x":24514.6484203336,"y":28892.517556029856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"refeLine truncated
|
||||
{"type":"Workspace","name":"Getting Started","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b","savedPayload":{"position":{"x":23490.023749611923,"y":29239.135911211026},"targetPosition":{"x":23779.801497498644,"y":29316.781624741783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"343313ae-5705-484d-8bf8-aed25ba61cfa","savedPayload":{"position":{"x":23779.801497498644,"y":29316.781624741783},"targetPosition":{"x":24069.579245385365,"y":29394.42733827254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8f38508-1cac-4ab1-815f-d338fc813377","savedPayload":{"position":{"x":24069.579245385365,"y":29394.42733827254},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f","savedPayload":{"position":{"x":23799.549372136753,"y":28802.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7c8b312c-09bf-4c59-853f-1592391a9c57","savedPayload":{"position":{"x":24059.356993272086,"y":28652.457809532632},"targetPosition":{"x":24059.356993272086,"y":28952.457809532632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"8d58e84b-d7ef-464f-8079-0ec0887e3da3","savedPayload":{"position":{"x":24059.356993272086,"y":28952.457809532632},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf29e3bd-9386-408b-9091-042da0c53e81","savedPayload":{"position":{"x":24209.356993272086,"y":29212.265430667965},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"a707814e-b81b-4102-9b5b-4e2fe969324f","savedPayload":{"position":{"x":24437.002706802843,"y":28602.739808143135},"targetPosition":{"x":24514.6484203336,"y":28892.517556029856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"refeLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Trading System Design Tutorials","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d0ff77d8-76de-4d50-840a-e50a55ad7d1b","savedPayload":{"position":{"x":23464.287287440642,"y":29377.997434862405},"targetPosition":{"x":23762.643856051123,"y":29409.355973842703},"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":"b4e33f51-f9ff-4ef3-a9b7-ccb904163cae","savedPayload":{"position":{"x":23762.643856051123,"y":29409.355973842703},"targetPosition":{"x":24061.000424661604,"y":29440.714512823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"23ae53f9-b478-4eb4-96e7-12d07d7ae4f0","savedPayload":{"position":{"x":24061.000424661604,"y":29440.714512823},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"dcf3d790-5362-4a95-b977-82d0cf0e07f1","savedPayload":{"position":{"x":23646.16814072914,"y":28934.397538066118},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"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":"775fadbd-5b55-41b2-81ac-454f5e52dca6","savedPayload":{"position":{"x":23750.078387481142,"y":28818.993517604355},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"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":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"fc478301-77ac-4396-bd3b-915b4c681fa0","savedPayload":{"position":{"x":23913.47009798565,"y":29070.59468798798},"targetPosition":{"x":24136.413545628868,"y":29271.33386989564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30054a4b-7c93-4a3a-a6db-2e0d38507b2e","savedPayload":{"position":{"x":24136.413545628868,"y":29271.33386989564},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"bf0f739f-98b7-4c73-ae06-8d3fe83147ce","savedPayload":{"position":{"x":24098.412828859568,"y":28617.882534106506},"targetPosition":{"x":24234.60997878143,"y":28885.184491363016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"PLine truncated
|
||||
{"type":"Workspace","name":"Trading System Design Tutorials","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataTasks":{"type":"Data Tasks","name":"New Data Tasks","project":"Superalgos","projectDataTasks":[{"type":"Project Data Tasks","name":"Superalgos","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d0ff77d8-76de-4d50-840a-e50a55ad7d1b","savedPayload":{"position":{"x":23464.287287440642,"y":29377.997434862405},"targetPosition":{"x":23762.643856051123,"y":29409.355973842703},"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":"b4e33f51-f9ff-4ef3-a9b7-ccb904163cae","savedPayload":{"position":{"x":23762.643856051123,"y":29409.355973842703},"targetPosition":{"x":24061.000424661604,"y":29440.714512823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"23ae53f9-b478-4eb4-96e7-12d07d7ae4f0","savedPayload":{"position":{"x":24061.000424661604,"y":29440.714512823},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"dcf3d790-5362-4a95-b977-82d0cf0e07f1","savedPayload":{"position":{"x":23646.16814072914,"y":28934.397538066118},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"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":"775fadbd-5b55-41b2-81ac-454f5e52dca6","savedPayload":{"position":{"x":23750.078387481142,"y":28818.993517604355},"targetPosition":{"x":23913.47009798565,"y":29070.59468798798},"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":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"fc478301-77ac-4396-bd3b-915b4c681fa0","savedPayload":{"position":{"x":23913.47009798565,"y":29070.59468798798},"targetPosition":{"x":24136.413545628868,"y":29271.33386989564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30054a4b-7c93-4a3a-a6db-2e0d38507b2e","savedPayload":{"position":{"x":24136.413545628868,"y":29271.33386989564},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"bf0f739f-98b7-4c73-ae06-8d3fe83147ce","savedPayload":{"position":{"x":24098.412828859568,"y":28617.882534106506},"targetPosition":{"x":24234.60997878143,"y":28885.184491363016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"PLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"type":"Workspace","name":"Weak-hands Buster v2","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":"EMA","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"EMA","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","project":"Superalgos","id":"9adffd60-8756-44f0-9290-692711f43349","savedPayload":{"position":{"x":23320.126508730755,"y":29392.688294073963},"targetPosition":{"x":23620.126508730755,"y":29392.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":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Daily","project":"Superalgos","id":"559fc728-018a-4e8e-a5fa-1e37958e4f6c","savedPayload":{"position":{"x":23470.126508730755,"y":29132.88067293863},"targetPosition":{"x":23620.126508730755,"y":29392.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":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"82a8c05f-a6f6-4728-8271-7b327c2b72ee","savedPayload":{"position":{"x":23620.126508730755,"y":29392.688294073963},"targetPosition":{"x":23879.934129866087,"y":29542.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8ae4fc50-8c1f-4e45-9ffd-fad368816b9a","savedPayload":{"position":{"x":23879.934129866087,"y":29542.688294073963},"targetPosition":{"x":24139.74175100142,"y":29692.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51b49b9d-cb97-4d98-ad8f-9f691320bac2","savedPayload":{"position":{"x":24139.74175100142,"y":29692.688294073963},"targetPosition":{"x":24399.549372136753,"y":29842.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63728769-73e4-474e-8aa3-0d82bedca08e","savedPayload":{"position":{"x":24399.549372136753,"y":29842.688294073963},"targetPosition":{"x":24659.356993272086,"y":29992.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":"149bc037-9762-4737-b1b8-945b5ccee230","savedPayload":{"position":{"x":23931.241698334637,"y":28863.681567010735},"targetPosition":{"x":24173.94679664712,"y":29040.017142698478},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"507bc325-1cbd-40f4-85eb-cfe77b78000e","savedPayload":{"position":{"x":24173.94679664712,"y":29040.017142698478},"targetPosition":{"x":24416.651894959603,"y":29216.35271838622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c28a4a4-86da-43be-9e89-d01b202f27eb","sLine truncated
|
||||
{"type":"Workspace","name":"Weak-hands Buster v2","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":"EMA","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"EMA","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","project":"Superalgos","id":"9adffd60-8756-44f0-9290-692711f43349","savedPayload":{"position":{"x":23320.126508730755,"y":29392.688294073963},"targetPosition":{"x":23620.126508730755,"y":29392.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":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Daily","project":"Superalgos","id":"559fc728-018a-4e8e-a5fa-1e37958e4f6c","savedPayload":{"position":{"x":23470.126508730755,"y":29132.88067293863},"targetPosition":{"x":23620.126508730755,"y":29392.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":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"82a8c05f-a6f6-4728-8271-7b327c2b72ee","savedPayload":{"position":{"x":23620.126508730755,"y":29392.688294073963},"targetPosition":{"x":23879.934129866087,"y":29542.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8ae4fc50-8c1f-4e45-9ffd-fad368816b9a","savedPayload":{"position":{"x":23879.934129866087,"y":29542.688294073963},"targetPosition":{"x":24139.74175100142,"y":29692.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51b49b9d-cb97-4d98-ad8f-9f691320bac2","savedPayload":{"position":{"x":24139.74175100142,"y":29692.688294073963},"targetPosition":{"x":24399.549372136753,"y":29842.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63728769-73e4-474e-8aa3-0d82bedca08e","savedPayload":{"position":{"x":24399.549372136753,"y":29842.688294073963},"targetPosition":{"x":24659.356993272086,"y":29992.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":"149bc037-9762-4737-b1b8-945b5ccee230","savedPayload":{"position":{"x":23931.241698334637,"y":28863.681567010735},"targetPosition":{"x":24173.94679664712,"y":29040.017142698478},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"507bc325-1cbd-40f4-85eb-cfe77b78000e","savedPayload":{"position":{"x":24173.94679664712,"y":29040.017142698478},"targetPosition":{"x":24416.651894959603,"y":29216.35271838622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c28a4a4-86da-43be-9e89-d01b202f27eb","sLine truncated
|
||||
@@ -3117,7 +3117,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "Episode",
|
||||
"type": "Trading Episode",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
@@ -3140,7 +3140,7 @@
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Current->"
|
||||
},
|
||||
"propertyNameAtParent": "episode",
|
||||
"propertyNameAtParent": "tradingEpisode",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "serialNumber",
|
||||
@@ -3274,7 +3274,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "episodeCounters",
|
||||
"childrenNodesProperties": [
|
||||
@@ -3872,7 +3872,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "episodeStatistics",
|
||||
"childrenNodesProperties": [
|
||||
@@ -4624,7 +4624,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "episodeBaseAsset",
|
||||
"childrenNodesProperties": [
|
||||
@@ -4712,7 +4712,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "episodeQuotedAsset",
|
||||
"childrenNodesProperties": [
|
||||
@@ -5741,9 +5741,9 @@
|
||||
"propertyNameAtParent": "tradingCurrent",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "episode",
|
||||
"name": "tradingEpisode",
|
||||
"type": "node",
|
||||
"childType": "Episode",
|
||||
"childType": "Trading Episode",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
@@ -5834,7 +5834,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "balance"
|
||||
},
|
||||
@@ -5968,7 +5968,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "distanceToEvent",
|
||||
"childrenNodesProperties": [
|
||||
@@ -7064,7 +7064,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->Strategy->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
"compatibleTypes": "->Trading Episode->Strategy->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
},
|
||||
"propertyNameAtParent": "status"
|
||||
},
|
||||
@@ -7280,7 +7280,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->Strategy->Position->Market Order->Limit Order->"
|
||||
"compatibleTypes": "->Trading Episode->Strategy->Position->Market Order->Limit Order->"
|
||||
},
|
||||
"propertyNameAtParent": "serialNumber"
|
||||
},
|
||||
@@ -7334,7 +7334,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->Strategy->Position->Market Order->Limit Order->"
|
||||
"compatibleTypes": "->Trading Episode->Strategy->Position->Market Order->Limit Order->"
|
||||
},
|
||||
"propertyNameAtParent": "identifier"
|
||||
},
|
||||
@@ -7496,7 +7496,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->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->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->"
|
||||
},
|
||||
"propertyNameAtParent": "begin"
|
||||
},
|
||||
@@ -7550,7 +7550,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->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->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->"
|
||||
},
|
||||
"propertyNameAtParent": "end"
|
||||
},
|
||||
@@ -7876,7 +7876,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
"compatibleTypes": "->Trading Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
},
|
||||
"propertyNameAtParent": "beginRate"
|
||||
},
|
||||
@@ -7930,7 +7930,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
"compatibleTypes": "->Trading Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
},
|
||||
"propertyNameAtParent": "endRate"
|
||||
},
|
||||
@@ -8762,7 +8762,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->Strategy->->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
"compatibleTypes": "->Trading Episode->Strategy->->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->"
|
||||
},
|
||||
"propertyNameAtParent": "exitType"
|
||||
},
|
||||
@@ -8816,7 +8816,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "processDate"
|
||||
},
|
||||
@@ -8870,7 +8870,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "headOfTheMarket"
|
||||
},
|
||||
@@ -8948,7 +8948,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "candle",
|
||||
"childrenNodesProperties": [
|
||||
@@ -9039,7 +9039,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Episode->"
|
||||
"compatibleTypes": "->Trading Episode->"
|
||||
},
|
||||
"propertyNameAtParent": "cycle",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value = \n((( tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value +\ntradingEngine.current.episode.episodeBaseAsset.profitLoss.value ) / \ntradingEngine.current.episode.episodeBaseAsset.beginBalance.value) ^\n(365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value)) - 1\n\ntradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = \n((( tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value +\ntradingEngine.current.episode.episodeQuotedAsset.profitLoss.value ) / \ntradingEngine.current.episode.episodeQuotedAsset.beginBalance.value) ^\n(365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value)) - 1",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.annualizedRateOfReturn.value = \n((( tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value +\ntradingEngine.current.tradingEpisode.episodeBaseAsset.profitLoss.value ) / \ntradingEngine.current.tradingEpisode.episodeBaseAsset.beginBalance.value) ^\n(365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value)) - 1\n\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.annualizedRateOfReturn.value = \n((( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value +\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.profitLoss.value ) / \ntradingEngine.current.tradingEpisode.episodeQuotedAsset.beginBalance.value) ^\n(365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value)) - 1",
|
||||
"updated": 1609925166406
|
||||
},
|
||||
{
|
||||
@@ -40,7 +40,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value = \nMath.pow(\n ( tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value +\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value ) / \n tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value\n , \n (365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value)\n ) - 1\n\ntradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = \nMath.pow(\n ( tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value ) / \n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value\n , \n (365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value)\n ) - 1",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.annualizedRateOfReturn.value = \nMath.pow(\n ( tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value ) / \n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value\n , \n (365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value)\n ) - 1\n\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.annualizedRateOfReturn.value = \nMath.pow(\n ( tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value ) / \n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value\n , \n (365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value)\n ) - 1",
|
||||
"updated": 1609925205928
|
||||
},
|
||||
{
|
||||
@@ -57,7 +57,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeStatistics.annualizedRateOfReturn.value =\nMath.pow(\n (\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * \n tradingEngine.tradingCurrent.episode.beginRate.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value +\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value\n ) / \n (\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * \n tradingEngine.tradingCurrent.episode.beginRate.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value \n ) \n , \n (\n 365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value\n ) \n ) - 1",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.annualizedRateOfReturn.value =\nMath.pow(\n (\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * \n tradingEngine.tradingCurrent.tradingEpisode.beginRate.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value\n ) / \n (\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * \n tradingEngine.tradingCurrent.tradingEpisode.beginRate.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value \n ) \n , \n (\n 365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value\n ) \n ) - 1",
|
||||
"updated": 1609925262959
|
||||
},
|
||||
{
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "function orderRate() {\nconst ORDER_STEP_NUMBER = 1 // Secuential step number, starting with 1 from the closest to the price.\nconst BUY_SELL_SIGN = -1 // 1 for buy orders, -1 for sell orders.\nconst STEP_SEPARATION = 0.15 // % of separation of stair steps between them.\nconst BASE_FACTOR = 0.2 // % above or below bollinger band without bias.\nconst BIAS_FACTOR = 0.3 // % to move the whole stair of orders up or down depending on the bias.\nconst BAND_RATE = chart.at01min.bollingerBand.lowerBand // Upper Bollinger Band for sell orders, and Lower for buy orders.\nlet inbalance = tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value - tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value\nlet BIAS_SIGN\nif (inbalance === 0) {\nBIAS_SIGN = 0\n}\nif (inbalance < 0) {\nBIAS_SIGN = + 1\n}\nif (inbalance > 0) {\nBIAS_SIGN = - 1\n}\nlet rate = BAND_RATE + BUY_SELL_SIGN BAND_RATE (BASE_FACTOR + ORDER_STEP_NUMBER STEP_SEPARATION + BIAS_SIGN BIAS_FACTOR) / 100\nreturn rate\n}\norderRate()",
|
||||
"text": "function orderRate() {\nconst ORDER_STEP_NUMBER = 1 // Secuential step number, starting with 1 from the closest to the price.\nconst BUY_SELL_SIGN = -1 // 1 for buy orders, -1 for sell orders.\nconst STEP_SEPARATION = 0.15 // % of separation of stair steps between them.\nconst BASE_FACTOR = 0.2 // % above or below bollinger band without bias.\nconst BIAS_FACTOR = 0.3 // % to move the whole stair of orders up or down depending on the bias.\nconst BAND_RATE = chart.at01min.bollingerBand.lowerBand // Upper Bollinger Band for sell orders, and Lower for buy orders.\nlet inbalance = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value - tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value\nlet BIAS_SIGN\nif (inbalance === 0) {\nBIAS_SIGN = 0\n}\nif (inbalance < 0) {\nBIAS_SIGN = + 1\n}\nif (inbalance > 0) {\nBIAS_SIGN = - 1\n}\nlet rate = BAND_RATE + BUY_SELL_SIGN BAND_RATE (BASE_FACTOR + ORDER_STEP_NUMBER STEP_SEPARATION + BIAS_SIGN BIAS_FACTOR) / 100\nreturn rate\n}\norderRate()",
|
||||
"updated": 1609346807464
|
||||
}
|
||||
]
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value =\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value -\n sessionParameters.sessionBaseAsset.config.initialBalance\n \ntradingEngine.current.episode.episodeQuotedAsset.profitLoss.value =\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value -\n sessionParameters.sessionQuotedAsset.config.initialBalance",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value -\n sessionParameters.sessionBaseAsset.config.initialBalance\n \ntradingEngine.current.tradingEpisode.episodeQuotedAsset.profitLoss.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value -\n sessionParameters.sessionQuotedAsset.config.initialBalance",
|
||||
"updated": 1609880593226
|
||||
},
|
||||
{
|
||||
@@ -45,7 +45,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.position.positionBaseAsset.profitLoss.value =\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value -\n tradingEngine.tradingCurrent.position.positionBaseAsset.beginBalance\n \ntradingEngine.current.position.positionQuotedAsset.profitLoss.value =\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value -\n tradingEngine.tradingCurrent.position.positionQuotedAsset.beginBalance",
|
||||
"text": "tradingEngine.tradingCurrent.position.positionBaseAsset.profitLoss.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value -\n tradingEngine.tradingCurrent.position.positionBaseAsset.beginBalance\n \ntradingEngine.current.position.positionQuotedAsset.profitLoss.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value -\n tradingEngine.tradingCurrent.position.positionQuotedAsset.beginBalance",
|
||||
"updated": 1609880668611
|
||||
},
|
||||
{
|
||||
@@ -66,7 +66,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeStatistics.profitLoss.value =\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value * \n tradingEngine.tradingCurrent.episode.candle.close.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.profitLoss.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value * \n tradingEngine.tradingCurrent.tradingEpisode.candle.close.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value",
|
||||
"updated": 1609880717964
|
||||
},
|
||||
{
|
||||
@@ -75,7 +75,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.position.positionStatistics.profitLoss.value =\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value * \n tradingEngine.tradingCurrent.position.endRate.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value",
|
||||
"text": "tradingEngine.tradingCurrent.position.positionStatistics.profitLoss.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value * \n tradingEngine.tradingCurrent.position.endRate.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value",
|
||||
"updated": 1609880790493
|
||||
},
|
||||
{
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.ROI.value =\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value /\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * 100 \n \ntradingEngine.current.episode.episodeQuotedAsset.ROI.value =\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value /\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value * 100",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.ROI.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value /\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * 100 \n \ntradingEngine.current.tradingEpisode.episodeQuotedAsset.ROI.value =\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value /\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value * 100",
|
||||
"updated": 1611332768337
|
||||
},
|
||||
{
|
||||
@@ -71,7 +71,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeStatistics.ROI.value =\n (\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value * \n tradingEngine.tradingCurrent.episode.endRate.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value\n ) / (\n tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * \n tradingEngine.tradingCurrent.episode.beginRate.value +\n tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value\n ) * 100",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.ROI.value =\n (\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value * \n tradingEngine.tradingCurrent.tradingEpisode.endRate.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value\n ) / (\n tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * \n tradingEngine.tradingCurrent.tradingEpisode.beginRate.value +\n tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value\n ) * 100",
|
||||
"updated": 1611332824026
|
||||
},
|
||||
{
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The horizontal segment marks the target rate defined at the open stage. If you are using market orders to take the position, then using tradingEngine.tradingCurrent.episode.candle.close.value may offer a good representation of the rate of market orders. If you are using limit orders, then you may decide at which rate you wish to take the position, and the horizontal segment of the triangle will match the chosen rate."
|
||||
"text": "The horizontal segment marks the target rate defined at the open stage. If you are using market orders to take the position, then using tradingEngine.tradingCurrent.tradingEpisode.candle.close.value may offer a good representation of the rate of market orders. If you are using limit orders, then you may decide at which rate you wish to take the position, and the horizontal segment of the triangle will match the chosen rate."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -105,7 +105,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The difference in rate between the moment in time the target is hit and the time the 1-hour candle closes may be significant. As a result, if the close stage target rate is defined as tradingEngine.tradingCurrent.episode.candle.close.value, the resulting simulation may show significant slippage, and diverge from what the trade would look like if running on the 1-minute time frame, like you would when trading live."
|
||||
"text": "The difference in rate between the moment in time the target is hit and the time the 1-hour candle closes may be significant. As a result, if the close stage target rate is defined as tradingEngine.tradingCurrent.tradingEpisode.candle.close.value, the resulting simulation may show significant slippage, and diverge from what the trade would look like if running on the 1-minute time frame, like you would when trading live."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -113,7 +113,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "targetRate()\n\nfunction targetRate() {\n switch (tradingEngine.tradingCurrent.position.exitType.value) {\n case 'No Exit': {\n return tradingEngine.tradingCurrent.episode.candle.close.value\n break\n }\n case 'Take Profit': {\n return tradingEngine.tradingCurrent.position.takeProfit.finalValue.value\n break\n }\n case 'Stop Loss': {\n return tradingEngine.tradingCurrent.position.stopLoss.finalValue.value\n break\n }\n }\n}",
|
||||
"text": "targetRate()\n\nfunction targetRate() {\n switch (tradingEngine.tradingCurrent.position.exitType.value) {\n case 'No Exit': {\n return tradingEngine.tradingCurrent.tradingEpisode.candle.close.value\n break\n }\n case 'Take Profit': {\n return tradingEngine.tradingCurrent.position.takeProfit.finalValue.value\n break\n }\n case 'Stop Loss': {\n return tradingEngine.tradingCurrent.position.stopLoss.finalValue.value\n break\n }\n }\n}",
|
||||
"updated": 1609596984516
|
||||
},
|
||||
{
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value"
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -58,7 +58,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value"
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "targetRate()\n\nfunction targetRate() {\n switch (tradingEngine.tradingCurrent.position.exitType.value) {\n case 'No Exit': {\n return tradingEngine.tradingCurrent.episode.candle.close.value\n break\n }\n case 'Take Profit': {\n return tradingEngine.tradingCurrent.position.takeProfit.finalValue.value\n break\n }\n case 'Stop Loss': {\n return tradingEngine.tradingCurrent.position.stopLoss.finalValue.value\n break\n }\n }\n}",
|
||||
"text": "targetRate()\n\nfunction targetRate() {\n switch (tradingEngine.tradingCurrent.position.exitType.value) {\n case 'No Exit': {\n return tradingEngine.tradingCurrent.tradingEpisode.candle.close.value\n break\n }\n case 'Take Profit': {\n return tradingEngine.tradingCurrent.position.takeProfit.finalValue.value\n break\n }\n case 'Stop Loss': {\n return tradingEngine.tradingCurrent.position.stopLoss.finalValue.value\n break\n }\n }\n}",
|
||||
"updated": 1611866140829
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"type": "Episode",
|
||||
"type": "Trading Episode",
|
||||
"definition": {
|
||||
"text": "Episode is the object that handles the information corresponding to the whole run of the trading bot—beginning to end—between the specified initial datetime and final datetime, in the time range parameter of the trading session."
|
||||
},
|
||||
+2
-2
@@ -36,7 +36,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "(tradingEngine.tradingCurrent.episode.cycle.value === 'First')"
|
||||
"text": "(tradingEngine.tradingCurrent.tradingEpisode.cycle.value === 'First')"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
@@ -78,7 +78,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "(tradingEngine.tradingCurrent.episode.cycle.value === 'Second')"
|
||||
"text": "(tradingEngine.tradingCurrent.tradingEpisode.cycle.value === 'Second')"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngineOrder.rate.value = tradingEngine.tradingCurrent.episode.candle.close.value",
|
||||
"text": "tradingEngineOrder.rate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value",
|
||||
"updated": 1610220056132
|
||||
},
|
||||
{
|
||||
@@ -209,7 +209,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value -\ntradingEngineOrder.orderQuotedAsset.size.value => 0",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value -\ntradingEngineOrder.orderQuotedAsset.size.value => 0",
|
||||
"updated": 1610220335526
|
||||
},
|
||||
{
|
||||
@@ -218,7 +218,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngineOrder.orderQuotedAsset.size.value =\ntradingEngine.current.episode.episodeQuotedAsset.balance.value",
|
||||
"text": "tradingEngineOrder.orderQuotedAsset.size.value =\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.balance.value",
|
||||
"updated": 1610220358264
|
||||
},
|
||||
{
|
||||
|
||||
+4
-4
@@ -190,7 +190,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngineOrder.orderStatistics.actualRate.value =\ntradingEngine.current.episode.candle.max.value",
|
||||
"text": "tradingEngineOrder.orderStatistics.actualRate.value =\ntradingEngine.current.tradingEpisode.candle.max.value",
|
||||
"updated": 1610223027648
|
||||
},
|
||||
{
|
||||
@@ -211,7 +211,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngineOrder.orderStatistics.actualRate.value =\ntradingEngine.current.episode.candle.min.value",
|
||||
"text": "tradingEngineOrder.orderStatistics.actualRate.value =\ntradingEngine.current.tradingEpisode.candle.min.value",
|
||||
"updated": 1610223044937
|
||||
},
|
||||
{
|
||||
@@ -270,7 +270,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.candle.min.value <=\ntradingEngineOrder.actualRate.value",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.candle.min.value <=\ntradingEngineOrder.actualRate.value",
|
||||
"updated": 1610223130690
|
||||
},
|
||||
{
|
||||
@@ -279,7 +279,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.candle.max.value >=\ntradingEngineOrder.actualRate.value",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.candle.max.value >=\ntradingEngineOrder.actualRate.value",
|
||||
"updated": 1610223149566
|
||||
},
|
||||
{
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =\ntradingEngine.current.episode.episodeBaseAsset.balance.value +\npreviousBaseAssetSizeFilled",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeBaseAsset.balance.value +\npreviousBaseAssetSizeFilled",
|
||||
"updated": 1610224035951
|
||||
},
|
||||
{
|
||||
@@ -92,7 +92,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =\ntradingEngine.current.episode.episodeBaseAsset.balance.value -\ntradingEngineOrder.orderBaseAsset.sizeFilled.value",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeBaseAsset.balance.value -\ntradingEngineOrder.orderBaseAsset.sizeFilled.value",
|
||||
"updated": 1610224081072
|
||||
},
|
||||
{
|
||||
@@ -102,7 +102,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =\ntradingEngine.current.episode.episodeQuotedAsset.balance.value -\npreviousQuotedAssetSizeFilled +\npreviousQuotedAssetFeesPaid",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.balance.value -\npreviousQuotedAssetSizeFilled +\npreviousQuotedAssetFeesPaid",
|
||||
"updated": 1610224107848
|
||||
},
|
||||
{
|
||||
@@ -112,7 +112,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =\ntradingEngine.current.episode.episodeQuotedAsset.balance.value +\ntradingEngineOrder.orderQuotedAsset.sizeFilled.value -\ntradingEngineOrder.orderQuotedAsset.feesPaid.value",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.balance.value +\ntradingEngineOrder.orderQuotedAsset.sizeFilled.value -\ntradingEngineOrder.orderQuotedAsset.feesPaid.value",
|
||||
"updated": 1610224148958
|
||||
},
|
||||
{
|
||||
@@ -126,7 +126,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =\ntradingEngine.current.episode.episodeBaseAsset.balance.value -\npreviousBaseAssetSizeFilled +\npreviousBaseAssetFeesPaid",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeBaseAsset.balance.value -\npreviousBaseAssetSizeFilled +\npreviousBaseAssetFeesPaid",
|
||||
"updated": 1610224182969
|
||||
},
|
||||
{
|
||||
@@ -136,7 +136,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =\ntradingEngine.current.episode.episodeBaseAsset.balance.value +\ntradingEngineOrder.orderBaseAsset.sizeFilled.value -\ntradingEngineOrder.orderBaseAsset.feesPaid.value",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeBaseAsset.balance.value +\ntradingEngineOrder.orderBaseAsset.sizeFilled.value -\ntradingEngineOrder.orderBaseAsset.feesPaid.value",
|
||||
"updated": 1610224202075
|
||||
},
|
||||
{
|
||||
@@ -146,7 +146,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =\ntradingEngine.current.episode.episodeQuotedAsset.balance.value +\npreviousQuotedAssetSizeFilled",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.balance.value +\npreviousQuotedAssetSizeFilled",
|
||||
"updated": 1610224219415
|
||||
},
|
||||
{
|
||||
@@ -156,7 +156,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =\ntradingEngine.current.episode.episodeQuotedAsset.balance.value -\ntradingEngineOrder.orderQuotedAsset.sizeFilled.value",
|
||||
"text": "tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =\ntradingEngine.current.tradingEpisode.episodeQuotedAsset.balance.value -\ntradingEngineOrder.orderQuotedAsset.sizeFilled.value",
|
||||
"updated": 1610224237924
|
||||
},
|
||||
{
|
||||
|
||||
+4
-4
@@ -31,17 +31,17 @@
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Episode",
|
||||
"text": "Trading Episode",
|
||||
"updated": 1611257045974
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Episode->Definition",
|
||||
"text": "Superalgos->Node->Trading Episode->Definition",
|
||||
"updated": 1611257060021
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Superalgos->Node->Episode->Content",
|
||||
"text": "Superalgos->Node->Trading Episode->Content",
|
||||
"updated": 1611257063548
|
||||
},
|
||||
{
|
||||
@@ -50,7 +50,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Superalgos->Episode->2",
|
||||
"text": "Superalgos->Trading Episode->2",
|
||||
"updated": 1611257076886
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The following string should end up in your clipboard:<br/>tradingEngine.tradingCurrent.episode.<br/>episodeBaseAsset.balance.value"
|
||||
"text": "The following string should end up in your clipboard:<br/>tradingEngine.tradingCurrent.tradingEpisode.<br/>episodeBaseAsset.balance.value"
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "episode"
|
||||
"name": "trading-episode"
|
||||
},
|
||||
"text": "Now, why don't the nodes further to the left show their values too? Say, Exit Type, Status, End Rate, Begin Rate, and so on?"
|
||||
},
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Superalgos",
|
||||
"name": "episode"
|
||||
"name": "trading-episode"
|
||||
},
|
||||
"text": "There's one layer left... Episode!. It marks the duration of the episode and features several plotter panels..."
|
||||
},
|
||||
|
||||
+21
-21
@@ -56,36 +56,36 @@ exports.newSuperalgosBotModulesLearningEngine = function (processIndex) {
|
||||
}
|
||||
|
||||
function setCurrentCandle(candle) {
|
||||
learningEngine.learningCurrent.episode.candle.begin.value = candle.begin
|
||||
learningEngine.learningCurrent.episode.candle.end.value = candle.end
|
||||
learningEngine.learningCurrent.episode.candle.open.value = candle.open
|
||||
learningEngine.learningCurrent.episode.candle.close.value = candle.close
|
||||
learningEngine.learningCurrent.episode.candle.min.value = candle.min
|
||||
learningEngine.learningCurrent.episode.candle.max.value = candle.max
|
||||
learningEngine.learningCurrent.learningEpisode.candle.begin.value = candle.begin
|
||||
learningEngine.learningCurrent.learningEpisode.candle.end.value = candle.end
|
||||
learningEngine.learningCurrent.learningEpisode.candle.open.value = candle.open
|
||||
learningEngine.learningCurrent.learningEpisode.candle.close.value = candle.close
|
||||
learningEngine.learningCurrent.learningEpisode.candle.min.value = candle.min
|
||||
learningEngine.learningCurrent.learningEpisode.candle.max.value = candle.max
|
||||
}
|
||||
|
||||
function setCurrentCycle(cycle) {
|
||||
learningEngine.learningCurrent.episode.cycle.value = cycle
|
||||
learningEngine.learningCurrent.episode.cycle.lastBegin.value = learningEngine.learningCurrent.episode.cycle.begin.value
|
||||
learningEngine.learningCurrent.episode.cycle.lastEnd.value = learningEngine.learningCurrent.episode.cycle.end.value
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.value = cycle
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.lastBegin.value = learningEngine.learningCurrent.learningEpisode.cycle.begin.value
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.lastEnd.value = learningEngine.learningCurrent.learningEpisode.cycle.end.value
|
||||
switch (cycle) {
|
||||
case 'First': {
|
||||
learningEngine.learningCurrent.episode.cycle.begin.value =
|
||||
learningEngine.learningCurrent.episode.candle.begin.value +
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.begin.value =
|
||||
learningEngine.learningCurrent.learningEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value
|
||||
learningEngine.learningCurrent.episode.cycle.end.value =
|
||||
learningEngine.learningCurrent.episode.candle.begin.value +
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.end.value =
|
||||
learningEngine.learningCurrent.learningEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value +
|
||||
sessionParameters.timeFrame.config.value / 2 - 1
|
||||
break
|
||||
}
|
||||
case 'Second': {
|
||||
learningEngine.learningCurrent.episode.cycle.begin.value =
|
||||
learningEngine.learningCurrent.episode.candle.begin.value +
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.begin.value =
|
||||
learningEngine.learningCurrent.learningEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value +
|
||||
sessionParameters.timeFrame.config.value / 2
|
||||
learningEngine.learningCurrent.episode.cycle.end.value =
|
||||
learningEngine.learningCurrent.episode.candle.begin.value +
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.end.value =
|
||||
learningEngine.learningCurrent.learningEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value +
|
||||
sessionParameters.timeFrame.config.value * 4 / 4 - 1
|
||||
break
|
||||
@@ -96,11 +96,11 @@ exports.newSuperalgosBotModulesLearningEngine = function (processIndex) {
|
||||
objects starting with lastBegin in zero to being saved on file. For that reason
|
||||
we will do this:
|
||||
*/
|
||||
if (learningEngine.learningCurrent.episode.cycle.lastBegin.value === 0) {
|
||||
learningEngine.learningCurrent.episode.cycle.lastBegin.value = learningEngine.learningCurrent.episode.cycle.begin.value
|
||||
if (learningEngine.learningCurrent.learningEpisode.cycle.lastBegin.value === 0) {
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.lastBegin.value = learningEngine.learningCurrent.learningEpisode.cycle.begin.value
|
||||
}
|
||||
if (learningEngine.learningCurrent.episode.cycle.lastEnd.value === 0) {
|
||||
learningEngine.learningCurrent.episode.cycle.lastEnd.value = learningEngine.learningCurrent.episode.cycle.end.value
|
||||
if (learningEngine.learningCurrent.learningEpisode.cycle.lastEnd.value === 0) {
|
||||
learningEngine.learningCurrent.learningEpisode.cycle.lastEnd.value = learningEngine.learningCurrent.learningEpisode.cycle.end.value
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+109
-109
@@ -49,69 +49,69 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
|
||||
must be opened there, since it might happen that it is looping at the end of the market
|
||||
or the task / session was restarted. We will only execute if the episode was never opened before.
|
||||
*/
|
||||
if (learningEngine.learningCurrent.episode.begin.value !== learningEngine.learningCurrent.episode.begin.config.initialValue) { return }
|
||||
if (learningEngine.learningCurrent.learningEpisode.begin.value !== learningEngine.learningCurrent.learningEpisode.begin.config.initialValue) { return }
|
||||
|
||||
/* Starting begin and end */
|
||||
learningEngine.learningCurrent.episode.begin.value = learningEngine.learningCurrent.episode.candle.begin.value
|
||||
learningEngine.learningCurrent.episode.end.value = learningEngine.learningCurrent.episode.candle.end.value
|
||||
learningEngine.learningCurrent.learningEpisode.begin.value = learningEngine.learningCurrent.learningEpisode.candle.begin.value
|
||||
learningEngine.learningCurrent.learningEpisode.end.value = learningEngine.learningCurrent.learningEpisode.candle.end.value
|
||||
|
||||
/* Getting the begin Balance from the session configuration */
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.beginBalance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.beginBalance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
|
||||
/* The current balance is also the begin balance, that is how this starts. */
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
|
||||
/* Recording the opening at the Learning Engine Data Structure */
|
||||
learningEngine.learningCurrent.episode.status.value = 'Open'
|
||||
learningEngine.learningCurrent.episode.serialNumber.value = 1
|
||||
learningEngine.learningCurrent.episode.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId()
|
||||
learningEngine.learningCurrent.episode.beginRate.value = learningEngine.learningCurrent.episode.candle.close.value
|
||||
learningEngine.learningCurrent.learningEpisode.status.value = 'Open'
|
||||
learningEngine.learningCurrent.learningEpisode.serialNumber.value = 1
|
||||
learningEngine.learningCurrent.learningEpisode.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId()
|
||||
learningEngine.learningCurrent.learningEpisode.beginRate.value = learningEngine.learningCurrent.learningEpisode.candle.close.value
|
||||
}
|
||||
|
||||
function updateExitType(exitType) {
|
||||
learningEngine.learningCurrent.episode.exitType.value = exitType
|
||||
learningEngine.learningCurrent.learningEpisode.exitType.value = exitType
|
||||
}
|
||||
|
||||
function closeEpisode() {
|
||||
learningEngine.learningCurrent.episode.status.value = 'Closed'
|
||||
learningEngine.learningCurrent.episode.end.value = learningEngine.learningCurrent.episode.candle.end.value
|
||||
learningEngine.learningCurrent.episode.endRate.value = learningEngine.learningCurrent.episode.candle.close.value
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.endBalance.value = learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.endBalance.value = learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value
|
||||
learningEngine.learningCurrent.learningEpisode.status.value = 'Closed'
|
||||
learningEngine.learningCurrent.learningEpisode.end.value = learningEngine.learningCurrent.learningEpisode.candle.end.value
|
||||
learningEngine.learningCurrent.learningEpisode.endRate.value = learningEngine.learningCurrent.learningEpisode.candle.close.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value
|
||||
}
|
||||
|
||||
function resetEpisode() {
|
||||
TS.projects.superalgos.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(learningEngine.learningCurrent.episode)
|
||||
TS.projects.superalgos.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(learningEngine.learningCurrent.learningEpisode)
|
||||
}
|
||||
|
||||
function updateEnds() {
|
||||
if (learningEngine.learningCurrent.episode.status.value === 'Open') {
|
||||
learningEngine.learningCurrent.episode.end.value = learningEngine.learningCurrent.episode.end.value + sessionParameters.timeFrame.config.value
|
||||
learningEngine.learningCurrent.episode.endRate.value = learningEngine.learningCurrent.episode.candle.close.value
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.endBalance.value = learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.endBalance.value = learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value
|
||||
if (learningEngine.learningCurrent.learningEpisode.status.value === 'Open') {
|
||||
learningEngine.learningCurrent.learningEpisode.end.value = learningEngine.learningCurrent.learningEpisode.end.value + sessionParameters.timeFrame.config.value
|
||||
learningEngine.learningCurrent.learningEpisode.endRate.value = learningEngine.learningCurrent.learningEpisode.candle.close.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.endBalance.value = learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value
|
||||
}
|
||||
}
|
||||
|
||||
function resetLearningEngineDataStructure() {
|
||||
if (learningEngine.learningCurrent.episode.status.value === 'Closed') {
|
||||
if (learningEngine.learningCurrent.learningEpisode.status.value === 'Closed') {
|
||||
resetEpisode()
|
||||
}
|
||||
}
|
||||
|
||||
function updateCounters() {
|
||||
if (learningEngine.learningCurrent.episode.status.value === 'Open') {
|
||||
learningEngine.learningCurrent.episode.episodeCounters.periods.value++
|
||||
if (learningEngine.learningCurrent.learningEpisode.status.value === 'Open') {
|
||||
learningEngine.learningCurrent.learningEpisode.episodeCounters.periods.value++
|
||||
}
|
||||
}
|
||||
|
||||
function updateStatistics() {
|
||||
|
||||
/* Daus Calculation */
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.days.value =
|
||||
learningEngine.learningCurrent.episode.episodeCounters.periods.value *
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.days.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeCounters.periods.value *
|
||||
sessionParameters.timeFrame.config.value /
|
||||
TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS
|
||||
}
|
||||
@@ -123,45 +123,45 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
|
||||
|
||||
function calculateAssetsStatistics() {
|
||||
/* Updating Profit Loss */
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value =
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value -
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value -
|
||||
sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value =
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value -
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value -
|
||||
sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value, 10)
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value, 10)
|
||||
|
||||
/*
|
||||
Updating ROI
|
||||
|
||||
https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp
|
||||
*/
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.ROI.value =
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value /
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.beginBalance.value * 100
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.ROI.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value /
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * 100
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.ROI.value =
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value /
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.beginBalance.value * 100
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.ROI.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value /
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value * 100
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeBaseAsset.ROI.value, 10)
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeQuotedAsset.ROI.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.ROI.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.ROI.value, 10)
|
||||
|
||||
/* Updating Hit Ratio */
|
||||
if (learningEngine.learningCurrent.episode.episodeCounters.positions.value > 0) {
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.hitRatio.value =
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.hits.value /
|
||||
learningEngine.learningCurrent.episode.episodeCounters.positions.value
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeCounters.positions.value > 0) {
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitRatio.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hits.value /
|
||||
learningEngine.learningCurrent.learningEpisode.episodeCounters.positions.value
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.hitRatio.value =
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.hits.value /
|
||||
learningEngine.learningCurrent.episode.episodeCounters.positions.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitRatio.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hits.value /
|
||||
learningEngine.learningCurrent.learningEpisode.episodeCounters.positions.value
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeBaseAsset.hitRatio.value, 10)
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeQuotedAsset.hitRatio.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitRatio.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitRatio.value, 10)
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -169,94 +169,94 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
|
||||
|
||||
https://www.investopedia.com/terms/a/annualized-rate.asp
|
||||
*/
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.annualizedRateOfReturn.value =
|
||||
Math.pow(
|
||||
(
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.beginBalance.value +
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value
|
||||
) / learningEngine.learningCurrent.episode.episodeBaseAsset.beginBalance.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value
|
||||
) / learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value
|
||||
,
|
||||
(365 / learningEngine.learningCurrent.episode.episodeStatistics.days.value)
|
||||
(365 / learningEngine.learningCurrent.learningEpisode.episodeStatistics.days.value)
|
||||
) - 1
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.annualizedRateOfReturn.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.annualizedRateOfReturn.value =
|
||||
Math.pow(
|
||||
(
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.beginBalance.value +
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
) / learningEngine.learningCurrent.episode.episodeQuotedAsset.beginBalance.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
|
||||
) / learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value
|
||||
,
|
||||
(365 / learningEngine.learningCurrent.episode.episodeStatistics.days.value)
|
||||
(365 / learningEngine.learningCurrent.learningEpisode.episodeStatistics.days.value)
|
||||
) - 1
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value, 10)
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeQuotedAsset.annualizedRateOfReturn.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.annualizedRateOfReturn.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.annualizedRateOfReturn.value, 10)
|
||||
|
||||
/* Updating Hit or Fail */
|
||||
if (learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value > 0) {
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.hitFail.value = 'Hit'
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value > 0) {
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitFail.value = 'Hit'
|
||||
} else {
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.hitFail.value = 'Fail'
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.hitFail.value = 'Fail'
|
||||
}
|
||||
if (learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value > 0) {
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.hitFail.value = 'Hit'
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value > 0) {
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitFail.value = 'Hit'
|
||||
} else {
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.hitFail.value = 'Fail'
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.hitFail.value = 'Fail'
|
||||
}
|
||||
}
|
||||
|
||||
function calculateEpisodeStatistics() {
|
||||
/* Updating Profit Loss */
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.profitLoss.value =
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value * learningEngine.learningCurrent.episode.candle.close.value +
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.profitLoss.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value * learningEngine.learningCurrent.learningEpisode.candle.close.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeStatistics.profitLoss.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeStatistics.profitLoss.value, 10)
|
||||
|
||||
/*
|
||||
Updating ROI
|
||||
|
||||
https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp
|
||||
*/
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.ROI.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.ROI.value =
|
||||
(
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value * learningEngine.learningCurrent.episode.endRate.value +
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value * learningEngine.learningCurrent.learningEpisode.endRate.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
|
||||
) / (
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.episode.beginRate.value +
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.beginBalance.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.learningEpisode.beginRate.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value
|
||||
) * 100
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeStatistics.ROI.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeStatistics.ROI.value, 10)
|
||||
|
||||
/*
|
||||
Updating Annualized Rate Of Return
|
||||
|
||||
https://www.investopedia.com/terms/a/annualized-rate.asp
|
||||
*/
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.annualizedRateOfReturn.value =
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.annualizedRateOfReturn.value =
|
||||
Math.pow(
|
||||
(
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.episode.beginRate.value +
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.beginBalance.value +
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.profitLoss.value +
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.learningEpisode.beginRate.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.profitLoss.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.profitLoss.value
|
||||
) /
|
||||
(
|
||||
learningEngine.learningCurrent.episode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.episode.beginRate.value +
|
||||
learningEngine.learningCurrent.episode.episodeQuotedAsset.beginBalance.value
|
||||
learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.beginBalance.value * learningEngine.learningCurrent.learningEpisode.beginRate.value +
|
||||
learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.beginBalance.value
|
||||
)
|
||||
,
|
||||
(365 / learningEngine.learningCurrent.episode.episodeStatistics.days.value)
|
||||
(365 / learningEngine.learningCurrent.learningEpisode.episodeStatistics.days.value)
|
||||
) - 1
|
||||
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.episode.episodeStatistics.annualizedRateOfReturn.value, 10)
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(learningEngine.learningCurrent.learningEpisode.episodeStatistics.annualizedRateOfReturn.value, 10)
|
||||
|
||||
/* Updating Hit or Fail */
|
||||
if (learningEngine.learningCurrent.episode.episodeStatistics.profitLoss.value > 0) {
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.hitFail.value = 'Hit'
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeStatistics.profitLoss.value > 0) {
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.hitFail.value = 'Hit'
|
||||
} else {
|
||||
learningEngine.learningCurrent.episode.episodeStatistics.hitFail.value = 'Fail'
|
||||
learningEngine.learningCurrent.learningEpisode.episodeStatistics.hitFail.value = 'Fail'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -264,57 +264,57 @@ exports.newSuperalgosBotModulesLearningEpisode = function (processIndex) {
|
||||
function updateDistanceToEventsCounters() {
|
||||
/* Keeping Distance Counters Up-to-date while avoinding counting before the first event happens. */
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.triggerOn.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.triggerOn.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.triggerOn.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.triggerOn.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.triggerOff.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.triggerOff.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.triggerOff.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.triggerOff.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.takePosition.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.takePosition.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.takePosition.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.takePosition.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.closePosition.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.closePosition.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.closePosition.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.closePosition.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.nextPhase.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.nextPhase.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.nextPhase.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.nextPhase.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.moveToPhase.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.moveToPhase.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.moveToPhase.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.moveToPhase.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.createOrder.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.createOrder.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.createOrder.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.createOrder.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.cancelOrder.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.cancelOrder.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.cancelOrder.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.cancelOrder.value++
|
||||
}
|
||||
|
||||
if (
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.closeOrder.value > 0
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.closeOrder.value > 0
|
||||
) {
|
||||
learningEngine.learningCurrent.episode.distanceToEvent.closeOrder.value++
|
||||
learningEngine.learningCurrent.learningEpisode.distanceToEvent.closeOrder.value++
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -40,7 +40,8 @@ exports.newSuperalgosBotModulesLearningOutput = function (processIndex) {
|
||||
outputDatasetsMap,
|
||||
timeFrameLabel,
|
||||
learningProcessDate,
|
||||
fileStorage
|
||||
fileStorage,
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.tradingCurrent.learningEpisode.headOfTheMarket.value
|
||||
)
|
||||
|
||||
await learningSimulationModuleObject.runSimulation(
|
||||
|
||||
+4
-4
@@ -57,7 +57,7 @@
|
||||
This variable tell us which day we are standing at, specially while working
|
||||
with Daily Files. From this Date is that we are going to load the Daily Files.
|
||||
*/
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.episode.processDate.value =
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.learningEpisode.processDate.value =
|
||||
TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.learningParameters.timeRange.config.initialDatetime).valueOf()
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
the simulation loop, once we discover that all candles from a certain date have benn processed.
|
||||
Here is the point where we sync one and the other.
|
||||
*/
|
||||
let learningProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.episode.processDate.value)
|
||||
let learningProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.learningEpisode.processDate.value)
|
||||
|
||||
if (
|
||||
await TS.projects.superalgos.functionLibraries.dataDependenciesFunctions.processSingleFiles(
|
||||
@@ -151,7 +151,7 @@
|
||||
use it to save Output Files and later the Data Ranges. This is the point where
|
||||
the date calculated by the Simulation is applied at the Learning Process Level.
|
||||
*/
|
||||
learningProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.episode.processDate.value)
|
||||
learningProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.learningEpisode.processDate.value)
|
||||
|
||||
if (checkStopTaskGracefully() === false) { break }
|
||||
if (checkStopProcessing() === false) { break }
|
||||
@@ -240,7 +240,7 @@
|
||||
indicators to be built and continue the processing once this process is called
|
||||
again.
|
||||
*/
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.episode.headOfTheMarket.value === true) {
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.learningEpisode.headOfTheMarket.value === true) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -58,13 +58,13 @@ exports.newSuperalgosBotModulesLearningRecords = function (processIndex) {
|
||||
There are a few products configured to be saved only at an specific cycle.
|
||||
*/
|
||||
if (product.config.saveAtCycle !== undefined) {
|
||||
if (learningEngine.learningCurrent.episode.cycle.value !== product.config.saveAtCycle) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.cycle.value !== product.config.saveAtCycle) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
/* Clean the file from information of previous executions */
|
||||
//pruneOutputFile(product, outputDatasetArray, learningEngine.learningCurrent.episode.candle.end.value)
|
||||
//pruneOutputFile(product, outputDatasetArray, learningEngine.learningCurrent.learningEpisode.candle.end.value)
|
||||
|
||||
/* Clean Open Records */
|
||||
if (product.config.saveAsObjects === true) {
|
||||
@@ -256,8 +256,8 @@ exports.newSuperalgosBotModulesLearningRecords = function (processIndex) {
|
||||
of the day? Easy: the end of the candle must be 1 millisecod before the next day. That happens at any
|
||||
time frame.
|
||||
*/
|
||||
let currentDay = new Date(learningEngine.learningCurrent.episode.candle.end.value)
|
||||
let nextDay = new Date(learningEngine.learningCurrent.episode.candle.end.value + 1)
|
||||
let currentDay = new Date(learningEngine.learningCurrent.learningEpisode.candle.end.value)
|
||||
let nextDay = new Date(learningEngine.learningCurrent.learningEpisode.candle.end.value + 1)
|
||||
if (currentDay.getUTCDate() !== nextDay.getUTCDate()) {
|
||||
/*
|
||||
We will save the object only if it is closed, becasuse we are at the last candle of the day.
|
||||
|
||||
+34
-34
@@ -55,7 +55,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
let dailyCandles = []
|
||||
for (let i = 0; i < candles.length; i++) {
|
||||
let candle = candles[i]
|
||||
if (candle.begin >= TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.episode.processDate.value) {
|
||||
if (candle.begin >= TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine.learningCurrent.learningEpisode.processDate.value) {
|
||||
dailyCandles.push(candle)
|
||||
}
|
||||
}
|
||||
@@ -99,7 +99,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
In this case we already have at the last candle index the next candle to be
|
||||
processed. We will just continue with this candle.
|
||||
*/
|
||||
initialCandle = learningEngine.learningCurrent.episode.candle.index.value
|
||||
initialCandle = learningEngine.learningCurrent.learningEpisode.candle.index.value
|
||||
}
|
||||
/*
|
||||
Main Simulation Loop
|
||||
@@ -113,7 +113,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
loop is not empty, then the lascCandle() check will override this value
|
||||
depending on if we really are at the head of the market or not.
|
||||
*/
|
||||
learningEngine.learningCurrent.episode.headOfTheMarket.value = true
|
||||
learningEngine.learningCurrent.learningEpisode.headOfTheMarket.value = true
|
||||
/*
|
||||
This is the main simulation loop. It will go through the initial candle
|
||||
until one less than the last candle available. We will never process the last
|
||||
@@ -121,10 +121,10 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
that still can change. So effectively will be processing all closed candles.
|
||||
*/
|
||||
for (let i = initialCandle; i < candles.length - 1; i++) {
|
||||
learningEngine.learningCurrent.episode.candle.index.value = i
|
||||
learningEngine.learningCurrent.learningEpisode.candle.index.value = i
|
||||
|
||||
/* This is the current candle the Simulation is working at. */
|
||||
let candle = candles[learningEngine.learningCurrent.episode.candle.index.value]
|
||||
let candle = candles[learningEngine.learningCurrent.learningEpisode.candle.index.value]
|
||||
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> Candle Begin @ ' + (new Date(candle.begin)).toUTCString())
|
||||
@@ -210,7 +210,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
learningEpisodeModuleObject.reset()
|
||||
TS.projects.superalgos.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.reset()
|
||||
|
||||
let infoMessage = 'Processing candle # ' + learningEngine.learningCurrent.episode.candle.index.value + ' @ the ' + learningEngine.learningCurrent.episode.cycle.value + ' cycle.'
|
||||
let infoMessage = 'Processing candle # ' + learningEngine.learningCurrent.learningEpisode.candle.index.value + ' @ the ' + learningEngine.learningCurrent.learningEpisode.cycle.value + ' cycle.'
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> ' + infoMessage)
|
||||
|
||||
@@ -222,8 +222,8 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
contextInfo = {
|
||||
candleIndex: learningEngine.learningCurrent.episode.candle.index.value,
|
||||
cycle: learningEngine.learningCurrent.episode.cycle.value
|
||||
candleIndex: learningEngine.learningCurrent.learningEpisode.candle.index.value,
|
||||
cycle: learningEngine.learningCurrent.learningEpisode.cycle.value
|
||||
}
|
||||
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
|
||||
|
||||
@@ -302,7 +302,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
if (sessionParameters.heartbeats.config.date === true || sessionParameters.heartbeats.config.candleIndex === true) {
|
||||
/* We will produce a simulation level heartbeat in order to inform the user this is running. */
|
||||
|
||||
heartBeatDate = new Date(Math.trunc(learningEngine.learningCurrent.episode.candle.begin.value / TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS) * TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS)
|
||||
heartBeatDate = new Date(Math.trunc(learningEngine.learningCurrent.learningEpisode.candle.begin.value / TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS) * TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS)
|
||||
|
||||
let fromDate = new Date(sessionParameters.timeRange.config.initialDatetime)
|
||||
let lastDate = new Date(sessionParameters.timeRange.config.finalDatetime)
|
||||
@@ -320,7 +320,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
let processingDate = heartBeatDate.getUTCFullYear() + '-' + TS.projects.superalgos.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + TS.projects.superalgos.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
|
||||
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> Simulation ' + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY + ' Loop # ' + learningEngine.learningCurrent.episode.candle.index.value + ' @ ' + processingDate)
|
||||
'[INFO] runSimulation -> loop -> Simulation ' + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY + ' Loop # ' + learningEngine.learningCurrent.learningEpisode.candle.index.value + ' @ ' + processingDate)
|
||||
|
||||
/* Logging to console and disk */
|
||||
if (TS.projects.superalgos.utilities.dateTimeFunctions.areTheseDatesEqual(currentDate, new Date()) === false) {
|
||||
@@ -344,7 +344,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
if (sessionParameters.heartbeats.config.date === true) {
|
||||
hartbeatText = hartbeatText + currentDateString
|
||||
}
|
||||
hartbeatText = hartbeatText + ' Candle # ' + learningEngine.learningCurrent.episode.candle.index.value
|
||||
hartbeatText = hartbeatText + ' Candle # ' + learningEngine.learningCurrent.learningEpisode.candle.index.value
|
||||
TS.projects.superalgos.functionLibraries.processFunctions.processHeartBeat(processIndex, hartbeatText, percentage)
|
||||
}
|
||||
}
|
||||
@@ -448,15 +448,15 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
for (let i = 0; i < pArray.length; i++) {
|
||||
element = pArray[i]
|
||||
|
||||
if (learningEngine.learningCurrent.episode.candle.end.value === element.end) { // when there is an exact match at the end we take that element
|
||||
if (learningEngine.learningCurrent.learningEpisode.candle.end.value === element.end) { // when there is an exact match at the end we take that element
|
||||
return element
|
||||
} else {
|
||||
if (
|
||||
i > 0 &&
|
||||
element.end > learningEngine.learningCurrent.episode.candle.end.value
|
||||
element.end > learningEngine.learningCurrent.learningEpisode.candle.end.value
|
||||
) {
|
||||
let previousElement = pArray[i - 1]
|
||||
if (previousElement.end < learningEngine.learningCurrent.episode.candle.end.value) {
|
||||
if (previousElement.end < learningEngine.learningCurrent.learningEpisode.candle.end.value) {
|
||||
return previousElement // If one elements goes into the future of currentCandle, then we stop and take the previous element.
|
||||
} else {
|
||||
return
|
||||
@@ -485,7 +485,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
The second +1 is because we need to compare the next candle (remember that the loops allways avoid the
|
||||
last candle of the dataset available.)
|
||||
*/
|
||||
if (learningEngine.learningCurrent.episode.candle.index.value + 1 + 1 === candles.length) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.candle.index.value + 1 + 1 === candles.length) {
|
||||
/*
|
||||
When processing daily files, we need a mechanism to turn from one day to the next one.
|
||||
That mechanism is the one implemented here. If we detect that the next candle is the last candle of
|
||||
@@ -495,7 +495,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
let candlesPerDay = TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS / sessionParameters.timeFrame.config.value
|
||||
if (
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES &&
|
||||
learningEngine.learningCurrent.episode.candle.index.value + 1 + 1 === candlesPerDay
|
||||
learningEngine.learningCurrent.learningEpisode.candle.index.value + 1 + 1 === candlesPerDay
|
||||
) {
|
||||
/*
|
||||
Here we found that the next candle of the dataset is the last candle of the day.
|
||||
@@ -504,9 +504,9 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
the first candle of the new dataset we shall receive. The first candle of the next day starts
|
||||
at index 0, so we will position the index now at zero.
|
||||
*/
|
||||
learningEngine.learningCurrent.episode.candle.index.value = 0
|
||||
learningEngine.learningCurrent.episode.processDate.value =
|
||||
learningEngine.learningCurrent.episode.processDate.value + TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS
|
||||
learningEngine.learningCurrent.learningEpisode.candle.index.value = 0
|
||||
learningEngine.learningCurrent.learningEpisode.processDate.value =
|
||||
learningEngine.learningCurrent.learningEpisode.processDate.value + TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -516,21 +516,21 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
next execution it will likely have more candles at the dataset. And if it does not,
|
||||
it will just wait there until it does.
|
||||
*/
|
||||
learningEngine.learningCurrent.episode.headOfTheMarket.value = true
|
||||
learningEngine.learningCurrent.episode.candle.index.value++
|
||||
learningEngine.learningCurrent.learningEpisode.headOfTheMarket.value = true
|
||||
learningEngine.learningCurrent.learningEpisode.candle.index.value++
|
||||
return false
|
||||
} else {
|
||||
|
||||
/* Wd did not reach the head of the market */
|
||||
learningEngine.learningCurrent.episode.headOfTheMarket.value = false
|
||||
learningEngine.learningCurrent.episode.candle.index.value++
|
||||
learningEngine.learningCurrent.learningEpisode.headOfTheMarket.value = false
|
||||
learningEngine.learningCurrent.learningEpisode.candle.index.value++
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
function checkInitialDatetime() {
|
||||
/* Here we check that the current candle is not before the initial datetime defined at the session parameters.*/
|
||||
if (learningEngine.learningCurrent.episode.candle.end.value < sessionParameters.timeRange.config.initialDatetime) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.candle.end.value < sessionParameters.timeRange.config.initialDatetime) {
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle before the sessionParameters.timeRange.config.initialDatetime.')
|
||||
return false
|
||||
@@ -540,7 +540,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
|
||||
function checkFinalDatetime() {
|
||||
/* Here we check that the next candle is not after of the user-defined final datetime at the session parameters.*/
|
||||
if (learningEngine.learningCurrent.episode.candle.begin.value + sessionParameters.timeFrame.config.value > sessionParameters.timeRange.config.finalDatetime) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.candle.begin.value + sessionParameters.timeFrame.config.value > sessionParameters.timeRange.config.finalDatetime) {
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle after the sessionParameters.timeRange.config.finalDatetime.')
|
||||
return false
|
||||
@@ -558,10 +558,10 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
because there the balances have shifted from their resting position.
|
||||
*/
|
||||
|
||||
let stopRunningDate = (new Date(learningEngine.learningCurrent.episode.candle.begin.value)).toUTCString()
|
||||
let stopRunningDate = (new Date(learningEngine.learningCurrent.learningEpisode.candle.begin.value)).toUTCString()
|
||||
|
||||
if (sessionParameters.sessionBaseAsset.config.minimumBalance !== undefined) {
|
||||
if (learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) {
|
||||
const errorMessage = 'Min Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -573,7 +573,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeBaseAssetBalance: learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value,
|
||||
episodeBaseAssetBalance: learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value,
|
||||
sessionBaseAssetMinimumBalance: sessionParameters.sessionBaseAsset.config.minimumBalance
|
||||
}
|
||||
|
||||
@@ -587,7 +587,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
if (sessionParameters.sessionBaseAsset.config.maximumBalance !== undefined) {
|
||||
if (learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value >= sessionParameters.sessionBaseAsset.config.maximumBalance) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value >= sessionParameters.sessionBaseAsset.config.maximumBalance) {
|
||||
const errorMessage = 'Max Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -599,7 +599,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeBaseAssetBalance: learningEngine.learningCurrent.episode.episodeBaseAsset.balance.value,
|
||||
episodeBaseAssetBalance: learningEngine.learningCurrent.learningEpisode.episodeBaseAsset.balance.value,
|
||||
sessionBaseAssetMaximumBalance: sessionParameters.sessionBaseAsset.config.maximumBalance
|
||||
}
|
||||
|
||||
@@ -613,7 +613,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
if (sessionParameters.sessionQuotedAsset.config.minimumBalance !== undefined) {
|
||||
if (learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value <= sessionParameters.sessionQuotedAsset.config.minimumBalance) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value <= sessionParameters.sessionQuotedAsset.config.minimumBalance) {
|
||||
const errorMessage = 'Min Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -625,7 +625,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeQuotedAssetBalance: learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value,
|
||||
episodeQuotedAssetBalance: learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value,
|
||||
sessionQuotedAssetMinimumBalance: sessionParameters.sessionQuotedAsset.config.minimumBalance
|
||||
}
|
||||
|
||||
@@ -639,7 +639,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
if (sessionParameters.sessionQuotedAsset.config.maximumBalance !== undefined) {
|
||||
if (learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value >= sessionParameters.sessionQuotedAsset.config.maximumBalance) {
|
||||
if (learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value >= sessionParameters.sessionQuotedAsset.config.maximumBalance) {
|
||||
const errorMessage = 'Max Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -651,7 +651,7 @@ exports.newSuperalgosBotModulesLearningSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeQuotedAssetBalance: learningEngine.learningCurrent.episode.episodeQuotedAsset.balance.value,
|
||||
episodeQuotedAssetBalance: learningEngine.learningCurrent.learningEpisode.episodeQuotedAsset.balance.value,
|
||||
sessionQuotedAssetMaximumBalance: sessionParameters.sessionQuotedAsset.config.maximumBalance
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -75,7 +75,7 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
|
||||
This rate will later help plotting the error at the
|
||||
charts.
|
||||
*/
|
||||
let rate = learningEngine.learningCurrent.episode.candle.close.value
|
||||
let rate = learningEngine.learningCurrent.learningEpisode.candle.close.value
|
||||
errorDataArray.push(rate)
|
||||
learningSystem.errors.push(errorDataArray)
|
||||
}
|
||||
@@ -86,7 +86,7 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
|
||||
This rate will later help plotting the warning at the
|
||||
charts.
|
||||
*/
|
||||
let rate = learningEngine.learningCurrent.episode.candle.close.value
|
||||
let rate = learningEngine.learningCurrent.learningEpisode.candle.close.value
|
||||
warningDataArray.push(rate)
|
||||
learningSystem.warnings.push(warningDataArray)
|
||||
}
|
||||
@@ -97,7 +97,7 @@ exports.newSuperalgosBotModulesLearningSystem = function (processIndex) {
|
||||
This rate will later help plotting the warning at the
|
||||
charts.
|
||||
*/
|
||||
let rate = learningEngine.learningCurrent.episode.candle.close.value
|
||||
let rate = learningEngine.learningCurrent.learningEpisode.candle.close.value
|
||||
infoDataArray.push(rate)
|
||||
learningSystem.infos.push(infoDataArray)
|
||||
}
|
||||
|
||||
+10
-10
@@ -207,7 +207,7 @@ exports.newSuperalgosBotModulesOrdersSimulations = function (processIndex) {
|
||||
*/
|
||||
switch (true) {
|
||||
case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': {
|
||||
if (tradingEngineOrder.orderStatistics.actualRate.value > tradingEngine.tradingCurrent.episode.candle.max.value) {
|
||||
if (tradingEngineOrder.orderStatistics.actualRate.value > tradingEngine.tradingCurrent.tradingEpisode.candle.max.value) {
|
||||
|
||||
const message = 'Simulating - Actual Rate Too Hight'
|
||||
let docs = {
|
||||
@@ -218,23 +218,23 @@ exports.newSuperalgosBotModulesOrdersSimulations = function (processIndex) {
|
||||
}
|
||||
contextInfo = {
|
||||
previousActualRate: tradingEngineOrder.orderStatistics.actualRate.value,
|
||||
recalculatedActualRate: tradingEngine.tradingCurrent.episode.candle.max.value
|
||||
recalculatedActualRate: tradingEngine.tradingCurrent.tradingEpisode.candle.max.value
|
||||
}
|
||||
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
|
||||
|
||||
tradingSystem.addWarning(
|
||||
[
|
||||
[tradingEngineOrder.orderStatistics.actualRate.id, tradingEngine.tradingCurrent.episode.candle.max.id],
|
||||
[tradingEngineOrder.orderStatistics.actualRate.id, tradingEngine.tradingCurrent.tradingEpisode.candle.max.id],
|
||||
message,
|
||||
docs
|
||||
]
|
||||
)
|
||||
tradingEngineOrder.orderStatistics.actualRate.value = tradingEngine.tradingCurrent.episode.candle.max.value
|
||||
tradingEngineOrder.orderStatistics.actualRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.max.value
|
||||
}
|
||||
break
|
||||
}
|
||||
case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': {
|
||||
if (tradingEngineOrder.orderStatistics.actualRate.value < tradingEngine.tradingCurrent.episode.candle.min.value) {
|
||||
if (tradingEngineOrder.orderStatistics.actualRate.value < tradingEngine.tradingCurrent.tradingEpisode.candle.min.value) {
|
||||
|
||||
const message = 'Simulating - Actual Rate Too Low'
|
||||
let docs = {
|
||||
@@ -245,18 +245,18 @@ exports.newSuperalgosBotModulesOrdersSimulations = function (processIndex) {
|
||||
}
|
||||
contextInfo = {
|
||||
previousActualRate: tradingEngineOrder.orderStatistics.actualRate.value,
|
||||
recalculatedActualRate: tradingEngine.tradingCurrent.episode.candle.max.value
|
||||
recalculatedActualRate: tradingEngine.tradingCurrent.tradingEpisode.candle.max.value
|
||||
}
|
||||
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
|
||||
|
||||
tradingSystem.addWarning(
|
||||
[
|
||||
[tradingEngineOrder.orderStatistics.actualRate.id, tradingEngine.tradingCurrent.episode.candle.min.id],
|
||||
[tradingEngineOrder.orderStatistics.actualRate.id, tradingEngine.tradingCurrent.tradingEpisode.candle.min.id],
|
||||
message,
|
||||
docs
|
||||
]
|
||||
)
|
||||
tradingEngineOrder.orderStatistics.actualRate.value = tradingEngine.tradingCurrent.episode.candle.min.value
|
||||
tradingEngineOrder.orderStatistics.actualRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.min.value
|
||||
}
|
||||
break
|
||||
}
|
||||
@@ -390,13 +390,13 @@ exports.newSuperalgosBotModulesOrdersSimulations = function (processIndex) {
|
||||
let orderWasHit
|
||||
switch (tradingSystemOrder.type) {
|
||||
case 'Limit Buy Order': {
|
||||
if (tradingEngine.tradingCurrent.episode.candle.min.value <= tradingEngineOrder.orderStatistics.actualRate.value) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.candle.min.value <= tradingEngineOrder.orderStatistics.actualRate.value) {
|
||||
orderWasHit = true
|
||||
}
|
||||
break
|
||||
}
|
||||
case 'Limit Sell Order': {
|
||||
if (tradingEngine.tradingCurrent.episode.candle.max.value >= tradingEngineOrder.orderStatistics.actualRate.value) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.candle.max.value >= tradingEngineOrder.orderStatistics.actualRate.value) {
|
||||
orderWasHit = true
|
||||
}
|
||||
break
|
||||
|
||||
@@ -294,7 +294,7 @@ exports.newSuperalgosBotModulesSnapshots = function (processIndex) {
|
||||
|
||||
let closeHeaders = ['Trade Number', 'Open Datetime', 'Close Datetime', 'Strategy Name', 'Trigger On Situation', 'Take Position Situation', 'Result In Base Asset', 'Result In Quoted Asset', 'ROI in Base Asset', 'ROI in Quoted Asset', 'Exit Type']
|
||||
closeValues = [
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.positions.value, // Position Number
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.positions.value, // Position Number
|
||||
(new Date(openDatetime)).toISOString(), // Open Datetime
|
||||
(new Date(closeDatetime)).toISOString(), // Open Datetime
|
||||
tradingEngine.tradingCurrent.strategy.strategyName.value, // Strategy Name
|
||||
|
||||
+21
-21
@@ -56,36 +56,36 @@ exports.newSuperalgosBotModulesTradingEngine = function (processIndex) {
|
||||
}
|
||||
|
||||
function setCurrentCandle(candle) {
|
||||
tradingEngine.tradingCurrent.episode.candle.begin.value = candle.begin
|
||||
tradingEngine.tradingCurrent.episode.candle.end.value = candle.end
|
||||
tradingEngine.tradingCurrent.episode.candle.open.value = candle.open
|
||||
tradingEngine.tradingCurrent.episode.candle.close.value = candle.close
|
||||
tradingEngine.tradingCurrent.episode.candle.min.value = candle.min
|
||||
tradingEngine.tradingCurrent.episode.candle.max.value = candle.max
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value = candle.begin
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.end.value = candle.end
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.open.value = candle.open
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.close.value = candle.close
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.min.value = candle.min
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.max.value = candle.max
|
||||
}
|
||||
|
||||
function setCurrentCycle(cycle) {
|
||||
tradingEngine.tradingCurrent.episode.cycle.value = cycle
|
||||
tradingEngine.tradingCurrent.episode.cycle.lastBegin.value = tradingEngine.tradingCurrent.episode.cycle.begin.value
|
||||
tradingEngine.tradingCurrent.episode.cycle.lastEnd.value = tradingEngine.tradingCurrent.episode.cycle.end.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.value = cycle
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.lastBegin.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.begin.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.end.value
|
||||
switch (cycle) {
|
||||
case 'First': {
|
||||
tradingEngine.tradingCurrent.episode.cycle.begin.value =
|
||||
tradingEngine.tradingCurrent.episode.candle.begin.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.begin.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.episode.cycle.end.value =
|
||||
tradingEngine.tradingCurrent.episode.candle.begin.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.end.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value +
|
||||
sessionParameters.timeFrame.config.value / 2 - 1
|
||||
break
|
||||
}
|
||||
case 'Second': {
|
||||
tradingEngine.tradingCurrent.episode.cycle.begin.value =
|
||||
tradingEngine.tradingCurrent.episode.candle.begin.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.begin.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value +
|
||||
sessionParameters.timeFrame.config.value / 2
|
||||
tradingEngine.tradingCurrent.episode.cycle.end.value =
|
||||
tradingEngine.tradingCurrent.episode.candle.begin.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.end.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value +
|
||||
sessionParameters.timeFrame.config.value * 4 / 4 - 1
|
||||
break
|
||||
@@ -96,11 +96,11 @@ exports.newSuperalgosBotModulesTradingEngine = function (processIndex) {
|
||||
objects starting with lastBegin in zero to being saved on file. For that reason
|
||||
we will do this:
|
||||
*/
|
||||
if (tradingEngine.tradingCurrent.episode.cycle.lastBegin.value === 0) {
|
||||
tradingEngine.tradingCurrent.episode.cycle.lastBegin.value = tradingEngine.tradingCurrent.episode.cycle.begin.value
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.cycle.lastBegin.value === 0) {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.lastBegin.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.begin.value
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.episode.cycle.lastEnd.value === 0) {
|
||||
tradingEngine.tradingCurrent.episode.cycle.lastEnd.value = tradingEngine.tradingCurrent.episode.cycle.end.value
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value === 0) {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.end.value
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+109
-109
@@ -49,69 +49,69 @@ exports.newSuperalgosBotModulesTradingEpisode = function (processIndex) {
|
||||
must be opened there, since it might happen that it is looping at the end of the market
|
||||
or the task / session was restarted. We will only execute if the episode was never opened before.
|
||||
*/
|
||||
if (tradingEngine.tradingCurrent.episode.begin.value !== tradingEngine.tradingCurrent.episode.begin.config.initialValue) { return }
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.begin.value !== tradingEngine.tradingCurrent.tradingEpisode.begin.config.initialValue) { return }
|
||||
|
||||
/* Starting begin and end */
|
||||
tradingEngine.tradingCurrent.episode.begin.value = tradingEngine.tradingCurrent.episode.candle.begin.value
|
||||
tradingEngine.tradingCurrent.episode.end.value = tradingEngine.tradingCurrent.episode.candle.end.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.begin.value = tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.end.value = tradingEngine.tradingCurrent.tradingEpisode.candle.end.value
|
||||
|
||||
/* Getting the begin Balance from the session configuration */
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
|
||||
/* The current balance is also the begin balance, that is how this starts. */
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value = sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value = sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
|
||||
/* Recording the opening at the Trading Engine Data Structure */
|
||||
tradingEngine.tradingCurrent.episode.status.value = 'Open'
|
||||
tradingEngine.tradingCurrent.episode.serialNumber.value = 1
|
||||
tradingEngine.tradingCurrent.episode.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId()
|
||||
tradingEngine.tradingCurrent.episode.beginRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.status.value = 'Open'
|
||||
tradingEngine.tradingCurrent.tradingEpisode.serialNumber.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId()
|
||||
tradingEngine.tradingCurrent.tradingEpisode.beginRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
|
||||
function updateExitType(exitType) {
|
||||
tradingEngine.tradingCurrent.episode.exitType.value = exitType
|
||||
tradingEngine.tradingCurrent.tradingEpisode.exitType.value = exitType
|
||||
}
|
||||
|
||||
function closeEpisode() {
|
||||
tradingEngine.tradingCurrent.episode.status.value = 'Closed'
|
||||
tradingEngine.tradingCurrent.episode.end.value = tradingEngine.tradingCurrent.episode.candle.end.value
|
||||
tradingEngine.tradingCurrent.episode.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.status.value = 'Closed'
|
||||
tradingEngine.tradingCurrent.tradingEpisode.end.value = tradingEngine.tradingCurrent.tradingEpisode.candle.end.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
}
|
||||
|
||||
function resetEpisode() {
|
||||
TS.projects.superalgos.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(tradingEngine.tradingCurrent.episode)
|
||||
TS.projects.superalgos.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(tradingEngine.tradingCurrent.learningEpisode)
|
||||
}
|
||||
|
||||
function updateEnds() {
|
||||
if (tradingEngine.tradingCurrent.episode.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.episode.end.value = tradingEngine.tradingCurrent.episode.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.episode.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.end.value = tradingEngine.tradingCurrent.tradingEpisode.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
}
|
||||
}
|
||||
|
||||
function resetTradingEngineDataStructure() {
|
||||
if (tradingEngine.tradingCurrent.episode.status.value === 'Closed') {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.status.value === 'Closed') {
|
||||
resetEpisode()
|
||||
}
|
||||
}
|
||||
|
||||
function updateCounters() {
|
||||
if (tradingEngine.tradingCurrent.episode.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.periods.value++
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.periods.value++
|
||||
}
|
||||
}
|
||||
|
||||
function updateStatistics() {
|
||||
|
||||
/* Daus Calculation */
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.days.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.periods.value *
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.periods.value *
|
||||
sessionParameters.timeFrame.config.value /
|
||||
TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS
|
||||
}
|
||||
@@ -123,45 +123,45 @@ exports.newSuperalgosBotModulesTradingEpisode = function (processIndex) {
|
||||
|
||||
function calculateAssetsStatistics() {
|
||||
/* Updating Profit Loss */
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value -
|
||||
sessionParameters.sessionBaseAsset.config.initialBalance
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value -
|
||||
sessionParameters.sessionQuotedAsset.config.initialBalance
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value, 10)
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value, 10)
|
||||
|
||||
/*
|
||||
Updating ROI
|
||||
|
||||
https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp
|
||||
*/
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.ROI.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value /
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * 100
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.ROI.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value /
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * 100
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.ROI.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value /
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value * 100
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.ROI.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value /
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value * 100
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeBaseAsset.ROI.value, 10)
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeQuotedAsset.ROI.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.ROI.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.ROI.value, 10)
|
||||
|
||||
/* Updating Hit Ratio */
|
||||
if (tradingEngine.tradingCurrent.episode.episodeCounters.positions.value > 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.hitRatio.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.hits.value /
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.positions.value
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.positions.value > 0) {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.hitRatio.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.hits.value /
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.positions.value
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.hitRatio.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.hits.value /
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.positions.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.hitRatio.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.hits.value /
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.positions.value
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeBaseAsset.hitRatio.value, 10)
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeQuotedAsset.hitRatio.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.hitRatio.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.hitRatio.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.hitRatio.value, 10)
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -169,94 +169,94 @@ exports.newSuperalgosBotModulesTradingEpisode = function (processIndex) {
|
||||
|
||||
https://www.investopedia.com/terms/a/annualized-rate.asp
|
||||
*/
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.annualizedRateOfReturn.value =
|
||||
Math.pow(
|
||||
(
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value
|
||||
) / tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value
|
||||
) / tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value
|
||||
,
|
||||
(365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value)
|
||||
(365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value)
|
||||
) - 1
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.annualizedRateOfReturn.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.annualizedRateOfReturn.value =
|
||||
Math.pow(
|
||||
(
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
) / tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value
|
||||
) / tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value
|
||||
,
|
||||
(365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value)
|
||||
(365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value)
|
||||
) - 1
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeBaseAsset.annualizedRateOfReturn.value, 10)
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeQuotedAsset.annualizedRateOfReturn.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.annualizedRateOfReturn.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.annualizedRateOfReturn.value, 10)
|
||||
|
||||
/* Updating Hit or Fail */
|
||||
if (tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.hitFail.value = 'Hit'
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.hitFail.value = 'Hit'
|
||||
} else {
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.hitFail.value = 'Fail'
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.hitFail.value = 'Fail'
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.hitFail.value = 'Hit'
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.hitFail.value = 'Hit'
|
||||
} else {
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.hitFail.value = 'Fail'
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.hitFail.value = 'Fail'
|
||||
}
|
||||
}
|
||||
|
||||
function calculateEpisodeStatistics() {
|
||||
/* Updating Profit Loss */
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value * tradingEngine.tradingCurrent.episode.candle.close.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value * tradingEngine.tradingCurrent.tradingEpisode.candle.close.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeStatistics.profitLoss.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.profitLoss.value, 10)
|
||||
|
||||
/*
|
||||
Updating ROI
|
||||
|
||||
https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp
|
||||
*/
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.ROI.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.ROI.value =
|
||||
(
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value * tradingEngine.tradingCurrent.episode.endRate.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value * tradingEngine.tradingCurrent.tradingEpisode.endRate.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value
|
||||
) / (
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * tradingEngine.tradingCurrent.episode.beginRate.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * tradingEngine.tradingCurrent.tradingEpisode.beginRate.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value
|
||||
) * 100
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeStatistics.ROI.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.ROI.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.ROI.value, 10)
|
||||
|
||||
/*
|
||||
Updating Annualized Rate Of Return
|
||||
|
||||
https://www.investopedia.com/terms/a/annualized-rate.asp
|
||||
*/
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.annualizedRateOfReturn.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.annualizedRateOfReturn.value =
|
||||
Math.pow(
|
||||
(
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * tradingEngine.tradingCurrent.episode.beginRate.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * tradingEngine.tradingCurrent.tradingEpisode.beginRate.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value
|
||||
) /
|
||||
(
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.beginBalance.value * tradingEngine.tradingCurrent.episode.beginRate.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.beginBalance.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.beginBalance.value * tradingEngine.tradingCurrent.tradingEpisode.beginRate.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.beginBalance.value
|
||||
)
|
||||
,
|
||||
(365 / tradingEngine.tradingCurrent.episode.episodeStatistics.days.value)
|
||||
(365 / tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.days.value)
|
||||
) - 1
|
||||
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeStatistics.annualizedRateOfReturn.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.annualizedRateOfReturn.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.annualizedRateOfReturn.value, 10)
|
||||
|
||||
/* Updating Hit or Fail */
|
||||
if (tradingEngine.tradingCurrent.episode.episodeStatistics.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.hitFail.value = 'Hit'
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.hitFail.value = 'Hit'
|
||||
} else {
|
||||
tradingEngine.tradingCurrent.episode.episodeStatistics.hitFail.value = 'Fail'
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeStatistics.hitFail.value = 'Fail'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -264,57 +264,57 @@ exports.newSuperalgosBotModulesTradingEpisode = function (processIndex) {
|
||||
function updateDistanceToEventsCounters() {
|
||||
/* Keeping Distance Counters Up-to-date while avoinding counting before the first event happens. */
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.triggerOn.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.triggerOn.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.triggerOn.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.triggerOn.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.triggerOff.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.triggerOff.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.triggerOff.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.triggerOff.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.takePosition.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.takePosition.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.takePosition.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.takePosition.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closePosition.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closePosition.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closePosition.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closePosition.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.nextPhase.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.nextPhase.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.nextPhase.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.nextPhase.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.moveToPhase.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.moveToPhase.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.moveToPhase.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.moveToPhase.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.createOrder.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.createOrder.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.createOrder.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.createOrder.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.cancelOrder.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.cancelOrder.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.cancelOrder.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.cancelOrder.value++
|
||||
}
|
||||
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value > 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value > 0
|
||||
) {
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value++
|
||||
}
|
||||
}
|
||||
}
|
||||
+42
-42
@@ -121,7 +121,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
case 'Not Open': {
|
||||
{
|
||||
/* During the First cycle we can not create new orders. That is reserved for the Second cycle. */
|
||||
if (tradingEngine.tradingCurrent.episode.cycle.value === 'First') { continue }
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.cycle.value === 'First') { continue }
|
||||
/* When the stage is closing we can not create new orders */
|
||||
if (tradingEngineStage.status.value === 'Closing') { continue }
|
||||
/*
|
||||
@@ -156,7 +156,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
}
|
||||
case 'Open': {
|
||||
/* During the Second cycle we can not cancel orders. That is reserved for the First cycle. */
|
||||
if (tradingEngine.tradingCurrent.episode.cycle.value === 'Second') { continue }
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.cycle.value === 'Second') { continue }
|
||||
|
||||
/* Simulate Events that happens at the Exchange, if needed. */
|
||||
simulateCheckExchangeEvents(tradingEngineStage, tradingSystemOrder, tradingEngineOrder)
|
||||
@@ -354,17 +354,17 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
tradingEngineStage.stageQuotedAsset.sizePlaced.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10)
|
||||
|
||||
/* Updating Episode Counters */
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.orders.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.orders.value++
|
||||
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.createOrder.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.createOrder.value = 1
|
||||
|
||||
/* Create Order Procedure */
|
||||
tradingEngineOrder.status.value = 'Open'
|
||||
tradingEngineOrder.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId()
|
||||
tradingEngineOrder.begin.value = tradingEngine.tradingCurrent.episode.cycle.begin.value
|
||||
tradingEngineOrder.end.value = tradingEngine.tradingCurrent.episode.cycle.end.value
|
||||
tradingEngineOrder.serialNumber.value = tradingEngine.tradingCurrent.episode.episodeCounters.orders.value
|
||||
tradingEngineOrder.begin.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.begin.value
|
||||
tradingEngineOrder.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.end.value
|
||||
tradingEngineOrder.serialNumber.value = tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.orders.value
|
||||
tradingEngineOrder.orderName.value = tradingSystemOrder.name
|
||||
tradingEngineOrder.algorithmName.value = executionAlgorithm.name
|
||||
tradingEngineOrder.situationName.value = situationName
|
||||
@@ -390,7 +390,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
For Market Orders, the rate is irrelevant, since it is not sent to the Exchange.
|
||||
We store at this field the last know price as a reference.
|
||||
*/
|
||||
tradingEngineOrder.rate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngineOrder.rate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
}
|
||||
|
||||
@@ -529,7 +529,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
switch (true) {
|
||||
case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': {
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value - tradingEngineOrder.orderQuotedAsset.size.value < 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value - tradingEngineOrder.orderQuotedAsset.size.value < 0
|
||||
) {
|
||||
const message = 'Possible Negative Balance'
|
||||
let docs = {
|
||||
@@ -540,26 +540,26 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
}
|
||||
contextInfo = {
|
||||
orderQuotedAssetSize: tradingEngineOrder.orderQuotedAsset.size.value,
|
||||
episodeQuotedAssetBalance: tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
episodeQuotedAssetBalance: tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
}
|
||||
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
|
||||
|
||||
tradingSystem.addWarning(
|
||||
[
|
||||
[tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.id, tradingEngineOrder.orderQuotedAsset.size.id],
|
||||
[tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.id, tradingEngineOrder.orderQuotedAsset.size.id],
|
||||
message,
|
||||
docs
|
||||
]
|
||||
)
|
||||
|
||||
tradingEngineOrder.orderQuotedAsset.size.value = tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
tradingEngineOrder.orderQuotedAsset.size.value = tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
tradingEngineOrder.orderBaseAsset.size.value = tradingEngineOrder.orderQuotedAsset.size.value / tradingEngineOrder.rate.value
|
||||
}
|
||||
break
|
||||
}
|
||||
case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': {
|
||||
if (
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value - tradingEngineOrder.orderBaseAsset.size.value < 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value - tradingEngineOrder.orderBaseAsset.size.value < 0
|
||||
) {
|
||||
const message = 'Possible Negative Balance'
|
||||
let docs = {
|
||||
@@ -570,19 +570,19 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
}
|
||||
contextInfo = {
|
||||
orderBaseAssetSize: tradingEngineOrder.orderBaseAsset.size.value,
|
||||
episodeBaseAssetBalance: tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
episodeBaseAssetBalance: tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
}
|
||||
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
|
||||
|
||||
tradingSystem.addWarning(
|
||||
[
|
||||
[tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.id, tradingEngineOrder.orderBaseAsset.size.id],
|
||||
[tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.id, tradingEngineOrder.orderBaseAsset.size.id],
|
||||
message,
|
||||
docs
|
||||
]
|
||||
)
|
||||
|
||||
tradingEngineOrder.orderBaseAsset.size.value = tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
tradingEngineOrder.orderBaseAsset.size.value = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
tradingEngineOrder.orderQuotedAsset.size.value = tradingEngineOrder.orderBaseAsset.size.value * tradingEngineOrder.rate.value
|
||||
}
|
||||
break
|
||||
@@ -674,7 +674,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
tradingEngineOrder.exitType.value = 'Filled'
|
||||
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value = 1
|
||||
|
||||
await updateEndsWithCycle(tradingEngineOrder)
|
||||
|
||||
@@ -701,7 +701,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
tradingEngineOrder.status.value = 'Closed'
|
||||
tradingEngineOrder.exitType.value = 'Closed at the Exchange'
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value = 1
|
||||
|
||||
await updateEndsWithCycle(tradingEngineOrder)
|
||||
|
||||
@@ -737,7 +737,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
tradingEngineOrder.exitType.value = 'Cancelled at the Exchange'
|
||||
}
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value = 1
|
||||
|
||||
await updateEndsWithCycle(tradingEngineOrder)
|
||||
|
||||
@@ -808,7 +808,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
tradingEngineOrder.exitType.value = 'Filled'
|
||||
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value = 1
|
||||
|
||||
updateEndsWithCycle(tradingEngineOrder)
|
||||
|
||||
@@ -961,24 +961,24 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': {
|
||||
|
||||
/* Balance Base Asset: Undo the previous accounting */
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value +
|
||||
previousBaseAssetSizeFilled
|
||||
|
||||
/* Balance Base Asset: Account the current filling and fees */
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value -
|
||||
tradingEngineOrder.orderBaseAsset.sizeFilled.value
|
||||
|
||||
/* Balance Quoted Asset: Undo the previous accounting */
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value -
|
||||
previousQuotedAssetSizeFilled +
|
||||
previousQuotedAssetFeesPaid
|
||||
|
||||
/* Balance Quoted Asset: Account the current filling and fees */
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value +
|
||||
tradingEngineOrder.orderQuotedAsset.sizeFilled.value -
|
||||
tradingEngineOrder.orderQuotedAsset.feesPaid.value
|
||||
break
|
||||
@@ -989,31 +989,31 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': {
|
||||
|
||||
/* Balance Base Asset: Undo the previous accounting */
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value -
|
||||
previousBaseAssetSizeFilled +
|
||||
previousBaseAssetFeesPaid
|
||||
|
||||
/* Balance Base Asset: Account the current filling and fees */
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value +
|
||||
tradingEngineOrder.orderBaseAsset.sizeFilled.value -
|
||||
tradingEngineOrder.orderBaseAsset.feesPaid.value
|
||||
|
||||
/* Balance Quoted Asset: Undo the previous accounting */
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value +
|
||||
previousQuotedAssetSizeFilled
|
||||
|
||||
/* Balance Quoted Asset: Account the current filling and fees */
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value -
|
||||
tradingEngineOrder.orderQuotedAsset.sizeFilled.value
|
||||
break
|
||||
}
|
||||
}
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value, 10)
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value, 10)
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value, 10)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1040,7 +1040,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
tradingEngineOrder.exitType.value = exitType
|
||||
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value = 1
|
||||
|
||||
updateEndsWithCycle(tradingEngineOrder)
|
||||
|
||||
@@ -1122,7 +1122,7 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
tradingEngineOrder.status.value = 'Closed'
|
||||
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closeOrder.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closeOrder.value = 1
|
||||
|
||||
await updateEndsWithCycle(tradingEngineOrder)
|
||||
|
||||
@@ -1238,12 +1238,12 @@ exports.newSuperalgosBotModulesTradingOrders = function (processIndex) {
|
||||
|
||||
function updateEnds(tradingEngineOrder) {
|
||||
if (tradingEngineOrder.status.value === 'Open') {
|
||||
tradingEngineOrder.end.value = tradingEngine.tradingCurrent.episode.candle.end.value
|
||||
tradingEngineOrder.end.value = tradingEngine.tradingCurrent.tradingEpisode.candle.end.value
|
||||
}
|
||||
}
|
||||
|
||||
async function updateEndsWithCycle(tradingEngineOrder) {
|
||||
tradingEngineOrder.end.value = tradingEngine.tradingCurrent.episode.cycle.end.value
|
||||
tradingEngineOrder.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.end.value
|
||||
}
|
||||
|
||||
function updateCounters(tradingEngineOrder) {
|
||||
|
||||
+2
-1
@@ -40,7 +40,8 @@ exports.newSuperalgosBotModulesTradingOutput = function (processIndex) {
|
||||
outputDatasetsMap,
|
||||
timeFrameLabel,
|
||||
tradingProcessDate,
|
||||
fileStorage
|
||||
fileStorage,
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.tradingEpisode.headOfTheMarket.value
|
||||
)
|
||||
|
||||
await tradingSimulationModuleObject.runSimulation(
|
||||
|
||||
+27
-27
@@ -52,16 +52,16 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
function openPosition(situationName) {
|
||||
|
||||
/* Starting begin and end */
|
||||
tradingEngine.tradingCurrent.position.begin.value = tradingEngine.tradingCurrent.episode.cycle.lastBegin.value
|
||||
tradingEngine.tradingCurrent.position.end.value = tradingEngine.tradingCurrent.episode.cycle.lastEnd.value
|
||||
tradingEngine.tradingCurrent.position.begin.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastBegin.value
|
||||
tradingEngine.tradingCurrent.position.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value
|
||||
|
||||
/* Recording the opening at the Trading Engine Data Structure */
|
||||
tradingEngine.tradingCurrent.position.status.value = 'Open'
|
||||
tradingEngine.tradingCurrent.position.serialNumber.value = tradingEngine.tradingCurrent.episode.episodeCounters.positions.value + 1
|
||||
tradingEngine.tradingCurrent.position.serialNumber.value = tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.positions.value + 1
|
||||
tradingEngine.tradingCurrent.position.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId()
|
||||
tradingEngine.tradingCurrent.position.beginRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.beginBalance.value = tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.beginBalance.value = tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.beginRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.beginBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.beginBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.situationName.value = situationName
|
||||
|
||||
/* Initializing Stop and Take Phase */
|
||||
@@ -69,14 +69,14 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
tradingEngine.tradingCurrent.position.takeProfit.takeProfitPhase.value = 1
|
||||
|
||||
/* Updating Episode Counters */
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.positions.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.positions.value++
|
||||
|
||||
/* Inicializing this counter */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.takePosition.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.takePosition.value = 1
|
||||
|
||||
/* Remember the balance we had before taking the position to later calculate profit or loss */
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.beginBalance = tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.beginBalance = tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.beginBalance = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.beginBalance = tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
}
|
||||
|
||||
function closingPosition(exitType) {
|
||||
@@ -95,10 +95,10 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
|
||||
function closePosition() {
|
||||
tradingEngine.tradingCurrent.position.status.value = 'Closed'
|
||||
tradingEngine.tradingCurrent.position.end.value = tradingEngine.tradingCurrent.episode.cycle.lastEnd.value
|
||||
tradingEngine.tradingCurrent.position.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value
|
||||
tradingEngine.tradingCurrent.position.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
|
||||
/*
|
||||
Now that the position is closed, it is the right time to move this position from current to last at the Trading Engine data structure.
|
||||
@@ -109,16 +109,16 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
|
||||
/* Updating Hits & Fails */
|
||||
if (tradingEngine.tradingCurrent.position.positionBaseAsset.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.hits.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.hits.value++
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.position.positionBaseAsset.profitLoss.value < 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.fails.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.fails.value++
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.position.positionQuotedAsset.profitLoss.value > 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.hits.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.hits.value++
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.position.positionQuotedAsset.profitLoss.value < 0) {
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.fails.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.fails.value++
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,10 +163,10 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
end of the position itself.
|
||||
*/
|
||||
node.begin.value =
|
||||
tradingEngine.tradingCurrent.episode.candle.begin.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value +
|
||||
sessionParameters.timeFrame.config.value
|
||||
node.end.value =
|
||||
tradingEngine.tradingCurrent.episode.candle.end.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.end.value +
|
||||
sessionParameters.timeFrame.config.value
|
||||
}
|
||||
|
||||
@@ -405,9 +405,9 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
function updateEnds() {
|
||||
if (tradingEngine.tradingCurrent.position.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.position.end.value = tradingEngine.tradingCurrent.position.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.position.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.endBalance.value = tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,11 +431,11 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
function calculateAssetsStatistics() {
|
||||
/* Profit Loss Calculation */
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.beginBalance
|
||||
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.profitLoss.value =
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value -
|
||||
tradingEngine.tradingCurrent.position.positionQuotedAsset.beginBalance
|
||||
|
||||
tradingEngine.tradingCurrent.position.positionBaseAsset.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.position.positionBaseAsset.profitLoss.value, 10)
|
||||
@@ -478,8 +478,8 @@ exports.newSuperalgosBotModulesTradingPosition = function (processIndex) {
|
||||
/* Profit Loss Calculation */
|
||||
tradingEngine.tradingCurrent.position.positionStatistics.profitLoss.value =
|
||||
(
|
||||
tradingEngine.tradingCurrent.episode.episodeBaseAsset.profitLoss.value * tradingEngine.tradingCurrent.position.endRate.value +
|
||||
tradingEngine.tradingCurrent.episode.episodeQuotedAsset.profitLoss.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.profitLoss.value * tradingEngine.tradingCurrent.position.endRate.value +
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.profitLoss.value
|
||||
)
|
||||
|
||||
tradingEngine.tradingCurrent.position.positionStatistics.profitLoss.value = TS.projects.superalgos.utilities.miscellaneousFunctions.truncateToThisPrecision(tradingEngine.tradingCurrent.position.positionStatistics.profitLoss.value, 10)
|
||||
|
||||
+4
-4
@@ -57,7 +57,7 @@
|
||||
This variable tell us which day we are standing at, specially while working
|
||||
with Daily Files. From this Date is that we are going to load the Daily Files.
|
||||
*/
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.episode.processDate.value =
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.tradingEpisode.processDate.value =
|
||||
TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.tradingParameters.timeRange.config.initialDatetime).valueOf()
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
the simulation loop, once we discover that all candles from a certain date have benn processed.
|
||||
Here is the point where we sync one and the other.
|
||||
*/
|
||||
let tradingProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.episode.processDate.value)
|
||||
let tradingProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.tradingEpisode.processDate.value)
|
||||
|
||||
if (
|
||||
await TS.projects.superalgos.functionLibraries.dataDependenciesFunctions.processSingleFiles(
|
||||
@@ -151,7 +151,7 @@
|
||||
use it to save Output Files and later the Data Ranges. This is the point where
|
||||
the date calculated by the Simulation is applied at the Trading Process Level.
|
||||
*/
|
||||
tradingProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.episode.processDate.value)
|
||||
tradingProcessDate = TS.projects.superalgos.utilities.dateTimeFunctions.removeTime(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.tradingEpisode.processDate.value)
|
||||
|
||||
if (checkStopTaskGracefully() === false) { break }
|
||||
if (checkStopProcessing() === false) { break }
|
||||
@@ -240,7 +240,7 @@
|
||||
indicators to be built and continue the processing once this process is called
|
||||
again.
|
||||
*/
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.episode.headOfTheMarket.value === true) {
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.tradingEpisode.headOfTheMarket.value === true) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -58,13 +58,13 @@ exports.newSuperalgosBotModulesTradingRecords = function (processIndex) {
|
||||
There are a few products configured to be saved only at an specific cycle.
|
||||
*/
|
||||
if (product.config.saveAtCycle !== undefined) {
|
||||
if (tradingEngine.tradingCurrent.episode.cycle.value !== product.config.saveAtCycle) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.cycle.value !== product.config.saveAtCycle) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
/* Clean the file from information of previous executions */
|
||||
//pruneOutputFile(product, outputDatasetArray, tradingEngine.tradingCurrent.episode.candle.end.value)
|
||||
//pruneOutputFile(product, outputDatasetArray, tradingEngine.tradingCurrent.tradingEpisode.candle.end.value)
|
||||
|
||||
/* Clean Open Records */
|
||||
if (product.config.saveAsObjects === true) {
|
||||
@@ -256,8 +256,8 @@ exports.newSuperalgosBotModulesTradingRecords = function (processIndex) {
|
||||
of the day? Easy: the end of the candle must be 1 millisecod before the next day. That happens at any
|
||||
time frame.
|
||||
*/
|
||||
let currentDay = new Date(tradingEngine.tradingCurrent.episode.candle.end.value)
|
||||
let nextDay = new Date(tradingEngine.tradingCurrent.episode.candle.end.value + 1)
|
||||
let currentDay = new Date(tradingEngine.tradingCurrent.tradingEpisode.candle.end.value)
|
||||
let nextDay = new Date(tradingEngine.tradingCurrent.tradingEpisode.candle.end.value + 1)
|
||||
if (currentDay.getUTCDate() !== nextDay.getUTCDate()) {
|
||||
/*
|
||||
We will save the object only if it is closed, becasuse we are at the last candle of the day.
|
||||
|
||||
+34
-34
@@ -55,7 +55,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
let dailyCandles = []
|
||||
for (let i = 0; i < candles.length; i++) {
|
||||
let candle = candles[i]
|
||||
if (candle.begin >= TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.episode.processDate.value) {
|
||||
if (candle.begin >= TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.tradingEpisode.processDate.value) {
|
||||
dailyCandles.push(candle)
|
||||
}
|
||||
}
|
||||
@@ -99,7 +99,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
In this case we already have at the last candle index the next candle to be
|
||||
processed. We will just continue with this candle.
|
||||
*/
|
||||
initialCandle = tradingEngine.tradingCurrent.episode.candle.index.value
|
||||
initialCandle = tradingEngine.tradingCurrent.tradingEpisode.candle.index.value
|
||||
}
|
||||
/*
|
||||
Main Simulation Loop
|
||||
@@ -113,7 +113,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
loop is not empty, then the lascCandle() check will override this value
|
||||
depending on if we really are at the head of the market or not.
|
||||
*/
|
||||
tradingEngine.tradingCurrent.episode.headOfTheMarket.value = true
|
||||
tradingEngine.tradingCurrent.tradingEpisode.headOfTheMarket.value = true
|
||||
/*
|
||||
This is the main simulation loop. It will go through the initial candle
|
||||
until one less than the last candle available. We will never process the last
|
||||
@@ -121,10 +121,10 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
that still can change. So effectively will be processing all closed candles.
|
||||
*/
|
||||
for (let i = initialCandle; i < candles.length - 1; i++) {
|
||||
tradingEngine.tradingCurrent.episode.candle.index.value = i
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.index.value = i
|
||||
|
||||
/* This is the current candle the Simulation is working at. */
|
||||
let candle = candles[tradingEngine.tradingCurrent.episode.candle.index.value]
|
||||
let candle = candles[tradingEngine.tradingCurrent.tradingEpisode.candle.index.value]
|
||||
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> Candle Begin @ ' + (new Date(candle.begin)).toUTCString())
|
||||
@@ -210,7 +210,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
tradingEpisodeModuleObject.reset()
|
||||
TS.projects.superalgos.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.reset()
|
||||
|
||||
let infoMessage = 'Processing candle # ' + tradingEngine.tradingCurrent.episode.candle.index.value + ' @ the ' + tradingEngine.tradingCurrent.episode.cycle.value + ' cycle.'
|
||||
let infoMessage = 'Processing candle # ' + tradingEngine.tradingCurrent.tradingEpisode.candle.index.value + ' @ the ' + tradingEngine.tradingCurrent.tradingEpisode.cycle.value + ' cycle.'
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> ' + infoMessage)
|
||||
|
||||
@@ -222,8 +222,8 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
contextInfo = {
|
||||
candleIndex: tradingEngine.tradingCurrent.episode.candle.index.value,
|
||||
cycle: tradingEngine.tradingCurrent.episode.cycle.value
|
||||
candleIndex: tradingEngine.tradingCurrent.tradingEpisode.candle.index.value,
|
||||
cycle: tradingEngine.tradingCurrent.tradingEpisode.cycle.value
|
||||
}
|
||||
TS.projects.superalgos.utilities.docsFunctions.buildPlaceholder(docs, undefined, undefined, undefined, undefined, undefined, contextInfo)
|
||||
|
||||
@@ -302,7 +302,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
if (sessionParameters.heartbeats.config.date === true || sessionParameters.heartbeats.config.candleIndex === true) {
|
||||
/* We will produce a simulation level heartbeat in order to inform the user this is running. */
|
||||
|
||||
heartBeatDate = new Date(Math.trunc(tradingEngine.tradingCurrent.episode.candle.begin.value / TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS) * TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS)
|
||||
heartBeatDate = new Date(Math.trunc(tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value / TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS) * TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS)
|
||||
|
||||
let fromDate = new Date(sessionParameters.timeRange.config.initialDatetime)
|
||||
let lastDate = new Date(sessionParameters.timeRange.config.finalDatetime)
|
||||
@@ -320,7 +320,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
let processingDate = heartBeatDate.getUTCFullYear() + '-' + TS.projects.superalgos.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + TS.projects.superalgos.utilities.miscellaneousFunctions.pad(heartBeatDate.getUTCDate(), 2)
|
||||
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> Simulation ' + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY + ' Loop # ' + tradingEngine.tradingCurrent.episode.candle.index.value + ' @ ' + processingDate)
|
||||
'[INFO] runSimulation -> loop -> Simulation ' + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_KEY + ' Loop # ' + tradingEngine.tradingCurrent.tradingEpisode.candle.index.value + ' @ ' + processingDate)
|
||||
|
||||
/* Logging to console and disk */
|
||||
if (TS.projects.superalgos.utilities.dateTimeFunctions.areTheseDatesEqual(currentDate, new Date()) === false) {
|
||||
@@ -344,7 +344,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
if (sessionParameters.heartbeats.config.date === true) {
|
||||
hartbeatText = hartbeatText + currentDateString
|
||||
}
|
||||
hartbeatText = hartbeatText + ' Candle # ' + tradingEngine.tradingCurrent.episode.candle.index.value
|
||||
hartbeatText = hartbeatText + ' Candle # ' + tradingEngine.tradingCurrent.tradingEpisode.candle.index.value
|
||||
TS.projects.superalgos.functionLibraries.processFunctions.processHeartBeat(processIndex, hartbeatText, percentage)
|
||||
}
|
||||
}
|
||||
@@ -448,15 +448,15 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
for (let i = 0; i < pArray.length; i++) {
|
||||
element = pArray[i]
|
||||
|
||||
if (tradingEngine.tradingCurrent.episode.candle.end.value === element.end) { // when there is an exact match at the end we take that element
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.candle.end.value === element.end) { // when there is an exact match at the end we take that element
|
||||
return element
|
||||
} else {
|
||||
if (
|
||||
i > 0 &&
|
||||
element.end > tradingEngine.tradingCurrent.episode.candle.end.value
|
||||
element.end > tradingEngine.tradingCurrent.tradingEpisode.candle.end.value
|
||||
) {
|
||||
let previousElement = pArray[i - 1]
|
||||
if (previousElement.end < tradingEngine.tradingCurrent.episode.candle.end.value) {
|
||||
if (previousElement.end < tradingEngine.tradingCurrent.tradingEpisode.candle.end.value) {
|
||||
return previousElement // If one elements goes into the future of currentCandle, then we stop and take the previous element.
|
||||
} else {
|
||||
return
|
||||
@@ -485,7 +485,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
The second +1 is because we need to compare the next candle (remember that the loops allways avoid the
|
||||
last candle of the dataset available.)
|
||||
*/
|
||||
if (tradingEngine.tradingCurrent.episode.candle.index.value + 1 + 1 === candles.length) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.candle.index.value + 1 + 1 === candles.length) {
|
||||
/*
|
||||
When processing daily files, we need a mechanism to turn from one day to the next one.
|
||||
That mechanism is the one implemented here. If we detect that the next candle is the last candle of
|
||||
@@ -495,7 +495,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
let candlesPerDay = TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS / sessionParameters.timeFrame.config.value
|
||||
if (
|
||||
TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES &&
|
||||
tradingEngine.tradingCurrent.episode.candle.index.value + 1 + 1 === candlesPerDay
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.index.value + 1 + 1 === candlesPerDay
|
||||
) {
|
||||
/*
|
||||
Here we found that the next candle of the dataset is the last candle of the day.
|
||||
@@ -504,9 +504,9 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
the first candle of the new dataset we shall receive. The first candle of the next day starts
|
||||
at index 0, so we will position the index now at zero.
|
||||
*/
|
||||
tradingEngine.tradingCurrent.episode.candle.index.value = 0
|
||||
tradingEngine.tradingCurrent.episode.processDate.value =
|
||||
tradingEngine.tradingCurrent.episode.processDate.value + TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.index.value = 0
|
||||
tradingEngine.tradingCurrent.tradingEpisode.processDate.value =
|
||||
tradingEngine.tradingCurrent.tradingEpisode.processDate.value + TS.projects.superalgos.globals.timeConstants.ONE_DAY_IN_MILISECONDS
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -516,21 +516,21 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
next execution it will likely have more candles at the dataset. And if it does not,
|
||||
it will just wait there until it does.
|
||||
*/
|
||||
tradingEngine.tradingCurrent.episode.headOfTheMarket.value = true
|
||||
tradingEngine.tradingCurrent.episode.candle.index.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.headOfTheMarket.value = true
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.index.value++
|
||||
return false
|
||||
} else {
|
||||
|
||||
/* Wd did not reach the head of the market */
|
||||
tradingEngine.tradingCurrent.episode.headOfTheMarket.value = false
|
||||
tradingEngine.tradingCurrent.episode.candle.index.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.headOfTheMarket.value = false
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.index.value++
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
function checkInitialDatetime() {
|
||||
/* Here we check that the current candle is not before the initial datetime defined at the session parameters.*/
|
||||
if (tradingEngine.tradingCurrent.episode.candle.end.value < sessionParameters.timeRange.config.initialDatetime) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.candle.end.value < sessionParameters.timeRange.config.initialDatetime) {
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle before the sessionParameters.timeRange.config.initialDatetime.')
|
||||
return false
|
||||
@@ -540,7 +540,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
|
||||
function checkFinalDatetime() {
|
||||
/* Here we check that the next candle is not after of the user-defined final datetime at the session parameters.*/
|
||||
if (tradingEngine.tradingCurrent.episode.candle.begin.value + sessionParameters.timeFrame.config.value > sessionParameters.timeRange.config.finalDatetime) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value + sessionParameters.timeFrame.config.value > sessionParameters.timeRange.config.finalDatetime) {
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle after the sessionParameters.timeRange.config.finalDatetime.')
|
||||
return false
|
||||
@@ -558,10 +558,10 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
because there the balances have shifted from their resting position.
|
||||
*/
|
||||
|
||||
let stopRunningDate = (new Date(tradingEngine.tradingCurrent.episode.candle.begin.value)).toUTCString()
|
||||
let stopRunningDate = (new Date(tradingEngine.tradingCurrent.tradingEpisode.candle.begin.value)).toUTCString()
|
||||
|
||||
if (sessionParameters.sessionBaseAsset.config.minimumBalance !== undefined) {
|
||||
if (tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) {
|
||||
const errorMessage = 'Min Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -573,7 +573,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeBaseAssetBalance: tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value,
|
||||
episodeBaseAssetBalance: tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value,
|
||||
sessionBaseAssetMinimumBalance: sessionParameters.sessionBaseAsset.config.minimumBalance
|
||||
}
|
||||
|
||||
@@ -587,7 +587,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
if (sessionParameters.sessionBaseAsset.config.maximumBalance !== undefined) {
|
||||
if (tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value >= sessionParameters.sessionBaseAsset.config.maximumBalance) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value >= sessionParameters.sessionBaseAsset.config.maximumBalance) {
|
||||
const errorMessage = 'Max Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -599,7 +599,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeBaseAssetBalance: tradingEngine.tradingCurrent.episode.episodeBaseAsset.balance.value,
|
||||
episodeBaseAssetBalance: tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value,
|
||||
sessionBaseAssetMaximumBalance: sessionParameters.sessionBaseAsset.config.maximumBalance
|
||||
}
|
||||
|
||||
@@ -613,7 +613,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
if (sessionParameters.sessionQuotedAsset.config.minimumBalance !== undefined) {
|
||||
if (tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value <= sessionParameters.sessionQuotedAsset.config.minimumBalance) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value <= sessionParameters.sessionQuotedAsset.config.minimumBalance) {
|
||||
const errorMessage = 'Min Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -625,7 +625,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeQuotedAssetBalance: tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value,
|
||||
episodeQuotedAssetBalance: tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value,
|
||||
sessionQuotedAssetMinimumBalance: sessionParameters.sessionQuotedAsset.config.minimumBalance
|
||||
}
|
||||
|
||||
@@ -639,7 +639,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
if (sessionParameters.sessionQuotedAsset.config.maximumBalance !== undefined) {
|
||||
if (tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value >= sessionParameters.sessionQuotedAsset.config.maximumBalance) {
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value >= sessionParameters.sessionQuotedAsset.config.maximumBalance) {
|
||||
const errorMessage = 'Max Balance reached @ ' + stopRunningDate
|
||||
|
||||
let docs = {
|
||||
@@ -651,7 +651,7 @@ exports.newSuperalgosBotModulesTradingSimulation = function (processIndex) {
|
||||
|
||||
let contextInfo = {
|
||||
timestamp: stopRunningDate,
|
||||
episodeQuotedAssetBalance: tradingEngine.tradingCurrent.episode.episodeQuotedAsset.balance.value,
|
||||
episodeQuotedAssetBalance: tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value,
|
||||
sessionQuotedAssetMaximumBalance: sessionParameters.sessionQuotedAsset.config.maximumBalance
|
||||
}
|
||||
|
||||
|
||||
+22
-22
@@ -145,7 +145,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
tradingStrategyModuleObject.openStrategy(j, situation.name, strategy.name)
|
||||
|
||||
/* Initialize this */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.triggerOn.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.triggerOn.value = 1
|
||||
|
||||
announcementsModuleObject.makeAnnoucements(triggerStage.triggerOn)
|
||||
announcementsModuleObject.makeAnnoucements(triggerStage)
|
||||
@@ -192,7 +192,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
tradingSystem.highlights.push(triggerStage.triggerOff.id)
|
||||
tradingSystem.highlights.push(triggerStage.id)
|
||||
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.triggerOff.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.triggerOff.value = 1
|
||||
announcementsModuleObject.makeAnnoucements(triggerStage.triggerOff)
|
||||
changeStageStatus('Trigger Stage', 'Closed', 'Trigger Off Event')
|
||||
tradingStrategyModuleObject.closeStrategy('Trigger Off')
|
||||
@@ -400,7 +400,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
|
||||
function runManageStage() {
|
||||
|
||||
if (tradingEngine.tradingCurrent.episode.cycle.value !== 'First') { return }
|
||||
if (tradingEngine.tradingCurrent.tradingEpisode.cycle.value !== 'First') { return }
|
||||
|
||||
runWhenStatusIsOpening()
|
||||
runWhenStatusIsOpen()
|
||||
@@ -572,7 +572,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
announcementsModuleObject.makeAnnoucements(nextPhaseEvent)
|
||||
|
||||
/* Reset this counter */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.nextPhase.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.nextPhase.value = 1
|
||||
return // only one event can pass at the time
|
||||
}
|
||||
}
|
||||
@@ -623,7 +623,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
announcementsModuleObject.makeAnnoucements(moveToPhaseEvent)
|
||||
|
||||
/* Reset this counter */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.moveToPhase.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.moveToPhase.value = 1
|
||||
return // only one event can pass at the time
|
||||
}
|
||||
}
|
||||
@@ -679,7 +679,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
announcementsModuleObject.makeAnnoucements(nextPhaseEvent)
|
||||
|
||||
/* Reset this counter */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.nextPhase.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.nextPhase.value = 1
|
||||
return // only one event can pass at the time
|
||||
}
|
||||
}
|
||||
@@ -730,7 +730,7 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
announcementsModuleObject.makeAnnoucements(moveToPhaseEvent)
|
||||
|
||||
/* Reset this counter */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.moveToPhase.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.moveToPhase.value = 1
|
||||
return // only one event can pass at the time
|
||||
}
|
||||
}
|
||||
@@ -751,11 +751,11 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
if (
|
||||
(
|
||||
tradingEngine.tradingCurrent.position.stopLoss.stopLossPosition.value === 'Above' &&
|
||||
tradingEngine.tradingCurrent.episode.candle.max.value >= tradingEngine.tradingCurrent.position.stopLoss.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.max.value >= tradingEngine.tradingCurrent.position.stopLoss.value
|
||||
) ||
|
||||
(
|
||||
tradingEngine.tradingCurrent.position.stopLoss.stopLossPosition.value === 'Below' &&
|
||||
tradingEngine.tradingCurrent.episode.candle.min.value <= tradingEngine.tradingCurrent.position.stopLoss.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.min.value <= tradingEngine.tradingCurrent.position.stopLoss.value
|
||||
)
|
||||
) {
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] checkStopLossOrTakeProfitWasHit -> Stop Loss was hit.')
|
||||
@@ -771,11 +771,11 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
if (
|
||||
(
|
||||
tradingEngine.tradingCurrent.position.takeProfit.takeProfitPosition.value === 'Below' &&
|
||||
tradingEngine.tradingCurrent.episode.candle.min.value <= tradingEngine.tradingCurrent.position.takeProfit.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.min.value <= tradingEngine.tradingCurrent.position.takeProfit.value
|
||||
) ||
|
||||
(
|
||||
tradingEngine.tradingCurrent.position.takeProfit.takeProfitPosition.value === 'Above' &&
|
||||
tradingEngine.tradingCurrent.episode.candle.max.value >= tradingEngine.tradingCurrent.position.takeProfit.value
|
||||
tradingEngine.tradingCurrent.tradingEpisode.candle.max.value >= tradingEngine.tradingCurrent.position.takeProfit.value
|
||||
)
|
||||
) {
|
||||
TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] checkStopLossOrTakeProfitWasHit -> Take Profit was hit.')
|
||||
@@ -933,8 +933,8 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
tradingStrategyModuleObject.closeStrategy('Position Closed')
|
||||
|
||||
/* Distance to Events Updates */
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.closePosition.value = 1
|
||||
tradingEngine.tradingCurrent.episode.distanceToEvent.triggerOff.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.closePosition.value = 1
|
||||
tradingEngine.tradingCurrent.tradingEpisode.distanceToEvent.triggerOff.value = 1
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1073,15 +1073,15 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
*/
|
||||
function openStage(stage) {
|
||||
/* Recording the opening at the Trading Engine Data Structure */
|
||||
stage.begin.value = tradingEngine.tradingCurrent.episode.cycle.lastBegin.value
|
||||
stage.end.value = tradingEngine.tradingCurrent.episode.cycle.lastEnd.value
|
||||
stage.beginRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
stage.begin.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastBegin.value
|
||||
stage.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value
|
||||
stage.beginRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
|
||||
function closeStage(stage) {
|
||||
/* Recording the closing at the Trading Engine Data Structure */
|
||||
stage.end.value = tradingEngine.tradingCurrent.episode.cycle.lastEnd.value
|
||||
stage.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
stage.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value
|
||||
stage.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1092,19 +1092,19 @@ exports.newSuperalgosBotModulesTradingStages = function (processIndex) {
|
||||
*/
|
||||
if (tradingEngine.tradingCurrent.strategyTriggerStage.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.strategyTriggerStage.end.value = tradingEngine.tradingCurrent.strategyTriggerStage.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.strategyTriggerStage.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.strategyTriggerStage.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.strategyOpenStage.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.strategyOpenStage.end.value = tradingEngine.tradingCurrent.strategyOpenStage.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.strategyOpenStage.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.strategyOpenStage.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.strategyManageStage.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.strategyManageStage.end.value = tradingEngine.tradingCurrent.strategyManageStage.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.strategyManageStage.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.strategyManageStage.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
if (tradingEngine.tradingCurrent.strategyCloseStage.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.strategyCloseStage.end.value = tradingEngine.tradingCurrent.strategyCloseStage.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.strategyCloseStage.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.strategyCloseStage.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-8
@@ -38,28 +38,28 @@ exports.newSuperalgosBotModulesTradingStrategy = function (processIndex) {
|
||||
|
||||
function openStrategy(index, situationName, strategyName) {
|
||||
/* Starting begin and end */
|
||||
tradingEngine.tradingCurrent.strategy.begin.value = tradingEngine.tradingCurrent.episode.cycle.lastBegin.value
|
||||
tradingEngine.tradingCurrent.strategy.end.value = tradingEngine.tradingCurrent.episode.cycle.lastEnd.value
|
||||
tradingEngine.tradingCurrent.strategy.begin.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastBegin.value
|
||||
tradingEngine.tradingCurrent.strategy.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value
|
||||
|
||||
/* Recording the opening at the Trading Engine Data Structure */
|
||||
tradingEngine.tradingCurrent.strategy.status.value = 'Open'
|
||||
tradingEngine.tradingCurrent.strategy.serialNumber.value = tradingEngine.tradingCurrent.episode.episodeCounters.strategies.value
|
||||
tradingEngine.tradingCurrent.strategy.serialNumber.value = tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.strategies.value
|
||||
tradingEngine.tradingCurrent.strategy.identifier.value = TS.projects.superalgos.utilities.miscellaneousFunctions.genereteUniqueId()
|
||||
tradingEngine.tradingCurrent.strategy.beginRate.value = tradingEngine.tradingCurrent.episode.candle.min.value
|
||||
tradingEngine.tradingCurrent.strategy.beginRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.min.value
|
||||
|
||||
tradingEngine.tradingCurrent.strategy.index.value = index
|
||||
tradingEngine.tradingCurrent.strategy.situationName.value = situationName
|
||||
tradingEngine.tradingCurrent.strategy.strategyName.value = strategyName
|
||||
|
||||
/* Updating Episode Counters */
|
||||
tradingEngine.tradingCurrent.episode.episodeCounters.strategies.value++
|
||||
tradingEngine.tradingCurrent.tradingEpisode.episodeCounters.strategies.value++
|
||||
}
|
||||
|
||||
function closeStrategy(exitType) {
|
||||
tradingEngine.tradingCurrent.strategy.status.value = 'Closed'
|
||||
tradingEngine.tradingCurrent.strategy.exitType.value = exitType
|
||||
tradingEngine.tradingCurrent.strategy.end.value = tradingEngine.tradingCurrent.episode.cycle.lastEnd.value
|
||||
tradingEngine.tradingCurrent.strategy.endRate.value = tradingEngine.tradingCurrent.episode.candle.min.value
|
||||
tradingEngine.tradingCurrent.strategy.end.value = tradingEngine.tradingCurrent.tradingEpisode.cycle.lastEnd.value
|
||||
tradingEngine.tradingCurrent.strategy.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.min.value
|
||||
/*
|
||||
Now that the strategy is closed, it is the right time to move this strategy from current to last at the Trading Engine data structure.
|
||||
*/
|
||||
@@ -69,7 +69,7 @@ exports.newSuperalgosBotModulesTradingStrategy = function (processIndex) {
|
||||
function updateEnds() {
|
||||
if (tradingEngine.tradingCurrent.strategy.status.value === 'Open') {
|
||||
tradingEngine.tradingCurrent.strategy.end.value = tradingEngine.tradingCurrent.strategy.end.value + sessionParameters.timeFrame.config.value
|
||||
tradingEngine.tradingCurrent.strategy.endRate.value = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
tradingEngine.tradingCurrent.strategy.endRate.value = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -75,7 +75,7 @@ exports.newSuperalgosBotModulesTradingSystem = function (processIndex) {
|
||||
This rate will later help plotting the error at the
|
||||
charts.
|
||||
*/
|
||||
let rate = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
let rate = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
errorDataArray.push(rate)
|
||||
tradingSystem.errors.push(errorDataArray)
|
||||
}
|
||||
@@ -86,7 +86,7 @@ exports.newSuperalgosBotModulesTradingSystem = function (processIndex) {
|
||||
This rate will later help plotting the warning at the
|
||||
charts.
|
||||
*/
|
||||
let rate = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
let rate = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
warningDataArray.push(rate)
|
||||
tradingSystem.warnings.push(warningDataArray)
|
||||
}
|
||||
@@ -97,7 +97,7 @@ exports.newSuperalgosBotModulesTradingSystem = function (processIndex) {
|
||||
This rate will later help plotting the warning at the
|
||||
charts.
|
||||
*/
|
||||
let rate = tradingEngine.tradingCurrent.episode.candle.close.value
|
||||
let rate = tradingEngine.tradingCurrent.tradingEpisode.candle.close.value
|
||||
infoDataArray.push(rate)
|
||||
tradingSystem.infos.push(infoDataArray)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,8 @@ exports.newSuperalgosFunctionLibrariesOutputManagementFunctions = function () {
|
||||
outputDatasetsMap,
|
||||
timeFrameLabel,
|
||||
tradingProcessDate,
|
||||
fileStorage
|
||||
fileStorage,
|
||||
headOfTheMarket
|
||||
) {
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES === true) {
|
||||
/*
|
||||
@@ -31,7 +32,7 @@ exports.newSuperalgosFunctionLibrariesOutputManagementFunctions = function () {
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_FIRST_LOOP === true && TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_RESUMING === false) {
|
||||
await initializeOutputs()
|
||||
} else {
|
||||
if (TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine.tradingCurrent.episode.headOfTheMarket.value === true) {
|
||||
if (headOfTheMarket === true) {
|
||||
await loadFiles()
|
||||
} else {
|
||||
await initializeOutputs()
|
||||
|
||||
@@ -90,7 +90,7 @@ function newSuperalgosFunctionLibraryLearningSessionFunctions() {
|
||||
'Learning Engine->' +
|
||||
'Dynamic Indicators->Indicator Function->' +
|
||||
'Learning Current->Learning Last->Previous->' +
|
||||
'Episode->' +
|
||||
'Learning Episode->' +
|
||||
'Episode Base Asset->Episode Quoted Asset->Episode Counters->Episode Statistics->' +
|
||||
'Strategies->Positions->Orders->Hits->Fails->' +
|
||||
'Profit Loss->Hit Ratio->Hit Fail->Days->ROI->Annualized Rate Of Return->User Defined Statistic->' +
|
||||
|
||||
@@ -90,7 +90,7 @@ function newSuperalgosFunctionLibraryTradingSessionFunctions() {
|
||||
'Trading Engine->' +
|
||||
'Dynamic Indicators->Indicator Function->' +
|
||||
'Trading Current->Trading Last->Previous->' +
|
||||
'Episode->' +
|
||||
'Trading Episode->' +
|
||||
'Episode Base Asset->Episode Quoted Asset->Episode Counters->Episode Statistics->' +
|
||||
'Strategies->Positions->Orders->Hits->Fails->' +
|
||||
'Profit Loss->Hit Ratio->Hit Fail->Days->ROI->Annualized Rate Of Return->User Defined Statistic->' +
|
||||
|
||||
Reference in new issue
Block a user