Merge pull request #2499 from PLuv/portfolio-management
Lots Schema Stuff; Added to Network; More Functions refactoring
This commit is contained in:
55 files changed
+5573
-1719
No files matched your search
+20
-20
@@ -4,27 +4,27 @@
|
||||
# the repo. Unless a later match takes precedence, these will be requested for
|
||||
# review when someone opens a pull request.
|
||||
|
||||
* @Superalgos/foundations-project
|
||||
* @Superalgos/foundations-project
|
||||
|
||||
# Project Teams
|
||||
/Projects/Algorithmic-Trading @Superalgos/algorithmic-trading-project
|
||||
/Projects/Community-Plugins @Superalgos/community-plugins-project
|
||||
/Projects/Data-Mining @Superalgos/data-mining-project
|
||||
/Projects/Ethereum @Superalgos/ethereum-project
|
||||
/Projects/Foundations @Superalgos/foundations-project
|
||||
/Projects/Governance @Superalgos/governance-project
|
||||
/Projects/Machine-Learning @Superalgos/machine-learning-project
|
||||
/Projects/Network @Superalgos/network-project
|
||||
/Projects/Social-Bots @Superalgos/social-bots-project
|
||||
/Projects/Social-Trading @Superalgos/social-trading-project
|
||||
/Projects/TensorFlow @Superalgos/tensorflow-project
|
||||
/Projects/Visual-Scripting @Superalgos/visual-scripting-project
|
||||
/Projects/Algorithmic-Trading/ @Superalgos/algorithmic-trading-project
|
||||
/Projects/Community-Plugins/ @Superalgos/community-plugins-project
|
||||
/Projects/Data-Mining/ @Superalgos/data-mining-project
|
||||
/Projects/Ethereum/ @Superalgos/ethereum-project
|
||||
/Projects/Foundations/ @Superalgos/foundations-project
|
||||
/Projects/Governance/ @Superalgos/governance-project
|
||||
/Projects/Machine-Learning/ @Superalgos/machine-learning-project
|
||||
/Projects/Network/ @Superalgos/network-project
|
||||
/Projects/Social-Bots/ @Superalgos/social-bots-project
|
||||
/Projects/Social-Trading/ @Superalgos/social-trading-project
|
||||
/Projects/TensorFlow/ @Superalgos/tensorflow-project
|
||||
/Projects/Visual-Scripting/ @Superalgos/visual-scripting-project
|
||||
|
||||
/Projects/Education @Superalgos/education-project
|
||||
Docs*/ @Superalgos/education-project
|
||||
/Projects/Education/ @Superalgos/education-project
|
||||
Docs*/ @Superalgos/education-project
|
||||
|
||||
/.github @Superalgos/sysadmins-team
|
||||
/Docker @Superalgos/sysadmins-team
|
||||
.git* @Superalgos/sysadmins-team
|
||||
.docker* @Superalgos/sysadmins-team
|
||||
package*.json @Superalgos/sysadmins-team
|
||||
/.github/ @Superalgos/sysadmins-team
|
||||
/Docker/ @Superalgos/sysadmins-team
|
||||
.git* @Superalgos/sysadmins-team
|
||||
.docker* @Superalgos/sysadmins-team
|
||||
package*.json @Superalgos/sysadmins-team
|
||||
+11
-2
@@ -46,10 +46,12 @@ Projects/Foundations/UI/Function-Libraries/
|
||||
ActionSwitch.js:
|
||||
cp case statements run-all, stop-all, add-missing, references, products, etc.
|
||||
Line 506 && 512 may not need to have been cloned but I did for now - regarding live and paper trading.
|
||||
|
||||
ChartingSpaceFunctions.js: Needs Completion to include Portfolio at Charting Space.
|
||||
'Market Trading|Portfolio Tasks' -> 'nodeType' as param. <= If error arises note that it was not configured this way by Luis when adding the Learning Mine. This is a File that could be heavily re-factored && optimized.
|
||||
ProductFunctions.js:
|
||||
|
||||
Skipping:
|
||||
Projects/Foundatoins/UI/Function-Libraries/ChartingSpaceFunctions.js
|
||||
Projects/Foundations/UI/Function-Libraries/ChartingSpaceFunctions.js: Needs Completion
|
||||
Projects/Foundations/UI/Function-Libraries/CryptoEcosystemFunctions.js
|
||||
|
||||
Projects/Foundations/UI/Function-Libraries/
|
||||
@@ -72,7 +74,14 @@ Projects/Foundations/UI/Spaces/
|
||||
/Panel-Space/Layer.js: Line 173 Only 'Live Portfolio Session'
|
||||
|
||||
Projects/Visual-Scripting/UI/Function-Libraries/
|
||||
<<<<<<< Updated upstream
|
||||
ActionsSwitch.js: *** NOTE: Not sure how to handle line 14 at the current moment. ***
|
||||
UiObjectsFromNodes.js: only if(uiObjectType === 'Live Portfolio Session')
|
||||
=======
|
||||
ActionsSwitch.js:
|
||||
NodePath.js*** NOTE: Not sure how to handle line 14 at the current moment. ***
|
||||
UIObjectsFromNodes.js: Line 977 'Live Portfolio Session' only.
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
Skipping:
|
||||
Projects/Foundations/UI/Spaces/Floating-Space/ConditionEditor.js
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
const {graphql} = require("@octokit/graphql");
|
||||
exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
/*
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
File diff suppressed because it is too large.
Load diff
@@ -159922,13 +159922,13 @@
|
||||
{
|
||||
"type": "Tutorial",
|
||||
"name": "Hello World Tutorial",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Tutorial\\\\tutorial\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Welcome\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"tutorial\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Welcome\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"tutorialSteps": [
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Look Around",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Layer\\\\layer\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Look around\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"layer\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Look around\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "0152006e-4690-4e9f-b7bc-c21ac94e3dfb",
|
||||
"savedPayload": {
|
||||
@@ -159972,7 +159972,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Custom Data Mine ",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Data\\\\data-mine\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Custom Data Mine\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"data-mine\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Custom Data Mine\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "20739207-d5e6-4565-b23a-95f20f6b2cd1",
|
||||
"savedPayload": {
|
||||
@@ -160016,7 +160016,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "The Strategy",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Strategy\\\\strategy\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - The Strategy\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"strategy\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - The Strategy\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "a2607fd9-54da-427e-b18a-5be361aef825",
|
||||
"savedPayload": {
|
||||
@@ -160060,7 +160060,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Move to Trading System",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Trading\\\\trading-system-reference\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Trading System\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"trading-system-reference\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Trading System\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "efafbbda-10f1-4554-8621-b4e0d16064ac",
|
||||
"savedPayload": {
|
||||
@@ -160334,7 +160334,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Open Stage",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Open\\\\open-stage\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Open Stage\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"open-stage\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Open Stage\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "ecd5eda3-5a12-4725-b038-ba0bb350732b",
|
||||
"savedPayload": {
|
||||
@@ -160446,7 +160446,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Close Stage",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Close\\\\close-stage\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Close Stage\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"close-stage\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Close Stage\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "2993cf05-3ecb-45d7-9f43-b84cf93c5b02",
|
||||
"savedPayload": {
|
||||
@@ -160502,7 +160502,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "That's it",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Announcement\\\\announcement\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - That's it\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"announcement\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - That's it\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "bd1438ec-d4e2-448a-b4a4-81f4e980227f",
|
||||
"savedPayload": {
|
||||
@@ -160546,7 +160546,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Update Data Mines",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Data\\\\data-tasks\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Update Data Mines\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"data-tasks\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Update Data Mines\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "e6a225f4-b35a-4c68-bb51-db00b8b2f8f4",
|
||||
"savedPayload": {
|
||||
@@ -160712,7 +160712,7 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "The Chart",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Charting-Space\\\\charting-space\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"pressButton\": \"\",\n \"repositionAtTimeMachineReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - The Chart\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"charting-space\",\n \"project\": \"Foundations\"\n },\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"pressButton\": \"\",\n \"repositionAtTimeMachineReferenceParent\": true,\n \"docs\": {\n \"project\": \"Foundations\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - The Chart\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "fe36de15-dc1c-46d4-a7a6-f9f9979be215",
|
||||
"savedPayload": {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading System->"
|
||||
"compatibleTypes": "->Trading System->Portfolio System->"
|
||||
},
|
||||
"propertyNameAtParent": "dynamicIndicators",
|
||||
"childrenNodesProperties": [
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"type": "Exchange Portfolio Tasks",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Run All Market Portfolio Tasks",
|
||||
"label": "Run All Market Portfolio Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Run",
|
||||
"workDoneLabel": "Run Request Sent",
|
||||
"iconPathOn": "run",
|
||||
"iconPathOff": "run",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Stop All Market Portfolio Tasks",
|
||||
"label": "Stop All Market Portfolio Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Stop",
|
||||
"workDoneLabel": "Stop Request Sent",
|
||||
"iconPathOn": "stop",
|
||||
"iconPathOff": "stop",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Market Portfolio Tasks",
|
||||
"relatedUiObject": "Market Portfolio Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Market Portfolio Tasks",
|
||||
"label": "Add Missing Markets",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Market Portfolio Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Crypto Exchange->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Project Portfolio Tasks->"
|
||||
},
|
||||
"alternativeIcons": "Use Reference Parent",
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"isTitleAllwaysVisible": true,
|
||||
"propertyNameAtParent": "exchangePortfolioTasks",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "marketPortfolioTasks",
|
||||
"type": "array",
|
||||
"childType": "Market Portfolio Tasks",
|
||||
"monitorChildrenRunning": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->"
|
||||
},
|
||||
"propertyNameAtParent": "feeStructure"
|
||||
}
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->Learning Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->Learning Parameters->"
|
||||
},
|
||||
"propertyNameAtParent": "heartbeats"
|
||||
}
|
||||
@@ -49,6 +49,16 @@
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "productionPortfolioTasks",
|
||||
"label": "Add Production Portfolio Tasks",
|
||||
"relatedUiObject": "Production Portfolio Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
@@ -107,6 +117,12 @@
|
||||
"childType": "Production Trading Tasks",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "productionPortfolioTasks",
|
||||
"type": "node",
|
||||
"childType": "Production Portfolio Tasks",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "dataStorage",
|
||||
"type": "node",
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
{
|
||||
"type": "Live Portfolio Session",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Run Portfolio Session",
|
||||
"label": "Run",
|
||||
"workingLabel": "Run Request Sent",
|
||||
"workDoneLabel": "Session Running",
|
||||
"workFailedLabel": "Session Cannot be Run",
|
||||
"secondaryAction": "Stop Portfolio Session",
|
||||
"secondaryLabel": "Stop",
|
||||
"secondaryWorkingLabel": "Stopping...",
|
||||
"secondaryWorkDoneLabel": "Session Stopped",
|
||||
"secondaryWorkFailedLabel": "Session Cannot be Stopped",
|
||||
"secondaryIcon": "stop",
|
||||
"iconPathOn": "run",
|
||||
"iconPathOff": "run",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Portfolio-Management"
|
||||
},
|
||||
{
|
||||
"action": "Resume Portfolio Session",
|
||||
"label": "Resume",
|
||||
"workingLabel": "Resume Request Sent",
|
||||
"workDoneLabel": "Session Running",
|
||||
"workFailedLabel": "Session Cannot be Resumed",
|
||||
"secondaryAction": "Stop Portfolio Session",
|
||||
"secondaryLabel": "Stop",
|
||||
"secondaryWorkingLabel": "Stopping...",
|
||||
"secondaryWorkDoneLabel": "Session Stopped",
|
||||
"secondaryWorkFailedLabel": "Session Cannot be Stopped",
|
||||
"secondaryIcon": "stop",
|
||||
"iconPathOn": "resume",
|
||||
"iconPathOff": "resume",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Portfolio-Management"
|
||||
},
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"dontShowAtFullscreen": true,
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Social Bots",
|
||||
"relatedUiObject": "Social Bots",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Social-Bots",
|
||||
"actionProject": "Visual-Scripting"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
"label": "Add Missing Children",
|
||||
"relatedUiObject": "Portfolio Parameters",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"isTitleAllwaysVisible": true,
|
||||
"addLeftIcons": true,
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n\"folderName\": \"Your-Session-Folder-Name\"\n}"
|
||||
},
|
||||
"level": 2,
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Portfolio System->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Portfolio Process Instance->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "portfolioParameters",
|
||||
"type": "node",
|
||||
"childType": "Portfolio Parameters",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "portfolioSystemReference",
|
||||
"type": "node",
|
||||
"childType": "Portfolio System Reference",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "portfolioEngineReference",
|
||||
"type": "node",
|
||||
"childType": "Portfolio Engine Reference",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "socialBots",
|
||||
"type": "node",
|
||||
"childType": "Social Bots",
|
||||
"project": "Social-Bots"
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "session"
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"type": "Market Portfolio Tasks",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Run All Portfolio Mine Tasks",
|
||||
"label": "Run All Portfolio Mine Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Run",
|
||||
"workDoneLabel": "Run Request Sent",
|
||||
"iconPathOn": "run",
|
||||
"iconPathOff": "run",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Stop All Portfolio Mine Tasks",
|
||||
"label": "Stop All Portfolio Mine Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Stop",
|
||||
"workDoneLabel": "Stop Request Sent",
|
||||
"iconPathOn": "stop",
|
||||
"iconPathOff": "stop",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Portfolio Mine Tasks",
|
||||
"relatedUiObject": "Portfolio Mine Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Portfolio Mine Tasks",
|
||||
"label": "Add Missing Portfolio Mine Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Portfolio Mine Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Market->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Exchange Portfolio Tasks->"
|
||||
},
|
||||
"alternativeIcons": "Use Reference Parent",
|
||||
"title": [
|
||||
"Use Reference Parent Parent Parent",
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"isTitleAllwaysVisible": true,
|
||||
"propertyNameAtParent": "marketPortfolioTasks",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "portfolioMineTasks",
|
||||
"type": "array",
|
||||
"childType": "Portfolio Mine Tasks",
|
||||
"monitorChildrenRunning": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"type": "Portfolio Bot Instance",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Process Instance",
|
||||
"relatedUiObject": "Portfolio Process Instance",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Task->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "processes",
|
||||
"type": "array",
|
||||
"childType": "Portfolio Process Instance",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "bot"
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "Portfolio Engine Reference",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Live Portfolio Session->"
|
||||
},
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Portfolio Engine->"
|
||||
},
|
||||
"propertyNameAtParent": "portfolioEngineReference"
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"type": "Portfolio Mine Tasks",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Run All Task Managers",
|
||||
"label": "Run All Task Managers",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Run",
|
||||
"workDoneLabel": "Run Request Sent",
|
||||
"iconPathOn": "run",
|
||||
"iconPathOff": "run",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Stop All Task Managers",
|
||||
"label": "Stop All Task Managers",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Stop",
|
||||
"workDoneLabel": "Stop Request Sent",
|
||||
"iconPathOn": "stop",
|
||||
"iconPathOff": "stop",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Task Manager",
|
||||
"relatedUiObject": "Task Manager",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add All Tasks",
|
||||
"label": "Add All Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Task",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Portfolio Mine->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Market Portfolio Tasks->"
|
||||
},
|
||||
"alternativeIcons": "Use Reference Parent",
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"isTitleAllwaysVisible": true,
|
||||
"propertyNameAtParent": "portfolioMineTasks",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "taskManagers",
|
||||
"type": "array",
|
||||
"childType": "Task Manager",
|
||||
"monitorChildrenRunning": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"type": "Portfolio Parameters",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add Missing Children",
|
||||
"label": "Add Missing Parameters",
|
||||
"relatedUiObject": "Portfolio Parameters",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Live Portfolio Session->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "sessionBaseAsset",
|
||||
"type": "node",
|
||||
"childType": "Session Base Asset",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "sessionQuotedAsset",
|
||||
"type": "node",
|
||||
"childType": "Session Quoted Asset",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "timeRange",
|
||||
"type": "node",
|
||||
"childType": "Time Range",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "timeFrame",
|
||||
"type": "node",
|
||||
"childType": "Time Frame",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "slippage",
|
||||
"type": "node",
|
||||
"childType": "Slippage",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "feeStructure",
|
||||
"type": "node",
|
||||
"childType": "Fee Structure",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "snapshots",
|
||||
"type": "node",
|
||||
"childType": "Snapshots",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "heartbeats",
|
||||
"type": "node",
|
||||
"childType": "Heartbeats",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "userDefinedParameters",
|
||||
"type": "node",
|
||||
"childType": "User Defined Parameters",
|
||||
"autoAdd": true
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "portfolioParameters"
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"type": "Portfolio Process Instance",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "session",
|
||||
"label": "Add Live Portfolio Session",
|
||||
"relatedUiObject": "Live Portfolio Session",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "executionStartedEvent",
|
||||
"label": "Add Execution Started Event",
|
||||
"relatedUiObject": "Execution Started Event",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"isTitleAllwaysVisible": true,
|
||||
"title": [
|
||||
"Use Reference Parent Parent",
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Process Definition->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Portfolio Bot Instance->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "session",
|
||||
"type": "node",
|
||||
"childType": "Live Portfolio Session"
|
||||
},
|
||||
{
|
||||
"name": "executionStartedEvent",
|
||||
"type": "node",
|
||||
"childType": "Execution Started Event",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "processes"
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "Portfolio System Reference",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Live Portfolio Session->"
|
||||
},
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Portfolio System->"
|
||||
},
|
||||
"propertyNameAtParent": "portfolioSystemReference"
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"type": "Production Portfolio Tasks",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Run All Project Portfolio Tasks",
|
||||
"label": "Run All Project Portfolio Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Run",
|
||||
"workDoneLabel": "Run Request Sent",
|
||||
"iconPathOn": "run",
|
||||
"iconPathOff": "run",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Stop All Project Portfolio Tasks",
|
||||
"label": "Stop All Project Portfolio Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Stop",
|
||||
"workDoneLabel": "Stop Request Sent",
|
||||
"iconPathOn": "stop",
|
||||
"iconPathOff": "stop",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Project Portfolio Tasks",
|
||||
"relatedUiObject": "Project Portfolio Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Project Portfolio Tasks",
|
||||
"label": "Add Missing Projects",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Project Portfolio Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 0,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->LAN Network Node->"
|
||||
},
|
||||
"propertyNameAtParent": "productionPortfolioTasks",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "projectPortfolioTasks",
|
||||
"type": "array",
|
||||
"childType": "Project Portfolio Tasks",
|
||||
"monitorChildrenRunning": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"type": "Project Portfolio Tasks",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Run All Exchange Portfolio Tasks",
|
||||
"label": "Run All Exchange Portfolio Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Run",
|
||||
"workDoneLabel": "Run Request Sent",
|
||||
"iconPathOn": "run",
|
||||
"iconPathOff": "run",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Stop All Exchange Portfolio Tasks",
|
||||
"label": "Stop All Exchange Portfolio Tasks",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Stop",
|
||||
"workDoneLabel": "Stop Request Sent",
|
||||
"iconPathOn": "stop",
|
||||
"iconPathOff": "stop",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Exchange Portfolio Tasks",
|
||||
"relatedUiObject": "Exchange Portfolio Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add Missing Exchange Portfolio Tasks",
|
||||
"label": "Add Missing Exchanges",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
"relatedUiObject": "Exchange Portfolio Tasks",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"alternativeIcons": "Use Reference Parent Parent",
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Project Definition->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Testing Portfolio Tasks->Production Portfolio Tasks->"
|
||||
},
|
||||
"propertyNameAtParent": "projectPortfolioTasks",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "exchangePortfolioTasks",
|
||||
"type": "array",
|
||||
"childType": "Exchange Portfolio Tasks",
|
||||
"monitorChildrenRunning": true
|
||||
}
|
||||
],
|
||||
"icon": "bitcoin"
|
||||
}
|
||||
@@ -32,7 +32,7 @@
|
||||
"compatibleTypes": "->Exchange Account Asset->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->"
|
||||
},
|
||||
"alternativeIcons": "Use Reference Grandparent",
|
||||
"title": [
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"compatibleTypes": "->Exchange Account Asset->"
|
||||
},
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->"
|
||||
},
|
||||
"alternativeIcons": "Use Reference Grandparent",
|
||||
"title": [
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->"
|
||||
},
|
||||
"propertyNameAtParent": "slippage"
|
||||
}
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->"
|
||||
},
|
||||
"propertyNameAtParent": "snapshots"
|
||||
}
|
||||
@@ -43,7 +43,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->"
|
||||
"compatibleTypes": "->Data Mine Tasks->Trading Mine Tasks->Portfolio Mine Tasks->Learning Mine Tasks->"
|
||||
},
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
|
||||
@@ -67,6 +67,16 @@
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "bot",
|
||||
"label": "Add Portfolio Bot Instance",
|
||||
"relatedUiObject": "Portfolio Bot Instance",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
@@ -110,6 +120,11 @@
|
||||
"type": "node",
|
||||
"childType": "Trading Bot Instance"
|
||||
},
|
||||
{
|
||||
"name": "bot",
|
||||
"type": "node",
|
||||
"childType": "Portfolio Bot Instance"
|
||||
},
|
||||
{
|
||||
"name": "bot",
|
||||
"type": "node",
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->Learning Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->Learning Parameters->"
|
||||
},
|
||||
"propertyNameAtParent": "timeFrame"
|
||||
}
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->Learning Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->Learning Parameters->"
|
||||
},
|
||||
"propertyNameAtParent": "timeRange"
|
||||
}
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"level": 3,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trading Parameters->Learning Parameters->"
|
||||
"compatibleTypes": "->Trading Parameters->Portfolio Parameters->Learning Parameters->"
|
||||
},
|
||||
"propertyNameAtParent": "userDefinedParameters"
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"review": "Superalgos Project Review",
|
||||
"pageNumber": 32,
|
||||
"type": "Superalgos Review - A city within a jungle",
|
||||
"definition": {
|
||||
"text": "Technical analysis is hard, so is Superalgos. I've had to go through the tutorials at least 3 times for most stuff to click.\n\nIt helps to have a large monitor.\n\nNeobii",
|
||||
"updated": 1635714967650
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
+7
-1
@@ -32,7 +32,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Этот шаг воспроизводит видео в полноэкранном режиме.",
|
||||
"updated": 1635585594036
|
||||
"updated": 1635585594036,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bu adım, bir videoyu tam ekran modunda oynatır.",
|
||||
"updated": 1635948665275
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+28
-4
@@ -43,7 +43,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Получите доступ в мню узла Data Tasks и найдите кнопку \"Run all project data tasks\" в правом верхнем углу...",
|
||||
"updated": 1635591220354
|
||||
"updated": 1635591220354,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Veri Görevleri ( Data Tasks) düğüm menüsüne erişin ve sağ üst köşedeki \"\"Tüm proje veri görevlerini çalıştır\" ( Run All Project Data Tasks ) düğmesini bulun...\n",
|
||||
"updated": 1635850868808
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -86,7 +92,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Нажмите кнопку \"Run all project data tasks\"! Подтвердите запрос, нажав кнопку во второй раз.",
|
||||
"updated": 1635591295731
|
||||
"updated": 1635591295731,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "\"Tüm proje veri görevlerini çalıştır\" (Run All Project Data Tasks) düğmesine tıklayın! Düğmeye ikinci kez tıklayarak isteği onaylayın.",
|
||||
"updated": 1635850977185
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -127,7 +139,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Примерно через 30 секунд Вы должны увидеть уведомление о состоянии под узлом Data Tasks nоказывающее, что 1 из 1 узла Exchange Data Tasks - запущен.",
|
||||
"updated": 1635591483326
|
||||
"updated": 1635591483326,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Yaklaşık 30 saniye içinde, Veri Görevleri (Data Tasks) düğümünün altında, 1 Borsa Veri Görevi (Exchange Data Tasks) düğümünün çalıştığını belirten bir durum bildirimi görmelisiniz.",
|
||||
"updated": 1635851348844
|
||||
}
|
||||
],
|
||||
"updated": 1622190035816
|
||||
@@ -169,7 +187,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Ваше консольное приложение должно показать что-то похожее на то, как показано на видео в следующем шаге.",
|
||||
"updated": 1635591567030
|
||||
"updated": 1635591567030,
|
||||
"style": "Note"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Konsol uygulamanız, bir sonraki adımdaki videoya benzer bir şey göstermelidir.",
|
||||
"updated": 1635851222308
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+7
-1
@@ -26,7 +26,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Этот шаг восроизводит видео в полноэкранном режиме.",
|
||||
"updated": 1635592760036
|
||||
"updated": 1635592760036,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bu adım, bir videoyu tam ekran modunda oynatır.",
|
||||
"updated": 1635942925637
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+28
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я только что вовлек Вас глубоко в рамки операции по Сбору данных. Посмотрите, как продвигается экземпляр Sensor Bot справа от вас!",
|
||||
"updated": 1635592906231
|
||||
"updated": 1635592906231,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Seni Veri Madenciliği operasyonunun derinliklerine sürükledim. Sağınızdaki Sensör Botu Aşaması'nın (Sensor Bot Instance ) ilerleyişini görüyorsunuz.",
|
||||
"updated": 1635943205649
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,7 +90,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сенсорный бот в настоящий момент извлекает данные из обмена. Как только бот завершит извлечение необходимых данных для определенного диапазона дат и времени, пороизойдет что-то действительно классное... автоматически!",
|
||||
"updated": 1635593777398
|
||||
"updated": 1635593777398,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Sensör botu şu anda borsadan veri alıyor. Tanımlanan tarih/saat aralığı için çekme işlemini tamamlar tamamlamaz gerçekten harika bir şey olacak... Otomatik olarak!",
|
||||
"updated": 1635944904679
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -125,7 +137,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы можете догадаться, что это может быть?",
|
||||
"updated": 1635593428455
|
||||
"updated": 1635593428455,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bunun ne olabileceğini tahmin edebilir misin?",
|
||||
"updated": 1635943403659
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -167,7 +185,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Извлечение данных из Binance должно занять не более 3-5 минут, или немного больше, в зависимости от Вашего устройства. Не можете дождаться? Отлично! Нажмите Next для быстрой подсазки!",
|
||||
"updated": 1635593584865
|
||||
"updated": 1635593584865,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Binance'den verileri çıkarmak 3 ila 5 dakikadan uzun sürmemeli veya donanımınıza bağlı olarak birazcık daha uzun sürebilir. Bekleyemez misin? İyi! Hızlı bir ipucu için İleri'ye tıklayın!",
|
||||
"updated": 1635943388237
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Верно! Индикаторы начнуть работать, как только сенсорный бот закончит свою работу! ",
|
||||
"updated": 1635593922335
|
||||
"updated": 1635593922335,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Sensör botu işini bitirir bitirmez göstergeler çalışmaya başlayacak!",
|
||||
"updated": 1635944180619
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,7 +90,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы наблюдаете процесс увеличения объема свечей. Он превращает одноминутные свечи, которые сенсорный бот загружает с биржи, в свечи для всех временных рамок.",
|
||||
"updated": 1635594020777
|
||||
"updated": 1635594020777,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Mum Hacimlerini (Candles Volumes) sürçlerini izliyorsunuz. Sensör botunun borsadan indirdiği bir dakikalık mumları tüm zaman dilimleri için mumlara dönüştürüyor.",
|
||||
"updated": 1635944864225
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -126,7 +138,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Что произойдет после того, как он закончит?",
|
||||
"updated": 1635594060919
|
||||
"updated": 1635594060919,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bitirdikten sonra ne olacak?",
|
||||
"updated": 1635944274935
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -167,7 +185,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Другим ботам необходимы большие объемы свечей для полного окончания их работы для того, чтобы они могли приступить к своей. Представьте, что боту нужно рассчитать Simple Moving Average за 20 периодов для все временных рамок. Ему необходим Data Product, полученный по объемам свечей в качестве входных данных для рассчета SMA. Мы назывем такую потребность Data Dependency.",
|
||||
"updated": 1635594443248
|
||||
"updated": 1635594443248,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Diğer botların işlerini bitirmeleri için Candles Volumes'e ihtiyaçları var, böylece kendi işlerini yapmaya başlayabilirler. Bir botun tüm zaman dilimleri için 20 dönemlik Basit Hareketli Ortalama ( Simple Moving Average ) hesaplaması gerektiğini hayal edin. SMA hesaplaması için girdi olarak Candles Volumes tarafından üretilen Veri Ürünü'ne ( Data Product ) ihtiyacı var. Böyle bir ihtiyaca Veri Bağımlılığı ( Data Dependency) diyoruz.",
|
||||
"updated": 1635944420387
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я хочу показать Вам кое-что, пока операция data mining в процессе. Я научу Вас передвигаться... за 2 секунды!",
|
||||
"updated": 1635596573723
|
||||
"updated": 1635596573723,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Veri madenciliği işlemi devam ederken size bir şey göstermek istiyorum. Sana yürümeyi öğreteceğim... iki saniyede!",
|
||||
"updated": 1635944955783
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,7 +90,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Просто нажмите на мышку и потащите!",
|
||||
"updated": 1635607627239
|
||||
"updated": 1635607627239,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Candles Volumes düğümünü tıklayın ve mouse'unuzla sürükleyin. Tıpkı Sürükle/Bırak gibi.",
|
||||
"updated": 1635945252224
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -126,7 +138,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Легко, правда? Отлично! Однако дизайнерское пространство - это огромное место и я бы не хотел, чтобы у Вас возникли определенные тендиниты, передвигаясь таким образом.",
|
||||
"updated": 1635608367917
|
||||
"updated": 1635608367917,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Kolay değil mi? Harika! Ancak tasarım alanı çok büyük bir yer.",
|
||||
"updated": 1635945059358
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -167,7 +185,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я научу Вас ещё паре трюкам в следующих нескольких шагах.",
|
||||
"updated": 1635608431495
|
||||
"updated": 1635608431495,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Sonraki birkaç adımda size birkaç numara daha öğreteceğim.",
|
||||
"updated": 1635945085983
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Да! Вы можете использовать клавиатуру тоже! Вам понравится это в путешествиях на большие расстояния в дизайнерсоки пространстве.",
|
||||
"updated": 1635608556366
|
||||
"updated": 1635608556366,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Evet! Klavyenizi de kullanabilirsiniz! Tasarım alanında uzun mesafeli seyahatler için buna bayılacaksınız!. Mouse tuşuna basılı bir şekilde CTRl + ← → ↑ ↓ tuş kombinasyonun kullanarak düğümleri daha hızlı şekillde ve uzun mesafelere taşıyabilirsiniz.",
|
||||
"updated": 1635945735067
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -85,7 +91,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Обычные пользователи могут использовать клавишу Ctrl плюс клавиши со стрелками: ← → ↑ ↓",
|
||||
"updated": 1635608613854
|
||||
"updated": 1635608613854,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Düzenli veya aceleci arkadaşlar Ctrl key plus arrow keys: ← → ↑ ↓ kombinasyonunu kulanabilir :)",
|
||||
"updated": 1635945715510
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -127,7 +139,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Обратите внимание, что удержание нажатых клавиш заставляет Вас летать!",
|
||||
"updated": 1635608711456
|
||||
"updated": 1635608711456,
|
||||
"style": "Note"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Tuşları basılı tutmanın sizi uçurucağına dikkat edin!",
|
||||
"updated": 1635945760749
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -169,7 +187,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Конечно, Mac-фанаты должны заменить Ctrl на Cmd.",
|
||||
"updated": 1635608795704
|
||||
"updated": 1635608795704,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Elbette Mac kullananlar Ctrl'yi Cmd ile değiştirmeli",
|
||||
"updated": 1635945810777
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+23
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "На самом деле Вы не собираетесь телепортироваться и не будете искривлять временное пространство, но это почти похоже на это! Пришло время научиться использовать карту пространство дизайна.",
|
||||
"updated": 1635608952753
|
||||
"updated": 1635608952753,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Tamam, aslında ışınlanmayacaksınız ya da uzay-zamanı bükmeyeceksiniz, ama neredeyse öyleymiş gibi geliyor! Tasarım alanı haritasını kullanmayı öğrenmenin zamanı geldi.",
|
||||
"updated": 1635946013543
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,7 +90,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я упоминал ранее, что Design Space - огромно, и я не шутил! Переход из одного угла в противоположный занял бы сотни щелчков и передвижений. Хотя использование клавиатуры позволяет развивать головокружительные скорости, но это не так круто, как телепортация! Вот как это работает:",
|
||||
"updated": 1635609086655
|
||||
"updated": 1635609086655,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Daha önce Tasarım Alanının çok büyük olduğunu söylemiştim ve ciddiydim! Bir köşeden diğerine gitmek yüzlerce tıklama ve sürükleme gerektirir. Klavyeyi kullanarak bunu yapabilisiniz ancak ışınlanma kadar havalı değil! Bu nasıl çalışır:",
|
||||
"updated": 1635948006704
|
||||
}
|
||||
],
|
||||
"updated": 1616414991030
|
||||
@@ -127,7 +139,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Щелкните правой кнопкой мыши, чтобы открыть карту, а затем щелкните левой кнопкой мыши в любой точке, чтобы перейти в это определенное место!",
|
||||
"updated": 1635609696214
|
||||
"updated": 1635609696214,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Haritayı küçütmek için mouseun sağ tuşuna tıklayın ve istediğiniz noktaya gitmek için mouse'un sol tuşunu tıklayın!. Örneğin, Tasarım alanında herhangi bir yerde sağ tıkayın, daha sonra \" Lan Netwok \" düğümünün üzerine sol tıklayın. İşte Tasarım alanında ( Design Space ) gezinmek bu kadar kolay.",
|
||||
"updated": 1635947930242
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -168,7 +186,8 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Видите меня в левом нижнем углу пространства дизайна? Тепер Вы знаете, где меня найти!",
|
||||
"updated": 1635609809487
|
||||
"updated": 1635609809487,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Есть еще один инструмент, который может оказаться полезным для управлением временным простарнством! Встроенная функция масштабирования браузера!",
|
||||
"updated": 1635609923705
|
||||
"updated": 1635609923705,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Uzay-zamanı manipüle etmek için yararlı bulabileceğiniz bir araç daha var! Yerel tarayıcı yakınlaştırma işlevi!",
|
||||
"updated": 1635951488270
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -85,7 +91,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": " Может, у Вас возникнет желание визуализировать большие участки Design Space , чем позволяет Ваш экран.",
|
||||
"updated": 1635610025598
|
||||
"updated": 1635610025598,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bazen Tasarım Alanının ( Design Space )ekranınızın izin verdiğinden daha büyük bölümlerini görselleştirmek isteyebilirsiniz.",
|
||||
"updated": 1635951580747
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -127,7 +139,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Нажмите Ctrl и прокрутите колесико мыши в Windows или нажмите ⌘ и \"+\" или \"-\" на Mac.",
|
||||
"updated": 1635610153211
|
||||
"updated": 1635610153211,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Windows'ta Ctrl'ye basın ve fare tekerleği le büyürün küçültün. Yada Mac'te ⌘ ve - veya +'yı kullanın.",
|
||||
"updated": 1635951641013
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -173,7 +191,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Chrome указывает уровень масштабирования в правом верхнем углу. Когда Вы увеличиваете или уменьшаете масштаб, пространство дизайна центрируется на экране. Используйте карту пространства дизайна, чтобы вернуться туда, где Вы были.",
|
||||
"updated": 1635610570380
|
||||
"updated": 1635610570380,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Chrome, sağ üst köşedeki yakınlaştırma düzeyini gösterir. Yakınlaştırırken veya uzaklaştırırken, tasarım alanı ekranda ortalanır. Bulunduğunuz yere geri dönmek için tasarım alanı haritasını kullanın.",
|
||||
"updated": 1635951707385
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Прежде чем мы вернемся к делу, позвольте предоставить еще некоторую информацию о том, как работает это учебное пособие.",
|
||||
"updated": 1635610768332
|
||||
"updated": 1635610768332,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "İşe dönmeden önce, size eğitimlerin nasıl çalıştığı hakkında birkaç şey anlatayım.",
|
||||
"updated": 1635952527951
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -85,7 +91,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вкратце, Вы - главный!",
|
||||
"updated": 1635610786071
|
||||
"updated": 1635610786071,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Kısacası patron sensin!",
|
||||
"updated": 1635952544111
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -121,7 +133,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы можете остановиться в изучении учебного пособия и пропустить шаги или полные темы в любой момент. Как только Вы будете готовы снова приступить к изучению материала, найдите меня, Tutorial, в нижней части пространства дизайна. Выберите Resume в меню, чтобы начать с того места, где Вы остановились, или с первого шага, который Вы пропустили. Выберите Play, чтобы начать с самого начала!",
|
||||
"updated": 1635611174272
|
||||
"updated": 1635611174272,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Herhangi bir noktada bir öğreticiyi durdurabilir ve adımları veya tüm konuları atlayabilirsiniz. Dersi tekrar almaya hazır olduğunuzda, tasarım alanının alt kısmında bizi bulun. Kaldığınız yerden veya atladığınız ilk adımdan başlamak için menüde Sürdür'ü seçin. Baştan başlamak için Oynat'ı seçin!",
|
||||
"updated": 1635952588337
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -162,7 +180,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Давайте попробуем! Нажмите кнопку Stop ниже, и как только я исчезну, откройте меню и выберите Resume.",
|
||||
"updated": 1635611369099
|
||||
"updated": 1635611369099,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Hadi deneyelim! Aşağıdaki Durdur düğmesini tıklayın ve ben gittiğimde menümü açın ve Devam Et'i seçin.",
|
||||
"updated": 1635952612454
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -42,7 +42,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "В этот момент я, вероятно, перезагружаю Ваш мозг. Но не волнуйтесь... Вы можете вернуться к любому предыдущему шагу.",
|
||||
"updated": 1635611688610
|
||||
"updated": 1635611688610,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bu noktada, muhtemelen hipokampüsünüzden taşıyorum! Ama merak etmeyin... önceki herhangi bir adıma geri dönebilirsiniz!",
|
||||
"updated": 1635952703561
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,7 +90,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вам когда-нибудь понадобится напоминание по любой из этих тем...",
|
||||
"updated": 1635611733808
|
||||
"updated": 1635611733808,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bu konulardan herhangi biri hakkında bir hatırlatmaya ihtiyacınız olursa...",
|
||||
"updated": 1635952719290
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -125,7 +137,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Найдите Tutorial Topic и повторите ее! Вы можете найти меня в левом нижнем углу пространства дизайна, развернуть, просмотреть иерархию тем и шагов и нажать Play на любом шаге или теме. Темы расположены по часовой стрелке, начиная с правой стороны главного узла Tutorial.",
|
||||
"updated": 1635612033411
|
||||
"updated": 1635612033411,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bir Eğitim Konusu ( Tutorial Topic ) bulun ve tekrar oynatın! Tasarım alanının sol alt köşesinde beni bulabilir, genişletebilir, konuların ve adımların hiyerarşisine göz atabilir ve herhangi birinde Oynat'a tıklayabilirsiniz. Konular, ana Öğretici düğümünün sağ tarafından başlayarak saat yönünde düzenlenir.",
|
||||
"updated": 1635953243684
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -167,7 +185,13 @@
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "\"Нужно быстрое напоминание?\" Найдите этот шаг в разделе \"Tutorials & Help\" - ниже. Затем нажмите Stop и перезапустите, нажав Play на указанном Tutorial Step!",
|
||||
"updated": 1635612228869
|
||||
"updated": 1635612228869,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "\"Hızlı Bir Hatırlatıcıya mı ihtiyacınız var?\" Bu adımı aşağıdaki \"Öğreticiler ve Yardım\" başlığı altında bulun. Ardından Durdur'a tıklayın ve söz konusu Eğitim Adımında ( Tutorial Step ) Oynat'a tıklayarak yeniden başlatın!",
|
||||
"updated": 1635953298548
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
if (checkThisDataBranch(lanNetworkNode.dataTasks) === true) { return }
|
||||
if (checkThisTradingBranch(lanNetworkNode.testingTradingTasks) === true) { return }
|
||||
if (checkThisTradingBranch(lanNetworkNode.productionTradingTasks) === true) { return }
|
||||
if (checkThisPortfolioBranch(lanNetworkNode.portfolioTasks) === true) { return }
|
||||
if (checkThisPortfolioBranch(lanNetworkNode.productionPortfolioTasks) === true) { return }
|
||||
if (checkThisLearningBranch(lanNetworkNode.learningTasks) === true) { return }
|
||||
|
||||
function checkThisDataBranch(branch) {
|
||||
@@ -231,8 +231,8 @@
|
||||
let marketTasks = exchangeTasks.marketPortfolioTasks[p]
|
||||
if (marketTasks.referenceParent === undefined) { continue }
|
||||
if (marketTasks.referenceParent.id !== TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.id) { continue }
|
||||
for (let q = 0; q < marketTasks.PortfolioMineTasks.length; q++) {
|
||||
let mineTasks = marketTasks.PortfolioMineTasks[q]
|
||||
for (let q = 0; q < marketTasks.portfolioMineTasks.length; q++) {
|
||||
let mineTasks = marketTasks.portfolioMineTasks[q]
|
||||
for (let k = 0; k < mineTasks.taskManagers.length; k++) {
|
||||
let taskManager = mineTasks.taskManagers[k]
|
||||
for (let m = 0; m < taskManager.tasks.length; m++) {
|
||||
|
||||
@@ -111,23 +111,25 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
let fordwardTestingSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Forward Testing Session')
|
||||
let paperTradingSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Paper Trading Session')
|
||||
let liveTradingSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Live Trading Session')
|
||||
let livePortfolioSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Live Portfolio Session')
|
||||
let backLearningSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Back Learning Session')
|
||||
let liveLearningSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Live Learning Session')
|
||||
|
||||
scanSessionArray(backtestingSessionsArray)
|
||||
scanSessionArray(fordwardTestingSessionsArray)
|
||||
scanSessionArray(paperTradingSessionsArray)
|
||||
scanSessionArray(liveTradingSessionsArray)
|
||||
scanSessionArray(backLearningSessionsArray)
|
||||
scanSessionArray(liveLearningSessionsArray)
|
||||
scanSessionArray(backtestingSessionsArray, 'Market Trading Tasks')
|
||||
scanSessionArray(fordwardTestingSessionsArray, 'Market Trading Tasks')
|
||||
scanSessionArray(paperTradingSessionsArray, 'Market Trading Tasks')
|
||||
scanSessionArray(liveTradingSessionsArray, 'Market Trading Tasks')
|
||||
scanSessionArray(livePortfolioSessionsArray, 'Market Portfolio Tasks')
|
||||
scanSessionArray(backLearningSessionsArray, 'Market Trading Tasks')
|
||||
scanSessionArray(liveLearningSessionsArray, 'Market Trading Tasks')
|
||||
|
||||
function scanSessionArray(sessionsArray) {
|
||||
function scanSessionArray(sessionsArray, nodeType) {
|
||||
for (let i = 0; i < sessionsArray.length; i++) {
|
||||
let session = sessionsArray[i]
|
||||
let environment = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(session, node.payload.referenceParent.type, undefined, true, false, true, false)
|
||||
if (environment === undefined) { continue }
|
||||
if (environment.id !== node.payload.referenceParent.id) { continue }
|
||||
let market = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false)
|
||||
let market = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(session, nodeType, undefined, true, false, true, false)
|
||||
if (market.payload.referenceParent === undefined) { continue }
|
||||
if (UI.projects.visualScripting.utilities.nodeChildren.isMissingChildrenById(node, session, true) === true) {
|
||||
createTimeMachine(node, session, market.payload.referenceParent, lanNetworkNode, rootNodes)
|
||||
@@ -148,9 +150,10 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
timeMachine.timeFrameScale.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
timeMachine.timeScale.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
timeMachine.rateScale.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
|
||||
/*
|
||||
We will create 3 Time Line Charts for the Trading Mine Products
|
||||
*/
|
||||
* We will create 3 Time Line Charts for the Trading Mine Products:
|
||||
*/
|
||||
mineProducts = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Trading Mine Products')
|
||||
for (let j = 0; j < mineProducts.length; j++) {
|
||||
let mineProduct = mineProducts[j]
|
||||
@@ -160,13 +163,13 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
*/
|
||||
if (mineProduct.payload.parentNode === undefined) { continue }
|
||||
if (mineProduct.payload.parentNode.payload.referenceParent.id !== session.id) { continue }
|
||||
|
||||
/*
|
||||
At the current version of Superalgos, beta 6, there is only one Trading Mine,
|
||||
with only one bot, and it has so many data products that we want to put them
|
||||
in 3 different timeline charts. So we will create 3 charts, connect them,
|
||||
and delete from each one 1/3 of the layers. We do all that next:
|
||||
*/
|
||||
|
||||
for (let k = 0; k < 3; k++) {
|
||||
let timelineChart = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart')
|
||||
|
||||
@@ -207,9 +210,68 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
We will create 3 Time Line Charts for the Learning Mine Products
|
||||
*/
|
||||
* We will create 3 Time Line Charts for the Portfolio Mine Products:
|
||||
*/
|
||||
mineProducts = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Portfolio Mine Products')
|
||||
for (let j = 0; j < mineProducts.length; j++) {
|
||||
let mineProduct = mineProducts[j]
|
||||
/*
|
||||
The mine products found so far, belongs to any session. To filter all the sessions
|
||||
that are not the one we are interested in, we do the following:
|
||||
*/
|
||||
if (mineProduct.payload.parentNode === undefined) { continue }
|
||||
if (mineProduct.payload.parentNode.payload.referenceParent.id !== session.id) { continue }
|
||||
|
||||
/*
|
||||
For the legacy reasons stated above @Trading Mine Products we will create 3 charts, connect them,
|
||||
and delete from each one 1/3 of the layers. We do all that next:
|
||||
*/
|
||||
for (let k = 0; k < 3; k++) {
|
||||
let timelineChart = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart')
|
||||
|
||||
UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(timelineChart.layerManager, mineProduct)
|
||||
timelineChart.payload.floatingObject.collapseToggle()
|
||||
timelineChart.layerManager.payload.floatingObject.collapseToggle()
|
||||
timelineChart.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
timelineChart.layerManager.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
|
||||
let menu = timelineChart.layerManager.payload.uiObject.menu
|
||||
menu.internalClick('Add All Mine Layers')
|
||||
menu.internalClick('Add All Mine Layers')
|
||||
|
||||
switch (k) {
|
||||
case 0: {
|
||||
timelineChart.name = 'Portfolio Engine'
|
||||
deleteNodeByName('Portfolio System')
|
||||
deleteNodeByName('Simulation Objects')
|
||||
break
|
||||
}
|
||||
case 1: {
|
||||
timelineChart.name = 'Portfolio System'
|
||||
deleteNodeByName('Portfolio Engine')
|
||||
deleteNodeByName('Simulation Objects')
|
||||
break
|
||||
}
|
||||
case 2: {
|
||||
timelineChart.name = 'Simulation Objects'
|
||||
deleteNodeByName('Portfolio Engine')
|
||||
deleteNodeByName('Portfolio System')
|
||||
break
|
||||
}
|
||||
}
|
||||
function deleteNodeByName(nodeName) {
|
||||
let nodeToDelete = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(timelineChart.layerManager, undefined, nodeName, true, true, false, false)
|
||||
if (nodeToDelete === undefined) { return }
|
||||
UI.projects.visualScripting.functionLibraries.nodeDeleter.deleteUIObject(nodeToDelete, rootNodes)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We will create 3 Time Line Charts for the Learning Mine Products:
|
||||
*/
|
||||
mineProducts = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(lanNetworkNode, 'Learning Mine Products')
|
||||
for (let j = 0; j < mineProducts.length; j++) {
|
||||
let mineProduct = mineProducts[j]
|
||||
@@ -219,13 +281,13 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
*/
|
||||
if (mineProduct.payload.parentNode === undefined) { continue }
|
||||
if (mineProduct.payload.parentNode.payload.referenceParent.id !== session.id) { continue }
|
||||
|
||||
/*
|
||||
At the current version of Superalgos, beta 6, there is only one Learning Mine,
|
||||
with only one bot, and it has so many data products that we want to put them
|
||||
in 3 different timeline charts. So we will create 3 charts, connect them,
|
||||
and delete from each one 1/3 of the layers. We do all that next:
|
||||
*/
|
||||
|
||||
for (let k = 0; k < 3; k++) {
|
||||
let timelineChart = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart')
|
||||
|
||||
@@ -319,6 +381,7 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
function scanNetworkNode(lanNetworkNode) {
|
||||
let testingTradingTasks = UI.projects.visualScripting.utilities.branches.findInBranch(lanNetworkNode, 'Testing Trading Tasks', node, true)
|
||||
let productionTradingTasks = UI.projects.visualScripting.utilities.branches.findInBranch(lanNetworkNode, 'Production Trading Tasks', node, true)
|
||||
let productionPortfolioTasks = UI.projects.visualScripting.utilities.branches.findInBranch(lanNetworkNode, 'Production Portfolio Tasks', node, true)
|
||||
|
||||
if (UI.projects.visualScripting.utilities.nodeChildren.isMissingChildrenById(node, testingTradingTasks, true) === true) {
|
||||
let dashboard = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Dashboard')
|
||||
@@ -331,6 +394,12 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
|
||||
UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(dashboard, productionTradingTasks)
|
||||
dashboard.name = productionTradingTasks.type + ' ' + lanNetworkNode.name
|
||||
}
|
||||
|
||||
if (UI.projects.visualScripting.utilities.nodeChildren.isMissingChildrenById(node, productionPortfolioTasks, true) === true) {
|
||||
let dashboard = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Dashboard')
|
||||
UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(dashboard, productionPortfolioTasks)
|
||||
dashboard.name = productionPortfolioTasks.type + ' ' + lanNetworkNode.name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -256,15 +256,18 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
function installInNetworkNode(lanNetworkNode) {
|
||||
|
||||
let tradingSessionsCreatedArray = []
|
||||
let portfolioSessionsCreatedArray = []
|
||||
let learningSessionsCreatedArray = []
|
||||
|
||||
installDataTasksTasks()
|
||||
installLearningTasksTasks()
|
||||
isntallTradingTasksTasks()
|
||||
installTradingTasksTasks()
|
||||
installPortfolioTasksTasks()
|
||||
|
||||
installDataMinesData()
|
||||
installLearningMinesData()
|
||||
installTradingMineData()
|
||||
installPortfolioMineData()
|
||||
|
||||
function installDataTasksTasks() {
|
||||
/*
|
||||
@@ -343,7 +346,7 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
}
|
||||
}
|
||||
|
||||
function isntallTradingTasksTasks() {
|
||||
function installTradingTasksTasks() {
|
||||
/*
|
||||
Next we complete the missing stuff at Testing Trading Tasks
|
||||
*/
|
||||
@@ -400,6 +403,64 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
}
|
||||
}
|
||||
|
||||
function installPortfolioTasksTasks() {
|
||||
/*
|
||||
Next we complete the missing stuff at Testing Portfolio Tasks
|
||||
*/
|
||||
//installEnvironment('Testing Portfolio Tasks')
|
||||
/*
|
||||
Next we complete the missing stuff at Production Portfolio Tasks
|
||||
*/
|
||||
installEnvironment('Production Portfolio Tasks')
|
||||
|
||||
function installEnvironment(environmentType) {
|
||||
/*
|
||||
Now we install the environment at the current Network Node
|
||||
*/
|
||||
let portfolioTasks = UI.projects.visualScripting.utilities.branches.findInBranch(lanNetworkNode, environmentType, node, true)
|
||||
if (portfolioTasks === undefined) {
|
||||
portfolioTasks = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, environmentType)
|
||||
}
|
||||
/*
|
||||
We will make ourselves sure that the Project Portfolio Tasks nodes are there.
|
||||
*/
|
||||
portfolioTasks.payload.uiObject.menu.internalClick('Add Missing Project Portfolio Tasks')
|
||||
portfolioTasks.payload.uiObject.menu.internalClick('Add Missing Project Portfolio Tasks')
|
||||
|
||||
for (let i = 0; i < portfolioTasks.projectPortfolioTasks.length; i++) {
|
||||
let projectPortfolioTasks = portfolioTasks.projectPortfolioTasks[i]
|
||||
projectPortfolioTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_90
|
||||
|
||||
if (projectPortfolioTasks.project === "Foundations") {
|
||||
installTheRestOfTheBranch(projectPortfolioTasks)
|
||||
}
|
||||
}
|
||||
|
||||
function installTheRestOfTheBranch(projectPortfolioTasks) {
|
||||
let exchangePortfolioTasks = UI.projects.visualScripting.utilities.nodeChildren.findOrCreateChildWithReference(projectPortfolioTasks, 'Exchange Portfolio Tasks', cryptoExchange)
|
||||
exchangePortfolioTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
let marketPortfolioTask = UI.projects.visualScripting.utilities.nodeChildren.findAndRecreateChildWithReference(exchangePortfolioTasks, 'Market Portfolio Tasks', market, rootNodes)
|
||||
|
||||
UI.projects.foundations.utilities.menu.menuClick(marketPortfolioTask, 'Add Missing Portfolio Mine Tasks', true)
|
||||
UI.projects.foundations.utilities.menu.menuClickOfNodeArray(marketPortfolioTask.portfolioMineTasks, 'Add All Tasks', true)
|
||||
|
||||
/* This will be needed at the charting space, for creating Dashboards */
|
||||
//let backtestingSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(marketPortfolioTask, 'Backtesting Session')
|
||||
let livePortfolioSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(marketPortfolioTask, 'Live Portfolio Session')
|
||||
//let paperPortfolioSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(marketPortfolioTask, 'Paper Portfolio Session')
|
||||
//let forwardSessionsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(marketPortfolioTask, 'Forward Testing Session')
|
||||
let allSessionsArray = livePortfolioSessionsArray;
|
||||
/*backtestingSessionsArray
|
||||
.concat(livePortfolioSessionsArray)
|
||||
.concat(paperPortfolioSessionsArray)
|
||||
.concat(forwardSessionsArray)*/
|
||||
portfolioSessionsCreatedArray = portfolioSessionsCreatedArray.concat(allSessionsArray)
|
||||
|
||||
dashboardsArray.push({ environmentNode: portfolioTasks, lanNetworkNode: lanNetworkNode, sessionsArray: allSessionsArray })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function installDataMinesData() {
|
||||
/*
|
||||
Here we complete the missing stuff at Data Mines Data
|
||||
@@ -548,6 +609,61 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function installPortfolioMineData() {
|
||||
/*
|
||||
Here we complete the missing stuff at Data Mines Data
|
||||
*/
|
||||
let dataStorage = UI.projects.visualScripting.utilities.branches.findInBranch(lanNetworkNode, 'Data Storage', node, true)
|
||||
if (dataStorage === undefined) {
|
||||
dataStorage = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(lanNetworkNode, 'Data Storage')
|
||||
}
|
||||
let portfolioMinesData = UI.projects.visualScripting.utilities.branches.findInBranch(dataStorage, 'Portfolio Mines Data', node, true)
|
||||
if (portfolioMinesData === undefined) {
|
||||
portfolioMinesData = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(dataStorage, 'Portfolio Mines Data')
|
||||
}
|
||||
portfolioMinesData.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_90
|
||||
/*
|
||||
We will make ourselves sure that the Project Portfolio Products nodes are there.
|
||||
*/
|
||||
portfolioMinesData.payload.uiObject.menu.internalClick('Add Missing Project Portfolio Products')
|
||||
portfolioMinesData.payload.uiObject.menu.internalClick('Add Missing Project Portfolio Products')
|
||||
|
||||
for (let i = 0; i < portfolioMinesData.projectPortfolioProducts.length; i++) {
|
||||
let projectPortfolioProducts = portfolioMinesData.projectPortfolioProducts[i]
|
||||
projectPortfolioProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_45
|
||||
|
||||
if (projectPortfolioProducts.project === "Foundations") {
|
||||
installTheRestOfTheBranch(projectPortfolioProducts)
|
||||
}
|
||||
}
|
||||
|
||||
function installTheRestOfTheBranch(projectPortfolioProducts) {
|
||||
|
||||
let exchangePortfolioProducts = UI.projects.visualScripting.utilities.nodeChildren.findOrCreateChildWithReference(projectPortfolioProducts, 'Exchange Portfolio Products', cryptoExchange)
|
||||
exchangePortfolioProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
let marketPortfolioProducts = UI.projects.visualScripting.utilities.nodeChildren.findAndRecreateChildWithReference(exchangePortfolioProducts, 'Market Portfolio Products', market, rootNodes)
|
||||
marketPortfolioProducts.payload.floatingObject.collapseToggle()
|
||||
/*
|
||||
Create the new session references.
|
||||
*/
|
||||
for (let i = 0; i < portfolioSessionsCreatedArray.length; i++) {
|
||||
let session = portfolioSessionsCreatedArray[i]
|
||||
if (UI.projects.visualScripting.utilities.nodeChildren.isMissingChildrenById(marketPortfolioProducts, session, true) === true) {
|
||||
UI.projects.foundations.functionLibraries.dataStorageFunctions.createSessionReference(marketPortfolioProducts, session, 'Portfolio Session Reference')
|
||||
}
|
||||
}
|
||||
/*
|
||||
Create everything inside the session references.
|
||||
*/
|
||||
for (let j = 0; j < marketPortfolioProducts.portfolioSessionReferences.length; j++) {
|
||||
let sessionReference = marketPortfolioProducts.portfolioSessionReferences[j]
|
||||
UI.projects.foundations.utilities.menu.menuClick(sessionReference, 'Add All Portfolio Mine Products', true)
|
||||
UI.projects.foundations.utilities.menu.menuClickOfNodeArray(sessionReference.portfolioMineProducts, 'Add All Data Products', true)
|
||||
sessionReference.payload.floatingObject.collapseToggle()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -605,6 +721,14 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
if (marketTradingTasks.payload.referenceParent.id === market.id) {
|
||||
UI.projects.visualScripting.functionLibraries.nodeDeleter.deleteUIObject(timeMachine, rootNodes)
|
||||
}
|
||||
|
||||
let marketPortfolioTasks = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(session, 'Market Portfolio Tasks', undefined, true, false, true, false)
|
||||
if (marketPortfolioTasks === undefined) { continue }
|
||||
if (marketPortfolioTasks.payload === undefined) { continue }
|
||||
if (marketPortfolioTasks.payload.referenceParent === undefined) { continue }
|
||||
if (marketPortfolioTasks.payload.referenceParent.id === market.id) {
|
||||
UI.projects.visualScripting.functionLibraries.nodeDeleter.deleteUIObject(timeMachine, rootNodes)
|
||||
}
|
||||
}
|
||||
/*
|
||||
We create a time machine for each session added during the previous processing.
|
||||
@@ -651,6 +775,14 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
if (marketTradingTasks.payload.referenceParent.id === market.id) {
|
||||
UI.projects.visualScripting.functionLibraries.nodeDeleter.deleteUIObject(timeMachine, rootNodes)
|
||||
}
|
||||
|
||||
let marketPortfolioTasks = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(session, 'Market Portfolio Tasks', undefined, true, false, true, false)
|
||||
if (marketPortfolioTasks === undefined) { continue }
|
||||
if (marketPortfolioTasks.payload === undefined) { continue }
|
||||
if (marketPortfolioTasks.payload.referenceParent === undefined) { continue }
|
||||
if (marketPortfolioTasks.payload.referenceParent.id === market.id) {
|
||||
UI.projects.visualScripting.functionLibraries.nodeDeleter.deleteUIObject(timeMachine, rootNodes)
|
||||
}
|
||||
}
|
||||
|
||||
/* Delete all Dashboards that does not have time machines inside. */
|
||||
@@ -688,16 +820,20 @@ function newFoundationsFunctionLibraryCryptoEcosystemFunctions() {
|
||||
|
||||
let marketDataTasksArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Data Tasks')
|
||||
let marketTradingTasksArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Trading Tasks')
|
||||
let marketPortfolioTasksArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Portfolio Tasks')
|
||||
let marketLearningTasksArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Learning Tasks')
|
||||
let marketDataProductsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Data Products')
|
||||
let marketTradingProductsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Trading Products')
|
||||
let marketPortfolioProductsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Portfolio Products')
|
||||
let marketLearningProductsArray = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(network, 'Market Learning Products')
|
||||
|
||||
uninstalMarketArray(marketDataTasksArray)
|
||||
uninstalMarketArray(marketTradingTasksArray)
|
||||
uninstalMarketArray(marketPortfolioTasksArray)
|
||||
uninstalMarketArray(marketLearningTasksArray)
|
||||
uninstalMarketArray(marketDataProductsArray)
|
||||
uninstalMarketArray(marketTradingProductsArray)
|
||||
uninstalMarketArray(marketPortfolioProductsArray)
|
||||
uninstalMarketArray(marketLearningProductsArray)
|
||||
|
||||
function uninstalMarketArray(marketArray) {
|
||||
|
||||
@@ -39,6 +39,13 @@ function newFoundationsFunctionLibraryProductFunctions() {
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < rootNodes.length; i++) {
|
||||
let rootNode = rootNodes[i]
|
||||
if (rootNode.type === 'Portfolio Mine') {
|
||||
installInPortfolioMine(rootNode)
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < rootNodes.length; i++) {
|
||||
let rootNode = rootNodes[i]
|
||||
if (rootNode.type === 'LAN Network') {
|
||||
@@ -255,6 +262,72 @@ function newFoundationsFunctionLibraryProductFunctions() {
|
||||
|
||||
}
|
||||
|
||||
function installInPortfolioMine(portfolioMine) {
|
||||
let savePlugin = false
|
||||
for (let j = 0; j < portfolioMine.portfolioBots.length; j++) {
|
||||
let portfolioBotNode = portfolioMine.portfolioBots[j]
|
||||
|
||||
for (let k = 0; k < portfolioBotNode.processes.length; k++) {
|
||||
let process = portfolioBotNode.processes[k]
|
||||
|
||||
/**
|
||||
* In case the data mine is not referenced at all, we must add it
|
||||
*/
|
||||
|
||||
let dataMineDependency = UI.projects.visualScripting.utilities.nodeChildren.findOrCreateChildWithReference(process.processDependencies, 'Data Mine Data Dependencies', productDataMineParent)
|
||||
|
||||
let botDataDependencies = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(dataMineDependency, undefined, productIndicatorBot.name, false, true, false, false)
|
||||
|
||||
/**
|
||||
* If Bot Data Dependency exists add Data Dependencies
|
||||
* Otherwise create the Bot Data Dependency and add Data Dependencies to newly created Bot Data
|
||||
*/
|
||||
if (botDataDependencies !== undefined) {
|
||||
addAllDataDependenciesIfNotExists(botDataDependencies)
|
||||
} else {
|
||||
let newBotDataDependencies = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(dataMineDependency, 'Bot Data Dependencies')
|
||||
newBotDataDependencies.name = productIndicatorBot.name
|
||||
addAllDataDependenciesIfNotExists(newBotDataDependencies)
|
||||
}
|
||||
|
||||
|
||||
function addAllDataDependenciesIfNotExists(botDataDependencies) {
|
||||
for (let l = 0; l < product.datasets.length; l++) {
|
||||
let dataset = product.datasets[l]
|
||||
|
||||
// Explicit check is needed so we know if we have to save the plugin or not
|
||||
if (UI.projects.visualScripting.utilities.nodeChildren.isMissingChildrenById(botDataDependencies, dataset, true) === true) {
|
||||
savePlugin = true
|
||||
let dataDependency = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(botDataDependencies, 'Data Dependency')
|
||||
UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(dataDependency, dataset)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* There is no reason to save the plugin if no modifications have been made to the hierarchy
|
||||
* We will save the plugin only if we get to the point were we have to add the data dependencies
|
||||
*
|
||||
*/
|
||||
if (savePlugin) {
|
||||
for (let i = 0; i < rootNodes.length; i++) {
|
||||
let rootNode = rootNodes[i]
|
||||
if (rootNode.type === 'Plugins') {
|
||||
let portfolioMinePlugin = UI.projects.visualScripting.utilities.meshes.findNodeInNodeMesh(rootNode, 'Plugin Portfolio Mines', undefined, false, true, false, false)
|
||||
|
||||
for (let j = 0; j < portfolioMinePlugin.pluginFiles.length; j++) {
|
||||
let pluginFile = portfolioMinePlugin.pluginFiles[j]
|
||||
|
||||
UI.projects.communityPlugins.functionLibraries.pluginsFunctions.savePlugin(pluginFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will install the product into existing Charting Space
|
||||
* It is mandatory to have at least a dashboard which contains at least one time machine
|
||||
|
||||
@@ -819,8 +819,8 @@
|
||||
"id": "b7c934fd-8031-4615-bf9c-94280e452511",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31142.160562311805,
|
||||
"y": 28850
|
||||
"x": 31012.25675174414,
|
||||
"y": 28775
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30882.352941176472,
|
||||
@@ -831,7 +831,7 @@
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"distanceToParent": 2,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
@@ -863,7 +863,152 @@
|
||||
"name": "New Weight Votes Switch",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"weightVotesSwitch": [],
|
||||
"weightVotesSwitch": [
|
||||
{
|
||||
"type": "Weight Votes Switch",
|
||||
"name": "Weight Votes - Mentorship",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"weightVotesSwitch": [],
|
||||
"poolWeightVotes": [
|
||||
{
|
||||
"type": "Pool Weight Vote",
|
||||
"name": "Mentorship Rewards Pool",
|
||||
"config": "{\n\"percentage\": 90\n}",
|
||||
"project": "Governance",
|
||||
"id": "2a573cd8-f8d6-4b36-9f09-986902a25427",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31144.852941176472,
|
||||
"y": 28870.096189432334
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 31482.352941176472,
|
||||
"y": 28870.096189432334
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 4,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"referenceParent": {
|
||||
"type": "Pool",
|
||||
"name": "Mentorship Rewards",
|
||||
"id": "53ddcc36-f693-4193-8284-999a88f1c944"
|
||||
},
|
||||
"referenceParentCombinedNodePath": [
|
||||
[
|
||||
"Superalgos",
|
||||
"Pools"
|
||||
],
|
||||
[
|
||||
"Governance Programs",
|
||||
"Pool Class"
|
||||
],
|
||||
[
|
||||
"Community Building Programs",
|
||||
"Pool Class"
|
||||
],
|
||||
[
|
||||
"Mentorship Program",
|
||||
"Pool Class"
|
||||
],
|
||||
[
|
||||
"Mentorship Rewards",
|
||||
"Pool"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Pool Weight Vote",
|
||||
"name": "Mentorship Bonus Pool",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"id": "44ffa08c-ebcc-4ca2-833a-d7e4a4a96841",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31651.102941176472,
|
||||
"y": 28577.812615655086
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 31482.352941176472,
|
||||
"y": 28870.096189432334
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 4,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"referenceParent": {
|
||||
"type": "Pool",
|
||||
"name": "Mentorship Bonus",
|
||||
"id": "ff1e4a84-3363-4348-ad15-31a34898fa82"
|
||||
},
|
||||
"referenceParentCombinedNodePath": [
|
||||
[
|
||||
"Superalgos",
|
||||
"Pools"
|
||||
],
|
||||
[
|
||||
"Governance Programs",
|
||||
"Pool Class"
|
||||
],
|
||||
[
|
||||
"Community Building Programs",
|
||||
"Pool Class"
|
||||
],
|
||||
[
|
||||
"Mentorship Program",
|
||||
"Pool Class"
|
||||
],
|
||||
[
|
||||
"Mentorship Bonus",
|
||||
"Pool"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"assetWeightVotes": [],
|
||||
"featureWeightVotes": [],
|
||||
"positionWeightVotes": [],
|
||||
"id": "af870025-4eac-4adf-b929-67b76bfac227",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31482.352941176472,
|
||||
"y": 28870.096189432334
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 31594.852941176472,
|
||||
"y": 29064.951905283833
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"poolWeightVotes": [],
|
||||
"assetWeightVotes": [],
|
||||
"featureWeightVotes": [],
|
||||
@@ -876,12 +1021,12 @@
|
||||
"id": "5b8b92d0-1df5-45f1-9ae7-75c87a8302db",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31482.352941176472,
|
||||
"y": 29000
|
||||
"x": 31819.852941176472,
|
||||
"y": 29064.951905283833
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 31407.352941176472,
|
||||
"y": 29129.903810567666
|
||||
"x": 31594.852941176472,
|
||||
"y": 29064.951905283833
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -943,11 +1088,11 @@
|
||||
"id": "37a9c875-a9bc-4ab1-a00e-f248f818f311",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31407.352941176472,
|
||||
"y": 29129.903810567666
|
||||
"x": 31594.852941176472,
|
||||
"y": 29064.951905283833
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 31332.352941176472,
|
||||
"x": 31482.352941176472,
|
||||
"y": 29259.807621135333
|
||||
},
|
||||
"floatingObject": {
|
||||
@@ -975,11 +1120,11 @@
|
||||
"id": "e8e3f63a-b9fb-47d7-8fc9-c0634a0f2425",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31407.352941176472,
|
||||
"y": 29389.711431703
|
||||
"x": 31594.852941176472,
|
||||
"y": 29454.663336986832
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 31332.352941176472,
|
||||
"x": 31482.352941176472,
|
||||
"y": 29259.807621135333
|
||||
},
|
||||
"floatingObject": {
|
||||
@@ -999,7 +1144,7 @@
|
||||
"id": "352b5f30-d971-478b-9085-4c9ff9ddb388",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31332.352941176472,
|
||||
"x": 31482.352941176472,
|
||||
"y": 29259.807621135333
|
||||
},
|
||||
"targetPosition": {
|
||||
@@ -1011,7 +1156,7 @@
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"distanceToParent": 4,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
@@ -1322,7 +1467,7 @@
|
||||
"financialPrograms": {
|
||||
"type": "Financial Programs",
|
||||
"name": "New Financial Programs",
|
||||
"config": "{\"percentage\": 35}",
|
||||
"config": "{\n \"percentage\": 35\n}",
|
||||
"project": "Governance",
|
||||
"stakingProgram": {
|
||||
"type": "Staking Program",
|
||||
@@ -1420,8 +1565,8 @@
|
||||
"id": "a851317c-1283-40e1-9434-a78c5c88caaa",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30102.930077770474,
|
||||
"y": 28250
|
||||
"x": 30232.83388833814,
|
||||
"y": 28325
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30362.737698905807,
|
||||
@@ -1432,7 +1577,7 @@
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"distanceToParent": 2,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
@@ -1517,7 +1662,7 @@
|
||||
"id": "899f92f8-5e00-42a0-8316-10c95dd2a6b1",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30582.352941176472,
|
||||
"x": 30732.352941176472,
|
||||
"y": 28400
|
||||
},
|
||||
"targetPosition": {
|
||||
@@ -1529,7 +1674,7 @@
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"distanceToParent": 2,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
|
||||
@@ -26,12 +26,12 @@
|
||||
"id": "e2dec054-20c2-426e-8303-4a6f475a02e0",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19237,
|
||||
"y": 8865.077136594007
|
||||
"x": 18867.384757729335,
|
||||
"y": 9044.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19387,
|
||||
"y": 9124.884757729338
|
||||
"x": 19127.192378864667,
|
||||
"y": 9194.5
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -49,12 +49,12 @@
|
||||
"id": "80ffa07e-7b69-4d76-a315-67ca38b1d340",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19387,
|
||||
"y": 9124.884757729338
|
||||
"x": 19127.192378864667,
|
||||
"y": 9194.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19537,
|
||||
"y": 9384.692378864669
|
||||
"x": 19387,
|
||||
"y": 9344.5
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -78,15 +78,15 @@
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "c4ed9b78-6a1f-44fc-b9dd-29b54a5b40a5",
|
||||
"id": "96a3ff2b-49de-4fb5-9bbf-921973ce770f",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20137,
|
||||
"y": 9384.692378864669
|
||||
"x": 19906.615242270665,
|
||||
"y": 9044.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19837,
|
||||
"y": 9384.692378864669
|
||||
"x": 19646.807621135333,
|
||||
"y": 9194.5
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -104,12 +104,12 @@
|
||||
"id": "22e35987-f640-40cf-b9e2-fe3af87b5bfd",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19837,
|
||||
"y": 9384.692378864669
|
||||
"x": 19646.807621135333,
|
||||
"y": 9194.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19537,
|
||||
"y": 9384.692378864669
|
||||
"x": 19387,
|
||||
"y": 9344.5
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -127,8 +127,8 @@
|
||||
"id": "83f57cc3-8e3f-40a6-9f79-15ecd7732094",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19537,
|
||||
"y": 9384.692378864669
|
||||
"x": 19387,
|
||||
"y": 9344.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19387,
|
||||
@@ -530,8 +530,8 @@
|
||||
"id": "cecc4fa4-4486-4785-8f98-27d5b4e6f6b8",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19537,
|
||||
"y": 9904.307621135331
|
||||
"x": 19687,
|
||||
"y": 9644.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19387,
|
||||
@@ -550,6 +550,91 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"liquidityPrograms": {
|
||||
"type": "Liquidity Programs",
|
||||
"name": "New Liquidity Programs",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"liquidityProgram": [
|
||||
{
|
||||
"type": "Liquidity Program",
|
||||
"name": "New Liquidity Program",
|
||||
"config": "{\n \"asset\": \"BUSD\"\n}",
|
||||
"project": "Governance",
|
||||
"tokensAwarded": {
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "5dc56466-4214-467c-b3c1-13d38ebff7d8",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19387,
|
||||
"y": 10544.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19387,
|
||||
"y": 10244.5
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "a438ce8c-3836-4043-a171-143a009821ce",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19387,
|
||||
"y": 10244.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19387,
|
||||
"y": 9944.5
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "8ef4f8b3-42e2-4484-84e2-92292bba8415",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 19387,
|
||||
"y": 9944.5
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 19387,
|
||||
"y": 9644.5
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "2f247174-4c0a-4a8b-9b21-33504b7e6be7",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
|
||||
@@ -2,6 +2,7 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
let thisObject = {
|
||||
syncronizeTasksFoundAtWorkspaceWithBackEnd: syncronizeTasksFoundAtWorkspaceWithBackEnd,
|
||||
syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd: syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd,
|
||||
syncronizePortfolioSessionsFoundAtWorkspaceWithBackEnd: syncronizePortfolioSessionsFoundAtWorkspaceWithBackEnd,
|
||||
syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd: syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd,
|
||||
playTutorials: playTutorials,
|
||||
recreateWorkspace: recreateWorkspace,
|
||||
@@ -16,6 +17,7 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
let mapOfNodes
|
||||
let tasksFoundAtWorkspace
|
||||
let tradingSessionsFoundAtWorkspace
|
||||
let portfolioSessionsFoundAtWorkspace
|
||||
let learningSessionsFoundAtWorkspace
|
||||
let tutorialsToPlay
|
||||
|
||||
@@ -29,6 +31,7 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
mapOfNodes = new Map()
|
||||
tasksFoundAtWorkspace = []
|
||||
tradingSessionsFoundAtWorkspace = []
|
||||
portfolioSessionsFoundAtWorkspace = []
|
||||
learningSessionsFoundAtWorkspace = []
|
||||
tutorialsToPlay = []
|
||||
|
||||
@@ -84,6 +87,18 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
totalPlugin = totalPlugin + project.pluginTradingEngines.pluginFiles.length
|
||||
pluginAllTheseFiles(project.pluginTradingEngines.pluginFiles, 'Trading-Engines')
|
||||
}
|
||||
if (project.pluginPortfolioMines !== undefined) {
|
||||
totalPlugin = totalPlugin + project.pluginPortfolioMines.pluginFiles.length
|
||||
pluginAllTheseFiles(project.pluginPortfolioMines.pluginFiles, 'Portfolio-Mines')
|
||||
}
|
||||
if (project.pluginPortfolioSystems !== undefined) {
|
||||
totalPlugin = totalPlugin + project.pluginPortfolioSystems.pluginFiles.length
|
||||
pluginAllTheseFiles(project.pluginPortfolioSystems.pluginFiles, 'Portfolio-Systems')
|
||||
}
|
||||
if (project.pluginPortfolioEngines !== undefined) {
|
||||
totalPlugin = totalPlugin + project.pluginPortfolioEngines.pluginFiles.length
|
||||
pluginAllTheseFiles(project.pluginPortfolioEngines.pluginFiles, 'Portfolio-Engines')
|
||||
}
|
||||
if (project.pluginLearningMines !== undefined) {
|
||||
totalPlugin = totalPlugin + project.pluginLearningMines.pluginFiles.length
|
||||
pluginAllTheseFiles(project.pluginLearningMines.pluginFiles, 'Learning-Mines')
|
||||
@@ -278,6 +293,14 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
tradingSessionsFoundAtWorkspace = undefined
|
||||
}
|
||||
|
||||
function syncronizePortfolioSessionsFoundAtWorkspaceWithBackEnd() {
|
||||
for (let i = 0; i < portfolioSessionsFoundAtWorkspace.length; i++) {
|
||||
let node = portfolioSessionsFoundAtWorkspace[i]
|
||||
UI.projects.algorithmicPortfolio.functionLibraries.portfolioSessionFunctions.syncronizeSessionWithBackEnd(node)
|
||||
}
|
||||
portfolioSessionsFoundAtWorkspace = undefined
|
||||
}
|
||||
|
||||
function syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd() {
|
||||
for (let i = 0; i < learningSessionsFoundAtWorkspace.length; i++) {
|
||||
let node = learningSessionsFoundAtWorkspace[i]
|
||||
@@ -465,6 +488,15 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
node.project = "Algorithmic-Trading"
|
||||
}
|
||||
|
||||
if (
|
||||
node.type === 'Portfolio Engine' ||
|
||||
node.type === 'Portfolio Mine' ||
|
||||
node.type === 'Portfolio System' ||
|
||||
node.type === 'Portfolio Bot'
|
||||
) {
|
||||
node.project = "Portfolio-Management"
|
||||
}
|
||||
|
||||
if (
|
||||
node.type === 'Learning Engine' ||
|
||||
node.type === 'Learning Mine' ||
|
||||
@@ -477,9 +509,12 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
if (
|
||||
node.type === 'Plugins' ||
|
||||
node.type === 'Plugin Tutorials' ||
|
||||
node.type === 'Plugin Trading Systems' ||
|
||||
node.type === 'Plugin Trading Mines' ||
|
||||
node.type === 'Plugin Trading Engines' ||
|
||||
node.type === 'Plugin Trading Systems' ||
|
||||
node.type === 'Plugin Trading Mines' ||
|
||||
node.type === 'Plugin Trading Engines' ||
|
||||
node.type === 'Plugin Portfolio Systems' ||
|
||||
node.type === 'Plugin Portfolio Mines' ||
|
||||
node.type === 'Plugin Portfolio Engines' ||
|
||||
node.type === 'Plugin Project' ||
|
||||
node.type === 'Plugin Learning Systems' ||
|
||||
node.type === 'Plugin Learning Mines' ||
|
||||
@@ -939,6 +974,11 @@ function newVisualScritingFunctionLibraryUiObjectsFromNodes() {
|
||||
tradingSessionsFoundAtWorkspace.push(node)
|
||||
}
|
||||
}
|
||||
if (uiObjectType === 'Live Portfolio Session') {
|
||||
if (portfolioSessionsFoundAtWorkspace !== undefined) { // it might be undefined when you are spawning a session that was running while backed up
|
||||
portfolioSessionsFoundAtWorkspace.push(node)
|
||||
}
|
||||
}
|
||||
if (uiObjectType === 'Learning Session') {
|
||||
if (learningSessionsFoundAtWorkspace !== undefined) { // it might be undefined when you are spawning a session that was running while backed up
|
||||
learningSessionsFoundAtWorkspace.push(node)
|
||||
|
||||
+9
-62
@@ -10,7 +10,7 @@
|
||||
.log-warn { color: orange }
|
||||
.log-error { color: red }
|
||||
.log-info { color: skyblue }
|
||||
.log-log { color: silver }
|
||||
.log-log { color: silver}
|
||||
|
||||
.log-warn, .log-error { font-weight: bold; }
|
||||
</style>
|
||||
@@ -24,75 +24,22 @@
|
||||
<script>
|
||||
window.onload = () => {
|
||||
window.api.receive('fromMain', (data) => {
|
||||
//const consoleLine = document.createElement('span')
|
||||
//const consoleLineText = document.createTextNode(data)
|
||||
//consoleLine.appendChild(consoleLineText)
|
||||
if(data.includes('[ERROR]')) {
|
||||
//const consoleLine = document.createElement('span')
|
||||
document.getElementById('log').insertAdjacentHTML('beforeend', "<span class=\"log-error\">" + data + "</span><br>");
|
||||
}
|
||||
if(data.includes('[WARN]')) {
|
||||
//consoleLineText.style.cssText = "color: orange; font-weight: bold;"
|
||||
else if(data.includes('[WARN]')) {
|
||||
document.getElementById('log').insertAdjacentHTML('beforeend',"<span class=\"log-warn\">" + data + "</span><br>");
|
||||
}
|
||||
document.getElementById('log').insertAdjacentHTML('beforeend',"<span class=\"log-info\">" + data + "</span><br>");
|
||||
//document.getElementById('log').insertAdjacentHTML('beforeend', consoleLineText);
|
||||
else if(data.includes('[INFO]')) {
|
||||
document.getElementById('log').insertAdjacentHTML('beforeend',"<span class=\"log-info\">" + data + "</span><br>");
|
||||
}
|
||||
else {
|
||||
document.getElementById('log').insertAdjacentHTML('beforeend',"<span class=\"log-log\">" + data + "</span><br>");
|
||||
}
|
||||
window.scrollTo(0, document.querySelector("#log-container").scrollHeight)
|
||||
})
|
||||
window.api.send("toMain", "ImAlive!")
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- <script>
|
||||
rewireLoggingToElement(
|
||||
() => document.getElementById("log"),
|
||||
() => document.getElementById("log-container"), true);
|
||||
|
||||
function rewireLoggingToElement(eleLocator, eleOverflowLocator, autoScroll) {
|
||||
fixLoggingFunc('log');
|
||||
fixLoggingFunc('debug');
|
||||
fixLoggingFunc('warn');
|
||||
fixLoggingFunc('error');
|
||||
fixLoggingFunc('info');
|
||||
|
||||
function fixLoggingFunc(name) {
|
||||
console['old' + name] = console[name];
|
||||
console[name] = function(...arguments) {
|
||||
//const output = produceOutput(name, arguments);
|
||||
output = window.api.receive('fromMain', (message, arguments) => {
|
||||
produceOutput(message, arguments)
|
||||
})
|
||||
const eleLog = eleLocator();
|
||||
|
||||
if (autoScroll) {
|
||||
const eleContainerLog = eleOverflowLocator();
|
||||
const isScrolledToBottom = eleContainerLog.scrollHeight - eleContainerLog.clientHeight <= eleContainerLog.scrollTop + 1;
|
||||
eleLog.innerHTML += output + "<br>";
|
||||
if (isScrolledToBottom) {
|
||||
eleContainerLog.scrollTop = eleContainerLog.scrollHeight - eleContainerLog.clientHeight;
|
||||
}
|
||||
} else {
|
||||
eleLog.innerHTML += output + "<br>";
|
||||
}
|
||||
|
||||
console['old' + name].apply(undefined, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
function produceOutput(name, args) {
|
||||
return args.reduce((output, arg) => {
|
||||
return output +
|
||||
"<span class=\"log-" + (typeof arg) + " log-" + name + "\">" +
|
||||
(typeof arg === "object" && (JSON || {}).stringify ? JSON.stringify(arg) : arg) +
|
||||
"</span> ";
|
||||
}, '');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* setInterval(() => {
|
||||
const method = (['log', 'debug', 'warn', 'error', 'info'][Math.floor(Math.random() * 5)]);
|
||||
console[method](method, 'logging something...');
|
||||
}, 200); */
|
||||
</script> -->
|
||||
</body>
|
||||
</html>
|
||||
+115
-51
@@ -1,55 +1,50 @@
|
||||
const {app, Menu, BrowserWindow, ipcMain} = require('electron')
|
||||
const {app, Menu, BrowserWindow, ipcMain, dialog } = require('electron')
|
||||
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
// To check for update on Github repo
|
||||
const {autoUpdater} = require("electron-updater")
|
||||
const { windowsStore } = require('process')
|
||||
|
||||
// Enable non contribution mode (test)
|
||||
process.env.SA_MODE = 'gitDisable'
|
||||
process.env.PACKAGED_PATH = app.getAppPath()
|
||||
process.env.DATA_PATH = app.getPath('documents')
|
||||
|
||||
const WINDOW_WIDTH = null
|
||||
const WINDOW_HEIGHT = null
|
||||
const WINDOW_WIDTH = 1280
|
||||
const WINDOW_HEIGHT = 768
|
||||
|
||||
let mainWindow, consoleWindow, platform
|
||||
|
||||
var app_ready = false
|
||||
var server_ready = false
|
||||
|
||||
const port = 34248 // Default HTTP port
|
||||
|
||||
run()
|
||||
|
||||
//var platform = null
|
||||
|
||||
function run() {
|
||||
const { fork } = require('child_process')
|
||||
platform = fork(path.join(__dirname, '/PlatformRoot.js'), ["noBrowser"], {stdio: ['pipe', 'pipe', 'pipe', 'ipc'], env: process.env})
|
||||
|
||||
//var consoleOutput = ""
|
||||
|
||||
platform.on('message', _ => {
|
||||
open()
|
||||
openMain()
|
||||
openConsoleWindow()
|
||||
})
|
||||
}
|
||||
|
||||
ipcMain.on("toMain", (event, args) => {
|
||||
platform.stdout.setEncoding('utf8')
|
||||
platform.stdout.on('data', (data) => {
|
||||
//data = data.toString()
|
||||
//consoleOutput += data
|
||||
consoleWindow.webContents.send("fromMain", data);
|
||||
})
|
||||
if (args === "ImAlive!" && consoleWindow) {
|
||||
platform.stdout.setEncoding('utf8')
|
||||
platform.stdout.on('data', (data) => {
|
||||
if(consoleWindow != null) {
|
||||
consoleWindow.webContents.send("fromMain", data);
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
function open () {
|
||||
function openMain () {
|
||||
let bw_options = {
|
||||
width: WINDOW_WIDTH ? WINDOW_WIDTH : 1280,
|
||||
height: WINDOW_HEIGHT ? WINDOW_HEIGHT : 768,
|
||||
width: WINDOW_WIDTH,
|
||||
height: WINDOW_HEIGHT,
|
||||
resizable: true,
|
||||
webPreferences: {
|
||||
nodeIntegration: false, // is default value after Electron v5
|
||||
@@ -62,33 +57,55 @@ function open () {
|
||||
bw_options
|
||||
)
|
||||
|
||||
//mainWindow.setResizable(true)
|
||||
|
||||
createMainMenus()
|
||||
|
||||
mainWindow.loadURL("http://localhost:" + port)
|
||||
|
||||
// w.webContents.openDevTools()
|
||||
mainWindow.on('close', function (e) {
|
||||
if (consoleWindow.isVisible()) {
|
||||
e.preventDefault()
|
||||
mainWindow.hide()
|
||||
} else {
|
||||
let choice = dialog.showMessageBoxSync(
|
||||
mainWindow,
|
||||
{
|
||||
type: 'question',
|
||||
buttons: ['Yes', 'No'],
|
||||
title: 'Confirm',
|
||||
message: 'Do you really want to close Superalgos?'
|
||||
}
|
||||
)
|
||||
// 0 for Yes
|
||||
if (choice === 0) {
|
||||
mainWindow = null
|
||||
app.exit()
|
||||
}
|
||||
// 1 for No
|
||||
if (choice === 1) {
|
||||
e.preventDefault()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
mainWindow.on('closed', function () {
|
||||
mainWindow = null
|
||||
mainWindow.on('activate', function () {
|
||||
mainWindow.show()
|
||||
})
|
||||
}
|
||||
|
||||
function openConsoleWindow() {
|
||||
createConsoleMenus()
|
||||
if(consoleWindow) {
|
||||
consoleWindow.focus()
|
||||
return
|
||||
}
|
||||
|
||||
newWindow =
|
||||
consoleWindow = new BrowserWindow({
|
||||
resizable: true,
|
||||
title: 'Platform Logs',
|
||||
minimizable: false,
|
||||
fullscreenable: false,
|
||||
width: 1024,
|
||||
fullscreenable: true,
|
||||
show: false,
|
||||
width: WINDOW_WIDTH,
|
||||
webPreferences: {
|
||||
devTools: true,
|
||||
nodeIntegration: false, // is default value after Electron v5
|
||||
contextIsolation: true, // protect against prototype pollution
|
||||
enableRemoteModule: false, // turn off remote
|
||||
@@ -99,25 +116,42 @@ function openConsoleWindow() {
|
||||
consoleWindow.setBackgroundColor('#000000')
|
||||
consoleWindow.loadFile('./console.html')
|
||||
|
||||
/* consoleWindow.on('ready'), _ => {
|
||||
platform.stdout.setEncoding('utf8')
|
||||
platform.stdout.on('data', (data) => {
|
||||
//data = data.toString()
|
||||
//consoleOutput += data
|
||||
consoleWindow.webContents.send("fromMain", data);
|
||||
})
|
||||
} */
|
||||
|
||||
consoleWindow.on('closed', function() {
|
||||
consoleWindow = null
|
||||
consoleWindow.on('close', function (e) {
|
||||
if (mainWindow.isVisible()) {
|
||||
e.preventDefault()
|
||||
createMainMenus()
|
||||
consoleWindow.hide()
|
||||
} else {
|
||||
let choice = dialog.showMessageBoxSync(
|
||||
mainWindow,
|
||||
{
|
||||
type: 'question',
|
||||
buttons: ['Yes', 'No'],
|
||||
title: 'Confirm',
|
||||
message: 'Do you really want to close Superalgos?'
|
||||
}
|
||||
)
|
||||
// 0 for Yes
|
||||
if (choice === 0) {
|
||||
consoleWindow = null
|
||||
app.exit()
|
||||
}
|
||||
// 1 for No
|
||||
if (choice === 1) {
|
||||
e.preventDefault()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
consoleWindow.on('show', function () {
|
||||
createConsoleMenus()
|
||||
})
|
||||
}
|
||||
|
||||
app.on('ready', function () {
|
||||
app_ready = true
|
||||
autoUpdater.checkForUpdatesAndNotify();
|
||||
createMainMenus()
|
||||
if (server_ready) open()
|
||||
})
|
||||
|
||||
app.on('window-all-closed', function () {
|
||||
@@ -128,8 +162,16 @@ app.on('activate', function () {
|
||||
if (BrowserWindow.getAllWindows().length === 0) createWindow()
|
||||
})
|
||||
|
||||
function createMainMenus () {
|
||||
const template = [
|
||||
function createMainMenus() {
|
||||
function logsActive() {
|
||||
if(consoleWindow) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const mainTemplate = [
|
||||
{
|
||||
label: 'File',
|
||||
submenu: [
|
||||
@@ -176,18 +218,32 @@ function createMainMenus () {
|
||||
},
|
||||
{
|
||||
label: 'Logs',
|
||||
enabled: logsActive(),
|
||||
click () {
|
||||
openConsoleWindow()
|
||||
if(consoleWindow) {
|
||||
consoleWindow.show()
|
||||
} else {
|
||||
openConsoleWindow()
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
const menu = Menu.buildFromTemplate(template)
|
||||
Menu.setApplicationMenu(menu)
|
||||
const mainMenu = Menu.buildFromTemplate(mainTemplate)
|
||||
Menu.setApplicationMenu(mainMenu)
|
||||
}
|
||||
|
||||
function createConsoleMenus () {
|
||||
const template = [
|
||||
|
||||
function uiActive() {
|
||||
if(mainWindow.isVisible()) {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
const consoleTemplate = [
|
||||
{
|
||||
label: 'File',
|
||||
submenu: [
|
||||
@@ -222,9 +278,17 @@ function createConsoleMenus () {
|
||||
{type: 'separator'},
|
||||
{role: 'togglefullscreen'}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Show UI',
|
||||
id: 'ui',
|
||||
enabled: uiActive(),
|
||||
click () {
|
||||
mainWindow.show()
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
const menu = Menu.buildFromTemplate(template)
|
||||
Menu.setApplicationMenu(menu)
|
||||
const consoleMenu = Menu.buildFromTemplate(consoleTemplate)
|
||||
Menu.setApplicationMenu(consoleMenu)
|
||||
}
|
||||
Reference in new issue
Block a user