diff --git a/.gitignore b/.gitignore index 1792d63b8..749233d0e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ My-Workspaces My-Social-Trading-Data My-Network-Nodes-Data My-Secrets +My-Data-Storage +My-Log-Files debug.log .DS_Store *.db diff --git a/Brewfile b/Brewfile new file mode 100644 index 000000000..fcb69d485 --- /dev/null +++ b/Brewfile @@ -0,0 +1,4 @@ +brew "git" +brew "node" +brew "npm" +brew "python@3.9" diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 81d60a6bd..1448d6ec2 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -12,5 +12,5 @@ RUN apk add --no-cache --virtual .build-deps make g++ \ USER superalgos EXPOSE 34248 EXPOSE 18041 -VOLUME ["/app/Data-Storage", "/app/Log-Files", "/app/My-Workspaces"] +VOLUME ["/app/Platform/My-Data-Storage", "/app/Platform/My-Log-Files", "/app/Platform/My-Workspaces"] ENTRYPOINT ["node", "platform", "noBrowser"] diff --git a/Docker/README.md b/Docker/README.md new file mode 100644 index 000000000..257ac96b6 --- /dev/null +++ b/Docker/README.md @@ -0,0 +1,273 @@ +# Superalgos Docker Guide + +## Table of Contents + +- [Introduction](#introduction) +- [Installation](#installation) + - [Mac OS](#mac-os) + - [Windows](#windows) + - [Linux and BSD](#linux-and-bsd) +- [Running Superalgos](#running-superalgos) + - [Using Docker-Compose](#using-docker-compose) +- [Docker Best Practices](#docker-best-practices) +- [Docker Development Best Practices](#docker-development-best-practices) + - [Dockerfile Best Practices](#dockerfile-best-practices) + - [Twelve Factor App](#twelve-factor-app) + +## Introduction + +This walkthrough is broken up into to parts: a quick-start guide to running [Superalgos](https://github.com/Superalgos/Superalgos) with Docker and a deeper, more theoretical dive into containers with the hopes of explaining some of the design decisions. + +[Superalgos](https://github.com/Superalgos/Superalgos), at its core, is a web application which also means it can be deployed inside a container like many other web applications. One of the leading platforms for operating containers is Docker. Docker can run on many different operatng systems and compute platforms. The containers provide an easy, fast, repeatable, and secure way to deploy and distribute applications. While it doesn't take much experience to run containers or Docker, there are some basics that any user should learn in order to use the technology effectively. + +Before getting started, be aware that Docker is not the originally intended method of running the [Superalgos](https://github.com/Superalgos/Superalgos) application and as such there are some drawbacks to doing so. Namely, you won't be able contribute back to the project or configure your Governance profile. We'll discuss this more later. Therefore, you should only consider using the Docker container for production deployments. + +It is also worth noting that [Superalgos](https://github.com/Superalgos/Superalgos) is very resource intense so it is best to get acquainted with the software by running it on a fast computer with a good amount of RAM as opposed to a tiny, slow Raspberry Pi. But, once you are ready to run a production deployment, then a more economical server is preferred. + +Docker container images are hosted on `ghcr`. You can browse the containers in the [Packages section of the code repository](https://github.com/users/Superalgos/packages/container/package/superalgos). + +> **Note:** The container and the application are still under heavy development and testing. Please join the [Superalgos SysAdmins Group](https://t.me/superalgossysadmins) to discuss any issues you may run into. + +## Installation + +First, Docker Desktop needs to be installed on a Mac or Windows computer in order to run the containers. Linux and BSD users will need Docker Engine. Docker-compose is also recommended and it should be included with Docker Desktop, but it may need to be installed separately. + +### Mac OS + +Docker can be downloaded from the Docker Store following the [directions in the official Docker Docs](https://docs.docker.com/desktop/mac/install/). It can also be installed from the command line using Homebrew. + +```shell +brew cask install docker +brew install docker-compose +``` + +Then, make sure Docker Desktop is running. An easy way to check is to push `Cmd + space` then type `docker.app` in the search bar. You should also see the little whale icon in the top menu bar near the clock. + +### Windows + +Windows requires a few more steps than Mac OS, but it can also be downloaded from the Docker Store following the [directions in the official Docker Docs](https://docs.docker.com/desktop/windows/install/). It can also be installed from the command line using Chocolatey. + +```shell +choco install docker-desktop +``` + +Docker should automatically start after installation. If you don't see the whale icon in the tray by the clock, then find `Docker` in the start menu. + +### Linux and BSD + +On Linux and BSD systems, Docker can be installed using the prefered package manager. [Step by step instructions for many different distributions](https://docs.docker.com/engine/install/debian/) of Linux can be found in the official Docker Docs. Since [Superalgos](https://github.com/Superalgos/Superalgos) runs well on Raspberry Pi 4 single-board computers, I'm going to illustrate the commands necessary to run [Superalgos](https://github.com/Superalgos/Superalgos) on the Raspbian Linux distribution. + +```shell +# install the requirements +sudo apt-get update +sudo apt-get install \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release + +# add the gpg keys to verify the packages +curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg + +# confgure the official repository +echo \ + "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +# install docker engine +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose +``` + +Docker should automatically start when it is done installing. You can check its status with `systemctl status docker`. To make things easier, ensure your user is added to the `docker` group. Type `id` at the command prompt and you should see something like `groups=...999(docker)`. If you don't see it listed, you can add yourself with `sudo usermod -a -G docker `. + +## Running Superalgos + +Now that we have Docker installed and running, we can run the container. The option `--rm` will remove the isntance of the container when it is exited. + +```shell +docker run --rm ghcr.io/superalgos/superalgos:latest +``` + +You'll see some messages showing the container being downloaded and then some messages from the application itself showing that it is starting up and ready to accept connections. We'll stop the container now and add in a few more options so make it more useful, so press `ctrl + c` to exit. + +We'll need to expose some ports so we can actually connect to it from our browser. Also, we'll want to create a few directories on our host file system so we can save, or persist, data between container reboots. + +- `-d` to run the container daemonized, in the background +- `-p` to map ports to the host system to allow connections +- `-v` to mount local directories inside the container to persist data +- `--name` to assign a name to the container for easier reference + +```shell +# create the data directories +mkdir -p Data-Storage Log-Files My-Workspaces + +# run the container with the extra options +docker run \ + -d \ + --rm \ + --name superalgos \ + --user $(id -u):$(id -g) \ + -p 18041:18041 \ + -p 34248:34248 \ + -v $(pwd)/Data-Storage:/app/Data-Storage \ + -v $(pwd)/Log-Files:/app/Log-Files \ + -v $(pwd)/My-Workspaces:/app/My-Workspaces \ + ghcr.io/superalgos/superalgos:latest +``` + +You can check the status of the container with `docker ps -a` and view the logs with `docker logs superalgos`. + +Note that you will see one error in the log output informing you that `git` is not installed. This is intentional and is not required for the bot to function properly. + +Now you can open your browser and load the application front end. Try loading `http://localhost:34248` if you are on the same computer that is running the container, otherwise use the host ip, for example `http://192.168.1.10:34248`. + +If you want to stop the container, you can run `docker stop superalgos`. When you want to upgrade the container, use: + +```shell +docker pull ghcr.io/superalgos/superalgos:latest +docker stop superalgos +docker run \ + -d \ + --rm \ + --name superalgos \ + --user $(id -u):$(id -g) \ + -p 18041:18041 \ + -p 34248:34248 \ + -v $(pwd)/Data-Storage:/app/Data-Storage \ + -v $(pwd)/Log-Files:/app/Log-Files \ + -v $(pwd)/My-Workspaces:/app/My-Workspaces \ + ghcr.io/superalgos/superalgos:latest +``` + +Let's stop the container for now (`docker stop superalgos`) and we'll run it again using `docker-compose`. + +Continue reading the [Docker Command Line documentation](https://docs.docker.com/engine/reference/commandline/cli/) for more details. + +### Using Docker-Compose + +Docker-compose is a wrapper for the Docker API which makes it a little easier to maintain a declaritive configuration for an application instead of using the direct command line commands. There is a sample docker-compose configuration included in the [Superalgos](https://github.com/Superalgos/Superalgos) which you can as the basis for your own configuration. + +Let's download the sample and edit it. If you don't use `vim`, change that command for your preferred editor. + +```shell +wget https://raw.githubusercontent.com/Superalgos/Superalgos/master/Docker/docker-compose.yml +vim docker-compose.yml +``` + +Now, let's change some of the settings: + +```yaml +version: "3" +services: + superalgos: + image: ghcr.io/superalgos/superalgos:latest + command: ["minMemo"] + user: "$UID:$GID" + ports: + - '34248:34248' + - '18041:18041' + volumes: + - ./Data-Storage:/app/Data-Storage + - ./Log-Files:/app/Log-Files + - ./My-Workspaces:/app/My-Workspaces + restart: on-failure +``` + +You can see we have the same ports and volumes mapped. We also get a few extra settings like `command`, `environment`, and `restart`. + +- `command` adds an extra setting to the main startup, so the application ends up running with the full command `node platform noBrowser minMemo`. The base of that command is defined as the `ENTRYPOINT` in the `Dockerfile` that builds the container. +- `user` defines the UID and GID the container should run as so that the data can be persisted with the correct permissions in the Data-Storage, Log-Files, and My-Workspaces directories that we created on the host. If you leave this out, the container will use the built in `superalgos` user which has `uid: 1001` and `gid: 1001`. Instead of using variables, you could also hard-code these UID and GID numbers into the configuration. +- `restart` tells Docker to restart the container if an error occurs. + +Save the file and exit the editor. If you are using `vim`, hit escape and then type `:wq!` or press `shift + Z + Z` (two capital Z's). + +Now, start the container with `docker-compose up`. This will start the container in the foreground and you'll connect to the log output. Hit `ctrl + c` to exit. Going forward, you'll want to add the `-d` option to start the container and keep it running in the background. + +```shell +# some preliminary configuration to set up the persistent data directories +mkdir -p Data-Storage Log-Files My-Workspaces +export UID=$(id -u) +export GID=$(id -g) + +# run the container in the background +docker-compose up -d +``` + +Now you have several `docker-compose` commands at your disposal to interact with the container: + +- `docker-compose ps` to see details of the container +- `docker-compose logs` to see the logs +- `docker-compose down` to stop and remove the instance of the container +- `docker-compose pull` to pull the container, or a new version of the `latest` tag + +Putting some of those concepts together, you can keep the running container up to date with this one-liner: + +```shell +docker-compose pull && docker-compose down && docker-compose up -d +``` + +Explore the full [Docker Compose documentation](https://docs.docker.com/compose/) for more information. + +## Docker Best Practices + +As with any technology, there are lots of ways of doing things. A lot of them will give the same end result, but some may have fewer steps, or be more secure, or be more maintainable. That is where "best practices" come in. They aren't there to necessarily tell you what to do and what not to do, but they are there to help guide you in the right direction. A lot of times, they help you avoid making architectural mistakes that could come back and bite you further down the road. + +One general best practice when running a production deployment is to avoid breaking changes by pinning to specific container tags. The `shasum hash` and the `release` tags are the best to use. These will generally ensure you are always running the same code and it will only upgrade when configured to do so. The other tags will change which code they are pointing to more frequently and without notice. + +- `latest` : the absolute latest build +- `master` : the latest master branch build +- `develop` : the latest develop branch build +- `` : a specific git commit hash +- `` : corresponds with a Github Release (git tag), i.e. `beta-10` + +## Docker Development Best Practices + +Docker has many advantages which can aid in every step from development through production deployment. There are some useful tips located directly in the [Docker documentation](https://docs.docker.com/develop/dev-best-practices/). Concisely, they are to keep the build images small, a few tips on when and how to persist data, and to use CI/CD for testing and deployment. All of these tips are used in one way or another as a part of the [Superalgos](https://github.com/Superalgos/Superalgos) project. + +- Use a minimal base image and multi-stage build. Superalgos is currently using an [alpine](https://www.alpinelinux.org/) base image but [distroless](https://github.com/GoogleContainerTools/distroless) is becoming more common and some times using a base image like [python-slim](https://hub.docker.com/_/python) is the bast that can be achieved. +- The images are quite large (around 2 GB in size), unfortunately, because the codebase itself is large. We've recently put in a lot of effort to make these images as small as possible. +- The images are built automatically using Github Actions when pull requests are merged. +- With the correct configuration, data, like data mine and trading bot information, is persisted to the host using volume mounts + +### Dockerfile Best Practices + +Docker maintains a list of [Dockerfile best practices](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/) in their main documentation. These tips dictate many of the decisions around the Superalgos Dockerfile. Some of the tips that are used by [Superalgos](https://github.com/Superalgos/Superalgos) are listed below. + +- Use `.dockerignore` to prevent unwanted data from entering the container. This keeps the container small but also enhances security to prevent secrets from leaking into a container by accident. +- Don't install unneccesary packages. In lieu of multi-stage builds, build caches and build dependencies are removed before finalizing the container. Only packages that are necessary for the execution of the application are installed. This is why `git` is not present. +- Minimize the number of layers. Many `RUN` commands are combined into one using `&&` in order to reduce the number of layers. +- Sort multiline arguments. This mostly enhances readability and maintainability. +- Leverage build cache. When testing locally, several of the tips above help levarage the build cache and speed up build times. + +### Twelve Factor App + +[Superalgos](https://github.com/Superalgos/Superalgos) is a web app but it was originally designed to be run on a local workstation or server on a trusted network. However, I don't think it would be prudent to talk about Docker best practices without mentioning the [Twelve Factor App](https://12factor.net/) manifesto. Over time, [Superalgos](https://github.com/Superalgos/Superalgos) itself may iterate and implement more and more of these principles as more people get involved and more people deploy production environments. + +The Twelve Factors: + +- Codebase: One codebase tracked in revision control, many deploys + - Superalgos utilizes one GitHub repository +- Dependencies: Explicitly declare and isolate dependencies + - Superalgos is a node.js app and uses npm to track and install dependencies +- Config: Store config in the environment + - Superalgos does not use environment variables the moment for configuration. Options are passed on the command line at run time. Other configuration is hard coded into the Workspaces. +- Backing services: Treat backing services as attached resources + - Superalgos connects to external services via API calls over HTTP (TCP) +- Build, release, run: Strictly separate build and run stages + - Superalgos is deployed by end users in their own local environments +- Processes: Execute the app as one or more stateless processes + - Superalgos is one application +- Port binding: Export services via port binding + - Superalgos exposes an HTTP frontend port and a Websockets backend port (TCP) +- Concurrency: Scale out via the process model + - Superalgos can be clustered but the front end and backend do not necessarily scale out independently from each other +- Disposability: Maximize robustness with fast startup and graceful shutdown + - Superalgos is not stateless in that the data files must be persisted to disk. Also, Superalgos cannot run behind a load balancer and have requests randomly distributed to different backend servers. +- Dev/prod parity: Keep development, staging, and production as similar as possible + - Superalgos doesn't have its own production environment but the container makes it easy to ensure development environments are the same as what a user will see when they deploy it for themselves in their own production environment. +- Logs: Treat logs as event streams + - Superalgos sends its own application logs to standard out. The trading mine logs are sent to flat files (persisted through volume mounts) +- Admin processes: Run admin/management tasks as one-off processes + - Superalgos does not have any admin or management tasks outside of what is used to create the container at build time. diff --git a/Docker/docker-compose.yml b/Docker/docker-compose.yml index 6d8153e3c..e05751cc3 100644 --- a/Docker/docker-compose.yml +++ b/Docker/docker-compose.yml @@ -6,14 +6,12 @@ services: dockerfile: ./Docker/Dockerfile image: ghcr.io/superalgos/superalgos:latest command: ["minMemo"] + user: "$UID:$GID" ports: - '34248:34248' - '18041:18041' volumes: - - ../Data-Storage:/app/Data-Storage - - ../Log-Files:/app/Log-Files - - ../My-Workspaces:/app/My-Workspaces - environment: - PUID: '1000' - PGID: '1000' + - ../Platform/My-Data-Storage:/app/Platform/My-Data-Storage + - ../Platform/My-Log-Files:/app/Platform/My-Log-Files + - ../Platform/My-Workspaces:/app/Platform/My-Workspaces restart: on-failure diff --git a/Environment.js b/Environment.js index 38ae6186b..a042eaf5b 100644 --- a/Environment.js +++ b/Environment.js @@ -4,14 +4,14 @@ exports.newEnvironment = function () { WEB_SERVER_URL: 'localhost', CLIENT_WEB_SOCKETS_INTERFACE_PORT: 18041, CLIENT_HTTP_INTERFACE_PORT: 34248, - PATH_TO_DATA_STORAGE: './Data-Storage', + PATH_TO_DATA_STORAGE: './Platform/My-Data-Storage', + PATH_TO_LOG_FILES: './Platform/My-Log-Files', PATH_TO_PROJECTS: './Projects', - PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', PATH_TO_CLIENT: './Platform', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', - PATH_TO_MY_WORKSPACES: './My-Workspaces', + PATH_TO_MY_WORKSPACES: './Platform/My-Workspaces', PATH_TO_FONTS: './Platform/WebServer/Fonts' } diff --git a/EnvironmentForDebug.js b/EnvironmentForDebug.js index efb5fec7b..5d7671aa7 100644 --- a/EnvironmentForDebug.js +++ b/EnvironmentForDebug.js @@ -8,15 +8,15 @@ exports.newEnvironment = function () { DESKTOP_WEB_SOCKETS_INTERFACE_HOST: 'localhost', CLIENT_HTTP_INTERFACE_PORT: 34248, DESKTOP_HTTP_INTERFACE_PORT: 34249, - PATH_TO_DATA_STORAGE: './Data-Storage', + PATH_TO_DATA_STORAGE: './Platform/My-Data-Storage', + PATH_TO_LOG_FILES: './Platform/My-Log-Files', PATH_TO_PROJECTS: './Projects', - PATH_TO_LOG_FILES: './Log-Files', PATH_TO_PROJECTS_REQUIRED: './Projects', PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json', PATH_TO_CLIENT: './Platform', PATH_TO_DESKTOP: './Desktop', PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces', - PATH_TO_MY_WORKSPACES: './My-Workspaces', + PATH_TO_MY_WORKSPACES: './Platform/My-Workspaces', PATH_TO_FONTS: './Platform/WebServer/Fonts' } diff --git a/Platform/Client/githubServer.js b/Platform/Client/githubServer.js index 004811b2f..f85b56d46 100644 --- a/Platform/Client/githubServer.js +++ b/Platform/Client/githubServer.js @@ -79,7 +79,7 @@ exports.newGithubServer = function newGithubServer() { const octokit = new Octokit({ auth: token, - userAgent: 'Superalgos Beta 11' + userAgent: 'Superalgos Beta 12' }) await getList() @@ -207,7 +207,7 @@ exports.newGithubServer = function newGithubServer() { const { Octokit } = SA.nodeModules.octokit const octokit = new Octokit({ auth: token, - userAgent: 'Superalgos Beta 11' + userAgent: 'Superalgos Beta 12' }) await getPrList() await mergePrs() @@ -340,7 +340,7 @@ exports.newGithubServer = function newGithubServer() { owner: owner, repo: repo, issue_number: pullRequest.number, - body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because it was detected that a User Profile file... \n\n' + fileContentUrl + '\n\n...was submitted together with ' + (filesChanged.length - 1) + ' other file/s. User Profiles files as per the Governance System rules, must be the only file present at a Pull Request in order to pass all the validations and be automatically merged.' + body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because it was detected that a User Profile file... \n\n' + fileContentUrl + '\n\n...was submitted together with ' + (filesChanged.length - 1) + ' other file/s. User Profiles files as per the Governance System rules, must be the only file present at a Pull Request in order to pass all the validations and be automatically merged. \n\n If you intentionally submitted the extra files, the way to get your work merged is by first removing your User Profile file from the Plugins folder at your local installation and executing an app.contribute again. Then wait until the PR is merged (manually reviewed) and after that you put your User Profile file again and create a new PR only with that file with an app.contribute. That last PR should be merged automatically.' }); await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME) @@ -508,14 +508,14 @@ exports.newGithubServer = function newGithubServer() { unless the existing one belongs to the same Github username. */ let userProfileIdMap = new Map() - let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName @@ -558,13 +558,13 @@ exports.newGithubServer = function newGithubServer() { unless the existing one belongs to the same Github username. */ let userProfileIdMap = new Map() - let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName diff --git a/Platform/Client/httpInterface.js b/Platform/Client/httpInterface.js index a9965eb45..ca2271553 100644 --- a/Platform/Client/httpInterface.js +++ b/Platform/Client/httpInterface.js @@ -725,7 +725,7 @@ exports.newHttpInterface = function newHttpInterface() { const octokit = new Octokit({ auth: token, - userAgent: 'Superalgos Beta 11' + userAgent: 'Superalgos Beta 12' }) const repo = 'Superalgos' @@ -1415,11 +1415,13 @@ exports.newHttpInterface = function newHttpInterface() { try { let project = unescape(requestPath[2]) let folder = unescape(requestPath[3]) - - let response = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + + let response = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( project, folder - ) + ).catch(err => { + console.log('[ERROR] httpInterface -> PluginFileNames -> err.stack = ' + err.stack) + }) SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(response), httpResponse) @@ -1452,12 +1454,18 @@ exports.newHttpInterface = function newHttpInterface() { if (fileName === 'Superalgos-CL.json') { fileName = 'Superalgos-PL.json' } - - let response = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + + await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( project, folder, fileName - ).catch(err => { + ) + .then( response => + { + SA.projects.foundations.utilities.httpResponses.respondWithContent(response, httpResponse) + } + ) + .catch(err => { let error = { result: 'Fail Because', message: err @@ -1466,8 +1474,6 @@ exports.newHttpInterface = function newHttpInterface() { return }) - SA.projects.foundations.utilities.httpResponses.respondWithContent(response, httpResponse) - } catch (err) { console.log('[ERROR] httpInterface -> LoadPlugin -> Method call produced an error.') console.log('[ERROR] httpInterface -> LoadPlugin -> err.stack = ' + err.stack) diff --git a/Platform/PlatformApp.js b/Platform/PlatformApp.js index 6c1795f19..49431f932 100644 --- a/Platform/PlatformApp.js +++ b/Platform/PlatformApp.js @@ -143,7 +143,7 @@ exports.newPlatformApp = function newPlatformApp() { console.log('Http Interface .............................................. Listening at port ' + global.env.CLIENT_HTTP_INTERFACE_PORT) console.log('') - console.log("You are running Superalgos Beta 11") + console.log("You are running Superalgos Beta 12") console.log('') console.log("What's new? These are the main new features in this version:") console.log('') diff --git a/Projects/Foundations/Icons/Trading/trading-bot.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-bot.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-bot.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-bot.png diff --git a/Projects/Foundations/Icons/Trading/trading-engine.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-engine.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-engine.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-engine.png diff --git a/Projects/Foundations/Icons/Trading/trading-mine.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-mine.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-mine.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-mine.png diff --git a/Projects/Foundations/Icons/Trading/trading-system.png b/Projects/Algorithmic-Trading/Icons/Trading/trading-system.png similarity index 100% rename from Projects/Foundations/Icons/Trading/trading-system.png rename to Projects/Algorithmic-Trading/Icons/Trading/trading-system.png diff --git a/Projects/Algorithmic-Trading/Icons/algorithmic-trading-project.png b/Projects/Algorithmic-Trading/Icons/algorithmic-trading-project.png new file mode 100644 index 000000000..9c5299e7f Binary files /dev/null and b/Projects/Algorithmic-Trading/Icons/algorithmic-trading-project.png differ diff --git a/Projects/Foundations/Plugins/Trading-Engines/Low-Frequency.json b/Projects/Algorithmic-Trading/Plugins/Trading-Engines/Low-Frequency.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Engines/Low-Frequency.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Engines/Low-Frequency.json diff --git a/Projects/Foundations/Plugins/Trading-Mines/Masters.json b/Projects/Algorithmic-Trading/Plugins/Trading-Mines/Masters.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Mines/Masters.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Mines/Masters.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/BB-Top-Bounce-BTC-USDT.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/LiveTester-Chart-Scanner.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/Masters-Lightning-Strike.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/Masters-Lightning-Strike.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/Masters-Lightning-Strike.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/Masters-Lightning-Strike.json diff --git a/Projects/Foundations/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json b/Projects/Algorithmic-Trading/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json similarity index 100% rename from Projects/Foundations/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json rename to Projects/Algorithmic-Trading/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json diff --git a/Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json new file mode 100644 index 000000000..53e974e6d --- /dev/null +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/algorithmic-trading-project.json @@ -0,0 +1,63 @@ +{ + "type": "Algorithmic-Trading Project", + "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "iconPathOn": "algorithmic-trading-project", + "iconPathOff": "algorithmic-trading-project", + "iconProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Trading Mine", + "relatedUiObject": "Trading Mine", + "relatedUiObjectProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Trading Engine", + "relatedUiObject": "Trading Engine", + "relatedUiObjectProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Trading System", + "relatedUiObject": "Trading System", + "relatedUiObjectProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "actionFunction": "payload.executeAction", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionProject": "Foundations" + } + ], + "isProjectHead": true, + "isTitleAllwaysVisible": false, + "addLeftIcons": true, + "isPinned": true, + "positionLocked": true, + "icon": "algorithmic-trading-project", + "childrenNodesProperties": [ + { + "name": "projectDefinition", + "type": "node", + "childType": "Project Definition", + "project": "Foundations", + "autoAdd": true + } + ] +} \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/trading-bot.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-bot.json similarity index 72% rename from Projects/Foundations/Schemas/App-Schema/trading-bot.json rename to Projects/Algorithmic-Trading/Schemas/App-Schema/trading-bot.json index 0cc624da4..c33a7d668 100644 --- a/Projects/Foundations/Schemas/App-Schema/trading-bot.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-bot.json @@ -7,25 +7,29 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition Folder", "relatedUiObject": "Product Definition Folder", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -34,7 +38,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -54,19 +59,22 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "productDefinitionFolders", "type": "array", "childType": "Product Definition Folder", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "tradingBots" diff --git a/Projects/Foundations/Schemas/App-Schema/trading-engine.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json similarity index 71% rename from Projects/Foundations/Schemas/App-Schema/trading-engine.json rename to Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json index 7edb467b7..517079e17 100644 --- a/Projects/Foundations/Schemas/App-Schema/trading-engine.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-engine.json @@ -5,7 +5,8 @@ "action": "Add Missing Children", "label": "Add Missing Children", "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -14,7 +15,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -25,19 +27,22 @@ "name": "tradingCurrent", "type": "node", "childType": "Trading Current", - "autoAdd": true + "autoAdd": false, + "project": "Foundations" }, { "name": "tradingLast", "type": "node", "childType": "Trading Last", - "autoAdd": true + "autoAdd": false, + "project": "Foundations" }, { "name": "exchangeOrders", "type": "node", "childType": "Exchange Orders", - "autoAdd": true + "autoAdd": false, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/trading-mine.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-mine.json similarity index 64% rename from Projects/Foundations/Schemas/App-Schema/trading-mine.json rename to Projects/Algorithmic-Trading/Schemas/App-Schema/trading-mine.json index eb2251d85..1f23e2194 100644 --- a/Projects/Foundations/Schemas/App-Schema/trading-mine.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-mine.json @@ -6,20 +6,26 @@ "label": "Configure", "iconPathOn": "configuration", "iconPathOff": "configuration", + "iconProject": "Foundations", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Trading Bot", "relatedUiObject": "Trading Bot", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Plotter", "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +34,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -45,12 +52,14 @@ { "name": "tradingBots", "type": "array", - "childType": "Trading Bot" + "childType": "Trading Bot", + "project": "Algorithmic-Trading" }, { "name": "plotters", "type": "array", - "childType": "Plotter" + "childType": "Plotter", + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/trading-system.json b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-system.json similarity index 72% rename from Projects/Foundations/Schemas/App-Schema/trading-system.json rename to Projects/Algorithmic-Trading/Schemas/App-Schema/trading-system.json index 895e77ccb..7d0ca8e07 100644 --- a/Projects/Foundations/Schemas/App-Schema/trading-system.json +++ b/Projects/Algorithmic-Trading/Schemas/App-Schema/trading-system.json @@ -5,7 +5,8 @@ "action": "Add UI Object", "label": "Add Trading Strategy", "relatedUiObject": "Trading Strategy", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", @@ -13,7 +14,8 @@ "propertyToCheckFor": "dynamicIndicators", "label": "Add Dynamic Indicators", "relatedUiObject": "Dynamic Indicators", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -22,7 +24,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -33,13 +36,15 @@ "name": "tradingStrategies", "type": "array", "childType": "Trading Strategy", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "dynamicIndicators", "type": "node", "childType": "Dynamic Indicators", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Bot/trading-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Engine/trading-engine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-Mine/trading-mine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json b/Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json rename to Projects/Algorithmic-Trading/Schemas/Docs-Nodes/T/Trading/Trading-System/trading-system.json diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js index 665015dcc..dd88e832a 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/APIs/ExchangeAPI.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesExchangeAPI = function (processIndex) { +exports.newAlgorithmicTradingBotModulesExchangeAPI = function (processIndex) { let MODULE_NAME = "Exchange API"; diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js index 60b78456b..af77160a7 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersCalculations.js @@ -1,8 +1,7 @@ -exports.newFoundationsBotModulesOrdersCalculations = function (processIndex) { +exports.newAlgorithmicTradingBotModulesOrdersCalculations = function (processIndex) { /* When we are live trading, we need to syncronize with the exchange. */ - const MODULE_NAME = 'Orders Calculations' let thisObject = { actualSizeCalculation: actualSizeCalculation, diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js index b67380074..ad4d246ae 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/OrdersSimulations.js @@ -1,8 +1,7 @@ -exports.newFoundationsBotModulesOrdersSimulations = function (processIndex) { +exports.newAlgorithmicTradingBotModulesOrdersSimulations = function (processIndex) { /* When we are backtesting or paper trading, we need to simulate what would have happened at the exchange. */ - const MODULE_NAME = 'Orders Simulations' let thisObject = { actualSizeSimulation: actualSizeSimulation, diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js index 4a2ed0b9a..65f2d2f6c 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Snapshots.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSnapshots = function(processIndex) { +exports.newAlgorithmicTradingBotModulesSnapshots = function(processIndex) { /* This module encapsulates the snapshots functionality. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js index 439a86ae5..c04a0eea0 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEngine.js @@ -1,9 +1,9 @@ -exports.newFoundationsBotModulesTradingEngine = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingEngine = function (processIndex) { /* We call the Trading Engine to the data structure that is needed in order to exevute the trading protocol with the specific rules defined at the Trading System. */ - const MODULE_NAME = 'Trading Engine' + let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js index 0ff1c6762..f70284899 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingEpisode.js @@ -1,8 +1,7 @@ -exports.newFoundationsBotModulesTradingEpisode = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingEpisode = function (processIndex) { /* This module packages all functions related to Episodes. */ - const MODULE_NAME = 'Trading Episode' let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js similarity index 96% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js index da6371a61..11cba8cd6 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingExecution.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingExecution = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingExecution = function (processIndex) { /* The Trading Execution modules manages the execution nodes and execution algoritms. */ @@ -16,7 +16,7 @@ exports.newFoundationsBotModulesTradingExecution = function (processIndex) { let tradingSystem let sessionParameters - let tradingOrdersModuleObject = TS.projects.foundations.botModules.tradingOrders.newFoundationsBotModulesTradingOrders(processIndex) + let tradingOrdersModuleObject = TS.projects.algorithmicTrading.botModules.tradingOrders.newAlgorithmicTradingBotModulesTradingOrders(processIndex) return thisObject diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js index 26b4207e5..a821d7440 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOrders.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingOrders = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingOrders = function (processIndex) { /* The Trading Orders modules manages the execution of orders against the exchanges. */ @@ -16,7 +16,7 @@ exports.newFoundationsBotModulesTradingOrders = function (processIndex) { let tradingSystem let sessionParameters - let exchangeAPIModuleObject = TS.projects.foundations.botModules.exchangeAPI.newFoundationsBotModulesExchangeAPI(processIndex) + let exchangeAPIModuleObject = TS.projects.algorithmicTrading.botModules.exchangeAPI.newAlgorithmicTradingBotModulesExchangeAPI(processIndex) let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) return thisObject @@ -843,7 +843,7 @@ exports.newFoundationsBotModulesTradingOrders = function (processIndex) { let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - let ordersSimulationsModuleObject = TS.projects.foundations.botModules.ordersSimulations.newFoundationsBotModulesOrdersSimulations(processIndex) + let ordersSimulationsModuleObject = TS.projects.algorithmicTrading.botModules.ordersSimulations.newAlgorithmicTradingBotModulesOrdersSimulations(processIndex) ordersSimulationsModuleObject.initialize() ordersSimulationsModuleObject.actualSizeSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) @@ -874,7 +874,7 @@ exports.newFoundationsBotModulesTradingOrders = function (processIndex) { let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - let ordersCalculationsModuleObject = TS.projects.foundations.botModules.ordersCalculations.newFoundationsBotModulesOrdersCalculations(processIndex) + let ordersCalculationsModuleObject = TS.projects.algorithmicTrading.botModules.ordersCalculations.newAlgorithmicTradingBotModulesOrdersCalculations(processIndex) ordersCalculationsModuleObject.initialize() await ordersCalculationsModuleObject.actualSizeCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js similarity index 92% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js index cf1396900..c54869742 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingOutput.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingOutput = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingOutput = function (processIndex) { /* This module will load if necesary all the data outputs so that they can be appended with new records if needed. After running the simulation, it will save all the data outputs. @@ -29,7 +29,7 @@ exports.newFoundationsBotModulesTradingOutput = function (processIndex) { } /* Preparing everything for the Simulation */ - let tradingSimulationModuleObject = TS.projects.foundations.botModules.tradingSimulation.newFoundationsBotModulesTradingSimulation(processIndex) + let tradingSimulationModuleObject = TS.projects.algorithmicTrading.botModules.tradingSimulation.newAlgorithmicTradingBotModulesTradingSimulation(processIndex) let outputDatasets = TS.projects.foundations.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset') let outputDatasetsMap = new Map() diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js index c2aaa9302..4b825861e 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingPosition.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingPosition = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingPosition = function (processIndex) { /* This module packages all functions related to Positions. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js index c1f3f2dab..eb92775d4 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingProcess.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingProcess = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingProcess = function (processIndex) { /* This Module will load all the process data dependencies from files and send them downstream. After execution, will save the time range and status report of the process. @@ -16,8 +16,8 @@ let dataFiles = new Map() let multiTimeFrameDataFiles = new Map() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.tradingEngine.newFoundationsBotModulesTradingEngine(processIndex) - let tradingOutputModuleObject = TS.projects.foundations.botModules.tradingOutput.newFoundationsBotModulesTradingOutput(processIndex) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.algorithmicTrading.botModules.tradingEngine.newAlgorithmicTradingBotModulesTradingEngine(processIndex) + let tradingOutputModuleObject = TS.projects.algorithmicTrading.botModules.tradingOutput.newAlgorithmicTradingBotModulesTradingOutput(processIndex) let currentTimeFrame = {} diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js index 0f1d7567c..ab4428a65 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingRecords.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingRecords = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingRecords = function (processIndex) { /* This module facilitates the appending of records to the output of the process. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js index bb3701eef..ce9e39ba4 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSimulation.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingSimulation = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processIndex) { /* This Module represents the trading simulacion. Escentially a loop through a set of candles and the execution at each loop cycle of the Trading System Protocol. @@ -34,13 +34,13 @@ exports.newFoundationsBotModulesTradingSimulation = function (processIndex) { '[INFO] runSimulation -> finalDatetime = ' + sessionParameters.timeRange.config.finalDatetime) /* These are the Modules we will need to run the Simulation */ - let tradingRecordsModuleObject = TS.projects.foundations.botModules.tradingRecords.newFoundationsBotModulesTradingRecords(processIndex) + let tradingRecordsModuleObject = TS.projects.algorithmicTrading.botModules.tradingRecords.newAlgorithmicTradingBotModulesTradingRecords(processIndex) tradingRecordsModuleObject.initialize(outputDatasetsMap) - let tradingSystemModuleObject = TS.projects.foundations.botModules.tradingSystem.newFoundationsBotModulesTradingSystem(processIndex) + let tradingSystemModuleObject = TS.projects.algorithmicTrading.botModules.tradingSystem.newAlgorithmicTradingBotModulesTradingSystem(processIndex) tradingSystemModuleObject.initialize() - let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newFoundationsBotModulesTradingEpisode(processIndex) + let tradingEpisodeModuleObject = TS.projects.algorithmicTrading.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) tradingEpisodeModuleObject.initialize() /* Setting up the candles array: The whole simulation is based on the array of candles at the time-frame defined at the session parameters. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js index 34b3f1345..a1e1a0de1 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStages.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingStages = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) { /* This module packages all functions related to Stages. */ @@ -21,12 +21,12 @@ exports.newFoundationsBotModulesTradingStages = function (processIndex) { finalize: finalize } - let tradingStrategyModuleObject = TS.projects.foundations.botModules.tradingStrategy.newFoundationsBotModulesTradingStrategy(processIndex) - let tradingPositionModuleObject = TS.projects.foundations.botModules.tradingPosition.newFoundationsBotModulesTradingPosition(processIndex) - let tradingExecutionModuleObject = TS.projects.foundations.botModules.tradingExecution.newFoundationsBotModulesTradingExecution(processIndex) + let tradingStrategyModuleObject = TS.projects.algorithmicTrading.botModules.tradingStrategy.newAlgorithmicTradingBotModulesTradingStrategy(processIndex) + let tradingPositionModuleObject = TS.projects.algorithmicTrading.botModules.tradingPosition.newAlgorithmicTradingBotModulesTradingPosition(processIndex) + let tradingExecutionModuleObject = TS.projects.algorithmicTrading.botModules.tradingExecution.newAlgorithmicTradingBotModulesTradingExecution(processIndex) let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex) - let snapshotsModuleObject = TS.projects.foundations.botModules.snapshots.newFoundationsBotModulesSnapshots(processIndex) - let tradingEpisodeModuleObject = TS.projects.foundations.botModules.tradingEpisode.newFoundationsBotModulesTradingEpisode(processIndex) + let snapshotsModuleObject = TS.projects.algorithmicTrading.botModules.snapshots.newAlgorithmicTradingBotModulesSnapshots(processIndex) + let tradingEpisodeModuleObject = TS.projects.algorithmicTrading.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex) let tradingEngine let tradingSystem diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js similarity index 97% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js index f676de4d7..be2a09c31 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingStrategy.js @@ -1,8 +1,8 @@ -exports.newFoundationsBotModulesTradingStrategy = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingStrategy = function (processIndex) { /* This module packages all functions related to Strategies. */ - const MODULE_NAME = 'Trading Strategy' + let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js index 149c55e76..4f3d5691a 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/TradingSystem.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingSystem = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) { /* The Trading System is the user defined set of rules compliant with the Trading Protocol that defines the trading logic to be applied during each cycle of the Simulation. @@ -26,7 +26,7 @@ exports.newFoundationsBotModulesTradingSystem = function (processIndex) { let sessionParameters let dynamicIndicators - let tradingStagesModuleObject = TS.projects.foundations.botModules.tradingStages.newFoundationsBotModulesTradingStages(processIndex) + let tradingStagesModuleObject = TS.projects.algorithmicTrading.botModules.tradingStages.newAlgorithmicTradingBotModulesTradingStages(processIndex) let taskParameters = { market: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js index 6592a92f8..23aa53e3c 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/SingleMarketTradingBot.js @@ -1,8 +1,8 @@ -exports.newFoundationsBotModulesSingleMarketTradingBot = function (processIndex) { +exports.newAlgorithmicTradingBotModulesSingleMarketTradingBot = function (processIndex) { const MODULE_NAME = "Single Market Trading Bot"; - let session = TS.projects.foundations.botModules.tradingSession.newFoundationsBotModulesTradingSession(processIndex) + let session = TS.projects.algorithmicTrading.botModules.tradingSession.newAlgorithmicTradingBotModulesTradingSession(processIndex) let nextLoopTimeoutHandle; let thisObject = { @@ -282,7 +282,7 @@ "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well.") switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Low-Frequency-Trading-Process': { - processFramework = TS.projects.foundations.botModules.tradingProcess.newFoundationsBotModulesTradingProcess(processIndex); + processFramework = TS.projects.algorithmicTrading.botModules.tradingProcess.newAlgorithmicTradingBotModulesTradingProcess(processIndex); startProcessFramework(); break; } diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/TradingSession.js b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/TradingSession.js rename to Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js index 404516556..d9d3586ee 100644 --- a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/TradingSession.js +++ b/Projects/Algorithmic-Trading/TS/Bot-Modules/Trading-Bot/TradingSession.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesTradingSession = function (processIndex) { +exports.newAlgorithmicTradingBotModulesTradingSession = function (processIndex) { const MODULE_NAME = "Trading Session" diff --git a/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..c45e2c3fb --- /dev/null +++ b/Projects/Algorithmic-Trading/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,38 @@ +function newAlgorithmicTradingActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Run Trading Session': + { + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, false, action.callBackFunction) + } + break + case 'Resume Trading Session': + { + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.runSession(action.node, true, action.callBackFunction) + } + break + case 'Stop Trading Session': + { + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction) + } + break + } + } +} diff --git a/Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js b/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js similarity index 99% rename from Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js rename to Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js index a8761f130..657af61b0 100644 --- a/Projects/Foundations/UI/Function-Libraries/TradingSessionFunctions.js +++ b/Projects/Algorithmic-Trading/UI/Function-Libraries/TradingSessionFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryTradingSessionFunctions() { +function newAlgorithmicTradingFunctionLibraryTradingSessionFunctions() { let thisObject = { syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, runSession: runSession, diff --git a/Projects/Foundations/Icons/Plugins/plugin-api-maps.png b/Projects/Community-Plugins/Icons/plugin-api-maps.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-api-maps.png rename to Projects/Community-Plugins/Icons/plugin-api-maps.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-data-mines.png b/Projects/Community-Plugins/Icons/plugin-data-mines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-data-mines.png rename to Projects/Community-Plugins/Icons/plugin-data-mines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-file-position.png b/Projects/Community-Plugins/Icons/plugin-file-position.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-file-position.png rename to Projects/Community-Plugins/Icons/plugin-file-position.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-file.png b/Projects/Community-Plugins/Icons/plugin-file.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-file.png rename to Projects/Community-Plugins/Icons/plugin-file.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-learning-engines.png b/Projects/Community-Plugins/Icons/plugin-learning-engines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-learning-engines.png rename to Projects/Community-Plugins/Icons/plugin-learning-engines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-learning-mines.png b/Projects/Community-Plugins/Icons/plugin-learning-mines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-learning-mines.png rename to Projects/Community-Plugins/Icons/plugin-learning-mines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-learning-systems.png b/Projects/Community-Plugins/Icons/plugin-learning-systems.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-learning-systems.png rename to Projects/Community-Plugins/Icons/plugin-learning-systems.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-project.png b/Projects/Community-Plugins/Icons/plugin-project.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-project.png rename to Projects/Community-Plugins/Icons/plugin-project.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-super-scripts.png b/Projects/Community-Plugins/Icons/plugin-super-scripts.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-super-scripts.png rename to Projects/Community-Plugins/Icons/plugin-super-scripts.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-trading-engines.png b/Projects/Community-Plugins/Icons/plugin-trading-engines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-trading-engines.png rename to Projects/Community-Plugins/Icons/plugin-trading-engines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-trading-mines.png b/Projects/Community-Plugins/Icons/plugin-trading-mines.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-trading-mines.png rename to Projects/Community-Plugins/Icons/plugin-trading-mines.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-trading-systems.png b/Projects/Community-Plugins/Icons/plugin-trading-systems.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-trading-systems.png rename to Projects/Community-Plugins/Icons/plugin-trading-systems.png diff --git a/Projects/Foundations/Icons/Plugins/plugin-tutorials.png b/Projects/Community-Plugins/Icons/plugin-tutorials.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugin-tutorials.png rename to Projects/Community-Plugins/Icons/plugin-tutorials.png diff --git a/Projects/Foundations/Icons/Plugins/plugins.png b/Projects/Community-Plugins/Icons/plugins-project.png similarity index 100% rename from Projects/Foundations/Icons/Plugins/plugins.png rename to Projects/Community-Plugins/Icons/plugins-project.png diff --git a/Projects/Community-Plugins/Icons/plugins.png b/Projects/Community-Plugins/Icons/plugins.png new file mode 100644 index 000000000..09d71a296 Binary files /dev/null and b/Projects/Community-Plugins/Icons/plugins.png differ diff --git a/Projects/Foundations/SA/Utilities/Plugins.js b/Projects/Community-Plugins/SA/Utilities/Plugins.js similarity index 94% rename from Projects/Foundations/SA/Utilities/Plugins.js rename to Projects/Community-Plugins/SA/Utilities/Plugins.js index 7998febf6..fb5f66c96 100644 --- a/Projects/Foundations/SA/Utilities/Plugins.js +++ b/Projects/Community-Plugins/SA/Utilities/Plugins.js @@ -1,4 +1,4 @@ -exports.newFoundationsUtilitiesPlugins = function () { +exports.newPluginsUtilitiesPlugins = function () { let thisObject = { getPluginFileNames: getPluginFileNames, @@ -14,7 +14,7 @@ exports.newFoundationsUtilitiesPlugins = function () { SA.nodeModules.fs.readdir(path, (err, files) => { if (err) { - reject() + reject(err) return } if (files === undefined) { diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-api-maps.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json similarity index 82% rename from Projects/Foundations/Schemas/App-Schema/plugin-api-maps.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json index 9274fb772..ebe81c9a8 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-api-maps.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-api-maps.json @@ -8,7 +8,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "API Map", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +18,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-data-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json similarity index 70% rename from Projects/Foundations/Schemas/App-Schema/plugin-data-mines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json index 8599d57c8..841ace1bc 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-data-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-data-mines.json @@ -7,8 +7,11 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Data Mine", - "actionFunction": "payload.executeAction" + "iconPathOn": "data-mine", + "iconPathOff": "data-mine", + "iconProject": "Data-Mining", + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +20,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, @@ -31,7 +35,8 @@ "name": "pluginFiles", "type": "array", "childType": "Plugin File", - "autoAdd": false + "autoAdd": false, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-file-position.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file-position.json similarity index 83% rename from Projects/Foundations/Schemas/App-Schema/plugin-file-position.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-file-position.json index 98fd30600..982ed5de5 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-file-position.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file-position.json @@ -8,7 +8,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "title": [ diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-file.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json similarity index 78% rename from Projects/Foundations/Schemas/App-Schema/plugin-file.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json index 37dc941cf..96f6a4501 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-file.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-file.json @@ -6,7 +6,8 @@ "label": "Configure", "iconPathOn": "configuration", "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", @@ -14,25 +15,29 @@ "propertyToCheckFor": "pluginFilePosition", "actionFunction": "payload.executeAction", "label": "Add Plugin File Position", - "relatedUiObject": "Plugin File Position" + "relatedUiObject": "Plugin File Position", + "actionProject": "Foundations" }, { "action": "Enable Saving With Workspace", "actionFunction": "payload.executeAction", "label": "Enable Saving With Workspace", - "relatedUiObject": "Plugin File" + "relatedUiObject": "Plugin File", + "actionProject": "Community-Plugins" }, { "action": "Disable Saving With Workspace", "actionFunction": "payload.executeAction", "label": "Disable Saving With Workspace", - "relatedUiObject": "Plugin File" + "relatedUiObject": "Plugin File", + "actionProject": "Community-Plugins" }, { "action": "Save Plugin", "actionFunction": "payload.executeAction", "label": "Save Plugin", - "relatedUiObject": "Plugin File" + "relatedUiObject": "Plugin File", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -41,7 +46,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "editors": { diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-learning-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json similarity index 74% rename from Projects/Foundations/Schemas/App-Schema/plugin-learning-engines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json index 989fdfef0..810b34ef9 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-learning-engines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-engines.json @@ -7,8 +7,11 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Learning Engine", - "actionFunction": "payload.executeAction" + "iconPathOn": "learning-engine", + "iconPathOff": "learning-engine", + "iconProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +20,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-learning-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json similarity index 74% rename from Projects/Foundations/Schemas/App-Schema/plugin-learning-mines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json index 25c3a4891..db072d708 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-learning-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-mines.json @@ -7,8 +7,11 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Learning Mine", - "actionFunction": "payload.executeAction" + "iconPathOn": "learning-mine", + "iconPathOff": "learning-mine", + "iconProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +20,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-learning-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json similarity index 74% rename from Projects/Foundations/Schemas/App-Schema/plugin-learning-systems.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json index 362412ab8..56f236216 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-learning-systems.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-learning-systems.json @@ -7,8 +7,11 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Learning System", - "actionFunction": "payload.executeAction" + "iconPathOn": "learning-system", + "iconPathOff": "learning-system", + "iconProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +20,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-project.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json similarity index 93% rename from Projects/Foundations/Schemas/App-Schema/plugin-project.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json index e4aa17c5b..2ba4668f7 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-project.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-project.json @@ -6,13 +6,15 @@ "actionFunction": "uiObject.configEditor.activate", "label": "Configure", "iconPathOn": "configuration", - "iconPathOff": "configuration" + "iconPathOff": "configuration", + "actionProject": "Foundations" }, { "action": "Add Missing Plugin Types", "label": "Add Missing Plugin Types", "relatedUiObject": "Plugins", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -21,7 +23,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "initialValues": { diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-trading-engines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json similarity index 73% rename from Projects/Foundations/Schemas/App-Schema/plugin-trading-engines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json index d8814713c..0c19d38a4 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-trading-engines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-engines.json @@ -7,8 +7,11 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" + "iconPathOn": "trading-engine", + "iconPathOff": "trading-engine", + "iconProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +20,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-trading-mines.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json similarity index 73% rename from Projects/Foundations/Schemas/App-Schema/plugin-trading-mines.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json index 882c3a935..9ca446ab8 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-trading-mines.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-mines.json @@ -7,8 +7,11 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Trading Mine", - "actionFunction": "payload.executeAction" + "iconPathOn": "trading-mine", + "iconPathOff": "trading-mine", + "iconProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +20,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-trading-systems.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json similarity index 73% rename from Projects/Foundations/Schemas/App-Schema/plugin-trading-systems.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json index 45a3c1f9c..0195fd6fe 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-trading-systems.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-trading-systems.json @@ -7,8 +7,11 @@ "askConfirmation": true, "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", - "relatedUiObject": "Trading System", - "actionFunction": "payload.executeAction" + "iconPathOn": "trading-system", + "iconPathOff": "trading-system", + "iconProject": "Algorithmic-Trading", + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +20,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Foundations/Schemas/App-Schema/plugin-tutorials.json b/Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json similarity index 83% rename from Projects/Foundations/Schemas/App-Schema/plugin-tutorials.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json index ba844f57f..bd34dc710 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugin-tutorials.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugin-tutorials.json @@ -9,7 +9,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Tutorial", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -18,7 +19,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "addLeftIcons": true, diff --git a/Projects/Community-Plugins/Schemas/App-Schema/plugins-project.json b/Projects/Community-Plugins/Schemas/App-Schema/plugins-project.json new file mode 100644 index 000000000..f172a7eca --- /dev/null +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugins-project.json @@ -0,0 +1,45 @@ +{ + "type": "Plugins Project", + "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "relatedUiObject": "Foundations Project", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Plugins", + "relatedUiObject": "Plugins", + "relatedUiObjectProject": "Community-Plugins", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "actionFunction": "payload.executeAction", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionProject": "Foundations" + } + ], + "isProjectHead": true, + "isTitleAllwaysVisible": false, + "addLeftIcons": true, + "isPinned": true, + "positionLocked": true, + "icon": "plugins-project", + "childrenNodesProperties": [ + { + "name": "projectDefinition", + "type": "node", + "childType": "Project Definition", + "project": "Foundations", + "autoAdd": true + } + ] +} \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/plugins.json b/Projects/Community-Plugins/Schemas/App-Schema/plugins.json similarity index 82% rename from Projects/Foundations/Schemas/App-Schema/plugins.json rename to Projects/Community-Plugins/Schemas/App-Schema/plugins.json index 3858fa98d..7ec46df76 100644 --- a/Projects/Foundations/Schemas/App-Schema/plugins.json +++ b/Projects/Community-Plugins/Schemas/App-Schema/plugins.json @@ -8,7 +8,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Plugin Project", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Community-Plugins" }, { "action": "Delete UI Object", @@ -17,7 +18,8 @@ "actionFunction": "payload.executeAction", "label": "Delete", "iconPathOn": "delete-entity", - "iconPathOff": "delete-entity" + "iconPathOff": "delete-entity", + "actionProject": "Foundations" } ], "isHierarchyHead": true, diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-API-Maps/plugin-api-maps.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Data-Mines/plugin-data-mines.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File-Position/plugin-file-position.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-File/plugin-file.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Project/plugin-project.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Super-Scripts/plugin-super-scripts.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Engines/plugin-trading-engines.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Mines/plugin-trading-mines.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Trading-Systems/plugin-trading-systems.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugin/Plugin-Tutorials/plugin-tutorials.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plugins/Plugins/plugins.json b/Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/P/Plugins/Plugins/plugins.json rename to Projects/Community-Plugins/Schemas/Docs-Nodes/P/Plugins/plugins.json diff --git a/Projects/Community-Plugins/UI/Function-Libraries/ActionSwitch.js b/Projects/Community-Plugins/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..fd5eaf08b --- /dev/null +++ b/Projects/Community-Plugins/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,98 @@ +function newCommunityPluginsActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Install as Plugin': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.installAsPlugin(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Projects': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginProjects(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Types': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTypes(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Data Mines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginDataMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Mines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTradingMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Systems': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTradingSystems(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Trading Engines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Mines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginLearningMines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Systems': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginLearningSystems(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Learning Engines': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginLearningEngines(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin Tutorials': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginTutorials(action.node, action.rootNodes) + } + break + case 'Add Missing Plugin API Maps': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.addMissingPluginApiMaps(action.node, action.rootNodes) + } + break + case 'Enable Saving With Workspace': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.enableSavingWithWorkspace(action.node, action.rootNodes) + } + break + case 'Disable Saving With Workspace': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.disableSavingWithWorkspace(action.node, action.rootNodes) + } + break + case 'Save Plugin': + { + UI.projects.communityPlugins.functionLibraries.pluginsFunctions.savePlugin(action.node, action.rootNodes) + } + break + } + } +} diff --git a/Projects/Foundations/UI/Function-Libraries/PluginsFunctions.js b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js similarity index 66% rename from Projects/Foundations/UI/Function-Libraries/PluginsFunctions.js rename to Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js index 7e4db38a0..a13088a57 100644 --- a/Projects/Foundations/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Community-Plugins/UI/Function-Libraries/PluginsFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryPluginsFunctions() { +function newPluginsFunctionLibraryPluginsFunctions() { let thisObject = { addMissingPluginProjects: addMissingPluginProjects, addMissingPluginTypes: addMissingPluginTypes, @@ -43,14 +43,14 @@ function newFoundationsFunctionLibraryPluginsFunctions() { let pluginType = "Plugin" + " " + projectDefinition.plugins[i] if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByType(node, pluginType) === true) { - UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, pluginType, undefined, project) + UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, pluginType, undefined, 'Community-Plugins') } } } } function addMissingPluginDataMines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -58,15 +58,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Data-Mines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Data-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Data-Mines', 'Data Mine') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Data-Mines', 'Data Mine', 'Data-Mining') } } function addMissingPluginTradingMines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -74,15 +74,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Mines', 'Trading Mine', 'Algorithmic-Trading') } } function addMissingPluginTradingSystems(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -90,15 +90,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Systems', 'Trading System', 'Algorithmic-Trading') } } function addMissingPluginTradingEngines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -106,15 +106,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Trading-Engines', 'Trading Engine', 'Algorithmic-Trading') } } function addMissingPluginLearningMines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -122,15 +122,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Learning-Mines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Mines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Mines', 'Learning Mine', 'Machine-Learning') } } function addMissingPluginLearningSystems(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -138,15 +138,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Learning-Systems', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Systems', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Systems', 'Learning System', 'Machine-Learning') } } function addMissingPluginLearningEngines(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -154,15 +154,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Learning-Engines', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Learning-Engines', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Learning-Engines', 'Learning Engine', 'Machine-Learning') } } function addMissingPluginTutorials(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -170,15 +170,15 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Tutorials', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Tutorials', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Tutorials', 'Tutorial') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Tutorials', 'Tutorial', 'Education') } } function addMissingPluginApiMaps(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage("Config codeName must have the name of the project.") @@ -186,10 +186,10 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'API-Maps', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'API-Maps', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'API-Maps', 'API Map') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'API-Maps', 'API Map', 'Foundations') } } @@ -204,16 +204,16 @@ function newFoundationsFunctionLibraryPluginsFunctions() { } function savePlugin(node, rootNodes) { - UI.projects.foundations.utilities.plugins.savePluginFile(node) + UI.projects.communityPlugins.utilities.plugins.savePluginFile(node) } function installAsPlugin(node, rootNodes) { let plugins = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadByNodeType('Plugins') let pluginProject = UI.projects.foundations.utilities.nodeChildren.findChildByCodeName(plugins, node.project) - let pluginFolderName = UI.projects.foundations.utilities.plugins.getPluginFolderNamesByNodeType(node.type) + let pluginFolderName = UI.projects.communityPlugins.utilities.plugins.getPluginFolderNamesByNodeType(node.type) let pluginForlderNodeType = 'Plugin ' + pluginFolderName.replaceAll('-', ' ') let pluginFolderNode = UI.projects.foundations.utilities.nodeChildren.findChildByType(pluginProject, pluginForlderNodeType) - let pluginFile = UI.projects.foundations.utilities.plugins.addMissingPluginFile(pluginFolderNode, node.name, pluginFolderName, node.type, true) + let pluginFile = UI.projects.communityPlugins.utilities.plugins.addMissingPluginFile(pluginFolderNode, node.name, pluginFolderName, node.type, node.project, true) node.isPlugin = true if (pluginFile === undefined) { @@ -221,6 +221,6 @@ function newFoundationsFunctionLibraryPluginsFunctions() { return } - UI.projects.foundations.utilities.plugins.savePluginFile(pluginFile) + UI.projects.communityPlugins.utilities.plugins.savePluginFile(pluginFile) } } diff --git a/Projects/Foundations/UI/Utilities/Plugins.js b/Projects/Community-Plugins/UI/Utilities/Plugins.js similarity index 97% rename from Projects/Foundations/UI/Utilities/Plugins.js rename to Projects/Community-Plugins/UI/Utilities/Plugins.js index 70fb48ac1..aeea2de25 100644 --- a/Projects/Foundations/UI/Utilities/Plugins.js +++ b/Projects/Community-Plugins/UI/Utilities/Plugins.js @@ -1,4 +1,4 @@ -function newFoundationsUtilitiesPlugins() { +function newPluginsUtilitiesPlugins() { let thisObject = { getPluginFileNames: getPluginFileNames, getPluginFolderNamesByNodeType: getPluginFolderNamesByNodeType, @@ -24,20 +24,20 @@ function newFoundationsUtilitiesPlugins() { } } - function addMissingPluginFiles(node, fileNames, pluginFolder, nodeType) { + function addMissingPluginFiles(node, fileNames, pluginFolder, nodeType, project) { for (let i = 0; i < fileNames.length; i++) { let fileName = fileNames[i] fileName = fileName.replace('.json', '') - addMissingPluginFile(node, fileName, pluginFolder, nodeType, false) + addMissingPluginFile(node, fileName, pluginFolder, nodeType, project, false) } } - function addMissingPluginFile(node, fileName, pluginFolder, nodeType, saveWithWorkspace) { + function addMissingPluginFile(node, fileName, pluginFolder, nodeType, project, saveWithWorkspace) { if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenByName(node, fileName) === true) { - let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin File', undefined, 'Foundations') + let child = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, 'Plugin File', undefined, 'Community-Plugins') child.name = fileName child.config = JSON.stringify({ - project: node.project, + project: project, fileName: fileName, folderName: pluginFolder, nodeType: nodeType, diff --git a/Projects/Foundations/Icons/Api/api-data-fetcher-bot.png b/Projects/Data-Mining/Icons/Api/api-data-fetcher-bot.png similarity index 100% rename from Projects/Foundations/Icons/Api/api-data-fetcher-bot.png rename to Projects/Data-Mining/Icons/Api/api-data-fetcher-bot.png diff --git a/Projects/Foundations/Icons/Data/data-mine.png b/Projects/Data-Mining/Icons/Data/data-mine.png similarity index 100% rename from Projects/Foundations/Icons/Data/data-mine.png rename to Projects/Data-Mining/Icons/Data/data-mine.png diff --git a/Projects/Data-Mining/Icons/Data/data-mining-project.png b/Projects/Data-Mining/Icons/Data/data-mining-project.png new file mode 100644 index 000000000..f8b8fa791 Binary files /dev/null and b/Projects/Data-Mining/Icons/Data/data-mining-project.png differ diff --git a/Projects/Foundations/Icons/indicator-bot.png b/Projects/Data-Mining/Icons/indicator-bot.png similarity index 100% rename from Projects/Foundations/Icons/indicator-bot.png rename to Projects/Data-Mining/Icons/indicator-bot.png diff --git a/Projects/Foundations/Icons/sensor-bot.png b/Projects/Data-Mining/Icons/sensor-bot.png similarity index 100% rename from Projects/Foundations/Icons/sensor-bot.png rename to Projects/Data-Mining/Icons/sensor-bot.png diff --git a/Projects/Foundations/Plugins/Data-Mines/Alpha.json b/Projects/Data-Mining/Plugins/Data-Mines/Alpha.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Alpha.json rename to Projects/Data-Mining/Plugins/Data-Mines/Alpha.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Barcelona.json b/Projects/Data-Mining/Plugins/Data-Mines/Barcelona.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Barcelona.json rename to Projects/Data-Mining/Plugins/Data-Mines/Barcelona.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Bollinger.json b/Projects/Data-Mining/Plugins/Data-Mines/Bollinger.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Bollinger.json rename to Projects/Data-Mining/Plugins/Data-Mines/Bollinger.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Buddha.json b/Projects/Data-Mining/Plugins/Data-Mines/Buddha.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Buddha.json rename to Projects/Data-Mining/Plugins/Data-Mines/Buddha.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Candles.json b/Projects/Data-Mining/Plugins/Data-Mines/Candles.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Candles.json rename to Projects/Data-Mining/Plugins/Data-Mines/Candles.json diff --git a/Projects/Foundations/Plugins/Data-Mines/CoinGecko.json b/Projects/Data-Mining/Plugins/Data-Mines/CoinGecko.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/CoinGecko.json rename to Projects/Data-Mining/Plugins/Data-Mines/CoinGecko.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Delta.json b/Projects/Data-Mining/Plugins/Data-Mines/Delta.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Delta.json rename to Projects/Data-Mining/Plugins/Data-Mines/Delta.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Heikin.json b/Projects/Data-Mining/Plugins/Data-Mines/Heikin.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Heikin.json rename to Projects/Data-Mining/Plugins/Data-Mines/Heikin.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Indicator-Add-ons.json b/Projects/Data-Mining/Plugins/Data-Mines/Indicator-Add-ons.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Indicator-Add-ons.json rename to Projects/Data-Mining/Plugins/Data-Mines/Indicator-Add-ons.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Masters.json b/Projects/Data-Mining/Plugins/Data-Mines/Masters.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Masters.json rename to Projects/Data-Mining/Plugins/Data-Mines/Masters.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Messari.json b/Projects/Data-Mining/Plugins/Data-Mines/Messari.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Messari.json rename to Projects/Data-Mining/Plugins/Data-Mines/Messari.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Omega-One.json b/Projects/Data-Mining/Plugins/Data-Mines/Omega-One.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Omega-One.json rename to Projects/Data-Mining/Plugins/Data-Mines/Omega-One.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Pluvtech.json b/Projects/Data-Mining/Plugins/Data-Mines/Pluvtech.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Pluvtech.json rename to Projects/Data-Mining/Plugins/Data-Mines/Pluvtech.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Polus.json b/Projects/Data-Mining/Plugins/Data-Mines/Polus.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Polus.json rename to Projects/Data-Mining/Plugins/Data-Mines/Polus.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Quasar.json b/Projects/Data-Mining/Plugins/Data-Mines/Quasar.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Quasar.json rename to Projects/Data-Mining/Plugins/Data-Mines/Quasar.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Samurai.json b/Projects/Data-Mining/Plugins/Data-Mines/Samurai.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Samurai.json rename to Projects/Data-Mining/Plugins/Data-Mines/Samurai.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Sparta.json b/Projects/Data-Mining/Plugins/Data-Mines/Sparta.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Sparta.json rename to Projects/Data-Mining/Plugins/Data-Mines/Sparta.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Turtles.json b/Projects/Data-Mining/Plugins/Data-Mines/Turtles.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Turtles.json rename to Projects/Data-Mining/Plugins/Data-Mines/Turtles.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Webhooks.json b/Projects/Data-Mining/Plugins/Data-Mines/Webhooks.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Webhooks.json rename to Projects/Data-Mining/Plugins/Data-Mines/Webhooks.json diff --git a/Projects/Foundations/Plugins/Data-Mines/Zeus.json b/Projects/Data-Mining/Plugins/Data-Mines/Zeus.json similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/Zeus.json rename to Projects/Data-Mining/Plugins/Data-Mines/Zeus.json diff --git a/Projects/Foundations/Plugins/Data-Mines/quantum.json b/Projects/Data-Mining/Plugins/Data-Mines/quantum.json old mode 100755 new mode 100644 similarity index 100% rename from Projects/Foundations/Plugins/Data-Mines/quantum.json rename to Projects/Data-Mining/Plugins/Data-Mines/quantum.json diff --git a/Projects/Foundations/Schemas/App-Schema/Api/api-data-fetcher-bot.json b/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json similarity index 70% rename from Projects/Foundations/Schemas/App-Schema/Api/api-data-fetcher-bot.json rename to Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json index a0837f199..6265ca234 100644 --- a/Projects/Foundations/Schemas/App-Schema/Api/api-data-fetcher-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/Api/api-data-fetcher-bot.json @@ -7,19 +7,24 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +33,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -48,13 +54,15 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "apiDataFetcherBots", diff --git a/Projects/Foundations/Schemas/App-Schema/data-mine.json b/Projects/Data-Mining/Schemas/App-Schema/data-mine.json similarity index 71% rename from Projects/Foundations/Schemas/App-Schema/data-mine.json rename to Projects/Data-Mining/Schemas/App-Schema/data-mine.json index bd5e6de93..fd28d86f6 100644 --- a/Projects/Foundations/Schemas/App-Schema/data-mine.json +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mine.json @@ -6,32 +6,39 @@ "label": "Configure", "iconPathOn": "configuration", "iconPathOff": "configuration", + "iconProject": "Foundations", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Sensor Bot", "relatedUiObject": "Sensor Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add API Data Fetcher Bot", "relatedUiObject": "API Data Fetcher Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Indicator Bot", "relatedUiObject": "Indicator Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Plotter", "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -40,7 +47,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -72,7 +80,8 @@ { "name": "plotters", "type": "array", - "childType": "Plotter" + "childType": "Plotter", + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json new file mode 100644 index 000000000..46d4dce98 --- /dev/null +++ b/Projects/Data-Mining/Schemas/App-Schema/data-mining-project.json @@ -0,0 +1,47 @@ +{ + "type": "Data-Mining Project", + "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "iconPathOn": "data-mining-project", + "iconPathOff": "data-mining-project", + "iconProject": "Data-Mining", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Data Mine", + "relatedUiObject": "Data Mine", + "relatedUiObjectProject": "Data-Mining", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "actionFunction": "payload.executeAction", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionProject": "Foundations" + } + ], + "isProjectHead": true, + "isTitleAllwaysVisible": false, + "addLeftIcons": true, + "isPinned": true, + "positionLocked": true, + "icon": "data-mining-project", + "childrenNodesProperties": [ + { + "name": "projectDefinition", + "type": "node", + "childType": "Project Definition", + "project": "Foundations", + "autoAdd": true + } + ] +} \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/indicator-bot.json b/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json similarity index 69% rename from Projects/Foundations/Schemas/App-Schema/indicator-bot.json rename to Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json index 98b8b9534..6846ae63a 100644 --- a/Projects/Foundations/Schemas/App-Schema/indicator-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/indicator-bot.json @@ -7,19 +7,24 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +33,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -48,13 +54,15 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "indicatorBots" diff --git a/Projects/Foundations/Schemas/App-Schema/sensor-bot.json b/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json similarity index 69% rename from Projects/Foundations/Schemas/App-Schema/sensor-bot.json rename to Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json index 2fe664109..779e4b644 100644 --- a/Projects/Foundations/Schemas/App-Schema/sensor-bot.json +++ b/Projects/Data-Mining/Schemas/App-Schema/sensor-bot.json @@ -7,19 +7,24 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +33,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -48,13 +54,15 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "sensorBots" diff --git a/Projects/Foundations/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json b/Projects/Data-Mining/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/A/API/API-Data-Fetcher-Bot/api-data-fetcher-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json b/Projects/Data-Mining/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/D/Data/Data-Mine/data-mine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json b/Projects/Data-Mining/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/I/Indicator/Indicator-Bot/indicator-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json b/Projects/Data-Mining/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json rename to Projects/Data-Mining/Schemas/Docs-Nodes/S/Sensor/Sensor-Bot/sensor-bot.json diff --git a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js rename to Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js index 1c3a6ef54..e0acf093e 100644 --- a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js +++ b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/FetchingProcess.js @@ -1,5 +1,5 @@ -exports.newFoundationsBotModulesFetchingProcess = function (processIndex) { +exports.newDataMiningBotModulesFetchingProcess = function (processIndex) { const MODULE_NAME = "Fetching Process"; @@ -868,7 +868,7 @@ exports.newFoundationsBotModulesFetchingProcess = function (processIndex) { Building the current key... */ let key = "" - for (j = 0; j < primaryKeys.length; j++) { + for (let j = 0; j < primaryKeys.length; j++) { let keyValue = record.map.get(primaryKeys[j]) key = key + '->' + keyValue } @@ -887,7 +887,7 @@ exports.newFoundationsBotModulesFetchingProcess = function (processIndex) { let record = getRecord(dataReceivedArray[i]) let key = "" - for (j = 0; j < primaryKeys.length; j++) { + for (let j = 0; j < primaryKeys.length; j++) { let keyValue = record.map.get(primaryKeys[j]) key = key + '->' + keyValue } diff --git a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js rename to Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js index b0b9dea23..b87eb3483 100644 --- a/Projects/Foundations/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js +++ b/Projects/Data-Mining/TS/Bot-Modules/API-Data-Fetcher-Bot/SingleMarketAPIDataFetcherBot.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSingleMarketAPIDataFetcherBot = function (processIndex) { +exports.newDataMiningBotModulesSingleMarketAPIDataFetcherBot = function (processIndex) { const MODULE_NAME = "Single Market API Data Fetcher Bot"; @@ -41,7 +41,8 @@ exports.newFoundationsBotModulesSingleMarketAPIDataFetcherBot = function (proces let botModuleDefinition = TS.projects.foundations.functionLibraries.taskFunctions.getBotModuleByName( TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.botModule ) - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let projectCodeName = TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName + let project = TS.projects[PROJECTS_SCHEMA_MAP.get(projectCodeName).propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js index e7a62f89e..8566dfd9b 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesBollingerBandsMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesBollingerBandsMultiTimeFrameDaily = function (processIndex) { const MODULE_NAME = "Bollinger Bands Multi Time Frame Daily" const CANDLES_FOLDER_NAME = "Candles" diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js index 77415d46e..70c615653 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Bollinger-Bands/BollingerBandsMultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesBollingerBandsMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesBollingerBandsMultiTimeFrameMarket = function (processIndex) { const MODULE_NAME = "Bollinger Bands Multi Time Frame Market" const CANDLES_FOLDER_NAME = "Candles" diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js index 56962ad7f..b1f43ac9d 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesCandlesVolumesMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesCandlesVolumesMultiTimeFrameDaily = function (processIndex) { const MODULE_NAME = "Candles Volumes Multi Time Frame Daily"; const CANDLES_FOLDER_NAME = "Candles"; @@ -440,7 +440,6 @@ return } - const inputVolumesPerdiod = 60 * 1000; // 1 min const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs let totalOutputVolumes = inputFilePeriod / outputPeriod; // this should be 2 in this case. let beginingOutputTime = contextVariables.datetimeLastProducedFile.valueOf(); @@ -577,7 +576,6 @@ let fileContent = ""; for (let i = 0; i < volumes.length; i++) { - let candle = volumes[i]; fileContent = fileContent + separator + '[' + volumes[i].buy + "," + volumes[i].sell + "," + volumes[i].begin + "," + volumes[i].end + "]"; if (separator === "") { separator = ","; } fileRecordCounter++ diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js index ea86ca2f6..89ccadd17 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/Candles-Volumes/CandlesVolumesMultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesCandlesVolumesMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesCandlesVolumesMultiTimeFrameMarket = function (processIndex) { const MODULE_NAME = "Candles Volumes Multi Time Frame Market" const CANDLES_FOLDER_NAME = "Candles" @@ -677,7 +677,6 @@ callBackFunction(err); return; } - const inputVolumesPerdiod = 60 * 1000; // 1 min const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs let totalOutputVolumes = inputFilePeriod / outputPeriod; // this should be 2 in this case. @@ -813,7 +812,6 @@ let fileContent = ""; for (let i = 0; i < volumes.length; i++) { - let candle = volumes[i]; fileContent = fileContent + separator + '[' + volumes[i].buy + "," + volumes[i].sell + "," + volumes[i].begin + "," + volumes[i].end + "]"; if (separator === "") { separator = ","; } fileRecordCounter++ diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js index 93c384207..8ca4f8a82 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily = function (processIndex) { /* This module is about converting a One-Min Daily typeo of data set into a Multi Time Frame Daily type. diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js index 6d943ed83..6c07fa35f 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/FromOneMinToMultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesFromOneMinToMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (processIndex) { /* This module is about converting a One-Min Daily typeo of data set into a Multi Time Frame Market type. diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js similarity index 97% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js index f6f23ce0c..b97a1f896 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/IndicatorOutput.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesIndicatorOutput = function (processIndex) { +exports.newDataMiningBotModulesIndicatorOutput = function (processIndex) { /* This module coordinates the actions to be taken to generate an indicator output. It is used from both Multi-Time-Frame-Market and Multi-Time-Frame-Daily frameworks. @@ -74,7 +74,6 @@ let outputData // Data built as a result of applying user defined code and formulas at the Data Building Procedure let singularVariableName // Name of the variable for this product let recordDefinition // Record as defined by the user at the UI - let fileContent // Here we store the contents of the new data built just before writing it to a file. let resultsWithIrregularPeriods // A product will have irregular periods when the User Code inserts new result records at will, in contrast with normal procedure where the platform insert one record per loop execution. /* diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js index d4815fe6b..db2b8c77b 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameDaily.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesMultiTimeFrameDaily = function (processIndex) { +exports.newDataMiningBotModulesMultiTimeFrameDaily = function (processIndex) { const MODULE_NAME = "Multi Time Frame Daily" /* This module deals with Daily Files, that are data files for Time Frames below 1 hour. @@ -25,7 +25,7 @@ statusDependenciesModule = pStatusDependencies; dataDependenciesModule = pStatusDependenciesModule; - indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newFoundationsBotModulesIndicatorOutput(processIndex) + indicatorOutputModule = TS.projects.dataMining.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) indicatorOutputModule.initialize(callBackFunction) } diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js index 739a7dc5d..764653a54 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/MultiTimeFrameMarket.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesMultiTimeFrameMarket = function (processIndex) { +exports.newDataMiningBotModulesMultiTimeFrameMarket = function (processIndex) { const MODULE_NAME = "Multi Time Frame Market" /* This module deals with Market Files, that are data files for Time Frames of 1 hour and above. @@ -24,7 +24,7 @@ statusDependenciesModule = pStatusDependencies dataDependenciesModule = pStatusDependenciesModule - indicatorOutputModule = TS.projects.foundations.botModules.indicatorOutput.newFoundationsBotModulesIndicatorOutput(processIndex) + indicatorOutputModule = TS.projects.dataMining.botModules.indicatorOutput.newDataMiningBotModulesIndicatorOutput(processIndex) indicatorOutputModule.initialize(callBackFunction) } diff --git a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js rename to Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js index 85baf3204..47de8ea6e 100644 --- a/Projects/Foundations/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSingleMarketIndicatorBot = function (processIndex) { +exports.newDataMiningBotModulesSingleMarketIndicatorBot = function (processIndex) { const MODULE_NAME = "Single Market Indicator Bot"; @@ -40,7 +40,8 @@ let botModuleDefinition = TS.projects.foundations.functionLibraries.taskFunctions.getBotModuleByName( TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.botModule ) - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let projectCodeName = TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName + let project = TS.projects[PROJECTS_SCHEMA_MAP.get(projectCodeName).propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) @@ -276,22 +277,22 @@ switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Multi-Time-Frame-Market': { - processFramework = TS.projects.foundations.botModules.multiTimeFrameMarket.newFoundationsBotModulesMultiTimeFrameMarket(processIndex) + processFramework = TS.projects.dataMining.botModules.multiTimeFrameMarket.newDataMiningBotModulesMultiTimeFrameMarket(processIndex) intitializeProcessFramework() break; } case 'Multi-Time-Frame-Daily': { - processFramework = TS.projects.foundations.botModules.multiTimeFrameDaily.newFoundationsBotModulesMultiTimeFrameDaily(processIndex) + processFramework = TS.projects.dataMining.botModules.multiTimeFrameDaily.newDataMiningBotModulesMultiTimeFrameDaily(processIndex) intitializeProcessFramework() break; } case 'From-One-Min-To-Multi-Time-Frame-Market': { - processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameMarket.newFoundationsBotModulesFromOneMinToMultiTimeFrameMarket(processIndex) + processFramework = TS.projects.dataMining.botModules.fromOneMinToMultiTimeFrameMarket.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket(processIndex) intitializeProcessFramework() break; } case 'From-One-Min-To-Multi-Time-Frame-Daily': { - processFramework = TS.projects.foundations.botModules.fromOneMinToMultiTimeFrameDaily.newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily(processIndex) + processFramework = TS.projects.dataMining.botModules.fromOneMinToMultiTimeFrameDaily.newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily(processIndex) intitializeProcessFramework() break; } diff --git a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js rename to Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js index 34cbb378e..ca299e350 100644 --- a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Exchange-Raw-Data/HistoricOHLCVs.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesHistoricOHLCVs = function (processIndex) { +exports.newDataMiningBotModulesHistoricOHLCVs = function (processIndex) { const MODULE_NAME = "Historic OHLCVs"; const CANDLES_FOLDER_NAME = "Candles/One-Min"; diff --git a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js rename to Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js index 479524f04..32b7e8c16 100644 --- a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/SingleMarketSensorBot.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesSingleMarketSensorBot = function (processIndex) { +exports.newDataMiningBotModulesSingleMarketSensorBot = function (processIndex) { const MODULE_NAME = "Single Market Sensor Bot"; @@ -41,7 +41,8 @@ let botModuleDefinition = TS.projects.foundations.functionLibraries.taskFunctions.getBotModuleByName( TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.botModule ) - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let projectCodeName = TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName + let project = TS.projects[PROJECTS_SCHEMA_MAP.get(projectCodeName).propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) diff --git a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js rename to Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js index 23d8753c4..ff45cd70d 100644 --- a/Projects/Foundations/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js +++ b/Projects/Data-Mining/TS/Bot-Modules/Sensor-Bot/Webhooks/CheckWebhook.js @@ -1,5 +1,5 @@  -exports.newFoundationsBotModulesCheckWebhook = function (processIndex) { +exports.newDataMiningBotModulesCheckWebhook = function (processIndex) { const MODULE_NAME = "Check Webhooks"; const FOLDER_NAME = "External-Signals"; diff --git a/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..9a00f8ac1 --- /dev/null +++ b/Projects/Data-Mining/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,38 @@ +function newDataMiningActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Add All Output Datasets': + { + UI.projects.dataMining.functionLibraries.mineFunctions.addAllOutputDatasets(action.node) + } + break + case 'Add All Data Dependencies': + { + UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataDependencies(action.node) + } + break + case 'Add All Data Mine Dependencies': + { + UI.projects.dataMining.functionLibraries.mineFunctions.addAllDataMineDataDependencies(action.node, action.rootNodes) + } + break + } + } +} diff --git a/Projects/Foundations/UI/Function-Libraries/MineFunctions.js b/Projects/Data-Mining/UI/Function-Libraries/MineFunctions.js similarity index 98% rename from Projects/Foundations/UI/Function-Libraries/MineFunctions.js rename to Projects/Data-Mining/UI/Function-Libraries/MineFunctions.js index 322cd5b39..3082c0f08 100644 --- a/Projects/Foundations/UI/Function-Libraries/MineFunctions.js +++ b/Projects/Data-Mining/UI/Function-Libraries/MineFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryMineFunctions() { +function newDataMiningFunctionLibraryMineFunctions() { let thisObject = { addAllOutputDatasets: addAllOutputDatasets, addAllDataDependencies: addAllDataDependencies, diff --git a/Projects/Education/Schemas/App-Schema/tutorial-step.json b/Projects/Education/Schemas/App-Schema/tutorial-step.json index cc05ff412..8f64be60d 100644 --- a/Projects/Education/Schemas/App-Schema/tutorial-step.json +++ b/Projects/Education/Schemas/App-Schema/tutorial-step.json @@ -3,7 +3,7 @@ "menuItems": [ { "action": "Play Tutorial Step", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Play", "iconPathOn": "play", "iconPathOff": "play", @@ -11,7 +11,7 @@ }, { "action": "Resume Tutorial Step", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Resume", "iconPathOn": "resume", "iconPathOff": "resume", diff --git a/Projects/Education/Schemas/App-Schema/tutorial-topic.json b/Projects/Education/Schemas/App-Schema/tutorial-topic.json index 5c68799a9..90d9a08fe 100644 --- a/Projects/Education/Schemas/App-Schema/tutorial-topic.json +++ b/Projects/Education/Schemas/App-Schema/tutorial-topic.json @@ -3,7 +3,7 @@ "menuItems": [ { "action": "Play Tutorial Topic", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Play", "iconPathOn": "play", "iconPathOff": "play", @@ -11,7 +11,7 @@ }, { "action": "Resume Tutorial Topic", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Resume", "iconPathOn": "resume", "iconPathOff": "resume", diff --git a/Projects/Education/Schemas/App-Schema/tutorial.json b/Projects/Education/Schemas/App-Schema/tutorial.json index c0d67ff91..bba92c9f3 100644 --- a/Projects/Education/Schemas/App-Schema/tutorial.json +++ b/Projects/Education/Schemas/App-Schema/tutorial.json @@ -3,7 +3,7 @@ "menuItems": [ { "action": "Play Tutorial", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Play", "iconPathOn": "play", "iconPathOff": "play", @@ -11,7 +11,7 @@ }, { "action": "Resume Tutorial", - "actionProject": "Foundations", + "actionProject": "Education", "label": "Resume", "iconPathOn": "resume", "iconPathOff": "resume", @@ -40,7 +40,7 @@ }, { "action": "Reset Tutorial Progress", - "actionProject": "Foundations", + "actionProject": "Education", "askConfirmation": true, "confirmationLabel": "Confirm to Reset", "label": "Reset Tutorial Progress", diff --git a/Projects/Education/UI/Function-Libraries/ActionSwitch.js b/Projects/Education/UI/Function-Libraries/ActionSwitch.js index 6770f633c..329bb4a35 100644 --- a/Projects/Education/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Education/UI/Function-Libraries/ActionSwitch.js @@ -18,9 +18,40 @@ function newEducationActionSwitch() { async function executeAction(action) { switch (action.name) { - case 'Action Name': { - // Example: return UI.projects.foundations.functionLibraries.onFocus.getNodeThatIsOnFocus(action.node) - } + case 'Play Tutorial': + { + UI.projects.education.spaces.tutorialSpace.playTutorial(action.node) + } + break + case 'Play Tutorial Topic': + { + UI.projects.education.spaces.tutorialSpace.playTutorialTopic(action.node) + } + break + case 'Play Tutorial Step': + { + UI.projects.education.spaces.tutorialSpace.playTutorialStep(action.node) + } + break + case 'Resume Tutorial': + { + UI.projects.education.spaces.tutorialSpace.resumeTutorial(action.node) + } + break + case 'Resume Tutorial Topic': + { + UI.projects.education.spaces.tutorialSpace.resumeTutorialTopic(action.node) + } + break + case 'Resume Tutorial Step': + { + UI.projects.education.spaces.tutorialSpace.resumeTutorialStep(action.node) + } + break + case 'Reset Tutorial Progress': + { + UI.projects.education.spaces.tutorialSpace.resetTutorialProgress(action.node) + } break } } diff --git a/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js b/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js index 15d64e845..eba891dec 100644 --- a/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js +++ b/Projects/Education/UI/Spaces/Docs-Space/DocumentPage.js @@ -854,7 +854,7 @@ function newFoundationsDocsDocumentPage() { if (appSchemaDocument === undefined || appSchemaDocument.menuItems === undefined) { return } for (let i = 0; i < appSchemaDocument.menuItems.length; i++) { let menuItem = appSchemaDocument.menuItems[i] - let collectionImage = getIcon() + let collectionImage = getIcon(appSchemaDocument.menuItems[i].relatedUiObjectProject, appSchemaDocument.menuItems[i].actionProject) if (collectionImage === undefined) { continue } @@ -866,12 +866,23 @@ function newFoundationsDocsDocumentPage() { let dummyImage = parentElement.childNodes[0] parentElement.replaceChild(imageElement, dummyImage) - function getIcon() { + function getIcon(relatedUiObjectProject, actionProject) { + let project if (menuItem.relatedUiObject !== undefined) { - return UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project, menuItem.relatedUiObject) + if (relatedUiObjectProject !== undefined) { + project = relatedUiObjectProject + } else { + project = UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project + } + return UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(project, menuItem.relatedUiObject) } else { + if (actionProject !== undefined) { + project = actionProject + } else { + project = UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project + } if (menuItem.iconPathOn !== undefined) { - return UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project, menuItem.iconPathOn) + return UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(project, menuItem.iconPathOn) } else { return UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', 'bitcoin') } diff --git a/Projects/Foundations/Icons-SVG-Sources/exchanges/binancecoinm.svg b/Projects/Foundations/Icons-SVG-Sources/exchanges/binancecoinm.svg new file mode 100644 index 000000000..cd4782893 --- /dev/null +++ b/Projects/Foundations/Icons-SVG-Sources/exchanges/binancecoinm.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/Projects/Foundations/Icons-SVG-Sources/exchanges/binanceusdm.svg b/Projects/Foundations/Icons-SVG-Sources/exchanges/binanceusdm.svg new file mode 100644 index 000000000..cd4782893 --- /dev/null +++ b/Projects/Foundations/Icons-SVG-Sources/exchanges/binanceusdm.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/Projects/Foundations/Icons/Crypto-Exchanges/binancecoinm.png b/Projects/Foundations/Icons/Crypto-Exchanges/binancecoinm.png new file mode 100644 index 000000000..8f4f71952 Binary files /dev/null and b/Projects/Foundations/Icons/Crypto-Exchanges/binancecoinm.png differ diff --git a/Projects/Foundations/Icons/Crypto-Exchanges/binanceusdm.png b/Projects/Foundations/Icons/Crypto-Exchanges/binanceusdm.png new file mode 100644 index 000000000..8f4f71952 Binary files /dev/null and b/Projects/Foundations/Icons/Crypto-Exchanges/binanceusdm.png differ diff --git a/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json b/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json index 2d0c7b7e4..4640f55fb 100644 --- a/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json +++ b/Projects/Foundations/Plugins/Workspaces/Getting-Started-Tutorials.json @@ -1,6 +1,6 @@ { "type": "Workspace", - "name": "Getting Started Tutorials", + "name": "Getting-Started-Tutorials", "config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}", "rootNodes": [ { @@ -20,7 +20,7 @@ "projectDataTasks": [ { "type": "Project Data Tasks", - "name": "Foundations", + "name": "Data-Mining", "project": "Foundations", "exchangeDataTasks": [ { @@ -87,13 +87,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -139,13 +139,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -259,7 +259,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ] ] @@ -319,13 +319,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Exchange Raw Data", "Sensor Bot", - "Foundations", + "Data-Mining", "af924204-66a2-47d4-9910-66ab78acb06f" ], [ @@ -428,13 +428,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -480,13 +480,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -600,7 +600,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ] ] @@ -740,21 +740,21 @@ }, "referenceParent": { "type": "Project Definition", - "name": "Foundations", - "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "name": "Data-Mining", + "id": "588e6946-31d9-4389-8cf2-37715795ba4d" }, "referenceParentCombinedNodePath": [ [ - "New Foundations Project", - "Foundations Project", - "Foundations", - "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6" + "New Data-Mining Project", + "Data-Mining Project", + "Data-Mining", + "c80ac0bd-1c21-4e7c-b4b8-020e212bd6f4" ], [ - "Foundations", + "Data-Mining", "Project Definition", "Foundations", - "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "588e6946-31d9-4389-8cf2-37715795ba4d" ] ] } @@ -790,7 +790,7 @@ "projectLearningTasks": [ { "type": "Project Learning Tasks", - "name": "Foundations", + "name": "Machine-Learning", "project": "Foundations", "exchangeLearningTasks": [ { @@ -806,17 +806,17 @@ "id": "aa592e1f-24db-41c7-a5e7-67723812fbce", "savedPayload": { "position": { - "x": 25839.356993272086, - "y": 29987.688294073963 + "x": 25897.356993272086, + "y": 29983.688294073963 }, "targetPosition": { - "x": 25689.356993272086, - "y": 30247.495915209296 + "x": 25747.356993272086, + "y": 30243.495915209296 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 @@ -867,12 +867,12 @@ "id": "598be123-5912-4b2c-857d-aee0667c620b", "savedPayload": { "position": { - "x": 25689.356993272086, - "y": 30247.495915209296 + "x": 25747.356993272086, + "y": 30243.495915209296 }, "targetPosition": { - "x": 25539.356993272086, - "y": 30507.30353634463 + "x": 25597.356993272086, + "y": 30503.30353634463 }, "floatingObject": { "isPinned": false, @@ -916,17 +916,17 @@ "id": "7619d28e-1012-4d41-9d65-75d44e0b42b4", "savedPayload": { "position": { - "x": 25539.356993272086, - "y": 30507.30353634463 + "x": 25597.356993272086, + "y": 30503.30353634463 }, "targetPosition": { - "x": 25389.356993272086, - "y": 30767.11115747996 + "x": 25447.356993272086, + "y": 30763.11115747996 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 3, "distanceToParent": 3, "arrangementStyle": 0 @@ -936,21 +936,21 @@ }, "referenceParent": { "type": "Project Definition", - "name": "Foundations", - "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "name": "Machine-Learning", + "id": "b15d5bbb-0433-40c3-bdd7-3d2aa0ddc389" }, "referenceParentCombinedNodePath": [ [ - "New Foundations Project", - "Foundations Project", - "Foundations", - "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6" + "New Machine-Learning Project", + "Machine-Learning Project", + "Machine-Learning", + "949164da-b9f8-4e0a-8482-f1fd06a22cd0" ], [ - "Foundations", + "Machine-Learning", "Project Definition", "Foundations", - "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "b15d5bbb-0433-40c3-bdd7-3d2aa0ddc389" ] ] } @@ -986,7 +986,7 @@ "projectTradingTasks": [ { "type": "Project Trading Tasks", - "name": "Foundations", + "name": "Algorithmic-Trading", "project": "Foundations", "exchangeTradingTasks": [ { @@ -1340,7 +1340,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -1380,7 +1380,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ] ] @@ -1439,13 +1439,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -1559,7 +1559,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -1699,21 +1699,21 @@ }, "referenceParent": { "type": "Project Definition", - "name": "Foundations", - "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "name": "Algorithmic-Trading", + "id": "159d6c95-233b-4d79-8fe0-b1d75d40f90b" }, "referenceParentCombinedNodePath": [ [ - "New Foundations Project", - "Foundations Project", - "Foundations", - "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6" + "New Algorithmic-Trading Project", + "Algorithmic-Trading Project", + "Algorithmic-Trading", + "96734230-bb91-4527-b2a9-e2f16eb0be96" ], [ - "Foundations", + "Algorithmic-Trading", "Project Definition", "Foundations", - "a2a04e12-604e-43f8-a986-1b8ca3b043cb" + "159d6c95-233b-4d79-8fe0-b1d75d40f90b" ] ] } @@ -2075,7 +2075,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -2115,7 +2115,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ] ] @@ -2174,13 +2174,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -2370,7 +2370,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -2622,13 +2622,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -2674,13 +2674,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -2748,7 +2748,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ] ] @@ -2798,13 +2798,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Exchange Raw Data", "Sensor Bot", - "Foundations", + "Data-Mining", "af924204-66a2-47d4-9910-66ab78acb06f" ], [ @@ -2850,13 +2850,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Exchange Raw Data", "Sensor Bot", - "Foundations", + "Data-Mining", "af924204-66a2-47d4-9910-66ab78acb06f" ], [ @@ -2932,13 +2932,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -2984,13 +2984,13 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ "Candles Volumes", "Indicator Bot", - "Foundations", + "Data-Mining", "285a4618-0423-4ac9-9df9-7a78be6fd915" ], [ @@ -3058,7 +3058,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ] ] @@ -3323,13 +3323,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3387,13 +3387,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3451,13 +3451,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3515,13 +3515,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3579,13 +3579,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3643,13 +3643,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3707,13 +3707,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3771,13 +3771,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3865,13 +3865,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -3929,13 +3929,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4023,13 +4023,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4087,13 +4087,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4151,13 +4151,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4215,13 +4215,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4309,13 +4309,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4373,13 +4373,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4437,13 +4437,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4501,13 +4501,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4595,13 +4595,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4659,13 +4659,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4723,13 +4723,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4787,13 +4787,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4851,13 +4851,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -4915,13 +4915,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5033,13 +5033,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5091,13 +5091,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5149,13 +5149,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5207,13 +5207,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5265,13 +5265,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5323,13 +5323,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5381,13 +5381,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5439,13 +5439,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5497,13 +5497,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5585,13 +5585,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5643,13 +5643,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5708,13 +5708,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5772,13 +5772,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5836,13 +5836,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5900,13 +5900,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -5994,13 +5994,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6058,13 +6058,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6122,13 +6122,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6186,13 +6186,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6280,13 +6280,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6344,13 +6344,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6408,13 +6408,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6472,13 +6472,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6536,13 +6536,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6670,7 +6670,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -6723,7 +6723,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -6841,13 +6841,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6905,13 +6905,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -6969,13 +6969,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7033,13 +7033,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7097,13 +7097,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7161,13 +7161,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7225,13 +7225,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7289,13 +7289,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7383,13 +7383,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7447,13 +7447,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7541,13 +7541,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7605,13 +7605,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7669,13 +7669,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7733,13 +7733,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7827,13 +7827,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7891,13 +7891,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -7955,13 +7955,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8019,13 +8019,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8113,13 +8113,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8177,13 +8177,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8241,13 +8241,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8305,13 +8305,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8369,13 +8369,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8433,13 +8433,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8551,13 +8551,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8609,13 +8609,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8667,13 +8667,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8725,13 +8725,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8783,13 +8783,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8841,13 +8841,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8899,13 +8899,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -8957,13 +8957,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9015,13 +9015,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9103,13 +9103,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9161,13 +9161,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9226,13 +9226,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9290,13 +9290,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9354,13 +9354,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9418,13 +9418,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9512,13 +9512,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9576,13 +9576,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9640,13 +9640,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9704,13 +9704,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9798,13 +9798,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9862,13 +9862,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9926,13 +9926,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -9990,13 +9990,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -10054,13 +10054,13 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ "Low Frequency", "Trading Bot", - "Foundations", + "Algorithmic-Trading", "8c7f3687-b5ae-4a45-bda1-751cb2c55995" ], [ @@ -10188,7 +10188,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ] ] @@ -10732,7 +10732,7 @@ "floatingObject": { "isPinned": true, "isFrozen": false, - "isCollapsed": true, + "isCollapsed": false, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 @@ -24324,7 +24324,7 @@ "viewport": { "type": "Viewport", "name": "New Viewport", - "config": "{\"zoom\":\"0.00\"}", + "config": "{\"zoom\":\"1.40\"}", "project": "Foundations", "id": "01713f1d-91b8-44f9-9c5d-a0c12fd09037", "savedPayload": { @@ -24349,8 +24349,8 @@ }, "frame": { "position": { - "x": 828.4999999999999, - "y": 194.0257847533632 + "x": 40, + "y": -1445 } } } @@ -24426,7 +24426,7 @@ "timeScale": { "type": "Time Scale", "name": "New Time Scale", - "config": "{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2020-01-01T00:00:00.000Z\",\n \"toDate\": \"2021-08-24T23:59:59.999Z\"\n}", + "config": "{\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-08-31T22:29:46.517Z\",\n \"toDate\": \"2020-09-01T04:17:38.377Z\"\n}", "project": "Foundations", "id": "b12b6892-52a3-4bf8-a1d9-85bfe72d2f44", "savedPayload": { @@ -24454,7 +24454,7 @@ "rateScale": { "type": "Rate Scale", "name": "New Rate Scale", - "config": "{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 3744.3087,\n \"maxValue\": 65502.54\n}", + "config": "{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 11394.7713,\n \"maxValue\": 11900.161607250002\n}", "project": "Foundations", "id": "c6d395a1-dfb0-438b-b7be-64fa1a53fe5e", "savedPayload": { @@ -24482,7 +24482,7 @@ "timeFrameScale": { "type": "Time Frame Scale", "name": "New Time Frame Scale", - "config": "{\"value\":\"24-hs\"}", + "config": "{\"value\":\"01-min\"}", "project": "Foundations", "id": "9ac80476-a542-4d74-bf7a-7e55c754887a", "savedPayload": { @@ -24581,7 +24581,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -24768,7 +24768,7 @@ { "type": "Layer", "name": "Trading Episode Statistics", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\",\n \"showPanels\": false\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -24810,7 +24810,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -24997,7 +24997,7 @@ { "type": "Layer", "name": "Episode Candle", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -25208,7 +25208,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -29270,7 +29270,7 @@ { "type": "Layer", "name": "Trading System Highlights", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -29433,7 +29433,7 @@ { "type": "Layer", "name": "Trading System Values", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -29596,7 +29596,7 @@ { "type": "Layer", "name": "Trading System Status", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\"\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -30744,7 +30744,7 @@ "layerManager": { "type": "Layer Manager", "name": "Masters", - "config": "{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", + "config": "{\n \"visibleLayers\": 1,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", "project": "Foundations", "layers": [], "botLayers": [ @@ -30762,7 +30762,7 @@ { "type": "Layer", "name": "Episodes", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\",\n \"showPanels\": false\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -30804,7 +30804,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -30863,7 +30863,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -30922,7 +30922,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31010,7 +31010,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31075,7 +31075,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31140,7 +31140,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31205,7 +31205,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31364,7 +31364,7 @@ { "type": "Layer", "name": "Strategies", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"off\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -31406,7 +31406,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31494,7 +31494,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31559,7 +31559,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31624,7 +31624,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31689,7 +31689,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31897,7 +31897,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -31956,7 +31956,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32015,7 +32015,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32074,7 +32074,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32162,7 +32162,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32369,7 +32369,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32428,7 +32428,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32487,7 +32487,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32546,7 +32546,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32634,7 +32634,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32841,7 +32841,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32900,7 +32900,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -32959,7 +32959,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33018,7 +33018,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33106,7 +33106,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33171,7 +33171,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33236,7 +33236,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33443,7 +33443,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33502,7 +33502,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33561,7 +33561,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33620,7 +33620,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33708,7 +33708,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33773,7 +33773,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -33838,7 +33838,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34075,7 +34075,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34163,7 +34163,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34228,7 +34228,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34293,7 +34293,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34358,7 +34358,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34523,7 +34523,7 @@ { "type": "Layer", "name": "Open Stages", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"off\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -34565,7 +34565,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34653,7 +34653,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34718,7 +34718,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34783,7 +34783,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -34848,7 +34848,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35013,7 +35013,7 @@ { "type": "Layer", "name": "Manage Stages", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"off\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -35055,7 +35055,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35143,7 +35143,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35208,7 +35208,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35273,7 +35273,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35338,7 +35338,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35545,7 +35545,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35633,7 +35633,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35698,7 +35698,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35763,7 +35763,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -35828,7 +35828,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36065,7 +36065,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36124,7 +36124,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36212,7 +36212,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36277,7 +36277,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36484,7 +36484,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36572,7 +36572,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36637,7 +36637,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36702,7 +36702,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36909,7 +36909,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -36997,7 +36997,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37062,7 +37062,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37127,7 +37127,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37334,7 +37334,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37422,7 +37422,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37629,7 +37629,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37717,7 +37717,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -37980,7 +37980,7 @@ "y": 80 }, "width": 150, - "height": 40, + "height": 120, "radius": 0 }, "referenceParent": { @@ -38076,7 +38076,7 @@ "layerManager": { "type": "Layer Manager", "name": "Masters", - "config": "{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", + "config": "{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}", "project": "Foundations", "layers": [], "botLayers": [ @@ -38088,7 +38088,7 @@ { "type": "Layer", "name": "Resistances", - "config": "{ \n\"status\": \"off\"\n}", + "config": "{\n \"status\": \"on\",\n \"showPanels\": true\n}", "project": "Foundations", "layerPanels": { "type": "Layer Panels", @@ -38130,7 +38130,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38189,7 +38189,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38248,7 +38248,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38336,7 +38336,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38401,7 +38401,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38466,7 +38466,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38531,7 +38531,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38596,7 +38596,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38661,7 +38661,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38726,7 +38726,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38791,7 +38791,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38856,7 +38856,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38921,7 +38921,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -38986,7 +38986,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39175,7 +39175,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39234,7 +39234,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39293,7 +39293,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39381,7 +39381,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39446,7 +39446,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39511,7 +39511,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39576,7 +39576,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39641,7 +39641,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39706,7 +39706,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39771,7 +39771,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39836,7 +39836,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39901,7 +39901,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -39966,7 +39966,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -40031,7 +40031,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -40228,7 +40228,7 @@ "y": 80 }, "width": 150, - "height": 40, + "height": 190, "radius": 0 }, "referenceParent": { @@ -40401,7 +40401,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -40612,7 +40612,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -40970,7 +40970,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -41242,7 +41242,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -41471,7 +41471,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -41869,7 +41869,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47465,7 +47465,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47524,7 +47524,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47583,7 +47583,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47671,7 +47671,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47736,7 +47736,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47801,7 +47801,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -47866,7 +47866,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48067,7 +48067,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48155,7 +48155,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48220,7 +48220,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48285,7 +48285,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48350,7 +48350,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48558,7 +48558,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48617,7 +48617,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48676,7 +48676,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48735,7 +48735,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -48823,7 +48823,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49030,7 +49030,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49089,7 +49089,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49148,7 +49148,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49207,7 +49207,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49295,7 +49295,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49502,7 +49502,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49561,7 +49561,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49620,7 +49620,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49679,7 +49679,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49767,7 +49767,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49832,7 +49832,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -49897,7 +49897,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50104,7 +50104,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50163,7 +50163,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50222,7 +50222,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50281,7 +50281,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50369,7 +50369,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50434,7 +50434,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50499,7 +50499,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50736,7 +50736,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50824,7 +50824,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50889,7 +50889,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -50954,7 +50954,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51019,7 +51019,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51226,7 +51226,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51314,7 +51314,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51379,7 +51379,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51444,7 +51444,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51509,7 +51509,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51716,7 +51716,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51804,7 +51804,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51869,7 +51869,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51934,7 +51934,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -51999,7 +51999,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52206,7 +52206,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52294,7 +52294,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52359,7 +52359,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52424,7 +52424,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52489,7 +52489,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52726,7 +52726,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52785,7 +52785,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52873,7 +52873,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -52938,7 +52938,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53145,7 +53145,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53233,7 +53233,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53298,7 +53298,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53363,7 +53363,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53570,7 +53570,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53658,7 +53658,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53723,7 +53723,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53788,7 +53788,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -53995,7 +53995,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54083,7 +54083,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54290,7 +54290,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54378,7 +54378,7 @@ [ "Masters", "Trading Mine", - "Foundations", + "Algorithmic-Trading", "6a54eece-4582-4cda-a854-1cd805e00fed" ], [ @@ -54791,7 +54791,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -54850,7 +54850,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -54909,7 +54909,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -54997,7 +54997,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55062,7 +55062,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55127,7 +55127,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55192,7 +55192,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55257,7 +55257,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55322,7 +55322,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55387,7 +55387,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55452,7 +55452,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55517,7 +55517,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55582,7 +55582,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55647,7 +55647,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55836,7 +55836,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55895,7 +55895,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -55954,7 +55954,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56042,7 +56042,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56107,7 +56107,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56172,7 +56172,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56237,7 +56237,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56302,7 +56302,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56367,7 +56367,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56432,7 +56432,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56497,7 +56497,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56562,7 +56562,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56627,7 +56627,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -56692,7 +56692,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -57062,7 +57062,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -57273,7 +57273,7 @@ [ "Candles", "Data Mine", - "Foundations", + "Data-Mining", "70c7eea3-a786-4dda-b526-0514e2cb14cc" ], [ @@ -57807,204 +57807,38 @@ { "type": "Plugins", "name": "New Plugins", - "project": "Foundations", + "project": "Community-Plugins", "pluginProjects": [ { "type": "Plugin Project", - "name": "Foundations", - "config": "{ \n \"codeName\": \"Foundations\"\n}", - "project": "Foundations", - "pluginDataMines": { - "type": "Plugin Data Mines", - "name": "New Plugin Data Mines", - "project": "Foundations", - "pluginFiles": [ - { - "type": "Plugin File", - "name": "Masters", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Masters", - "project": "Foundations", - "id": "d5234bd2-ef4e-4856-a6a0-ce7659653a48", - "savedPayload": { - "position": { - "x": 18879.35218735615, - "y": 18688.55301821844 - }, - "targetPosition": { - "x": 31521.72973529933, - "y": 18212.746239098742 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "ecc1a524-de9b-4e73-8874-b99a7ea0402b", - "savedPayload": { - "position": { - "x": 31521.72973529933, - "y": 18212.746239098742 - }, - "targetPosition": { - "x": 31744.673182942548, - "y": 18413.4854210064 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - { - "type": "Plugin File", - "name": "Candles", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Candles", - "project": "Foundations", - "id": "f2d06aec-536a-4af1-872d-681bf8cdeb12", - "savedPayload": { - "position": { - "x": 31037.420197433203, - "y": 18670.84686056612 - }, - "targetPosition": { - "x": 31807.046690187875, - "y": 18120.04114078626 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "3ee7e2da-8c0a-4efe-a354-233c881fdb82", - "savedPayload": { - "position": { - "x": 31807.046690187875, - "y": 18120.04114078626 - }, - "targetPosition": { - "x": 31744.673182942548, - "y": 18413.4854210064 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - } - ], - "id": "cbc3d9be-5e59-45d8-bb0f-4ec82763691d", - "savedPayload": { - "position": { - "x": 37341.67318294255, - "y": 10582.466800207203 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, + "name": "Algorithmic-Trading", + "config": "{\"codeName\":\"Algorithmic-Trading\"}", + "project": "Community-Plugins", "pluginTradingMines": { "type": "Plugin Trading Mines", "name": "New Plugin Trading Mines", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [ { "type": "Plugin File", "name": "Masters", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Masters", - "project": "Foundations", - "id": "ad1ce785-858f-4cfc-ba68-108b5e0c54d9", - "savedPayload": { - "position": { - "x": 24986.217404066585, - "y": 18713.893045797242 - }, - "targetPosition": { - "x": 37398.96808463006, - "y": 10188.168466117855 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "8a64c00e-4f8c-49bf-b57d-4e2e388bae41", + "config": "{\"project\":\"Algorithmic-Trading\",\"fileName\":\"Masters\",\"folderName\":\"Trading-Mines\",\"nodeType\":\"Trading Mine\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "68bdcf8f-5b90-4683-bd24-0cbb90649cea", "savedPayload": { "position": { - "x": 37398.96808463006, - "y": 10188.168466117855 + "x": 38008.64234996696, + "y": 10334.538307183018 }, "targetPosition": { - "x": 37491.67318294255, - "y": 10473.4854210064 + "x": 37796.510315611, + "y": 10546.670341538982 }, "floatingObject": { "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58014,39 +57848,11 @@ } } ], - "id": "8d881813-3ab9-4e8b-ab5a-48dedab2dd19", + "id": "b784724f-9692-4365-8e01-032158248fc4", "savedPayload": { "position": { - "x": 37491.67318294255, - "y": 10473.4854210064 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "pluginLearningMines": { - "type": "Plugin Learning Mines", - "name": "New Plugin Learning Mines", - "project": "Foundations", - "pluginFiles": [], - "id": "980ba5ef-6bd2-4f92-becb-348b591d147b", - "savedPayload": { - "position": { - "x": 37677.08337956752, - "y": 10473.4854210064 + "x": 37796.510315611, + "y": 10546.670341538982 }, "targetPosition": { "x": 37584.378281255034, @@ -58056,7 +57862,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58068,49 +57874,22 @@ "pluginTradingSystems": { "type": "Plugin Trading Systems", "name": "New Plugin Trading Systems", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [ { "type": "Plugin File", "name": "Masters-Lightning-Strike", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Masters-Lightning-Strike", - "project": "Foundations", - "id": "37ab4b0d-6bd8-46b6-9778-e193c32669a4", - "savedPayload": { - "position": { - "x": 31050.365708673427, - "y": 31068.826468868458 - }, - "targetPosition": { - "x": 38069.78847788001, - "y": 10406.13122451946 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "5fdcecee-8c8f-4e0f-b36b-81e9231970a6", + "config": "{\"project\":\"Algorithmic-Trading\",\"fileName\":\"Masters-Lightning-Strike\",\"folderName\":\"Trading-Systems\",\"nodeType\":\"Trading System\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "b5c5eed1-ac0e-4f1b-bbe8-9f2d6dcc519b", "savedPayload": { "position": { - "x": 38069.78847788001, - "y": 10406.13122451946 + "x": 38184.378281255034, + "y": 10758.802375894946 }, "targetPosition": { - "x": 37827.08337956752, - "y": 10582.466800207203 + "x": 37884.378281255034, + "y": 10758.802375894946 }, "floatingObject": { "isPinned": false, @@ -58126,35 +57905,7 @@ } } ], - "id": "3569d452-c593-4e54-a356-7ff8c6b519f3", - "savedPayload": { - "position": { - "x": 37827.08337956752, - "y": 10582.466800207203 - }, - "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "pluginLearningSystems": { - "type": "Plugin Learning Systems", - "name": "New Plugin Learning Systems", - "project": "Foundations", - "pluginFiles": [], - "id": "ba0dfd42-a5e6-4a03-9617-f46f0bc5c7a1", + "id": "ed5fbe5f-6957-47d7-b776-f4868b521378", "savedPayload": { "position": { "x": 37884.378281255034, @@ -58168,7 +57919,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58180,55 +57931,28 @@ "pluginTradingEngines": { "type": "Plugin Trading Engines", "name": "New Plugin Trading Engines", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [ { "type": "Plugin File", "name": "Low-Frequency", - "config": "{\n\"codeName\": \"\"\n}", - "project": "Foundations", - "pluginFilePosition": { - "type": "Plugin File Position", - "name": "Low-Frequency", - "project": "Foundations", - "id": "e117a2a4-09b3-4181-8455-e680de3bdeb3", - "savedPayload": { - "position": { - "x": 30923.55093774257, - "y": 24967.049392142086 - }, - "targetPosition": { - "x": 29820.22642897682, - "y": 18678.80776835817 - }, - "floatingObject": { - "isPinned": true, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "e9270d67-4630-4ac9-91ca-1dec4fb5aa38", + "config": "{\"project\":\"Algorithmic-Trading\",\"fileName\":\"Low-Frequency\",\"folderName\":\"Trading-Engines\",\"nodeType\":\"Trading Engine\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "a584a09f-6d55-4358-8c3a-cd76e6fd4fb2", "savedPayload": { "position": { - "x": 29820.22642897682, - "y": 18678.80776835817 + "x": 38008.64234996696, + "y": 11183.066444606873 }, "targetPosition": { - "x": 30320.32799443869, - "y": 18678.805890109317 + "x": 37796.510315611, + "y": 10970.93441025091 }, "floatingObject": { "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58238,11 +57962,11 @@ } } ], - "id": "87a28762-63d0-45f7-bd39-9dea436d8244", + "id": "34cd7afd-774b-4340-ab6b-ebcaa61c2d05", "savedPayload": { "position": { - "x": 37827.08337956752, - "y": 10935.137951582688 + "x": 37796.510315611, + "y": 10970.93441025091 }, "targetPosition": { "x": 37584.378281255034, @@ -58251,8 +57975,8 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": true, - "angleToParent": 1, + "isCollapsed": false, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -58261,20 +57985,105 @@ } } }, - "pluginLearningEngines": { - "type": "Plugin Learning Engines", - "name": "New Plugin Learning Engines", - "project": "Foundations", - "pluginFiles": [], - "id": "6e8d19f0-51a5-4d7c-857e-3549c553f008", + "id": "252daf71-559e-4a54-a534-42ec1e7f1a31", + "savedPayload": { + "position": { + "x": 37584.378281255034, + "y": 10758.802375894946 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Data-Mining", + "config": "{\"codeName\":\"Data-Mining\"}", + "project": "Community-Plugins", + "pluginDataMines": { + "type": "Plugin Data Mines", + "name": "New Plugin Data Mines", + "project": "Community-Plugins", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Candles", + "config": "{\n \"project\": \"Data-Mining\",\n \"fileName\": \"Candles\",\n \"folderName\": \"Data-Mines\",\n \"nodeType\": \"Data Mine\",\n \"saveWithWorkspace\": false\n}", + "project": "Community-Plugins", + "id": "868419c3-cd9d-4825-a208-8b7c15be0468", + "savedPayload": { + "position": { + "x": 38039.447273030084, + "y": 11196.569395006949 + }, + "targetPosition": { + "x": 37744.00494712642, + "y": 11144.47494170687 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin File", + "name": "Masters", + "config": "{\"project\":\"Data-Mining\",\"fileName\":\"Masters\",\"folderName\":\"Data-Mines\",\"nodeType\":\"Data Mine\",\"saveWithWorkspace\":false}", + "project": "Community-Plugins", + "id": "9817eb10-418e-4035-aa38-6158d4a2d848", + "savedPayload": { + "position": { + "x": 37846.61099012412, + "y": 11426.382727942642 + }, + "targetPosition": { + "x": 37744.00494712642, + "y": 11144.47494170687 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "42d84322-438f-4219-8b7e-58b1b58de7b0", "savedPayload": { "position": { - "x": 37677.08337956752, - "y": 11044.119330783491 + "x": 37744.00494712642, + "y": 11144.47494170687 }, "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 + "x": 37514.19161419073, + "y": 10951.638658800908 }, "floatingObject": { "isPinned": false, @@ -58289,20 +58098,356 @@ } } }, + "id": "9e34391d-8a7f-465d-aaae-d1aab31d27af", + "savedPayload": { + "position": { + "x": 37536.75434110439, + "y": 10920.994621131626 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Community-Plugins", + "config": "{\"codeName\":\"Community-Plugins\"}", + "project": "Community-Plugins", + "id": "005d0fc0-5d81-4607-856b-32bcb1665b64", + "savedPayload": { + "position": { + "x": 37409.0027851556, + "y": 11031.691974501302 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Ethereum", + "config": "{\"codeName\":\"Ethereum\"}", + "project": "Community-Plugins", + "id": "bddb8fdb-f325-4615-a828-9935d37583ad", + "savedPayload": { + "position": { + "x": 37241.68382977305, + "y": 11055.748808459226 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "TensorFlow", + "config": "{\"codeName\":\"TensorFlow\"}", + "project": "Community-Plugins", + "id": "d6649bf0-8e12-456a-a2d0-a7d4617f6843", + "savedPayload": { + "position": { + "x": 37087.92006107145, + "y": 10985.527248201222 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Education", + "config": "{\"codeName\":\"Education\"}", + "project": "Community-Plugins", + "id": "e72188be-7474-4a0d-85c1-413810bfa807", + "savedPayload": { + "position": { + "x": 36996.530389170686, + "y": 10843.322142947374 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Governance", + "config": "{\"codeName\":\"Governance\"}", + "project": "Community-Plugins", + "id": "5614b71b-9e5f-42b0-a6fb-6322564623ea", + "savedPayload": { + "position": { + "x": 36996.530389170686, + "y": 10674.282608842517 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Network", + "config": "{\"codeName\":\"Network\"}", + "project": "Community-Plugins", + "id": "624a4851-e3d8-411f-8ac3-b1418516f30d", + "savedPayload": { + "position": { + "x": 37087.92006107145, + "y": 10532.077503588669 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Social-Trading", + "config": "{\"codeName\":\"Social-Trading\"}", + "project": "Community-Plugins", + "id": "b41eaa84-a3bc-44fc-8199-48cc117cbd27", + "savedPayload": { + "position": { + "x": 37241.68382977305, + "y": 10461.855943330665 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Machine-Learning", + "config": "{\"codeName\":\"Machine-Learning\"}", + "project": "Community-Plugins", + "pluginLearningMines": { + "type": "Plugin Learning Mines", + "name": "New Plugin Learning Mines", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "691b8eec-79db-42b9-9ca4-d22176ecabdb", + "savedPayload": { + "position": { + "x": 37304.16353127587, + "y": 10204.82785978866 + }, + "targetPosition": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningSystems": { + "type": "Plugin Learning Systems", + "name": "New Plugin Learning Systems", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "99f881d1-74f5-487e-8e2a-4ed83101ce42", + "savedPayload": { + "position": { + "x": 37533.62728905617, + "y": 10213.023178682233 + }, + "targetPosition": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningEngines": { + "type": "Plugin Learning Engines", + "name": "New Plugin Learning Engines", + "project": "Community-Plugins", + "pluginFiles": [], + "id": "1594d693-040c-4762-9c19-ce3212bdddae", + "savedPayload": { + "position": { + "x": 37690.08770265553, + "y": 10381.07352340886 + }, + "targetPosition": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "0c2a59f9-362c-4a72-b9ff-e49dd7c26e7e", + "savedPayload": { + "position": { + "x": 37409.0027851556, + "y": 10485.91277728859 + }, + "targetPosition": { + "x": 37284.378281255034, + "y": 10758.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Plugin Project", + "name": "Foundations", + "config": "{\"codeName\":\"Foundations\"}", + "project": "Community-Plugins", "pluginTutorials": { "type": "Plugin Tutorials", "name": "New Plugin Tutorials", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [], - "id": "dc01958c-5bd4-4941-b790-aec7da3c1638", + "id": "cab27915-c4e9-44c7-94d6-e3d20ed0e382", "savedPayload": { "position": { - "x": 37491.67318294255, - "y": 11044.119330783491 + "x": 37522.47976635727, + "y": 10296.949928903363 }, "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 + "x": 37536.75434110439, + "y": 10596.610130658266 }, "floatingObject": { "isPinned": false, @@ -58320,17 +58465,17 @@ "pluginApiMaps": { "type": "Plugin API Maps", "name": "New Plugin API Maps", - "project": "Foundations", + "project": "Community-Plugins", "pluginFiles": [], - "id": "b75d5c18-f8d1-47de-aa4b-95040435d094", + "id": "7ad3f24a-38e4-4f33-a7e1-0d06121c09d0", "savedPayload": { "position": { - "x": 37341.67318294255, - "y": 10935.137951582688 + "x": 37803.40497570086, + "y": 10734.07808717649 }, "targetPosition": { - "x": 37584.378281255034, - "y": 10758.802375894946 + "x": 37536.75434110439, + "y": 10596.610130658266 }, "floatingObject": { "isPinned": false, @@ -58345,11 +58490,11 @@ } } }, - "id": "c4e402d7-5228-408c-9d67-379d6ef40bae", + "id": "b5c1cb14-d645-4ca5-b34b-553646f65cf4", "savedPayload": { "position": { - "x": 37584.378281255034, - "y": 10758.802375894946 + "x": 37536.75434110439, + "y": 10596.610130658266 }, "targetPosition": { "x": 37284.378281255034, @@ -58358,7 +58503,7 @@ "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 @@ -58651,12 +58796,12 @@ "id": "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6", "savedPayload": { "position": { - "x": 18903, - "y": 10733.5 + "x": 4260.875, + "y": 40334.982972136226 }, "targetPosition": { - "x": 18903, - "y": 10733.5 + "x": 4260.875, + "y": 40334.982972136226 }, "floatingObject": { "isPinned": true, @@ -60251,7 +60396,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -60438,7 +60583,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -60675,7 +60820,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61052,7 +61197,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -61112,7 +61257,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61321,7 +61466,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61502,7 +61647,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61643,7 +61788,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -61821,7 +61966,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -62002,7 +62147,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -62078,7 +62223,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ] ] @@ -62122,7 +62267,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -62420,12 +62565,12 @@ }, "referenceParent": { "type": "Workspace", - "name": "Getting Started Tutorials", - "id": "a3333ada-a69c-4086-bba6-3c950bd1f6fd" + "name": "Getting-Started-Tutorials", + "id": "c6f0d16a-c053-4794-9066-0fbed2ad370d" }, "referenceParentCombinedNodePath": [ [ - "Getting Started Tutorials", + "Getting-Started-Tutorials", "Workspace" ] ] @@ -62503,7 +62648,7 @@ [ "New Plugins", "Plugins", - "Foundations", + "Community-Plugins", "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6" ] ] @@ -62574,38 +62719,7 @@ "name": "Masters-Lightning-Strike", "id": "37ab4b0d-6bd8-46b6-9778-e193c32669a4" }, - "referenceParentCombinedNodePath": [ - [ - "New Plugins", - "Plugins", - "Foundations", - "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6" - ], - [ - "Foundations", - "Plugin Project", - "Foundations", - "c4e402d7-5228-408c-9d67-379d6ef40bae" - ], - [ - "New Plugin Trading Systems", - "Plugin Trading Systems", - "Foundations", - "3569d452-c593-4e54-a356-7ff8c6b519f3" - ], - [ - "Masters-Lightning-Strike", - "Plugin File", - "Foundations", - "5fdcecee-8c8f-4e0f-b36b-81e9231970a6" - ], - [ - "Masters-Lightning-Strike", - "Plugin File Position", - "Foundations", - "37ab4b0d-6bd8-46b6-9778-e193c32669a4" - ] - ] + "referenceParentCombinedNodePath": [] } }, { @@ -62642,26 +62756,7 @@ "name": "New Plugin Trading Systems", "id": "3569d452-c593-4e54-a356-7ff8c6b519f3" }, - "referenceParentCombinedNodePath": [ - [ - "New Plugins", - "Plugins", - "Foundations", - "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6" - ], - [ - "Foundations", - "Plugin Project", - "Foundations", - "c4e402d7-5228-408c-9d67-379d6ef40bae" - ], - [ - "New Plugin Trading Systems", - "Plugin Trading Systems", - "Foundations", - "3569d452-c593-4e54-a356-7ff8c6b519f3" - ] - ] + "referenceParentCombinedNodePath": [] } }, { @@ -64077,7 +64172,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64175,7 +64270,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64795,7 +64890,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64875,7 +64970,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -64967,7 +65062,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -65071,7 +65166,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -66286,13 +66381,13 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ "Resistances and Supports", "Indicator Bot", - "Foundations", + "Data-Mining", "d88356a2-36cc-4bdc-ac10-01b8643352c2" ], [ @@ -66342,7 +66437,7 @@ [ "Masters", "Data Mine", - "Foundations", + "Data-Mining", "66c79ece-5a7e-4a2b-be0d-0374f61086ba" ], [ @@ -66681,7 +66776,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -66791,7 +66886,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -66907,7 +67002,7 @@ "8117db0a-e418-4f56-8fe4-fda2ddac1cbb" ], [ - "Foundations", + "Algorithmic-Trading", "Project Trading Tasks", "Foundations", "f68e0eb3-7b49-4455-8d54-cf57d25bc5a4" @@ -67553,7 +67648,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67621,7 +67716,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67701,7 +67796,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67769,7 +67864,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67819,7 +67914,7 @@ [ "Lightning Strike", "Trading System", - "Foundations", + "Algorithmic-Trading", "628b758d-ffff-445f-9d4f-8aa480a13db3" ], [ @@ -67927,7 +68022,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ] ] @@ -67971,7 +68066,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ], [ @@ -68095,7 +68190,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ], [ @@ -68157,7 +68252,7 @@ [ "Low-Frequency", "Trading Engine", - "Foundations", + "Algorithmic-Trading", "eb20f622-71bf-4479-a574-d2320e1d4bd1" ], [ @@ -68760,7 +68855,7 @@ "40af91d9-431c-4b7d-addc-aed37bc2f3fe" ], [ - "Foundations", + "Data-Mining", "Project Data Tasks", "Foundations", "cb4eb67d-ceba-448e-83e7-0dced47e3c66" @@ -69964,6 +70059,171 @@ "status": "Done" } } + }, + { + "type": "Algorithmic-Trading Project", + "name": "New Algorithmic-Trading Project", + "project": "Algorithmic-Trading", + "projectDefinition": { + "type": "Project Definition", + "name": "Algorithmic-Trading", + "config": "{ \n \"codeName\": \"Algorithmic-Trading\"\n}", + "project": "Foundations", + "id": "159d6c95-233b-4d79-8fe0-b1d75d40f90b", + "savedPayload": { + "position": { + "x": 4613.125, + "y": 10824.41124871001 + }, + "targetPosition": { + "x": 4313.125, + "y": 10824.41124871001 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "96734230-bb91-4527-b2a9-e2f16eb0be96", + "savedPayload": { + "position": { + "x": 4313.125, + "y": 10824.41124871001 + }, + "targetPosition": { + "x": 4313.125, + "y": 10824.41124871001 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Data-Mining Project", + "name": "New Data-Mining Project", + "project": "Data-Mining", + "projectDefinition": { + "type": "Project Definition", + "name": "Data-Mining", + "config": "{ \n \"codeName\": \"Data-Mining\"\n}", + "project": "Foundations", + "id": "588e6946-31d9-4389-8cf2-37715795ba4d", + "savedPayload": { + "position": { + "x": 4601.708333333332, + "y": 19847.940660474716 + }, + "targetPosition": { + "x": 4301.708333333332, + "y": 19847.940660474716 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c80ac0bd-1c21-4e7c-b4b8-020e212bd6f4", + "savedPayload": { + "position": { + "x": 4301.708333333332, + "y": 19847.940660474716 + }, + "targetPosition": { + "x": 4301.708333333332, + "y": 19847.940660474716 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Machine-Learning Project", + "name": "New Machine-Learning Project", + "project": "Machine-Learning", + "projectDefinition": { + "type": "Project Definition", + "name": "Machine-Learning", + "config": "{ \n \"codeName\": \"Machine-Learning\"\n}", + "project": "Foundations", + "id": "b15d5bbb-0433-40c3-bdd7-3d2aa0ddc389", + "savedPayload": { + "position": { + "x": 4587.75, + "y": 30875.953560371516 + }, + "targetPosition": { + "x": 4287.75, + "y": 30875.953560371516 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "949164da-b9f8-4e0a-8482-f1fd06a22cd0", + "savedPayload": { + "position": { + "x": 4287.75, + "y": 30875.953560371516 + }, + "targetPosition": { + "x": 4287.75, + "y": 30875.953560371516 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } } ] } \ No newline at end of file diff --git a/Projects/Foundations/Plugins/Workspaces/Tested Exchanges.json b/Projects/Foundations/Plugins/Workspaces/Tested Exchanges.json new file mode 100644 index 000000000..7797b00fa --- /dev/null +++ b/Projects/Foundations/Plugins/Workspaces/Tested Exchanges.json @@ -0,0 +1,10431 @@ +{ + "type": "Workspace", + "name": "Tested Exchanges", + "config": "{\n \"docsLanguage\": \"EN\",\n \"contributionsBranch\": \"develop\"\n}", + "rootNodes": [ + { + "type": "LAN Network", + "name": "My LAN Network", + "project": "Foundations", + "lanNetworkNodes": [ + { + "type": "LAN Network Node", + "name": "My Computer", + "config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}", + "project": "Foundations", + "dataTasks": { + "type": "Data Tasks", + "name": "New Data Tasks", + "project": "Foundations", + "projectDataTasks": [], + "id": "40af91d9-431c-4b7d-addc-aed37bc2f3fe", + "savedPayload": { + "position": { + "x": 25089.356993272086, + "y": 30767.11115747996 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "learningTasks": { + "type": "Learning Tasks", + "name": "New Learning Tasks", + "project": "Foundations", + "projectLearningTasks": [], + "id": "0818dfbe-61ea-40b8-8544-bee25d7f45be", + "savedPayload": { + "position": { + "x": 25389.356993272086, + "y": 30767.11115747996 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "testingTradingTasks": { + "type": "Testing Trading Tasks", + "name": "New Testing Trading Tasks", + "project": "Foundations", + "projectTradingTasks": [], + "id": "8117db0a-e418-4f56-8fe4-fda2ddac1cbb", + "savedPayload": { + "position": { + "x": 25539.356993272086, + "y": 31026.918778615294 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "productionTradingTasks": { + "type": "Production Trading Tasks", + "name": "New Production Trading Tasks", + "project": "Foundations", + "projectTradingTasks": [], + "id": "673caa5f-511d-4688-9305-e5f0f0f780cd", + "savedPayload": { + "position": { + "x": 25389.356993272086, + "y": 31286.726399750627 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "dataStorage": { + "type": "Data Storage", + "name": "New Data Storage", + "project": "Foundations", + "dataMinesData": { + "type": "Data Mines Data", + "name": "New Data Mines Data", + "project": "Foundations", + "projectDataProducts": [], + "id": "32e7c122-fa5a-4d00-9d71-d54e890e32de", + "savedPayload": { + "position": { + "x": 25070.19913560607, + "y": 31588.15985816277 + }, + "targetPosition": { + "x": 25109.356993272086, + "y": 31290.726399750627 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tradingMinesData": { + "type": "Trading Mines Data", + "name": "New Trading Mines Data", + "project": "Foundations", + "projectTradingProducts": [], + "id": "e4e268f3-a677-4f90-90a1-d87244e647e5", + "savedPayload": { + "position": { + "x": 24959.356993272086, + "y": 31550.53402088596 + }, + "targetPosition": { + "x": 25109.356993272086, + "y": 31290.726399750627 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "learningMinesData": { + "type": "Learning Mines Data", + "name": "New Learning Mines Data", + "project": "Foundations", + "projectLearningProducts": [], + "id": "2845a687-becc-4c3b-bc79-b2293ba876ba", + "savedPayload": { + "position": { + "x": 24871.350991184714, + "y": 31473.354828453244 + }, + "targetPosition": { + "x": 25109.356993272086, + "y": 31290.726399750627 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e2697759-6038-4943-b90c-5a68651ff9a8", + "savedPayload": { + "position": { + "x": 25089.356993272086, + "y": 31286.726399750627 + }, + "targetPosition": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "d" + } + } + }, + "id": "e452cf65-2b2b-44f2-9e67-bdd9d3c008e4", + "savedPayload": { + "position": { + "x": 25239.356993272086, + "y": 31026.918778615294 + }, + "targetPosition": { + "x": 24939.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + } + ], + "id": "3c165071-7558-4708-9999-8ffe71d346b1", + "savedPayload": { + "position": { + "x": 24939.356993272086, + "y": 31026.918778615294 + }, + "targetPosition": { + "x": 24939.356993272086, + "y": 31026.918778615294 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "s" + } + } + }, + { + "type": "Crypto Ecosystem", + "name": "My Crypto Ecosystem", + "project": "Foundations", + "cryptoExchanges": [ + { + "type": "Crypto Exchanges", + "name": "Tested", + "project": "Foundations", + "exchanges": [ + { + "type": "Crypto Exchange", + "name": "Binance", + "config": "{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{ \n\"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "5f5e4a94-5090-47d4-8883-cc2325d20bfa", + "savedPayload": { + "position": { + "x": 18606.497829264816, + "y": 29451.09637134722 + }, + "targetPosition": { + "x": 18947.58510468027, + "y": 29744.625706422376 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "f110bfa0-bd5b-469b-a940-4524c8688136", + "savedPayload": { + "position": { + "x": 19031.245327903584, + "y": 29302.470793467397 + }, + "targetPosition": { + "x": 18947.58510468027, + "y": 29744.625706422376 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "95d2c30f-215b-486e-8119-f4eac0279575", + "savedPayload": { + "position": { + "x": 18947.58510468027, + "y": 29744.625706422376 + }, + "targetPosition": { + "x": 19096.210682560097, + "y": 30169.37320506114 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{ \n\"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "1017b30d-de1b-4212-991e-9fd0a5b6c814", + "savedPayload": { + "position": { + "x": 19570.366270989212, + "y": 28916.346310993984 + }, + "targetPosition": { + "x": 19486.7060477659, + "y": 29358.501223948962 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "5f5e4a94-5090-47d4-8883-cc2325d20bfa" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance", + "Crypto Exchange", + "Foundations", + "61ef0b8d-de6e-4e76-bdd5-996836760a4b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "95d2c30f-215b-486e-8119-f4eac0279575" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "5f5e4a94-5090-47d4-8883-cc2325d20bfa" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "705c4a67-787a-48cd-a3dc-3a557438bf0b", + "savedPayload": { + "position": { + "x": 19780.235382841056, + "y": 29017.413948533507 + }, + "targetPosition": { + "x": 19486.7060477659, + "y": 29358.501223948962 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "f110bfa0-bd5b-469b-a940-4524c8688136" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance", + "Crypto Exchange", + "Foundations", + "61ef0b8d-de6e-4e76-bdd5-996836760a4b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "95d2c30f-215b-486e-8119-f4eac0279575" + ], + [ + "Tether", + "Asset", + "Foundations", + "f110bfa0-bd5b-469b-a940-4524c8688136" + ] + ] + } + }, + "id": "9a867bf0-a71d-445c-b99a-75b60bbdce09", + "savedPayload": { + "position": { + "x": 19486.7060477659, + "y": 29358.501223948962 + }, + "targetPosition": { + "x": 19291.458365163, + "y": 29763.93721450505 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "2fd80894-900e-44ac-a1a7-56c14124f7a1", + "savedPayload": { + "position": { + "x": 19291.458365163, + "y": 29763.93721450505 + }, + "targetPosition": { + "x": 19096.210682560097, + "y": 30169.37320506114 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "61ef0b8d-de6e-4e76-bdd5-996836760a4b", + "savedPayload": { + "position": { + "x": 19507.63719375129, + "y": 30789.529786102317 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + }, + "tutorial": { + "status": "Done" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance US", + "config": "{\n \"codeName\": \"binanceus\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{ \n\"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "5f600d91-40e6-43cc-82b0-586c5c422077", + "savedPayload": { + "position": { + "x": 19512.947331594303, + "y": 30307.95713652808 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 30597.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{ \n\"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "d9a04ff0-c729-490c-84d1-d5d5a0397989", + "savedPayload": { + "position": { + "x": 19725.079365950267, + "y": 30520.089170884043 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 30597.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "8b0d5d47-de2c-4770-976d-14a006ac25e7", + "savedPayload": { + "position": { + "x": 19435.301618063546, + "y": 30597.7348844148 + }, + "targetPosition": { + "x": 19223.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{ \n\"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "0f7ece91-d8ef-4c4b-be95-59fb64b5eaf9", + "savedPayload": { + "position": { + "x": 20112.947331594303, + "y": 30732.221205240006 + }, + "targetPosition": { + "x": 19823.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "5f600d91-40e6-43cc-82b0-586c5c422077" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance US", + "Crypto Exchange", + "Foundations", + "d763fdb6-bfe0-4fd2-9b1f-0a12ead4098b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "8b0d5d47-de2c-4770-976d-14a006ac25e7" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "5f600d91-40e6-43cc-82b0-586c5c422077" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "a8005fb7-1737-43af-882c-3183f2e94f41", + "savedPayload": { + "position": { + "x": 20112.947331594303, + "y": 30887.51263230152 + }, + "targetPosition": { + "x": 19823.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "d9a04ff0-c729-490c-84d1-d5d5a0397989" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Binance US", + "Crypto Exchange", + "Foundations", + "d763fdb6-bfe0-4fd2-9b1f-0a12ead4098b" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "8b0d5d47-de2c-4770-976d-14a006ac25e7" + ], + [ + "Tether", + "Asset", + "Foundations", + "d9a04ff0-c729-490c-84d1-d5d5a0397989" + ] + ] + } + }, + "id": "6af7c681-a924-4e65-a8aa-a45589e12bde", + "savedPayload": { + "position": { + "x": 19823.169583707582, + "y": 30809.866918770764 + }, + "targetPosition": { + "x": 19523.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "95f252bb-4047-4bfa-8c93-66618b64d419", + "savedPayload": { + "position": { + "x": 19523.169583707582, + "y": 30809.866918770764 + }, + "targetPosition": { + "x": 19223.169583707582, + "y": 30809.866918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d763fdb6-bfe0-4fd2-9b1f-0a12ead4098b", + "savedPayload": { + "position": { + "x": 19616.61857295209, + "y": 30939.529786102317 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Luno", + "config": "{\n \"codeName\": \"luno\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"useFetchTradesForFetchOHLCVs\": true,\n \"maxTradesPerFetch\": 100,\n \"limit\": 200,\n \"rateLimit\": 1100\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "ac9cd2e1-566d-4bf9-83b2-a60403442302", + "savedPayload": { + "position": { + "x": 20145.241273554842, + "y": 31042.366918770764 + }, + "targetPosition": { + "x": 19885.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "ZAR", + "config": "{\n \"codeName\": \"ZAR\"\n}", + "project": "Foundations", + "id": "0aefdb7b-972c-4c98-90cd-23317f2bd51f", + "savedPayload": { + "position": { + "x": 20145.241273554842, + "y": 31342.366918770764 + }, + "targetPosition": { + "x": 19885.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "ac60a01f-74b1-41f2-93f4-5b7d5cc2b2ad", + "savedPayload": { + "position": { + "x": 19885.43365241951, + "y": 31192.366918770764 + }, + "targetPosition": { + "x": 19585.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/ZAR", + "config": "{\n \"codeName\": \"BTC/ZAR\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "29b5f490-2015-4039-8123-f29aa76d2546", + "savedPayload": { + "position": { + "x": 20269.50534226677, + "y": 31766.63098748269 + }, + "targetPosition": { + "x": 20009.697721131437, + "y": 31616.63098748269 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "ac9cd2e1-566d-4bf9-83b2-a60403442302" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Luno", + "Crypto Exchange", + "Foundations", + "d4a66325-9be9-4855-8cf4-89a5795e30b6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "ac60a01f-74b1-41f2-93f4-5b7d5cc2b2ad" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "ac9cd2e1-566d-4bf9-83b2-a60403442302" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "ZAR", + "project": "Foundations", + "id": "6dffe17d-bbd1-424e-afba-9717386ae271", + "savedPayload": { + "position": { + "x": 20159.697721131437, + "y": 31876.438608618024 + }, + "targetPosition": { + "x": 20009.697721131437, + "y": 31616.63098748269 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "ZAR", + "id": "0aefdb7b-972c-4c98-90cd-23317f2bd51f" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Luno", + "Crypto Exchange", + "Foundations", + "d4a66325-9be9-4855-8cf4-89a5795e30b6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "ac60a01f-74b1-41f2-93f4-5b7d5cc2b2ad" + ], + [ + "ZAR", + "Asset", + "Foundations", + "0aefdb7b-972c-4c98-90cd-23317f2bd51f" + ] + ] + } + }, + "id": "06796c17-169b-4815-969c-d33baca2b0ef", + "savedPayload": { + "position": { + "x": 20009.697721131437, + "y": 31616.63098748269 + }, + "targetPosition": { + "x": 19797.565686775473, + "y": 31404.498953126727 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "e13d8073-26f6-4ae4-b612-aea2ec269fed", + "savedPayload": { + "position": { + "x": 19797.565686775473, + "y": 31404.498953126727 + }, + "targetPosition": { + "x": 19585.43365241951, + "y": 31192.366918770764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d4a66325-9be9-4855-8cf4-89a5795e30b6", + "savedPayload": { + "position": { + "x": 19616.61857295209, + "y": 31124.939982727283 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Kucoin", + "config": "{\n \"codeName\": \"kucoin\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "5ce98b3f-3ec1-412b-acde-186f9a92a5e0", + "savedPayload": { + "position": { + "x": 19835.847296702923, + "y": 31268.271209698505 + }, + "targetPosition": { + "x": 19686.66901239768, + "y": 31283.950479188654 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "b866944c-c23e-4718-9300-1b803b54be5f", + "savedPayload": { + "position": { + "x": 19774.836800241552, + "y": 31405.303028344897 + }, + "targetPosition": { + "x": 19686.66901239768, + "y": 31283.950479188654 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "747af60f-c8b9-4377-aa6c-172d4137ea23", + "savedPayload": { + "position": { + "x": 19686.66901239768, + "y": 31283.950479188654 + }, + "targetPosition": { + "x": 19549.63719375129, + "y": 31222.939982727283 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "69a1674d-6260-4c65-95d5-fbba592737f9", + "savedPayload": { + "position": { + "x": 19788.689847399626, + "y": 32062.358218260728 + }, + "targetPosition": { + "x": 19612.354271711883, + "y": 31819.653119948245 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "5ce98b3f-3ec1-412b-acde-186f9a92a5e0" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Kucoin", + "Crypto Exchange", + "Foundations", + "644efe9c-597a-4ddf-9e28-b33fb3b62d3e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "747af60f-c8b9-4377-aa6c-172d4137ea23" + ], + [ + "BTC", + "Asset", + "Foundations", + "5ce98b3f-3ec1-412b-acde-186f9a92a5e0" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "135835f5-a9be-4415-aeef-03500f24b4d1", + "savedPayload": { + "position": { + "x": 19490.333278789145, + "y": 32093.716757241025 + }, + "targetPosition": { + "x": 19612.354271711883, + "y": 31819.653119948245 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "b866944c-c23e-4718-9300-1b803b54be5f" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Tested", + "Crypto Exchanges", + "Foundations", + "e3879d63-6f8f-41a3-8ac3-0349c4361722" + ], + [ + "Kucoin", + "Crypto Exchange", + "Foundations", + "644efe9c-597a-4ddf-9e28-b33fb3b62d3e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "747af60f-c8b9-4377-aa6c-172d4137ea23" + ], + [ + "Tether", + "Asset", + "Foundations", + "b866944c-c23e-4718-9300-1b803b54be5f" + ] + ] + } + }, + "id": "4b37ca8d-e4b2-49f4-b326-7bdf785ad482", + "savedPayload": { + "position": { + "x": 19612.354271711883, + "y": 31819.653119948245 + }, + "targetPosition": { + "x": 19580.995732731586, + "y": 31521.296551337764 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "c75f7d97-9dc2-4d3e-89eb-f8a3d5f16368", + "savedPayload": { + "position": { + "x": 19580.995732731586, + "y": 31521.296551337764 + }, + "targetPosition": { + "x": 19549.63719375129, + "y": 31222.939982727283 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "644efe9c-597a-4ddf-9e28-b33fb3b62d3e", + "savedPayload": { + "position": { + "x": 19507.63719375129, + "y": 31274.939982727283 + }, + "targetPosition": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "e3879d63-6f8f-41a3-8ac3-0349c4361722", + "savedPayload": { + "position": { + "x": 19331.301618063546, + "y": 31032.2348844148 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Untested", + "project": "Foundations", + "exchanges": [ + { + "type": "Crypto Exchange", + "name": "ACX", + "config": "{ \n\"codeName\": \"acx\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "ebcb522b-ae58-46d2-9d82-a9b0beec3976", + "savedPayload": { + "position": { + "x": 17935.64382962515, + "y": 31014.23747069523 + }, + "targetPosition": { + "x": 17912.64382962515, + "y": 30954.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b2649588-27c6-442c-b179-f6d8817188b3", + "savedPayload": { + "position": { + "x": 17954.64382962515, + "y": 31004.23747069523 + }, + "targetPosition": { + "x": 17912.64382962515, + "y": 30954.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e9c21b2d-de21-43b5-8b48-51367a8c981c", + "savedPayload": { + "position": { + "x": 18753.577927624592, + "y": 30676.17948886613 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "AOFEX", + "config": "{ \n\"codeName\": \"aofex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "623ef91b-04c0-4bd5-ac0d-b32c809be3ea", + "savedPayload": { + "position": { + "x": 17973.64382962515, + "y": 30923.23747069523 + }, + "targetPosition": { + "x": 17950.64382962515, + "y": 30994.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "9d0b5855-59a6-4dda-9a4b-33d7a44d582e", + "savedPayload": { + "position": { + "x": 17901.64382962515, + "y": 30994.23747069523 + }, + "targetPosition": { + "x": 17950.64382962515, + "y": 30994.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c2e9bb45-97c7-47e8-b13c-56946e673c53", + "savedPayload": { + "position": { + "x": 18828.33240465844, + "y": 30666.73580224638 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bequant", + "config": "{ \n\"codeName\": \"bequant\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "b23c8adf-c880-48fd-b4af-4b4be86cf0e5", + "savedPayload": { + "position": { + "x": 18059.64382962515, + "y": 31101.23747069523 + }, + "targetPosition": { + "x": 17960.64382962515, + "y": 31060.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "523bd94f-68f9-457e-91fd-806c1b95e98d", + "savedPayload": { + "position": { + "x": 18006.64382962515, + "y": 31117.23747069523 + }, + "targetPosition": { + "x": 17960.64382962515, + "y": 31060.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8e928d3e-a2c2-4341-aa2f-b753551c9479", + "savedPayload": { + "position": { + "x": 18903.681028093615, + "y": 30666.73580224638 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bibox", + "config": "{ \n\"codeName\": \"bibox\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "13c1f22c-9a35-4d3f-b000-c96984fd6a2b", + "savedPayload": { + "position": { + "x": 17995.64382962515, + "y": 31047.23747069523 + }, + "targetPosition": { + "x": 17929.64382962515, + "y": 31003.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "3c6df49d-70c3-468a-bdd8-6768ce6d3a9d", + "savedPayload": { + "position": { + "x": 17916.64382962515, + "y": 31018.23747069523 + }, + "targetPosition": { + "x": 17929.64382962515, + "y": 31003.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e5f9ee4d-77a3-48ae-b354-b2f6a97d5e47", + "savedPayload": { + "position": { + "x": 18978.435505127465, + "y": 30676.17948886613 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BigONE", + "config": "{ \n\"codeName\": \"bigone\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "3f289513-c1c8-457c-b65a-8cf62b5f5eb5", + "savedPayload": { + "position": { + "x": 17778.64382962515, + "y": 31071.23747069523 + }, + "targetPosition": { + "x": 17839.64382962515, + "y": 31063.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8b365e73-1cee-496a-921f-121cb628a130", + "savedPayload": { + "position": { + "x": 17798.64382962515, + "y": 31121.23747069523 + }, + "targetPosition": { + "x": 17839.64382962515, + "y": 31063.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "fb9ee540-bf12-4dda-bf87-cb6b58fce649", + "savedPayload": { + "position": { + "x": 19051.416913000998, + "y": 30694.917929526255 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance Jersey", + "config": "{ \n\"codeName\": \"binanceje\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "0b979ea9-7a2d-4744-9517-2dfa632dfafc", + "savedPayload": { + "position": { + "x": 17852.64382962515, + "y": 30989.23747069523 + }, + "targetPosition": { + "x": 17933.64382962515, + "y": 30992.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b9a4497d-20f1-4c61-9a79-444e0fe0ddf4", + "savedPayload": { + "position": { + "x": 17924.64382962515, + "y": 30952.23747069523 + }, + "targetPosition": { + "x": 17933.64382962515, + "y": 30992.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "2782350a-84a2-40ec-87c6-3c8043376a18", + "savedPayload": { + "position": { + "x": 19121.474291315073, + "y": 30722.655607823734 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "bitbank", + "config": "{ \n\"codeName\": \"bitbank\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "eb6b6842-9bf7-450e-baa3-7a87541a1cf6", + "savedPayload": { + "position": { + "x": 17955.64382962515, + "y": 31107.23747069523 + }, + "targetPosition": { + "x": 17941.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "6353ff56-759f-457d-81f3-fdb8ae5b3e83", + "savedPayload": { + "position": { + "x": 17942.64382962515, + "y": 31183.23747069523 + }, + "targetPosition": { + "x": 17941.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6c9a96a7-ed12-4b3e-bb51-306a8da131f5", + "savedPayload": { + "position": { + "x": 19187.502793363426, + "y": 30758.955084002137 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitBay", + "config": "{ \n\"codeName\": \"bitbay\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "83b4e523-72a7-41ce-9363-fe0c799dcac1", + "savedPayload": { + "position": { + "x": 17861.64382962515, + "y": 30965.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 30961.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "966698f7-8a28-42d7-bb80-f7cd0601e44f", + "savedPayload": { + "position": { + "x": 17823.64382962515, + "y": 31026.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 30961.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8778eee5-97a2-4f9d-bd25-cd5a64ec6663", + "savedPayload": { + "position": { + "x": 19248.461110225242, + "y": 30803.24389363787 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bitforex", + "config": "{ \n\"codeName\": \"bitforex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "698e5e38-ad73-4cb6-b7f6-2b69913faff9", + "savedPayload": { + "position": { + "x": 17897.64382962515, + "y": 30956.23747069523 + }, + "targetPosition": { + "x": 17937.64382962515, + "y": 30945.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "f0142bd4-1b63-4d12-a4b7-e150d0da197f", + "savedPayload": { + "position": { + "x": 18020.64382962515, + "y": 31021.23747069523 + }, + "targetPosition": { + "x": 17937.64382962515, + "y": 30945.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "499a5a3b-7871-4c95-9b2e-d58d4d9e2392", + "savedPayload": { + "position": { + "x": 19303.387892828876, + "y": 30854.823575746133 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "bitkk", + "config": "{ \n\"codeName\": \"bitkk\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "efbb916c-780b-447f-a4c2-df68570d4ee1", + "savedPayload": { + "position": { + "x": 17931.64382962515, + "y": 30937.23747069523 + }, + "targetPosition": { + "x": 17951.64382962515, + "y": 30936.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "0d829516-81d9-46a5-9861-7d94cc89455d", + "savedPayload": { + "position": { + "x": 17951.64382962515, + "y": 30912.23747069523 + }, + "targetPosition": { + "x": 17951.64382962515, + "y": 30936.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "ded39740-3c93-4fda-bb9c-6ac75d2109f4", + "savedPayload": { + "position": { + "x": 19351.416913000998, + "y": 30912.88068792786 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitMart", + "config": "{ \n\"codeName\": \"bitmart\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "10374855-6b4a-460b-9c95-70072ac00315", + "savedPayload": { + "position": { + "x": 17907.64382962515, + "y": 30901.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30915.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "3aded60c-4061-48ff-ad33-212c965b5c43", + "savedPayload": { + "position": { + "x": 17829.64382962515, + "y": 30925.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30915.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c7ed52a7-895b-46f1-a745-35954d8bcfc6", + "savedPayload": { + "position": { + "x": 19391.790724402348, + "y": 30976.499634842316 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitMax", + "config": "{ \n\"codeName\": \"bitmax\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "8a042d0d-7a7a-4a76-889e-42d8642404f4", + "savedPayload": { + "position": { + "x": 17944.64382962515, + "y": 31046.23747069523 + }, + "targetPosition": { + "x": 17944.64382962515, + "y": 31109.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "0c4fcc48-51e6-4ff2-925f-405cda6d1122", + "savedPayload": { + "position": { + "x": 17898.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17944.64382962515, + "y": 31109.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "fc6a9048-ab8c-48f9-91ae-6c95c28714b0", + "savedPayload": { + "position": { + "x": 19423.87260790898, + "y": 31044.67710769254 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BitMEX", + "config": "{ \n\"codeName\": \"bitmex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f7636e2b-354a-4217-894b-5e26eddc0c2a", + "savedPayload": { + "position": { + "x": 17894.64382962515, + "y": 30934.23747069523 + }, + "targetPosition": { + "x": 17910.64382962515, + "y": 30922.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "6eb2ddd1-6d06-456c-b4e0-7df56ba182e6", + "savedPayload": { + "position": { + "x": 17823.64382962515, + "y": 30834.23747069523 + }, + "targetPosition": { + "x": 17910.64382962515, + "y": 30922.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "1e2f1dd0-ebf1-4485-83d8-7723a9e3e714", + "savedPayload": { + "position": { + "x": 19447.15661305321, + "y": 31116.337907004432 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bit-Z", + "config": "{ \n\"codeName\": \"bitz\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "0a22e02b-7d2e-4955-9cfc-ed7d95f0c9a0", + "savedPayload": { + "position": { + "x": 17751.64382962515, + "y": 31083.23747069523 + }, + "targetPosition": { + "x": 17850.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "298b45af-b73d-4cd5-848a-97de7b857569", + "savedPayload": { + "position": { + "x": 17944.64382962515, + "y": 31083.23747069523 + }, + "targetPosition": { + "x": 17850.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6cc10926-fe41-43be-887b-fa8aba1c7377", + "savedPayload": { + "position": { + "x": 19461.275537164714, + "y": 31190.35189916476 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BTC-Alpha", + "config": "{ \n\"codeName\": \"btcalpha\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "263e3b9c-8fdd-4376-b53b-87f32d0f5898", + "savedPayload": { + "position": { + "x": 17904.64382962515, + "y": 30922.23747069523 + }, + "targetPosition": { + "x": 17883.64382962515, + "y": 30971.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "804603e1-3e0f-4219-a9b7-ee27810d4f07", + "savedPayload": { + "position": { + "x": 17829.64382962515, + "y": 30977.23747069523 + }, + "targetPosition": { + "x": 17883.64382962515, + "y": 30971.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "30e5485f-213b-435b-a670-07b76cfe5cae", + "savedPayload": { + "position": { + "x": 19466.00671637603, + "y": 31265.551839303345 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BTC Markets", + "config": "{ \n\"codeName\": \"btcmarkets\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "fcb3b880-0852-4d93-8714-67373f9dca16", + "savedPayload": { + "position": { + "x": 17911.64382962515, + "y": 31036.23747069523 + }, + "targetPosition": { + "x": 17994.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "953d8eff-0b2e-4b07-8635-393fddae0c9d", + "savedPayload": { + "position": { + "x": 18025.64382962515, + "y": 31127.23747069523 + }, + "targetPosition": { + "x": 17994.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "ac2fda42-95ca-404a-8dd2-72bff0ff5a0f", + "savedPayload": { + "position": { + "x": 19461.275537164714, + "y": 31340.75177944193 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Buda", + "config": "{ \n\"codeName\": \"buda\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "27f3573d-e1f0-473f-9bfd-f9198e7240a0", + "savedPayload": { + "position": { + "x": 17945.64382962515, + "y": 30937.23747069523 + }, + "targetPosition": { + "x": 17853.64382962515, + "y": 31005.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "4ddc0981-4e45-42f3-ae11-f5b136b2bc3d", + "savedPayload": { + "position": { + "x": 17783.64382962515, + "y": 31008.23747069523 + }, + "targetPosition": { + "x": 17853.64382962515, + "y": 31005.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "90fe3d74-662e-4fac-aff3-f41990b61ccf", + "savedPayload": { + "position": { + "x": 19447.15661305321, + "y": 31414.76577160226 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "BW", + "config": "{ \n\"codeName\": \"bw\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "457616cd-25f9-4ad3-8c18-6331859dd42e", + "savedPayload": { + "position": { + "x": 17890.64382962515, + "y": 31014.23747069523 + }, + "targetPosition": { + "x": 17900.64382962515, + "y": 30965.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8c1f9aa2-4253-4129-a533-e515644ddb38", + "savedPayload": { + "position": { + "x": 17909.64382962515, + "y": 30970.23747069523 + }, + "targetPosition": { + "x": 17900.64382962515, + "y": 30965.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d72db90c-d572-4cbb-8348-e3cc485d8e86", + "savedPayload": { + "position": { + "x": 19423.87260790898, + "y": 31486.42657091415 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bybit", + "config": "{ \n\"codeName\": \"bybit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "18fdf7c8-03c4-4f81-a88e-de97589765e1", + "savedPayload": { + "position": { + "x": 17803.64382962515, + "y": 31059.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 31007.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "a62b2603-ac6f-4b6e-9541-86daf32027b1", + "savedPayload": { + "position": { + "x": 17847.64382962515, + "y": 31104.23747069523 + }, + "targetPosition": { + "x": 17855.64382962515, + "y": 31007.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "516c3831-456b-4d17-b0a0-6a363ba2ddb2", + "savedPayload": { + "position": { + "x": 19391.790724402348, + "y": 31554.604043764375 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "ByteTrade", + "config": "{ \n\"codeName\": \"bytetrade\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "e7a1e531-5a9e-466e-b98d-672de39eed3a", + "savedPayload": { + "position": { + "x": 18088.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30981.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "edafaba7-fd82-4d9f-b3f7-5d1c01c56599", + "savedPayload": { + "position": { + "x": 17941.64382962515, + "y": 30943.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30981.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "45e2306f-03e8-4d17-a73a-72c11dd14e78", + "savedPayload": { + "position": { + "x": 19351.416913000998, + "y": 31618.22299067883 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "CEX.IO", + "config": "{ \n\"codeName\": \"cex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9de19f0a-5824-4e42-af00-484b64421dc3", + "savedPayload": { + "position": { + "x": 17890.64382962515, + "y": 31049.23747069523 + }, + "targetPosition": { + "x": 17896.64382962515, + "y": 31076.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "39db01bc-0cea-422f-b9e9-7d84e3f5446d", + "savedPayload": { + "position": { + "x": 17918.64382962515, + "y": 31105.23747069523 + }, + "targetPosition": { + "x": 17896.64382962515, + "y": 31076.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "346bfc30-e32a-453a-bdc6-0ead48221581", + "savedPayload": { + "position": { + "x": 19303.387892828876, + "y": 31676.280102860557 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Coinbase Prime", + "config": "{ \n\"codeName\": \"coinbaseprime\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "73cabd8d-9308-49ed-b544-44f785ee7d38", + "savedPayload": { + "position": { + "x": 17867.64382962515, + "y": 30962.23747069523 + }, + "targetPosition": { + "x": 17922.64382962515, + "y": 30960.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "31bd1360-f0c5-4d70-876a-b152f7cedfd7", + "savedPayload": { + "position": { + "x": 17960.64382962515, + "y": 30864.23747069523 + }, + "targetPosition": { + "x": 17922.64382962515, + "y": 30960.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5a8281db-6ace-4186-8cfb-cd249c4af48b", + "savedPayload": { + "position": { + "x": 19248.461110225242, + "y": 31727.85978496882 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "CoinEx", + "config": "{ \n\"codeName\": \"coinex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "af78f796-60e5-4794-87b8-772c7bc74be1", + "savedPayload": { + "position": { + "x": 18043.64382962515, + "y": 31069.23747069523 + }, + "targetPosition": { + "x": 18000.64382962515, + "y": 31106.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "d351e6d9-36eb-4d0e-aca5-94429bbb23a3", + "savedPayload": { + "position": { + "x": 18094.64382962515, + "y": 31090.23747069523 + }, + "targetPosition": { + "x": 18000.64382962515, + "y": 31106.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "62ad0961-6bdf-4a4a-a340-610816742d0a", + "savedPayload": { + "position": { + "x": 19187.502793363426, + "y": 31772.148594604554 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "COSS", + "config": "{ \n\"codeName\": \"coss\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "e6315232-c6b1-4e25-aade-7bc7ba9ba6ac", + "savedPayload": { + "position": { + "x": 17787.64382962515, + "y": 30984.23747069523 + }, + "targetPosition": { + "x": 17874.64382962515, + "y": 31049.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b1e8451f-09a2-47b0-add3-cf9c35c487bb", + "savedPayload": { + "position": { + "x": 17829.64382962515, + "y": 31095.23747069523 + }, + "targetPosition": { + "x": 17874.64382962515, + "y": 31049.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "695029de-7f61-45bb-aa4c-c6d51e6369ed", + "savedPayload": { + "position": { + "x": 19121.474291315073, + "y": 31808.448070782957 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "CREX24", + "config": "{ \n\"codeName\": \"crex24\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "c5e12f4a-fb26-40d3-9e70-751b55018e74", + "savedPayload": { + "position": { + "x": 17910.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17860.64382962515, + "y": 31075.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "00cb629e-bad4-4c6e-8abb-499cad3992f4", + "savedPayload": { + "position": { + "x": 17938.64382962515, + "y": 31054.23747069523 + }, + "targetPosition": { + "x": 17860.64382962515, + "y": 31075.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "07a7ec7c-273e-4675-8d8d-21ab8514a1f0", + "savedPayload": { + "position": { + "x": 19051.416913000998, + "y": 31836.185749080436 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Deribit", + "config": "{ \n\"codeName\": \"deribit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f0b2354b-89e3-4eca-b051-664a3b8283f6", + "savedPayload": { + "position": { + "x": 17862.64382962515, + "y": 30844.23747069523 + }, + "targetPosition": { + "x": 17906.64382962515, + "y": 30929.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "4ae1f824-82a8-4796-a2d5-3d2358d8089f", + "savedPayload": { + "position": { + "x": 17912.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17906.64382962515, + "y": 30929.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "21971815-4248-45df-8e04-20b9a5a83f06", + "savedPayload": { + "position": { + "x": 18978.43550512746, + "y": 31854.92418974056 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "DigiFinex", + "config": "{ \n\"codeName\": \"digifinex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "e583c93e-9a44-4e0d-acb7-56d7e00a555a", + "savedPayload": { + "position": { + "x": 17954.64382962515, + "y": 30992.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8917c7c0-b420-4d4f-a35a-c0fc6870f0de", + "savedPayload": { + "position": { + "x": 18052.64382962515, + "y": 30972.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31033.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "b7d56781-0c51-4ec1-95fd-bf4dc8c00352", + "savedPayload": { + "position": { + "x": 18903.681028093615, + "y": 31864.36787636031 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "DSX", + "config": "{ \n\"codeName\": \"dsx\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "d672ab56-cd32-4ff5-8fc5-3733262aeccb", + "savedPayload": { + "position": { + "x": 17916.64382962515, + "y": 31106.23747069523 + }, + "targetPosition": { + "x": 17955.64382962515, + "y": 31011.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "3731a7b5-ba9d-483e-bb41-abf3ae0232c6", + "savedPayload": { + "position": { + "x": 17878.64382962515, + "y": 30946.23747069523 + }, + "targetPosition": { + "x": 17955.64382962515, + "y": 31011.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "4c543abc-7372-4701-bc58-107578d45c25", + "savedPayload": { + "position": { + "x": 18828.332404658442, + "y": 31864.36787636031 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "FCoin", + "config": "{ \n\"codeName\": \"fcoin\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "a97d578c-6d7f-403c-8294-18aacf14abd8", + "savedPayload": { + "position": { + "x": 17893.64382962515, + "y": 30953.23747069523 + }, + "targetPosition": { + "x": 17919.64382962515, + "y": 30948.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "442c3834-482e-4928-9255-8ac859ae012e", + "savedPayload": { + "position": { + "x": 17905.64382962515, + "y": 30896.23747069523 + }, + "targetPosition": { + "x": 17919.64382962515, + "y": 30948.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6ddedcbd-07cb-4928-91b3-348f47118391", + "savedPayload": { + "position": { + "x": 18753.577927624592, + "y": 31854.92418974056 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "FCoinJP", + "config": "{ \n\"codeName\": \"fcoinjp\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "4a8a9810-6df6-451a-ab26-22bd7e7be85a", + "savedPayload": { + "position": { + "x": 17930.64382962515, + "y": 31129.23747069523 + }, + "targetPosition": { + "x": 17942.64382962515, + "y": 31052.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "138ab40c-18ca-4a11-9709-0baa040873e6", + "savedPayload": { + "position": { + "x": 18007.64382962515, + "y": 31122.23747069523 + }, + "targetPosition": { + "x": 17942.64382962515, + "y": 31052.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "982627ea-df84-4ba9-9219-612fbe1e4276", + "savedPayload": { + "position": { + "x": 18680.59651975106, + "y": 31836.185749080436 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Gate.io", + "config": "{ \n\"codeName\": \"gateio\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "71a15089-9d40-4726-9a41-37d406064164", + "savedPayload": { + "position": { + "x": 17930.64382962515, + "y": 30993.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31031.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "c025e976-c2c6-49de-81ec-48e2f737b412", + "savedPayload": { + "position": { + "x": 17925.64382962515, + "y": 31053.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31031.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c4028289-4cdb-4da0-90e6-5f93328b8e03", + "savedPayload": { + "position": { + "x": 18610.539141436984, + "y": 31808.448070782957 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Gemini", + "config": "{ \n\"codeName\": \"gemini\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9eb15872-8d15-4086-9920-46909eb5f9e7", + "savedPayload": { + "position": { + "x": 17951.64382962515, + "y": 30901.23747069523 + }, + "targetPosition": { + "x": 17971.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "a84dcf06-57c6-47d7-97a0-9f03f3af8b34", + "savedPayload": { + "position": { + "x": 18045.64382962515, + "y": 30891.23747069523 + }, + "targetPosition": { + "x": 17971.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "58bf8247-baef-4ea6-a483-7ed8f0ba5043", + "savedPayload": { + "position": { + "x": 18544.51063938863, + "y": 31772.148594604554 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "HitBTC", + "config": "{ \n\"codeName\": \"hitbtc\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "1632c520-fa79-442f-b33b-430cb1356de6", + "savedPayload": { + "position": { + "x": 17809.64382962515, + "y": 31086.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31069.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "576d1666-dbd3-4914-9fe2-fa05bdf72eea", + "savedPayload": { + "position": { + "x": 17840.64382962515, + "y": 31148.23747069523 + }, + "targetPosition": { + "x": 17880.64382962515, + "y": 31069.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8384fa0b-854c-4c23-846e-a5da0179a738", + "savedPayload": { + "position": { + "x": 18483.552322526815, + "y": 31727.85978496882 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "HitBTC", + "config": "{ \n\"codeName\": \"hitbtc2\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9a29cb9e-ee8d-4315-8532-eef82224b84a", + "savedPayload": { + "position": { + "x": 17838.64382962515, + "y": 30922.23747069523 + }, + "targetPosition": { + "x": 17829.64382962515, + "y": 30949.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "badd79e7-1e21-4dc3-bfa7-8dfb4a6c6267", + "savedPayload": { + "position": { + "x": 17920.64382962515, + "y": 30944.23747069523 + }, + "targetPosition": { + "x": 17829.64382962515, + "y": 30949.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "09c634c2-5aba-49c5-80bc-4fd4175e7f0c", + "savedPayload": { + "position": { + "x": 18428.62553992318, + "y": 31676.280102860557 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Huobi Pro", + "config": "{ \n\"codeName\": \"huobipro\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "86caa38c-5bdf-40e4-b27b-8d8b64319575", + "savedPayload": { + "position": { + "x": 18071.64382962515, + "y": 31171.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31077.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "001225af-c715-4566-9502-f8f0ac1c4531", + "savedPayload": { + "position": { + "x": 18040.64382962515, + "y": 31019.23747069523 + }, + "targetPosition": { + "x": 17996.64382962515, + "y": 31077.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "967c3914-a76d-4389-9c7e-9c258ae683bd", + "savedPayload": { + "position": { + "x": 18380.59651975106, + "y": 31618.22299067883 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Huobi Russia", + "config": "{ \n\"codeName\": \"huobiru\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "9b7b32d6-a42e-44bb-8065-5aa32b1e844b", + "savedPayload": { + "position": { + "x": 17980.64382962515, + "y": 31034.23747069523 + }, + "targetPosition": { + "x": 17957.64382962515, + "y": 31088.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "8d74201c-33cd-4e12-8920-b08d0ef97572", + "savedPayload": { + "position": { + "x": 17992.64382962515, + "y": 31105.23747069523 + }, + "targetPosition": { + "x": 17957.64382962515, + "y": 31088.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6f97bb5c-8d85-43ee-86a1-33e22cdfbb5e", + "savedPayload": { + "position": { + "x": 18340.22270834971, + "y": 31554.604043764375 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "KKEX", + "config": "{ \n\"codeName\": \"kkex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "daa4e07a-1cd8-4d92-8004-2eabfaa62f77", + "savedPayload": { + "position": { + "x": 17924.64382962515, + "y": 31038.23747069523 + }, + "targetPosition": { + "x": 17987.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "cb64951f-d984-4f51-a751-166a316084f3", + "savedPayload": { + "position": { + "x": 17945.64382962515, + "y": 31156.23747069523 + }, + "targetPosition": { + "x": 17987.64382962515, + "y": 31073.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "16ae95ce-796f-4f2b-942c-f98dcbf9cf4b", + "savedPayload": { + "position": { + "x": 18308.140824843078, + "y": 31486.42657091415 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "LBank", + "config": "{ \n\"codeName\": \"lbank\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "def3f9d0-f09e-4e09-8b6d-a4c322a4384b", + "savedPayload": { + "position": { + "x": 17877.64382962515, + "y": 31024.23747069523 + }, + "targetPosition": { + "x": 17838.64382962515, + "y": 31032.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "53eac3c1-96d6-4cb1-b54d-f3f174eaf733", + "savedPayload": { + "position": { + "x": 17764.64382962515, + "y": 31036.23747069523 + }, + "targetPosition": { + "x": 17838.64382962515, + "y": 31032.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "cb2558d6-dab0-4f35-b83f-7cfc161b3d4f", + "savedPayload": { + "position": { + "x": 18284.85681969885, + "y": 31414.76577160226 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Mercado Bitcoin", + "config": "{ \n\"codeName\": \"mercado\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "83ab2c39-e844-496f-bebb-7b8607428902", + "savedPayload": { + "position": { + "x": 17849.64382962515, + "y": 31081.23747069523 + }, + "targetPosition": { + "x": 17849.64382962515, + "y": 30986.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "d69e722e-c71a-462a-8bbd-d3482d0eab21", + "savedPayload": { + "position": { + "x": 17771.64382962515, + "y": 30887.23747069523 + }, + "targetPosition": { + "x": 17849.64382962515, + "y": 30986.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5002072e-145c-4aeb-a611-3e0e4c60ee5d", + "savedPayload": { + "position": { + "x": 18270.737895587343, + "y": 31340.75177944193 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "OKCoin", + "config": "{ \n\"codeName\": \"okcoin\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "1e4dd5c8-0545-4698-8695-c985880243a3", + "savedPayload": { + "position": { + "x": 17921.64382962515, + "y": 31043.23747069523 + }, + "targetPosition": { + "x": 17967.64382962515, + "y": 30969.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "0e188cae-9764-4963-a78b-e5d7ef272522", + "savedPayload": { + "position": { + "x": 18005.64382962515, + "y": 30891.23747069523 + }, + "targetPosition": { + "x": 17967.64382962515, + "y": 30969.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "1f860b4b-2893-4a51-8649-19c47d494a37", + "savedPayload": { + "position": { + "x": 18266.00671637603, + "y": 31265.551839303345 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "OKEX", + "config": "{ \n\"codeName\": \"okex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "7f618566-3d10-4c3c-90b2-7541a5146eeb", + "savedPayload": { + "position": { + "x": 17770.64382962515, + "y": 31094.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "21205576-5d12-452c-814f-eb56182162ae", + "savedPayload": { + "position": { + "x": 17794.64382962515, + "y": 31173.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31102.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "aa0edec0-8b27-4f94-abce-1e437ce5aba6", + "savedPayload": { + "position": { + "x": 18270.737895587343, + "y": 31190.35189916476 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "RightBTC", + "config": "{ \n\"codeName\": \"rightbtc\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "ade372e9-5070-4fa9-843e-57732c4106c3", + "savedPayload": { + "position": { + "x": 17999.64382962515, + "y": 30964.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "b63d440e-4501-475c-b8a6-2b9a144e32a1", + "savedPayload": { + "position": { + "x": 17984.64382962515, + "y": 30901.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30935.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c20cd9e1-52a0-4d17-b90c-e9d5b63315ce", + "savedPayload": { + "position": { + "x": 18284.85681969885, + "y": 31116.337907004432 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "STEX", + "config": "{ \n\"codeName\": \"stex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f1d65161-4922-4a1e-ac98-df1a842347a7", + "savedPayload": { + "position": { + "x": 17872.64382962515, + "y": 31001.23747069523 + }, + "targetPosition": { + "x": 17892.64382962515, + "y": 31092.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "c313b2c6-6154-4a9a-b826-fd99cc500cd9", + "savedPayload": { + "position": { + "x": 17888.64382962515, + "y": 31186.23747069523 + }, + "targetPosition": { + "x": 17892.64382962515, + "y": 31092.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "0ea23137-3c65-4de1-9772-6ac1b65196e8", + "savedPayload": { + "position": { + "x": 18308.140824843078, + "y": 31044.67710769254 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "TideBit", + "config": "{ \n\"codeName\": \"tidebit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "c92318bd-8b2d-489b-b8e8-cf30fb63286e", + "savedPayload": { + "position": { + "x": 17981.64382962515, + "y": 31021.23747069523 + }, + "targetPosition": { + "x": 17978.64382962515, + "y": 31048.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "83bca3ec-fc1c-435c-b5fe-b1cf92463fd1", + "savedPayload": { + "position": { + "x": 18051.64382962515, + "y": 31072.23747069523 + }, + "targetPosition": { + "x": 17978.64382962515, + "y": 31048.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5563c310-701a-4c1e-8155-87c08c927ce3", + "savedPayload": { + "position": { + "x": 18340.22270834971, + "y": 30976.499634842316 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "TimeX", + "config": "{ \n\"codeName\": \"timex\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "5c004b5f-eec4-414f-8d01-d9b3fddeee9e", + "savedPayload": { + "position": { + "x": 17892.64382962515, + "y": 30973.23747069523 + }, + "targetPosition": { + "x": 17949.64382962515, + "y": 30914.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "59a33add-d0e9-4ae1-8a01-f1e0ed09cb61", + "savedPayload": { + "position": { + "x": 17911.64382962515, + "y": 30878.23747069523 + }, + "targetPosition": { + "x": 17949.64382962515, + "y": 30914.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "27d69fa7-b561-4986-8c0d-1b374e7e1bf1", + "savedPayload": { + "position": { + "x": 18380.59651975106, + "y": 30912.88068792786 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "TOP.Q", + "config": "{ \n\"codeName\": \"topq\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "eafef6a3-eed2-470e-a15c-aa4c10001cd2", + "savedPayload": { + "position": { + "x": 17818.64382962515, + "y": 31115.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31105.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "2d5eb813-ceb6-40cd-8682-7205596bb8b5", + "savedPayload": { + "position": { + "x": 17759.64382962515, + "y": 31188.23747069523 + }, + "targetPosition": { + "x": 17847.64382962515, + "y": 31105.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8fdf13d8-e8d2-4ef4-8b34-f492a25d753a", + "savedPayload": { + "position": { + "x": 18428.62553992318, + "y": 30854.823575746133 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Upbit", + "config": "{ \n\"codeName\": \"upbit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "f456fec2-cee6-4f0c-b865-1188088879c9", + "savedPayload": { + "position": { + "x": 17919.64382962515, + "y": 30973.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30980.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "947c1ca0-bff9-4372-b153-40054e29b705", + "savedPayload": { + "position": { + "x": 17921.64382962515, + "y": 31014.23747069523 + }, + "targetPosition": { + "x": 17991.64382962515, + "y": 30980.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "74e57ecd-3394-42b4-b2c4-6f216f7e41db", + "savedPayload": { + "position": { + "x": 18483.552322526815, + "y": 30803.24389363787 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "WhiteBit", + "config": "{ \n\"codeName\": \"whitebit\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "c16eae45-a568-4b2e-b064-4431bdf34c24", + "savedPayload": { + "position": { + "x": 17767.64382962515, + "y": 30899.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30950.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "dfdf793f-4ba6-4215-a325-323c0f223553", + "savedPayload": { + "position": { + "x": 17920.64382962515, + "y": 31004.23747069523 + }, + "targetPosition": { + "x": 17834.64382962515, + "y": 30950.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "467ece1e-d1d0-4a11-ae7a-d0e22cd4eba5", + "savedPayload": { + "position": { + "x": 18544.51063938863, + "y": 30758.955084002137 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "ZB", + "config": "{ \n\"codeName\": \"zb\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [], + "id": "db206cbd-a587-4e8e-acbe-6581ad3b5cc4", + "savedPayload": { + "position": { + "x": 17855.64382962515, + "y": 31027.23747069523 + }, + "targetPosition": { + "x": 17861.64382962515, + "y": 30951.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [], + "id": "1dd658c5-7755-44b7-85f0-9bcd787762a0", + "savedPayload": { + "position": { + "x": 17789.64382962515, + "y": 31044.23747069523 + }, + "targetPosition": { + "x": 17861.64382962515, + "y": 30951.23747069523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "07df07e8-39a8-4fbc-a0c8-150f20b6ac59", + "savedPayload": { + "position": { + "x": 18610.539141436984, + "y": 30722.655607823734 + }, + "targetPosition": { + "x": 18866.00671637603, + "y": 31265.551839303345 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 5, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "51f64e29-e3ab-4683-a5de-f397fbf94260", + "savedPayload": { + "position": { + "x": 18824.00671637603, + "y": 31317.551839303345 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Testing Queue", + "project": "Foundations", + "exchanges": [], + "id": "895ce4b1-4890-4216-89ba-a012181d2546", + "savedPayload": { + "position": { + "x": 18488.596519751063, + "y": 31208.570460102543 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Failed OHLCVs Tests", + "project": "Foundations", + "exchanges": [], + "id": "467bc99c-1273-483a-909f-c21e5d728512", + "savedPayload": { + "position": { + "x": 18488.596519751063, + "y": 30855.899308727057 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchanges", + "name": "Trading Tests Pending", + "project": "Foundations", + "exchanges": [ + { + "type": "Crypto Exchange", + "name": "Bitfinex", + "config": "{\n \"codeName\": \"bitfinex\",\n \"API\": [\n {\n \"rateLimit\": 999\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "fa6fb871-10ad-4b25-ba74-b37d6a9a3025", + "savedPayload": { + "position": { + "x": 19651.24733491461, + "y": 30138.234951669678 + }, + "targetPosition": { + "x": 19709.481620062677, + "y": 30355.56826258472 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "2de2fe8f-a38b-4778-8e24-d318888c629f", + "savedPayload": { + "position": { + "x": 19868.58064582965, + "y": 30196.469236817746 + }, + "targetPosition": { + "x": 19709.481620062677, + "y": 30355.56826258472 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "33508b53-2769-4f3d-8c98-9fa37e5cbf5b", + "savedPayload": { + "position": { + "x": 19709.481620062677, + "y": 30355.56826258472 + }, + "targetPosition": { + "x": 19593.013049766545, + "y": 30790.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "de06f331-5653-4539-acf4-603fa7f6b30d", + "savedPayload": { + "position": { + "x": 20597.435913172543, + "y": 29950.5234527118 + }, + "targetPosition": { + "x": 20372.435913172543, + "y": 30340.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "fa6fb871-10ad-4b25-ba74-b37d6a9a3025" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bitfinex", + "Crypto Exchange", + "Foundations", + "6c076027-683d-4778-8a6a-e60984980fdf" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "33508b53-2769-4f3d-8c98-9fa37e5cbf5b" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "fa6fb871-10ad-4b25-ba74-b37d6a9a3025" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "5108ee82-6b9f-4067-9a57-5b29647a26bc", + "savedPayload": { + "position": { + "x": 20822.435913172543, + "y": 30340.2348844148 + }, + "targetPosition": { + "x": 20372.435913172543, + "y": 30340.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "2de2fe8f-a38b-4778-8e24-d318888c629f" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bitfinex", + "Crypto Exchange", + "Foundations", + "6c076027-683d-4778-8a6a-e60984980fdf" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "33508b53-2769-4f3d-8c98-9fa37e5cbf5b" + ], + [ + "Tether", + "Asset", + "Foundations", + "2de2fe8f-a38b-4778-8e24-d318888c629f" + ] + ] + } + }, + "id": "b0230cdf-6725-4d65-b633-390272cfb6c5", + "savedPayload": { + "position": { + "x": 20372.435913172543, + "y": 30340.2348844148 + }, + "targetPosition": { + "x": 19982.724481469544, + "y": 30565.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "4d4ad5a1-81a7-4f92-83db-99f57ce261bb", + "savedPayload": { + "position": { + "x": 19982.724481469544, + "y": 30565.2348844148 + }, + "targetPosition": { + "x": 19593.013049766545, + "y": 30790.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6c076027-683d-4778-8a6a-e60984980fdf", + "savedPayload": { + "position": { + "x": 18595.88492669602, + "y": 30552.0835150272 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Bittrex", + "config": "{\n \"codeName\": \"bittrex\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 2\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "41164633-9a2a-4123-88f0-7f9acb42d68a", + "savedPayload": { + "position": { + "x": 19682.021594969836, + "y": 29990.84101042175 + }, + "targetPosition": { + "x": 19705.57277527916, + "y": 30440.22430106131 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USDT", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "fab49590-9900-4352-a8dc-e464471f8def", + "savedPayload": { + "position": { + "x": 20082.9745308546, + "y": 30195.136735304546 + }, + "targetPosition": { + "x": 19705.57277527916, + "y": 30440.22430106131 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "88d4ef94-f030-42df-9115-69d9611317b1", + "savedPayload": { + "position": { + "x": 19705.57277527916, + "y": 30440.22430106131 + }, + "targetPosition": { + "x": 19501.277050396366, + "y": 30841.177236946074 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"BTC/USDT\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "fc48c4e5-ca22-4343-862b-297182111709", + "savedPayload": { + "position": { + "x": 20658.336687923493, + "y": 30228.646770543794 + }, + "targetPosition": { + "x": 20357.227915062005, + "y": 30563.061942008622 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "41164633-9a2a-4123-88f0-7f9acb42d68a" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bittrex", + "Crypto Exchange", + "Foundations", + "f598f002-8fc5-491f-888e-07d017ea83c6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "88d4ef94-f030-42df-9115-69d9611317b1" + ], + [ + "BTC", + "Asset", + "Foundations", + "41164633-9a2a-4123-88f0-7f9acb42d68a" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USDT", + "project": "Foundations", + "id": "9b0a49d7-b6df-4489-bbdf-b2cb19f585cd", + "savedPayload": { + "position": { + "x": 20797.39433539222, + "y": 30656.622202876613 + }, + "targetPosition": { + "x": 20357.227915062005, + "y": 30563.061942008622 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USDT", + "id": "fab49590-9900-4352-a8dc-e464471f8def" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Bittrex", + "Crypto Exchange", + "Foundations", + "f598f002-8fc5-491f-888e-07d017ea83c6" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "88d4ef94-f030-42df-9115-69d9611317b1" + ], + [ + "USDT", + "Asset", + "Foundations", + "fab49590-9900-4352-a8dc-e464471f8def" + ] + ] + } + }, + "id": "f1770733-f08a-4d8d-a64b-b569ee2a4d7b", + "savedPayload": { + "position": { + "x": 20357.227915062005, + "y": 30563.061942008622 + }, + "targetPosition": { + "x": 19929.252482729185, + "y": 30702.11958947735 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7fe8234d-9a39-4b28-bf98-43b4fdb57ee5", + "savedPayload": { + "position": { + "x": 19929.252482729185, + "y": 30702.11958947735 + }, + "targetPosition": { + "x": 19501.277050396366, + "y": 30841.177236946074 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f598f002-8fc5-491f-888e-07d017ea83c6", + "savedPayload": { + "position": { + "x": 18687.809566454165, + "y": 30479.615972269745 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Coinbase Pro", + "config": "{\n \"codeName\": \"coinbasepro\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 300\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "ee182378-a852-48d9-970a-d1741fa24003", + "savedPayload": { + "position": { + "x": 19711.51778640455, + "y": 30712.469203190307 + }, + "targetPosition": { + "x": 19682.40064383052, + "y": 30821.135858647827 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USDC", + "config": "{\n \"codeName\": \"USDC\"\n}", + "project": "Foundations", + "id": "a4229bf5-90b6-4590-90f4-fdec3cd60df9", + "savedPayload": { + "position": { + "x": 19791.06729928804, + "y": 30792.018716073795 + }, + "targetPosition": { + "x": 19682.40064383052, + "y": 30821.135858647827 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "5e970185-b876-4d70-af88-e4944e992801", + "savedPayload": { + "position": { + "x": 19682.40064383052, + "y": 30821.135858647827 + }, + "targetPosition": { + "x": 19523.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDC", + "config": "{ \n\"codeName\": \"Type the name of the market\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "b6375bea-7164-4e45-89cb-80a1ec275c52", + "savedPayload": { + "position": { + "x": 20813.013049766545, + "y": 30755.2348844148 + }, + "targetPosition": { + "x": 20423.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "ee182378-a852-48d9-970a-d1741fa24003" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Coinbase Pro", + "Crypto Exchange", + "Foundations", + "23ec7356-eed9-4a26-ace4-f21ae0d1e43e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "5e970185-b876-4d70-af88-e4944e992801" + ], + [ + "BTC", + "Asset", + "Foundations", + "ee182378-a852-48d9-970a-d1741fa24003" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USDC", + "project": "Foundations", + "id": "bb8913af-3d8c-4d31-af21-457d5d6ab9cc", + "savedPayload": { + "position": { + "x": 20813.013049766545, + "y": 31205.2348844148 + }, + "targetPosition": { + "x": 20423.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USDC", + "id": "a4229bf5-90b6-4590-90f4-fdec3cd60df9" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Coinbase Pro", + "Crypto Exchange", + "Foundations", + "23ec7356-eed9-4a26-ace4-f21ae0d1e43e" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "5e970185-b876-4d70-af88-e4944e992801" + ], + [ + "USDC", + "Asset", + "Foundations", + "a4229bf5-90b6-4590-90f4-fdec3cd60df9" + ] + ] + } + }, + "id": "cbabed50-b6b1-4f1b-b750-0f802bd36f6e", + "savedPayload": { + "position": { + "x": 20423.301618063546, + "y": 30980.2348844148 + }, + "targetPosition": { + "x": 19973.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "f84cdb3e-86c4-4b6c-bba4-678d71440ee0", + "savedPayload": { + "position": { + "x": 19973.301618063546, + "y": 30980.2348844148 + }, + "targetPosition": { + "x": 19523.301618063546, + "y": 30980.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "23ec7356-eed9-4a26-ace4-f21ae0d1e43e", + "savedPayload": { + "position": { + "x": 18800.468987657674, + "y": 30447.842729406315 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "FTX", + "config": "{\n \"codeName\": \"ftx\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "Bitcoin", + "config": "{ \n\"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "51d196fb-b457-49f7-bae2-b0ef554154a3", + "savedPayload": { + "position": { + "x": 19285.301618063546, + "y": 30915.927263279467 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31175.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USD", + "config": "{\n \"codeName\": \"USD\"\n}", + "project": "Foundations", + "id": "85b644de-4b78-486d-a689-5db24484bf33", + "savedPayload": { + "position": { + "x": 19585.301618063546, + "y": 30915.927263279467 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31175.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7c0b83f3-d4f6-457a-881f-9cd73f293d1c", + "savedPayload": { + "position": { + "x": 19435.301618063546, + "y": 31175.7348844148 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31475.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "E" + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "code": "{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USD", + "config": "{\n \"codeName\": \"BTC/USD\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "Bitcoin", + "project": "Foundations", + "id": "6b882b1c-d15c-4499-aa93-9f80e3ccb59a", + "savedPayload": { + "position": { + "x": 20009.565686775473, + "y": 30791.66319456754 + }, + "targetPosition": { + "x": 19859.565686775473, + "y": 31051.470815702873 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Bitcoin", + "id": "51d196fb-b457-49f7-bae2-b0ef554154a3" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "FTX", + "Crypto Exchange", + "Foundations", + "b3e7f4de-1ca4-442f-8898-cb7397dc45d3" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "7c0b83f3-d4f6-457a-881f-9cd73f293d1c" + ], + [ + "Bitcoin", + "Asset", + "Foundations", + "51d196fb-b457-49f7-bae2-b0ef554154a3" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USD", + "project": "Foundations", + "id": "6eada284-7adc-4eda-9448-7165704e350e", + "savedPayload": { + "position": { + "x": 20119.373307910806, + "y": 30901.470815702873 + }, + "targetPosition": { + "x": 19859.565686775473, + "y": 31051.470815702873 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USD", + "id": "85b644de-4b78-486d-a689-5db24484bf33" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "FTX", + "Crypto Exchange", + "Foundations", + "b3e7f4de-1ca4-442f-8898-cb7397dc45d3" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "7c0b83f3-d4f6-457a-881f-9cd73f293d1c" + ], + [ + "USD", + "Asset", + "Foundations", + "85b644de-4b78-486d-a689-5db24484bf33" + ] + ] + } + }, + "id": "f4814fb1-d09a-45ad-8352-c0743b3a8558", + "savedPayload": { + "position": { + "x": 19859.565686775473, + "y": 31051.470815702873 + }, + "targetPosition": { + "x": 19647.43365241951, + "y": 31263.602850058836 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 3, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "f8c75d46-aa08-4579-a4a3-ea797f70944d", + "savedPayload": { + "position": { + "x": 19647.43365241951, + "y": 31263.602850058836 + }, + "targetPosition": { + "x": 19435.301618063546, + "y": 31475.7348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "b3e7f4de-1ca4-442f-8898-cb7397dc45d3", + "savedPayload": { + "position": { + "x": 18916.71181468851, + "y": 30461.60097463771 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Crypto Exchange", + "name": "Kraken", + "config": "{ \n\"codeName\": \"kraken\"\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{\n \"addMissingAssetsFilter\": {\n \"quotedAsset\": \"USDT\"\n }\n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "a18c644d-3d51-413e-8abe-dd7698c2d03a", + "savedPayload": { + "position": { + "x": 19564.91960434743, + "y": 31467.40024970227 + }, + "targetPosition": { + "x": 19453.382057442876, + "y": 31482.084446327026 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "USDT", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "e45ae556-e162-4d1f-ac5e-f8245d3d7f70", + "savedPayload": { + "position": { + "x": 19521.86771820636, + "y": 31571.33669710979 + }, + "targetPosition": { + "x": 19453.382057442876, + "y": 31482.084446327026 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "2a7dfb85-9179-4c30-9b63-072adaa7b317", + "savedPayload": { + "position": { + "x": 19453.382057442876, + "y": 31482.084446327026 + }, + "targetPosition": { + "x": 19245.509162627837, + "y": 31395.98067404488 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{\n \"codeName\": \"USDT/BTC\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "94349e75-3c40-4a66-bc82-61460105e591", + "savedPayload": { + "position": { + "x": 19946.933254887477, + "y": 32501.414896358965 + }, + "targetPosition": { + "x": 19589.92425175642, + "y": 32227.47225330504 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "a18c644d-3d51-413e-8abe-dd7698c2d03a" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Kraken", + "Crypto Exchange", + "Foundations", + "793d2f4a-3315-4c18-abad-f4d74c83ac4f" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "2a7dfb85-9179-4c30-9b63-072adaa7b317" + ], + [ + "BTC", + "Asset", + "Foundations", + "a18c644d-3d51-413e-8abe-dd7698c2d03a" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "USDT", + "project": "Foundations", + "id": "4759c142-6e8c-4ce2-8b5c-c783f630bb3b", + "savedPayload": { + "position": { + "x": 19531.187465257397, + "y": 32673.622440923256 + }, + "targetPosition": { + "x": 19589.92425175642, + "y": 32227.47225330504 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "USDT", + "id": "e45ae556-e162-4d1f-ac5e-f8245d3d7f70" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem", + "Foundations", + "7217b56c-e854-4c06-8b8a-d5d3c05a153d" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges", + "Foundations", + "fb5144e2-035a-4478-9a07-73f24e8193c9" + ], + [ + "Kraken", + "Crypto Exchange", + "Foundations", + "793d2f4a-3315-4c18-abad-f4d74c83ac4f" + ], + [ + "New Exchange Assets", + "Exchange Assets", + "Foundations", + "2a7dfb85-9179-4c30-9b63-072adaa7b317" + ], + [ + "USDT", + "Asset", + "Foundations", + "e45ae556-e162-4d1f-ac5e-f8245d3d7f70" + ] + ] + } + }, + "id": "71f99544-bf86-49e7-8896-5f96f875f262", + "savedPayload": { + "position": { + "x": 19589.92425175642, + "y": 32227.47225330504 + }, + "targetPosition": { + "x": 19417.71670719213, + "y": 31811.72646367496 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "07267ef1-f15a-43cb-94f6-c13075c3ba61", + "savedPayload": { + "position": { + "x": 19417.71670719213, + "y": 31811.72646367496 + }, + "targetPosition": { + "x": 19245.509162627837, + "y": 31395.98067404488 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "793d2f4a-3315-4c18-abad-f4d74c83ac4f", + "savedPayload": { + "position": { + "x": 19018.841130875084, + "y": 30518.796139846247 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance Futures USDⓈ-M", + "config": "{\n \"codeName\": \"binanceusdm\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "e05c6048-8062-4e1e-acec-441d643fd399", + "savedPayload": { + "position": { + "x": 19121.640264699694, + "y": 30031.959544495705 + }, + "targetPosition": { + "x": 19184.01377194502, + "y": 30325.403824715846 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "Tether", + "config": "{\n \"codeName\": \"USDT\"\n}", + "project": "Foundations", + "id": "d66e5b53-78e9-455f-8841-6bf62d2c36bf", + "savedPayload": { + "position": { + "x": 19406.95721958824, + "y": 30124.664642808188 + }, + "targetPosition": { + "x": 19184.01377194502, + "y": 30325.403824715846 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "b9f1342a-acb6-41fc-a4bf-ef13463f01ae", + "savedPayload": { + "position": { + "x": 19184.01377194502, + "y": 30325.403824715846 + }, + "targetPosition": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USDT", + "config": "{ \n\"codeName\": \"Type the name of the market\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "a0ec8f79-8af8-4dfc-8a86-1c88a59bf74e", + "savedPayload": { + "position": { + "x": 19789.304298650066, + "y": 30086.725309377038 + }, + "targetPosition": { + "x": 19625.91258814556, + "y": 30338.326479760664 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "e05c6048-8062-4e1e-acec-441d643fd399" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures USDⓈ-M", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "BTC", + "Asset" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "Tether", + "project": "Foundations", + "id": "12ce7888-9873-41fb-922e-21512a6e63b0", + "savedPayload": { + "position": { + "x": 19925.50144857193, + "y": 30354.027266633548 + }, + "targetPosition": { + "x": 19625.91258814556, + "y": 30338.326479760664 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "Tether", + "id": "d66e5b53-78e9-455f-8841-6bf62d2c36bf" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures USDⓈ-M", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "Tether", + "Asset" + ] + ] + } + }, + "id": "a5015bce-68d3-4059-8c0c-4655958e7305", + "savedPayload": { + "position": { + "x": 19625.91258814556, + "y": 30338.326479760664 + }, + "targetPosition": { + "x": 19358.61063088905, + "y": 30474.523629682528 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "670bf7eb-d21c-471c-931d-ffa624eddf93", + "savedPayload": { + "position": { + "x": 19358.61063088905, + "y": 30474.523629682528 + }, + "targetPosition": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeAccounts": { + "type": "Exchange Accounts", + "name": "New Exchange Accounts", + "project": "Foundations", + "userAccounts": [ + { + "type": "User Account", + "name": "New User Account", + "project": "Foundations", + "userAssets": { + "type": "User Assets", + "name": "New User Assets", + "project": "Foundations", + "assets": [], + "id": "d52fe9fe-e4d5-4dc0-a690-6b34d9403a9e", + "savedPayload": { + "position": { + "x": 19955.38686362977, + "y": 30733.75746898403 + }, + "targetPosition": { + "x": 19661.94258340963, + "y": 30796.130976229357 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "userKeys": { + "type": "User Keys", + "name": "New User Keys", + "project": "Foundations", + "keys": [ + { + "type": "Exchange Account Key", + "name": "New Exchange Account Key", + "config": "{\n \"codeName\": \"DOUBLE_CLICK_ON_THIS_STRING_TO_SELECT_IT_XXX_DELETE_IT_AND_PASTE_YOUR_EXCHANGE_API_PUBLIC_KEY\",\n \"secret\": \"REPLACE_THIS_STRING_WITH_YOUR_API_KEY_SECRET\",\n \"uid\": \"REPLACE_THIS_STRING_WITH_YOUR_UID_IF_NECESSARY\",\n \"password\": \"REPLACE_THIS_STRING_WITH_YOUR_PASSWORD_IF_NECESSARY\"\n}", + "project": "Foundations", + "id": "3fa1ffa7-f802-4e9d-a735-21a3c71529e7", + "savedPayload": { + "position": { + "x": 20063.420947224946, + "y": 31242.017871515793 + }, + "targetPosition": { + "x": 19862.681765317287, + "y": 31019.074423872575 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7389704c-900f-4c31-8364-8959fdc080a5", + "savedPayload": { + "position": { + "x": 19862.681765317287, + "y": 31019.074423872575 + }, + "targetPosition": { + "x": 19661.94258340963, + "y": 30796.130976229357 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5ccfec54-f7b2-4e6e-9d36-79b88904d517", + "savedPayload": { + "position": { + "x": 19661.94258340963, + "y": 30796.130976229357 + }, + "targetPosition": { + "x": 19376.625628521084, + "y": 30703.425877916874 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "9e42052a-2c5c-4958-8d30-2389375084a3", + "savedPayload": { + "position": { + "x": 19376.625628521084, + "y": 30703.425877916874 + }, + "targetPosition": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "7a10f447-a426-4c2b-911c-0a1f5a57ea56", + "savedPayload": { + "position": { + "x": 19091.30867363254, + "y": 30610.72077960439 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Crypto Exchange", + "name": "Binance Futures COINM", + "config": "{\n \"codeName\": \"binancecoinm\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}", + "project": "Foundations", + "exchangeAssets": { + "type": "Exchange Assets", + "name": "New Exchange Assets", + "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}", + "project": "Foundations", + "assets": [ + { + "type": "Asset", + "name": "BTC", + "config": "{\n \"codeName\": \"BTC\"\n}", + "project": "Foundations", + "id": "d887b805-f5d0-4891-a269-48fdf45daa2a", + "savedPayload": { + "position": { + "x": 19372.586988642666, + "y": 30200.281938858705 + }, + "targetPosition": { + "x": 19317.916330995024, + "y": 30495.258411127892 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Asset", + "name": "New Asset", + "config": "{\n \"codeName\": \"USD\"\n}", + "project": "Foundations", + "id": "4cfa0b52-31eb-47be-91d2-7ae695945cc4", + "savedPayload": { + "position": { + "x": 19600.708778322678, + "y": 30395.11635335776 + }, + "targetPosition": { + "x": 19317.916330995024, + "y": 30495.258411127892 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "46d101f4-c29a-416e-b3b8-d80d5736ac05", + "savedPayload": { + "position": { + "x": 19317.916330995024, + "y": 30495.258411127892 + }, + "targetPosition": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeMarkets": { + "type": "Exchange Markets", + "name": "New Exchange Markets", + "project": "Foundations", + "markets": [ + { + "type": "Market", + "name": "BTC/USD", + "config": "{ \n\"codeName\": \"Type the name of the market\"\n}", + "project": "Foundations", + "baseAsset": { + "type": "Market Base Asset", + "name": "BTC", + "project": "Foundations", + "id": "31402052-0118-4227-99af-ddc45cbaf16c", + "savedPayload": { + "position": { + "x": 19968.470173322454, + "y": 30506.38287229374 + }, + "targetPosition": { + "x": 19721.232316735848, + "y": 30676.30474337119 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "BTC", + "id": "d887b805-f5d0-4891-a269-48fdf45daa2a" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures COINM", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "BTC", + "Asset" + ] + ] + } + }, + "quotedAsset": { + "type": "Market Quoted Asset", + "name": "", + "project": "Foundations", + "id": "bc38184a-0805-4d3d-8638-9ce2b788a3d8", + "savedPayload": { + "position": { + "x": 19992.007902040805, + "y": 30805.45807241368 + }, + "targetPosition": { + "x": 19721.232316735848, + "y": 30676.30474337119 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "Asset", + "name": "New Asset", + "id": "4cfa0b52-31eb-47be-91d2-7ae695945cc4" + }, + "referenceParentCombinedNodePath": [ + [ + "My Crypto Ecosystem", + "Crypto Ecosystem" + ], + [ + "Trading Tests Pending", + "Crypto Exchanges" + ], + [ + "Binance Futures COINM", + "Crypto Exchange" + ], + [ + "New Exchange Assets", + "Exchange Assets" + ], + [ + "New Asset", + "Asset" + ] + ] + } + }, + "id": "683ec1f4-4cdd-46cd-968c-f00fe603c1eb", + "savedPayload": { + "position": { + "x": 19721.232316735848, + "y": 30676.30474337119 + }, + "targetPosition": { + "x": 19422.15711661591, + "y": 30699.842472089545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "c66c6d89-1390-4bb8-a3c4-dea1047e656b", + "savedPayload": { + "position": { + "x": 19422.15711661591, + "y": 30699.842472089545 + }, + "targetPosition": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "exchangeAccounts": { + "type": "Exchange Accounts", + "name": "New Exchange Accounts", + "project": "Foundations", + "userAccounts": [ + { + "type": "User Account", + "name": "New User Account", + "project": "Foundations", + "userAssets": { + "type": "User Assets", + "name": "New User Assets", + "project": "Foundations", + "assets": [], + "id": "04cb33d6-3f9e-496e-a440-272a9e110562", + "savedPayload": { + "position": { + "x": 19874.30196812517, + "y": 31167.719687453653 + }, + "targetPosition": { + "x": 19579.325495855985, + "y": 31113.04902980601 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "userKeys": { + "type": "User Keys", + "name": "New User Keys", + "project": "Foundations", + "keys": [ + { + "type": "Exchange Account Key", + "name": "New Exchange Account Key", + "config": "{ \n\"codeName\": \"DOUBLE_CLICK_ON_THIS_STRING_TO_SELECT_IT_XXX_DELETE_IT_AND_PASTE_YOUR_EXCHANGE_API_PUBLIC_KEY\",\n\"secret\": \"REPLACE_THIS_STRING_WITH_YOUR_API_KEY_SECRET\"\n,\n\"uid\": \"REPLACE_THIS_STRING_WITH_YOUR_UID_IF_NECESSARY\"\n,\n\"password\": \"REPLACE_THIS_STRING_WITH_YOUR_PASSWORD_IF_NECESSARY\"\n}", + "project": "Foundations", + "id": "1fe1a1d9-41b6-4635-a056-a4beb9787405", + "savedPayload": { + "position": { + "x": 19779.60961139625, + "y": 31678.63392446132 + }, + "targetPosition": { + "x": 19679.467553626117, + "y": 31395.841477133665 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "68177c10-f283-4a62-a242-667e2fc78473", + "savedPayload": { + "position": { + "x": 19679.467553626117, + "y": 31395.841477133665 + }, + "targetPosition": { + "x": 19579.325495855985, + "y": 31113.04902980601 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "7482b0e8-eb18-4d8b-9099-fdaeab1697ff", + "savedPayload": { + "position": { + "x": 19579.325495855985, + "y": 31113.04902980601 + }, + "targetPosition": { + "x": 19351.203706175977, + "y": 30918.214615306955 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "9fb42a2b-dd80-482d-8511-33ee5cd5de4c", + "savedPayload": { + "position": { + "x": 19351.203706175977, + "y": 30918.214615306955 + }, + "targetPosition": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d955c502-1516-49c2-82b1-28c7ad24c987", + "savedPayload": { + "position": { + "x": 19123.08191649597, + "y": 30723.3802008079 + }, + "targetPosition": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "fb5144e2-035a-4478-9a07-73f24e8193c9", + "savedPayload": { + "position": { + "x": 18824.00671637603, + "y": 30746.917929526255 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "signalsProviders": [], + "id": "7217b56c-e854-4c06-8b8a-d5d3c05a153d", + "savedPayload": { + "position": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "targetPosition": { + "x": 18731.301618063546, + "y": 31032.2348844148 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "" + } + } + }, + { + "type": "Charting Space", + "name": "New Charting Space", + "project": "Foundations", + "viewport": { + "type": "Viewport", + "name": "New Viewport", + "config": "{\"zoom\":\"5.00\"}", + "project": "Foundations", + "id": "01713f1d-91b8-44f9-9c5d-a0c12fd09037", + "savedPayload": { + "position": { + "x": 19200.806237131383, + "y": 24983.35640053908 + }, + "targetPosition": { + "x": 18900.806237131383, + "y": 24983.35640053908 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "frame": { + "position": { + "x": -2189.197939162836, + "y": -6992.422473301482 + } + } + } + }, + "projectDashboards": [], + "id": "21d2ec55-9e56-4652-8e96-c7e451262c36", + "savedPayload": { + "position": { + "x": 18900.806237131383, + "y": 24983.35640053908 + }, + "targetPosition": { + "x": 18900.806237131383, + "y": 24983.35640053908 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false, + "shortcutKey": "c" + } + } + }, + { + "type": "Plugins", + "name": "New Plugins", + "project": "Foundations", + "pluginProjects": [ + { + "type": "Plugin Project", + "name": "Foundations", + "config": "{ \n \"codeName\": \"Foundations\"\n}", + "project": "Foundations", + "pluginDataMines": { + "type": "Plugin Data Mines", + "name": "New Plugin Data Mines", + "project": "Foundations", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Candles", + "config": "{\"project\":\"Foundations\",\"fileName\":\"Candles\",\"folderName\":\"Data-Mines\",\"nodeType\":\"Data Mine\"}", + "project": "Foundations", + "pluginFilePosition": { + "type": "Plugin File Position", + "name": "Candles", + "project": "Foundations", + "id": "96c943e3-24bb-4484-91f3-577fc8590322", + "savedPayload": { + "position": { + "x": 18826.262986317583, + "y": 18693.545648831718 + }, + "targetPosition": { + "x": 30860.968084630065, + "y": 18305.13122451946 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "a8f57d23-d1d5-46c2-b3db-2de4d39f4ef5", + "savedPayload": { + "position": { + "x": 30860.968084630065, + "y": 18305.13122451946 + }, + "targetPosition": { + "x": 31103.673182942548, + "y": 18481.466800207203 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "cbc3d9be-5e59-45d8-bb0f-4ec82763691d", + "savedPayload": { + "position": { + "x": 31103.673182942548, + "y": 18481.466800207203 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTradingMines": { + "type": "Plugin Trading Mines", + "name": "New Plugin Trading Mines", + "project": "Foundations", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Masters", + "config": "{\"project\":\"Foundations\",\"fileName\":\"Masters\",\"folderName\":\"Trading-Mines\",\"nodeType\":\"Trading Mine\"}", + "project": "Foundations", + "pluginFilePosition": { + "type": "Plugin File Position", + "name": "Masters", + "project": "Foundations", + "id": "f9666873-c1d7-429b-b2e5-28557e4e2dc0", + "savedPayload": { + "position": { + "x": 24932.762986317583, + "y": 18730.10151122931 + }, + "targetPosition": { + "x": 31160.968084630065, + "y": 18087.168466117855 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "88ff556b-019f-4d72-a11f-dd0f7000188b", + "savedPayload": { + "position": { + "x": 31160.968084630065, + "y": 18087.168466117855 + }, + "targetPosition": { + "x": 31253.673182942548, + "y": 18372.4854210064 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "8d881813-3ab9-4e8b-ab5a-48dedab2dd19", + "savedPayload": { + "position": { + "x": 31253.673182942548, + "y": 18372.4854210064 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningMines": { + "type": "Plugin Learning Mines", + "name": "New Plugin Learning Mines", + "project": "Foundations", + "pluginFiles": [], + "id": "620d9b2d-8687-4314-a721-00d2d4ae774e", + "savedPayload": { + "position": { + "x": 31439.083379567513, + "y": 18372.4854210064 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTradingSystems": { + "type": "Plugin Trading Systems", + "name": "New Plugin Trading Systems", + "project": "Foundations", + "pluginFiles": [], + "id": "3569d452-c593-4e54-a356-7ff8c6b519f3", + "savedPayload": { + "position": { + "x": 31589.083379567513, + "y": 18481.466800207203 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningSystems": { + "type": "Plugin Learning Systems", + "name": "New Plugin Learning Systems", + "project": "Foundations", + "pluginFiles": [], + "id": "89b12837-d324-48e1-ab24-06e72a44858b", + "savedPayload": { + "position": { + "x": 31646.37828125503, + "y": 18657.802375894946 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTradingEngines": { + "type": "Plugin Trading Engines", + "name": "New Plugin Trading Engines", + "project": "Foundations", + "pluginFiles": [ + { + "type": "Plugin File", + "name": "Low-Frequency", + "config": "{\"project\":\"Foundations\",\"fileName\":\"Low-Frequency\",\"folderName\":\"Trading-Engines\",\"nodeType\":\"Trading Engine\"}", + "project": "Foundations", + "pluginFilePosition": { + "type": "Plugin File Position", + "name": "Low-Frequency", + "project": "Foundations", + "id": "956382d3-721e-4124-aece-597b73830f1d", + "savedPayload": { + "position": { + "x": 30913.49357619248, + "y": 24976.559102958174 + }, + "targetPosition": { + "x": 31831.788477879996, + "y": 19010.47352727043 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "4a1a4e3b-6f76-4c92-8bc4-7347154a8757", + "savedPayload": { + "position": { + "x": 31831.788477879996, + "y": 19010.47352727043 + }, + "targetPosition": { + "x": 31589.083379567513, + "y": 18834.13795158269 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "87a28762-63d0-45f7-bd39-9dea436d8244", + "savedPayload": { + "position": { + "x": 31589.083379567513, + "y": 18834.13795158269 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginLearningEngines": { + "type": "Plugin Learning Engines", + "name": "New Plugin Learning Engines", + "project": "Foundations", + "pluginFiles": [], + "id": "9a2cae33-b1d9-4e08-87f9-06ddb82fcce9", + "savedPayload": { + "position": { + "x": 31439.083379567513, + "y": 18943.11933078349 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginTutorials": { + "type": "Plugin Tutorials", + "name": "New Plugin Tutorials", + "project": "Foundations", + "pluginFiles": [], + "id": "d43cd863-57a0-4f8d-a4e8-f1f0bf779a4f", + "savedPayload": { + "position": { + "x": 31253.673182942548, + "y": 18943.11933078349 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "pluginApiMaps": { + "type": "Plugin API Maps", + "name": "New Plugin API Maps", + "project": "Foundations", + "pluginFiles": [], + "id": "39ffa05f-a73b-4d2d-8546-86da5cfecea3", + "savedPayload": { + "position": { + "x": 31103.673182942548, + "y": 18834.13795158269 + }, + "targetPosition": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c4e402d7-5228-408c-9d67-379d6ef40bae", + "savedPayload": { + "position": { + "x": 31346.37828125503, + "y": 18657.802375894946 + }, + "targetPosition": { + "x": 31046.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6", + "savedPayload": { + "position": { + "x": 31046.37828125503, + "y": 18657.802375894946 + }, + "targetPosition": { + "x": 31046.37828125503, + "y": 18657.802375894946 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Design Space", + "name": "My Design Space", + "project": "Foundations", + "spaceStyle": { + "type": "Space Style", + "name": "My Space Style", + "config": " {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"node\": {\n \"fontSize\": 16,\n \"imageSize\": 60,\n \"type\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"name\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"menuItem\": {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"fontColor\": \"UI_COLOR.WHITE\",\n \"fontSize\": 14,\n \"imageSize\": 14\n }\n }\n }", + "project": "Foundations", + "id": "fad0e429-f7a7-4b62-a2a5-2ead29b8f695", + "savedPayload": { + "position": { + "x": 25236.875, + "y": 8701.347826086958 + }, + "targetPosition": { + "x": 24936.875, + "y": 8701.347826086958 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "spaceSettings": { + "type": "Space Settings", + "name": "New Space Settings", + "config": "{\n \"node\": {\n \"distancePercentage\": 60,\n \"radiusPercentage\": 85,\n \"massPercentage\": 100,\n \"animationSteps\": 2, \n \"menuItem\": {\n \"widthPercentage\": 100,\n \"heightPercentage\": 60,\n \"radiusPercentage\": 90\n }\n },\n \"physics\": false\n}", + "project": "Foundations", + "id": "05c9d6d5-24c4-4eec-9aca-9668d6486fdd", + "savedPayload": { + "position": { + "x": 24636.875, + "y": 8701.347826086958 + }, + "targetPosition": { + "x": 24936.875, + "y": 8701.347826086958 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f8485ce5-67f3-4476-b9e2-80994e49c318", + "savedPayload": { + "position": { + "x": 24940.875, + "y": 10717.347826086958 + }, + "targetPosition": { + "x": 24940.875, + "y": 10717.347826086958 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "frame": { + "position": { + "x": 255, + "y": 588.3125 + } + } + } + }, + { + "type": "Foundations Project", + "name": "New Foundations Project", + "project": "Foundations", + "projectDefinition": { + "type": "Project Definition", + "name": "Foundations", + "config": "{ \n \"codeName\": \"Foundations\"\n}", + "project": "Foundations", + "id": "a2a04e12-604e-43f8-a986-1b8ca3b043cb", + "savedPayload": { + "position": { + "x": 19203, + "y": 10733.5 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "spaces": { + "type": "Spaces", + "name": "New Spaces", + "project": "Foundations", + "id": "4d0ee814-4e48-4688-9cc5-7ee03de5192b", + "savedPayload": { + "position": { + "x": 19053, + "y": 10993.307621135331 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "mines": { + "type": "Mines", + "name": "New Mines", + "project": "Foundations", + "id": "b979e3a3-9316-4e5a-831b-c503b4b0e507", + "savedPayload": { + "position": { + "x": 18753, + "y": 10993.307621135331 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "trading": { + "type": "Trading", + "name": "New Trading", + "project": "Foundations", + "id": "7c24591e-b252-4be3-8952-e4da0a52f467", + "savedPayload": { + "position": { + "x": 18603, + "y": 10733.5 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "learning": { + "type": "Learning", + "name": "New Learning", + "project": "Foundations", + "id": "7a0b6167-5554-497a-b150-8886120539c2", + "savedPayload": { + "position": { + "x": 18753, + "y": 10473.692378864669 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "otherHierarchies": { + "type": "Other Hierarchies", + "name": "New Other Hierarchies", + "project": "Foundations", + "id": "0a1ff755-8e0b-4f62-976e-df76c8139c6f", + "savedPayload": { + "position": { + "x": 19053, + "y": 10473.692378864669 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "cf9f8b3b-77c6-43c6-b01f-95cf366a91f6", + "savedPayload": { + "position": { + "x": 18903, + "y": 10733.5 + }, + "targetPosition": { + "x": 18903, + "y": 10733.5 + }, + "floatingObject": { + "isPinned": true, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Trading System", + "name": "New Trading System", + "project": "Foundations", + "tradingStrategies": [ + { + "type": "Trading Strategy", + "name": "New Trading Strategy", + "project": "Foundations", + "triggerStage": { + "type": "Trigger Stage", + "name": "New Trigger Stage", + "project": "Foundations", + "triggerOn": { + "type": "Trigger On Event", + "name": "New Trigger On Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "64a86fa1-8ce7-4bca-a684-20f8d1126d70", + "savedPayload": { + "position": { + "x": 30720.690987174497, + "y": 30424.038745267728 + }, + "targetPosition": { + "x": 30854.341965802752, + "y": 30492.13732022866 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "e21a0776-acd7-4cb2-9f5f-2bcbfa6e89e0", + "savedPayload": { + "position": { + "x": 30854.341965802752, + "y": 30492.13732022866 + }, + "targetPosition": { + "x": 30987.992944431007, + "y": 30560.23589518959 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "bb7fdf98-25b3-4282-81cc-0658dcf6d484", + "savedPayload": { + "position": { + "x": 30987.992944431007, + "y": 30560.23589518959 + }, + "targetPosition": { + "x": 31121.643923059262, + "y": 30628.334470150523 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "1f62cb3d-19fa-4717-a113-c0915e8ceaa0", + "savedPayload": { + "position": { + "x": 31121.643923059262, + "y": 30628.334470150523 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "triggerOff": { + "type": "Trigger Off Event", + "name": "New Trigger Off Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "f11bf186-ccfd-4e60-8260-f52cdf898bb4", + "savedPayload": { + "position": { + "x": 31069.884705062545, + "y": 30125.799135334357 + }, + "targetPosition": { + "x": 31116.237254218788, + "y": 30268.45761277863 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "7051b998-d100-48b2-90a4-d5e3f361e334", + "savedPayload": { + "position": { + "x": 31116.237254218788, + "y": 30268.45761277863 + }, + "targetPosition": { + "x": 31162.58980337503, + "y": 30411.116090222906 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "d76e94fb-d895-4634-90f9-667d0367e210", + "savedPayload": { + "position": { + "x": 31162.58980337503, + "y": 30411.116090222906 + }, + "targetPosition": { + "x": 31208.942352531274, + "y": 30553.77456766718 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "0d1dc41a-7185-43a8-814e-e6a5300e6a1d", + "savedPayload": { + "position": { + "x": 31208.942352531274, + "y": 30553.77456766718 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "takePosition": { + "type": "Take Position Event", + "name": "New Take Position Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "c8cb9f04-5192-4b0c-b87b-d614ef07ec58", + "savedPayload": { + "position": { + "x": 31527.689201531244, + "y": 30161.829130598435 + }, + "targetPosition": { + "x": 31459.590626570312, + "y": 30295.48010922669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "3094206b-682a-481a-9b36-5d86eb621ef5", + "savedPayload": { + "position": { + "x": 31459.590626570312, + "y": 30295.48010922669 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 30429.131087854945 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "7a3d4c6a-147e-4b75-8914-4ca3972ab3d5", + "savedPayload": { + "position": { + "x": 31391.49205160938, + "y": 30429.131087854945 + }, + "targetPosition": { + "x": 31323.39347664845, + "y": 30562.7820664832 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "0e1d431a-e1be-439e-9f86-2771f5f3fde4", + "savedPayload": { + "position": { + "x": 31323.39347664845, + "y": 30562.7820664832 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "f8551c2e-bbb4-4cba-ab56-d7873f725f07", + "savedPayload": { + "position": { + "x": 31255.294901687517, + "y": 30696.433045111455 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "openStage": { + "type": "Open Stage", + "name": "New Open Stage", + "config": "{\n\"roundingErrorCorrectionFactor\": 1.01, \n\"absoluteDustInBaseAsset\": 0,\n\"absoluteDustInQuotedAsset\": 0 \n}", + "project": "Foundations", + "initialTargets": { + "type": "Initial Targets", + "name": "New Initial Targets", + "project": "Foundations", + "targetRate": { + "type": "Target Rate", + "name": "New Target Rate", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "c2cc6b16-4d23-4fb5-ba60-a05c6758f6ea", + "savedPayload": { + "position": { + "x": 31284.964286449067, + "y": 30023.69772550875 + }, + "targetPosition": { + "x": 31461.29986213681, + "y": 30266.402823821234 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5febb99a-093e-4ae2-afa8-e28743b302c3", + "savedPayload": { + "position": { + "x": 31461.29986213681, + "y": 30266.402823821234 + }, + "targetPosition": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInBaseAsset": { + "type": "Target Size In Base Asset", + "name": "New Target Size In Base Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "4f17a02a-185b-4c85-b26f-85667100b1a7", + "savedPayload": { + "position": { + "x": 31731.49611684869, + "y": 29916.494917776636 + }, + "targetPosition": { + "x": 31684.565777336622, + "y": 30212.801419955176 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "bba4131a-dd63-490c-97a7-819c484a9a6a", + "savedPayload": { + "position": { + "x": 31684.565777336622, + "y": 30212.801419955176 + }, + "targetPosition": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInQuotedAsset": { + "type": "Target Size In Quoted Asset", + "name": "New Target Size In Quoted Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "f9ae8796-8a5b-421e-b2b1-8741ea1a8cc2", + "savedPayload": { + "position": { + "x": 32123.045634449518, + "y": 30156.43677075823 + }, + "targetPosition": { + "x": 31880.340536137035, + "y": 30332.772346445974 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "19f04a50-0d33-4c0b-a723-1dd922de9b57", + "savedPayload": { + "position": { + "x": 31880.340536137035, + "y": 30332.772346445974 + }, + "targetPosition": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "d41b3907-2ae7-4d87-8b10-f80fc30107d1", + "savedPayload": { + "position": { + "x": 31637.635437824552, + "y": 30509.107922133717 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "openExecution": { + "type": "Open Execution", + "name": "New Open Execution", + "project": "Foundations", + "executionAlgorithms": [], + "id": "90f51fa8-874d-460c-9f40-b4c533c0e75f", + "savedPayload": { + "position": { + "x": 31833.410196624965, + "y": 30629.078848624515 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeStageEvent": { + "type": "Close Stage Event", + "name": "New Close Stage Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "76f03cf3-14ab-444d-847d-a3d86244236c", + "savedPayload": { + "position": { + "x": 32183.31810266957, + "y": 30899.27510333639 + }, + "targetPosition": { + "x": 32035.1648515803, + "y": 30875.809933580356 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "da3fb954-8ee5-4537-98ef-7ae9a9d18ade", + "savedPayload": { + "position": { + "x": 32035.1648515803, + "y": 30875.809933580356 + }, + "targetPosition": { + "x": 31887.011600491027, + "y": 30852.344763824323 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "230c7c45-dfe4-44cf-96fd-103ccc94c7ec", + "savedPayload": { + "position": { + "x": 31887.011600491027, + "y": 30852.344763824323 + }, + "targetPosition": { + "x": 31738.858349401755, + "y": 30828.87959406829 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "9516578c-09f5-4e5a-9512-bd6a972e653b", + "savedPayload": { + "position": { + "x": 31738.858349401755, + "y": 30828.87959406829 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "a4bc39be-42fd-4439-9397-d4f9b72c86ae", + "savedPayload": { + "position": { + "x": 31590.705098312483, + "y": 30805.414424312257 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "manageStage": { + "type": "Manage Stage", + "name": "New Manage Stage", + "project": "Foundations", + "managedStopLoss": { + "type": "Managed Stop Loss", + "name": "New Managed Stop Loss", + "project": "Foundations", + "phases": [ + { + "type": "Phase", + "name": "New Phase", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "2355e7d2-8df6-40ea-89b5-c14871b45a46", + "savedPayload": { + "position": { + "x": 32038.23995122821, + "y": 31205.12338415819 + }, + "targetPosition": { + "x": 31889.061666922968, + "y": 31189.44411466804 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "moveToPhaseEvents": [], + "announcements": [], + "id": "6c14c525-08b9-47ab-a147-10a974ae6ceb", + "savedPayload": { + "position": { + "x": 31889.061666922968, + "y": 31189.44411466804 + }, + "targetPosition": { + "x": 31739.883382617725, + "y": 31173.76484517789 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "b6587a2b-f666-49b8-a613-f0e2364d77ca", + "savedPayload": { + "position": { + "x": 31739.883382617725, + "y": 31173.76484517789 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 31158.085575687743 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "managedTakeProfit": { + "type": "Managed Take Profit", + "name": "New Managed Take Profit", + "project": "Foundations", + "phases": [ + { + "type": "Phase", + "name": "New Phase", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "ec410d91-2186-4c11-9298-a7e728004bea", + "savedPayload": { + "position": { + "x": 31773.736587696596, + "y": 31569.18103162692 + }, + "targetPosition": { + "x": 31712.726091235225, + "y": 31432.149212980526 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "moveToPhaseEvents": [], + "announcements": [], + "id": "e0f595de-f085-4890-bc73-881928da8d60", + "savedPayload": { + "position": { + "x": 31712.726091235225, + "y": 31432.149212980526 + }, + "targetPosition": { + "x": 31651.715594773854, + "y": 31295.117394334135 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "5ef91d3f-b318-4ff2-9690-d79830001df6", + "savedPayload": { + "position": { + "x": 31651.715594773854, + "y": 31295.117394334135 + }, + "targetPosition": { + "x": 31590.705098312483, + "y": 31158.085575687743 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "4e67c91b-a870-48e7-86b6-97d1ffa7df85", + "savedPayload": { + "position": { + "x": 31590.705098312483, + "y": 31158.085575687743 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeStage": { + "type": "Close Stage", + "name": "New Close Stage", + "config": "{\n\"roundingErrorCorrectionFactor\": 1.01, \n\"absoluteDustInBaseAsset\": 0,\n\"absoluteDustInQuotedAsset\": 0 \n}", + "project": "Foundations", + "initialTargets": { + "type": "Initial Targets", + "name": "New Initial Targets", + "project": "Foundations", + "targetRate": { + "type": "Target Rate", + "name": "New Target Rate", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "ff36b87d-b2af-432d-aad7-9f425d05da30", + "savedPayload": { + "position": { + "x": 31962.12596138647, + "y": 31719.77910877002 + }, + "targetPosition": { + "x": 31676.809006497926, + "y": 31627.074010457538 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "0c4588ed-6aad-4e43-aea2-fd857cdde709", + "savedPayload": { + "position": { + "x": 31676.809006497926, + "y": 31627.074010457538 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInBaseAsset": { + "type": "Target Size In Base Asset", + "name": "New Target Size In Base Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "b63cde4a-ffa7-4d55-827e-fdbe25d55f92", + "savedPayload": { + "position": { + "x": 31663.886351453108, + "y": 32068.972826658075 + }, + "targetPosition": { + "x": 31527.689201531244, + "y": 31801.670869401565 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "888c1960-5e4e-40bf-86a5-0733ad54d2d4", + "savedPayload": { + "position": { + "x": 31527.689201531244, + "y": 31801.670869401565 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "targetSizeInQuotedAsset": { + "type": "Target Size In Quoted Asset", + "name": "New Target Size In Quoted Asset", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "555c938b-6d6a-43dc-89f2-864738616991", + "savedPayload": { + "position": { + "x": 31206.081854984415, + "y": 32105.002821922146 + }, + "targetPosition": { + "x": 31298.786953296898, + "y": 31819.6858670336 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "a8c951b1-9c11-4f6d-8461-fb935cf062d8", + "savedPayload": { + "position": { + "x": 31298.786953296898, + "y": 31819.6858670336 + }, + "targetPosition": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f33dc477-014b-4b16-a6bb-0c347f5a4992", + "savedPayload": { + "position": { + "x": 31391.49205160938, + "y": 31534.368912145055 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeExecution": { + "type": "Close Execution", + "name": "New Close Execution", + "project": "Foundations", + "executionAlgorithms": [], + "id": "b79f9f3f-01e6-417f-b644-825e17427e7c", + "savedPayload": { + "position": { + "x": 31162.589803375035, + "y": 31552.38390977709 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "closeStageEvent": { + "type": "Close Stage Event", + "name": "New Close Stage Event", + "project": "Foundations", + "situations": [ + { + "type": "Situation", + "name": "New Situation", + "project": "Foundations", + "conditions": [ + { + "type": "Condition", + "name": "New Condition", + "project": "Foundations", + "javascriptCode": { + "type": "Javascript Code", + "name": "New Javascript Code", + "code": "// Type your code", + "project": "Foundations", + "id": "c6103247-6024-4e7d-81a5-833dc6d8d3ff", + "savedPayload": { + "position": { + "x": 30720.690987174497, + "y": 31539.461254732272 + }, + "targetPosition": { + "x": 30854.341965802752, + "y": 31471.36267977134 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8655ace0-0cba-4682-aa94-795a3d34ce9a", + "savedPayload": { + "position": { + "x": 30854.341965802752, + "y": 31471.36267977134 + }, + "targetPosition": { + "x": 30987.992944431007, + "y": 31403.26410481041 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "42267582-434d-4698-81d6-7ae8093d9a3a", + "savedPayload": { + "position": { + "x": 30987.992944431007, + "y": 31403.26410481041 + }, + "targetPosition": { + "x": 31121.643923059262, + "y": 31335.165529849477 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "announcements": [], + "id": "8ebc6ab4-56ff-4afc-9741-a5ea2d8495f3", + "savedPayload": { + "position": { + "x": 31121.643923059262, + "y": 31335.165529849477 + }, + "targetPosition": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "announcements": [], + "id": "3baca3ee-6498-4db5-8ba9-d7c9640907cf", + "savedPayload": { + "position": { + "x": 31255.294901687517, + "y": 31267.066954888545 + }, + "targetPosition": { + "x": 31348, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "6b8ed032-1481-4e79-bcfa-b4d572e21df3", + "savedPayload": { + "position": { + "x": 31348, + "y": 30981.75 + }, + "targetPosition": { + "x": 31048, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "dynamicIndicators": { + "type": "Dynamic Indicators", + "name": "New Dynamic Indicators", + "project": "Foundations", + "indicatorFunctions": [ + { + "type": "Indicator Function", + "name": "New Indicator Function", + "config": "{ \n \"codeName\": \"\"\n}", + "project": "Foundations", + "formula": { + "type": "Formula", + "name": "New Formula", + "code": "// Type your formula", + "project": "Foundations", + "id": "3e3301b4-6742-49c8-82d6-20cd3453365f", + "savedPayload": { + "position": { + "x": 30148, + "y": 30981.75 + }, + "targetPosition": { + "x": 30448, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "21cc000a-cdbd-4c02-b1e4-4c4560861792", + "savedPayload": { + "position": { + "x": 30448, + "y": 30981.75 + }, + "targetPosition": { + "x": 30748, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "id": "ec700c19-7aee-4180-bb1f-5493f518e7ee", + "savedPayload": { + "position": { + "x": 30748, + "y": 30981.75 + }, + "targetPosition": { + "x": 31048, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "91a1d0d1-2a1a-45d5-a52b-b2dc5502339f", + "savedPayload": { + "position": { + "x": 31048, + "y": 30981.75 + }, + "targetPosition": { + "x": 31048, + "y": 30981.75 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ] +} \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/back-learning-session.json b/Projects/Foundations/Schemas/App-Schema/back-learning-session.json index ab1db3ae2..a2aa63be7 100644 --- a/Projects/Foundations/Schemas/App-Schema/back-learning-session.json +++ b/Projects/Foundations/Schemas/App-Schema/back-learning-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Resume Learning Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/backtesting-session.json b/Projects/Foundations/Schemas/App-Schema/backtesting-session.json index ec1c618a6..f71d6bd28 100644 --- a/Projects/Foundations/Schemas/App-Schema/backtesting-session.json +++ b/Projects/Foundations/Schemas/App-Schema/backtesting-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json b/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json index 3c441323c..b4a3af275 100644 --- a/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json +++ b/Projects/Foundations/Schemas/App-Schema/data-mine-data-dependencies.json @@ -14,7 +14,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Data Dependency", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Data-Mining" }, { "action": "Delete UI Object", diff --git a/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json b/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json index 794f179a6..8a3c088d8 100644 --- a/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json +++ b/Projects/Foundations/Schemas/App-Schema/forward-testing-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/live-learning-session.json b/Projects/Foundations/Schemas/App-Schema/live-learning-session.json index 84bafb5d8..0f470182a 100644 --- a/Projects/Foundations/Schemas/App-Schema/live-learning-session.json +++ b/Projects/Foundations/Schemas/App-Schema/live-learning-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Resume Learning Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Machine-Learning" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/live-trading-session.json b/Projects/Foundations/Schemas/App-Schema/live-trading-session.json index 6dfac97d8..d76898c43 100644 --- a/Projects/Foundations/Schemas/App-Schema/live-trading-session.json +++ b/Projects/Foundations/Schemas/App-Schema/live-trading-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json b/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json index 591fca594..88f5ff479 100644 --- a/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json +++ b/Projects/Foundations/Schemas/App-Schema/paper-trading-session.json @@ -15,7 +15,8 @@ "secondaryIcon": "stop", "iconPathOn": "run", "iconPathOff": "run", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Resume Trading Session", @@ -31,7 +32,8 @@ "secondaryIcon": "stop", "iconPathOn": "resume", "iconPathOff": "resume", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Algorithmic-Trading" }, { "action": "Configure", diff --git a/Projects/Foundations/Schemas/App-Schema/process-definition.json b/Projects/Foundations/Schemas/App-Schema/process-definition.json index 1c14c333c..1eb76e7b4 100644 --- a/Projects/Foundations/Schemas/App-Schema/process-definition.json +++ b/Projects/Foundations/Schemas/App-Schema/process-definition.json @@ -35,7 +35,7 @@ }, "level": 1, "attachingRules": { - "compatibleTypes": "->Sensor Bot->API Data Fetcher Bot->Indicator Bot->Trading Bot->Learning Bot->" + "compatibleTypes": "->Data-Mining|Sensor Bot->Data-Mining|API Data Fetcher Bot->Data-Mining|Indicator Bot->Trading Bot->Learning Bot->" }, "childrenNodesProperties": [ { diff --git a/Projects/Foundations/Schemas/App-Schema/process-dependencies.json b/Projects/Foundations/Schemas/App-Schema/process-dependencies.json index 6d625bc17..d1602b730 100644 --- a/Projects/Foundations/Schemas/App-Schema/process-dependencies.json +++ b/Projects/Foundations/Schemas/App-Schema/process-dependencies.json @@ -20,7 +20,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Data Mine Data Dependencies", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Data-Mining" }, { "action": "Add UI Object", diff --git a/Projects/Foundations/Schemas/App-Schema/process-output.json b/Projects/Foundations/Schemas/App-Schema/process-output.json index de970c159..9a558f70f 100644 --- a/Projects/Foundations/Schemas/App-Schema/process-output.json +++ b/Projects/Foundations/Schemas/App-Schema/process-output.json @@ -20,7 +20,8 @@ "confirmationLabel": "Confirm to Proceed", "workDoneLabel": "Done", "relatedUiObject": "Output Dataset", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Data-Mining" }, { "action": "Delete UI Object", diff --git a/Projects/Foundations/Schemas/App-Schema/product-definition.json b/Projects/Foundations/Schemas/App-Schema/product-definition.json index a10f42c92..22d229deb 100644 --- a/Projects/Foundations/Schemas/App-Schema/product-definition.json +++ b/Projects/Foundations/Schemas/App-Schema/product-definition.json @@ -52,7 +52,7 @@ "compatibleTypes": "->Plotter Module->" }, "attachingRules": { - "compatibleTypes": "->Sensor Bot->API Data Fetcher Bot->Indicator Bot->Trading Bot->Learning Bot->Product Definition Folder->" + "compatibleTypes": "->Data-Mining|Sensor Bot->Data-Mining|API Data Fetcher Bot->Data-Mining|Indicator Bot->Trading Bot->Learning Bot->Product Definition Folder->" }, "childrenNodesProperties": [ { diff --git a/Projects/Foundations/Schemas/App-Schema/twitter-bot.json b/Projects/Foundations/Schemas/App-Schema/twitter-bot.json index 27f8ab800..231abf004 100644 --- a/Projects/Foundations/Schemas/App-Schema/twitter-bot.json +++ b/Projects/Foundations/Schemas/App-Schema/twitter-bot.json @@ -37,5 +37,5 @@ "compatibleTypes": "->Social Bots->" }, "childrenNodesProperties": [], - "propertyNameAtParent": "TwitterBots" + "propertyNameAtParent": "twitterBots" } diff --git a/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json b/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json index e7861921b..5482254f4 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json +++ b/Projects/Foundations/Schemas/Docs-Topics/A/App/App-Commands/app-commands-001-app-contribute-command.json @@ -9,7 +9,8 @@ { "language": "ES", "text": "Este comando te permite contribuir con trabajo al proyecto. El aporte va al repositorio de Superalgos a través de un Pull Request de tu fork de Superalgos.", - "updated": 1628205171216 + "updated": 1628205171216, + "style": "Definition" } ] }, @@ -17,31 +18,73 @@ { "style": "Text", "text": "This command will send all changes you have made in Docs pages but also on any file within the Superalgos folder (except for My-Workspaces, Data-Storage, and My-Logs folders) to your fork at Github.com. It will also send them from your fork to the main Superalgos Repository. It will do it specifically from the Current Branch to the Contributions Branch mentioned at the footer of this page.", - "updated": 1622028842412 + "updated": 1622028842412, + "translations": [ + { + "language": "ES", + "text": "Este comando envia todos los cambios que hayas hecho en las paginas de documentos pero también de but also en cualquier archivo de la carpeta de Superalgos (a excepción de My-Workspaces, Data-Storage, (Archivo de datos de mi espacio de trabajo) y My-Logs folders (mis carpetas de registros) a tu bifurcación en Github.com. También serán enviados desde tu bifurcación al repositorio principal de Superalgos Lo hará específicamente desde la rama actual a la rama de las contribuciones mencionados al final de ésta página.", + "updated": 1633175695567 + } + ] }, { "style": "Warning", "text": "Never use your Superalgos folder to store personal files, as the whole folder but the few exceptions mentioned above are subject to be sent over the Internet to a public site.", - "updated": 1622029162278 + "updated": 1622029162278, + "translations": [ + { + "language": "ES", + "text": "Nunca utilice su carpeta de Superalgos para almacenar archivos personales, ya que toda la carpeta, salvo las pocas excepciones mencionadas arriba, están sujetas a ser enviadas a través de internet a un sitio público.", + "updated": 1633175880707 + } + ] }, { "style": "Important", "text": "In most cases, contributions must go from the develop branch to the develop branch, or from the plugins-docs branch to the plugins-docs branch, unless you have previously agreed with team members that you will send a contribution from master to master.", - "updated": 1622028905753 + "updated": 1622028905753, + "translations": [ + { + "language": "ES", + "text": "En la mayoría de los casos,, las contribuciones deben ir desde la rama de desarrollo a la rama de desarrollo, o desde la rama de plugins-docs (documentos complementarios) a la rama de plugins-docs, salvo que previamente haya acordado con los miembros del equipo que enviará una contribución de master a master.", + "updated": 1633176160361 + } + ] }, { "style": "Text", "text": "Master is our stable branch and it is very unlikely that we are going to merge contributions there. Instead, all contributions are expected to go to the develop or the plugins-docs branches, where many users are testing that branch every day. Contributions of plugins and Docs may reach the master branch often. Contributions to the develop branch will reach the master branch on the next release.", - "updated": 1622029260459 + "updated": 1622029260459, + "translations": [ + { + "language": "ES", + "text": "Master ( Maestra) es una rama estable y es muy poco porbable que vayamos a emerger contribuciones allí. En cambio todas las contribuciones se espera que vayan a as ramas de desarrollo o de documentos complementarios, donde muchos usuarios están chequeando esa rama cada día. Las contribuciones de enchufes o documentos puede alcanzar a maenudo la rama maestra. Contribuciones a la rama de desarrollo llegará a la rama maestra en la siguiente liberación.", + "updated": 1633176639433 + } + ] }, { "style": "Note", "text": "It is also very unlikely that contributions coming from the master branch will be merged into the develop branch, since that can usually lead to merging conflicts.", - "updated": 1622029116935 + "updated": 1622029116935, + "translations": [ + { + "language": "ES", + "text": "Es también muy poco probable que las contribuciones provenientes de la rama maestra será traída en la rama de desarrollo, ya que ello puede provocar que emergan conflictos.", + "updated": 1633176834093 + } + ] }, { "style": "Success", - "text": "Check the footer of the Docs to verify what branches you are operating with before submitting your contributions!" + "text": "Check the footer of the Docs to verify what branches you are operating with before submitting your contributions!", + "translations": [ + { + "language": "ES", + "text": "Chequear el pie de los documentos par qverificar que en que ramas está operando antes de enviar su contribución", + "updated": 1633176955159 + } + ] }, { "style": "Title", diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json b/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json index cd41f8a84..a030dd605 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Community/Community-Workspaces/community-workspaces-001-plugin-workspaces.json @@ -9,7 +9,8 @@ { "language": "ES", "text": "Superalgos conecta con varios plugin workspaces configurados por la comunidad para facilitar la incorporación de usuarios. Este tema cubre cada uno de ellos y explica su propósito.", - "updated": 1628037130662 + "updated": 1628037130662, + "style": "Definition" } ] }, @@ -17,7 +18,14 @@ { "style": "Text", "text": "Each plugin workspace shipping with Superalgos was built with a specific purpose. ", - "updated": 1616172565179 + "updated": 1616172565179, + "translations": [ + { + "language": "ES", + "text": "Cada plugin workspace incluído en Superalgos ha sido cnstruido para un propósito específico.", + "updated": 1633281831625 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json index 80db348fc..bd06ddcfe 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-005-how-to-contribute-translations.json @@ -4,23 +4,55 @@ "type": "How to Contribute Translations", "definition": { "text": "The Docs are originally written in English. Making Superalgos more accessible is a key endeavor to grow the Community and the user base. Translating tutorials and software documentation into languages other than English is of huge value!", - "updated": 1613822257340 + "updated": 1613822257340, + "translations": [ + { + "language": "ES", + "text": "Los Docs (documentos) son originalmente escritos en Ingles. Hacer a Superalgos más accesible es un esfuerzo clave para el crecimiento de la comunidad y la base de usuarios. Traducir tutoriales y documentación del software a otros idiomas que no sean el Inglés es un aporte muy valioso!", + "updated": 1633170996967, + "style": "Definition" + } + ] }, "paragraphs": [ { "style": "Title", "text": "Read About Contributing to the Docs", - "updated": 1613822300139 + "updated": 1613822300139, + "translations": [ + { + "language": "ES", + "text": "Read About Contributing to the Docs (Leer sobre como contribuir a los Docs)", + "updated": 1633171160951, + "style": "Title" + } + ] }, { "style": "Text", "text": "Translations are a particular case of contributing to the Docs. Please read the How to Contribute to the Docs page first, and come back here for the details about how we deal with translations in particular.", - "updated": 1613822394353 + "updated": 1613822394353, + "translations": [ + { + "language": "ES", + "text": "Las traducciones son un caso particular de contribuir con los documentos. Por favor leer primero la página de como contribuir con los documentos, y regresar aqui para los detalles de como nosotros nos manejamos particularmente con las traducciones.", + "updated": 1633171406067, + "style": "Text" + } + ] }, { "style": "Title", "text": "About Translations", - "updated": 1613822457097 + "updated": 1613822457097, + "translations": [ + { + "language": "ES", + "text": "About Translations ( Acerca de las traducciones)", + "updated": 1633171444432, + "style": "Title" + } + ] }, { "style": "Include", @@ -30,81 +62,197 @@ { "style": "Text", "text": "The system stores the content of each Docs Page in a single file, regardless of how many translations may exist for each page.", - "updated": 1613822896070 + "updated": 1613822896070, + "translations": [ + { + "language": "ES", + "text": "El sistema guarda el contenido de cada pagina de los Documentos en un solo archivo, independientemente de cuantas traducciones existan por cada página.", + "updated": 1633171834036, + "style": "Text" + } + ] }, { "style": "Text", "text": "Actually, translations exist at the level of each paragraph. This means that, for each paragraph in a page, there may be as many translations as there are supported languages.", - "updated": 1613825539396 + "updated": 1613825539396, + "translations": [ + { + "language": "ES", + "text": "Actualmente, existen al nivel de cada párrafo. Esto significa que, por cada párrafo de la página, puede haber tantas traducciones como lenguages de soporte hayan.", + "updated": 1633171706597, + "style": "Text" + } + ] }, { "style": "Success", "text": "The above doesn't affect your work directly, but it is worth noting because it means that many contributors may be working on the same page at any point in time. Hence the need to constantly update and to submit contributions frequently.", - "updated": 1613823174025 + "updated": 1613823174025, + "translations": [ + { + "language": "ES", + "text": "Lo mencionado no afecta su trabajo directamente,pero es bueno tenerlo en cuenta ya que significa que muchos contribuyentes pueden estar trabajando la misma página al mismo tiempo. He aqui la necesidad de actualizar constantemente y de solicitar la contribución a menudo.", + "updated": 1633172414535, + "style": "Success" + } + ] }, { "style": "Title", "text": "Best Practices", - "updated": 1613824072677 + "updated": 1613824072677, + "translations": [ + { + "language": "ES", + "text": "Best Practices (Las mejores prácticas)", + "updated": 1633172460565, + "style": "Title" + } + ] }, { "style": "List", "text": "As explained in the How to Contribute to the Docs page, you must switch your Contributions Branch and your Current Branch to the develop branch. Remember to restart the app after the switch.", - "updated": 1616762259778 + "updated": 1616762259778, + "translations": [ + { + "language": "ES", + "text": "Como fue explicado en la página de How to Contribute to the Docs, debe cambiar su Contributions Branch (rama de contribución) y su Current Branch (rama actual) a la rama de desarrollo. Recuerde de recomenzar la app luego del cambio.", + "updated": 1633277617230 + } + ] }, { "style": "List", "text": "Make sure your system is up to date running the app.update command.", - "updated": 1616762308286 + "updated": 1616762308286, + "translations": [ + { + "language": "ES", + "text": "Asegúrese de que sus sitema esté actualizado haciendo correr el comando app.update.", + "updated": 1633277826500 + } + ] }, { "style": "List", - "text": "Then, switch to the language you wish to translate to." + "text": "Then, switch to the language you wish to translate to.", + "translations": [ + { + "language": "ES", + "text": "Entonces, cambie el idioma al cual desea traducir.", + "updated": 1633277782209 + } + ] }, { "style": "List", "text": "To translate a paragraph, right-click to edit the content and replace the English text with your translation. That's it!", - "updated": 1613825599051 + "updated": 1613825599051, + "translations": [ + { + "language": "ES", + "text": "Para traducir un párrafo cliquear botón derecho editar el contenido y reemplace e texto en Inglés con su traducción. Eso es!", + "updated": 1633277934174 + } + ] }, { "style": "List", "text": "You may find it easier to write your translations in a separate text editor, where you may use spelling and grammar-checking software. Once you've double-checked your translation, you may come back to Superalgos to replace each paragraph with the translated version.", - "updated": 1613825640442 + "updated": 1613825640442, + "translations": [ + { + "language": "ES", + "text": "Puede encontrar más fácil escribir su traducción en un editor de texto separado, donde puede utilizar corrector ortográfico y gramatical. Ona vez que haya doble chequeado su traducción, puede volver a Superalgos para reemplazar cada parrafo con la versión traducida.", + "updated": 1633278119180 + } + ] }, { "style": "List", "text": "Remember that translations exist at the level of each paragraph. Always make sure that the translation you input matches the correct paragraph. This is important because if a paragraph is updated in the English version, all translations will get a notice that the particular paragraph may be outdated.", - "updated": 1613824142107 + "updated": 1613824142107, + "translations": [ + { + "language": "ES", + "text": "Recuerde que las traducciones existen al nivel de cada párrafo. Siempre asegúrese de que la traducción que introduzca corresponda con el párrafo adecuado. TEsto es impotante porque si el pàrrafo es actualizado en la versión en Inglés, todas las traducciones recibirán un aviso de que ese parrafo en particular puede necesitar actualización.", + "updated": 1633278353289 + } + ] }, { "style": "List", "text": "Participate in the Superalgos Docs Group. Let people know what part of the Docs or which Tutorial you will be working with. This basic coordination will help avoid conflicts when more than one user works on the same pages at the same time.", - "updated": 1616762526615 + "updated": 1616762526615, + "translations": [ + { + "language": "ES", + "text": "Participe en Superalgos Docs Group ( grupo de documentos de superalgos). Permita que la gente sepa que parte de los documentos o que tutoriales va a estar trabajando. Esto coordinación básica ayudará a evitar conflictos cuando más de un usuario trabajan en la misma página al mismo tiempo.", + "updated": 1633278524671 + } + ] }, { "style": "Success", "text": "You may start with the translation of the Docs in [Language] page that you land on after you switch the language.", - "updated": 1613823805871 + "updated": 1613823805871, + "translations": [ + { + "language": "ES", + "text": "Puede comenzar con la traducción de los documentos de la pagina [Language] (idioma) que abra luego de cambiar el idioma.", + "updated": 1633278662035 + } + ] }, { "style": "Title", "text": "Translating Tutorials", - "updated": 1613823828960 + "updated": 1613823828960, + "translations": [ + { + "language": "ES", + "text": "Translating Tutorials Traduciendo tutoriales", + "updated": 1633278676243 + } + ] }, { "style": "Text", "text": "Tutorial pages present certain challenges that we must take into account while translating: the first and foremost is that the space available in the tutorial window is limited. This means that you have to be mindful of the length of the translated text and that you must test each of the tutorial steps to make sure the translation fits the available space.", - "updated": 1613825681579 + "updated": 1613825681579, + "translations": [ + { + "language": "ES", + "text": "Las páginas de los Tutorial presentan ciertos desafíos que debemos tener en cuenta mientras traducimos: el primero y principal es que el espacio disponible en la ventana del tutorial es limitado. Esto significa que debe considerar la extensión del texto traducido y que debe probar cada paso del tutorial para asegurarse que la traducción cabe en el espacio disponible.", + "updated": 1633279006183 + } + ] }, { "style": "Text", "text": "You will notice that if you open the Docs when a tutorial is running, the Docs automatically load the page of the corresponding tutorial step, so that you may edit it. This is quite helpful, as you may translate the page and see how it looks on the tutorial window in real-time.", - "updated": 1613825697215 + "updated": 1613825697215, + "translations": [ + { + "language": "ES", + "text": "Notará que si abre los documentos mientras el tutorial está corriendo, los documentos automáticamente carga l página correspondiente al paso del tutorial, entonces puede editarlo. Esto es de gran ayuda, ya que podrá traducir la página y ver como se ve en la ventanta del tutorial al mismo tiempo.", + "updated": 1633279236805 + } + ] }, { "style": "Important", "text": "However, this is not always the case. Some tutorial steps are configured to close the Docs or the editor, and when you open the Docs manually, the tutorial step page is not loaded automatically. In such cases, you must search for the name of the page — which should match the title of the tutorial step — so that you may access the page manually.", - "updated": 1613825460620 + "updated": 1613825460620, + "translations": [ + { + "language": "ES", + "text": "De todos modos, este no es siempre el caso. Algunos pasos de los tutoriales están configurados para cerrar los dcumentos o el editor, y cuando abre los documentos manualmente, la página del paso del tutorial no se carga automáticamente. En estos casos, deberá buscar la pagina por su nombre — la cual debería coincidir con el titulo del paso en el tutorial — podrá acceder a la página en forma manual.", + "updated": 1633279497908 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json index 3403824af..29e2f964d 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json +++ b/Projects/Foundations/Schemas/Docs-Topics/C/Contributing/Contributing-to-Superalgos/contributing-to-superalgos-006-how-to-contribute-tutorials.json @@ -4,13 +4,27 @@ "type": "How to Contribute Tutorials", "definition": { "text": "Tutorials are the ultimate educational resource available in Superalgos, and they play a crucial role during the onboarding of new users. Contributing tutorials is a great way to help the project grow the user base and is highly appreciated!", - "updated": 1617710488028 + "updated": 1617710488028, + "translations": [ + { + "language": "ES", + "text": "Los tutoriales son la última fuente educativa disponible en Superalgos, y juegan un papel crucial durante la introducción de los usuarios nuevos. Contribuir con los tutoriales es un excelente modo de ayudar al proyecto para que su base de usuarios crezca y lo apreciamos muchísimo!", + "updated": 1633370243631 + } + ] }, "paragraphs": [ { "style": "Text", "text": "This page discusses best practices to build and contribute Superalgos tutorials. It doesn't cover the actual mechanics of building tutorials. Instead, it focuses on what is desirable.", - "updated": 1617732597782 + "updated": 1617732597782, + "translations": [ + { + "language": "ES", + "text": "Esta página habla a cerca de las mejores prácticas para construir y contribuir tutoriales de Superalgos. No cubre la mecanica actual de construir tutoriales. en lugar de eso está enfocado en lo que sería deseable.", + "updated": 1633364195196 + } + ] }, { "style": "Title", @@ -20,17 +34,38 @@ { "style": "Text", "text": "At Superalgos, we take pride in the quality of the product we are building. Documentation and tutorials are crucial parts of Superalgos.", - "updated": 1617732636344 + "updated": 1617732636344, + "translations": [ + { + "language": "ES", + "text": "En Superalgos, nosotros nos sentimos orgullosos de la cualidad del producto que estamos construyendo. La documentación y los tutoriales son una parte crucial de Superalgos.", + "updated": 1633364296850 + } + ] }, { "style": "Text", "text": "That said, we understand that it takes time and effort to get to a quality product, thus iterating on early prototypes and implementing early-stage feedback is a good way to achieve the desired quality standards.", - "updated": 1617732666027 + "updated": 1617732666027, + "translations": [ + { + "language": "ES", + "text": "Dicho esto, nosotros entendemos que se requiere de tiempo y esfuerzo para obtener un producto de cualidad por lo tanto, iteractuar sobre los primeros prototipos e implementar la retroalimentación en las primeras etapas es una buena manera de lograr el objetivo deseado de los estándares de cualidad.", + "updated": 1633364481390 + } + ] }, { "style": "Success", "text": "When you build a tutorial for Superalgos, you become the maintainer of the tutorial. It is your responsibility to keep the tutorial up to date with the system, and to implement the feedback users may share! Your tutorial must become the ultimate resource to learn the topics it covers. ", - "updated": 1620645983606 + "updated": 1620645983606, + "translations": [ + { + "language": "ES", + "text": "Cuando construye un tutorial para Superalgos, se convierte en quien mantiene el tutorial. Es su reponsabilidad ,mantener el tutorial actualizado con el sistema, e implementar los comentarios que los usuarios pueden compartir! Su tutorial debe convertirse en la fuente fundamental para aprender el tópico con el cual está relacionado.", + "updated": 1633364765692 + } + ] }, { "style": "Title", @@ -40,7 +75,14 @@ { "style": "Text", "text": "To deliver the best possible experience, a tutorial must be featured in a specific Workspace, and the workspace must be custom-tailored to serve the tutorial. The workspace must be clean and feature the assets required for the learning experience to be optimal. It is best to keep the workspace clean, light, and stripped of unnecessary resources.", - "updated": 1617732813825 + "updated": 1617732813825, + "translations": [ + { + "language": "ES", + "text": "Para ofrecer a mejor experiencia posible, un tutorial debe aparecer en un Workspace, específico y el workspace debe ser personalizado para servir al tutorial. El workspace debe ser limpio y segurar los elementos necesarios para que la experiencia de aprendizaje sea óptima- Es lo mejor mantener el workspace limpio, ligero, y despojado de recursos innecesarios.", + "updated": 1633365163709 + } + ] }, { "style": "Subtitle", @@ -50,16 +92,37 @@ { "style": "Text", "text": "If your tutorial deals with data, it is best to use the same exchange, market, and date ranges already in use in the Getting Started Plugin Workspace tutorials. This way, users will already have the data and can go through the tutorial easier.", - "updated": 1621871223112 + "updated": 1621871223112, + "translations": [ + { + "language": "ES", + "text": "Si el tutorial your tutorial trata con datos,es lo mejor utilizar el mismo exchange, market, y rango de datoss, ya en uso en los tutoriales de Getting Started Plugin Workspace. De este modo, los usuarios ya tendran los dtos y pueden ir a través del tutorial con mayor facilidad.", + "updated": 1633365432578 + } + ] }, { "style": "Note", "text": "If for whatever reason the tutorial must deal with other markets and/or exchanges to deliver the content, then go ahead and ignore the above.", - "updated": 1621871324929 + "updated": 1621871324929, + "translations": [ + { + "language": "ES", + "text": "Si por cualquier razón el tutorial debiera tratar con otros mercados y/o exchanges para enviar el contenido, entonces siga adelante e ignore lo de aquí arriba.", + "updated": 1633365546892 + } + ] }, { "style": "Success", - "text": "Make sure you include a step allowing users to switch to BinanceUS, in case they need to, just like in the Welcome to Superalgos Tutorial." + "text": "Make sure you include a step allowing users to switch to BinanceUS, in case they need to, just like in the Welcome to Superalgos Tutorial.", + "translations": [ + { + "language": "ES", + "text": "Asegúrese de incluir un paso permitiendo a los usuarios enlazar con BinanceUS, en caso de que lo necesiten como en el caso del tutorial de Welcome to Superalgos.", + "updated": 1633365690047 + } + ] }, { "style": "Title", @@ -69,36 +132,85 @@ { "style": "Text", "text": "Some topics are broad, have ramifications, or require a nuanced analysis to be covered thoroughly. In such cases, planning for a series of tutorials is ideal.", - "updated": 1617712578718 + "updated": 1617712578718, + "translations": [ + { + "language": "ES", + "text": "Algunos tópicos son amplios, tienen ramificaciones, o requieren un análisis mas profundo para ser cubiertos por completo. en estos casos, la planificación de una serie de tutoriales es lo ideal.", + "updated": 1633365921291 + } + ] }, { "style": "Text", "text": "Take, for example, the series of tutorials in the Trading System Design Tutorials Plugin Workspace:", - "updated": 1617712745906 + "updated": 1617712745906, + "translations": [ + { + "language": "ES", + "text": "Tome, por ejemplo, las series de tutoriales en el Trading System Design Tutorials Plugin Workspace:", + "updated": 1633365963577 + } + ] }, { "style": "List", - "text": "The first tutorial in the series gives a broad introduction to the topic, mostly in conceptual terms. This allows users to see the big picture and learn how the concepts are structured and why they are structured the way they are." + "text": "The first tutorial in the series gives a broad introduction to the topic, mostly in conceptual terms. This allows users to see the big picture and learn how the concepts are structured and why they are structured the way they are.", + "translations": [ + { + "language": "ES", + "text": "El primer tutorial en a serie da una introducción amplia del tópico, mayormente en términos conceptuales. Esto permite a los usuarios ver la la idea completa y aprender a cerca de como los conceptos han sido estructurados y porque están estructurados así.", + "updated": 1633366158719 + } + ] }, { "style": "List", "text": "The second tutorial in the series proposes an exercise that takes several more tutorials to develop and implement. That is, the tutorial sets the basis for what the series will cover.", - "updated": 1617732839409 + "updated": 1617732839409, + "translations": [ + { + "language": "ES", + "text": "El segundo tutorial en la serie propone un ejercicio que incuye varios tutoriales para desarrollar e implementar. Esto es, el tutorial sienta las bases de lo que la serie cubrirá.", + "updated": 1633366319793 + } + ] }, { "style": "List", "text": "The remaining tutorials in the series dissect the exercise proposed earlier and cover with a fine level of detail the implementation. At the same time, they cover all the context and many lateral topics.", - "updated": 1617732881797 + "updated": 1617732881797, + "translations": [ + { + "language": "ES", + "text": "El tutorials siguiente en la serie disecciona el ejercicio propuesto anteriormente y cubre con un nivel fino de detalles la implementación. Al mism tiempo, ellos cubren todo el contexto y muchos temas laterales.", + "updated": 1633366468389 + } + ] }, { "style": "Note", "text": "The whole series threads a common theme and develops it from the simplest to the most complex concepts, step by step. A tutorial series must be exhaustive and eventually, cover the whole topic. It must become the ultimate tool to learn about the subject matter!", - "updated": 1617732933799 + "updated": 1617732933799, + "translations": [ + { + "language": "ES", + "text": "Toda la serie enhebra un tema común y lo desarrolla desde lo más simplea los conceptos más complejos, paso a paso. Una serie de tutoriales debe ser exhaustiva y ocacionalmente cubrir el tópico completo. Debe convertirse en la herramienta definitiva para aprender sobre el tema!", + "updated": 1633366741272 + } + ] }, { "style": "Success", "text": "Consult with project maintainers what would be good names for each tutorial in the series. Naming tutorials with clear and descriptive names is important.", - "updated": 1621875606145 + "updated": 1621875606145, + "translations": [ + { + "language": "ES", + "text": "Consulte a los project maintainers cuúal serían buenos nombres para cada tutorial de la serie. Nombrar tutoriales con nombres claros y descriptivos es importante.", + "updated": 1633366871577 + } + ] }, { "style": "Title", @@ -108,22 +220,50 @@ { "style": "Text", "text": "People are different. We all have slightly different wirings in our heads, and we all learn differently. In that sense, building tutorials is a bit of a challenge. Some people like tutorials that go straight to the point and show them how to solve a very specific issue. Others prefer tutorials that get to the bone, explain every detail, and properly cover the context.", - "updated": 1617733011186 + "updated": 1617733011186, + "translations": [ + { + "language": "ES", + "text": "La gente es diferente. todos tenemos un cableado ligeramente diferente en nuestras cabezas, y todos aprendemos distinto. En ese sentido, construir tutoriales tiene un poco de desafío. A alguna gente le gustan los tutoriales que van derecho al punto y muestran como resolver un tema bien específico. otros prefieren tutoriales que van al hueso, explican cada detalle y cubre adecuadamente el contenido.", + "updated": 1633367166012 + } + ] }, { "style": "Text", "text": "At this early stage, we can't afford to duplicate efforts and build different tutorials for different kinds of learners. We have to choose the method that best serves the project.", - "updated": 1617714108723 + "updated": 1617714108723, + "translations": [ + { + "language": "ES", + "text": "Es en esta etapa temprana, que no podemos darnos el lujo de duplicar esfuerzos y construir tutorials diferentes para distintas clases de aprendices. Tenemos que elegir el método que mejor sirva al projecto.", + "updated": 1633367412845 + } + ] }, { "style": "Important", "text": "We choose to focus on building comprehensive tutorials that everyone can follow and that leave no one behind. We believe that a tutorial that goes slow, covering every detail, and taking the time to explain the nuance is the right approach at this stage. By building tutorials in a such manner, we guarantee that those who are willing to invest the time to learn the system have adequate material to quickly become power users.", - "updated": 1621870335450 + "updated": 1621870335450, + "translations": [ + { + "language": "ES", + "text": "Elegimos enfocarnos en construirtutoriales comprensibles que todos puedan seguir y que no deje a nadie atrás. Creemos que un tutorial que va lento, cubriendo cada detalle, y tomándose el tiempo de explicar los matices es el enfoque correcto en esta etapa. Al construir tutoriales de esta manera, garantizamos que aquellos que están dispuestos a invertir tiempo en aprender el sistema tengan el material adecuado para convertirse rápidamente en usuarios poderosos.", + "updated": 1633437811992 + } + ] }, { "style": "Text", "text": "Such tutorials may be slightly annoying to fast-learners, or to people that just want a specific question answered. But such needs are already covered by the searchable knowledge base comprised in the Docs.", - "updated": 1617714293925 + "updated": 1617714293925, + "translations": [ + { + "language": "ES", + "text": "Estos tutoriales pueden resultar ligeramente molestos para los que aprenden rápido o para gente que solo busca respuesta a una pregunta específica. Pero esas necesidades ya son cubiertas en la base de conocimientos con capacidad de búsqueda incluida en los Docs.", + "updated": 1633368103703 + } + ] }, { "style": "Title", @@ -133,12 +273,26 @@ { "style": "Text", "text": "Let's get into some of the specifics on building tutorials for Superalgos!", - "updated": 1617720149756 + "updated": 1617720149756, + "translations": [ + { + "language": "ES", + "text": "Analicemos algunos de los detalles sobre la construcción de los tutorials para Superalgos!", + "updated": 1633368160422 + } + ] }, { "style": "Callout", "text": "Superalgos tutorials have evolved through several months worth of feedback from early adopters. We feel we have found a sweet spot, and have started to develop a style in the way we use the space available in each tutorial step. The following are some notes that will help you build tutorials that match the format of existing tutorials.", - "updated": 1617733117832 + "updated": 1617733117832, + "translations": [ + { + "language": "ES", + "text": "Los tutoriales de Superalgos han evolucionado a lo largo de varios meses valiosos feedbacks de los primeros usuarios. Sentimos que hemos encontrado un modo propio, y hemos comenzado a desarrollar un estilo en el modo en que utilizamos el espacio disponible en cada paso de un tutorial. A continuaciòn algunas notas que le ayudará a construir tutoriales que combinen con el formato de los tutoriales existentes.", + "updated": 1633437837617 + } + ] }, { "style": "Title", @@ -148,16 +302,37 @@ { "style": "Text", "text": "The ultimate goal of tutorials is to provide users with a hands-on learning experience covering topics in detail. In general terms, we know that a tutorial is good — or has reached a mature state — when users ask no questions about it in the Support Group.", - "updated": 1620645730740 + "updated": 1620645730740, + "translations": [ + { + "language": "ES", + "text": "La meta final de los tutoriales es proveer a los usuarios con una experiencia de aprendizaje práctica que cubra el tópico al detalle. En terminos generales, sabemos que un tutorial es bueno — o que ha alcanzado su estado maduro — cuando los usuarios no hacen preguntas a cerca de ellos en el Support Group.", + "updated": 1633368718874 + } + ] }, { "style": "Text", "text": "Be precise and unequivocal with language. Read your writing over and over in search of phrases that may not be easily understood, or that may be interpreted in different ways. Improve the sentences to make them as clear as possible. Remember, the less clear your writing is, the more questions we have in the Support Group.", - "updated": 1620645812565 + "updated": 1620645812565, + "translations": [ + { + "language": "ES", + "text": "Se preciso exacto con el lenguaje. Lee lo que ha escrito una y otra vez en búsqueda de frases que pueden no ser entendidas facilmente, o que puedan ser interpretadas de diferentes maneras. Mejora las oraciones para acerlas lo mas claras posibles. Recuerde, mientras menos clara sea su escritura, más preguntas nosotros tendremos en el Support Group.", + "updated": 1633368994567 + } + ] }, { "style": "Success", - "text": "Be prepared to iterate over and over until the tutorial stabilizes. That will happen when there are no more questions about the topic in the Support Group!" + "text": "Be prepared to iterate over and over until the tutorial stabilizes. That will happen when there are no more questions about the topic in the Support Group!", + "translations": [ + { + "language": "ES", + "text": "Esté preparado para itneractuar una y otra vez hasta que el tutorial se estabilice. Eso sucederá cuando no haya más preguntas acerca de el tópico en el Support Group!", + "updated": 1633369113576 + } + ] }, { "style": "Title", @@ -165,7 +340,14 @@ }, { "style": "Text", - "text": "Use the different sections on the page and the different paragraph styles for consistent purposes. This helps users get accustomed to a certain format so that they know what to expect from each section of the page. Consistency in the way the information is delivered makes tutorials more usable!" + "text": "Use the different sections on the page and the different paragraph styles for consistent purposes. This helps users get accustomed to a certain format so that they know what to expect from each section of the page. Consistency in the way the information is delivered makes tutorials more usable!", + "translations": [ + { + "language": "ES", + "text": "Use las diferentes secciones de la página y los distintos estilos de párrafos para popósitos concretos. Esto a los usuarios a acostumbrarse a cierto formato para que sepan que esperar en cada sección de la página. La consistencia en el modo en que la información es enviada hace que los tutoriales sean más útiles!", + "updated": 1633369382341 + } + ] }, { "style": "Subtitle", @@ -174,12 +356,26 @@ { "style": "Text", "text": "The definition box is the space to the right of the icon, below the title. Use this space to introduce what the step is about, that is, to set up the story the step will tell, or to provide some basic context. ", - "updated": 1617902992986 + "updated": 1617902992986, + "translations": [ + { + "language": "ES", + "text": "El box de definición es el espacio a la derecha del ícono, debajo el título. Use este espacio para introducir a cerca de qué es el paso, esto es, establecer la historia que el paso contrará, o proveer algún contexto básico.", + "updated": 1633369713286 + } + ] }, { "style": "Note", "text": "To use the definition box correctly, explain the context in four to five lines. Avoid one or two lines or anything over five.", - "updated": 1617903200520 + "updated": 1617903200520, + "translations": [ + { + "language": "ES", + "text": "Para usar la box de definición correctamente, explique el contexto en cuatro o cinco lineas. Evite una o dos lineas o sobrepasar las cinco.", + "updated": 1633369703258 + } + ] }, { "style": "Subtitle", @@ -188,25 +384,60 @@ { "style": "Text", "text": "The most important section on any given step is the call for action, that is, the instruction that the user must follow to progress in the tutorial. Many times users redo tutorials or go back a few steps just to make sure they did everything right. ", - "updated": 1617904108044 + "updated": 1617904108044, + "translations": [ + { + "language": "ES", + "text": "La sección más importante de cualquier paso es el llamad a la acción, esto es, la instrucción que el usuario debe seguir para progresar en el tutorial. Mauchas veces los usuarios rehacen los tutoriales o vuelven atrás un par de pasos para asegurarse que hicieron todo correctamente.", + "updated": 1633369877553 + } + ] }, { "style": "Callout", - "text": "Always use the callout style — the one applied to this paragraph — for the call for action! Similarly, try to avoid using this style for anything else. If the particular step doesn't have a call for action, then the step should not feature this style at all!" + "text": "Always use the callout style — the one applied to this paragraph — for the call for action! Similarly, try to avoid using this style for anything else. If the particular step doesn't have a call for action, then the step should not feature this style at all!", + "translations": [ + { + "language": "ES", + "text": "Siempre respete el estilo — el que está en este párrafo — para el llamado a la acción! Al igual, trate de evitar usar este estilo para ninguna otra cosa- Si un paso en particular no tiene llamad a la acción, entonces este estilo no debería estar para nada!", + "updated": 1633370216971 + } + ] }, { "style": "Text", "text": "Each tutorial step should have a single call for action, that is, a single instruction that the user must carry out. This is the ideal case scenario. There may be exceptions, for example, when we ask the user to read a page in the Docs and do something else as the main instruction.", - "updated": 1617904124728 + "updated": 1617904124728, + "translations": [ + { + "language": "ES", + "text": "Cada paso del tutorial debería tener un solo llamado a la acción, esto es, una sola instrucciòn que el usuario debe llevar a cabo. Puede haber excepciones, por ejemplo, cuando le solicitamos al usuario que lea una página en los docs y hacer algo más como la instrucción principal.", + "updated": 1633438088497 + } + ] }, { "style": "Success", "text": "In general terms and when possible, try to avoid giving the user more than one task on the same step. Instead, if you expect the user to perform several sequential actions, try to split the process into more than one step — as many as it takes.", - "updated": 1617904133804 + "updated": 1617904133804, + "translations": [ + { + "language": "ES", + "text": "En términos generales y cuando es posible, intente evitar darle al usuario más de una tarea en el mismo paso. En vez de eso, si espera que el usuario haga varias acciones secuencialmente, intente repartir el proceso en más de un paso — tantos como sean necesarios.", + "updated": 1633438316138 + } + ] }, { "style": "Text", - "text": "In some cases, you may need the user to take a very simple action so that the main call for action may be delivered. In such cases, you may use the definition box to tell the user how to get ready to execute the call for action delivered later in the page." + "text": "In some cases, you may need the user to take a very simple action so that the main call for action may be delivered. In such cases, you may use the definition box to tell the user how to get ready to execute the call for action delivered later in the page.", + "translations": [ + { + "language": "ES", + "text": "En algunos casos, puede necesitar que el usuario haga una acción muy simple para que el principal llamado a la acción pueda realizarse. En esos casos, puede utilizar la definition box para decirle al usuario como estar listo para ejecutar el llamado a la acción, que será entregado mas adelante en la ´pagina.", + "updated": 1633438618455 + } + ] }, { "style": "Subtitle", @@ -216,25 +447,60 @@ { "style": "Text", "text": "Colorful tutorial steps look great, while a white pages full of text feel too much like non-interactive documentation. Makes sure you break the monotony with the four different styles of boxes:", - "updated": 1617906625458 + "updated": 1617906625458, + "translations": [ + { + "language": "ES", + "text": "Pasos de tutoriales coloridos se ven muy bien, mientras que las páginas blancas llenas de texto se sienten como documentación muy poco interactiva. Asegúrese de romper la monotonía con los cuatro estilos diferentes de boxes.", + "updated": 1633438835567 + } + ] }, { "style": "Success", - "text": "This is great for additional tips." + "text": "This is great for additional tips.", + "translations": [ + { + "language": "ES", + "text": "Esto es genial para tips adicionales.", + "updated": 1633438870414 + } + ] }, { "style": "Note", - "text": "Use this every once in a while to break up otherwise large sections of plain text." + "text": "Use this every once in a while to break up otherwise large sections of plain text.", + "translations": [ + { + "language": "ES", + "text": "Use este cada tanto para romper secciones grandes de puro texto.", + "updated": 1633439032601 + } + ] }, { "style": "Important", "text": "Leave this box for the truly important stuff. Things you don't want users to overlook or forget.", - "updated": 1617906591147 + "updated": 1617906591147, + "translations": [ + { + "language": "ES", + "text": "Deje esta box para cosas verdaderamente importantes. Cosas que no quiere que los usuarios se pasen por alto o se olviden.", + "updated": 1633439143351 + } + ] }, { "style": "Warning", "text": "And this one, save it for real warnings. Things that may represent a threat or risk.", - "updated": 1617906578635 + "updated": 1617906578635, + "translations": [ + { + "language": "ES", + "text": "Y esta otra, guárdela para advertencias reales. Cosas que pueden representar una amenaza o un riesgo.", + "updated": 1633439239739 + } + ] }, { "style": "Title", @@ -243,17 +509,38 @@ { "style": "Text", "text": "When you need the user to learn about a specific concept to get the proper context on the subject, do not replicate in the tutorial information that exists in the Docs. Duplicating information is not a good idea, as it makes it harder to maintain the Docs and tutorials.", - "updated": 1617730695174 + "updated": 1617730695174, + "translations": [ + { + "language": "ES", + "text": "Cuando necesite que el usuario aprenda un concepto específico para obtener un contexto adecuado del tema, no repita en el tutorial la información que ya existe en los Docs. Duplicar la información no es una buena idea, ya que hace mas difícil mantener los Docs y los tutoriales.", + "updated": 1633439488393 + } + ] }, { "style": "Success", "text": "Asking the user to read a page or a section of a page in the Docs is the correct approach. This has the added benefit of making the user aware that the Docs cover the topic too.", - "updated": 1617724009821 + "updated": 1617724009821, + "translations": [ + { + "language": "ES", + "text": "Pedirle al usuario leer una página o una parte de la página en los Docs es el acercamiento adecado. Esto tiene el beneficio adicional de hacer que el usuario se de cuenta de que los Docs también cubren el tópico.", + "updated": 1633439691786 + } + ] }, { "style": "Important", "text": "If you find that the relevant page in the Docs is outdated, doesn't cover the topic with the appropriate depth, or maybe even doesn't exist, helping create, complete, and/or improve the delivery of the information in the Docs is just as valuable as building the tutorial! Long format explanations do not fit well in tutorials. They do fit well in the Docs!", - "updated": 1617733203373 + "updated": 1617733203373, + "translations": [ + { + "language": "ES", + "text": "Si encuentra que la página relevante de los Docs está desactualizada, no cubre el tópico con la profundidad apropiada, o puede que no exista, ayudar a crearla, completar, y/o mejorar el envio de la información en los Docs es tan valioso como construir el tutorial! Explicaciones en formato largo no encajan bien con los tutoriales. Ellas van bien en los Docs!", + "updated": 1633440056942 + } + ] }, { "style": "Title", @@ -263,32 +550,74 @@ { "style": "Text", "text": "The whole point of tutorials — and the main difference with the Docs as learning material — is that they offer the opportunity for hands-on learning. Tutorials are interactive while the Docs are less so!", - "updated": 1617730782624 + "updated": 1617730782624, + "translations": [ + { + "language": "ES", + "text": "El punto de los tutoriales — y la diferencia principal con los Docs como material de aprendizaje — es que ellos ofrecen la oportunidad para el aprendizaje práctico Los tutoriales son interactivos mientras que los Docs no tanto!", + "updated": 1633440286430 + } + ] }, { "style": "Callout", "text": "Make sure you use this quality to the fullest, but also try to maintain a certain balance!", - "updated": 1617725782977 + "updated": 1617725782977, + "translations": [ + { + "language": "ES", + "text": "Asegúrese de usar esta cualidad a máximo, pero tambien intente mantener un cierto balance!", + "updated": 1633440365877 + } + ] }, { "style": "List", "text": "If the tutorial is talking about a hierarchy, a group of nodes, or a particular node, make sure that the tutorial step takes you to that place in the Workspace. This adds a visual element to the explanation and helps the user get familiar with the data structures involved.", - "updated": 1617725808080 + "updated": 1617725808080, + "translations": [ + { + "language": "ES", + "text": "Si el tutorial está hablando de jerarquías, un grupo de nodos en particular, asegúrese que el paso del tutorial lo lleve a ese lugar en el Workspace. Esto agrega un elemento visual a la explaicación y ayuda al usuario a familiarizarse con la estructura de datos involucrada.", + "updated": 1633440573331 + } + ] }, { "style": "List", "text": "Tutorials can affect the Workspace in many ways replicating actions the user may do. When you want the user to learn to do something, it's best to ask the user to do it, instead of having the tutorial do it for the user.", - "updated": 1617733271488 + "updated": 1617733271488, + "translations": [ + { + "language": "ES", + "text": "Los tutoriales pueden afectar al Workspace de muchas maneras replicando acciones que el usuario puede hacer. Cuando quiere que el usuario aprenda a hacer algo, lo mejor es pedirle al usuario que lo haga, en vez de que el tutorial lo haga por él.", + "updated": 1633440813684 + } + ] }, { "style": "List", "text": "On the other hand, the tutorial should take care of doing certain things that are not conducive to learning something relevant to the context of the tutorial. Performing these actions directly may help keep the user focused on what matters most.", - "updated": 1617733297397 + "updated": 1617733297397, + "translations": [ + { + "language": "ES", + "text": "Por otro lado, el tutorial debería cuidar de no hacer cosas que no lleven a aprender nada reevante del contexto del tutorial. Realizar estas acciones directamente puede ayudar a mantener al usuario concentrado en lo que más importa.", + "updated": 1633440988592 + } + ] }, { "style": "List", "text": "In some cases, the actions users take may have certain effects. Showing users the outcome of their actions immediately after completing a task has a great educational value. For example, if the user is setting up a new Time Machine in a tutorial about the Charting Space, show users how the time machine appears in the charting space immediately after creating it. If users then set up a Timeline Chart that references a particular Data Mine, show users how the new Timeline Chart appears within the Time Machine, and let them verify that the expected layer managers are there. Don't be afraid to go back and forth... that is the whole point after all!", - "updated": 1617905020985 + "updated": 1617905020985, + "translations": [ + { + "language": "ES", + "text": "En algunos casos, las acciones que los usuarios realizan tienene efectos determinados. Mostrales a los usuarios los resultados de sus acciones inmediatamente después de haber completado una tarea es de gran valor educativo. Por ejemplo, si el usuarioestá configurando una nueva Time Machine en un tutorial a cerca de el Charting Space, mostrale a a os usuarios como la time machine aparece en el charting space inmediatamente después de crearla. Si los usuarios configuran una Timeline Chart que referencia a una particular Data Mine, mostrarles a los usuarios como la nueva Timeline Chart aparece dentro de la Time Machine, y permitéles verificar que los administradores de capas esperados están allí. no tengas miedo de ir hacia atrás y hacia adelante... Ese es el punto después de todo!", + "updated": 1633441873892 + } + ] }, { "style": "Title", diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json index 53840f973..24323fa1a 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-005-data-mining-indicator-frameworks.json @@ -90,7 +90,7 @@ }, { "style": "Json", - "text": "\"botModules\": [\n {\n \"name\": \"Candles Volumes Multi Time Frame Market\",\n \"propertyName\": \"candlesVolumesMultiTimeFrameMarket\",\n \"functionName\": \"newFoundationsBotModulesCandlesVolumesMultiTimeFrameMarket\",\n \"fileName\": \"CandlesVolumesMultiTimeFrameMarket.js\",\n \"folderName\": \"Indicator-Bot/Candles-Volumes\"\n },", + "text": "\"botModules\": [\n {\n \"name\": \"Candles Volumes Multi Time Frame Market\",\n \"propertyName\": \"candlesVolumesMultiTimeFrameMarket\",\n \"functionName\": \"newDataMiningBotModulesCandlesVolumesMultiTimeFrameMarket\",\n \"fileName\": \"CandlesVolumesMultiTimeFrameMarket.js\",\n \"folderName\": \"Indicator-Bot/Candles-Volumes\"\n },", "updated": 1621703869144 }, { diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json index ec65c079e..a37ff8df2 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-006-data-mining-data-mine-hierarchy.json @@ -121,7 +121,7 @@ }, { "style": "Include", - "text": "Foundations->Node->Sensor Bot->Definition", + "text": "Data-Mining->Node->Sensor Bot->Definition", "updated": 1611407914247 }, { @@ -131,7 +131,7 @@ }, { "style": "Include", - "text": "Foundations->Node->Indicator Bot->Definition", + "text": "Data-Mining->Node->Indicator Bot->Definition", "updated": 1611407948292 }, { diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json index aeee1c320..323e68e2d 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Data/Data-Mining/data-mining-016-data-mining-indicator-bots.json @@ -9,12 +9,12 @@ "paragraphs": [ { "style": "Include", - "text": "Foundations->Node->Indicator Bot->Definition", + "text": "Data-Mining->Node->Indicator Bot->Definition", "updated": 1611408242603 }, { "style": "Include", - "text": "Foundations->Node->Indicator Bot->Content", + "text": "Data-Mining->Node->Indicator Bot->Content", "updated": 1611408247595 }, { @@ -23,7 +23,7 @@ }, { "style": "Hierarchy", - "text": "Foundations->Indicator Bot->2", + "text": "Data-Mining->Indicator Bot->2", "updated": 1611408262027 } ] diff --git a/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json b/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json index 9f37df345..08c871762 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json +++ b/Projects/Foundations/Schemas/Docs-Topics/D/Docs/Docs-Languages/docs-languages-002-docs-in-spanish.json @@ -8,8 +8,8 @@ "translations": [ { "language": "ES", - "text": "Si bien la documentación esta originalmente escrita en Inglés, el sistema permite a cualquier usuario buscar contenido en su idioma nativo, siempre y cuando otros usuarios hayan contribuído traducciones de los artículos existentes escritos en el idioma por defecto que es el idioma Inglés.", - "updated": 1609831843644, + "text": "Si bien la documentación esta originalmente escrita en Inglés, el sistema permite a cualquier usuario buscar contenido en su idioma nativo, siempre y cuando otros usuarios hayan contribuído traducciones de los artículos existentes escritos en el idioma por defecto que es el idioma Inglés. Advertencia!!! Los documentos de Superalgos y de otros proyectos integrados están escritos originariamente en Inglés. El sistema permite a los usuarios buscar y navegar en páginas en toros idiomas también , siempre que algunos usuarios hayan contribuido con las correspondientes traduccciones. Por favor actualice esta traucción.", + "updated": 1633180141328, "style": "Definition" } ] diff --git a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json index 5055aecdb..f4fd9dece 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json +++ b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-To/how-to-002-establish-and-remove-references.json @@ -4,7 +4,15 @@ "type": "Establish and Remove References", "definition": { "text": "To establish a reference, right-click on the first node and drag it close to the target node. The remove a reference, use the delink button on the menu.", - "updated": 1609949247846 + "updated": 1609949247846, + "translations": [ + { + "language": "ES", + "text": "Para establecer la referencia, click derecho en el primer nodo y arrástrelo cerca del nodo de destino. Entonces remueva la referencia, use el boton delink en el menú.", + "updated": 1633296472626, + "style": "Definition" + } + ] }, "paragraphs": [ { @@ -14,7 +22,15 @@ }, { "style": "Text", - "text": "When establishing a reference, grey rings show which nodes you may establish the reference with. In case there are multiple nodes that would accept the reference, the one closer to the node where the reference originates is highlighted with a golden ring. Releasing the mouse button establishes the reference with the highlighted node." + "text": "When establishing a reference, grey rings show which nodes you may establish the reference with. In case there are multiple nodes that would accept the reference, the one closer to the node where the reference originates is highlighted with a golden ring. Releasing the mouse button establishes the reference with the highlighted node.", + "translations": [ + { + "language": "ES", + "text": "Cuando esté estableciendo una referencia, anilsos grises muestran con cuales nodos puede establecer la referencia. En caso de que haya muchos nodos que aceptarían la referencia, el nodo que esté más cerca de donde se origina la referencia está destacado con un anillo dorado. Liberando el botón del mouse establece a referencia con el nodo destacado.", + "updated": 1633521217701, + "style": "Text" + } + ] }, { "style": "Gif", @@ -23,12 +39,28 @@ }, { "style": "Text", - "text": "The reference is visually represented by a faint grey dotted line. Such line is visible only when both ends of the reference are visible." + "text": "The reference is visually represented by a faint grey dotted line. Such line is visible only when both ends of the reference are visible.", + "translations": [ + { + "language": "ES", + "text": "La referencia es visualmente representada por una leve linea de puntos grises. Esta linea es visible solo cuando ambos extremos de la referencia son visibles.", + "updated": 1633521251780, + "style": "Text" + } + ] }, { "style": "Text", "text": "To remove a reference or delink two nodes, use the delink button on the node where the reference originates.", - "updated": 1609949517565 + "updated": 1609949517565, + "translations": [ + { + "language": "ES", + "text": "Para remover una referencia o deslinkear dos nodos, use el botón delink button del nodo donde la referencia se origina.", + "updated": 1633521278527, + "style": "Text" + } + ] }, { "style": "Anchor", @@ -46,7 +78,15 @@ { "style": "Text", "text": "The process is exactly the same. All you need to do is master a few tricks so that you may drag one of the nodes all the way to where the second node is.", - "updated": 1611940896508 + "updated": 1611940896508, + "translations": [ + { + "language": "ES", + "text": "El proceso es exactamente el mismo. Todo lo que necesita es manejar unos pocos trucos para que pueda arrastrar uno de los nodos todo el recorrido hasta donde el segundo nodo está.", + "updated": 1633295934654, + "style": "Text" + } + ] }, { "style": "Youtube", @@ -56,24 +96,64 @@ { "style": "Text", "text": "These UI tricks may make your life easier:", - "updated": 1611940968078 + "updated": 1611940968078, + "translations": [ + { + "language": "ES", + "text": "Estos UI trucos pueden hacer tu vida más fácil:", + "updated": 1633295979755, + "style": "Text" + } + ] }, { "style": "List", "text": "Use the design space map as many times as required to find your way from one hierarchy to the other.", - "updated": 1611940996169 + "updated": 1611940996169, + "translations": [ + { + "language": "ES", + "text": "Use el design space map tantas veces como sea necesario para encontrar el camino desde una jeraquía a la otra.", + "updated": 1633296062866, + "style": "List" + } + ] }, { "style": "List", - "text": "Pin the node you are going to move across the design space, so that you may drop it at any point to check the design space map for directions." + "text": "Pin the node you are going to move across the design space, so that you may drop it at any point to check the design space map for directions.", + "translations": [ + { + "language": "ES", + "text": "Fije el nodo que va a mover a través del espacio de diseño, para que pueda soltarlo en cualquier punto para chequear las direcciones en el mapa del espacio de diseño.", + "updated": 1633296213030, + "style": "List" + } + ] }, { "style": "List", - "text": "Use Ctrl / Command + arrow keys to drag the node across the screen after clicking on it with the mouse. Keep keys pressed and the node flies!" + "text": "Use Ctrl / Command + arrow keys to drag the node across the screen after clicking on it with the mouse. Keep keys pressed and the node flies!", + "translations": [ + { + "language": "ES", + "text": "Use Ctrl / Command + arteclas de flechas para arrastrar el nodo a través dela pantalla despues de clickear en el con el mouse. Mantenga las teclas presionadas y el nodo vuela!", + "updated": 1633296325908, + "style": "List" + } + ] }, { "style": "List", - "text": "Remove the pin once the reference is established so that the node goes back to its place." + "text": "Remove the pin once the reference is established so that the node goes back to its place.", + "translations": [ + { + "language": "ES", + "text": "Remueve el fijado ona vez que la referencia sea establecida para que el nodo vuelva a su lugar.", + "updated": 1633521325505, + "style": "List" + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json index 829842bbb..f04dac108 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json +++ b/Projects/Foundations/Schemas/Docs-Topics/H/How/How-to-Automate-Actions-at-The-Design-Space/how-to-automate-actions-at-the-design-space-008-automating-actions-adding-an-action-switch-case.json @@ -32,7 +32,7 @@ }, { "style": "Javascript", - "text": "UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes)\n", + "text": "UI.projects.plugins.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes)\n", "updated": 1614938043930 }, { @@ -50,7 +50,7 @@ }, { "style": "Json", - "text": "{\n \"name\": \"Plugins Functions\",\n \"propertyName\": \"pluginsFunctions\",\n \"functionName\": \"newFoundationsFunctionLibraryPluginsFunctions\"\n }", + "text": "{\n \"name\": \"Plugins Functions\",\n \"propertyName\": \"pluginsFunctions\",\n \"functionName\": \"newPluginsFunctionLibraryPluginsFunctions\"\n }", "updated": 1614938194636 }, { diff --git a/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json b/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json index a8b7f61c1..f955098c4 100644 --- a/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json +++ b/Projects/Foundations/Schemas/Docs-Topics/T/Tested/Tested-Exchanges/tested-exchanges-001-community-effort-to-test-exchanges.json @@ -4,7 +4,14 @@ "type": "Community Effort to Test Exchanges", "definition": { "text": "This topic covers the results of the Community work testing exchanges. Each page in the topic describes the results of the tests performed on one exchange, and explains whether the exchange is usable or not.", - "updated": 1616010652806 + "updated": 1616010652806, + "translations": [ + { + "language": "ES", + "text": "Este tópico cubre los resultados de los trabajos de testeo de la comunidad en los exchanges. Cada página en el tópico describe el resultados de los testeos realizados en un exchange, y explica si el exchange es utilizable o no.", + "updated": 1633284067216 + } + ] }, "paragraphs": [ { @@ -14,12 +21,26 @@ }, { "style": "Text", - "text": "Superalgos uses the CCXT library to communicate with exchanges. CCXT is an open-source project attempting to standardize access to exchanges APIs." + "text": "Superalgos uses the CCXT library to communicate with exchanges. CCXT is an open-source project attempting to standardize access to exchanges APIs.", + "translations": [ + { + "language": "ES", + "text": "Superalgos utiliza el CCXT library para comunicarse con los exchanges. CCXT es proyecto de código abierto que intenta estandarizar el acceso a las APIs de los exchanges .", + "updated": 1633284193717 + } + ] }, { "style": "Text", "text": "The project lists more than 120 exchanges as \"supported\" and a few dozen exchanges as \"certified\". See the list in the following ink:", - "updated": 1616006648441 + "updated": 1616006648441, + "translations": [ + { + "language": "ES", + "text": "El proyecto lista más de 120 exchanges as \"supported\" and a few dozen exchanges as \"certified\". See the list in the following ink:", + "updated": 1633284228947 + } + ] }, { "style": "Link", @@ -29,12 +50,26 @@ { "style": "Text", "text": "However, it is not clear what exactly is supported nor what is certified. Current experience shows that standardization has still a long way to go.", - "updated": 1616006593509 + "updated": 1616006593509, + "translations": [ + { + "language": "ES", + "text": "De todos modos, no está muy claro exactamente cuales están respaldados y cuales certificados. Experiencias actuales muestran que la estandarización todavía tiene un largo recorrido por delante.", + "updated": 1633284466832 + } + ] }, { "style": "Success", "text": "To know if your preferred exchange is ready to be used in Superalgos, consult the corresponding page in this topic.", - "updated": 1616006719622 + "updated": 1616006719622, + "translations": [ + { + "language": "ES", + "text": "Para saber si su exchange preferido está listo para ser utiliado por Superalgos, consulte la página correspondiente a este tópico.", + "updated": 1633284553628 + } + ] }, { "style": "Title", @@ -44,11 +79,25 @@ { "style": "Text", "text": "If your preferred exchange doesn't show up in this list, it means that it hasn't been tested. You may want to ask in the Develop Group to see if anyone has started tests. ", - "updated": 1616154716371 + "updated": 1616154716371, + "translations": [ + { + "language": "ES", + "text": "Si tu exchange preferido no está incluído en este listado, significa que no ha sido probado. Puede querer preguntar en el Develop Group si alguien ha comenzado con el testeo.", + "updated": 1633284684470 + } + ] }, { "style": "Success", - "text": "If you are a developer, you may want to learn How to Test New Exchanges and help the Community in the quest to expand the list." + "text": "If you are a developer, you may want to learn How to Test New Exchanges and help the Community in the quest to expand the list.", + "translations": [ + { + "language": "ES", + "text": "Si eres un developer, puedes querer aprender How to Test New Exchanges y ayudar a la comunidad en la búsqueda de expandir el listado.", + "updated": 1633284798025 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json index e86ba0b8c..66410b618 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-043-tutorial-step-placing-plugins.json @@ -57,8 +57,8 @@ }, { "language": "ES", - "text": "Nuevos nodos Plugin File se crean para cada plugin in \\Plugins\\Trading-Systems. Puede eliminar los nodos Plugin File no necesitas y conserva los que necesites! Luego, puedes agregar y anclar el nodo Plugin File Position donde deseas colocar el plugin.", - "updated": 1626643680169, + "text": "Nuevos nodos Plugin File se crean para cada plugin in \\Foundations\\Plugins\\Trading-Systems. Puede eliminar los nodos Plugin File que no necesita y conservar los que necesite! Luego, puedes agregar y anclar el nodo Plugin File Position donde deseas colocar la jerarquía del plugin. ", + "updated": 1633282144023, "style": "Text" } ] diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json index cc90cb9cb..190cf1784 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-044-tutorial-step-non-persistence-of-changes.json @@ -38,8 +38,8 @@ }, { "language": "ES", - "text": "Hierarchies incluidos en el workspace, ya que los plugins no se guardan en el nivel del workspace. Como tal, los cambios realizados en esas jerarquías no persisten. Si deseas modificar un plugin y seguir trabajando con la versión modificada en el futuro, debes clonar o hacer una copia de seguridad del plugin y trabajar en la copia resultante.", - "updated": 1626702533816, + "text": "Las Hierarchies (Jerarquías) colocadas en el workspace como plugins (copias) no se guardan en el workspace por defecto. Como resultado, los cambios realizados en esas jerarquías no persiten, a menos que las salve en forma manual o habilite el guardado automático. ", + "updated": 1633282516205, "style": "Warning" } ] @@ -57,8 +57,8 @@ }, { "language": "ES", - "text": "¡Pasaré por algunos casos de uso específicos en los próximos pasos!", - "updated": 1626702765005, + "text": "Hay dos casos principales para modificar los plugins:", + "updated": 1633282630926, "style": "Text" } ] @@ -66,11 +66,25 @@ { "style": "List", "text": "You wish to modify a plugin to make it your own and keep working with the modified version in the future.", - "updated": 1629897838348 + "updated": 1629897838348, + "translations": [ + { + "language": "ES", + "text": "Desea modificar un plugin para hacer uno propio y continuar trabajando con la versión modificada en el futuro.", + "updated": 1633282732027 + } + ] }, { "style": "List", - "text": "You wish to update and improve a plugin to contribute the improvements to the project." + "text": "You wish to update and improve a plugin to contribute the improvements to the project.", + "translations": [ + { + "language": "ES", + "text": "Desea actualizar y mejorar un plugin para contribuir en el mejoramiento del proyecto.", + "updated": 1633282817838 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json index 04eeef2a6..559d1f7dd 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-046-tutorial-step-starting-from-a-plugin.json @@ -18,8 +18,8 @@ }, { "language": "ES", - "text": "Un caso típico es cuando desea introducir cambios en una estrategia de envío con el sistema para comenzar con una configuración probada.", - "updated": 1626702894193, + "text": "Miremos el primer escenario: un caso típico es cuando desea introducir cambios a una estrategia incluída en el sistema para comenzar con una configuración probada.", + "updated": 1633283150203, "style": "Definition" } ] @@ -38,8 +38,8 @@ }, { "language": "ES", - "text": "Digamos que recién estás comenzando con Superalgos, has hecho algunos tutoriales y estás listo para comenzar a jugar con una estrategia. Deseas comenzar con una estrategia existente e introducir modificaciones menores para comprender mejor cómo funcionan las cosas. La estrategia en cuestión se incluye como plugin en un workspace específico.", - "updated": 1626703032336, + "text": "Digamos que está listo para comenzar a jugar con una estrategia.. Quiere comenzar con una existente o introducir modificaciones para entender como trabajan las cosas. No tiene intensiones de contribuir con los cambios. Solo desea jugar con esto y cambiarlo a su gusto! Entonces, haga lo siguiente:", + "updated": 1633283766269, "style": "Text" } ] @@ -57,8 +57,8 @@ }, { "language": "ES", - "text": "En tales casos, debes eliminar el nodo Plugin File correspondiente a el Trading System y restaurar el archivo original en la carpeta \\Plugins\\Trading-Systems como si fuera un backup: arrastra el archivo y suéltalo en el Design Space!", - "updated": 1626703323868, + "text": "Borre el nodo Plugin File correspondiente al Trading System y restablezca el plugin file original en (\\Plugins\\Trading-Systems folder) como si fuera un a backup: arrastre el archivo y suéltelo en el Design Space! La estrategia ahora vive en el workspace y puede modificarlo y grabarlo.", + "updated": 1633283708150, "style": "Success" } ] diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json index 730af6bbc..06b59af30 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/B/Basic/Basic-Education/basic-education-047-tutorial-step-improving-a-plugin.json @@ -5,7 +5,7 @@ "definition": { "text": "About the second scenario: let's say you are testing the EMA indicator, found a bug and know how to fix it. You intend to contribute the fix so that everyone benefits from it!", "icon": { - "name": "sensor-bot", + "name": "indicator-bot", "project": "Foundations" }, "updated": 1629909327051, diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json index b20c5a59f..1b09f412b 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-006-tutorial-step-expand-that-node.json @@ -4,7 +4,7 @@ "type": "Tutorial Step - Expand That Node!", "definition": { "icon": { - "project": "Foundations", + "project": "Foundations", "name": "expand-structure-of-nodes" }, "text": "Each node features a menu. The button on the bottom-left expands and collapses the structure of nodes below the current node.", @@ -30,7 +30,13 @@ { "language": "FR", "text": "Chaque nœud dispose d'un menu. Le bouton situé en bas à gauche permet de développer et de réduire la structure des nœuds situés sous le nœud actuel.", - "updated": 1623951244249 + "updated": 1623951244249, + "style": "Definition" + }, + { + "language": "TR", + "text": "Her düğümde bir menü bulunur. Sol altta üzerinde \"+\" simgesinin bulunduğu buton, mevcut düğümü genişletir ya da daraltır. Böylece düğümün altındaki öğelere ulaşabilirsiniz.", + "updated": 1633267521331 } ] }, @@ -60,7 +66,13 @@ { "language": "FR", "text": "Allez-y et cliquez sur le bouton d'expansion !", - "updated": 1623951533708 + "updated": 1623951533708, + "style": "Callout" + }, + { + "language": "TR", + "text": "Devam edin ve genişlet düğmesine tıklayın!", + "updated": 1633267545525 } ] }, @@ -89,7 +101,13 @@ { "language": "FR", "text": "Le noeud Tutorial contient plusieurs ramifications, et celles-ci possedent a leur tour plusieurs autres ramifications. C'est pourquoi il s'agit d'une hiérarchie !", - "updated": 1623951690741 + "updated": 1623951690741, + "style": "Text" + }, + { + "language": "TR", + "text": "Öğretici (Tutorial) düğümün birkaç çocuğu vardır ve bunların birkaç çocuğu daha vardır.", + "updated": 1633267652469 } ] }, @@ -118,7 +136,13 @@ { "language": "FR", "text": "Les représentations visuelles structurées de l'information sont au cœur de la manière dont Superalgos gère la complexité qui sous-tend les opérations de trading flexibles et évolutives.", - "updated": 1623951745486 + "updated": 1623951745486, + "style": "Note" + }, + { + "language": "TR", + "text": "Bilginin yapılandırılmış görsel temsilleri, Superalgos'un esnek ve ölçeklenebilir ticaret operasyonlarının arkasındaki karmaşıklığı nasıl yönettiğinin merkezinde yer alır.", + "updated": 1633267689476 } ] } diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json index e66cc1b7e..3d307e6f4 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-007-tutorial-step-lets-go-for-a-ride.json @@ -32,6 +32,11 @@ "text": "Avant de vous montrer le reste du menu, jetons un coup d'œil à une autre hiérarchie : le réseau.", "updated": 1623951418764, "style": "Definition" + }, + { + "language": "TR", + "text": "Menünün geri kalanını göstermeden önce, başka bir hiyerarşiye bir göz atalım: \"Ağ.\"(Lan Network)", + "updated": 1633268337360 } ] }, @@ -63,6 +68,11 @@ "text": "Le Network hiérarchie réseau est la salle de contrôle du système. C'est là que vous contrôlez vos Data Tasks, les Testing Trading Tasks, et les Production Trading Tasks.", "updated": 1623952138963, "style": "Text" + }, + { + "language": "TR", + "text": "Ağ hiyerarşisi, sistemin kontrol odasıdır.Burası Veri Görevlerinizi ( Data Task ), Ticaret Görevlerini Test Etme ( Testing Trading Tasks ) ve Ticaret Görevlerinizi ( Production Trading Tasks ) kontrol ettiğiniz yerdir.", + "updated": 1633268830564 } ] }, @@ -93,6 +103,11 @@ "text": "Élargissez la hiérarchie et jetez un coup d'œil à l'intérieur !", "updated": 1623952177269, "style": "Callout" + }, + { + "language": "TR", + "text": "Düğümü genişletin ve içeriye bir göz atın!", + "updated": 1633268461684 } ] }, @@ -124,6 +139,11 @@ "text": "Voyez les nœuds que j'ai mentionnés plus tôt ? Cool ! Nous sommes ici pour commencer votre toute première opération de minage d'informations.", "updated": 1623952241074, "style": "Text" + }, + { + "language": "TR", + "text": "Daha önce bahsettiğim düğümleri görüyor musunuz? Güzel! İlk veri madenciliği operasyonunuzu başlatmak için buradayız.", + "updated": 1633268493855 } ] }, @@ -154,6 +174,11 @@ "text": "Mais avant de commencer, j'ai une petite question pour vous : accédez-vous au Client a distance?", "updated": 1623952297046, "style": "Note" + }, + { + "language": "TR", + "text": "Ancak başlamadan önce size kısa bir sorum var: İstemciye uzaktan erişiyor musunuz?", + "updated": 1633268516400 } ] } diff --git a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json index 100b404d7..b510a2cb8 100644 --- a/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json +++ b/Projects/Foundations/Schemas/Docs-Tutorials/W/Welcome/Welcome-to-Superalgos/welcome-to-superalgos-115-tutorial-step-about-our-governance.json @@ -8,28 +8,63 @@ "name": "\\governance-project", "project": "Governance" }, - "updated": 1629835261024 + "updated": 1629835261024, + "translations": [ + { + "language": "ES", + "text": "Antes de dejarlo con el siguiente tutorial, debe saber que Superalgos es un proyecto crypto project con gobernanza distribuida!", + "updated": 1633545502625 + } + ] }, "paragraphs": [ { "style": "List", "text": "You may earn Superalgos SA Tokens and Reputation by contributing to the project.", - "updated": 1630065210887 + "updated": 1630065210887, + "translations": [ + { + "language": "ES", + "text": "Puede ganar Superalgos SA Tokens y Reputation por contribuir al proyecto.", + "updated": 1633545548293 + } + ] }, { "style": "List", "text": "Then you may leverage your tokens and reputation to participate in Governance Programs.", - "updated": 1629834501563 + "updated": 1629834501563, + "translations": [ + { + "language": "ES", + "text": "Entonces puede aprovechar sus tokens y reputación para particiapar en los Governance Programs.", + "updated": 1633545620173 + } + ] }, { "style": "List", "text": "Participating in governance earns you more tokens, as helping direct the project is an important contribution in and of itself!", - "updated": 1629834600057 + "updated": 1629834600057, + "translations": [ + { + "language": "ES", + "text": "Participando en la gobernanza gana más tokens, ya que ayudar a dirigir el proyecto es una contribución importante en sí misma!", + "updated": 1633545710019 + } + ] }, { "style": "Note", "text": "You may earn your first few tokens with the Airdrops Program just by setting up your User Profile. But before you do that, you need to do a couple more tutorials to complete your education!", - "updated": 1629835202298 + "updated": 1629835202298, + "translations": [ + { + "language": "ES", + "text": "Puede ganar sus primeros pocos tokens con el Airdrops Program con solo programar su User Profile. Pero antes de que lo haga, necesita hacer un parmás de tutoriales para completar su educación!", + "updated": 1633545813091 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js b/Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/Announcements.js similarity index 100% rename from Projects/Foundations/TS/Bot-Modules/Trading-Bot/Low-Frequency-Trading/Announcements.js rename to Projects/Foundations/TS/Bot-Modules/Trading-Bot/Announcements/Announcements.js diff --git a/Projects/Foundations/TS/Process-Modules/StatusReport.js b/Projects/Foundations/TS/Process-Modules/StatusReport.js index 94303354f..bc33ccf70 100644 --- a/Projects/Foundations/TS/Process-Modules/StatusReport.js +++ b/Projects/Foundations/TS/Process-Modules/StatusReport.js @@ -315,7 +315,7 @@ if (ownerId !== botId) { let filePathRoot = 'Project/' + - statusDependencyNode.project + "/" + + statusDependencyNode.referenceParent.parentNode.parentNode.parentNode.project + "/" + statusDependencyNode.mineType + "/" + statusDependencyNode.dataMine + "/" + statusDependencyNode.bot + '/' + diff --git a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js index 664d37866..9b693d260 100644 --- a/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Foundations/UI/Function-Libraries/ActionSwitch.js @@ -101,7 +101,7 @@ function newFoundationsActionSwitch() { break case 'Add UI Object': { - UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(action.node, action.relatedNodeType, action.rootNodes) + UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(action.node, action.relatedNodeType, action.rootNodes, action.project) } break case 'Add Missing Children': @@ -114,11 +114,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.nodeDeleter.deleteUIObject(action.node, action.rootNodes) } break - case 'Install as Plugin': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.installAsPlugin(action.node, action.rootNodes) - } - break case 'Edit Code': break @@ -423,11 +418,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.cryptoEcosystemFunctions.uninstallMarket(action.node, action.rootNodes) } break - case 'Add All Output Datasets': - { - UI.projects.foundations.functionLibraries.mineFunctions.addAllOutputDatasets(action.node) - } - break case 'Add All Data Products': { UI.projects.foundations.functionLibraries.dataStorageFunctions.addAllDataProducts(action.node) @@ -503,16 +493,6 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.dataStorageFunctions.addMissingProjectDataProducts(action.node, action.rootNodes) } break - case 'Add All Data Dependencies': - { - UI.projects.foundations.functionLibraries.mineFunctions.addAllDataDependencies(action.node) - } - break - case 'Add All Data Mine Dependencies': - { - UI.projects.foundations.functionLibraries.mineFunctions.addAllDataMineDataDependencies(action.node, action.rootNodes) - } - break case 'Add All Layer Panels': { UI.projects.foundations.functionLibraries.chartingSpaceFunctions.addAllLayerPanels(action.node) @@ -543,76 +523,11 @@ function newFoundationsActionSwitch() { UI.projects.foundations.functionLibraries.chartingSpaceFunctions.addMissingProjectDashboards(action.node, action.rootNodes) } break - case 'Play Tutorial': - { - UI.projects.education.spaces.tutorialSpace.playTutorial(action.node) - } - break - case 'Play Tutorial Topic': - { - UI.projects.education.spaces.tutorialSpace.playTutorialTopic(action.node) - } - break - case 'Play Tutorial Step': - { - UI.projects.education.spaces.tutorialSpace.playTutorialStep(action.node) - } - break - case 'Resume Tutorial': - { - UI.projects.education.spaces.tutorialSpace.resumeTutorial(action.node) - } - break - case 'Resume Tutorial Topic': - { - UI.projects.education.spaces.tutorialSpace.resumeTutorialTopic(action.node) - } - break - case 'Resume Tutorial Step': - { - UI.projects.education.spaces.tutorialSpace.resumeTutorialStep(action.node) - } - break - case 'Reset Tutorial Progress': - { - UI.projects.education.spaces.tutorialSpace.resetTutorialProgress(action.node) - } - break case 'Send Webhook Test Message': { UI.projects.foundations.functionLibraries.webhookFunctions.sendTestMessage(action.node, action.callBackFunction) } break - case 'Run Trading Session': - { - UI.projects.foundations.functionLibraries.tradingSessionFunctions.runSession(action.node, false, action.callBackFunction) - } - break - case 'Resume Trading Session': - { - UI.projects.foundations.functionLibraries.tradingSessionFunctions.runSession(action.node, true, action.callBackFunction) - } - break - case 'Stop Trading Session': - { - UI.projects.foundations.functionLibraries.tradingSessionFunctions.stopSession(action.node, action.callBackFunction) - } - break - case 'Run Learning Session': - { - UI.projects.foundations.functionLibraries.learningSessionFunctions.runSession(action.node, false, action.callBackFunction) - } - break - case 'Resume Learning Session': - { - UI.projects.foundations.functionLibraries.learningSessionFunctions.runSession(action.node, true, action.callBackFunction) - } - break - case 'Stop Learning Session': - { - UI.projects.foundations.functionLibraries.learningSessionFunctions.stopSession(action.node, action.callBackFunction) - } - break case 'Run Super Action': { UI.projects.foundations.functionLibraries.superScriptsFunctions.runSuperScript(action.node, action.rootNodes) @@ -660,76 +575,6 @@ function newFoundationsActionSwitch() { } } break - case 'Add Missing Plugin Projects': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginProjects(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Types': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTypes(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Data Mines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginDataMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Mines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Systems': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingSystems(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Trading Engines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTradingEngines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Mines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginLearningMines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Systems': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginLearningSystems(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Learning Engines': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginLearningEngines(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin Tutorials': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginTutorials(action.node, action.rootNodes) - } - break - case 'Add Missing Plugin API Maps': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.addMissingPluginApiMaps(action.node, action.rootNodes) - } - break - case 'Enable Saving With Workspace': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.enableSavingWithWorkspace(action.node, action.rootNodes) - } - break - case 'Disable Saving With Workspace': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.disableSavingWithWorkspace(action.node, action.rootNodes) - } - break - case 'Save Plugin': - { - UI.projects.foundations.functionLibraries.pluginsFunctions.savePlugin(action.node, action.rootNodes) - } - break case 'Add Missing Workspace Projects': { UI.projects.foundations.functionLibraries.workspaceFunctions.addMissingWorkspaceProjects(action.node, action.rootNodes) diff --git a/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js b/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js index 0e82a6356..60c293b6a 100644 --- a/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js +++ b/Projects/Foundations/UI/Function-Libraries/ReferenceAttachDetach.js @@ -8,9 +8,9 @@ function newFoundationsFunctionLibraryReferenceAttachDetach() { return thisObject function referenceDetachNode(node) { - cleanAttachNodePath(node) - completeDetachment(node) - + cleanAttachNodePath(node) + completeDetachment(node) + } function referenceAttachNode(node, attachToNode) { @@ -20,18 +20,19 @@ function newFoundationsFunctionLibraryReferenceAttachDetach() { // Store the path to the reference parent to make restoring it possible if the reference parent is updated and given a new id function storeAttachNodePath(node, attachToNode) { + if (node.payload === undefined) { return } let attachNodePath = UI.projects.foundations.utilities.hierarchy.getNodeNameTypePath(attachToNode) // Remove unused node id, and project tag from stored path - for (let i = 0; i < attachNodePath.length; i++ ) { - attachNodePath[i].splice(2,2) + for (let i = 0; i < attachNodePath.length; i++) { + attachNodePath[i].splice(2, 2) } - + // Save attach path to active payload node.payload.referenceParentCombinedNodePath = attachNodePath } // Clear the path to reference parent when the reference is cleared - function cleanAttachNodePath(node){ + function cleanAttachNodePath(node) { if (node.payload !== undefined) { node.payload.referenceParentCombinedNodePath = undefined if (node.savedPayload !== undefined) { diff --git a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js index e38999466..bed053755 100644 --- a/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js +++ b/Projects/Foundations/UI/Function-Libraries/TaskFunctions.js @@ -587,30 +587,33 @@ function newFoundationsFunctionLibraryTaskFunctions() { } function addMissingProjectDataTasks(node, rootNodes) { - addMissingProjectTasks(node, rootNodes, 'Project Data Tasks') + addMissingProjectTasks(node, rootNodes, 'Project Data Tasks', 'Data Tasks') } function addMissingProjectTradingTasks(node, rootNodes) { - addMissingProjectTasks(node, rootNodes, 'Project Trading Tasks') + addMissingProjectTasks(node, rootNodes, 'Project Trading Tasks', 'Trading Tasks') } function addMissingProjectLearningTasks(node, rootNodes) { - addMissingProjectTasks(node, rootNodes, 'Project Learning Tasks') + addMissingProjectTasks(node, rootNodes, 'Project Learning Tasks', 'Learning Tasks') } - function addMissingProjectTasks(node, rootNodes, newNodeType) { + function addMissingProjectTasks(node, rootNodes, newNodeType, taskType) { for (let k = 0; k < PROJECTS_SCHEMA.length; k++) { let projectDefinition = PROJECTS_SCHEMA[k] let project = projectDefinition.name + if (projectDefinition.tasks === undefined) { continue } + if (projectDefinition.tasks.includes(taskType) === false) { continue } + for (let j = 0; j < rootNodes.length; j++) { let rootNode = rootNodes[j] if (rootNode.type === project + ' Project') { let projectDefinition = rootNode.projectDefinition if (projectDefinition !== undefined) { if (UI.projects.foundations.utilities.nodeChildren.isMissingChildrenById(node, projectDefinition, true) === true) { - let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType, undefined, project) + let projectTasks = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(node, newNodeType, undefined, node.project) UI.projects.foundations.functionLibraries.attachDetach.referenceAttachNode(projectTasks, projectDefinition) } } diff --git a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js index 754b230da..0bb771897 100644 --- a/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js +++ b/Projects/Foundations/UI/Function-Libraries/UiObjectsFromNodes.js @@ -66,7 +66,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { for (let j = 0; j < plugins.pluginProjects.length; j++) { let project = plugins.pluginProjects[j] /* - Foundations Plugin Types + Miscelaneours Plugin Types */ if (project.pluginDataMines !== undefined) { totalPlugin = totalPlugin + project.pluginDataMines.pluginFiles.length @@ -96,6 +96,9 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { totalPlugin = totalPlugin + project.pluginLearningEngines.pluginFiles.length pluginAllTheseFiles(project.pluginLearningEngines.pluginFiles, 'Learning-Engines') } + /* + Foundations Plugin Types + */ if (project.pluginTutorials !== undefined) { totalPlugin = totalPlugin + project.pluginTutorials.pluginFiles.length pluginAllTheseFiles(project.pluginTutorials.pluginFiles, 'Tutorials') @@ -202,7 +205,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { config.codeName = name receivedNode.config = JSON.stringify(config) - if (pluginFile.pluginFilePosition !== undefined) { + if (pluginFile.pluginFilePosition !== undefined && receivedNode.savedPayload !== undefined) { let positionOffset = { x: pluginFile.pluginFilePosition.savedPayload.position.x - receivedNode.savedPayload.position.x, y: pluginFile.pluginFilePosition.savedPayload.position.y - receivedNode.savedPayload.position.y @@ -270,7 +273,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { function syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd() { for (let i = 0; i < tradingSessionsFoundAtWorkspace.length; i++) { let node = tradingSessionsFoundAtWorkspace[i] - UI.projects.foundations.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) + UI.projects.algorithmicTrading.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) } tradingSessionsFoundAtWorkspace = undefined } @@ -278,7 +281,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { function syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd() { for (let i = 0; i < learningSessionsFoundAtWorkspace.length; i++) { let node = learningSessionsFoundAtWorkspace[i] - UI.projects.foundations.functionLibraries.tradingSessionFunctions.syncronizeSessionWithBackEnd(node) + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.syncronizeSessionWithBackEnd(node) } learningSessionsFoundAtWorkspace = undefined } @@ -443,6 +446,52 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { ) { node.type = "LAN Network Node" } + + if ( + node.type === 'Data Mine' || + node.type === 'API Data Fetcher Bot' || + node.type === 'Indicator Bot' || + node.type === 'Sensor Bot' + ) { + node.project = "Data-Mining" + } + + if ( + node.type === 'Trading Engine' || + node.type === 'Trading Mine' || + node.type === 'Trading System' || + node.type === 'Trading Bot' + ) { + node.project = "Algorithmic-Trading" + } + + if ( + node.type === 'Learning Engine' || + node.type === 'Learning Mine' || + node.type === 'Learning System' || + node.type === 'Learning Bot' + ) { + node.project = "Machine-Learning" + } + + 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 Project' || + node.type === 'Plugin Learning Systems' || + node.type === 'Plugin Learning Mines' || + node.type === 'Plugin Learning Engines' || + node.type === 'Plugin File' || + node.type === 'Plugin File Position' || + node.type === 'Plugin Data Mines' || + node.type === 'Plugin API Maps' + ) { + node.project = "Community-Plugins" + } + /* This function can be called with a positionOffset to change the node saved position and all of its descendants positions as well with an @@ -718,7 +767,11 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() { if (property.type === 'node') { if (property.name !== previousPropertyName) { if (node[property.name] === undefined) { - addUIObject(node, property.childType, rootNodes) + let currenAngleToParent = node.payload.floatingObject.angleToParent + node.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + let uiObject = addUIObject(node, property.childType, rootNodes, property.project) + node.payload.floatingObject.angleToParent = currenAngleToParent + //uiObject.payload.floatingObject.angleToParent = currenAngleToParent previousPropertyName = property.name } } diff --git a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js index 61a2b1335..c8ab84b65 100644 --- a/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js +++ b/Projects/Foundations/UI/Spaces/Design-Space/Workspace.js @@ -18,7 +18,7 @@ function newWorkspace() { share: shareWorkspace, getNodesByTypeAndHierarchyHeadsType: getNodesByTypeAndHierarchyHeadsType, getProjectsHeads: getProjectsHeads, - getProjectHeadByNodeType: getProjectHeadByNodeType, + getProjectHeadByNodeType: getProjectHeadByNodeType, getHierarchyHeads: getHierarchyHeads, getHierarchyHeadsById: getHierarchyHeadsById, getHierarchyHeadsByCodeNameAndNodeType: getHierarchyHeadsByCodeNameAndNodeType, @@ -72,7 +72,7 @@ function newWorkspace() { for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { let project = PROJECTS_SCHEMA[i].name try { - let actionSwitch = eval('new' + project + 'ActionSwitch()') + let actionSwitch = eval('new' + project.replaceAll('-', '') + 'ActionSwitch()') actionSwitchesByProject.set(project, actionSwitch) } catch (err) { console.log('[WARN] Action Switch for project ' + project + ' not found.') @@ -255,7 +255,7 @@ function newWorkspace() { let saveWithWorkspace = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(pluginFile.payload, 'saveWithWorkspace') if (saveWithWorkspace === true) { - UI.projects.foundations.utilities.plugins.savePluginFile(pluginFile) + UI.projects.communityPlugins.utilities.plugins.savePluginFile(pluginFile) } } } @@ -706,6 +706,10 @@ function newWorkspace() { action.rootNodes = thisObject.workspaceNode.rootNodes let actionSwitch = actionSwitchesByProject.get(action.project) + if (actionSwitch === undefined) { + console.log('[ERROR] Action Switch for project ' + action.project + ' could not be found.') + return + } return actionSwitch.executeAction(action) } diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js index c9fa366ba..18701154a 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenu.js @@ -80,6 +80,7 @@ function newCircularMenu() { menuItem.angle = menuItemInitialValue.angle menuItem.currentStatus = menuItemInitialValue.currentStatus menuItem.relatedUiObject = menuItemInitialValue.relatedUiObject + menuItem.relatedUiObjectProject = menuItemInitialValue.relatedUiObjectProject menuItem.dontShowAtFullscreen = menuItemInitialValue.dontShowAtFullscreen menuItem.askConfirmation = menuItemInitialValue.askConfirmation menuItem.confirmationLabel = menuItemInitialValue.confirmationLabel diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js index 17c1b8865..9f4a3e5d8 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/CircularMenuItem.js @@ -39,6 +39,7 @@ function newCircularMenuItem() { container: undefined, payload: undefined, relatedUiObject: undefined, + relatedUiObjectProject: undefined, dontShowAtFullscreen: undefined, isEnabled: true, shorcutNumber: undefined, @@ -267,12 +268,22 @@ function newCircularMenuItem() { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', thisObject.secondaryIcon) thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', thisObject.secondaryIcon) } else { + + /* + TODO : This code needs to be cleaned and reorganized. It is not clear how a menu item icon is going to be selected. + */ + if (thisObject.relatedUiObject !== undefined && thisObject.iconProject !== undefined) { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.iconProject, thisObject.relatedUiObject) thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.iconProject, thisObject.relatedUiObject) } else if (thisObject.relatedUiObject !== undefined && thisObject.iconProject === undefined) { - thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) - thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + if (thisObject.relatedUiObjectProject !== undefined) { + thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.relatedUiObjectProject, thisObject.relatedUiObject) + thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.relatedUiObjectProject, thisObject.relatedUiObject) + } else { + thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + thisObject.iconOff = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) + } } else { if (thisObject.iconPathOn !== undefined && thisObject.iconPathOff !== undefined && thisObject.iconProject !== undefined) { thisObject.iconOn = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName(thisObject.iconProject, thisObject.iconPathOn) @@ -306,7 +317,7 @@ function newCircularMenuItem() { if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { let text = thisObject.action - if(thisObject.payload.uiObject.payload.referenceParent !== undefined && thisObject.action === 'Reference Detach'){ + if (thisObject.payload.uiObject.payload.referenceParent !== undefined && thisObject.action === 'Reference Detach') { text = text + ' -> [Existing Reference] Type : [' + thisObject.payload.uiObject.payload.referenceParent.type + '] , Name : [' + thisObject.payload.uiObject.payload.referenceParent.name + ']' } @@ -491,31 +502,34 @@ function newCircularMenuItem() { if (thisObject.icon === undefined) { thisObject.icon = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', 'missing-image') } - if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { - browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) + + if (thisObject.icon !== undefined) { + if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { + browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) + } + } - /* Menu Label */ - if (thisObject.type === 'Icon & Text') { - label = labelToPrint - if (thisObject.shorcutNumber !== undefined) { - label = '' + thisObject.shorcutNumber + '- ' + labelToPrint + /* Menu Label */ + if (thisObject.type === 'Icon & Text') { + label = labelToPrint + if (thisObject.shorcutNumber !== undefined) { + label = '' + thisObject.shorcutNumber + '- ' + labelToPrint + } + + let labelPoint + let fontSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontSize + + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + + if (thisObject.currentRadius >= thisObject.targetRadius) { + labelPoint = { + x: menuPosition.x + thisObject.currentRadius + 25, + y: menuPosition.y + fontSize * FONT_ASPECT_RATIO } - let labelPoint - let fontSize = UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontSize - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (thisObject.currentRadius >= thisObject.targetRadius) { - labelPoint = { - x: menuPosition.x + thisObject.currentRadius + 25, - y: menuPosition.y + fontSize * FONT_ASPECT_RATIO - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontColor + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } + browserCanvasContext.fillStyle = 'rgba(' + UI.projects.foundations.spaces.floatingSpace.style.node.menuItem.fontColor + ', 1)' + browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) } } } diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js b/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js index 5bf0f56e5..16f89505d 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js @@ -1433,9 +1433,6 @@ function newUiObject() { function drawForeground() { if (thisObject.isOnFocus === false) { drawBodyAndPicture() - if (isDragging === false) { - thisObject.menu.drawForeground() - } } if (thisObject.circularProgressBar !== undefined) { diff --git a/Projects/Governance/Plugins/User-Profiles/e-Nut.json b/Projects/Governance/Plugins/User-Profiles/e-Nut.json new file mode 100644 index 000000000..c111f31a3 --- /dev/null +++ b/Projects/Governance/Plugins/User-Profiles/e-Nut.json @@ -0,0 +1,486 @@ +{ + "type": "User Profile", + "name": "e-Nut", + "config": "{\"signature\":{\"message\":\"e-Nut\",\"messageHash\":\"0x391566b832958cdd76a1114e8009973a8cba55a94524611fe26a3293525d4ef0\",\"v\":\"0x1b\",\"r\":\"0xb552111b525c267ea45f4159c30d84057fdb0cb3b9fb823cd4d461010e1512f5\",\"s\":\"0x6a94ebd9dadc8e8e8c3a592d7f38d8b6db113e5b418e17db062e52cb2b02e3b1\",\"signature\":\"0xb552111b525c267ea45f4159c30d84057fdb0cb3b9fb823cd4d461010e1512f56a94ebd9dadc8e8e8c3a592d7f38d8b6db113e5b418e17db062e52cb2b02e3b11b\"},\"codeName\":\"e-Nut\"}", + "project": "Governance", + "tokenPowerSwitch": { + "type": "Token Power Switch", + "name": "New Token Power Switch", + "config": "{}", + "project": "Governance", + "tokenPowerSwitch": [], + "onboardingPrograms": { + "type": "Onboarding Programs", + "name": "New Onboarding Programs", + "config": "{}", + "project": "Governance", + "airdropProgram": { + "type": "Airdrop Program", + "name": "New Airdrop Program", + "config": "{}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "186fa601-83ec-46e9-98b9-7957068b15ab", + "savedPayload": { + "position": { + "x": 27546.666666666668, + "y": 11259.577136594007 + }, + "targetPosition": { + "x": 27396.666666666668, + "y": 11519.384757729338 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5d2978f1-b8c6-4e49-b836-dcb024a3b2d9", + "savedPayload": { + "position": { + "x": 27396.666666666668, + "y": 11519.384757729338 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 11779.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "f26b4f62-fadb-40cd-b4ea-107878a14f8d", + "savedPayload": { + "position": { + "x": 27246.666666666668, + "y": 11779.192378864669 + }, + "targetPosition": { + "x": 27096.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "communityBuildingPrograms": { + "type": "Community Building Programs", + "name": "New Community Building Programs", + "config": "{}", + "project": "Governance", + "referralProgram": { + "type": "Referral Program", + "name": "New Referral Program", + "config": "{}", + "project": "Governance", + "userReferrers": [ + { + "type": "User Referrer", + "name": "Julian-Molina", + "config": "{}", + "project": "Governance", + "id": "cbd265e8-6901-4b39-a32e-90f1f4ceda27", + "savedPayload": { + "position": { + "x": 27356.474287802, + "y": 11889 + }, + "targetPosition": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + }, + "referenceParent": { + "type": "User Profile", + "name": "Julian-Molina", + "id": "b85aaac1-0708-4aec-97f9-bc3cc70e530a" + }, + "referenceParentCombinedNodePath": [ + [ + "Julian-Molina", + "User Profile", + "Governance", + "b85aaac1-0708-4aec-97f9-bc3cc70e530a" + ] + ] + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "069b44d4-275d-4ad9-bf50-d544ef068122", + "savedPayload": { + "position": { + "x": 27766.281908937333, + "y": 11998.807621135331 + }, + "targetPosition": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "bdae17d6-383e-4c20-b854-69247d60a6f9", + "savedPayload": { + "position": { + "x": 27656.474287802, + "y": 12408.615242270662 + }, + "targetPosition": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "3484dfef-3061-4b14-93e4-fdbed11c85f6", + "savedPayload": { + "position": { + "x": 27506.474287802, + "y": 12148.807621135331 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "supportProgram": { + "type": "Support Program", + "name": "New Support Program", + "config": "{}", + "project": "Governance", + "userSupporters": [], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "3baa7948-daa7-4df9-8d80-64f8ac14b499", + "savedPayload": { + "position": { + "x": 27696.666666666668, + "y": 12558.615242270662 + }, + "targetPosition": { + "x": 27396.666666666668, + "y": 12558.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "d2e96c0e-abf6-4772-8e24-15af688d8bbf", + "savedPayload": { + "position": { + "x": 27246.666666666668, + "y": 12818.422863405993 + }, + "targetPosition": { + "x": 27396.666666666668, + "y": 12558.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "8496db7f-2de2-4b9c-b6ed-28a615a81175", + "savedPayload": { + "position": { + "x": 27396.666666666668, + "y": 12558.615242270662 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "mentorshipProgram": { + "type": "Mentorship Program", + "name": "New Mentorship Program", + "config": "{}", + "project": "Governance", + "userMentors": [], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "6e18bbd4-adab-4a62-b6bc-76b3b173b0cb", + "savedPayload": { + "position": { + "x": 26986.859045531335, + "y": 12748.807621135331 + }, + "targetPosition": { + "x": 26986.859045531335, + "y": 12448.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "db7aa9b6-e13e-4ff5-8f8b-4917f370f1fa", + "savedPayload": { + "position": { + "x": 26727.051424396002, + "y": 12298.807621135331 + }, + "targetPosition": { + "x": 26986.859045531335, + "y": 12448.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c08965ff-0f15-4e81-8ab9-40b005aa535d", + "savedPayload": { + "position": { + "x": 26986.859045531335, + "y": 12448.807621135331 + }, + "targetPosition": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "2af4c1ba-46e6-4edd-bec8-fe919314610e", + "savedPayload": { + "position": { + "x": 27246.666666666668, + "y": 12298.807621135331 + }, + "targetPosition": { + "x": 27096.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "24b6e856-b17a-4bee-a7c4-d3faef24de7b", + "savedPayload": { + "position": { + "x": 27096.666666666668, + "y": 12039 + }, + "targetPosition": { + "x": 26796.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensMined": { + "type": "Tokens Mined", + "name": "New Tokens Mined", + "project": "Governance", + "id": "5e228ba9-e577-46b7-88a6-90b88595c11a", + "savedPayload": { + "position": { + "x": 26496.666666666668, + "y": 12039 + }, + "targetPosition": { + "x": 26796.666666666668, + "y": 12039 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "9d54ff41-1328-4e8b-b7b3-e71a5b0404df", + "savedPayload": { + "position": { + "x": 26666.666666666668, + "y": 19850 + }, + "targetPosition": { + "x": 26666.666666666668, + "y": 19850 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } +} \ No newline at end of file diff --git a/Projects/Governance/Plugins/User-Profiles/gitforkgit.json b/Projects/Governance/Plugins/User-Profiles/gitforkgit.json new file mode 100644 index 000000000..ac648a61e --- /dev/null +++ b/Projects/Governance/Plugins/User-Profiles/gitforkgit.json @@ -0,0 +1,557 @@ +{ + "type": "User Profile", + "name": "gitforkgit", + "config": "{\"signature\":{\"message\":\"gitforkgit\",\"messageHash\":\"0xc415d393ce27788f580950585603adc754cd6f01038ec5ade1522847e6d71f4b\",\"v\":\"0x1c\",\"r\":\"0x15ecb0cca464934bd3109e8026e4bf2e47bdbb0267090f1764463f96a3eccdc5\",\"s\":\"0x7cbf5e1ac42e965dac0e985e5e9293e197ecb5d50c9e3416a4ac902e85341b6a\",\"signature\":\"0x15ecb0cca464934bd3109e8026e4bf2e47bdbb0267090f1764463f96a3eccdc57cbf5e1ac42e965dac0e985e5e9293e197ecb5d50c9e3416a4ac902e85341b6a1c\"},\"codeName\":\"gitforkgit\"}", + "project": "Governance", + "tokenPowerSwitch": { + "type": "Token Power Switch", + "name": "New Token Power Switch", + "config": "{}", + "project": "Governance", + "tokenPowerSwitch": [], + "onboardingPrograms": { + "type": "Onboarding Programs", + "name": "New Onboarding Programs", + "config": "{\n \"percentage\": 0\n}", + "project": "Governance", + "airdropProgram": { + "type": "Airdrop Program", + "name": "New Airdrop Program", + "config": "{}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "067a4281-671a-449a-9b72-14c42cae1ae8", + "savedPayload": { + "position": { + "x": 13483.333333333334, + "y": 11470.577136594007 + }, + "targetPosition": { + "x": 13633.333333333334, + "y": 11730.384757729338 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "68045aea-e5ec-4e9f-8cd7-e5008a86412c", + "savedPayload": { + "position": { + "x": 13633.333333333334, + "y": 11730.384757729338 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 11990.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "githubProgram": { + "type": "Github Program", + "name": "New Github Program", + "config": "{}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "da3f58c5-3bb3-455b-9544-550dee2d9fbc", + "savedPayload": { + "position": { + "x": 14383.333333333334, + "y": 11990.192378864669 + }, + "targetPosition": { + "x": 14083.333333333334, + "y": 11990.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "ccd566d0-4fa9-4be0-bb81-179e6303522b", + "savedPayload": { + "position": { + "x": 14083.333333333334, + "y": 11990.192378864669 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 11990.192378864669 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "bdb856e9-eafc-40f8-87fe-46b95c680ca9", + "savedPayload": { + "position": { + "x": 13783.333333333334, + "y": 11990.192378864669 + }, + "targetPosition": { + "x": 13633.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "communityBuildingPrograms": { + "type": "Community Building Programs", + "name": "New Community Building Programs", + "config": "{}", + "project": "Governance", + "referralProgram": { + "type": "Referral Program", + "name": "New Referral Program", + "config": "{}", + "project": "Governance", + "userReferrers": [ + { + "type": "User Referrer", + "name": "", + "config": "{}", + "project": "Governance", + "id": "982253cd-6526-43ab-be70-b7bf7ee92f51", + "savedPayload": { + "position": { + "x": 13893.140954468665, + "y": 12100 + }, + "targetPosition": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "5c2e9a56-5ef7-4076-8749-a40342a041d5", + "savedPayload": { + "position": { + "x": 14302.948575603996, + "y": 12209.807621135331 + }, + "targetPosition": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "e2493ead-e0c1-4535-a768-c2e002ab3c8d", + "savedPayload": { + "position": { + "x": 14193.140954468665, + "y": 12619.615242270662 + }, + "targetPosition": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5d6f1757-ea56-4e72-a0d6-009c94c5bc7e", + "savedPayload": { + "position": { + "x": 14043.140954468665, + "y": 12359.807621135331 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "supportProgram": { + "type": "Support Program", + "name": "New Support Program", + "config": "{}", + "project": "Governance", + "userSupporters": [ + { + "type": "User Supporter", + "name": "", + "config": "{}", + "project": "Governance", + "id": "ada671e7-03f8-4565-ac5c-d22e07f02462", + "savedPayload": { + "position": { + "x": 14193.140954468665, + "y": 12619.615242270662 + }, + "targetPosition": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "fff18c7a-cd37-467c-8bdb-a036f2d2a9a0", + "savedPayload": { + "position": { + "x": 14083.333333333334, + "y": 13029.422863405993 + }, + "targetPosition": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "a2ead972-dfc5-495b-8efc-f4aaa9f0e6c0", + "savedPayload": { + "position": { + "x": 13673.525712198003, + "y": 12919.615242270662 + }, + "targetPosition": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "5745f70c-0d77-4ad3-9fba-907266217b69", + "savedPayload": { + "position": { + "x": 13933.333333333334, + "y": 12769.615242270662 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "mentorshipProgram": { + "type": "Mentorship Program", + "name": "New Mentorship Program", + "config": "{}", + "project": "Governance", + "userMentors": [], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "f5ddff6e-0a6a-4d06-9c04-a40d406ca37b", + "savedPayload": { + "position": { + "x": 13523.525712198003, + "y": 12959.807621135331 + }, + "targetPosition": { + "x": 13523.525712198003, + "y": 12659.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "d799c41c-ba6b-42ec-9b5c-17cdb1bca814", + "savedPayload": { + "position": { + "x": 13263.718091062672, + "y": 12509.807621135331 + }, + "targetPosition": { + "x": 13523.525712198003, + "y": 12659.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "2b5206c6-7e49-4bf6-8236-01080242c851", + "savedPayload": { + "position": { + "x": 13523.525712198003, + "y": 12659.807621135331 + }, + "targetPosition": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "bb518745-f59c-4fb6-a4e0-646ff983f503", + "savedPayload": { + "position": { + "x": 13783.333333333334, + "y": 12509.807621135331 + }, + "targetPosition": { + "x": 13633.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "1a0104de-bed0-4c64-a273-3a97a7605773", + "savedPayload": { + "position": { + "x": 13633.333333333334, + "y": 12250 + }, + "targetPosition": { + "x": 13333.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensMined": { + "type": "Tokens Mined", + "name": "New Tokens Mined", + "project": "Governance", + "id": "5595fb56-7fdc-4096-b798-950ad763f8f9", + "savedPayload": { + "position": { + "x": 13033.333333333334, + "y": 12250 + }, + "targetPosition": { + "x": 13333.333333333334, + "y": 12250 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "a600818b-6702-4be1-94ea-46478a914cb4", + "savedPayload": { + "position": { + "x": 13333.333333333334, + "y": 23650 + }, + "targetPosition": { + "x": 13333.333333333334, + "y": 23650 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": true, + "angleToParent": 1, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } +} \ No newline at end of file diff --git a/Projects/Governance/Plugins/User-Profiles/quantum8.json b/Projects/Governance/Plugins/User-Profiles/quantum8.json index df45fbe51..7ee935bb5 100644 --- a/Projects/Governance/Plugins/User-Profiles/quantum8.json +++ b/Projects/Governance/Plugins/User-Profiles/quantum8.json @@ -1,7 +1,7 @@ { "type": "User Profile", "name": "quantum8", - "config": "{\n \"signature\": {\n \"message\": \"quantum8\",\n \"messageHash\": \"0x9eb09f3e33aa12ba004cec8f8b825ea0960c0bb2571c93c20e447e56be0f76a3\",\n \"v\": \"0x1b\",\n \"r\": \"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f\",\n \"s\": \"0x79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca2\",\n \"signature\": \"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca21b\"\n },\n \"codeName\": \"quantum8\"\n}", + "config": "{\"signature\":{\"message\":\"quantum8\",\"messageHash\":\"0x9eb09f3e33aa12ba004cec8f8b825ea0960c0bb2571c93c20e447e56be0f76a3\",\"v\":\"0x1b\",\"r\":\"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f\",\"s\":\"0x79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca2\",\"signature\":\"0x0c2960da1cec24bc9a59f83a4cfaff7fbc39199c7394698aa58bda25cc2f049f79ac843019064f1830b0466712f62aa3dcf78f550aee958ac6124fd8fde19ca21b\"},\"codeName\":\"quantum8\"}", "project": "Governance", "tokenPowerSwitch": { "type": "Token Power Switch", @@ -128,11 +128,11 @@ "savedPayload": { "position": { "x": 15606.471656997473, - "y": 12037.867965644036 + "y": 23437.867965644036 }, "targetPosition": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -150,7 +150,7 @@ "communityBuildingPrograms": { "type": "Community Building Programs", "name": "New Community Building Programs", - "config": "{}", + "config": "{\n \"percentage\": 1\n}", "project": "Governance", "referralProgram": { "type": "Referral Program", @@ -258,11 +258,11 @@ "savedPayload": { "position": { "x": 15954.14724377684, - "y": 12100 + "y": 23500 }, "targetPosition": { "x": 15694.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -312,14 +312,12 @@ "referenceParent": { "type": "User Profile", "name": "Julian-Molina", - "id": "1fd95e41-4b22-48d5-be3a-904c37afcb11" + "id": "b85aaac1-0708-4aec-97f9-bc3cc70e530a" }, "referenceParentCombinedNodePath": [ [ "Julian-Molina", - "User Profile", - "Governance", - "1fd95e41-4b22-48d5-be3a-904c37afcb11" + "User Profile" ] ] } @@ -424,11 +422,11 @@ "savedPayload": { "position": { "x": 15954.14724377684, - "y": 12400 + "y": 23800 }, "targetPosition": { "x": 15694.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -447,11 +445,11 @@ "savedPayload": { "position": { "x": 15694.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -471,66 +469,10 @@ "name": "New Votes And Claims Programs", "config": "{}", "project": "Governance", - "votingProgram": { - "type": "Voting Program", - "name": "New Voting Program", - "config": "{}", - "project": "Governance", - "votesSwitch": [], - "tokensBonus": { - "type": "Tokens Bonus", - "name": "New Tokens Bonus", - "project": "Governance", - "id": "d448e95d-db4e-45dd-a0f3-adcc3169a128", - "savedPayload": { - "position": { - "x": 16186.027152770916, - "y": 12617.423461417475 - }, - "targetPosition": { - "x": 15896.249404884195, - "y": 12539.77774788672 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "abfe64f3-9fd9-4ff3-8520-841e84472055", - "savedPayload": { - "position": { - "x": 15896.249404884195, - "y": 12539.77774788672 - }, - "targetPosition": { - "x": 15606.471656997473, - "y": 12462.132034355964 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": true, - "angleToParent": 2, - "distanceToParent": 3, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, "claimsProgram": { "type": "Claims Program", "name": "New Claims Program", - "config": "{}", + "config": "{\n \"percentage\": 99\n}", "project": "Governance", "assetClaimsFolders": [ { @@ -548,12 +490,12 @@ "id": "68121dca-efcb-413c-b2c7-08890be6c36b", "savedPayload": { "position": { - "x": 16203.73261279889, - "y": 13051.909782242685 + "x": 16418.603691353437, + "y": 24074.264068711927 }, "targetPosition": { - "x": 15943.92499166356, - "y": 12901.909782242685 + "x": 16118.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -569,7 +511,7 @@ "referenceParent": { "type": "Asset", "name": "quantum.json", - "id": "7c8eaae9-331d-470b-bb24-012daad50c27" + "id": "9ac2e5dc-6b87-43ae-82bc-758669f95074" }, "referenceParentCombinedNodePath": [ [ @@ -595,12 +537,12 @@ "id": "ac8cd464-4ba9-42b3-8ae6-c229f8e26931", "savedPayload": { "position": { - "x": 15943.92499166356, - "y": 12901.909782242685 + "x": 16118.603691353437, + "y": 24074.264068711927 }, "targetPosition": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -621,7 +563,7 @@ { "type": "Position Claims Folder", "name": "New Position Claims Folder", - "config": "{}", + "config": "{\n \"percentage\": 20\n}", "project": "Governance", "positionClaimsFolders": [], "positionContributionClaims": [ @@ -633,12 +575,12 @@ "id": "c4c0c9fb-bd96-4c75-b9ee-187e7f5cb9b3", "savedPayload": { "position": { - "x": 15839.40879758974, - "y": 13331.465278016127 + "x": 16242.867760065365, + "y": 24498.528137423855 }, "targetPosition": { - "x": 15761.763084058985, - "y": 13041.687530129406 + "x": 16030.7357257094, + "y": 24286.39610306789 }, "floatingObject": { "isPinned": false, @@ -688,12 +630,12 @@ "id": "f0da0682-0041-4766-8650-76b09c4cd6fd", "savedPayload": { "position": { - "x": 15761.763084058985, - "y": 13041.687530129406 + "x": 16030.7357257094, + "y": 24286.39610306789 }, "targetPosition": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -716,12 +658,12 @@ "id": "8e22e033-836e-4984-944d-2af5a8130f92", "savedPayload": { "position": { - "x": 15534.117370528229, - "y": 13011.717403378016 + "x": 15818.603691353437, + "y": 24374.264068711927 }, "targetPosition": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "floatingObject": { "isPinned": false, @@ -739,12 +681,12 @@ "id": "e38b91df-79f1-457c-b68b-7b6ca9002a1a", "savedPayload": { "position": { - "x": 15684.117370528229, - "y": 12751.909782242685 + "x": 15818.603691353437, + "y": 24074.264068711927 }, "targetPosition": { "x": 15606.471656997473, - "y": 12462.132034355964 + "y": 23862.132034355964 }, "floatingObject": { "isPinned": false, @@ -763,11 +705,11 @@ "savedPayload": { "position": { "x": 15606.471656997473, - "y": 12462.132034355964 + "y": 23862.132034355964 }, "targetPosition": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -786,11 +728,11 @@ "savedPayload": { "position": { "x": 15394.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -813,11 +755,11 @@ "savedPayload": { "position": { "x": 14794.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, @@ -836,16 +778,16 @@ "savedPayload": { "position": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "targetPosition": { "x": 15094.33962264151, - "y": 12250 + "y": 23650 }, "floatingObject": { "isPinned": false, "isFrozen": false, - "isCollapsed": false, + "isCollapsed": true, "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 diff --git a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json index eeb98ace4..3a7be216e 100644 --- a/Projects/Governance/Schemas/Docs-Books/the-governance-project.json +++ b/Projects/Governance/Schemas/Docs-Books/the-governance-project.json @@ -2,7 +2,14 @@ "type": "The Governance Project", "definition": { "text": "The Governance Project is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions. It allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines.", - "updated": 1624782493205 + "updated": 1624782493205, + "translations": [ + { + "language": "ES", + "text": "El proyecto de gobernanza está diseñado como un sistema flexible que permite a la comunidad dirigir influencias en direcciones arbitrarias en forma dinámica. Esto permite que la gobernanza evolucione con el proyecto. También promueve la innovación sin permiso, ya que los contribuyentes pueden proponer nuevas áreas de desarrollo y movilizar a la comunidad a incentivar la expansión a lo largo de nuevas lineas.", + "updated": 1633344584790 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json b/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json index 6c7b216ba..593f1bfaf 100644 --- a/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json +++ b/Projects/Governance/Schemas/Docs-Concepts/C/Community/Community-Mods/community-mods.json @@ -2,7 +2,14 @@ "type": "Community Mods", "definition": { "text": "If you have a knack for lovingly explaining things, find pleasure in helping people, and wish to give back to the project, becoming a Community Mod may be great for you and the project!", - "updated": 1630005046805 + "updated": 1630005046805, + "translations": [ + { + "language": "ES", + "text": "Si tiene la habilidad de explicar las cosas amorosamente, disfruta de ayudar a la gente, y desea devolver al proyecto convitiéndose en un Community Mod ( moderador de la comunidad) puede ser muy bueno para usted y para el proyecto!", + "updated": 1633524089504 + } + ] }, "paragraphs": [ { @@ -13,7 +20,14 @@ { "style": "Callout", "text": "To become a Community Mod, you must go deep into the rabbit hole, study the Docs and tutorials, and start using the system. It takes a deep understanding of how things work before you’re able to explain it to someone else. That said, it doesn’t take much to help newcomers with the easier questions. You may get involved and participate in the Community Group and Support Group, and, at some point, we’ll draft you to join the team!", - "updated": 1630495449816 + "updated": 1630495449816, + "translations": [ + { + "language": "ES", + "text": "Para convertirse en un Community Mod, debe ir más profundo al meollo de la cuestión, estudie los Docs y los tutoriales, y comience a usar el sistema. Conlleva un entendimiento más profundo de como funcionan las cosas antes de que esté en condiciones de explicarle a alguién más. Dicho esto, no se necesita demaciado para ayudar a las preguntas más faciles de los recién llegados. Puede comprometerse y participar en el Community Group y el Support Group, y, en algún momento, lo invitaremos a formar parte del equipo!", + "updated": 1633524555342 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json b/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json index 6789ecf8e..c9a91b3ed 100644 --- a/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json +++ b/Projects/Governance/Schemas/Docs-Concepts/C/Contribution/Contribution-Claims/contribution-claims.json @@ -2,12 +2,26 @@ "type": "Contribution Claims", "definition": { "text": "The term Contribution Claims is a generalization of the concept of claims and may refer to any or all of the existing types, namely Asset Contribution Claim, Feature Contribution Claim, and Position Contribution Claim nodes.", - "updated": 1630351499915 + "updated": 1630351499915, + "translations": [ + { + "language": "ES", + "text": "El término Contribution Claims ( declaración de contribución) es una generalización del concepto reclamo y puede referirse a cualquiera o a todos los tipos existentes, a saber Asset Contribution Claim (declaración de contribución de activos), Feature Contribution Claim ( declaración de contribución de funciones), and Position Contribution Claim nodes (declaraciónde contribución de posición de nodos).", + "updated": 1633179306733 + } + ] }, "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." + "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.", + "translations": [ + { + "language": "ES", + "text": "Cliquear botón derecho y editar para entrar en el modo edición y cambiar este texto. ENTER para escribir parrafos nuevos. ESC para salir del modo edición. Entonces puede escribir docs.save arriba y ENTER para guardar los cambios y app.contribute ENTER para enviarlos al repositorio principal.", + "updated": 1633179602447 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json b/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json index bf016317f..07b21fc00 100644 --- a/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json +++ b/Projects/Governance/Schemas/Docs-Concepts/T/Token/Token-Power/token-power.json @@ -2,7 +2,14 @@ "type": "Token Power", "definition": { "text": "Your Token Power is equal to the number of Superalgos SA Tokens in your Governance Address, and is a measure of the influence you have in relation with the influence of the rest of Contributors participating in governance.", - "updated": 1624780307783 + "updated": 1624780307783, + "translations": [ + { + "language": "ES", + "text": "Su Token Power es igual al número de Superalgos SA Tokens en su Governance Address, y es una medida de la influencia que tiene con respecto a la influencia del resto de los contribuyentes participando de la gobernanza.", + "updated": 1633532803325 + } + ] }, "paragraphs": [ { @@ -12,7 +19,14 @@ }, { "style": "Callout", - "text": "Your Token Power is equal to the number of Superalgos SA Tokens in your Governance Address, and is a measure of the influence you have in relation with the influence of the rest of Contributors participating in governance." + "text": "Your Token Power is equal to the number of Superalgos SA Tokens in your Governance Address, and is a measure of the influence you have in relation with the influence of the rest of Contributors participating in governance.", + "translations": [ + { + "language": "ES", + "text": "Su Token Power es igual al número de Superalgos SA Tokens en su Governance Address, y es una medida de la influencia que tiene con respecto a la influencia del resto de los contribuyentes participando de la gobernanza.", + "updated": 1633532837434 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json b/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json index b00a6f0a5..820c2acb3 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json +++ b/Projects/Governance/Schemas/Docs-Nodes/C/Community/Community-Building-Programs/community-building-programs.json @@ -7,7 +7,8 @@ { "language": "ES", "text": "Superalgos prospera a través de contribuciones y colaboración. Diseñamos el Community Building Programs para fomentar una comunidad en la que los miembros siempre estén dispuestos a ayudar y retribuir. El nodo puede generar los nodos Referral Program, Support Program, y Mentorship Program.", - "updated": 1630896389287 + "updated": 1630896389287, + "style": "Definition" } ] }, @@ -20,55 +21,132 @@ { "style": "Success", "text": "Learn more about how Token Power Flows into these programs!", - "updated": 1630218909731 + "updated": 1630218909731, + "translations": [ + { + "language": "ES", + "text": "Aprenda más a cerca de como fluye el Token Power en estos programas!", + "updated": 1633521539329 + } + ] }, { "style": "Text", - "text": "Each of the Community Building Programs has an associated Rewards Pool and a Bonus Pool under the Governance Programs > Community Building Programs section of the Superalgos Pools hierarchy." + "text": "Each of the Community Building Programs has an associated Rewards Pool and a Bonus Pool under the Governance Programs > Community Building Programs section of the Superalgos Pools hierarchy.", + "translations": [ + { + "language": "ES", + "text": "Cada programa del Community Building Programs tiene asociada una Rewards Pool y un Bonus Pool debajo de Governance Programs > Community Building Programs en la sección de la jerarquía de Superalgos Pools.", + "updated": 1633521703488 + } + ] }, { "style": "Note", "text": "The incentives entailed in a Bonus Pool are explained in the Tokens Bonus node.", - "updated": 1630170463942 + "updated": 1630170463942, + "translations": [ + { + "language": "ES", + "text": "Los incentivos implicados en una Bonus Pool están explicados en el nodo Tokens Bonus.", + "updated": 1633521794403 + } + ] }, { "style": "Text", "text": "Let's explore how each Rewards Pool is distributed in the case of Community Building Programs. In general terms, the Referral Program, Support Program, and Mentorship Program all have the following common rules:", - "updated": 1630399976367 + "updated": 1630399976367, + "translations": [ + { + "language": "ES", + "text": "Exploremos como cada Rewards Pool es distribuida en el caso de los programas de la Community Building Programs. En términos generales, el Referral Program, Support Program y el Mentorship Program todos tienen las siguientes reglas comunes:", + "updated": 1633522008747 + } + ] }, { "style": "List", "text": "When your profile is referenced by others through their User Referrer, User Supporter, or User Mentor nodes, they pass on 10% of the Referral Power, Support Power, or Mentorship Power available in the node to you. This is your Incoming Power in the corresponding program.", - "updated": 1630166954607 + "updated": 1630166954607, + "translations": [ + { + "language": "ES", + "text": "Cuando su profile es referenciado por otros a través de los nodos de su User Referrer, User Supporter, or User Mentor, ellos pasan un 10% del Referral Power, Support Power, or Mentorship Power disponible en el nodo a usted. Este es su Incoming Power en el programa correspondiente.", + "updated": 1633522227632 + } + ] }, { "style": "List", "text": "Your Incoming Power is added to your Own Power in the corresponding program, so that you may pass on more power to other User Profiles. Like in the reverse case, when you reference other User Profiles, you pass on 10% of the power that reaches the node establishing the reference.", - "updated": 1630166856996 + "updated": 1630166856996, + "translations": [ + { + "language": "ES", + "text": "Su Incoming Power es agregado a su propio Own Power en el programa correspondiente, para que entonces pueda enviar más power a otros User Profiles. Como en el caso contrario, cuando referencia a otros su User Profiles, usted pasa un 10% del power que alcanza el nodo que establece la referencia.", + "updated": 1633522374508 + } + ] }, { "style": "Important", "text": "This passing of 10% of the power from one user to the next has the effect of rewarding collaboration chains. ", - "updated": 1630683048349 + "updated": 1630683048349, + "translations": [ + { + "language": "ES", + "text": "Este pasar el 10% del power de un usuario al siguiente tiene el efecto de recompensar las cadenas de colaboración.", + "updated": 1633522479558 + } + ] }, { "style": "Callout", "text": "For instance, Alice tells her friend Bob about Superalgos. When Bob eventually sets up his User Profile, he declares Alice as his referrer. This means that Alice gets 10% of the Referral Power that Bob drives to his User Referrer node. Then, Bob brings his friend Charly to Superalgos. Charly sets up his profile and declares Bob as his referrer. So now Bob gets 10% of the Referral Power that Charly drives to his User Referrer node. ", - "updated": 1630683087674 + "updated": 1630683087674, + "translations": [ + { + "language": "ES", + "text": "Por ejemplo, Alice le habla a su amigo Bob a cerca de Superalgos. Cuando Bob eventualmente programa su User Profile, declara que Alice es su referido. Esto significa que Alice obtiene un 10% del Referral Power que Bob dirige a su nodo User Referrer. Entonces, Bob trae a su amigo Charly a Superalgos. Charly configura su profile y declara a Bob como su referido. Entonces ahora Bob obtiene un 10% del Referral Power que Charly dirige a su nodo de User Referrer.", + "updated": 1633522898254 + } + ] }, { "style": "Success", "text": "Can you see what happens with Alice's Incoming Referral Power? That's it! She gets 10% of Bob's power, which includes 10% of Charly's power and son on!", - "updated": 1630683111245 + "updated": 1630683111245, + "translations": [ + { + "language": "ES", + "text": "Puede ver lo que sucede con el Incoming Referral Power de Alice? Eso es! Ella obtiene un 10% del power de Bob, que incluye un 10% del power de Charly y así sucesivamente!", + "updated": 1633523067803 + } + ] }, { "style": "Note", - "text": "Pretty much the same happens with the Support Program and the Mentorship Program." + "text": "Pretty much the same happens with the Support Program and the Mentorship Program.", + "translations": [ + { + "language": "ES", + "text": "Prácticamente lo mismo ocurre con el Support Program y el Mentorship Program.", + "updated": 1633523110557 + } + ] }, { "style": "Text", "text": "The Incoming Power you get from other users is in a Direct Proportion to the number of tokens you get from the corresponding program Rewards Pool. The calculation is based on a Rule of Three, and the result is displayed under the Tokens Awarded node of the corresponding program.", - "updated": 1630682945130 + "updated": 1630682945130, + "translations": [ + { + "language": "ES", + "text": "El Incoming Power que obtiene de otros usuarios está en una Direct Proportion al número de tokens que obtiene del programa corespondiente de la Rewards Pool. El cálculo está basado en una Rule of Three, y el resutado es mostrado debajo del nodo de Tokens Awarded del programa correspondiente.", + "updated": 1633523351316 + } + ] }, { "style": "Json", diff --git a/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json b/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json index e1b3a9d30..93ccbdca4 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json +++ b/Projects/Governance/Schemas/Docs-Nodes/O/Onboarding/Onboarding-Programs/onboarding-programs.json @@ -2,7 +2,14 @@ "type": "Onboarding Programs", "definition": { "text": "These programs incentivize Superalgos users to take the first couple of steps to participate in governance and start giving back to the project. They make earning the first few tokens a breeze and allow everyone to become invested in the Superalgos SA Token! We are talking about the Airdrop Program and the Github Program.", - "updated": 1630216446725 + "updated": 1630216446725, + "translations": [ + { + "language": "ES", + "text": "Estos programas incentivan a los usuarios de Superalgos a realizar los primeros pasos para participar en la gorvernanza y comenzar a devolver al proyecto. Ellos hacen ganar los primeros pocos token como una brisa y permite que todos se involucren en los Superalgos SA Token! Estamos hablando del the Airdrop Program y el Github Program.", + "updated": 1633515446793 + } + ] }, "paragraphs": [ { @@ -13,16 +20,37 @@ { "style": "Success", "text": "Learn more about how Token Power Flows into these programs!", - "updated": 1630228322651 + "updated": 1630228322651, + "translations": [ + { + "language": "ES", + "text": "Aprende más a cerca de como fluye el Token Power Flows dentro de los programas!", + "updated": 1633515500934 + } + ] }, { "style": "Text", - "text": "What these two programs have in common is that they don't require Token Power to function. That is, even if you have zero Superalgos SA Tokens and zero Delegated Power, you may still participate to earn your first few tokens!" + "text": "What these two programs have in common is that they don't require Token Power to function. That is, even if you have zero Superalgos SA Tokens and zero Delegated Power, you may still participate to earn your first few tokens!", + "translations": [ + { + "language": "ES", + "text": "Lo que tienen estos dos programas en común es que no requieren de Token Power para funcionar. Esto es, aún si tiene cero Superalgos SA Tokens y cero Delegated Power, aún puede participar para ganar los primeros pocos tokens!", + "updated": 1633515674124 + } + ] }, { "style": "Callout", "text": "All you need to do to participate is spawn each of the program nodes and submit your User Profile!", - "updated": 1630228214813 + "updated": 1630228214813, + "translations": [ + { + "language": "ES", + "text": "Todo lo que necesita hacer para participar es generar cada uno cada uno de los nodos del programa y crear su User Profile!", + "updated": 1633515800198 + } + ] }, { "style": "Block", diff --git a/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json b/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json index a8af0e6ff..c77421941 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json +++ b/Projects/Governance/Schemas/Docs-Nodes/R/Referral/Referral-Program/referral-program.json @@ -2,7 +2,14 @@ "type": "Referral Program", "definition": { "text": "The referral program incentivizes the promotion of the project, either by word-of-mouth or “en masse” through articles, social media posts, videos, and other forms of influencer marketing.", - "updated": 1630227795694 + "updated": 1630227795694, + "translations": [ + { + "language": "ES", + "text": "El referral program incentiva la promoción del proyecto, ya sea de boca en boca o en masa a través de artículos, posteos en redes sociales, videos y otras formas de influencias en marketing .", + "updated": 1633524918233 + } + ] }, "paragraphs": [ { @@ -17,11 +24,25 @@ }, { "style": "Text", - "text": "With this program, you may earn Superalgos SA Tokens for every user you refer to the project, and also for the users they refer!" + "text": "With this program, you may earn Superalgos SA Tokens for every user you refer to the project, and also for the users they refer!", + "translations": [ + { + "language": "ES", + "text": "Con este programa, puede ganar Superalgos SA Tokens por cada usuario que usted refiera al proyecto, y tambien por los usuarios que ellos referencien!", + "updated": 1633525009280 + } + ] }, { "style": "Callout", - "text": "To participate, you must spawn the Referral Program and declare your referrer. To do that, add a User Referrer node and use it to establish a reference to the User Profile of the person that referred you to Superalgos. If you have more than one referrer, simply add more User Referrer nodes." + "text": "To participate, you must spawn the Referral Program and declare your referrer. To do that, add a User Referrer node and use it to establish a reference to the User Profile of the person that referred you to Superalgos. If you have more than one referrer, simply add more User Referrer nodes.", + "translations": [ + { + "language": "ES", + "text": "Para participar, debe extender el programa Referral Program y declarar su referido. Para hacer esto, agregue un nodo al User Referrer y úselo para establecer el User Profile de la persona que lo refirió a Superalgos. Si tiene más de un referido, simplemente agregue más nodos al User Referrer.", + "updated": 1633530224609 + } + ] }, { "style": "Text", @@ -29,7 +50,14 @@ }, { "style": "Text", - "text": "Declaring your referrers is the best way to thank the people that may have written that article or tweet, produced that video, maintained the website, or told you about Superalgos! Without them, you probably wouldn’t be here yet!" + "text": "Declaring your referrers is the best way to thank the people that may have written that article or tweet, produced that video, maintained the website, or told you about Superalgos! Without them, you probably wouldn’t be here yet!", + "translations": [ + { + "language": "ES", + "text": "Declarar sus referidos es el mejor modo de agradecerle a la gente que escribió el artículo o tweeteo, produjo ese video, realizó el mantenimiento de la web, o te habló a cerca de Superalgos! Sin ellos, probablemente no estaría aquí todavía!", + "updated": 1633530419731 + } + ] }, { "style": "Include", diff --git a/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json b/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json index 8a5c11524..7818aa6ef 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json +++ b/Projects/Governance/Schemas/Docs-Nodes/S/Support/Support-Program/support-program.json @@ -2,7 +2,14 @@ "type": "Support Program", "definition": { "text": "At Superalgos, we take pride in the level of support we offer to newcomers and the Community in general. It is a crucial aspect of our culture, based above all on collaboration. The Support Program enables the Community to compensate Community Mods contributing to the project’s support efforts.", - "updated": 1630231393370 + "updated": 1630231393370, + "translations": [ + { + "language": "ES", + "text": "En Superalgos, estamos orgullosos del nivel de soporte que ofrecemos a los recién llegados y a la comunidad en general. Es un aspecto crucial de nuestra cultura, basada por sobre todo en la colaboración. El Support Program posibilita a la comunidad compensar a los Community Mods contribuyendo a los esfuerzos de soporte del proyecto.", + "updated": 1633544186835 + } + ] }, "paragraphs": [ { @@ -17,26 +24,61 @@ }, { "style": "Text", - "text": "Superalgos is a vast system and the learning curve is still quite steep. Many users need help, particularly during the early stages." + "text": "Superalgos is a vast system and the learning curve is still quite steep. Many users need help, particularly during the early stages.", + "translations": [ + { + "language": "ES", + "text": "Superalgos es un sistema vasto y y la curva de aprendizaje aún es un largo paso. Muchos usuarios ayudan, particularmente durante las etapas tempranas.", + "updated": 1633544374767 + } + ] }, { "style": "Text", - "text": "While the Community is always ready to help with typical questions, we’ve noticed that it takes a certain level of experience and knowledge to provide effective support. This is why select Community Mods are in charge of the Support Group." + "text": "While the Community is always ready to help with typical questions, we’ve noticed that it takes a certain level of experience and knowledge to provide effective support. This is why select Community Mods are in charge of the Support Group.", + "translations": [ + { + "language": "ES", + "text": "Mientras que la Community está siempre lista para ayudar con las preguntas típicas, hemos notado que lleva cierto nivel de experiencia y conocimiento para porveer un soporte efectivo. Por esto es que la selección de Community Mods está a cargo del Support Group.", + "updated": 1633544529696 + } + ] }, { "style": "Note", "text": "If you ever wish to join the team of Community Mods, start participating in the various Telegram groups and Discord channels, helping users and answering questions. We’ll soon spot you and draft you into the Community Mods team!", - "updated": 1630231465692 + "updated": 1630231465692, + "translations": [ + { + "language": "ES", + "text": "Si alguna vez desea sumarse al equipo de los Community Mods, empieza a participar de varios de los grupos de Telegram y del Discord channels, ayudando a usuarios y respondiendo preguntas. Pronto lo descubriremos y lo llevaremos al equipo de los Community Mods!", + "updated": 1633544734836 + } + ] }, { "style": "Callout", "text": "To participate, you must spawn the Support Program and declare your favorite supporters. To do that, add a User Supporter node and use it to establish a reference to the User Profile of the person that has helped you the most! If you have more than one favorite supporter, add more User Supporter nodes!", - "updated": 1630231527435 + "updated": 1630231527435, + "translations": [ + { + "language": "ES", + "text": "Para participar, debe desplegar el Support Program y declarar sus supporters favoritos. Para hacer esto, agregue un nodo de User Supporter y uselo para establecer la referencia al User Profile de la persona que le ha ayudado más! Si tien más de un supporter favorito, agregue más nodos de User Supporter!", + "updated": 1633544936312 + } + ] }, { "style": "Text", "text": "If you seldom use the Support Group, that may be thanks to the effort put in crafting tutorials and documentation. If that is your case, then feel free to select the individuals or teams doing this work as your preferred supporters!", - "updated": 1630231554533 + "updated": 1630231554533, + "translations": [ + { + "language": "ES", + "text": "Si rara vez usael grupo de Support, eso puede ser gracias al esfuerzo puesto en montar tutoriales y documentacion. Si es ese su caso, siéntase libre de elegir individuos o equipos haciendo este trabajo como sus supporters preferidos!", + "updated": 1633545138992 + } + ] }, { "style": "Include", diff --git a/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json b/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json index 3070ba9fa..37702aafa 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json +++ b/Projects/Governance/Schemas/Docs-Nodes/T/Token/Token-Power-Switch/token-power-switch.json @@ -2,7 +2,14 @@ "type": "Token Power Switch", "definition": { "text": "The concept of a switch may be used throughout the different programs in the User Profile hierarchy. A switch is a device used to distribute the flow of Token Power to offspring nodes. In the case of the Token Power Switch, it is the sole offspring node of the User Profile hierarchy used to distribute Token Power to the different programs.", - "updated": 1630094625909 + "updated": 1630094625909, + "translations": [ + { + "language": "ES", + "text": "El concepto de un interruptor puede usarse a través de diferentes programas en la jearquía en el User Profile. Un interruptor es un dispsitivo usado para contribuir en el flujo del Token Power a los nodos de la descendencia. En el caso del Token Power Switch, es el único nodo descendiente de la jerarquía del User Profile usada para distribuir Token Power a los diferentes programas.", + "updated": 1633513107006 + } + ] }, "paragraphs": [ { @@ -13,7 +20,14 @@ { "style": "Note", "text": "Most nodes in the hierarchy act as switches, even when their name does not include the word switch!", - "updated": 1630094810003 + "updated": 1630094810003, + "translations": [ + { + "language": "ES", + "text": "La mayoría de los nodos de la jerarquía actúan como interruptores, aún cuando su nombre no incluya la palabra interruptor!", + "updated": 1633513212883 + } + ] }, { "style": "Block", diff --git a/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json b/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json index ea59210be..6f08ed864 100644 --- a/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json +++ b/Projects/Governance/Schemas/Docs-Topics/B/Beta/Beta-11-Claims/beta-11-claims-001-beta-11-claim-governance-system.json @@ -4,7 +4,14 @@ "type": "Beta 11 Claim - Governance System", "definition": { "text": "Governance of the Superalgos Project is distributed among all members of the Superalgos Community willing to participate. The Governance System is built-in the Superalgos Platform, so participating is quite straightforward.", - "updated": 1628249171408 + "updated": 1628249171408, + "translations": [ + { + "language": "ES", + "text": "La gobernanza del proyecto de Superalgos Project es distribuída sentre todos los miembros de la Superalgos Community que deseen participar. El Governance System ( sistema de gobernanza) seconstruye en la Superalgos Platform, por lo que participar es bastante sencillo.", + "updated": 1633533118734 + } + ] }, "paragraphs": [ { @@ -18,11 +25,25 @@ }, { "style": "Text", - "text": "To participate in governance, community members leverage their Superalgos SA Token holdings, exerting influence proportional to their Token Power. The combined influence of all token holders participating in governance determines how the token is distributed upon each release." + "text": "To participate in governance, community members leverage their Superalgos SA Token holdings, exerting influence proportional to their Token Power. The combined influence of all token holders participating in governance determines how the token is distributed upon each release.", + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanza, los miembros de la comunidad, promedian su tentencia de Superalgos SA Token, ejerciendo una influencia proporcional a su Token Power. La influencia combinada de todos los que tienen token participando en la gobernanza determina como el token se distribuye encada liberación.", + "updated": 1633533342249 + } + ] }, { "style": "Success", - "text": "Even if you have no tokens to start with, the Community will delegate Token Power to your profile so that you may get started!" + "text": "Even if you have no tokens to start with, the Community will delegate Token Power to your profile so that you may get started!", + "translations": [ + { + "language": "ES", + "text": "Aún cuando no tenga tokens para comenzar, la comunidad delegará Token Power a su profile para que pueda comenzar!", + "updated": 1633533429717 + } + ] }, { "style": "Subtitle", @@ -31,19 +52,47 @@ }, { "style": "List", - "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how." + "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how.", + "translations": [ + { + "language": "ES", + "text": "Qué Positions, Features, Assets, o actividades de desarrollo del proyecto, en general, son incentivados y cómo.", + "updated": 1633533525021 + } + ] }, { "style": "List", - "text": "Which Contributors are compensated for which Contributions." + "text": "Which Contributors are compensated for which Contributions.", + "translations": [ + { + "language": "ES", + "text": "Qué Contribuyentes son recompensados y por cuáles contribuciones.", + "updated": 1633533586785 + } + ] }, { "style": "List", - "text": "What Programs are funded and how." + "text": "What Programs are funded and how.", + "translations": [ + { + "language": "ES", + "text": "Qué Programs son creados y cómo.", + "updated": 1633533612445 + } + ] }, { "style": "Text", - "text": "Governance is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions." + "text": "Governance is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions.", + "translations": [ + { + "language": "ES", + "text": "La gobernanza está diseñada como un sistema flexible que la comunidad dinámicamente dirija influencia en direcciones arbitrarias.", + "updated": 1633533779710 + } + ] }, { "style": "Subtitle", @@ -52,11 +101,25 @@ }, { "style": "Text", - "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens simply by taking part in the governance of Superalgos." + "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens simply by taking part in the governance of Superalgos.", + "translations": [ + { + "language": "ES", + "text": "Una Community comprometida en la gobernanza es crucial para el desarrollo del proyecto, por lo tanto se incentiva la participación. En otras palabras, ganará Superalgos SA Tokens simplemente por ser parte de la gobernanza de Superalgos.", + "updated": 1633542770033 + } + ] }, { "style": "Text", - "text": "The system allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines." + "text": "The system allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines.", + "translations": [ + { + "language": "ES", + "text": "El sistema permite que la gobernanza evolucione con el proyecto. Tambien motiva a la innovación sin permiso, ya que los contribuyentes pueden proponer nuevas áreas de desarrollo y manejar a la comunidad para que se motive para expandir nuevas lineas.", + "updated": 1633543011570 + } + ] }, { "style": "Title", @@ -64,11 +127,25 @@ }, { "style": "Text", - "text": "The Governance System was built from scracth as a new Software Project within the Superalgos Codebase." + "text": "The Governance System was built from scracth as a new Software Project within the Superalgos Codebase.", + "translations": [ + { + "language": "ES", + "text": "El sistema de gobierno fue construído sobre los bocetos de un nuevo proyecto de Software incluído en el código de base de Superalgos.", + "updated": 1633543179992 + } + ] }, { "style": "Text", - "text": "The following Governance Programs were developed at this time:" + "text": "The following Governance Programs were developed at this time:", + "translations": [ + { + "language": "ES", + "text": "Los siguientes programas de Governance Programs fueron desarrollados en este tiempo:", + "updated": 1633543245169 + } + ] }, { "style": "Subtitle", diff --git a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json index d9bb0f390..1b305eaa5 100644 --- a/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json +++ b/Projects/Governance/Schemas/Docs-Topics/G/Governance/Governance-How-To/governance-how-to-001-load-a-user-profile.json @@ -23,7 +23,8 @@ { "language": "ES", "text": "Supongamos que deseas declarar tu referente en el Referral Program, o tal vez desees apoyar el Contribution Claims de un compañero desarrollador.", - "updated": 1632025791877 + "updated": 1632025791877, + "style": "Text" } ] }, @@ -34,7 +35,8 @@ { "language": "ES", "text": "En cualquier caso, deberás cargar el User Profile de la persona en cuestión para que pueda establecer las referencias adecuadas.", - "updated": 1632025827657 + "updated": 1632025827657, + "style": "Callout" } ] }, @@ -46,7 +48,8 @@ { "language": "ES", "text": "O tal vez quieras cargar tu propio User Profile en uno de los Other Governance Workspaces. ¡Es el mismo proceso después de todo!", - "updated": 1632025920310 + "updated": 1632025920310, + "style": "Note" } ] }, @@ -58,12 +61,26 @@ { "style": "List", "text": "Find out the person's User Profile name. If you know the person's identity on Github.com, then that's all you need to know. If you don't, then you may need to contact the person and ask! If it's your profile, then no need to do much in this regard!", - "updated": 1630681681124 + "updated": 1630681681124, + "translations": [ + { + "language": "ES", + "text": "Encuentre el nombre del User Profile de la persona. Si conoce como se identifica la persona en Github.com, entonces eso es todo lo que necesita saber. Si no, puede necesitar contactar a la persona y preguntárselo! Si es su profile, entonces no es necesario hacer demaciado al respecto!", + "updated": 1633517388693 + } + ] }, { "style": "List", "text": "Verify that a file with the same name exists in the following path within the Superalgos folder in your hard drive...", - "updated": 1630597624699 + "updated": 1630597624699, + "translations": [ + { + "language": "ES", + "text": "Verifiqueque un archivo con el mismo nombre exista en la siguiente ruta dentro de Superalgos folder en su disco duro...", + "updated": 1633517151535 + } + ] }, { "style": "Json", @@ -72,24 +89,59 @@ { "style": "List", "text": "If the file doesn't exist, make sure you have the latest version of the app. If it's still missing after updating, let the person know and wait for the profile to be submitted.", - "updated": 1630597643975 + "updated": 1630597643975, + "translations": [ + { + "language": "ES", + "text": "Si el archivo no existe, asegúrese que tiene a última versión de la app. Si falta aún después de hacer la actualización, permite que la persona sepa y espere que el profile sea incluído.", + "updated": 1633517577195 + } + ] }, { "style": "List", "text": "If the file is there and assuming you already are in the workspace you wish to work with, go to the Plugins hierarchy and find the Dummy Plugin File under Plugin User Profiles > Governance Plugin Project.", - "updated": 1630597669225 + "updated": 1630597669225, + "translations": [ + { + "language": "ES", + "text": "Si el archivo aparece y suponiendo que ya se encuentre en el espacio del workspace con el que desea trabajar, vaya a la jerarquía de Plugins y encuentre el Dummy Plugin File debajo de Plugin User Profiles > Governance Plugin Project.", + "updated": 1633520923071 + } + ] }, { "style": "List", - "text": "Access the configuration of the Dummy profile and change the fileName property using the appropriate name (Github.com username). Replace the name of the node too, to avoid confusion later on." + "text": "Access the configuration of the Dummy profile and change the fileName property using the appropriate name (Github.com username). Replace the name of the node too, to avoid confusion later on.", + "translations": [ + { + "language": "ES", + "text": "Acceda a la configuración del Dummy profile y modifique la propiedad del fileName usando el nombre apropriado (Github.com username). Reemplace el nombre del nodo también, para evitar confusiones más tarde.", + "updated": 1633521011506 + } + ] }, { "style": "List", - "text": "Save the Current Workspace with Ctrl + Alt + Shift + Key-S and refresh the page." + "text": "Save the Current Workspace with Ctrl + Alt + Shift + Key-S and refresh the page.", + "translations": [ + { + "language": "ES", + "text": "Guarde el Current Workspace con Ctrl + Alt + Shift + Key-S y refresque la página.", + "updated": 1633518088269 + } + ] }, { "style": "List", - "text": "Once the page reloads, you should see the new profile along with the rest! That's it!" + "text": "Once the page reloads, you should see the new profile along with the rest! That's it!", + "translations": [ + { + "language": "ES", + "text": "Una vez que la página se recargue, debería ver el profile nuevojunto con el resto de ellos! Eso es!", + "updated": 1633518182330 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json index dd916b1ad..4de5e2585 100644 --- a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json +++ b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-001-governance-overview.json @@ -4,37 +4,101 @@ "type": "Governance Overview", "definition": { "text": "Governance of the Superalgos Project is distributed among all members of the Community willing to participate. You may engage in multiple manners, help drive development in the desired directions, and contribute to nurturing a healthy community.", - "updated": 1630424148804 + "updated": 1630424148804, + "translations": [ + { + "language": "ES", + "text": "La gobernanza del proyecto de Superalgos está distribuída entre todos los miembros de la comunidad que estén dispuestos a participar. Puede comprometerse de múltiples maneras, ayudar a dirigir el desarrollo en las direcciones deseadas, y contribuir a nutrir una comunidad saludable.", + "updated": 1633345029161, + "style": "Definition" + } + ] }, "paragraphs": [ { "style": "Text", "text": "To participate in governance, community members leverage their Superalgos SA Token holdings, exerting influence proportional to their Token Power and their Reputation. The combined influence of all token holders participating in governance determines, among other things:", - "updated": 1630065456504 + "updated": 1630065456504, + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanza, los miembros de la comunidad apalancan su tenencia de Superalgos SA Token, ejerciendo influencia proporcional a su Token Power y a su Reputation. La inlfuencia combinada de todos los tenedores de token que participan en la gobernancia determinan, entre otras cosas:", + "updated": 1633345582953, + "style": "Text" + } + ] }, { "style": "List", - "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how." + "text": "What Positions, Features, Assets, or project-development activities, in general, are incentivized and how.", + "translations": [ + { + "language": "ES", + "text": "Que Positions, Features, Assets, o actividades de desarrollo de proyectos, en general, están incentivados y cómo.", + "updated": 1633348402852, + "style": "List" + } + ] }, { "style": "List", - "text": "Which Contributors are compensated for which Contributions." + "text": "Which Contributors are compensated for which Contributions.", + "translations": [ + { + "language": "ES", + "text": "Que contribuyentes son pagados por cuales contribuciones.", + "updated": 1633345751024, + "style": "List" + } + ] }, { "style": "List", - "text": "What Programs are funded and how." + "text": "What Programs are funded and how.", + "translations": [ + { + "language": "ES", + "text": "Qué programas se financian y cómo", + "updated": 1633345784026, + "style": "List" + } + ] }, { "style": "Text", - "text": "You may exert your influence dynamically, as you may redirect your Token Power at any moment. The distribution of Token Power upon each release of the software — tied to the corresponding Superalgos SA Token Distribution Event — determines how tokens allocated to the release are distributed." + "text": "You may exert your influence dynamically, as you may redirect your Token Power at any moment. The distribution of Token Power upon each release of the software — tied to the corresponding Superalgos SA Token Distribution Event — determines how tokens allocated to the release are distributed.", + "translations": [ + { + "language": "ES", + "text": "Puede ejercer su influencia de forma dinámica, ya que puede redirigir su Token Power en cualquier momento. La distribución de Token Power en cada lanzamiento del software — atado al correspondiente Superalgos SA Token Distribution Event — determina cómo se distribuyen los tokens asignados al lanzamiento.", + "updated": 1633345986132, + "style": "Text" + } + ] }, { "style": "Text", - "text": "The Governance Project is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions. It allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines." + "text": "The Governance Project is designed as a flexible system that allows the Community to dynamically direct influence in arbitrary directions. It allows governance to evolve with the project. It also encourages permissionless innovation, as Contributors may propose new areas of development and rally the Community to incentivize expansion along new lines.", + "translations": [ + { + "language": "ES", + "text": "El Governance Project está diseñado como un sistema flexible que permite a la comunidad ejercer influencia en direcciones arbitrarias de manera dinámica. Permite que la gobernanza evolucione con el proyecto. también promueve la innovación sin permiso, ya que los Colaboradores pueden proponer nuevas áreas de desarrollo y conducir a la comunidad incentivar expansion a lo largo de lineas nuevas.", + "updated": 1633346387045, + "style": "Text" + } + ] }, { "style": "Note", - "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens if you take part in the governance of Superalgos." + "text": "A Community engaged in governance is crucial for the development of the project, therefore participation is incentivized. In other words, you will earn Superalgos SA Tokens if you take part in the governance of Superalgos.", + "translations": [ + { + "language": "ES", + "text": "Una comunidad comprometida con la gobernanza es fundamental para el desarrollo del proyecto, por lo tanto se incentiva la participación, en otras palabras, ganará Superalgos SA Tokens si forma parte de la gobernanza de Superalgos.", + "updated": 1633346519203, + "style": "Note" + } + ] }, { "style": "Title", @@ -42,31 +106,79 @@ }, { "style": "Text", - "text": "The governance system is implemented within Superalgos as the Governance Project, making use of the same visual scripting resources, hierarchical data structures, and concepts such as References that make up the Superalgos paradigm you are familiar with." + "text": "The governance system is implemented within Superalgos as the Governance Project, making use of the same visual scripting resources, hierarchical data structures, and concepts such as References that make up the Superalgos paradigm you are familiar with.", + "translations": [ + { + "language": "ES", + "text": "El sistema de gobernanza se implementa con Superalgos, haciendo uso de los mismos recursos de secuencias de comandos visuale, estructuras de datos jerárquicos, y conceptos tales como referencias que conforman el paradigma de Superalgos con el que está familiarizado.", + "updated": 1633346787559, + "style": "Text" + } + ] }, { "style": "Text", - "text": "As such, governance does not require the use of smart contracts to enforce immutable rules. On the contrary, in Superalgos, governance is an ever-evolving notion, pretty much like the rest of the project." + "text": "As such, governance does not require the use of smart contracts to enforce immutable rules. On the contrary, in Superalgos, governance is an ever-evolving notion, pretty much like the rest of the project.", + "translations": [ + { + "language": "ES", + "text": "Como tal, la gobernanza no requiere el uso de contratos inteligentes para hacer cumplir reglas inmutables. Por el contrario, en Superalgos, la gobernanza es una noción en constante evolución, muy parecida al resto del proyecto. ", + "updated": 1633346878247, + "style": "Text" + } + ] }, { "style": "Callout", "text": "This flexibility is a crucial feature that will allow us to evolve the governance system, adapt the game theory behind it, and correct any exploits that bad actors may find over time.", - "updated": 1630424896773 + "updated": 1630424896773, + "translations": [ + { + "language": "ES", + "text": "Esta flexibilidad es una característica crucial que nos permitirá hacer evolucionar el sistema de gobernanza, adaptar la teoría del juego detrás de él y corregir cualquier vulnerabilidad que los malos actores puedan encontrar con el tiempo", + "updated": 1633346945113, + "style": "Callout" + } + ] }, { "style": "Text", "text": "Governance is defined across multiple Governance Workspaces that users may load and contribute to. These workspaces feature the definitions of several hierarchies that determine the relationship of all the concepts affecting governance.", - "updated": 1630424913354 + "updated": 1630424913354, + "translations": [ + { + "language": "ES", + "text": "La gobernanza está definida a través de múltiples Governance Workspaces que los usuarios pueden cargar y contribuir con. Estos espacios de trabajo presentan las definiciones de varias jerarquías que determinan la relación de todos los conceptos que afectan la gobernanza.", + "updated": 1633347120583, + "style": "Text" + } + ] }, { "style": "Text", "text": "To participate in governance, users must set up and submit a User Profile plugin defining how they intend to exert the influence conferred by their Superalgos SA Token holdings. The influence and participation is defined through different types of programs, votes, and claims.", - "updated": 1629992750219 + "updated": 1629992750219, + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanaza, los usuarios deben configurar y enviar un User Profile plugin que define cómo pretenden ejercer la influencia conferida por sus tenencias de Superalgos SA Token. La inlfuencia y participación está definida mediante diferentes tipos de programas, votos y declaraciones.", + "updated": 1633347353982, + "style": "Text" + } + ] }, { "style": "Text", "text": "The Governance System computes votes and claims in realtime, showing a preview of what the distribution may look like, on the UI.", - "updated": 1630425053320 + "updated": 1630425053320, + "translations": [ + { + "language": "ES", + "text": "El sistema de gobernanza computa los votos y las declaraciones en tiempo real, mostrando una vista previa de lo que la distribucion showing a preview of what the distribution puede parecer, en el UI.", + "updated": 1633347466937, + "style": "Text" + } + ] }, { "style": "Include", @@ -83,25 +195,65 @@ }, { "style": "Text", - "text": "Because all definitions affecting governance ship as plugins with the software, the process is transparent and auditable. " + "text": "Because all definitions affecting governance ship as plugins with the software, the process is transparent and auditable. ", + "translations": [ + { + "language": "ES", + "text": "Porque las definiciones que afectan a la gobernanza envia como plugin con el software, el proceso es transparente y auditable.", + "updated": 1633347687363, + "style": "Text" + } + ] }, { "style": "List", "text": "Any user may, at any point, load the corresponding Plugin Workspaces and visualize how influence is being exerted by all Superalgos SA Token holders participating.", - "updated": 1629995410591 + "updated": 1629995410591, + "translations": [ + { + "language": "ES", + "text": "cualquier usuario puede, en cualquier momento, cargar el correspondiente Plugin Workspaces y visualizar and visualizecómo la influencia está siendo ejercida por todos participantes titulares de Superalgos SA Token..", + "updated": 1633347841894, + "style": "List" + } + ] }, { "style": "List", - "text": "Any user may verify all metrics managed by the Governance Project in the tables displayed in the Governace Tab." + "text": "Any user may verify all metrics managed by the Governance Project in the tables displayed in the Governace Tab.", + "translations": [ + { + "language": "ES", + "text": "Cualquier usuario puede verificar Any user may verify todas las métricas gestionadas por el Governance Project en las tablas desplegadas en el Governace Tab.", + "updated": 1633347961533, + "style": "List" + } + ] }, { "style": "List", - "text": "Any user may run a simulation of the Superalgos SA Token distribution process and verify how tokens allocated to the next release will be distributed." + "text": "Any user may run a simulation of the Superalgos SA Token distribution process and verify how tokens allocated to the next release will be distributed.", + "translations": [ + { + "language": "ES", + "text": "Cualquier usuario puede hacer correr una simulación de el proceso de distribución de Superalgos SA Token y verificar verify cómo se distribuirán los tokens asignados a la próxima versión.", + "updated": 1633348037956, + "style": "List" + } + ] }, { "style": "List", "text": "Any user may obtain (from GitHub) and load historical versions of the software, and run a simulation of the Superalgos SA Token Distribution Event to verify how tokens were distributed in past releases. Notice that, in this case, the absolute number of votes may not be valid as token holdings will have varied; however, any user may validate the relative distribution.", - "updated": 1630425087155 + "updated": 1630425087155, + "translations": [ + { + "language": "ES", + "text": "Cualquier usuario puede obtener (mediante GitHub) y cargar versiones históricas del software, y hacer correr una simulación de Superalgos SA Token Distribution Event para verificar como los tokens han sido distribuidos ten lanzamientos anteriores. Note quet, en este caso, el número absoluto de votos puede no ser válido ya que las tenencias de token habrán variado, de todas maneras, cualquier usuario puede validar la distribución relativa.", + "updated": 1633531601031, + "style": "List" + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json index 79273027b..0029c80b2 100644 --- a/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json +++ b/Projects/Governance/Schemas/Docs-Topics/I/Introduction/Introduction-to-Governance/introduction-to-governance-002-participating-in-governance.json @@ -4,22 +4,50 @@ "type": "Participating in Governance", "definition": { "text": "To participate in governance, you must set up your User Profile — a hierarchy that defines how you intend to use the Token Power conferred by your token holdings.", - "updated": 1624698139967 + "updated": 1624698139967, + "translations": [ + { + "language": "ES", + "text": "Para participar en la gobernanza, debes configurar tu User Profile — una jerarquía que define cómo puede usar el the Token Power conferido por tu tenencia de token.", + "updated": 1633531879183 + } + ] }, "paragraphs": [ { "style": "Text", "text": "How you use your Token Power is defined in several programs within the hierarchy. For instance, the Claims Program lets you present claims for the work you’ve done. We’ll cover all programs in detail.", - "updated": 1624698150117 + "updated": 1624698150117, + "translations": [ + { + "language": "ES", + "text": "Cómo use su Token Power está definido por diferentes programas incluídos en la jerarquía. Por ejemplo, los Claims Program le permite presentar declaraciones por el trabajo qe haya realizado. Cubriremos todos los programas en detalle.", + "updated": 1633532034348 + } + ] }, { "style": "Text", - "text": "Your User Profile points to a Superalgos SA Token address you create from within Superalgos. You validate your address by signing a cryptographic proof, also from within Superalgos, so that the system becomes aware of the number of tokens in the address, and assigns your profile an equivalent amount of Token Power." + "text": "Your User Profile points to a Superalgos SA Token address you create from within Superalgos. You validate your address by signing a cryptographic proof, also from within Superalgos, so that the system becomes aware of the number of tokens in the address, and assigns your profile an equivalent amount of Token Power.", + "translations": [ + { + "language": "ES", + "text": "Sus puntos del User Profile marcan una dirección de Superalgos SA Token que usted crea desde dentro de Superalgos. Valida su dirección confirmando una prueba de firma criptográfica, también desde Superalgos, entonces el sistema se da cuenta de la cantidad de tokens en su dirección, y le asigna a su profile el monto equivalente de Token Power.", + "updated": 1633532428398 + } + ] }, { "style": "Success", "text": "The address you generate is also the address to which the project will send the tokens you earn for your contributions. We call it you Governance Address.", - "updated": 1629993655810 + "updated": 1629993655810, + "translations": [ + { + "language": "ES", + "text": "TLa dirección que genere es también la dirección donde el proyecto le envie los tokens que haya ganado por sus contribuciones. Nosotros la llamamos su Governance Address ( dirección de gobernanza).", + "updated": 1633532569964 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json index 90f10c092..9483060fb 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-007-the-referral-program.json @@ -4,7 +4,14 @@ "type": "The Referral Program", "definition": { "text": "Help us spread the word about Superalgos!", - "updated": 1630495118436 + "updated": 1630495118436, + "translations": [ + { + "language": "ES", + "text": "Ayúdanos a correr la voz a cerca de Superalgos!", + "updated": 1633543506732 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json index a8d51e094..679f7bb9b 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-008-the-support-program.json @@ -4,7 +4,14 @@ "type": "The Support Program", "definition": { "text": "Let's reward Community Mods so that they keep up the good work, and so that more people want to join the team!", - "updated": 1630495305649 + "updated": 1630495305649, + "translations": [ + { + "language": "ES", + "text": "Premiemos a los Community Mods para que ellos continúen haciendo un buen trabajo, y por eso más gente querrá sumarse al equipo!", + "updated": 1633543661376 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json index a63fb74c3..17fe27a4a 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-009-the-mentorship-program.json @@ -4,7 +4,14 @@ "type": "The Mentorship Program", "definition": { "text": "Helps us reward mentors so that they keep up the good work forming Contributors!", - "updated": 1630495605300 + "updated": 1630495605300, + "translations": [ + { + "language": "ES", + "text": "Ayudénos a premiar a los mentores así ellos continuan haciendo un buen trabajo formando a los contribuyentes!", + "updated": 1633543826508 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json index c0cc1deb7..9e5b6abbe 100644 --- a/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json +++ b/Projects/Governance/Schemas/Docs-Topics/U/User/User-Profile/user-profile-010-votes-and-claims-programs-intro.json @@ -4,7 +4,14 @@ "type": "Votes And Claims Programs Intro", "definition": { "text": "Help us govern the Superalgos Project!", - "updated": 1630495810385 + "updated": 1630495810385, + "translations": [ + { + "language": "ES", + "text": "Ayúdenos a gobernar el proyecto de Superalgos!", + "updated": 1633543892451 + } + ] }, "paragraphs": [ { diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json index dfa209cb2..0c21aa04f 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-036-tutorial-step-tokens-dont-move.json @@ -8,18 +8,39 @@ "icon": { "name": "stop", "project": "Foundations" - } + }, + "translations": [ + { + "language": "ES", + "text": "Cuando decimos Token Power Flows, es importante aclarar que los tokens no van a ninguna parte! Es el Token Power el que fluye!", + "updated": 1633296750160 + } + ] }, "paragraphs": [ { "style": "Important", "text": "Tokens in your Governance Address never leave your address! There is zero cost for participating in governance! The balance in your address confers Token Power to your User Profile, and it is this abstraction that flows down the hierarchy, not actual tokens.", - "updated": 1630929379130 + "updated": 1630929379130, + "translations": [ + { + "language": "ES", + "text": "Tokens en su Governance Address nunca se van de su dirección! Hay cero costo por participar en la gobernancia! El balance en su dirección le confiere Token Power a su User Profile, y es esta abstracción lo que fluye hacia abajo en la jerarquia, no tokens reales.", + "updated": 1633297162024 + } + ] }, { "style": "Callout", "text": "Remind me to show you how to play with Token Power Flows before we wrap up the tutorial! But let's get back to Community Building Programs before we lose our way!", - "updated": 1630933419243 + "updated": 1630933419243, + "translations": [ + { + "language": "ES", + "text": "Recuérdame que te muestre icomo jugar con Token Power Flows antes de que embalemos el tutorial! Pero regresemos a Community Building Programs antes de que perdamos el rumbo!", + "updated": 1633296908255 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json index 6af3e3190..2c7c26c3f 100644 --- a/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json +++ b/Projects/Governance/Schemas/Docs-Tutorials/C/Creating/Creating-Your-User-Profile-Tutorial/creating-your-user-profile-tutorial-044-tutorial-step-playing-with-flows.json @@ -8,31 +8,73 @@ "icon": { "name": "Programs//delegation-program", "project": "Governance" - } + }, + "translations": [ + { + "language": "ES", + "text": "Casi me olvido! Antes de que se vaya, Voy a darle un curso intensivo para que pueda jugar un poco con algo de Token Power real!", + "updated": 1633297571727 + } + ] }, "paragraphs": [ { "style": "Text", "text": "We're sneaking into the lead developer's User Profile, particularly in his Delegation Program! Your mission: delegate yourself some Token Power so that you can play with the flows within your own profile!", - "updated": 1630931293437 + "updated": 1630931293437, + "translations": [ + { + "language": "ES", + "text": "Estamos espiando en el User Profile del leader de develop, particularlmente en su Delegation Program! la misión: deleguese a si mismo algo de Token Power para que pueda jugar con el flujo dentro de su propio perfil!", + "updated": 1633297853468 + } + ] }, { "style": "Callout", - "text": "Use the User Delegate node on the right to reference your own User Profile!" + "text": "Use the User Delegate node on the right to reference your own User Profile!", + "translations": [ + { + "language": "ES", + "text": "Use el nodo de User Delegate a la derecha para referenciar a su propio User Profile!", + "updated": 1633298180980 + } + ] }, { "style": "List", "text": "You can freely play with other User Profiles.", - "updated": 1630931454654 + "updated": 1630931454654, + "translations": [ + { + "language": "ES", + "text": "Puede libremente jugar con otros User Profiles.", + "updated": 1633297955207 + } + ] }, { "style": "List", "text": "Those profiles don't save with the workspace.", - "updated": 1630931469032 + "updated": 1630931469032, + "translations": [ + { + "language": "ES", + "text": "Esos profiles no se graban en el workspace.", + "updated": 1633298215317 + } + ] }, { "style": "List", - "text": "Even if you submitted them to the repo, they would be rejected by our bot controlling that profiles are uploaded by their owners only." + "text": "Even if you submitted them to the repo, they would be rejected by our bot controlling that profiles are uploaded by their owners only.", + "translations": [ + { + "language": "ES", + "text": "Aunque los someta al repositorio, serían rechazados por nuestro bot controlando que profiles son actualizados por sus dueños unicamente.", + "updated": 1633298152744 + } + ] } ] } \ No newline at end of file diff --git a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js index e8a4a29e5..6209338a6 100644 --- a/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js +++ b/Projects/Governance/UI/Function-Libraries/PluginsFunctions.js @@ -9,7 +9,7 @@ function newGovernanceFunctionLibraryPluginsFunctions() { return thisObject function addMissingPluginUserProfiles(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -20,15 +20,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'User-Profiles', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'User-Profiles', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'User-Profiles', 'User Profile') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'User-Profiles', 'User Profile', 'Governance') } } function addMissingPluginPools(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -39,15 +39,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Pools', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Pools', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Pools', 'Pools') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Pools', 'Pools', 'Governance') } } function addMissingPluginAssets(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -58,15 +58,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Assets', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Assets', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Assets', 'Assets') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Assets', 'Assets', 'Governance') } } function addMissingPluginFeatures(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -77,15 +77,15 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Features', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Features', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Features', 'Features') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Features', 'Features', 'Governance') } } function addMissingPluginPositionss(node, rootNodes) { - let projectName = UI.projects.foundations.utilities.plugins.getProjectName(node) + let projectName = UI.projects.communityPlugins.utilities.plugins.getProjectName(node) if (projectName === "" || projectName === undefined) { if (node.payload.parentNode !== undefined) { node.payload.parentNode.payload.uiObject.setErrorMessage( @@ -96,10 +96,10 @@ function newGovernanceFunctionLibraryPluginsFunctions() { } } - UI.projects.foundations.utilities.plugins.getPluginFileNames(projectName, 'Positions', onNamesArrived) + UI.projects.communityPlugins.utilities.plugins.getPluginFileNames(projectName, 'Positions', onNamesArrived) function onNamesArrived(fileNames) { - UI.projects.foundations.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Positions', 'Positions') + UI.projects.communityPlugins.utilities.plugins.addMissingPluginFiles(node, fileNames, 'Positions', 'Positions', 'Governance') } } } diff --git a/Projects/Foundations/Icons/Learning/learning-bot.png b/Projects/Machine-Learning/Icons/Learning/learning-bot.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-bot.png rename to Projects/Machine-Learning/Icons/Learning/learning-bot.png diff --git a/Projects/Foundations/Icons/Learning/learning-engine.png b/Projects/Machine-Learning/Icons/Learning/learning-engine.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-engine.png rename to Projects/Machine-Learning/Icons/Learning/learning-engine.png diff --git a/Projects/Foundations/Icons/Learning/learning-mine.png b/Projects/Machine-Learning/Icons/Learning/learning-mine.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-mine.png rename to Projects/Machine-Learning/Icons/Learning/learning-mine.png diff --git a/Projects/Foundations/Icons/Learning/learning-system.png b/Projects/Machine-Learning/Icons/Learning/learning-system.png similarity index 100% rename from Projects/Foundations/Icons/Learning/learning-system.png rename to Projects/Machine-Learning/Icons/Learning/learning-system.png diff --git a/Projects/Machine-Learning/Icons/machine-learning-project.png b/Projects/Machine-Learning/Icons/machine-learning-project.png new file mode 100644 index 000000000..688bcacdb Binary files /dev/null and b/Projects/Machine-Learning/Icons/machine-learning-project.png differ diff --git a/Projects/Foundations/Plugins/Learning-Engines/Low-Frequency.json b/Projects/Machine-Learning/Plugins/Learning-Engines/Low-Frequency.json similarity index 100% rename from Projects/Foundations/Plugins/Learning-Engines/Low-Frequency.json rename to Projects/Machine-Learning/Plugins/Learning-Engines/Low-Frequency.json diff --git a/Projects/Foundations/Plugins/Learning-Mines/Masters.json b/Projects/Machine-Learning/Plugins/Learning-Mines/Masters.json similarity index 100% rename from Projects/Foundations/Plugins/Learning-Mines/Masters.json rename to Projects/Machine-Learning/Plugins/Learning-Mines/Masters.json diff --git a/Projects/Foundations/Plugins/Learning-Systems/Sandbox.json b/Projects/Machine-Learning/Plugins/Learning-Systems/Sandbox.json similarity index 100% rename from Projects/Foundations/Plugins/Learning-Systems/Sandbox.json rename to Projects/Machine-Learning/Plugins/Learning-Systems/Sandbox.json diff --git a/Projects/Foundations/Schemas/App-Schema/learning-bot.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-bot.json similarity index 72% rename from Projects/Foundations/Schemas/App-Schema/learning-bot.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-bot.json index 8123e86b6..4439652a9 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-bot.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-bot.json @@ -7,25 +7,29 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Process Definition", "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition", "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Product Definition Folder", "relatedUiObject": "Product Definition Folder", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -34,7 +38,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -54,19 +59,22 @@ "name": "processes", "type": "array", "childType": "Process Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "products", "type": "array", "childType": "Product Definition", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "productDefinitionFolders", "type": "array", "childType": "Product Definition Folder", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ], "propertyNameAtParent": "learningBots" diff --git a/Projects/Foundations/Schemas/App-Schema/learning-engine.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-engine.json similarity index 70% rename from Projects/Foundations/Schemas/App-Schema/learning-engine.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-engine.json index ae575426a..fb41c8d92 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-engine.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-engine.json @@ -5,7 +5,8 @@ "action": "Add Missing Children", "label": "Add Missing Children", "relatedUiObject": "Learning Engine", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -14,7 +15,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -25,25 +27,29 @@ "name": "learningCurrent", "type": "node", "childType": "Learning Current", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "features", "type": "node", "childType": "Features", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "labels", "type": "node", "childType": "Labels", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" }, { "name": "predictions", "type": "node", "childType": "Predictions", - "autoAdd": true + "autoAdd": true, + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/learning-mine.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json similarity index 68% rename from Projects/Foundations/Schemas/App-Schema/learning-mine.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json index cefbe2b42..989b24cdc 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-mine.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-mine.json @@ -7,19 +7,23 @@ "iconPathOn": "configuration", "iconPathOff": "configuration", "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" + "actionFunction": "uiObject.configEditor.activate", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Learning Bot", "relatedUiObject": "Learning Bot", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Add UI Object", "label": "Add Plotter", "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" + "relatedUiObjectProject": "Foundations", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" }, { "action": "Delete UI Object", @@ -28,7 +32,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isTitleAllwaysVisible": true, @@ -45,12 +50,14 @@ { "name": "learningBots", "type": "array", - "childType": "Learning Bot" + "childType": "Learning Bot", + "project": "Algorithmic-Trading" }, { "name": "plotters", "type": "array", - "childType": "Plotter" + "childType": "Plotter", + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Foundations/Schemas/App-Schema/learning-system.json b/Projects/Machine-Learning/Schemas/App-Schema/learning-system.json similarity index 74% rename from Projects/Foundations/Schemas/App-Schema/learning-system.json rename to Projects/Machine-Learning/Schemas/App-Schema/learning-system.json index 9d1c8390e..4075463ae 100644 --- a/Projects/Foundations/Schemas/App-Schema/learning-system.json +++ b/Projects/Machine-Learning/Schemas/App-Schema/learning-system.json @@ -8,7 +8,8 @@ "label": "Delete", "iconPathOn": "delete-entity", "iconPathOff": "delete-entity", - "actionFunction": "payload.executeAction" + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" } ], "isHierarchyHead": true, @@ -18,7 +19,8 @@ { "name": "machineLearningLibrary", "type": "node", - "childType": "TensorFlow Library" + "childType": "TensorFlow Library", + "project": "Foundations" } ] } \ No newline at end of file diff --git a/Projects/Machine-Learning/Schemas/App-Schema/machine-learning-project.json b/Projects/Machine-Learning/Schemas/App-Schema/machine-learning-project.json new file mode 100644 index 000000000..2c2c32481 --- /dev/null +++ b/Projects/Machine-Learning/Schemas/App-Schema/machine-learning-project.json @@ -0,0 +1,63 @@ +{ + "type": "Machine-Learning Project", + "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "iconPathOn": "machine-learning-project", + "iconPathOff": "machine-learning-project", + "iconProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Learning Mine", + "relatedUiObject": "Learning Mine", + "relatedUiObjectProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Learning Engine", + "relatedUiObject": "Learning Engine", + "relatedUiObjectProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Add UI Object", + "label": "Add Learning System", + "relatedUiObject": "Learning System", + "relatedUiObjectProject": "Machine-Learning", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, + { + "action": "Delete UI Object", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "actionFunction": "payload.executeAction", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionProject": "Foundations" + } + ], + "isProjectHead": true, + "isTitleAllwaysVisible": false, + "addLeftIcons": true, + "isPinned": true, + "positionLocked": true, + "icon": "machine-learning-project", + "childrenNodesProperties": [ + { + "name": "projectDefinition", + "type": "node", + "childType": "Project Definition", + "project": "Foundations", + "autoAdd": true + } + ] +} \ No newline at end of file diff --git a/Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json b/Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json rename to Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Bot/learning-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json b/Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json rename to Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-Mine/learning-mine.json diff --git a/Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json b/Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json similarity index 100% rename from Projects/Foundations/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json rename to Projects/Machine-Learning/Schemas/Docs-Nodes/L/Learning/Learning-System/learning-system.json diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/LearningSession.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/LearningSession.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js index ed0f52dcb..50459a29f 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/LearningSession.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/LearningSession.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningSession = function (processIndex) { +exports.newMachineLearningBotModulesLearningSession = function (processIndex) { const MODULE_NAME = "Learning Session" diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js index 84f53097e..2f6941f32 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEngine.js @@ -1,9 +1,8 @@ -exports.newFoundationsBotModulesLearningEngine = function (processIndex) { +exports.newMachineLearningBotModulesLearningEngine = function (processIndex) { /* We call the Learning Engine to the data structure that is needed in order to exevute the learning protocol with the specific rules defined at the Learning System. */ - const MODULE_NAME = 'Learning Engine' let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js index 6eba82d6e..db63b0b40 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningEpisode.js @@ -1,8 +1,7 @@ -exports.newFoundationsBotModulesLearningEpisode = function (processIndex) { +exports.newMachineLearningBotModulesLearningEpisode = function (processIndex) { /* This module packages all functions related to Episodes. */ - const MODULE_NAME = 'Learning Episode' let thisObject = { mantain: mantain, reset: reset, diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js similarity index 92% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js index d6768c04e..b2c6539fe 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningOutput.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningOutput = function (processIndex) { +exports.newMachineLearningBotModulesLearningOutput = function (processIndex) { /* This module will load if necesary all the data outputs so that they can be appended with new records if needed. After running the simulation, it will save all the data outputs. @@ -29,7 +29,7 @@ exports.newFoundationsBotModulesLearningOutput = function (processIndex) { } /* Preparing everything for the Simulation */ - let learningSimulationModuleObject = TS.projects.foundations.botModules.learningSimulation.newFoundationsBotModulesLearningSimulation(processIndex) + let learningSimulationModuleObject = TS.projects.machineLearning.botModules.learningSimulation.newMachineLearningBotModulesLearningSimulation(processIndex) let outputDatasets = TS.projects.foundations.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset') let outputDatasetsMap = new Map() diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js index 3ed2a043c..1bbdcd3c4 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningProcess.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningProcess = function (processIndex) { +exports.newMachineLearningBotModulesLearningProcess = function (processIndex) { /* This Module will load all the process data dependencies from files and send them downstream. After execution, will save the time range and status report of the process. @@ -16,8 +16,9 @@ let dataFiles = new Map() let multiTimeFrameDataFiles = new Map() - TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.learningEngine.newFoundationsBotModulesLearningEngine(processIndex) - let learningOutputModuleObject = TS.projects.foundations.botModules.learningOutput.newFoundationsBotModulesLearningOutput(processIndex) + TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT = + TS.projects.machineLearning.botModules.learningEngine.newMachineLearningBotModulesLearningEngine(processIndex) + let learningOutputModuleObject = TS.projects.machineLearning.botModules.learningOutput.newMachineLearningBotModulesLearningOutput(processIndex) let currentTimeFrame = {} diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js index 9c9b916d5..6ca21e3a8 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningRecords.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningRecords = function (processIndex) { +exports.newMachineLearningBotModulesLearningRecords = function (processIndex) { /* This module facilitates the appending of records to the output of the process. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js similarity index 98% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js index 53ee68f92..b1127e248 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSimulation.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningSimulation = function (processIndex) { +exports.newMachineLearningBotModulesLearningSimulation = function (processIndex) { /* This Module represents the learning simulation. Essentially a loop through a set of candles and the execution at each loop cycle of the Learning System Protocol. @@ -33,10 +33,10 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) { '[INFO] runSimulation -> finalDatetime = ' + sessionParameters.timeRange.config.finalDatetime) /* These are the Modules we will need to run the Simulation */ - let learningRecordsModuleObject = TS.projects.foundations.botModules.learningRecords.newFoundationsBotModulesLearningRecords(processIndex) + let learningRecordsModuleObject = TS.projects.machineLearning.botModules.learningRecords.newMachineLearningBotModulesLearningRecords(processIndex) learningRecordsModuleObject.initialize(outputDatasetsMap) - let learningSystemModuleObject = TS.projects.foundations.botModules.learningSystem.newFoundationsBotModulesLearningSystem(processIndex) + let learningSystemModuleObject = TS.projects.machineLearning.botModules.learningSystem.newMachineLearningBotModulesLearningSystem(processIndex) learningSystemModuleObject.initialize() /* @@ -77,7 +77,7 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) { } } - let learningEpisodeModuleObject = TS.projects.foundations.botModules.learningEpisode.newFoundationsBotModulesLearningEpisode(processIndex) + let learningEpisodeModuleObject = TS.projects.machineLearning.botModules.learningEpisode.newMachineLearningBotModulesLearningEpisode(processIndex) learningEpisodeModuleObject.initialize() /* Setting up the candles array: The whole simulation is based on the array of candles at the time-frame defined at the session parameters. */ diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js index c1505f124..f6f41c4c1 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js @@ -1,4 +1,4 @@ -exports.newFoundationsBotModulesLearningSystem = function (processIndex) { +exports.newMachineLearningBotModulesLearningSystem = function (processIndex) { /* The Learning System is the user defined set of rules compliant with the Learning Protocol that defines the learning logic to be applied during each cycle of the Simulation. diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js similarity index 99% rename from Projects/Foundations/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js rename to Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js index 22aa322e5..7eae12d5b 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js +++ b/Projects/Machine-Learning/TS/Bot-Modules/Learning-Bot/SingleMarketLearningBot.js @@ -1,8 +1,8 @@ -exports.newFoundationsBotModulesSingleMarketLearningBot = function (processIndex) { +exports.newMachineLearningBotModulesSingleMarketLearningBot = function (processIndex) { const MODULE_NAME = "Single Market Learning Bot"; - let session = TS.projects.foundations.botModules.learningSession.newFoundationsBotModulesLearningSession(processIndex) + let session = TS.projects.machineLearning.botModules.learningSession.newMachineLearningBotModulesLearningSession(processIndex) let nextLoopTimeoutHandle; let thisObject = { @@ -282,7 +282,7 @@ "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well.") switch (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.config.framework.name) { case 'Low-Frequency-Learning-Process': { - processFramework = TS.projects.foundations.botModules.learningProcess.newFoundationsBotModulesLearningProcess(processIndex); + processFramework = TS.projects.machineLearning.botModules.learningProcess.newMachineLearningBotModulesLearningProcess(processIndex); startProcessFramework(); break; } diff --git a/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js new file mode 100644 index 000000000..a03c5d97f --- /dev/null +++ b/Projects/Machine-Learning/UI/Function-Libraries/ActionSwitch.js @@ -0,0 +1,38 @@ +function newMachineLearningActionSwitch() { + + let thisObject = { + executeAction: executeAction, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function finalize() { + + } + + function initialize() { + /* Nothing to initialize since a Function Library does not hold any state. */ + } + + async function executeAction(action) { + switch (action.name) { + case 'Run Learning Session': + { + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, false, action.callBackFunction) + } + break + case 'Resume Learning Session': + { + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.runSession(action.node, true, action.callBackFunction) + } + break + case 'Stop Learning Session': + { + UI.projects.machineLearning.functionLibraries.learningSessionFunctions.stopSession(action.node, action.callBackFunction) + } + break + } + } +} diff --git a/Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js b/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js similarity index 99% rename from Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js rename to Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js index 1e408605b..878656d4d 100644 --- a/Projects/Foundations/UI/Function-Libraries/LearningSessionFunctions.js +++ b/Projects/Machine-Learning/UI/Function-Libraries/LearningSessionFunctions.js @@ -1,4 +1,4 @@ -function newFoundationsFunctionLibraryLearningSessionFunctions() { +function newMachineLearningFunctionLibraryLearningSessionFunctions() { let thisObject = { syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, runSession: runSession, diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 7aa96d8da..ae089280b 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1,4 +1,245 @@ [ + { + "name": "Algorithmic-Trading", + "propertyName": "algorithmicTrading", + "UI": { + "functionLibraries": [ + { + "name": "Trading Session Functions", + "propertyName": "tradingSessionFunctions", + "functionName": "newAlgorithmicTradingFunctionLibraryTradingSessionFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Trading Bot", + "propertyName": "singleMarketTradingBot", + "functionName": "newAlgorithmicTradingBotModulesSingleMarketTradingBot", + "fileName": "SingleMarketTradingBot.js", + "folderName": "Trading-Bot", + "botType": "Trading Bot" + }, + { + "name": "Trading Session", + "propertyName": "tradingSession", + "functionName": "newAlgorithmicTradingBotModulesTradingSession", + "fileName": "TradingSession.js", + "folderName": "Trading-Bot" + }, + { + "name": "Trading Process", + "propertyName": "tradingProcess", + "functionName": "newAlgorithmicTradingBotModulesTradingProcess", + "fileName": "TradingProcess.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Engine", + "propertyName": "tradingEngine", + "functionName": "newAlgorithmicTradingBotModulesTradingEngine", + "fileName": "TradingEngine.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Output", + "propertyName": "tradingOutput", + "functionName": "newAlgorithmicTradingBotModulesTradingOutput", + "fileName": "TradingOutput.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Simulation", + "propertyName": "tradingSimulation", + "functionName": "newAlgorithmicTradingBotModulesTradingSimulation", + "fileName": "TradingSimulation.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Episode", + "propertyName": "tradingEpisode", + "functionName": "newAlgorithmicTradingBotModulesTradingEpisode", + "fileName": "TradingEpisode.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Records", + "propertyName": "tradingRecords", + "functionName": "newAlgorithmicTradingBotModulesTradingRecords", + "fileName": "TradingRecords.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading System", + "propertyName": "tradingSystem", + "functionName": "newAlgorithmicTradingBotModulesTradingSystem", + "fileName": "TradingSystem.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Stages", + "propertyName": "tradingStages", + "functionName": "newAlgorithmicTradingBotModulesTradingStages", + "fileName": "TradingStages.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Strategy", + "propertyName": "tradingStrategy", + "functionName": "newAlgorithmicTradingBotModulesTradingStrategy", + "fileName": "TradingStrategy.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Execution", + "propertyName": "tradingExecution", + "functionName": "newAlgorithmicTradingBotModulesTradingExecution", + "fileName": "TradingExecution.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Position", + "propertyName": "tradingPosition", + "functionName": "newAlgorithmicTradingBotModulesTradingPosition", + "fileName": "TradingPosition.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Snapshots", + "propertyName": "snapshots", + "functionName": "newAlgorithmicTradingBotModulesSnapshots", + "fileName": "Snapshots.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Trading Orders", + "propertyName": "tradingOrders", + "functionName": "newAlgorithmicTradingBotModulesTradingOrders", + "fileName": "TradingOrders.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Simulations", + "propertyName": "ordersSimulations", + "functionName": "newAlgorithmicTradingBotModulesOrdersSimulations", + "fileName": "OrdersSimulations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Orders Calculations", + "propertyName": "ordersCalculations", + "functionName": "newAlgorithmicTradingBotModulesOrdersCalculations", + "fileName": "OrdersCalculations.js", + "folderName": "Trading-Bot/Low-Frequency-Trading" + }, + { + "name": "Exchange API", + "propertyName": "exchangeAPI", + "functionName": "newAlgorithmicTradingBotModulesExchangeAPI", + "fileName": "ExchangeAPI.js", + "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" + } + ] + }, + "plugins": [ + "Trading Mines", + "Trading Systems", + "Trading Engines" + ], + "tasks": [ + "Trading Tasks" + ] + }, + { + "name": "Machine-Learning", + "propertyName": "machineLearning", + "UI": { + "functionLibraries": [ + { + "name": "Learning Session Functions", + "propertyName": "learningSessionFunctions", + "functionName": "newMachineLearningFunctionLibraryLearningSessionFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Learning Bot", + "propertyName": "singleMarketLearningBot", + "functionName": "newMachineLearningBotModulesSingleMarketLearningBot", + "fileName": "SingleMarketLearningBot.js", + "folderName": "Learning-Bot", + "botType": "Learning Bot" + }, + { + "name": "Learning Session", + "propertyName": "learningSession", + "functionName": "newMachineLearningBotModulesLearningSession", + "fileName": "LearningSession.js", + "folderName": "Learning-Bot" + }, + { + "name": "Learning Process", + "propertyName": "learningProcess", + "functionName": "newMachineLearningBotModulesLearningProcess", + "fileName": "LearningProcess.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Engine", + "propertyName": "learningEngine", + "functionName": "newMachineLearningBotModulesLearningEngine", + "fileName": "LearningEngine.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Output", + "propertyName": "learningOutput", + "functionName": "newMachineLearningBotModulesLearningOutput", + "fileName": "LearningOutput.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Simulation", + "propertyName": "learningSimulation", + "functionName": "newMachineLearningBotModulesLearningSimulation", + "fileName": "LearningSimulation.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Episode", + "propertyName": "learningEpisode", + "functionName": "newMachineLearningBotModulesLearningEpisode", + "fileName": "LearningEpisode.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning Records", + "propertyName": "learningRecords", + "functionName": "newMachineLearningBotModulesLearningRecords", + "fileName": "LearningRecords.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + }, + { + "name": "Learning System", + "propertyName": "learningSystem", + "functionName": "newMachineLearningBotModulesLearningSystem", + "fileName": "LearningSystem.js", + "folderName": "Learning-Bot/Low-Frequency-Learning" + } + ] + }, + "plugins": [ + "Learning Mines", + "Learning Systems", + "Learning Engines" + ], + "tasks": [ + "Learning Tasks" + ] + }, { "name": "Foundations", "propertyName": "foundations", @@ -71,26 +312,11 @@ "propertyName": "taskFunctions", "functionName": "newFoundationsFunctionLibraryTaskFunctions" }, - { - "name": "Trading Session Functions", - "propertyName": "tradingSessionFunctions", - "functionName": "newFoundationsFunctionLibraryTradingSessionFunctions" - }, - { - "name": "Learning Session Functions", - "propertyName": "learningSessionFunctions", - "functionName": "newFoundationsFunctionLibraryLearningSessionFunctions" - }, { "name": "Crypto Ecosystem Functions", "propertyName": "cryptoEcosystemFunctions", "functionName": "newFoundationsFunctionLibraryCryptoEcosystemFunctions" }, - { - "name": "Mine Functions", - "propertyName": "mineFunctions", - "functionName": "newFoundationsFunctionLibraryMineFunctions" - }, { "name": "Data Storage Functions", "propertyName": "dataStorageFunctions", @@ -101,11 +327,6 @@ "propertyName": "chartingSpaceFunctions", "functionName": "newFoundationsFunctionLibraryChartingSpaceFunctions" }, - { - "name": "Plugins Functions", - "propertyName": "pluginsFunctions", - "functionName": "newFoundationsFunctionLibraryPluginsFunctions" - }, { "name": "Workspace Functions", "propertyName": "workspaceFunctions", @@ -207,11 +428,6 @@ "name": "Status Bar", "propertyName": "statusBar", "functionName": "newFoundationsUtilitiesStatusBar" - }, - { - "name": "Plugins", - "propertyName": "plugins", - "functionName": "newFoundationsUtilitiesPlugins" } ], "spaces": [ @@ -525,127 +741,11 @@ ], "botModules": [ { - "name": "Single Market Sensor Bot", - "propertyName": "singleMarketSensorBot", - "functionName": "newFoundationsBotModulesSingleMarketSensorBot", - "fileName": "SingleMarketSensorBot.js", - "folderName": "Sensor-Bot", - "botType": "Sensor Bot" - }, - { - "name": "Exchange Raw Data Historic OHLCVs", - "propertyName": "historicOHLCVs", - "functionName": "newFoundationsBotModulesHistoricOHLCVs", - "fileName": "HistoricOHLCVs.js", - "folderName": "Sensor-Bot/Exchange-Raw-Data" - }, - { - "name": "Webhooks Check Webhook", - "propertyName": "checkWebhook", - "functionName": "newFoundationsBotModulesCheckWebhook", - "fileName": "CheckWebhook.js", - "folderName": "Sensor-Bot/Webhooks" - }, - { - "name": "Single Market API Data Fetcher Bot", - "propertyName": "singleMarketAPIDataFetcherBot", - "functionName": "newFoundationsBotModulesSingleMarketAPIDataFetcherBot", - "fileName": "SingleMarketAPIDataFetcherBot.js", - "folderName": "API-Data-Fetcher-Bot", - "botType": "API Data Fetcher Bot" - }, - { - "name": "API Data Fetcher Fetching Process", - "propertyName": "fetchingProcess", - "functionName": "newFoundationsBotModulesFetchingProcess", - "fileName": "FetchingProcess.js", - "folderName": "API-Data-Fetcher-Bot" - }, - { - "name": "Single Market Indicator Bot", - "propertyName": "singleMarketIndicatorBot", - "functionName": "newFoundationsBotModulesSingleMarketIndicatorBot", - "fileName": "SingleMarketIndicatorBot.js", - "folderName": "Indicator-Bot", - "botType": "Indicator Bot" - }, - { - "name": "Candles Volumes Multi Time Frame Daily", - "propertyName": "candlesVolumesMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesCandlesVolumesMultiTimeFrameDaily", - "fileName": "CandlesVolumesMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot/Candles-Volumes" - }, - { - "name": "Candles Volumes Multi Time Frame Market", - "propertyName": "candlesVolumesMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesCandlesVolumesMultiTimeFrameMarket", - "fileName": "CandlesVolumesMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot/Candles-Volumes" - }, - { - "name": "Bollinger Bands Multi Time Frame Daily", - "propertyName": "bollingerBandsMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesBollingerBandsMultiTimeFrameDaily", - "fileName": "BollingerBandsMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot/Bollinger-Bands" - }, - { - "name": "Bollinger Bands Multi Time Frame Market", - "propertyName": "bollingerBandsMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesBollingerBandsMultiTimeFrameMarket", - "fileName": "BollingerBandsMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot/Bollinger-Bands" - }, - { - "name": "Multi Time Frame Market", - "propertyName": "multiTimeFrameMarket", - "functionName": "newFoundationsBotModulesMultiTimeFrameMarket", - "fileName": "MultiTimeFrameMarket.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Multi Time Frame Daily", - "propertyName": "multiTimeFrameDaily", - "functionName": "newFoundationsBotModulesMultiTimeFrameDaily", - "fileName": "MultiTimeFrameDaily.js", - "folderName": "Indicator-Bot" - }, - { - "name": "From One Min To Multi Time Frame Market", - "propertyName": "fromOneMinToMultiTimeFrameMarket", - "functionName": "newFoundationsBotModulesFromOneMinToMultiTimeFrameMarket", - "fileName": "FromOneMinToMultiTimeFrameMarket.js", - "folderName": "Indicator-Bot" - }, - { - "name": "From One Min To Multi Time Frame Daily", - "propertyName": "fromOneMinToMultiTimeFrameDaily", - "functionName": "newFoundationsBotModulesFromOneMinToMultiTimeFrameDaily", - "fileName": "FromOneMinToMultiTimeFrameDaily.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Indicator Output", - "propertyName": "indicatorOutput", - "functionName": "newFoundationsBotModulesIndicatorOutput", - "fileName": "IndicatorOutput.js", - "folderName": "Indicator-Bot" - }, - { - "name": "Single Market Trading Bot", - "propertyName": "singleMarketTradingBot", - "functionName": "newFoundationsBotModulesSingleMarketTradingBot", - "fileName": "SingleMarketTradingBot.js", - "folderName": "Trading-Bot", - "botType": "Trading Bot" - }, - { - "name": "Trading Session", - "propertyName": "tradingSession", - "functionName": "newFoundationsBotModulesTradingSession", - "fileName": "TradingSession.js", - "folderName": "Trading-Bot" + "name": "Announcements", + "propertyName": "announcements", + "functionName": "newFoundationsBotModulesAnnouncements", + "fileName": "Announcements.js", + "folderName": "Trading-Bot/Announcements" }, { "name": "Social Bots", @@ -681,189 +781,6 @@ "functionName": "newFoundationsBotModulesTwitterBot", "fileName": "TwitterBot.js", "folderName": "Trading-Bot/Announcements" - }, - { - "name": "Trading Process", - "propertyName": "tradingProcess", - "functionName": "newFoundationsBotModulesTradingProcess", - "fileName": "TradingProcess.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Engine", - "propertyName": "tradingEngine", - "functionName": "newFoundationsBotModulesTradingEngine", - "fileName": "TradingEngine.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Output", - "propertyName": "tradingOutput", - "functionName": "newFoundationsBotModulesTradingOutput", - "fileName": "TradingOutput.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Simulation", - "propertyName": "tradingSimulation", - "functionName": "newFoundationsBotModulesTradingSimulation", - "fileName": "TradingSimulation.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Episode", - "propertyName": "tradingEpisode", - "functionName": "newFoundationsBotModulesTradingEpisode", - "fileName": "TradingEpisode.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Records", - "propertyName": "tradingRecords", - "functionName": "newFoundationsBotModulesTradingRecords", - "fileName": "TradingRecords.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading System", - "propertyName": "tradingSystem", - "functionName": "newFoundationsBotModulesTradingSystem", - "fileName": "TradingSystem.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Stages", - "propertyName": "tradingStages", - "functionName": "newFoundationsBotModulesTradingStages", - "fileName": "TradingStages.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Strategy", - "propertyName": "tradingStrategy", - "functionName": "newFoundationsBotModulesTradingStrategy", - "fileName": "TradingStrategy.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Execution", - "propertyName": "tradingExecution", - "functionName": "newFoundationsBotModulesTradingExecution", - "fileName": "TradingExecution.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Position", - "propertyName": "tradingPosition", - "functionName": "newFoundationsBotModulesTradingPosition", - "fileName": "TradingPosition.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Announcements", - "propertyName": "announcements", - "functionName": "newFoundationsBotModulesAnnouncements", - "fileName": "Announcements.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Snapshots", - "propertyName": "snapshots", - "functionName": "newFoundationsBotModulesSnapshots", - "fileName": "Snapshots.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Trading Orders", - "propertyName": "tradingOrders", - "functionName": "newFoundationsBotModulesTradingOrders", - "fileName": "TradingOrders.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Simulations", - "propertyName": "ordersSimulations", - "functionName": "newFoundationsBotModulesOrdersSimulations", - "fileName": "OrdersSimulations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Orders Calculations", - "propertyName": "ordersCalculations", - "functionName": "newFoundationsBotModulesOrdersCalculations", - "fileName": "OrdersCalculations.js", - "folderName": "Trading-Bot/Low-Frequency-Trading" - }, - { - "name": "Exchange API", - "propertyName": "exchangeAPI", - "functionName": "newFoundationsBotModulesExchangeAPI", - "fileName": "ExchangeAPI.js", - "folderName": "Trading-Bot/Low-Frequency-Trading/APIs" - }, - { - "name": "Single Market Learning Bot", - "propertyName": "singleMarketLearningBot", - "functionName": "newFoundationsBotModulesSingleMarketLearningBot", - "fileName": "SingleMarketLearningBot.js", - "folderName": "Learning-Bot", - "botType": "Learning Bot" - }, - { - "name": "Learning Session", - "propertyName": "learningSession", - "functionName": "newFoundationsBotModulesLearningSession", - "fileName": "LearningSession.js", - "folderName": "Learning-Bot" - }, - { - "name": "Learning Process", - "propertyName": "learningProcess", - "functionName": "newFoundationsBotModulesLearningProcess", - "fileName": "LearningProcess.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Engine", - "propertyName": "learningEngine", - "functionName": "newFoundationsBotModulesLearningEngine", - "fileName": "LearningEngine.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Output", - "propertyName": "learningOutput", - "functionName": "newFoundationsBotModulesLearningOutput", - "fileName": "LearningOutput.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Simulation", - "propertyName": "learningSimulation", - "functionName": "newFoundationsBotModulesLearningSimulation", - "fileName": "LearningSimulation.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Episode", - "propertyName": "learningEpisode", - "functionName": "newFoundationsBotModulesLearningEpisode", - "fileName": "LearningEpisode.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning Records", - "propertyName": "learningRecords", - "functionName": "newFoundationsBotModulesLearningRecords", - "fileName": "LearningRecords.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" - }, - { - "name": "Learning System", - "propertyName": "learningSystem", - "functionName": "newFoundationsBotModulesLearningSystem", - "fileName": "LearningSystem.js", - "folderName": "Learning-Bot/Low-Frequency-Learning" } ] }, @@ -884,7 +801,7 @@ ] }, "SA": { - "globals":[ + "globals": [ { "name": "Time Constants", "propertyName": "timeConstants", @@ -893,12 +810,6 @@ } ], "utilities": [ - { - "name": "Plugins", - "propertyName": "plugins", - "functionName": "newFoundationsUtilitiesPlugins", - "fileName": "Plugins.js" - }, { "name": "Miscellaneous Functions", "propertyName": "miscellaneousFunctions", @@ -926,17 +837,172 @@ ] }, "plugins": [ - "Data Mines", - "Trading Mines", - "Learning Mines", - "Trading Systems", - "Learning Systems", - "Trading Engines", - "Learning Engines", "Tutorials", "API Maps" ] }, + { + "name": "Data-Mining", + "propertyName": "dataMining", + "UI": { + "functionLibraries": [ + { + "name": "Mine Functions", + "propertyName": "mineFunctions", + "functionName": "newDataMiningFunctionLibraryMineFunctions" + } + ] + }, + "TS": { + "botModules": [ + { + "name": "Single Market Sensor Bot", + "propertyName": "singleMarketSensorBot", + "functionName": "newDataMiningBotModulesSingleMarketSensorBot", + "fileName": "SingleMarketSensorBot.js", + "folderName": "Sensor-Bot", + "botType": "Sensor Bot" + }, + { + "name": "Exchange Raw Data Historic OHLCVs", + "propertyName": "historicOHLCVs", + "functionName": "newDataMiningBotModulesHistoricOHLCVs", + "fileName": "HistoricOHLCVs.js", + "folderName": "Sensor-Bot/Exchange-Raw-Data" + }, + { + "name": "Single Market API Data Fetcher Bot", + "propertyName": "singleMarketAPIDataFetcherBot", + "functionName": "newDataMiningBotModulesSingleMarketAPIDataFetcherBot", + "fileName": "SingleMarketAPIDataFetcherBot.js", + "folderName": "API-Data-Fetcher-Bot", + "botType": "API Data Fetcher Bot" + }, + { + "name": "API Data Fetcher Fetching Process", + "propertyName": "fetchingProcess", + "functionName": "newDataMiningBotModulesFetchingProcess", + "fileName": "FetchingProcess.js", + "folderName": "API-Data-Fetcher-Bot" + }, + { + "name": "Single Market Indicator Bot", + "propertyName": "singleMarketIndicatorBot", + "functionName": "newDataMiningBotModulesSingleMarketIndicatorBot", + "fileName": "SingleMarketIndicatorBot.js", + "folderName": "Indicator-Bot", + "botType": "Indicator Bot" + }, + { + "name": "Candles Volumes Multi Time Frame Daily", + "propertyName": "candlesVolumesMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesCandlesVolumesMultiTimeFrameDaily", + "fileName": "CandlesVolumesMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot/Candles-Volumes" + }, + { + "name": "Candles Volumes Multi Time Frame Market", + "propertyName": "candlesVolumesMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesCandlesVolumesMultiTimeFrameMarket", + "fileName": "CandlesVolumesMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot/Candles-Volumes" + }, + { + "name": "Bollinger Bands Multi Time Frame Daily", + "propertyName": "bollingerBandsMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesBollingerBandsMultiTimeFrameDaily", + "fileName": "BollingerBandsMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot/Bollinger-Bands" + }, + { + "name": "Bollinger Bands Multi Time Frame Market", + "propertyName": "bollingerBandsMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesBollingerBandsMultiTimeFrameMarket", + "fileName": "BollingerBandsMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot/Bollinger-Bands" + }, + { + "name": "Multi Time Frame Market", + "propertyName": "multiTimeFrameMarket", + "functionName": "newDataMiningBotModulesMultiTimeFrameMarket", + "fileName": "MultiTimeFrameMarket.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Multi Time Frame Daily", + "propertyName": "multiTimeFrameDaily", + "functionName": "newDataMiningBotModulesMultiTimeFrameDaily", + "fileName": "MultiTimeFrameDaily.js", + "folderName": "Indicator-Bot" + }, + { + "name": "From One Min To Multi Time Frame Market", + "propertyName": "fromOneMinToMultiTimeFrameMarket", + "functionName": "newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket", + "fileName": "FromOneMinToMultiTimeFrameMarket.js", + "folderName": "Indicator-Bot" + }, + { + "name": "From One Min To Multi Time Frame Daily", + "propertyName": "fromOneMinToMultiTimeFrameDaily", + "functionName": "newDataMiningBotModulesFromOneMinToMultiTimeFrameDaily", + "fileName": "FromOneMinToMultiTimeFrameDaily.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Indicator Output", + "propertyName": "indicatorOutput", + "functionName": "newDataMiningBotModulesIndicatorOutput", + "fileName": "IndicatorOutput.js", + "folderName": "Indicator-Bot" + }, + { + "name": "Webhooks Check Webhook", + "propertyName": "checkWebhook", + "functionName": "newDataMiningBotModulesCheckWebhook", + "fileName": "CheckWebhook.js", + "folderName": "Sensor-Bot/Webhooks" + } + ] + }, + "plugins": [ + "Data Mines" + ], + "tasks": [ + "Data Tasks" + ] + }, + { + "name": "Community-Plugins", + "propertyName": "communityPlugins", + "UI": { + "functionLibraries": [ + { + "name": "Plugins Functions", + "propertyName": "pluginsFunctions", + "functionName": "newPluginsFunctionLibraryPluginsFunctions" + } + ], + "utilities": [ + { + "name": "Plugins", + "propertyName": "plugins", + "functionName": "newPluginsUtilitiesPlugins" + } + ] + }, + "SA": { + "utilities": [ + { + "name": "Plugins", + "propertyName": "plugins", + "functionName": "newPluginsUtilitiesPlugins", + "fileName": "Plugins.js" + } + ] + }, + "plugins": [] + }, { "name": "Ethereum", "propertyName": "ethereum", @@ -1353,7 +1419,7 @@ "propertyName": "queriesUnfollowedUserProfiles", "functionName": "newSocialTradingModulesQueriesUnfollowedUserProfiles", "fileName": "Queries/UnfollowedUserProfiles.js" - }, + }, { "name": "Bot Profile Stats", "propertyName": "queriesBotProfileStats", @@ -1518,8 +1584,8 @@ ], "utilities": [] }, - "UI":{ - "modules":[ + "UI": { + "modules": [ { "name": "Web Sockets Client", "propertyName": "webSocketsClient", @@ -1529,4 +1595,4 @@ ] } } -] +] \ No newline at end of file diff --git a/Projects/Social-Trading/NT/Modules/Bootstrap.js b/Projects/Social-Trading/NT/Modules/Bootstrap.js index f46a016b7..303c2791a 100644 --- a/Projects/Social-Trading/NT/Modules/Bootstrap.js +++ b/Projects/Social-Trading/NT/Modules/Bootstrap.js @@ -18,7 +18,7 @@ exports.newBootstrap = function newBootstrap() { async function initialize() { - let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames( + let pluginFileNames = await SA.projects.communityPlugins.utilities.plugins.getPluginFileNames( 'Governance', 'User-Profiles' ) @@ -26,7 +26,7 @@ exports.newBootstrap = function newBootstrap() { for (let i = 0; i < pluginFileNames.length; i++) { let pluginFileName = pluginFileNames[i] - let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent( + let pluginFileContent = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent( 'Governance', 'User-Profiles', pluginFileName diff --git a/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json b/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json index 839b6e422..43de86680 100644 --- a/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json +++ b/Projects/TensorFlow/Schemas/App-Schema/tensorflow-project.json @@ -1,6 +1,13 @@ { "type": "TensorFlow Project", "menuItems": [ + { + "action": "Add Missing Children", + "label": "Add Missing Children", + "relatedUiObject": "Foundations Project", + "actionFunction": "payload.executeAction", + "actionProject": "Foundations" + }, { "action": "Add UI Object", "actionProject": "Foundations", diff --git a/README.md b/README.md index 9d9a519e9..df3065d2c 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,56 @@ -# Superalgos Beta 11 +# Superalgos Beta 12 ![contributors](https://img.shields.io/github/contributors-anon/Superalgos/Superalgos?label=Contributors) ![pull-activity](https://img.shields.io/github/issues-pr-closed-raw/Superalgos/Superalgos?color=blueviolet) ![last-commit](https://img.shields.io/github/last-commit/Superalgos/Superalgos/develop?label=last%20commit%20to%20develop) ![bot-friendliness](https://img.shields.io/badge/Bot%20Friendliness%20Level-119%25-yellow) -Superalgos is not just another open-source project. We are an open and welcoming community devised, nurtured, and incentivized with the project's native Superalgos (SA) Token to build an open trading intelligence network. +## Table of Contents + +- [Table of Contents](#table-of-contents) +- [Introduction](#introduction) +- [Getting Started Guide](#getting-started-guide) +- [Pre-Requisites](#pre-requisites) + - [Windows Install](#windows-install) + - [Mac OS Install](#mac-os-install) + - [Linux Install (e.g. Raspberry Pi running Raspberry Pi OS/Raspbian)](#linux-install--eg-raspberry-pi-running-raspberry-pi-os-raspbian-) +- [Superalgos Platform Client Installation](#superalgos-platform-client-installation) + - [Fork the Superalgos Repository](#fork-the-superalgos-repository) + - [Clone Your Fork](#clone-your-fork) + - [Install Node Dependencies](#install-node-dependencies) + - [Troubleshooting Dependency Installation](#troubleshooting-dependency-installation) + - [Enable Desktop Shortcut in Ubuntu](#enable-desktop-shortcut-in-ubuntu) + - [Installation Notes](#installation-notes) + - [Uninstall](#uninstall) +- [Usage](#usage) + - [Run the Client and GUI](#run-the-client-and-gui) + - [Using the shortcuts](#using-the-shortcuts) + - [Using the Command Line](#using-the-command-line) + - [Usage Notes](#usage-notes) + - [Running Superalgos on a Headless Linux Server as a Daemon](#running-superalgos-on-a-headless-linux-server-as-a-daemon) + - [Using Systemd](#using-systemd) + - [Docker Deployments](#docker-deployments) +- [Welcome Tutorial](#welcome-tutorial) +- [What is the Superalgos Platform?](#what-is-the-superalgos-platform-) + - [Superalgos Platform Features](#superalgos-platform-features) + - [Superalgos Development Pipeline](#superalgos-development-pipeline) + - [Superalgos is User-centric](#superalgos-is-user-centric) + - [Superalgos Platform Allows You To](#superalgos-platform-allows-you-to) + - [Superalgos Platform for Developers](#superalgos-platform-for-developers) + - [Superalgos Platform Saves You Time](#superalgos-platform-saves-you-time) + - [Superalgos Platform is Permissionless](#superalgos-platform-is-permissionless) + - [Superalgos Platform for Algo-Trders](#superalgos-platform-for-algo-trders) + - [Superalgos Platform Saves You Money](#superalgos-platform-saves-you-money) + - [Superalgos Platform Minimizes Risks](#superalgos-platform-minimizes-risks) + - [Superalgos Platform for Companies](#superalgos-platform-for-companies) +- [Support](#support) +- [Other Resources](#other-resources) +- [Contributing](#contributing) +- [License](#license) + +## Introduction + +Superalgos is not just another open-source project. We are an open and welcoming community devised, nurtured, and incentivized with the project's native [Superalgos (SA) Token](https://superalgos.org/token-overview.shtml) to build an [open trading intelligence network](https://superalgos.org/). You will notice the difference as soon as you join the [Telegram Community Group](https://t.me/superalgoscommunity) or the new [Discord Server](https://discord.gg/CGeKC6WQQb)! @@ -13,275 +58,227 @@ You will notice the difference as soon as you join the [Telegram Community Group ![superalgos-readme](https://user-images.githubusercontent.com/13994516/106380124-844d8980-63b0-11eb-9bd9-4f977b6c183b.gif) -# Getting Started Guide +## Getting Started Guide All procedures are the same for Windows, Linux, or Mac OS. Raspberry Pi terminal commands have been included for ease of use. -> **IMPORTANT:** Remote installations and minimalist hardware — both virtual and physical — are better suited for production deployments, where the use of the GUI is minimal. We highly recommend learning Superalgos in a local installation. Mastering the system takes time, and the use of the GUI to go through in-app tutorials is crucial during the learning process. Your experience will be orders of magnitude better if you follow this advice: leave remote installations and minimalist hardware for when you are ready to start trading live. +> **IMPORTANT:** +> +> Remote installations and minimalist hardware — both virtual and physical — are better suited for production deployments, where the use of the GUI is minimal. We highly recommend learning Superalgos in a local installation. Mastering the system takes time, and the use of the GUI to go through in-app tutorials is crucial during the learning process. Your experience will be orders of magnitude better if you follow this advice: leave remote installations and minimalist hardware for when you are ready to start trading live. -# Pre-Requisites +## Pre-Requisites -## 1. Node JS Installation +In order to run Superalgos on your computer, you will need the latest versions of Node JS and Git installed. You will also need a web browser to access the interface. Google Chrome is recommended as it is what the development team uses and supports. -If you don't have it yet, download and install Node.js. +- [Node.js download page](https://nodejs.org/en/download/) +- [Git download page](https://git-scm.com/downloads) +- [Google Chrome download page](https://www.google.com/chrome/) -Node JS is an open-source server environment required to run Superalgos. +### Windows Install -**A.** Go to the Node JS [download page](https://nodejs.org/en/download/). +Follow the install wizards to install the latest NodeJS and Github Desktop applications. -**B.** Download your system's installer. Select *LTS Recommended for Most Users* and click the big Windows or macOS Installer button. If you are on Linux, the installer is listed further down the page. +- [Node.js download page](https://nodejs.org/en/download/). Select "Current" then "Windows Installer", then follow the wizard to install after the download completes. +- [GitHub Desktop downloat page](https://desktop.github.com/). Click the "Download for Windows" button and follow the wizard to install after the download completes. +- [Google Chrome download page](https://www.google.com/chrome/). After the install, it is recommended to set Chrome as the default browser. +- If you intend on running the machine learning features (TensorFlow), you must [install Python 2](https://www.python.org/downloads/release/python-2718/) as well. -**C.** Run the installer with the default configuration — just click Next until Node.JS is fully installed. That's it! You can continue with step 2 (Git Installation). +### Mac OS Install -
- -**NODE JS INSTALLATION FOR RASPBERRY PI USERS** - -You may install Node.JS just like you would on any other machine as per the above instructions. As an alternative, you may also try the following from the SSH Terminal. - -**NOTE:** It is best to use the most current and updated version of the FULL PiOS image. +[Homebrew](https://brew.sh/) can be used to install the requirements with minimal effort on Mac OS. After you clone the repository, change directory to the Superalgos base and install the requirements using the Brewfile. Python 3 is only required for running machine learning (TensorFlow). +```sh +brew install git node npm python@3.9 ``` + +Or use the `Brewfile` included in the code repository. After downloading, run this command in the same directory where the `Brewfile` resides: + +```sh +brew bundle +``` + +You can use Safari or Google Chrome as your default browser. If you run into a bug in Safari, you will be asked to reproduce it in Chrome as the development team uses Chrome. + +### Linux Install (e.g. Raspberry Pi running Raspberry Pi OS/Raspbian) + +[Follow the Node.js package manager install instructions](https://nodejs.org/en/download/package-manager/) for your distribution to ensure you are getting the latest version of Node.js. Many distributions only maintain an older version in their default repositories. Python 3 is only required for running machine learning (TensorFlow). + +```sh curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - +sudo apt-get install -y nodejs npm git python3 ``` -Followed by: -``` -sudo apt-get install -y nodejs -``` -It is also required to install the Node Package Manager for dependancy management. -``` -sudo apt install npm -``` -You may also type the following to verify Node.js and NPM installation and version. -``` + +You may verify the installed versions with these commands: + +```sh node -v -``` -``` -npm -v +npm -v +git --version ``` -
+If you are running headless (i.e. as a server without a monitor attached) then you do not need to install a web browser and you can follow the tutorial for information on connecting remotely to the server. -## 2. Git Installation +## Superalgos Platform Client Installation -Download and install Git. +### Fork the Superalgos Repository -Git is an open-source distributed version control system required to download and stay up to date with Superalgos. +- Scroll the page all the way to the top. Find and click the **Fork** button to create your fork/copy of this repository. To fork Superalgos you need a Github account. If you don't have one, go ahead and create it. -**A.** Go to the Git [download page](https://git-scm.com/downloads). +> **NOTE** +> +> A Fork is required for your contributions to the project. The reason why Superalgos is free and open-source is that the project has set up a [collective business](https://superalgos.org) in which all users may participate. The way to participate is to [contribute](https://superalgos.org/community-contribute.shtml) to make Superalgos better. The project's [token](https://superalgos.org/token-overview.shtml) is distributed among contributors. -**B.** Download the version for your Operating System. +### Clone Your Fork -**C.** Run the installer with the default configuration — just click Next until Git is fully installed. +- Once the fork is created, you will land on the page of your fork. Copy the URL from your browser's address bar. +- In your computer/laptop/server, open a command prompt or terminal. Make sure you are in a directory where you have write permissions (on most systems the terminal will open in your user's home directory, so you're good). Clone the git repository using the command: -**IMPORTANT:** The latest version of Git is required to handle the authentication with GitHub.com. - -**NOTE FOR MAC USERS:** Depending on your setup, installing Git may be optional. The native XCode Command Line Developer Tools seems to work well. If you do install Git, we have tested Tim Harper's binary installer successfully. - -
- -**GIT INSTALLATION FOR RASPBERRY PI USERS** - -Just like with Node.JS, you may follow the above instructions to install Git, or use the SSH Terminal command. The most recent version of PiOS has Git already installed, so this may give you an error. The error will not affect your installation. -``` -sudo apt-get install git -``` - -
- -## 3. Google Chrome or Safari - -Use Chrome, or Safari on Mac. These are the only tested browsers. - -**A.** Go to the Chrome [download page](https://www.google.com/chrome/). - -**B.** Run the installer. - -Before you begin, it is recommended that you set up Chrome/Safari as your default browser. - -**IMPORTANT:** Use Chrome/Safari so that you have a similar environment as the dev team in case you need help. We are not testing on any other browsers, and it is a well-known fact that browsers behave differently. - -# Superalgos Platform Client Installation - -## 1. Fork the Superalgos Repository - -**A.** Scroll the page all the way to the top. Find and click the **Fork** button to create your fork/copy of this repository. To fork Superalgos you need a Github account. If you don't have one, go ahead and create it. - -**NOTE:** A Fork is required for your contributions to the project. The reason why Superalgos is free and open-source is that the project has set up a collective business in which all users may participate. The way to participate is to contribute to make Superalgos better. The project's token is distributed among contributors. - -## 2. Clone Your Fork - -**A.** Once the fork is created, you will land on the page of your fork. Copy the URL from your browser's address bar. - -**B.** In your computer/laptop/server, open a command prompt or terminal. Make sure you are in a directory where you have write permissions (on most systems the terminal will open in your user's home directory, so you're good). Clone the git repository using the command: - -``` +```sh git clone ``` For example, if your Github username is John, the command will look like this: -``` +```sh git clone https://github.com/John/Superalgos ``` This creates the `Superalgos` folder in the current directory, which contains the whole installation. -## 3. Install Node Dependencies +### Install Node Dependencies After the Superalgos directory has been installed, the final step of installation is to set up the necessary node dependencies. In the same command prompt or terminal you just used, type the following: -``` +```sh cd Superalgos ``` -That should take you inside the Superalgos folder created by the `git clone` command earlier. +That should take you inside the Superalgos folder created by the `git clone` command earlier. Now type `node setup` to install the dependencies. -Now, you need to install dependencies, and there are two options: - -**A.** To install all basic dependencies run: - -``` +```sh node setup ``` -Then wait until you are able to type within the terminal again. +By default, desktop shortcuts are created if they can be. Currently, Mac OS shortcuts are not created. Linux installations may require extra steps to view and use the shortcuts. -This command will install and configure all additional dependencies needed by Superalgos. It will also install desktop and start menu shortcuts. +Available Options: -**B.** If you intend to use the experimental implementation of the TensorFlow Project within Superalgos, then run: - -``` -node setup tensorflow +```sh +usage: node setup ``` -This command will install all dependencies plus TensorFlow dependencies. +| Option | Description | +| --- | --- | +| `noShortcuts` | Do not install desktop shortcuts | +| `tensorflow` | Include the TensorFlow dependencies | -**NOTE FOR WINDOWS USERS INSTALLING TENSORFLOW DEPENDENCIES:** You may get an error at the end of the set up process. If you do, please follow the instructions following the error message. +> **NOTE FOR WINDOWS USERS INSTALLING TENSORFLOW DEPENDENCIES:** +> +> You may get an error at the end of the set up process. If you do, please follow the instructions following the error message. -**NOTE FOR USERS INSTALLING MULTIPLE INSTANCES OF SUPERALGOS ON THE SAME MACHINE:** In order to avoid name conflicts between shortcuts, make sure to rename each Superalgos directory before running `node setup`. +> **NOTE FOR USERS INSTALLING MULTIPLE INSTANCES OF SUPERALGOS ON THE SAME MACHINE:** +> +> In order to avoid name conflicts between shortcuts, make sure to rename each Superalgos directory before running `node setup`. -Congratulations your installation is complete! +Congratulations your installation is complete! Follow the "Running the Application" directions below. -> **The Usage section below explains how to run the app.** - -
- -**DEPENDENCY INSTALLATION FOR RASPBERRY PI USERS** - -As noted above, running `node setup` installs GUI shortcuts by default. To suppress this behavior in headless installations, add the `noShortcuts` flag as follows: - -``` -node setup noShortcuts -``` - -or, if you wish to try the TensorFlow implementation,... - -``` -node setup tensorflow noShortcuts -``` - -
- -**Troubleshooting Dependency Installation** +#### Troubleshooting Dependency Installation If you are having difficulty running the node setup command here are a few common issues that may be getting in the way. -**1.** Check the version of node and npm you have installed. Make sure that you are running an updated version of node greater than version 12 and npm greater than version 5. You can check which version you have by typing `node -v` and `npm -v` into a command prompt or terminal. If your version numbers are below these, you can update your installation by following the instructions outlined in the "Node JS Installation" step above. +1. Check the version of node and npm you have installed. Make sure that you are running an updated version of node greater than version 12 and npm greater than version 5. You can check which version you have by typing `node -v` and `npm -v` into a command prompt or terminal. If your version numbers are below these, you can update your installation by following the instructions outlined in the "Node JS Installation" step above. +2. If you are installing Superalgos in an administratively protected directory you will need to do one of the following: + - For Windows start your command prompt as an administrator. + - For Linux and Mac Systems make sure to add the sudo command to node setup. This will look like `sudo node setup`. +3. For Windows it is important that you have C:\Windows\System32 added to your global PATH. For instructions on how to do this google "add to the path on Windows 10." +#### Enable Desktop Shortcut in Ubuntu -**2.** If you are installing Superalgos in an administratively protected directory you will need to do one of the following: +The majority of shortcuts that are automatically installed will work out of the box. Desktop shortcuts on Ubuntu, however, require a few additional steps to set up. First, desktop icons need to be enabled within the Tweaks app. -- For Windows start your command prompt as an administrator. +- Check if Tweaks is installed. +- If not go to Ubuntu Software. +- Install Tweaks. +- Open Tweaks. +- Under extensions turn on Desktop Icons -- For Linux and Mac Systems make sure to add the sudo command to node setup. This will look like `sudo node setup`. +![enable-ubuntu-shortcut](https://user-images.githubusercontent.com/55707292/117553927-f0780300-b019-11eb-9e36-46b509653283.gif) +> **TIP:** If you do not see the desktop shortcut appear right away you may need to restart your computer. -**3.** For Windows it is important that you have C:\Windows\System32 added to your global PATH. For instructions on how to do this google "add to the path on Windows 10." +Finally, you will need to enable the desktop shortcut. Right click Superalgos.desktop and select Allow Launching. -## 4. Installation Notes +![allow-launching](https://user-images.githubusercontent.com/55707292/117553933-fcfc5b80-b019-11eb-872c-4fad81b184d2.gif) -**A.** You need to make a fork so that you may contribute work. Superalgos is a Community project and you are expected to contribute, like everyone else. You don't need to be a technical person to contribute. Fixing a typo in the docs or translating a paragraph into your native language are valuable contributions too. Superalgos has built-in features that make contributing easy. Help make Superalgos better and Superalgos will better serve you! Free-riding is not cool, particularly on free, open-source, Community-driven projects. +Now both launcher and desktop shortcuts will launch Superalgos like any other program on your computer. -**B.** The software includes an in-app self-update command / feature. It will help you stay up-to-date with the latest version of the software. Updates are on-demand, so don't worry about undesired updates. The project moves very fast and new features become available regularly, particularly if you choose to run the software in the ```develop``` branch (you may switch branches from within the app). +### Installation Notes -**C.** It is a good idea to perodically run the `node setup` command to keep the underlying dependencies for your Superalgos installation up to date. +- You need to make a fork so that you may contribute work. Superalgos is a Community project and you are expected to contribute, like everyone else. You don't need to be a technical person to contribute. Fixing a typo in the docs or translating a paragraph into your native language are valuable contributions too. Superalgos has built-in features that make contributing easy. Help make Superalgos better and Superalgos will better serve you! Free-riding is not cool, particularly on free, open-source, Community-driven projects. +- The software includes an in-app self-update command / feature. It will help you stay up-to-date with the latest version of the software. Updates are on-demand, so don't worry about undesired updates. The project moves very fast and new features become available regularly, particularly if you choose to run the software in the `develop` branch (you may switch branches from within the app). +- It is a good idea to perodically run the `node setup` command to keep the underlying dependencies for your Superalgos installation up to date. +- Before installing the client on a remote computer in an attempt to access the UI from a different machine, we highly recommend you do a standard installation on your PC / laptop first. Leave your Raspberry Pi or VPS for later, once you have done all available tutorials. This single tip will save you a lot of time: you don't need to add complexity before you learn how to handle the app, and the GUI performs best in a local installation. -**D.** Before installing the client on a remote computer in an attempt to access the UI from a different machine, we highly recommend you do a standard installation on your PC / laptop first. Leave your Raspberry Pi or VPS for later, once you have done all available tutorials. This single tip will save you a lot of time: you don't need to add complexity before you learn how to handle the app, and the GUI performs best in a local installation. +### Uninstall -# Usage +Superalgos writes nothing outside of the `Superalgos` folder other than shortcut files. In order to quickly remove the shortcut files, open a terminal or command prompt, navigate to your main Superalgos directory, and type the following command: -## 1. Run the Client and GUI +```sh +node uninstall +``` + +Then simply delete the `Superalgos` folder to completely remove the application. + +## Usage + +### Run the Client and GUI + +#### Using the shortcuts + +If you ran `node setup` with no options above, then you should see a desktop icon which you can double click to launch the Superalgos application. A terminal window will show the server is running, and a browser window will open with the WebUI. + +#### Using the Command Line To run Superalgos, go to the Superalgos directory/folder and run this command: -``` +```sh node platform ``` +Available Options: + +```sh +usage: node platform +``` + +| Option | Description | +| --- | --- | +| `minMemo` | Run with minimal memory footprint. This is critical for running on platforms with less than 8GB of ram, like a Raspberry Pi. | +| `noBrowser` | Do not attempt to open the WebUI in a browser. This is useful on headless servers where a UI is not available. | + The Client will run on your terminal and the GUI will launch on your default browser. If Chrome/Safari is not your default browser, copy the URL, close the browser, open Chrome/Safari, and paste the URL. Be patient... it takes a few seconds to fully load the GUI. A Welcome Tutorial pops-up automatically. You must do this Tutorial to finish the setup and to learn the basics. It's the ultimate onboarding experience, superior to all other resources available, including videos and the Docs. ![run-the-system-01](https://user-images.githubusercontent.com/13994516/107037804-e5fc6200-67bb-11eb-82f2-d0f40247fa14.gif) -Alternatively, you may use any of the automatically installed desktop and start menu shortcuts to launch Superalgos. - -**NOTE:** Shortcuts are not currently supported on Mac. Collaborators are needed to finish this feature. - - -
- -**RUNNING THE CLIENT FOR HEADLESS RASPBERRY PI USERS** - -If you are running a headless Raspberry Pi (one without a screen) you may need to change directories first and run Superalgos with the `minMemo` and `noBrowser` options. - -``` -cd Superalgos -``` -then -``` -node platform minMemo noBrowser -``` - -
- -**NOTE FOR UBUNTU USERS**: Enable Desktop Shortcut - -The majority of shortcuts that are automatically installed will work out of the box. Desktop shortcuts on Ubuntu, however, require a few additional steps to set up. - -First, desktop icons need to be enabled within the Tweaks app. -* Check if Tweaks is installed. -* If not go to Ubuntu Software. -* Install Tweaks. -* Open Tweaks. -* Under extensions turn on Desktop Icons - -![enable-ubuntu-shortcut](https://user-images.githubusercontent.com/55707292/117553927-f0780300-b019-11eb-9e36-46b509653283.gif) - -**TIP:** If you do not see the desktop shortcut appear right away you may need to restart your computer. - -Finally, you will need to enable the desktop shortcut. -* Right click Superalgos.desktop and select Allow Launching. - -![allow-launching](https://user-images.githubusercontent.com/55707292/117553933-fcfc5b80-b019-11eb-872c-4fad81b184d2.gif) - -Now both launcher and desktop shortcuts will launch Superalgos like any other program on your computer. - -## 3. Usage Notes +### Usage Notes We are testing the UI on Google Chrome and Safari on macOS only. It may work on other browsers as well — or not. If you are running on a different browser and ever need support, make sure you mention that fact upfront, or even better, try on Chrome/Safari first. - **TIP:** If your computer has 8 GB of RAM or less, use ```node platform minMemo``` to run the system with minimal RAM requirements. +> **TIP:** +> +> If your computer has 8 GB of RAM or less, use `node platform minMemo` to run the system with minimal RAM requirements. -# Running Superalgos on a Headless Linux Server as a Daemon +### Running Superalgos on a Headless Linux Server as a Daemon If you're running Superalgos on a headless linux server like a Raspberry Pi, you might want to run it as a daemon so it isn't attached to your current login session. The easiest, most standard way to go about this is probably using `systemd`. Most linux distributions use it as default init system/service manager. -## Using `systemd` +#### Using Systemd Create a `superalgos.service` file looking like this (change `` to your user name and `/path/to/Superalgos` to your Superalgos folder, for instance `/home/John/Superalgos`): -``` + +```ini [Unit] Description=Superalgos Platform Client @@ -293,296 +290,202 @@ ExecStart=/usr/bin/node platform minMemo noBrowser [Install] WantedBy=multi-user.target - -``` -There is no need to run Superalgos as root so we're running it as a user. The `minMemo` option assumes you're running on a small machine like a Raspberry Pi, while `noBrowser` makes sense for running daemonized. - -Now, as root (or using `sudo`), put the file `superalgos.service` you just created in `/etc/systemd/system/` and issue the command -``` -systemctl enable superalgos -``` -This will install the service so that Superalgos is started on boot. To start it manually, do (again as root or with `sudo`) -``` -systemctl start superalgos ``` -To see the output of Superalgos, use +There is no need to run Superalgos as root so we're running it as a user. The `minMemo` option assumes you're running on a small machine like a Raspberry Pi, while `noBrowser` makes sense for running daemonized. Now, you'll need to move the file to `/etc/systemd/system/` in order for it to be recognized. You'll need then to enable and start the service. + +```sh +sudo mv superalgos.service /etc/systemd/system +sudo systemctl daemon-reload +sudo systemctl enable superalgos +sudo systemctl start superalgos ``` + +To see the output of Superalgos, use: + +```sh journalctl -u superalgos ``` -or to follow the output, -``` + +or to follow the output with `-f`: + +```sh journalctl -u superalgos -f ``` -# Uninstall +### Docker Deployments -Superalgos writes nothing outside of the ```Superalgos``` folder other than shortcut files. To uninstall the software, follow these steps: +See the [Docker Readme for more information](Docker/README.md). -Open a terminal or command prompt and navigate to your main Superalgos directory and type the following command: -``` -node uninstall -``` -This will remove any shortcut files that have been installed. - -Then simply delete the `Superalgos` folder. There will be nothing left on your computor. - -# Welcome Tutorial +## Welcome Tutorial Once the app finishes loading, an interactive tutorial takes you by the hand and walks you all around the system while you learn the basic skills required to use the interface, mine data, backtest strategies, and even run a live trading session. It is highly recommended you follow the tutorial until the end, as it is carefully crafted to make your onboarding as easy as possible. Tutorials are the absolute best way to tackle the learning curve. You should do all tutorials before you start exploring other avenues on your own. ![welcome-tutorial-00](https://user-images.githubusercontent.com/13994516/107038771-4a6bf100-67bd-11eb-92e0-353525a972a9.gif) - **NOTE:** The tutorial uses Binance or Binance US as the exchange of choice. If you don't have an account with Binance or Binance US, you will still be able to follow 100% of the tutorial. When you get to the live trading section, keep going even if you don't intend to run the session. You may learn how to work with other exchanges later on. +> **NOTE:** +> +> The tutorial uses Binance or Binance US as the exchange of choice. If you don't have an account with Binance or Binance US, you will still be able to follow 100% of the tutorial. When you get to the live trading section, keep going even if you don't intend to run the session. You may learn how to work with other exchanges later on. -# Docker Deployments +## What is the Superalgos Platform? -Docker container images can be found at https://github.com/users/Superalgos/packages/container/package/superalgos - -If you wish to run Superalgos over docker platform, follow these steps. - -**Note:** This has not been extensively tested yet. If you run into troubles, please contact us at the [Superalgos Support Group](https://t.me/superalgossupport). - -## 1. Install Docker - -Follow the link to [install docker](https://docs.docker.com/engine/install/). - -## 2. Run - - -### Option A. Using pre-built container - -You will need to create local storage directories beforehand, by example with `mkdir Data-Storage Log-Files My-Workspaces` - -``` -docker run \ - -d \ - --rm \ - --name superalgos \ - -p 18041:18041 \ - -p 34248:34248 \ - -v $(pwd)/Data-Storage:/app/Data-Storage \ - -v $(pwd)/Log-Files:/app/Log-Files \ - -v $(pwd)/My-Workspaces:/app/My-Workspaces \ - ghcr.io/superalgos/superalgos:latest -``` - -Now you can access the Superalgos UI at http://127.0.0.1:34248 - -To see console logs you can use `docker logs superalgos -f` - -When you're done just exec `docker kill superalgos` - -### Option B. Build container locally using docker-compose - -Follow the link to [install docker-compose](https://docs.docker.com/compose/install/) - -Run `docker-compose -f Docker/docker-compose.yml up`. - -## Configure the Container Environment - -### Available image tags - -To avoid breaking changes, the `shasum hash` and the `release` tags are the best to use. These will generally ensure you are always running the same code. The other tags will change which code they are pointing to more frequently and without notice. - -- `latest` : the absolute latest build -- `master` : the latest master branch build -- `develop` : the latest develop branch build -- `` : a specific git commit hash -- `` : corresponds with a Github Release (git tag), i.e. `beta-10` - -### Environment variables - -`PUID` and `GUID` environment variables can be used to help avoid permissions issues in the mounted volumes between the container environment and the local OS environment. The default `PUID` and `GUID` is `1000`. You can view the current user's PUID and GUID with the `id` command. - -## Troubleshooting - -Some users have reported the Docker installation was not working, and the root cause was that the ad blocker was blocking the scripts to run. - -# Superalgos is User-centric - -* No ads, anywhere. - -* No sign-up / logins. - -* No user/usage data collection of any kind. - -* No user trading information collected or sold. - -* Runs 100% on uncompiled code anyone can read and audit. - -# Superalgos Development Pipeline - -* **Superalgos P2P Network:** Will allow the project to distribute trading intelligence produced by algo-traders. - -* **Trading Signals:** Will allow providers to broadcast trading signals and be rewarded with SA Tokens. - -* **Superalgos Mobile:** Will allow users to consume trading signals for free and autonomously execute trades from their mobile phones. - -* **Ethereum Integration:** Will allow mining data from an Ethereum network node, and bring it into the Superalgos workflow. - -# What is the Superalgos Platform? - -Superalgos Platform is a set of tools to automate crypto-trading. It is implemented as a Node JS Client + Web App that runs on your hardware and scales from a single Raspberry Pi to a Trading Farm. The Platform is fully functional and has been used for trading live since 2020. +Superalgos Platform is a set of tools to automate crypto-trading. It is implemented as a Node JS Client + Web App that runs on your hardware and scales from a single Raspberry Pi to a Trading Farm. The Platform is fully functional and has been used for trading live since 2020. At Beta 12, trading signals will be able to be sent to the Suerpalgos Network from the Superalgos Platform. -## Superalgos Platform Features +### Superalgos Platform Features -* A Visual Scripting Designer. -* Integrated Charting System. -* A Visual Strategy Debugger. -* Data Mining Tools. -* Coordinated Task Management across a Trading Farm. -* Community-built strategies to learn and start from. -* TensorFlow Machine Learning integration. -* In-App Tutorials. -* Complete In-App Documentation. -* SA Token / Project Governance System. +- A Visual Scripting Designer. +- Integrated Charting System. +- A Visual Strategy Debugger. +- Data Mining Tools. +- Coordinated Task Management across a Trading Farm. +- Community-built strategies to learn and start from. +- TensorFlow Machine Learning integration. +- In-App Tutorials. +- Complete In-App Documentation. +- SA Token / Project Governance System. + +### Superalgos Development Pipeline -## Superalgos Platform Allows You To... +- **Superalgos P2P Network:** Will allow the project to distribute trading intelligence produced by algo-traders. +- **Trading Signals:** Will allow providers to broadcast trading signals and be rewarded with SA Tokens. +- **Superalgos Mobile:** Will allow users to consume trading signals for free and autonomously execute trades from their mobile phones. +- **Ethereum Integration:** Will allow mining data from an Ethereum network node, and bring it into the Superalgos workflow. -* Visually design your trading strategies. -* Visually debug your trading strategies. -* Visually design your indicators. -* Visually design your plotters to visualize indicators or mined data. -* Visually design your data-mining operations. -* Download historical market data from crypto exchanges. -* Backtest your strategies against historical data. -* Run live trading sessions. -* Run arbitrary data-mining operations of any size. -* Feed your trading strategies with the data mined. -* Use your token holdings to vote and influence the direction of the project development. -* Produce real-time trading signals and send them via the p2p network. (under development) +### Superalgos is User-centric -# Superalgos Platform for Developers +- No ads, anywhere. +- No sign-up / logins. +- No user/usage data collection of any kind. +- No user trading information collected or sold. +- Runs 100% on uncompiled code anyone can read and audit. -* You may use Superalgos as a platform or as a component of a larger system. -* No proprietary code/libraries. All open-source and free. -* Superalgos features a library of community-contributed plugins (workspaces, strategies, indicators, plotters, tutorials, etc.). +### Superalgos Platform Allows You To -## Superalgos Platform Saves You Time +- Visually design your trading strategies. +- Visually debug your trading strategies. +- Visually design your indicators. +- Visually design your plotters to visualize indicators or mined data. +- Visually design your data-mining operations. +- Download historical market data from crypto exchanges. +- Backtest your strategies against historical data. +- Run live trading sessions. +- Run arbitrary data-mining operations of any size. +- Feed your trading strategies with the data mined. +- Use your token holdings to vote and influence the direction of the project development. +- Produce real-time trading signals and send them via the p2p network. (under development) -* No need to code the download of historical data from crypto exchanges. -* No need to code the streaming of market data from crypto exchanges. -* No need to hardcode strategies. Use the visual designer for a more flexible approach. -* No need to debug what went wrong, line by line, or dive into log files with tons of data. You can see each variable of the state of the Trading Engine at every candle by hovering the mouse over the charts. -* No need to integrate a charting library, Superalgos features an integrated Charting System. -* No need to manage task data or execution dependencies. Superalgos allows you to define Tasks and distribute them across a Trading Farm and takes care of the data and execution dependencies so that each task automatically starts when their dependencies are ready. +### Superalgos Platform for Developers -## Superalgos Platform is Permissionless +- You may use Superalgos as a platform or as a component of a larger system. +- No proprietary code/libraries. All open-source and free. +- Superalgos features a library of community-contributed plugins (workspaces, strategies, indicators, plotters, tutorials, etc.). -* Don't like the UI? -* Don't like the icons used? -* Don't like the Charting System? -* Don't like the Visual Designer? -* Don't like the Visual Debugger? -* Don't like the Docs? -* Don't like the Trading Bot? -* Don't like the Indicators? -* Don't like the Plotters? -* Don't like any other part of the system? +### Superalgos Platform Saves You Time + +- No need to code the download of historical data from crypto exchanges. +- No need to code the streaming of market data from crypto exchanges. +- No need to hardcode strategies. Use the visual designer for a more flexible approach. +- No need to debug what went wrong, line by line, or dive into log files with tons of data. You can see each variable of the state of the Trading Engine at every candle by hovering the mouse over the charts. +- No need to integrate a charting library, Superalgos features an integrated Charting System. +- No need to manage task data or execution dependencies. Superalgos allows you to define Tasks and distribute them across a Trading Farm and takes care of the data and execution dependencies so that each task automatically starts when their dependencies are ready. + +### Superalgos Platform is Permissionless + +- Don't like the UI? +- Don't like the icons used? +- Don't like the Charting System? +- Don't like the Visual Designer? +- Don't like the Visual Debugger? +- Don't like the Docs? +- Don't like the Trading Bot? +- Don't like the Indicators? +- Don't like the Plotters? +- Don't like any other part of the system? No problem, code or integrate libraries with your own version of any component and we promise we will merge your work and provide it as an alternative to users. We believe in Permissionless Innovation and that users, not team members, are the final judges and the ones who decide what they prefer to use. You are free to create an alternative for any part of the system that you believe that should work or should have been done in a different way. We will help you integrate your vision into the next release and enable a way for users to choose between different implementations of the same functionality. You will also be granted the title of maintainer of the functionality you provide and have decision power on how it evolves in the future. -# Superalgos Platform for Algo-Trders +### Superalgos Platform for Algo-Trders -* Superalgos is easy to install/uninstall. -* Superalgos is easy to run. -* Superalgos is easy to use. -* Superalgos is easy to learn. -* Superalgos is easy to debug. -* Superalgos is well documented. -* You have free online support via Telegram and Discord. +- Superalgos is easy to install/uninstall. +- Superalgos is easy to run. +- Superalgos is easy to use. +- Superalgos is easy to learn. +- Superalgos is easy to debug. +- Superalgos is well documented. +- You have free online support via Telegram and Discord. -## Superalgos Platform Saves You Money +### Superalgos Platform Saves You Money -* There are no paid plans or anything that costs you money. -* There is no locked functionality. You may use the full capacity of the software. -* There is no limit to the number of backtests you may run. -* There is no limit to the number of live sessions you may run. -* There is no limit to the number of historical data you may download. -* There is no limit to the volume of data you may process. -* You may use all the plugins available (indicators, plotters, strategies, etc.) -* You may install Superalgos in as many machines as you wish. -* Your installations may be used by as many people as required. -* You may connect to as many crypto exchanges as you wish. +- There are no paid plans or anything that costs you money. +- There is no locked functionality. You may use the full capacity of the software. +- There is no limit to the number of backtests you may run. +- There is no limit to the number of live sessions you may run. +- There is no limit to the number of historical data you may download. +- There is no limit to the volume of data you may process. +- You may use all the plugins available (indicators, plotters, strategies, etc.) +- You may install Superalgos in as many machines as you wish. +- Your installations may be used by as many people as required. +- You may connect to as many crypto exchanges as you wish. -## Superalgos Platform Minimizes Risks +### Superalgos Platform Minimizes Risks -* No one can know what strategies you design/run. -* No one can front-run you. -* No one can steal your trading ideas. -* No one knows how much capital you trade. -* No one can see your exchange keys. +- No one can know what strategies you design/run. +- No one can front-run you. +- No one can steal your trading ideas. +- No one knows how much capital you trade. +- No one can see your exchange keys. -# Superalgos Platform for Companies +### Superalgos Platform for Companies -* No need to buy expensive software for monitoring crypto markets or trading execution. -* No need to hire your own developers. -* All your employees can use Superalgos for free. -* You can use Superalgos to its full capacity or just the features you are currently interested in. -* Superalgos may be integrated into your existing operation, feeding to and from other systems. -* You've got a growing community of algo-traders constantly improving the software at zero cost for you. -* You've got free online customer support via Telegram or Discord. +- No need to buy expensive software for monitoring crypto markets or trading execution. +- No need to hire your own developers. +- All your employees can use Superalgos for free. +- You can use Superalgos to its full capacity or just the features you are currently interested in. +- Superalgos may be integrated into your existing operation, feeding to and from other systems. +- You've got a growing community of algo-traders constantly improving the software at zero cost for you. +- You've got free online customer support via Telegram or Discord. -# Support +## Support We just opened a brand new [Discord server for Support and the Community](https://discord.gg/CGeKC6WQQb). We also meet on several Telegram groups, where it all started! > **BEWARE OF IMPERSONATORS — SCAMMERS ARE LURKING!** -Superalgos Admins, the Core Team, and Community Mods will never contact you directly unless you contact them first. We will never ask you for API keys, coins, or cash. In fact, we will never ask you to trust us in any way. Our [Community Safety Policy](https://superalgos.org/community-safety-policy.shtml) explains why. In short, we want to make it clear that if someone contacts you directly claiming to work with or for the project, it is a scam. Please report scammers in the Community group so that they may be banned, and to increase awareness of the problem, but also block them and report them to Telegram if the option is available. +> +> Superalgos Admins, the Core Team, and Community Mods will never contact you directly unless you contact them first. We will never ask you for API keys, coins, or cash. In fact, we will never ask you to trust us in any way. Our [Community Safety Policy](https://superalgos.org/community-safety-policy.shtml) explains why. In short, we want to make it clear that if someone contacts you directly claiming to work with or for the project, it is a scam. Please report scammers in the Community group so that they may be banned, and to increase awareness of the problem, but also block them and report them to Telegram if the option is available. -## Via Telegram +- Via Telegram + - Online support through our [Superalgos User's Support Group](https://t.me/superalgossupport). +- In-App Integrated Documentation + - Superalgos features interactive documentation built-in the system. +- Video Tutorials + - Subscribe to the [Superalgos YouTube Channel](https://www.youtube.com/channel/UCmYSGbB151xFQPNxj7KfKBg). +- In-App Tutorials + - There are many interactive tutorials you may do and learn from. -Online support through our [Superalgos User's Support Group](https://t.me/superalgossupport). +## Other Resources -## In-App Integrated Documentation +- Web Site + - For an overview of what Superalgos can do for you, check the [Superalgos Website](https://superalgos.org/). +- Telegram + - For official news, join the [Superalgos Announcements Channel](https://t.me/superalgos). + - Meet other users in the [Superalgos Telegram Community Group](https://t.me/superalgoscommunity). + - Meet developers in the [Superalgos Telegram Developer's Group](https://t.me/superalgosdevelop). + - Users meet in other topic-specific Telegram Groups. There's a [complete list of groups](https://superalgos.org/community-join.shtml) on the website. +- Blog + - Find official announcements and various articles on the [Superalgos Blog](https://medium.com/superalgos). +- Twitter + - To stay in the loop, follow [Superalgos on Twitter](https://twitter.com/superalgos). +- Facebook + - Or follow [Superalgos on Facebook](https://www.facebook.com/superalgos). -Superalgos features interactive documentation built-in the system. - -## Video Tutorials - -Subscribe to the [Superalgos YouTube Channel](https://www.youtube.com/channel/UCmYSGbB151xFQPNxj7KfKBg). - -## In-App Tutorials - -There are many interactive tutorials you may do and learn from. - -# Other Resources - -## Web Site - -For an overview of what Superalgos can do for you, check the [Superalgos Website](https://superalgos.org/). - -## Telegram - -For official news, join the [Superalgos Announcements Channel](https://t.me/superalgos). - -Meet other users in the [Superalgos Telegram Community Group](https://t.me/superalgoscommunity). - -Meet developers in the [Superalgos Telegram Developer's Group](https://t.me/superalgosdevelop). - -Users meet in other topic-specific Telegram Groups. There's a [complete list of groups](https://superalgos.org/community-join.shtml) on the website. - -## Blog - -Find official announcements and various articles on the [Superalgos Blog](https://medium.com/superalgos). - -## Twitter - -To stay in the loop, follow [Superalgos on Twitter](https://twitter.com/superalgos). - -## Facebook - -Or follow [Superalgos on Facebook](https://www.facebook.com/superalgos). - -# Contributing +## Contributing Superalgos is a Community Project built by users for users. Learn [how you may contribute](https://superalgos.org/community-contribute.shtml). -# License +## License Superalgos is open-source software released under [Apache License 2.0](LICENSE). diff --git a/TaskServer/ProcessInstance.js b/TaskServer/ProcessInstance.js index baed01931..769906ab5 100644 --- a/TaskServer/ProcessInstance.js +++ b/TaskServer/ProcessInstance.js @@ -53,14 +53,14 @@ defined with the same type at the property botType. */ for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let project = PROJECTS_SCHEMA[i] - if (project.name !== TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName) { continue } - for (let j = 0; j < project.TS.botModules.length; j++) { - botModuleDefinition = project.TS.botModules[j] + let projectDefinition = PROJECTS_SCHEMA[i] + if (projectDefinition.name !== TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName) { continue } + for (let j = 0; j < projectDefinition.TS.botModules.length; j++) { + botModuleDefinition = projectDefinition.TS.botModules[j] if (botModuleDefinition.botType === TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.type) { try { TS.projects.foundations.globals.processVariables.TOTAL_PROCESS_INSTANCES_CREATED++ - let project = TS.projects[TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName.toLowerCase()] + let project = TS.projects[projectDefinition.propertyName] let botModule = project.botModules[botModuleDefinition.propertyName] let moduleFunction = botModule[botModuleDefinition.functionName] botModuleObject = moduleFunction(processIndex) diff --git a/TaskServerRoot.js b/TaskServerRoot.js index f20f38061..3b6df6ae8 100644 --- a/TaskServerRoot.js +++ b/TaskServerRoot.js @@ -23,6 +23,12 @@ global.env = ENVIRONMENT_MODULE First thing is to load the project schema file. */ global.PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECT_SCHEMA) +global.PROJECTS_SCHEMA_MAP = new Map() + +for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { + let projectDefinition = PROJECTS_SCHEMA[i] + PROJECTS_SCHEMA_MAP.set(projectDefinition.name, projectDefinition) +} /* Setting up the modules that will be available, defined at the Project Schema file. */ diff --git a/package.json b/package.json index 3a908307f..ab00b7ad6 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,10 @@ "author": { "name": "Luis-Fernando-Molina" }, + "scripts": { + "start": "node platform minMemo noBrowser", + "setup": "node setup noShortcuts" + }, "dependencies": { "@octokit/rest": "^18.11.4", "ccxt": "^1.57.36", diff --git a/platform.js b/platform.js index 1684ce7c7..5058dba87 100644 --- a/platform.js +++ b/platform.js @@ -18,7 +18,7 @@ if ( console.log('Superalgos') console.log('') - console.log('VERSION: Beta 11') + console.log('VERSION: Beta 12') console.log('') console.log('WEB: https://www.superalgos.org') console.log('')