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

This commit is contained in:
gitforkgit committed 2021-10-29 17:17:06 +02:00
commit 26c71b82e6
190 files changed
+33417 -23246

No files matched your search

+2 -1
View File
@@ -3,7 +3,8 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence, these will be requested for
# review when someone opens a pull request.
* @Superalgos/core-devs
* @Superalgos/foundations-project
# Project Teams
/Projects/Algorithmic-Trading @Superalgos/algorithmic-trading-project
+2 -2
View File
@@ -12,12 +12,12 @@ exports.newDesktopRoot = function newDesktopRoot() {
async function run() {
/*
The DK object is accesible everywhere at the Superalgos Desktop App.
The DK object is accessible everywhere at the Superalgos Desktop App.
It provides access to all modules built for this App.
*/
global.DK = {}
/*
The SA object is accesible everywhere at the Superalgos Desktop App.
The SA object is accessible everywhere at the Superalgos Desktop App.
It provides access to all modules built for Superalgos in general.
*/
global.SA = {}
+1 -1
View File
@@ -4,7 +4,7 @@ COPY . .
RUN apk add --no-cache --virtual .build-deps make g++ \
&& apk add --no-cache python3 \
&& if [ "$(uname -m)" = "x86_64" ]; then node setup noShortcuts tensorflow; else node setup noShortcuts; fi \
&& mkdir -p Data-Storage Log-Files My-Workspaces \
&& mkdir -p ./Platform/My-Data-Storage ./Platform/My-Log-Files ./Platform/My-Workspaces \
&& addgroup superalgos \
&& adduser --disabled-password --no-create-home --ingroup superalgos superalgos \
&& chown -R superalgos:superalgos /app \
+10 -10
View File
@@ -34,7 +34,7 @@
if (eventHandler === undefined) {
/*
We will only create event handlers which were not created before. Remember that someone trying to listen events
at an event handler that does not exist, will create that eventhandler, so it is possible that the emitter
at an event handler that does not exist, will create that event handler, so it is possible that the emitter
when trying to create the event handler in fact was late and the event handler is already there if the listener
arrived here first. An event handler created with this method is not destroyed if there are no listeners or they
all leave.
@@ -50,8 +50,8 @@
let eventHandler = eventHandlers.get(command.eventHandlerName)
if (eventHandler !== undefined) {
/*
We will only delete event handlers which have noone listening, allowing a listener to continue listening even
when the event emitter is gone, asuming that it could come back at some point in time and resume emitting.
We will only delete event handlers which have no one listening, allowing a listener to continue listening even
when the event emitter is gone, assuming that it could come back at some point in time and resume emitting.
*/
if (eventHandler.listeners.length === 0) {
eventHandlers.delete(command.eventHandlerName)
@@ -68,8 +68,8 @@
if (eventHandler === undefined) {
/*
We will create event handlers which were not created before if a listener tries to listen to a handler that does not
exist before the emitter comes and create it. This is to aviod syncronization problems and also problems with emitters life
cycles with higher frecuency that the ones of listeners. Created in this way, event handlers are marked for deletion if
exist before the emitter comes and create it. This is to avoid synchronization problems and also problems with emitters life
cycles with higher frequency that the ones of listeners. Created in this way, event handlers are marked for deletion if
all listeners stop listening at one point in time.
*/
eventHandler = newEventHandler()
@@ -104,7 +104,7 @@
if (eventHandler === undefined) {
/* If the event handler does not exist anymore, then there is no need to perform further actiions. */
/* If the event handler does not exist anymore, then there is no need to perform further actions. */
sendResponse(global.DEFAULT_OK_RESPONSE)
return
}
@@ -112,7 +112,7 @@
eventHandler.stopListening(command.eventHandlerName, command.eventType, command.callerId, command.eventSubscriptionId)
/*
We check here if there are no more listeners and the event handler original emmiter is also gone, then we need to delete
We check here if there are no more listeners and the event handler original emitter is also gone, then we need to delete
this event handlers since chances are that is not needed anymore.
*/
if (eventHandler.listeners.length === 0 && eventHandler.deleteWhenAllListenersAreGone === true) {
@@ -130,7 +130,7 @@
eventHandler = newEventHandler()
eventHandlers.set(command.eventHandlerName, eventHandler)
/* No matter if it is the listener or the emiter the one that acts first, if an event handler does not exist we just create it acan keep it there. */
/* No matter if it is the listener or the emitter the one that acts first, if an event handler does not exist we just create it and keep it there. */
}
//console.log("[INFO] Client -> Events Server -> Raising Event " + command.eventHandlerName + " " + command.eventType)
@@ -163,7 +163,7 @@
let thisObject = {
name: undefined, // This is for debugging purposes only.
deleteWhenAllListenersAreGone: false,
listeners: [], // Here we store all the functions we will call when an event is raiseed.
listeners: [], // Here we store all the functions we will call when an event is raised.
listenToEvent: listenToEvent,
stopListening: stopListening,
raiseEvent: raiseEvent,
@@ -181,7 +181,7 @@
/*
We can not allow to have the exact same listener more than once. In case that we find a listener trying to listen again, the first record will
be deleted and we are just going to consider the last one comming in.
be deleted and we are just going to consider the last one coming in.
*/
for (let i = 0; i < thisObject.listeners.length; i++) {
if (eventHandlerName === thisObject.listeners[i][0] && eventType === thisObject.listeners[i][1] && callerId === thisObject.listeners[i][2]) {
+6 -5
View File
@@ -316,7 +316,7 @@ exports.newGithubServer = function newGithubServer() {
owner: owner,
repo: repo,
issue_number: pullRequest.number,
body: 'This Pull Request was automatically merged by the Superalgos Governance System because it was detected that the Github User " ' + githubUsername + '" who submitted it, modified its own User Profile Plugin File and nothning else but that file. All validations were successfull.'
body: 'This Pull Request was automatically merged by the Superalgos Governance System because it was detected that the Github User " ' + githubUsername + '" who submitted it, modified its own User Profile Plugin File and nothing else but that file. All validations were successful.'
});
}
@@ -378,7 +378,7 @@ exports.newGithubServer = function newGithubServer() {
fileName = splittedFileName[0]
githubUsername = pullRequest.user.login
if (githubUsername !== fileName) {
if (githubUsername.toLowerCase() !== fileName.toLowerCase()) {
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #2 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Github Username is not equal to the File Name. -> Github Username = ' + githubUsername + '-> fileName = ' + fileName)
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
@@ -420,7 +420,7 @@ exports.newGithubServer = function newGithubServer() {
*/
let config = JSON.parse(userProfile.config)
let messageSigned = config.signature.message
if (messageSigned !== githubUsername) {
if (messageSigned.toLowerCase() !== githubUsername.toLowerCase()) {
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #4 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Github Username is not equal to the Message Signed at the User Profile. -> Github Username = ' + githubUsername + '-> messageSigned = ' + messageSigned)
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
@@ -480,7 +480,7 @@ exports.newGithubServer = function newGithubServer() {
/*
Validation #6: The name of the User Profile node is not the Github Username.
*/
if (userProfile.name !== githubUsername) {
if (userProfile.name.toLowerCase() !== githubUsername.toLowerCase()) {
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #6 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Github Username is not equal to the User Profile node\'s name. -> Github Username = ' + githubUsername + '-> userProfile.name = ' + userProfile.name)
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
@@ -628,7 +628,7 @@ exports.newGithubServer = function newGithubServer() {
*/
let messageSigned = config.signature.message
if (messageSigned !== githubUsername) {
if (messageSigned.toLowerCase() !== githubUsername.toLowerCase()) {
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #9 Failed -> Pull Request "' + pullRequest.title + '" not merged because the Signing Account ' + signingAccount.name + ' has not signed the current Github User Account, but something else. -> messageSigned = ' + messageSigned + '-> githubUsername = ' + githubUsername)
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
@@ -775,6 +775,7 @@ exports.newGithubServer = function newGithubServer() {
}
} catch (err) {
if (err === undefined) { return }
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> err.stack = ' + err.stack)
}
}
+1 -1
View File
@@ -723,7 +723,7 @@ exports.newHttpInterface = function newHttpInterface() {
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> currentBranch = ' + currentBranch)
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> contributionsBranch = ' + contributionsBranch)
console.log('')
console.log('Torubleshooting Tips:')
console.log('Troubleshooting Tips:')
console.log('')
console.log('1. Make sure that you have set up your Github Username and Token at the APIs -> Github API node at the workspace.')
console.log('2. Make sure you are running the latest version of Git available for your OS.')
+2 -2
View File
@@ -149,12 +149,12 @@ function newAnimation() {
}
}
/* We request the next frame to be drawn, and stablishing a loop */
/* We request the next frame to be drawn, and establish a loop */
/* Use this code for full animation speed. */
animationLoopHandle = window.requestAnimationFrame(animationLoop)
/* Use this code for max 10 frames per second animation speed, if the app is consumming too much of your CPU. */
/* Use this code for max 10 frames per second animation speed, if the app is consuming too much of your CPU. */
/*
setTimeout(nextLoop, 100)
function nextLoop () {
+2 -2
View File
@@ -47,7 +47,7 @@ function loadSuperalgos() {
loadDebugModule()
if ((browser.name !== "Chrome" && browser.name!=="Safari") || (browser.name === "Chrome" && parseInt(browser.version) < 85) || (browser.name === "Safari" && parseInt(browser.version) < 13)) {
alert("Superalgos is officially supported on Google Chrome 85 or Safari 13.1 and above. Your browser version has been detected as potentially beneath this. If you continue you may experience some functionaility issues.\n\nDetected Browser: " + browser.name + "\nVersion: " + browser.version)
alert("Superalgos is officially supported on Google Chrome 85 or Safari 13.1 and above. Your browser version has been detected as potentially beneath this. If you continue you may experience some functionality issues.\n\nDetected Browser: " + browser.name + "\nVersion: " + browser.version)
}
function checkBrowserVersion () {
@@ -131,7 +131,7 @@ function loadSuperalgos() {
}
}
/* And Finally, we start loading all the scripts we will inmediatelly need. */
/* And Finally, we start loading all the scripts we will immediately need. */
function loadModules() {
let path = "AppLoader.js"
REQUIREJS([path], onRequired)
+12 -12
View File
@@ -172,7 +172,7 @@ function newCanvas() {
spaceDefinitionDrawMap.set(spaceDefinition.animationDrawIndex, spaceDefinition)
}
/* Build the maps that defines the secuence of execution of different events. */
/* Build the maps that defines the sequence of execution of different events. */
if (spaceDefinition.onMouseWheelIndex !== undefined) {
projectInstance.events.onMouseWheelMap.set(spaceDefinition.onMouseWheelIndex, spaceInstance)
}
@@ -373,7 +373,7 @@ function newCanvas() {
if (EDITOR_ON_FOCUS === true) {
/*
We will fordward the event to whoever is
We will forward the event to whoever is
controlling the editor.
*/
if (window.editorController !== undefined) {
@@ -650,7 +650,7 @@ function newCanvas() {
if ((event.ctrlKey === true || event.metaKey === true) && event.altKey === true) {
/* Shortcuts to nodes */
if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 65 && event.keyCode <= 90)) {
/* From here we prevent the default behaviour. Putting it earlier prevents imput box and text area to receive keystrokes */
/* From here we prevent the default behaviour. Putting it earlier prevents input box and text area to receive keystrokes */
event.preventDefault()
let nodeUsingThisKey = await UI.projects.foundations.spaces.designSpace.workspace.getNodeByShortcutKey(event.key)
@@ -771,11 +771,11 @@ function newCanvas() {
/*
We will go through all the spaces defined at the project schema for each project
and we are going to query each space to see if they have the container that is at
the mouse position. We will order firt the spaces by the sequence order defined
the mouse position. We will order first the spaces by the sequence order defined
at the project schema specifically for this mouse event.
The order of the projects for events evaluations has intentionally been inverted,
because the latest project is drwan the last, on top of the others, that means that
because the latest project is drawn the last, on top of the others, that means that
events should belong to the last first.
*/
for (let i = PROJECTS_SCHEMA.length - 1; i >= 0; i--) {
@@ -881,11 +881,11 @@ function newCanvas() {
/*
We will go through all the spaces defined at the project schema for each project
and we are going to query each space to see if they have the container that is at
the mouse position. We will order firt the spaces by the sequence order defined
the mouse position. We will order first the spaces by the sequence order defined
at the project schema specifically for this mouse event.
The order of the projects for events evaluations has intentionally been inverted,
because the latest project is drwan the last, on top of the others, that means that
because the latest project is drawn the last, on top of the others, that means that
events should belong to the last first.
*/
for (let i = PROJECTS_SCHEMA.length - 1; i >= 0; i--) {
@@ -992,18 +992,18 @@ function newCanvas() {
return
}
/* Then we check who is the current object underneeth the mounse. */
/* Then we check who is the current object underneath the mouse. */
let container
/*
We will go through all the spaces defined at the project schema for each project
and we are going to query each space to see if they have the container that is at
the mouse position. We will order firt the spaces by the sequence order defined
the mouse position. We will order first the spaces by the sequence order defined
at the project schema specifically for this mouse event.
The order of the projects for events evaluations has intentionally been inverted,
because the latest project is drwan the last, on top of the others, that means that
because the latest project is drawn the last, on top of the others, that means that
events should belong to the last first.
*/
for (let i = PROJECTS_SCHEMA.length - 1; i >= 0; i--) {
@@ -1063,11 +1063,11 @@ function newCanvas() {
/*
We will go through all the spaces defined at the project schema for each project
and we are going to query each space to see if they have the container that is at
the mouse position. We will order firt the spaces by the sequence order defined
the mouse position. We will order first the spaces by the sequence order defined
at the project schema specifically for this mouse event.
The order of the projects for events evaluations has intentionally been inverted,
because the latest project is drwan the last, on top of the others, that means that
because the latest project is drawn the last, on top of the others, that means that
events should belong to the last first.
*/
for (let i = PROJECTS_SCHEMA.length - 1; i >= 0; i--) {
+3 -3
View File
@@ -77,7 +77,7 @@ function newFileCloud () {
}
if (fileName === undefined) {
logger.write('[ERROR] getFile -> getFileRecursively -> Inconsistant data. Check the following: ')
logger.write('[ERROR] getFile -> getFileRecursively -> Inconsistent data. Check the following: ')
logger.write('[ERROR] getFile -> getFileRecursively -> pMine = ' + JSON.stringify(pMine))
logger.write('[ERROR] getFile -> getFileRecursively -> pBot = ' + JSON.stringify(pBot))
logger.write('[ERROR] getFile -> getFileRecursively -> pDataset = ' + JSON.stringify(pDataset))
@@ -85,7 +85,7 @@ function newFileCloud () {
logger.write('[ERROR] getFile -> getFileRecursively -> pMarket = ' + JSON.stringify(pMarket))
logger.write('[ERROR] getFile -> getFileRecursively -> ptimeFrameLabel = ' + JSON.stringify(ptimeFrameLabel))
throw ('Inconsistant data received.')
throw ('Inconsistent data received.')
}
if (pMarket !== undefined) {
@@ -152,7 +152,7 @@ function newFileCloud () {
if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> filePath = ' + filePath) }
if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> fileName = ' + fileName) }
if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> Unexpected Error Ocurred.') }
if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> Unexpected Error Occurred.') }
if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> err = ' + err.stack) }
if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> text = ' + text) }
if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> response = ' + response) }
+2 -2
View File
@@ -195,7 +195,7 @@ function newFileCursor() {
/*
We are implementing here an algorithm designed to save bandwidth, memory and processing power at the browser.
We say there is a saving mode where the cursor is running at a minimum size. When the end user aproaches the time period the cursor
We say there is a saving mode where the cursor is running at a minimum size. When the end user approaches the time period the cursor
is set, then it should exit the saving mode and go to its actual size.
To do this we are going to measure the distance from the Time Frame received to the one the cursors was initialized with.
@@ -427,7 +427,7 @@ function newFileCursor() {
let targetDate = new Date(cursorDate)
targetDate.setUTCDate(targetDate.getUTCDate() + j)
/* Small algorith to allow load first the current date, then alternate between the most forwad and the most backwards ones. */
/* Small algorithm to allow load first the current date, then alternate between the most forward and the most backwards ones. */
if (j === 0) { j++ } else {
if (j < 0) {
j = -j
+2 -2
View File
@@ -45,7 +45,7 @@ function newFileStorage(host, port, scheme='http') {
url = folder + filePath
}
/* Scaping # since it breaks the URL */
/* Escaping # since it breaks the URL */
url = url.replaceAll('#', '_HASHTAG_')
httpRequest(undefined, url, (response, fileContent) => {
@@ -64,7 +64,7 @@ function newFileStorage(host, port, scheme='http') {
let err = { code: 'The specified key does not exist.' }
callBackFunction(err)
} else {
console.log('Error geting the file from the serever:', err)
console.log('Error getting the file from the server:', err)
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
}
}
+1 -1
View File
@@ -8,7 +8,7 @@ function newEventHandler() {
finalize: finalize
}
let eventHandlers = [] // Here we store all the functions we will call when an event is raiseed.
let eventHandlers = [] // Here we store all the functions we will call when an event is raised.
return thisObject
+2 -2
View File
@@ -225,7 +225,7 @@ function newEventsServerClient(lanNetworkNode) {
port = config.webSocketsPort
extwsurl = config.webSocketsExternalURL
/* Check if we really have to stablish the connection. */
/* Check if we really have to establish the connection. */
if (config.autoConnect === false) { return }
} catch (err) {
lanNetworkNode.payload.uiObject.setErrorMessage(
@@ -285,7 +285,7 @@ function newEventsServerClient(lanNetworkNode) {
}
}
WEB_SOCKETS_CONNECTION.onmessage = e => {
// console.log('Websoked Message Received: ' + e.data)
// console.log('WEB_SOCKET Message Received: ' + e.data)
let message = JSON.parse(e.data)
@@ -228,7 +228,7 @@
logError('key.length:' + exchangeApiKey.config.codeName.length)
logError('secret.length:' + exchangeApiKey.config.secret.length)
logError('Double check that you copied the key at the codeName property and the secret at secret property without bringing any invisible caracter from the exchange web site, or leaving any character from the sample text. Also check that the keys are not disabled at the exchange ot that they are not restricted by IP.')
logError('As a remainder. Binance key and secret are 64 bytes in lenght each one. ')
logError('As a remainder. Binance key and secret are 64 bytes in length each one. ')
}
}
}
@@ -290,7 +290,7 @@
}
}
catch (err) {
/* An unhandled exception occured. in this case we return Fail and log the stack. */
/* An unhandled exception occurred. in this case we return Fail and log the stack. */
if (err.stack) {
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).UNEXPECTED_ERROR = err
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
@@ -307,7 +307,7 @@
return
}
/* Some other handled exception occured. We return Fail and move on. */
/* Some other handled exception occurred. We return Fail and move on. */
if (err.result !== TS.projects.foundations.globals.standardResponses.DEFAULT_OK_RESPONSE.result) {
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).UNEXPECTED_ERROR = err
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
@@ -0,0 +1,253 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg20"
sodipodi:docname="plugin-assets.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
inkscape:export-filename="E:\Superalgos\Projects\Community-Plugins\Icons\plugins\plugin-assets.png"
inkscape:export-xdpi="100"
inkscape:export-ydpi="100">
<metadata
id="metadata26">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs24" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview22"
showgrid="false"
inkscape:zoom="0.84765625"
inkscape:cx="170.95892"
inkscape:cy="319.19258"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg20"
inkscape:document-rotation="0" />
<path
d="M465.597 170.772C451.908 135.12 429.079 103.698 399.402 79.6613C369.726 55.625 334.247 39.8209 296.529 33.8364L279.477 141.309C298.336 144.301 316.075 152.203 330.914 164.221C345.752 176.239 357.167 191.95 364.011 209.776L465.597 170.772Z"
fill="#0295AA"
id="path2" />
<path
d="M279.701 37.7552C242.02 31.7765 203.418 36.4398 168.244 51.2195C133.071 65.9993 102.723 90.3081 80.6219 121.407L164.111 180.741C175.162 165.192 190.335 153.037 207.922 145.647C225.509 138.258 244.81 135.926 263.651 138.915L279.701 37.7552Z"
fill="#F0353D"
id="path4" />
<path
d="M72.5959 143.961C55.063 168.632 43.6372 197.112 39.2582 227.06C34.8793 257.008 37.6722 287.567 47.4074 316.225L137.929 285.474C133.061 271.145 131.665 255.866 133.854 240.892C136.044 225.918 141.757 211.678 150.523 199.342L72.5959 143.961Z"
fill="#BCD643"
id="path6" />
<path
d="M56.1413 336.123C70.7195 379.037 99.5975 415.641 137.941 439.805C176.284 463.97 221.765 474.229 266.769 468.865L255.067 370.694C232.565 373.376 209.825 368.246 190.653 356.164C171.482 344.082 157.043 325.78 149.753 304.323L56.1413 336.123Z"
fill="#9BAAAB"
id="path8" />
<path
d="m 286.266,471.334 c 33.727,-4.02 66.091,-15.687 94.626,-34.111 28.534,-18.424 52.486,-43.119 70.03,-72.203 17.544,-29.084 28.217,-61.789 31.205,-95.623 2.988,-33.834 -1.787,-67.903 -13.962,-99.612 l -104.154,39.991 c 6.087,15.854 8.475,32.889 6.981,49.806 -1.494,16.917 -6.831,33.269 -15.603,47.811 -8.772,14.542 -20.748,26.89 -35.015,36.102 -14.267,9.212 -30.449,15.045 -47.313,17.055 z"
fill="#4acfd9"
id="path10" />
<path
d="M399.544 84.3453L436.296 38.9697L489.657 38.9697"
stroke="#0295AA"
stroke-width="14"
id="path12" />
<path
d="M422 21H493"
stroke="#F0353D"
stroke-width="12"
stroke-linecap="round"
stroke-linejoin="round"
id="path14" />
<g
id="g900"
transform="matrix(1.5816277,0,0,1.5816277,-148.89669,-145.76707)">
<circle
cx="256"
cy="256"
r="103"
fill="#E6EAEA"
id="circle16" />
<g
id="g1296-7-4"
transform="rotate(90,105.8491,238.03695)">
<g
id="g1027-55-3-7"
transform="rotate(45,1342.5065,-1213.1529)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7-3-4"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027-3-0"
transform="rotate(45,1527.1072,-1095.7609)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58-6-6"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60-6-1"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62-2-1"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64-5-5"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66-2-6"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68-5-4"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70-4-4"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72-3-1"
style="fill:#365558" />
</g>
</g>
</g>
<rect
x="-526.15668"
y="2.3594437"
class="st1"
width="128"
height="128"
id="rect14"
style="fill:#f0353d" />
<rect
x="-398.15668"
y="2.3594437"
class="st2"
width="128"
height="128"
id="rect16"
style="fill:#fd6a33" />
<rect
x="-270.15668"
y="2.3594437"
class="st3"
width="128"
height="128"
id="rect18"
style="fill:#ff8c29" />
<rect
x="-142.15668"
y="2.3594437"
class="st4"
width="128"
height="128"
id="rect20"
style="fill:#ffd1a9" />
<rect
x="-526.15668"
y="130.35944"
class="st5"
width="128"
height="128"
id="rect22"
style="fill:#365558" />
<rect
x="-398.15668"
y="130.35944"
class="st6"
width="128"
height="128"
id="rect24"
style="fill:#0295aa" />
<rect
x="-270.15668"
y="130.35944"
class="st7"
width="128"
height="128"
id="rect26"
style="fill:#4acfd9" />
<rect
x="-526.15668"
y="258.35944"
class="st8"
width="128"
height="128"
id="rect28"
style="fill:#9baaab" />
<rect
x="-398.15668"
y="258.35944"
class="st9"
width="128"
height="128"
id="rect30"
style="fill:#cdd4d5" />
<rect
x="-270.15668"
y="258.35944"
class="st10"
width="128"
height="128"
id="rect32"
style="fill:#e6eaea" />
<rect
x="-142.15668"
y="258.35944"
class="st11"
width="128"
height="128"
id="rect34"
style="fill:#ffffff" />
<rect
x="-526.15668"
y="386.35944"
class="st12"
width="128"
height="128"
id="rect36"
style="fill:#bcd643" />
</svg>

After

Width:  |  Height:  |  Size: 9.7 KiB

@@ -0,0 +1,292 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg32"
sodipodi:docname="plugin-features.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
inkscape:export-filename="E:\Superalgos\Projects\Community-Plugins\Icons\plugins\plugin-features.png"
inkscape:export-xdpi="100"
inkscape:export-ydpi="100">
<metadata
id="metadata38">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs36" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview34"
showgrid="false"
inkscape:zoom="0.59938348"
inkscape:cx="134.79507"
inkscape:cy="281.7441"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg32" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M83.0332 13.9705C78.6149 13.9705 75.0332 17.5522 75.0332 21.9705V489.029C75.0332 493.448 78.6149 497.029 83.0332 497.029H333.813V396.17L435.999 390.862L436 390.862V21.9705C436 17.5522 432.419 13.9705 428 13.9705H83.0332Z"
fill="#0295AA"
id="path2" />
<path
d="M75 21.5469C75 17.3789 78.3889 14 82.5694 14H256V497H82.5694C78.3889 497 75 493.621 75 489.453V21.5469Z"
fill="#365558"
id="path4" />
<rect
x="186"
y="95"
width="225"
height="20"
fill="#CDD4D5"
id="rect6" />
<rect
x="186"
y="159"
width="225"
height="21"
fill="#CDD4D5"
id="rect8" />
<rect
x="186"
y="223"
width="225"
height="21"
fill="#CDD4D5"
id="rect10" />
<rect
x="186"
y="288"
width="225"
height="20"
fill="#CDD4D5"
id="rect12" />
<rect
x="186"
y="352"
width="225"
height="21"
fill="#CDD4D5"
id="rect14" />
<rect
x="186"
y="416"
width="180"
height="21"
fill="#CDD4D5"
id="rect16" />
<path
d="M331 396V497L334.987 495.662L434.671 395.35L436 390H337C333.686 390 331 392.686 331 396Z"
fill="#4ACFD9"
id="path18" />
<path
d="M108 103.313L127.28 118L173 72"
stroke="#BCD643"
stroke-width="16"
id="path20" />
<path
d="M108 167.313L127.28 182L173 136"
stroke="#BCD643"
stroke-width="16"
id="path22" />
<path
d="M108 231.313L127.28 246L173 200"
stroke="#BCD643"
stroke-width="16"
id="path24" />
<path
d="M108 296.313L127.28 311L173 265"
stroke="#BCD643"
stroke-width="16"
id="path26" />
<path
d="M108 360.313L127.28 375L173 329"
stroke="#BCD643"
stroke-width="16"
id="path28" />
<path
d="M108 424.313L127.28 439L173 393"
stroke="#BCD643"
stroke-width="16"
id="path30" />
<rect
x="-520.12756"
y="0.42218161"
class="st1"
width="128"
height="128"
id="rect14-3"
style="fill:#f0353d" />
<rect
x="-392.12759"
y="0.42218161"
class="st2"
width="128"
height="128"
id="rect16-8"
style="fill:#fd6a33" />
<rect
x="-264.12759"
y="0.42218161"
class="st3"
width="128"
height="128"
id="rect18"
style="fill:#ff8c29" />
<rect
x="-136.12758"
y="0.42218161"
class="st4"
width="128"
height="128"
id="rect20"
style="fill:#ffd1a9" />
<rect
x="-520.12756"
y="128.42218"
class="st5"
width="128"
height="128"
id="rect22"
style="fill:#365558" />
<rect
x="-392.12759"
y="128.42218"
class="st6"
width="128"
height="128"
id="rect24"
style="fill:#0295aa" />
<rect
x="-264.12759"
y="128.42218"
class="st7"
width="128"
height="128"
id="rect26"
style="fill:#4acfd9" />
<rect
x="-520.12756"
y="256.42218"
class="st8"
width="128"
height="128"
id="rect28"
style="fill:#9baaab" />
<rect
x="-392.12759"
y="256.42218"
class="st9"
width="128"
height="128"
id="rect30"
style="fill:#cdd4d5" />
<rect
x="-264.12759"
y="256.42218"
class="st10"
width="128"
height="128"
id="rect32"
style="fill:#e6eaea" />
<rect
x="-136.12758"
y="256.42218"
class="st11"
width="128"
height="128"
id="rect34"
style="fill:#ffffff" />
<rect
x="-520.12756"
y="384.42218"
class="st12"
width="128"
height="128"
id="rect36"
style="fill:#bcd643" />
<g
id="g1027-55"
transform="matrix(0,1.4446065,-1.4446065,0,1175.199,-1668.2868)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027"
transform="matrix(0,1.4446065,-1.4446065,0,1413.4374,-1626.4793)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72"
style="fill:#365558" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

@@ -0,0 +1,416 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg34"
sodipodi:docname="plugin-pools.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
inkscape:export-filename="E:\Superalgos\Projects\Community-Plugins\Icons\plugin-pools.png"
inkscape:export-xdpi="100"
inkscape:export-ydpi="100">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs38" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview36"
showgrid="false"
inkscape:zoom="1.6953125"
inkscape:cx="373.76832"
inkscape:cy="425.14139"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g1296"
inkscape:document-rotation="0" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M248 136.049C181.411 137.902 128 192.464 128 259.5C128 326.537 181.411 381.099 248 382.952V136.049Z"
fill="#0295AA"
id="path10" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M248 136.049C314.589 137.902 368 192.464 368 259.5C368 326.537 314.589 381.099 248 382.952V136.049Z"
fill="#4ACFD9"
id="path12" />
<circle
cx="250.5"
cy="259.5"
r="109.5"
stroke="#E6EAEA"
stroke-width="28"
id="circle22" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M217.979 365.319L199.04 349L154 401.272L172.939 417.591L217.979 365.319ZM381.979 147.319L363.04 131L318 183.272L336.939 199.591L381.979 147.319ZM341.968 310.693L324.146 328.225L364.975 369.73L382.797 352.198L341.968 310.693ZM97.1953 184.729L113.675 165.93L157.456 204.308L140.976 223.107L97.1953 184.729Z"
fill="#E6EAEA"
id="path32" />
<g
id="g1296"
transform="rotate(45,-118.91803,582.50429)">
<g
id="g1027-55"
transform="rotate(45,1342.5065,-1213.1529)"
style="fill:#365558;fill-opacity:1"
inkscape:export-filename="E:\Superalgos\Projects\Community-Plugins\Icons\g1027-55.png"
inkscape:export-xdpi="100"
inkscape:export-ydpi="100">
<path
id="circle58-7"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027"
transform="rotate(45,1527.1072,-1095.7609)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72"
style="fill:#365558" />
</g>
</g>
<g
id="g1296-7"
transform="rotate(-45,290.29339,-238.26136)">
<g
id="g1027-55-3"
transform="rotate(45,1342.5065,-1213.1529)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7-3"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027-3"
transform="rotate(45,1527.1072,-1095.7609)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58-6"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60-6"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62-2"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64-5"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66-2"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68-5"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70-4"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72-3"
style="fill:#365558" />
</g>
</g>
<g
id="g1296-7-4"
transform="rotate(-135,135.15061,134.65071)">
<g
id="g1027-55-3-7"
transform="rotate(45,1342.5065,-1213.1529)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7-3-4"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027-3-0"
transform="rotate(45,1527.1072,-1095.7609)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58-6-6"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60-6-1"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62-2-1"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64-5-5"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66-2-6"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68-5-4"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70-4-4"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72-3-1"
style="fill:#365558" />
</g>
</g>
<g
id="g1296-7-4-0"
transform="rotate(135,78.950537,254.04452)">
<g
id="g1027-55-3-7-3"
transform="rotate(45,1342.5065,-1213.1529)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7-3-4-7"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027-3-0-1"
transform="rotate(45,1527.1072,-1095.7609)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58-6-6-3"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60-6-1-9"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62-2-1-2"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64-5-5-9"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66-2-6-5"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68-5-4-6"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70-4-4-7"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72-3-1-5"
style="fill:#365558" />
</g>
</g>
<rect
x="-521.27258"
y="0.096461862"
class="st1"
width="128"
height="128"
id="rect14"
style="fill:#f0353d" />
<rect
x="-393.27258"
y="0.096461862"
class="st2"
width="128"
height="128"
id="rect16"
style="fill:#fd6a33" />
<rect
x="-265.27255"
y="0.096461862"
class="st3"
width="128"
height="128"
id="rect18"
style="fill:#ff8c29" />
<rect
x="-137.27257"
y="0.096461862"
class="st4"
width="128"
height="128"
id="rect20"
style="fill:#ffd1a9" />
<rect
x="-521.27258"
y="128.09647"
class="st5"
width="128"
height="128"
id="rect22"
style="fill:#365558" />
<rect
x="-393.27258"
y="128.09647"
class="st6"
width="128"
height="128"
id="rect24"
style="fill:#0295aa" />
<rect
x="-265.27255"
y="128.09647"
class="st7"
width="128"
height="128"
id="rect26"
style="fill:#4acfd9" />
<rect
x="-521.27258"
y="256.0965"
class="st8"
width="128"
height="128"
id="rect28"
style="fill:#9baaab" />
<rect
x="-393.27258"
y="256.0965"
class="st9"
width="128"
height="128"
id="rect30"
style="fill:#cdd4d5" />
<rect
x="-265.27255"
y="256.0965"
class="st10"
width="128"
height="128"
id="rect32"
style="fill:#e6eaea" />
<rect
x="-137.27257"
y="256.0965"
class="st11"
width="128"
height="128"
id="rect34"
style="fill:#ffffff" />
<rect
x="-521.27258"
y="384.0965"
class="st12"
width="128"
height="128"
id="rect36"
style="fill:#bcd643" />
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

@@ -0,0 +1,335 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg50"
sodipodi:docname="plugin-positions.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
inkscape:export-filename="E:\Superalgos\Projects\Community-Plugins\Icons\plugins\plugin-positions.png"
inkscape:export-xdpi="100"
inkscape:export-ydpi="100">
<g
id="g1080">
<g
id="g1027-55-3"
transform="matrix(-0.60161027,0.60161027,-0.60161027,-0.60161027,1439.1625,-128.03235)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7-5"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027-5"
transform="matrix(-0.60161027,0.60161027,-0.60161027,-0.60161027,1520.9666,-11.406506)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58-2"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60-4"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62-0"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64-3"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66-8"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68-1"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70-2"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72-5"
style="fill:#365558" />
</g>
</g>
<metadata
id="metadata56">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs54" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview52"
showgrid="false"
inkscape:zoom="0.59938348"
inkscape:cx="-314.67389"
inkscape:cy="505.80392"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg50" />
<path
d="M331 235.04L330.998 235.471L331 256.154H181L181.002 235.471L181 235.04V231.162H181.076C182.868 186.08 215.726 150.154 256 150.154C296.274 150.154 329.132 186.08 330.924 231.162H331V235.04Z"
fill="#4ACFD9"
id="path8" />
<path
d="M474 319.272L473.999 319.634L474 337H348L348.001 319.634L348 319.272V316.016H348.064C349.569 278.164 377.17 248 411 248C444.83 248 472.431 278.164 473.936 316.016H474V319.272Z"
fill="#4ACFD9"
id="path10" />
<path
d="M150 386.858L149.999 387.146L150 401H50L50.0011 387.146L50 386.858V384.26H50.0508C51.2453 354.064 73.1507 330 100 330C126.849 330 148.755 354.064 149.949 384.26H150V386.858Z"
fill="#4ACFD9"
id="path12" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M253.765 149.764C214.522 151.032 182.834 186.656 181.076 231.156H181V235.054L181.002 235.488L181 256.278H253.765V149.764Z"
fill="#0295AA"
id="path14" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M409.123 247.424C376.159 248.489 349.541 278.413 348.064 315.794H348V319.068L348.001 319.432L348 336.896H409.123V247.424Z"
fill="#0295AA"
id="path16" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M98.5104 329.85C72.3483 330.695 51.2226 354.445 50.0508 384.111H50V386.71L50.0011 386.999L50 400.859H98.5104V329.85Z"
fill="#0295AA"
id="path18" />
<ellipse
cx="256"
cy="117.154"
rx="52"
ry="53"
fill="#FFD1A9"
id="ellipse20" />
<ellipse
cx="411"
cy="220.5"
rx="44"
ry="44.5"
fill="#FFD1A9"
id="ellipse22" />
<ellipse
cx="100"
cy="308.5"
rx="35"
ry="35.5"
fill="#FFD1A9"
id="ellipse24" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M210.042 141.745C228.775 136.513 254.094 119.319 260.262 100.815C275.29 118.269 287.085 126.474 305.748 132.726C307.429 127.59 308.338 122.105 308.338 116.408C308.338 87.4639 284.874 64 255.93 64C226.985 64 203.521 87.4639 203.521 116.408C203.521 125.598 205.887 134.235 210.042 141.745Z"
fill="#365558"
id="path26" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M372.395 240.688C388.131 236.293 409.4 221.85 414.58 206.306C427.204 220.968 437.111 227.86 452.788 233.111C454.2 228.798 454.964 224.191 454.964 219.406C454.964 195.093 435.254 175.383 410.941 175.383C386.628 175.383 366.918 195.093 366.918 219.406C366.918 227.125 368.905 234.38 372.395 240.688Z"
fill="#365558"
id="path28" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M69.36 324.503C81.8492 321.015 98.7286 309.552 102.84 297.216C112.859 308.853 120.722 314.323 133.165 318.49C134.285 315.067 134.891 311.41 134.891 307.613C134.891 288.316 119.249 272.674 99.9525 272.674C80.6563 272.674 65.0137 288.316 65.0137 307.613C65.0137 313.739 66.5903 319.497 69.36 324.503Z"
fill="#365558"
id="path30" />
<path
d="M245.875 185.154H262.125L267 170.154H241L245.875 185.154Z"
fill="#FD6A33"
id="path32" />
<path
d="M402.125 277H415.875L420 265H398L402.125 277Z"
fill="#FD6A33"
id="path34" />
<path
d="M93.1875 353H103.812L107 344H90L93.1875 353Z"
fill="#FD6A33"
id="path36" />
<path
d="M247.684 185.154H260.316L262 239.756L254 246.154L246 239.756L247.684 185.154Z"
fill="#FD6A33"
id="path38" />
<path
d="M404.368 277H414.632L416 322.65L409.5 328L403 322.65L404.368 277Z"
fill="#FD6A33"
id="path40" />
<path
d="M95.0526 353H102.947L104 389.699L99 394L94 389.699L95.0526 353Z"
fill="#FD6A33"
id="path42" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M253.766 246.004L254.199 246.346L262.428 239.849L260.696 184.409H262.428L267.626 168.816H253.766V246.004Z"
fill="#FF8C29"
id="path44" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M409.123 328.265L409.488 328.552L416.4 323.095L414.945 276.525H416.4L420.766 263.428H409.123V328.265Z"
fill="#FF8C29"
id="path46" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M98.5117 394.01L98.7997 394.237L104.286 389.906L103.131 352.946H104.286L107.751 342.551H98.5117V394.01Z"
fill="#FF8C29"
id="path48" />
<g
id="g1080-7"
transform="translate(153.08206,93.243036)">
<g
id="g1027-55-3-3"
transform="matrix(-0.60161027,0.60161027,-0.60161027,-0.60161027,1439.1625,-128.03235)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7-5-2"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 l 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 v 10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 0.1264,0.13222 0.2544,0.26298 0.3839,0.39223 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 0.1322,-0.12646 0.263,-0.25444 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 28.8149,-28.81491 15.8565,-15.85653 -123.1378,-123.13781 -16.204,16.20231 z"
sodipodi:nodetypes="csccssssssccsscsscccccccsccccc" />
</g>
<g
id="g1027-5-7"
transform="matrix(-0.60161027,0.60161027,-0.60161027,-0.60161027,1520.9666,-11.406506)">
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60-4-9"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62-0-0"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64-3-5"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1354.7502,659.67651 -36.6178,36.61779 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 50.8986,-50.89858 c -44.8808,-44.71921 -0.2541,0.25411 -44.8808,-44.71921 z"
id="path66-8-0"
style="fill:#4acfd9"
sodipodi:nodetypes="cssccc" />
<path
class="st4"
d="m 1399.5502,704.47651 -50.9178,50.91779 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 36.6178,-36.61779 c -44.8192,-44.98079 0,0 -44.9,-44.9 z"
id="path68-1-4"
style="fill:#0295aa"
sodipodi:nodetypes="cccscc" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70-2-1"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72-5-7"
style="fill:#365558" />
</g>
</g>
<g
id="g1080-7-8"
transform="translate(-155.83361,151.82887)">
<g
id="g1027-55-3-3-6"
transform="matrix(-0.60161027,0.60161027,-0.60161027,-0.60161027,1439.1625,-128.03235)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7-5-2-5"
style="fill:#365558;fill-opacity:1"
d="m 1326.7507,518.58054 c -1.3982,1.71447 -1.7926,2.65721 -2.906,4.54395 v 0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 v 10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 0.1264,0.13222 0.2544,0.26298 0.3839,0.39223 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 0.1322,-0.12646 0.263,-0.25444 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 8.326,3.39258 21.839,-0.0801 30.5813,-1.91937 3.3784,-0.71076 6.6845,-1.81772 9.8385,-3.32517 z"
sodipodi:nodetypes="cccssssssccsscsscccccccscc" />
</g>
<g
id="g1027-5-7-1"
transform="matrix(-0.60161027,0.60161027,-0.60161027,-0.60161027,1520.9666,-11.406506)">
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60-4-9-4"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62-0-0-2"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64-3-5-3"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1310.2179,712.52595 c 0,5.14847 4.0062,8.26006 7.9145,12.16835 l 30.6,30.6 2.1269,-2.12694 c -40.6414,-40.64141 0,0 -40.6414,-40.64141 z"
id="path66-8-0-9"
style="fill:#4acfd9"
sodipodi:nodetypes="csccc" />
<path
class="st4"
d="m 1350.8593,753.16736 -2.2269,2.22694 30.6,30.6 c 3.454,3.36763 6.7845,6.29946 11.2262,6.7723 -39.5993,-39.59924 0,0 -39.5993,-39.59924 z"
id="path68-1-4-2"
style="fill:#0295aa"
sodipodi:nodetypes="ccccc" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 14.7269,-14.72694 c -26.949,-26.94909 0,0 -26.949,-26.94909 -0.9277,0.44591 -1.7921,1.03053 -2.5779,1.77603 z"
id="path70-2-1-8"
style="fill:#0295aa"
sodipodi:nodetypes="csccccc" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72-5-7-6"
style="fill:#365558" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,246 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg12"
sodipodi:docname="plugin-user-profiles.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
inkscape:export-filename="E:\Superalgos\Projects\Community-Plugins\Icons\plugin-user-profiles.png"
inkscape:export-xdpi="100"
inkscape:export-ydpi="100">
<metadata
id="metadata18">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs16" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview14"
showgrid="false"
inkscape:zoom="0.84765625"
inkscape:cx="318.72475"
inkscape:cy="236.36394"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g1296"
inkscape:document-rotation="0" />
<circle
cx="256"
cy="256"
r="237"
fill="#FD6A33"
id="circle2" />
<path
d="M391 374.955L390.997 375.732L391 413H121L121.003 375.732L121 374.955V367.967H121.137C124.362 286.734 183.507 222 256 222C328.493 222 387.638 286.734 390.863 367.967H391V374.955Z"
fill="#4ACFD9"
id="path4" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M252.136 221.172C181.498 223.454 124.457 287.579 121.293 367.68H121.156V374.697L121.159 375.477L121.156 412.899H252.136V221.172Z"
fill="#0295AA"
id="path6" />
<ellipse
cx="256"
cy="162.5"
rx="93"
ry="95.5"
fill="#FFD1A9"
id="ellipse8" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M173.433 206.736C207.154 197.318 252.729 166.369 263.83 133.061C290.881 164.48 312.112 179.249 345.707 190.502C348.733 181.258 350.369 171.385 350.369 161.131C350.369 109.031 308.133 66.7949 256.033 66.7949C203.933 66.7949 161.697 109.031 161.697 161.131C161.697 177.672 165.955 193.219 173.433 206.736Z"
fill="#365558"
id="path10" />
<rect
x="-552.9718"
y="-2.4061174"
class="st1"
width="128"
height="128"
id="rect14"
style="fill:#f0353d" />
<rect
x="-424.9718"
y="-2.4061174"
class="st2"
width="128"
height="128"
id="rect16"
style="fill:#fd6a33" />
<rect
x="-296.97183"
y="-2.4061174"
class="st3"
width="128"
height="128"
id="rect18"
style="fill:#ff8c29" />
<rect
x="-168.97182"
y="-2.4061174"
class="st4"
width="128"
height="128"
id="rect20"
style="fill:#ffd1a9" />
<rect
x="-552.9718"
y="125.59388"
class="st5"
width="128"
height="128"
id="rect22"
style="fill:#365558" />
<rect
x="-424.9718"
y="125.59388"
class="st6"
width="128"
height="128"
id="rect24"
style="fill:#0295aa" />
<rect
x="-296.97183"
y="125.59388"
class="st7"
width="128"
height="128"
id="rect26"
style="fill:#4acfd9" />
<rect
x="-552.9718"
y="253.59389"
class="st8"
width="128"
height="128"
id="rect28"
style="fill:#9baaab" />
<rect
x="-424.9718"
y="253.59389"
class="st9"
width="128"
height="128"
id="rect30"
style="fill:#cdd4d5" />
<rect
x="-296.97183"
y="253.59389"
class="st10"
width="128"
height="128"
id="rect32"
style="fill:#e6eaea" />
<rect
x="-168.97182"
y="253.59389"
class="st11"
width="128"
height="128"
id="rect34"
style="fill:#ffffff" />
<rect
x="-552.9718"
y="381.59387"
class="st12"
width="128"
height="128"
id="rect36"
style="fill:#bcd643" />
<g
id="g1027-5"
transform="rotate(45,1459.6238,-250.95129)" />
<g
id="g1027-2"
transform="rotate(45,1236.3627,-21.540309)" />
<g
id="g1296"
transform="translate(225.32719,265.43779)">
<g
id="g1027-55"
transform="matrix(0.89392232,0.89392232,-0.89392232,0.89392232,-615.73464,-1669.3517)"
style="fill:#365558;fill-opacity:1">
<path
id="circle58-7"
style="fill:#365558;fill-opacity:1"
d="m 1330.6078,514.40305 c -1.0764,1.07643 -2.0733,2.18605 -2.9914,3.3118 -1.3982,1.71447 -2.6583,3.5229 -3.7717,5.40964 a 23.648492,23.648492 0 0 0 0,0.003 c -0.361,0.61183 -0.7146,1.2446 -1.0565,1.8962 -1.3415,2.55691 -2.4152,5.22036 -3.2151,7.93838 -0.3984,1.35342 -0.73,2.72435 -0.9958,4.11144 -0.2643,1.37961 -0.4619,2.76429 -0.5925,4.16116 a 23.648492,23.648492 0 0 0 0,10e-4 c -0.5208,5.57632 0.03,11.20019 1.6393,16.59354 0.425,1.42424 1.072,2.79 1.6463,4.17634 -1.8589,4.32266 -2.7836,8.93989 -2.7387,13.57175 l -16.6225,16.62254 c -11.2091,11.20909 -11.2091,28.53252 0,39.74161 l 1.1242,1.12419 c -0.3644,7.56395 2.3288,15.22804 8.2767,21.17591 l 1.5993,1.59928 c 6.0511,6.05109 13.8772,8.72023 21.5681,8.23807 0.6425,0.82797 1.2088,1.6956 1.9487,2.47073 a 23.648492,23.648492 0 0 0 0.3839,0.39223 c 11.6538,11.65372 29.4298,11.37928 40.9487,0.38393 a 23.648492,23.648492 0 0 0 0.3922,-0.38393 l 17.523,-17.52299 c 3.4931,-0.30163 6.9254,-1.20699 10.1937,-2.60885 15.8893,6.47437 35.0578,3.55688 47.883,-9.26834 l 39.7996,-39.79961 c 16.9306,-16.93061 16.8035,-45.03795 0,-61.84147 l -2.2815,-2.28152 c 1.2971,-4.36536 2.2067,-8.84004 2.2069,-13.39636 5e-4,-25.05276 -22.7943,-47.84755 -47.8471,-47.8471 a 23.648492,23.648492 0 0 0 0,-0.001 c -4.5026,4.1e-4 -8.9262,0.88989 -13.2445,2.15723 l -0.032,-0.0318 a 23.648492,23.648492 0 0 0 -3.0632,-2.58259 c -0.1112,-0.0929 -0.2134,-0.1987 -0.3245,-0.2914 -0.2843,-0.23201 -0.5342,-0.41252 -0.8038,-0.62149 a 23.648492,23.648492 0 0 0 -0.9626,-0.74716 23.648492,23.648492 0 0 0 0,-10e-4 c -0.6061,-0.44565 -1.2123,-0.86572 -1.8092,-1.25954 v -0.003 c -1.2301,-0.81157 -2.4836,-1.54817 -3.7524,-2.21386 -5.1186,-2.68569 -10.6402,-4.28253 -16.2137,-4.80335 -1.4,-0.13079 -2.7972,-0.19395 -4.1819,-0.19059 -2.7935,0.007 -5.5793,0.28103 -8.3237,0.81898 -1.3653,0.26773 -2.7319,0.6035 -4.0838,1.0068 v -10e-4 c -4.0481,1.2076 -7.9667,3.01514 -11.5982,5.41655 -1.8143,1.19998 -3.5553,2.54797 -5.1984,4.03271 -0.5639,0.50983 -1.1017,1.02167 -1.6103,1.53022 z" />
</g>
<g
id="g1027"
transform="matrix(0.89392232,0.89392232,-0.89392232,0.89392232,-442.44234,-1790.9031)">
<circle
class="st12"
cx="1416.4324"
cy="685.39429"
r="24.200001"
id="circle58"
style="fill:#9baaab" />
<path
class="st7"
d="m 1329.2324,740.5943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path60"
style="fill:#fd6a33" />
<path
class="st10"
d="m 1338.6324,762.8943 c -1.7,-1.7 -4.6,-1.7 -6.3,0 l -33.5,33.5 c -1.7,1.7 -1.7,4.6 0,6.3 l 1.6,1.6 c 1.7,1.7 4.6,1.7 6.3,0 l 33.5,-33.5 c 1.8,-1.8 1.8,-4.5 0,-6.3 z"
id="path62"
style="fill:#ff8c29" />
<path
class="st7"
d="m 1356.2324,775.5943 -31.9,31.9 c -2.1,2.1 -2.1,5.7 0,7.9 2.1,2.1 5.7,2.1 7.9,0 l 31.9,-31.9 c 2.1,-2.1 2.1,-5.7 0,-7.9 -2.3,-2.3 -5.6,-2.3 -7.9,0 z"
id="path64"
style="fill:#fd6a33" />
<path
class="st6"
d="m 1386.3324,656.4943 c -7.9,-7.9 -20.6,-7.8 -28.4,0 l -39.8,39.8 c -7.9,7.9 -7.8,20.6 0,28.4 l 30.6,30.6 68.3,-68.3 -30.6,-30.6 z"
id="path66"
style="fill:#4acfd9" />
<path
class="st4"
d="m 1416.9324,687.0943 -68.3,68.3 30.6,30.6 c 8,7.8 20.7,7.9 28.6,0 l 39.8,-39.8 c 7.9,-7.9 7.8,-20.6 0,-28.4 z"
id="path68"
style="fill:#0295aa" />
<path
class="st4"
d="m 1321.3324,727.9943 -5.7,5.7 c -3.7,3.7 -3.7,9.8 0,13.7 l 20.5,20.5 19.4,-19.4 -20.4,-20.6 c -3.8,-3.6 -9.9,-3.6 -13.8,0.1 z"
id="path70"
style="fill:#0295aa" />
<path
class="st5"
d="m 1355.6324,748.3943 -19.3,19.4 20.5,20.5 c 3.7,3.7 9.8,3.7 13.5,0 l 5.7,-5.7 c 3.7,-3.7 3.7,-9.8 0,-13.7 z"
id="path72"
style="fill:#365558" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -26,6 +26,7 @@
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginAssets",
"alternativeIcons": "Use Reference Parent Parent",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
@@ -26,6 +26,7 @@
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginFeatures",
"alternativeIcons": "Use Reference Parent Parent",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
@@ -26,6 +26,7 @@
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginPools",
"alternativeIcons": "Use Reference Parent Parent",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
@@ -26,6 +26,7 @@
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginPositions",
"alternativeIcons": "Use Reference Parent Parent",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
@@ -26,6 +26,7 @@
"addLeftIcons": true,
"level": 1,
"propertyNameAtParent": "pluginUserProfiles",
"alternativeIcons": "Use Reference Parent Parent",
"attachingRules": {
"compatibleTypes": "->Plugin Project->"
},
@@ -1 +1 @@
{"type":"Data Mine","name":"Alpha","config":"{ \n\"codeName\": \"Alpha\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Average True Range (ATR)","config":"{\n\"codeName\": \"ATR\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates RSI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n }","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market ATR - SMA","project":"Foundations","id":"5cdfa018-5ade-469b-90bf-cc523ef0a46e","savedPayload":{"position":{"x":14824.467185363952,"y":17153.56240800229},"targetPosition":{"x":15051.32778510527,"y":17433.553422503435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2570d2c7-72e3-4131-97dc-a9f97f493e93"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market ATR - RMA","project":"Foundations","id":"e7e58e02-fef8-4400-9928-f29805a96f98","savedPayload":{"position":{"x":14995.21249473741,"y":17077.69824065427},"targetPosition":{"x":15051.32778510527,"y":17433.553422503435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"67695466-be2d-43b4-9824-83baa7a08412"}}}],"outputDatasetFolders":[],"id":"b345304f-fbb3-4889-934a-8f9b4941ed29","savedPayload":{"position":{"x":15027.5645769923,"y":17379.910551027475},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Foundations","id":"eb499527-0f18-45f9-99ab-a7bc7fabb3aa","savedPayload":{"position":{"x":15005.836154077664,"y":17146.468954298347},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Average True Range (ATR) Multi-Time-Frame-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Foundations","id":"025a6f70-c187-4b4d-aa62-6f4ebfc116ba","savedPayload":{"position":{"x":15251.795115631983,"y":17073.59332967888},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8a6c8b1e-950d-4819-88a9-9c45272a0799"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"f25ba171-3c78-4e4f-acb8-66446be1ce0a","savedPayload":{"position":{"x":15480.231901478768,"y":17193.677641293492},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"bf337039-bd28-4f50-89d1-5115e631e6cf","savedPayload":{"position":{"x":15223.760246305472,"y":17340.44129825625},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"8a6c8b1e-950d-4819-88a9-9c45272a0799","savedPayload":{"position":{"x":15405.437118264057,"y":17422.346390022496},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEventLine truncated
{"type":"Data Mine","name":"Alpha","config":"{ \n\"codeName\": \"Alpha\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Average True Range (ATR)","config":"{\n\"codeName\": \"ATR\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates RSI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n }","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market ATR - SMA","project":"Foundations","id":"5cdfa018-5ade-469b-90bf-cc523ef0a46e","savedPayload":{"position":{"x":14824.467185363952,"y":17153.56240800229},"targetPosition":{"x":15051.32778510527,"y":17433.553422503435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2570d2c7-72e3-4131-97dc-a9f97f493e93"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market ATR - RMA","project":"Foundations","id":"e7e58e02-fef8-4400-9928-f29805a96f98","savedPayload":{"position":{"x":14995.21249473741,"y":17077.69824065427},"targetPosition":{"x":15051.32778510527,"y":17433.553422503435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"67695466-be2d-43b4-9824-83baa7a08412"}}}],"outputDatasetFolders":[],"id":"b345304f-fbb3-4889-934a-8f9b4941ed29","savedPayload":{"position":{"x":15027.5645769923,"y":17379.910551027475},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Foundations","id":"eb499527-0f18-45f9-99ab-a7bc7fabb3aa","savedPayload":{"position":{"x":15005.836154077664,"y":17146.468954298347},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Average True Range (ATR) Multi-Time-Frame-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Foundations","id":"025a6f70-c187-4b4d-aa62-6f4ebfc116ba","savedPayload":{"position":{"x":15251.795115631983,"y":17073.59332967888},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8a6c8b1e-950d-4819-88a9-9c45272a0799"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"f25ba171-3c78-4e4f-acb8-66446be1ce0a","savedPayload":{"position":{"x":15480.231901478768,"y":17193.677641293492},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"bf337039-bd28-4f50-89d1-5115e631e6cf","savedPayload":{"position":{"x":15223.760246305472,"y":17340.44129825625},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"8a6c8b1e-950d-4819-88a9-9c45272a0799","savedPayload":{"position":{"x":15405.437118264057,"y":17422.346390022496},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEventLine truncated
@@ -7963,7 +7963,7 @@
"project": "Foundations",
"plotterModuleJavascriptCode": {
"type": "Plotter Module Javascript Code",
"code": "/* Definition of the points we are going to use while drawing */\nlet point1\nlet point2\nlet point3\nlet point4\n\npoint1 = {\n x: record.begin,\n y: record.firstMovingAverage - record.firstDeviation\n}\n\npoint2 = {\n x: record.end,\n y: record.lastMovingAverage - record.lastDeviation\n}\n\npoint3 = {\n x: record.end,\n y: record.lastMovingAverage + record.lastDeviation\n}\n\npoint4 = {\n x: record.begin,\n y: record.firstMovingAverage + record.firstDeviation\n}\n\n/* Contributing to Auto-Scale*/\ncoordinateSystem.reportYValue(record.firstMovingAverage - record.firstDeviation)\ncoordinateSystem.reportYValue(record.lastMovingAverage - record.lastDeviation)\ncoordinateSystem.reportYValue(record.lastMovingAverage + record.lastDeviation)\ncoordinateSystem.reportYValue(record.firstMovingAverage + record.firstDeviation)\n\n/*\nThe information we store in files is independent from the charing system and its coordinate systems.\nThat means that the first thing we allways need to do is to trasform these points to the coordinate system of the timeline.\n*/\npoint1 = coordinateSystem.transformThisPoint(point1)\npoint2 = coordinateSystem.transformThisPoint(point2)\npoint3 = coordinateSystem.transformThisPoint(point3)\npoint4 = coordinateSystem.transformThisPoint(point4)\n\n/*\nThe browser canvas object does not care about our timeline and its coordinate system. In order to draw on a html canvas we\nneed the points to be converted into the canvas coordinate system.\nNext we transform again to the screen coordinate system.\n*/\npoint1 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container)\npoint2 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point2, thisObject.container)\npoint3 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container)\npoint4 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point4, thisObject.container)\n\n/* We make sure the points do not fall outside the UI.projects.foundations.spaces.chartingSpace.viewport visible area. This step allways need to be done. */\npoint1 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point1)\npoint2 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point2)\npoint3 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point3)\npoint4 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point4)\n\npoint1 = thisObject.fitFunction(point1);\npoint2 = thisObject.fitFunction(point2);\npoint3 = thisObject.fitFunction(point3);\npoint4 = thisObject.fitFunction(point4);\n\n/*\nNow that we have our 4 points as coordinates of the actual screen (or html canvas object), we can actaully start drawing.\nFirst we are going to draw the shape backgound.\n*/\nbrowserCanvasContext.beginPath()\n\nbrowserCanvasContext.moveTo(point1.x, point1.y)\nbrowserCanvasContext.lineTo(point2.x, point2.y)\nbrowserCanvasContext.lineTo(point3.x, point3.y)\nbrowserCanvasContext.lineTo(point4.x, point4.y)\n\nbrowserCanvasContext.closePath()\n\nlet opacity = '0.25' // The backgound will be quite transparent. Possible values goes from 0..1\n\n/* Depending on the direction of the channel, we use a different color for the border lines. */\nif (record.direction === 'Side') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', ' + opacity + ')' }\nif (record.direction === 'Up') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')' }\nif (record.direction === 'Down') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')' }\n\nswitch (record.slope) {\n case 'Side': {\n opacity = '0.1';\n break;\n }\n case 'Gentle': {\n opacity = '0.1';\n break;\n }\n case 'Medium': {\n opacity = '0.15';\n break;\n }\n case 'Steep': {\n opacity = '0.2';\n break;\n }\n case 'Extreme': {\n opacity = '0.25';\n break;\n }\n}\n\n/* Depending on the direction of the channel, we use a different color for the background. */\nif (record.direction === 'Side' || record.slope === 'Side') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT + ', ' + opacity + ')'; }\nif (record.direction === 'Up') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + opacity + ')' }\nif (record.direction === 'Down') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')' }\n\n/* If the mouse is positioned in betwheen the begining and ending of our object, we can opt for changing the color of that specific object. */\nif (atMousePosition) {\n browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.1)'\n}\n\nbrowserCanvasContext.fill() // This is what actually apply the previous instrucLine truncated
"code": "/* Definition of the points we are going to use while drawing */\nlet point1\nlet point2\nlet point3\nlet point4\n\npoint1 = {\n x: record.begin,\n y: record.firstMovingAverage - record.firstDeviation\n}\n\npoint2 = {\n x: record.end,\n y: record.lastMovingAverage - record.lastDeviation\n}\n\npoint3 = {\n x: record.end,\n y: record.lastMovingAverage + record.lastDeviation\n}\n\npoint4 = {\n x: record.begin,\n y: record.firstMovingAverage + record.firstDeviation\n}\n\n/* Contributing to Auto-Scale*/\ncoordinateSystem.reportYValue(record.firstMovingAverage - record.firstDeviation)\ncoordinateSystem.reportYValue(record.lastMovingAverage - record.lastDeviation)\ncoordinateSystem.reportYValue(record.lastMovingAverage + record.lastDeviation)\ncoordinateSystem.reportYValue(record.firstMovingAverage + record.firstDeviation)\n\n/*\nThe information we store in files is independent from the sharing system and its coordinate systems.\nThat means that the first thing we always need to do is to trasform these points to the coordinate system of the timeline.\n*/\npoint1 = coordinateSystem.transformThisPoint(point1)\npoint2 = coordinateSystem.transformThisPoint(point2)\npoint3 = coordinateSystem.transformThisPoint(point3)\npoint4 = coordinateSystem.transformThisPoint(point4)\n\n/*\nThe browser canvas object does not care about our timeline and its coordinate system. In order to draw on a html canvas we\nneed the points to be converted into the canvas coordinate system.\nNext we transform again to the screen coordinate system.\n*/\npoint1 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container)\npoint2 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point2, thisObject.container)\npoint3 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container)\npoint4 = UI.projects.foundations.utilities.coordinateTransformations.transformThisPoint(point4, thisObject.container)\n\n/* We make sure the points do not fall outside the UI.projects.foundations.spaces.chartingSpace.viewport visible area. This step allways need to be done. */\npoint1 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point1)\npoint2 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point2)\npoint3 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point3)\npoint4 = UI.projects.foundations.spaces.chartingSpace.viewport.fitIntoVisibleArea(point4)\n\npoint1 = thisObject.fitFunction(point1);\npoint2 = thisObject.fitFunction(point2);\npoint3 = thisObject.fitFunction(point3);\npoint4 = thisObject.fitFunction(point4);\n\n/*\nNow that we have our 4 points as coordinates of the actual screen (or html canvas object), we can actually start drawing.\nFirst we are going to draw the shape background.\n*/\nbrowserCanvasContext.beginPath()\n\nbrowserCanvasContext.moveTo(point1.x, point1.y)\nbrowserCanvasContext.lineTo(point2.x, point2.y)\nbrowserCanvasContext.lineTo(point3.x, point3.y)\nbrowserCanvasContext.lineTo(point4.x, point4.y)\n\nbrowserCanvasContext.closePath()\n\nlet opacity = '0.25' // The backgound will be quite transparent. Possible values goes from 0..1\n\n/* Depending on the direction of the channel, we use a different color for the border lines. */\nif (record.direction === 'Side') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', ' + opacity + ')' }\nif (record.direction === 'Up') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')' }\nif (record.direction === 'Down') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')' }\n\nswitch (record.slope) {\n case 'Side': {\n opacity = '0.1';\n break;\n }\n case 'Gentle': {\n opacity = '0.1';\n break;\n }\n case 'Medium': {\n opacity = '0.15';\n break;\n }\n case 'Steep': {\n opacity = '0.2';\n break;\n }\n case 'Extreme': {\n opacity = '0.25';\n break;\n }\n}\n\n/* Depending on the direction of the channel, we use a different color for the background. */\nif (record.direction === 'Side' || record.slope === 'Side') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT + ', ' + opacity + ')'; }\nif (record.direction === 'Up') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + opacity + ')' }\nif (record.direction === 'Down') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')' }\n\n/* If the mouse is positioned in between the beginning and ending of our object, we can opt for changing the color of that specific object. */\nif (atMousePosition) {\n browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.1)'\n}\n\nbrowserCanvasContext.fill() // This is what actually apply the previous instrucLine truncated
"project": "Foundations",
"id": "63406674-a797-430a-96c7-e5bcacb286bc",
"savedPayload": {
@@ -1 +1 @@
{"type":"Data Mine","name":"Buddha","config":"{ \n\"codeName\": \"Buddha\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Candle Patterns","config":"{\n\"codeName\": \"Candle-Patterns\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates Candles Patterns for Time Frames of 01-hs and above.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n }","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market Basic Candles","project":"Foundations","id":"3e933426-1c7b-45e1-845f-08a7d2684620","savedPayload":{"position":{"x":3129.041401383918,"y":17452.35686716615},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"07be5b9b-e8fd-49fc-ab77-20f89fdea10f"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market One-Candle Patterns","project":"Foundations","id":"201dc796-db42-49ce-8b9c-1b26c0f3a0ce","savedPayload":{"position":{"x":3169.134883158589,"y":17383.139478265486},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"144d8665-1ff0-4db3-9340-a33fd7d0d098"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market Two-Candles Patterns","project":"Foundations","id":"c20616cc-d93f-40fc-904a-025fc2799a75","savedPayload":{"position":{"x":3229.9770922491734,"y":17339.671801899964},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"8c35ce52-9dee-4d20-92e6-50ba7fd2882b"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market Three-Candles Patterns","project":"Foundations","id":"c8074ffc-f5ff-4cb5-8e83-0adcecc82a0c","savedPayload":{"position":{"x":3326.830605382722,"y":17343.877223597563},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"087fc67e-78f9-4204-ba5e-8b670566a716"}}}],"outputDatasetFolders":[],"id":"0dc09316-0987-4d22-b600-bd3868942026","savedPayload":{"position":{"x":3328.835973695903,"y":17542.236357748305},"targetPosition":{"x":3543.032821461693,"y":17856.18635281792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candle Patterns Multi-Time-Frame-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Foundations","id":"2d079388-93e4-4005-b392-c4a997904ccb","savedPayload":{"position":{"x":3351.5917081132684,"y":17243.24971495471},"targetPosition":{"x":3509.228632498114,"y":17403.518467361682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"401fbf30-8faa-40e9-9707-fac2d35f6195"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Foundations","id":"418e1725-b690-4a55-b5f7-a4a92465c162","savedPayload":{"position":{"x":3493.451892335186,"y":17189.127853558104},"targetPosition":{"x":3509.228632498114,"y":17403.518467361682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"85c548fd-9ef7-4936-a86d-2a206cf90039","savedPayload":{"position":{"x":3649.480915739696,"yLine truncated
{"type":"Data Mine","name":"Buddha","config":"{ \n\"codeName\": \"Buddha\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Candle Patterns","config":"{\n\"codeName\": \"Candle-Patterns\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates Candles Patterns for Time Frames of 01-hs and above.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n }","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market Basic Candles","project":"Foundations","id":"3e933426-1c7b-45e1-845f-08a7d2684620","savedPayload":{"position":{"x":3129.041401383918,"y":17452.35686716615},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"07be5b9b-e8fd-49fc-ab77-20f89fdea10f"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market One-Candle Patterns","project":"Foundations","id":"201dc796-db42-49ce-8b9c-1b26c0f3a0ce","savedPayload":{"position":{"x":3169.134883158589,"y":17383.139478265486},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"144d8665-1ff0-4db3-9340-a33fd7d0d098"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market Two-Candles Patterns","project":"Foundations","id":"c20616cc-d93f-40fc-904a-025fc2799a75","savedPayload":{"position":{"x":3229.9770922491734,"y":17339.671801899964},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"8c35ce52-9dee-4d20-92e6-50ba7fd2882b"}}},{"type":"Output Dataset","name":"Multi-Time-Frame-Market Three-Candles Patterns","project":"Foundations","id":"c8074ffc-f5ff-4cb5-8e83-0adcecc82a0c","savedPayload":{"position":{"x":3326.830605382722,"y":17343.877223597563},"targetPosition":{"x":3328.835973695903,"y":17542.236357748305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"087fc67e-78f9-4204-ba5e-8b670566a716"}}}],"outputDatasetFolders":[],"id":"0dc09316-0987-4d22-b600-bd3868942026","savedPayload":{"position":{"x":3328.835973695903,"y":17542.236357748305},"targetPosition":{"x":3543.032821461693,"y":17856.18635281792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candle Patterns Multi-Time-Frame-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Foundations","id":"2d079388-93e4-4005-b392-c4a997904ccb","savedPayload":{"position":{"x":3351.5917081132684,"y":17243.24971495471},"targetPosition":{"x":3509.228632498114,"y":17403.518467361682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"401fbf30-8faa-40e9-9707-fac2d35f6195"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Foundations","id":"418e1725-b690-4a55-b5f7-a4a92465c162","savedPayload":{"position":{"x":3493.451892335186,"y":17189.127853558104},"targetPosition":{"x":3509.228632498114,"y":17403.518467361682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"85c548fd-9ef7-4936-a86d-2a206cf90039","savedPayload":{"position":{"x":3649.480915739696,"yLine truncated
@@ -13,7 +13,7 @@
{
"type": "Process Definition",
"name": "Historic-OHLCVs",
"config": "{\n \"codeName\": \"Historic-OHLCVs\",\n \"description\": \"Retrieves and saves historical maket data\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 60000,\n \"retryWaitTime\": 10000,\n \"botModule\": \"Exchange Raw Data Historic OHLCVs\"\n}",
"config": "{\n \"codeName\": \"Historic-OHLCVs\",\n \"description\": \"Retrieves and saves historical market data\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 60000,\n \"retryWaitTime\": 10000,\n \"botModule\": \"Exchange Raw Data Historic OHLCVs\"\n}",
"project": "Foundations",
"processOutput": {
"type": "Process Output",
@@ -1213,7 +1213,7 @@
"project": "Foundations",
"procedureJavascriptCode": {
"type": "Procedure Javascript Code",
"code": "/* Loop Code */\n\n/* \nCalculation method credit: https://www.macroption.com/rsi-calculation/\n*/\n\n/* Calculating Up Moves and Down Moves */\n\n//let candle = record.current // Our main dependencies are candles \n//let candlePrevious = record.previous\n\nif (record.previous !== undefined) {\n if (record.current.close > record.previous.close) {\n variable.last14U.push(record.current.close - record.previous.close) // Add win to last 14 array.\n } else {\n variable.last14U.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (record.current.close < record.previous.close) {\n variable.last14D.push(record.previous.close - record.current.close) // Add win to last 14 array.\n } else {\n variable.last14D.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n /* Calculating Averages of Up Moves and Down Moves */\n\n variable.avgU = calculateRMAU(14)\n variable.avgD = calculateRMAD(14)\n\n /* Keep track of average moves */\n variable.rma14U.push(variable.avgU)\n variable.rma14D.push(variable.avgD)\n \n if (variable.rma14U.length > 14) {\n variable.rma14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.rma14D.length > 14) {\n variable.rma14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n /* Calculating Relative Strength */\n \n if (variable.avgD > 0) {\n relativeStrength = variable.avgU / variable.avgD\n } else {\n relativeStrength = 0\n }\n\n /* Calculating RSI */\n\n relativeStrengthIndex = 100 - 100 / ( 1 + relativeStrength)\n\n if (relativeStrengthIndex !== undefined) {\n variable.value = relativeStrengthIndex.toFixed(2)\n } else {\n variable.value = 0\n }\n} else {\n variable.value = 0\n}\n\n// Statistics\n\nfunction calculateWMA(source, rmas, periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (source.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let alpha = 1 / periods\n let avg = source[source.length - 1] * alpha + rmas[rmas.length - 1] * (1 - alpha)\n return avg;\n}\n\nfunction calculateRMAU(periods) {\n return calculateWMA(variable.last14U, variable.rma14U, periods)\n}\n\nfunction calculateRMAD(periods) {\n return calculateWMA(variable.last14D, variable.rma14D, periods)\n}",
"code": "/* Loop Code */\n\n/* \nCalculation method credit: https://www.macroption.com/rsi-calculation/\n*/\n\n/* Calculating Up Moves and Down Moves */\n\n//let candle = record.current // Our main dependencies are candles \n//let candlePrevious = record.previous\n\nif (record.previous !== undefined) {\n if (record.current.close > record.previous.close) {\n variable.last14U.push(record.current.close - record.previous.close) // Add win to last 14 array.\n } else {\n variable.last14U.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (record.current.close < record.previous.close) {\n variable.last14D.push(record.previous.close - record.current.close) // Add win to last 14 array.\n } else {\n variable.last14D.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximum of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n /* Calculating Averages of Up Moves and Down Moves */\n\n variable.avgU = calculateRMAU(14)\n variable.avgD = calculateRMAD(14)\n\n /* Keep track of average moves */\n variable.rma14U.push(variable.avgU)\n variable.rma14D.push(variable.avgD)\n \n if (variable.rma14U.length > 14) {\n variable.rma14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.rma14D.length > 14) {\n variable.rma14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n /* Calculating Relative Strength */\n \n if (variable.avgD > 0) {\n relativeStrength = variable.avgU / variable.avgD\n } else {\n relativeStrength = 0\n }\n\n /* Calculating RSI */\n\n relativeStrengthIndex = 100 - 100 / ( 1 + relativeStrength)\n\n if (relativeStrengthIndex !== undefined) {\n variable.value = relativeStrengthIndex.toFixed(2)\n } else {\n variable.value = 0\n }\n} else {\n variable.value = 0\n}\n\n// Statistics\n\nfunction calculateWMA(source, rmas, periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (source.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let alpha = 1 / periods\n let avg = source[source.length - 1] * alpha + rmas[rmas.length - 1] * (1 - alpha)\n return avg;\n}\n\nfunction calculateRMAU(periods) {\n return calculateWMA(variable.last14U, variable.rma14U, periods)\n}\n\nfunction calculateRMAD(periods) {\n return calculateWMA(variable.last14D, variable.rma14D, periods)\n}",
"project": "Foundations",
"id": "91eb76f0-617c-4397-9135-beca294a6481",
"savedPayload": {
@@ -2734,7 +2734,7 @@
"procedureJavascriptCode": {
"type": "Procedure Javascript Code",
"name": "New Procedure Javascript Code",
"code": "/* Loop Code */\nlet candle = record.current // This is the primary dependency\nlet volume = getElement('volumes', candle) // Here I get the volume bar corresponding to the current candle\nlet totalVolume = volume.buy + volume.sell // Candles Volumes split the volume received from the exchange evenly betwen buy and sell because it does not know how much of it there is.\n\nlet hlc3 = (candle.max + candle.min + candle.close) / 3\nlet lastHlc3 = variable.lastHlc3\n\nif (record.previous !== undefined) {\n\n let change = hlc3 - variable.lastHlc3\n\n variable.last14U.push(totalVolume * (change <= 0 ? 0 : hlc3))\n variable.last14D.push(totalVolume * (change >= 0 ? 0 : hlc3))\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n let upper = variable.last14U.reduce(function(a, b){return a + b;}, 0);\n let lower = variable.last14D.reduce(function(a, b){return a + b;}, 0);\n\n let mfi\n\n if(lower == 0)\n mfi = 100\n else if(upper == 0)\n mfi = 0\n else // RSI\n mfi = 100 - (100 / (1 + upper / lower))\n\n if (mfi !== undefined) {\n variable.value = mfi.toFixed(2)\n } else {\n variable.value = 0\n }\n\n/*\n // Printing values to console to check\n console.log(\"HLC3: \", hlc3)\n console.log(\"Last HLC3: \", lastHlc3)\n console.log(\"Change: \", change)\n console.log(\"Upper: \", upper)\n console.log(\"Lower: \", lower)\n console.log(\"MFI: \", mfi)\n */\n\n} else {\n variable.value = 0\n}\n\nvariable.lastHlc3 = hlc3",
"code": "/* Loop Code */\nlet candle = record.current // This is the primary dependency\nlet volume = getElement('volumes', candle) // Here I get the volume bar corresponding to the current candle\nlet totalVolume = volume.buy + volume.sell // Candles Volumes split the volume received from the exchange evenly between buy and sell because it does not know how much of it there is.\n\nlet hlc3 = (candle.max + candle.min + candle.close) / 3\nlet lastHlc3 = variable.lastHlc3\n\nif (record.previous !== undefined) {\n\n let change = hlc3 - variable.lastHlc3\n\n variable.last14U.push(totalVolume * (change <= 0 ? 0 : hlc3))\n variable.last14D.push(totalVolume * (change >= 0 ? 0 : hlc3))\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximum of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n\n let upper = variable.last14U.reduce(function(a, b){return a + b;}, 0);\n let lower = variable.last14D.reduce(function(a, b){return a + b;}, 0);\n\n let mfi\n\n if(lower == 0)\n mfi = 100\n else if(upper == 0)\n mfi = 0\n else // RSI\n mfi = 100 - (100 / (1 + upper / lower))\n\n if (mfi !== undefined) {\n variable.value = mfi.toFixed(2)\n } else {\n variable.value = 0\n }\n\n/*\n // Printing values to console to check\n console.log(\"HLC3: \", hlc3)\n console.log(\"Last HLC3: \", lastHlc3)\n console.log(\"Change: \", change)\n console.log(\"Upper: \", upper)\n console.log(\"Lower: \", lower)\n console.log(\"MFI: \", mfi)\n */\n\n} else {\n variable.value = 0\n}\n\nvariable.lastHlc3 = hlc3",
"project": "Foundations",
"id": "086b666c-f4d1-4167-a103-76b9d3eddf5f",
"savedPayload": {
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -50,7 +50,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
if (statusDependencies.statusReports.get(reportKey).status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ")
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ")
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
return;
}
@@ -193,7 +193,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
We will assume that each Dataset is built fetching data from a single endpointNode at the target API.
To get the endpointNode node, we will go through the references at the Record Definition.
We will check that all references are pointing to fields belonging to the same endpointNode node.
If they are not, we will consider the user did not define well the relationaships between nodes
If they are not, we will consider the user did not define well the relationships between nodes
and abort the process.
*/
for (let j = 0; j < productDefinition.record.properties.length; j++) {
@@ -204,7 +204,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
let endpointNodeFound = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(apiResponseField, 'API Endpoint')
/*
Every Record Property with an apiResponseFieldReference must be on the path
to a certain enpoint.
to a certain endpoint.
*/
if (endpointNodeFound === undefined) {
TS.projects.foundations.utilities.errorHandlingFunctions.throwHandledException(
@@ -223,11 +223,11 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
}
/*
Here we check all enpoints are actually the same endpoiht.
Here we check all endpoints are actually the same endpoint.
*/
if (endpointNodeFound.id !== endpointNode.id) {
/*
We can not reference fields from different enpoints.
We can not reference fields from different endpoints.
*/
TS.projects.foundations.utilities.errorHandlingFunctions.throwHandledException(
processIndex,
@@ -244,7 +244,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
if (endpointNode === undefined) {
/*
API Endpoint counld not be found. Check that the at least one Record Property
API Endpoint could not be found. Check that the at least one Record Property
has an API Response Field Reference child, and that this one is referencing an
API Response Field.
*/
@@ -263,10 +263,10 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
/*
Each record property references an API Response Field, which can be deep into the
data structure received from the API call. What we need to do, is to find for each
record proeprty the nodePath that will help us later retrieve the value of that
particular proeprty.
record property the nodePath that will help us later retrieve the value of that
particular property.
To do so, we will have to recursivelly climb the API Map until reaching the API Response
To do so, we will have to recursively climb the API Map until reaching the API Response
Schema node, which is the one from where we will get the root object of the response data
structure.
*/
@@ -606,7 +606,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
let errorCodeReceived
/*
At this point we have received the first http reponse from the API server,
At this point we have received the first http response from the API server,
and from it we can extract the status code, which is the html code of the
response of our request.
@@ -665,7 +665,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
response.text().then(body => {
apiResponseReceivedText = body
/*
If we received an errror code, we abort the processing at this point.
If we received an error code, we abort the processing at this point.
*/
if (errorCodeReceived === true) {
resolve('ERROR_CODE_RECEIVED')
@@ -719,7 +719,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
resolve('PAGE_FETCHED')
}
/*
If we received an errror code, we abort the processing at this point.
If we received an error code, we abort the processing at this point.
*/
if (errorCodeReceived === true) {
resolve('ERROR_CODE_RECEIVED')
@@ -829,7 +829,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
function appendToExistingDataset() {
/*
We are going to append the curernt apiResponseReceivedText to the existing file.
We are going to append the current apiResponseReceivedText to the existing file.
*/
let existingFileArray = JSON.parse(existingFileContent)
/*
@@ -929,7 +929,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
contextVariables.lastFile = file.date
/*
For One-Min type of datasets, since they are saved as Daily Files, there is no need
to read the already existing content to append to it. In this case is enought to
to read the already existing content to append to it. In this case is enough to
set the existing content to an empty array.
*/
existingFileContent = "[]"
@@ -938,7 +938,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
function appendToExistingDataset() {
/*
We are going to append the curernt apiResponseReceivedText to the existing file.
We are going to append the current apiResponseReceivedText to the existing file.
*/
let existingFileArray = JSON.parse(existingFileContent)
/*
@@ -1108,7 +1108,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
}
/*
When all Output Datasets have been succesfully written, we can go and write
When all Output Datasets have been successfully written, we can go and write
the Status Report.
*/
writeStatusReport()
@@ -58,7 +58,7 @@
/* We look first for Exchange Raw Data in order to get when the market starts. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Starting Point')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -67,7 +67,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return;
}
@@ -99,7 +99,7 @@
/* Second, we get the report from Exchange Raw Data, to know when the marted ends. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Ending Point')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -108,7 +108,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return;
}
@@ -132,7 +132,7 @@
/* Finally we get our own Status Report. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Self Reference')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -141,7 +141,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.");
"[ERROR] start -> getContextVariables -> Can not continue because self dependency Status Report is corrupt. Aborting Process.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_FAIL_RESPONSE);
return;
}
@@ -152,7 +152,7 @@
beginingOfMarket = new Date(thisReport.beginingOfMarket);
if (beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Begining of the Market
if (beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Beginning of the Market
beginingOfMarket = new Date(
contextVariables.datetimeBeginingOfMarketFile.getUTCFullYear() + "-" +
@@ -192,7 +192,7 @@
} else {
/*
In the case when there is no status report, we take the date of the file with the first trades as the begining of the market. Then we will
In the case when there is no status report, we take the date of the file with the first trades as the beginning of the market. Then we will
go one day further in time, so that the previous day does fine a file at the begining of the market.
*/
contextVariables.lastBandFile = new Date(
@@ -237,7 +237,7 @@
try {
let n;
processDate = new Date(contextVariables.lastBandFile.valueOf() - SA.projects.foundations.globals.timeConstants.ONE_DAY_IN_MILISECONDS); // Go back one day to start well when we advance time at the begining of the loop.
processDate = new Date(contextVariables.lastBandFile.valueOf() - SA.projects.foundations.globals.timeConstants.ONE_DAY_IN_MILISECONDS); // Go back one day to start well when we advance time at the beginning of the loop.
let fromDate = new Date(processDate.valueOf())
let lastDate = TS.projects.foundations.utilities.dateTimeFunctions.removeTime(new Date())
@@ -293,7 +293,7 @@
try {
/*
We will iterate through all posible timeFrames
We will iterate through all possible timeFrames
*/
n = 0 // loop Variable representing each possible period as defined at the Time Frame Array.
loopBody();
@@ -520,7 +520,7 @@
let numberOfPreviousPeriods;
let currentPosition = pBArray.length;
if (currentPosition < numberOfPeriodsPB) { // Avoinding to get into negative array indexes
if (currentPosition < numberOfPeriodsPB) { // Avoiding to get into negative array indexes
numberOfPreviousPeriods = currentPosition;
} else {
numberOfPreviousPeriods = numberOfPeriodsPB;
@@ -42,7 +42,7 @@
function timeframesLoop() {
try {
/*
We will iterate through all posible time frames.
We will iterate through all possible time frames.
*/
n = 0 // loop Variable representing each possible period as defined at the Time Frame Array.
loopBody()
@@ -177,7 +177,7 @@
let numberOfPreviousPeriods;
let currentPosition = pBArray.length;
if (currentPosition < numberOfPeriodsPB) { // Avoinding to get into negative array indexes
if (currentPosition < numberOfPeriodsPB) { // Avoiding to get into negative array indexes
numberOfPreviousPeriods = currentPosition;
} else {
numberOfPreviousPeriods = numberOfPeriodsPB;
@@ -53,7 +53,7 @@
/* We look first for Exchange Raw Data in order to get when the market starts. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Starting Point')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -62,7 +62,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return;
}
@@ -94,7 +94,7 @@
/* Second, we get the report from Exchange Raw Data, to know when the marted ends. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Ending Point')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -103,7 +103,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return
}
@@ -130,7 +130,7 @@
/* Finally we get our own Status Report. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Self Reference')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ")
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
@@ -139,7 +139,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.")
"[ERROR] start -> getContextVariables -> Can not continue because self dependency Status Report is corrupt. Aborting Process.")
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_FAIL_RESPONSE)
return
}
@@ -148,7 +148,7 @@
if (thisReport.lastFile !== undefined) {
beginingOfMarket = new Date(thisReport.beginingOfMarket)
if (beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Begining of the Market
if (beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Beginning of the Market
beginingOfMarket = new Date(contextVariables.datetimeBeginingOfMarketFile.getUTCFullYear() + "-" + (contextVariables.datetimeBeginingOfMarketFile.getUTCMonth() + 1) + "-" + contextVariables.datetimeBeginingOfMarketFile.getUTCDate() + " " + "00:00" + SA.projects.foundations.globals.timeConstants.GMT_SECONDS);
contextVariables.datetimeLastProducedFile = new Date(
@@ -242,7 +242,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.newInternalLoop(currentDate, percentage);
}
/*
We prepere the arrays that will accumulate all the information for each output file.
We prepare the arrays that will accumulate all the information for each output file.
*/
outputCandles = []
outputVolumes = []
@@ -258,7 +258,7 @@
function timeframesLoop() {
/*
We will iterate through all posible time frames.
We will iterate through all possible time frames.
*/
let n = 0 // loop Variable representing each possible period as defined at the Time Frame Array.
loopBody();
@@ -305,7 +305,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack)
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.");
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
return;
}
@@ -316,7 +316,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Dependency Not Ready -> err = " + err.stack)
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.");
"[WARN] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
return
@@ -429,7 +429,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.")
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.")
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
return
}
@@ -517,7 +517,7 @@
function writeFiles(candles, volumes, timeFrame, callBack) {
/*
Here we will write the contents of the Candles and Volumens files.
Here we will write the contents of the Candles and Volumes files.
*/
try {
writeCandles()
@@ -45,7 +45,7 @@
in-memory arrays. We will then append to this arrays the new information we will get from Exchange Raw Data.
2. We know from our status report which was the last DAY we processed from Exchange Raw Data,
but we must be carefull, because that day might not have been completed yet, if the
but we must be carefully, because that day might not have been completed yet, if the
last loop found the head of the market. That means that we have to be carefull not to append candles
that are already there. To simplify what we do is to discard all candles of the last processed day,
and then we can process that full day again adding all the candles.
@@ -71,7 +71,7 @@
/* We look first for Exchange Raw Data in order to get when the market starts. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Starting Point')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -80,7 +80,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return
}
@@ -112,7 +112,7 @@
/* Second, we get the report from Exchange Raw Data, to know when the marted ends. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Ending Point')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -121,7 +121,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return;
}
@@ -148,7 +148,7 @@
/* Finally we get our own Status Report. */
statusReport = statusDependenciesModule.reportsByMainUtility.get('Self Reference')
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
@@ -157,7 +157,7 @@
if (statusReport.status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.");
"[ERROR] start -> getContextVariables -> Can not continue because self dependency Status Report is corrupt. Aborting Process.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_FAIL_RESPONSE);
return
}
@@ -168,7 +168,7 @@
beginingOfMarket = new Date(thisReport.beginingOfMarket);
if (beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Begining of the Market
if (beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Beginning of the Market
beginingOfMarket = new Date(
contextVariables.datetimeBeginingOfMarketFile.getUTCFullYear() + "-" +
@@ -291,7 +291,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> err = " + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.");
"[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
}
} else {
@@ -337,7 +337,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> err = " + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.");
"[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
}
} else {
@@ -373,7 +373,7 @@
let fromDate = new Date(contextVariables.datetimeLastProducedFile.valueOf())
let lastDate = TS.projects.foundations.utilities.dateTimeFunctions.removeTime(new Date())
/*
Firstly we prepere the arrays that will accumulate all the information for each output file.
Firstly we prepare the arrays that will accumulate all the information for each output file.
*/
let outputCandles = [];
let outputVolumes = [];
@@ -426,7 +426,7 @@
function timeframesLoop() {
/*
We will iterate through all posible time frames.
We will iterate through all possible time frames.
*/
let n = 0 // loop Variable representing each possible period as defined at the Time Frame Array.
@@ -539,7 +539,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.");
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return
}
@@ -550,7 +550,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Dependency Not Ready -> err = " + JSON.stringify(err));
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[WARN] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.");
"[WARN] start -> buildCandles -> timeframesLoop -> loopBody -> nextCandleFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return
@@ -567,8 +567,8 @@
let totalOutputCandles = inputFilePeriod / outputPeriod; // this should be 2 in this case.
let beginingOutputTime = contextVariables.datetimeLastProducedFile.valueOf();
/*
The algorithm that follows is going to agregate candles of 1 min timeFrame read from Exchange Raw Data, into candles of each timeFrame
that Candles Volumes generates. For market files those timePediods goes from 1h to 24hs.
The algorithm that follows is going to aggregate candles of 1 min timeFrame read from Exchange Raw Data, into candles of each timeFrame
that Candles Volumes generates. For market files those time periods goes from 1h to 24hs.
*/
for (let i = 0; i < totalOutputCandles; i++) {
@@ -667,7 +667,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack);
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.");
"[ERROR] start -> buildCandles -> timeframesLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return;
}
@@ -753,7 +753,7 @@
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[INFO] start -> writeFiles -> Entering function.")
/*
Here we will write the contents of the Candles and Volumens files.
Here we will write the contents of the Candles and Volumes files.
*/
try {
writeCandles()
@@ -45,7 +45,7 @@ exports.newDataMiningBotModulesCheckWebhook = function (processIndex) {
if (statusDependencies.statusReports.get(reportKey).status === "Status Report is corrupt.") {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
return;
}
@@ -111,7 +111,7 @@ exports.newDataMiningBotModulesCheckWebhook = function (processIndex) {
let messages = Buffer.concat(chunks).toString('utf8')
if (fileContent !== undefined) {
// we are going to append the curernt messages to the existing file.
// we are going to append the current messages to the existing file.
let fileContentArray = JSON.parse(fileContent)
let messagesArray = JSON.parse(messages)
@@ -1,7 +1,7 @@
{
"type": "Docs Space Style",
"definition": {
"text": "This node is currently a place holder that will eventually allow users to adjust the visual apperance of the docs space.",
"text": "This node is currently a place holder that will eventually allow users to adjust the visual appearance of the docs space.",
"updated": 1631589004055
},
"paragraphs": [
@@ -549,7 +549,7 @@ function newFoundationsDocsCommmandInterface() {
function afterSaving() {
/*
Since all the changes where saved, we need to remove the change flags at the different shcema documents.
Since all the changes where saved, we need to remove the change flags at the different schema documents.
We also need to remove from the arrays the deleted items.
*/
for (let j = 0; j < PROJECTS_SCHEMA.length; j++) {
@@ -311,7 +311,7 @@ function newFoundationsDocsContextMenu() {
return false
}
/*
Get the dimenssions of the current paragraph to help us to define the dimenssions of the text area.
Get the dimensions of the current paragraph to help us to define the dimensions of the text area.
*/
UI.projects.education.spaces.docsSpace.contextMenu.selectedParagraph = paragraphNode
selectedParagraphHeight = paragraphNode.getClientRects()[0].height
@@ -349,7 +349,7 @@ function newFoundationsDocsContextMenu() {
return true
}
/*
Remeber the Selected Paragraph Index
Remember the Selected Paragraph Index
*/
let splittedId = paragraphNode.id.split('-')
selectedParagraphIndex = splittedId[splittedId.length - 2]
@@ -153,7 +153,7 @@ function newEducationDocSpace() {
function setupUserLanguage() {
/*
Getting the used preferred languague
Getting the used preferred language
*/
let workspace = UI.projects.foundations.spaces.designSpace.workspace.workspaceNode
let docsLanguage = UI.projects.visualScripting.utilities.nodeConfig.loadConfigProperty(workspace.payload, 'docsLanguage')
@@ -347,8 +347,8 @@ function newFoundationsDocsDocumentPage() {
function generateTopicMultiPageIndex() {
/*
We will go through all the schema docuents array for the current project and pick
the documents that share the same key thatn the document we are rendering now.
We will go through all the schema documents array for the current project and pick
the documents that share the same key that the document we are rendering now.
With the info on those picked document we will build the index.
*/
let paragraph
@@ -393,7 +393,7 @@ function newFoundationsDocsDocumentPage() {
function generateTutorialMultiPageIndex() {
/*
We will go through all the schema docuents array for the current project and pick
We will go through all the schema documents array for the current project and pick
the documents that share the same key thatn the document we are rendering now.
With the info on those picked document we will build the index.
*/
@@ -438,8 +438,8 @@ function newFoundationsDocsDocumentPage() {
function generateReviewMultiPageIndex() {
/*
We will go through all the schema docuents array for the current project and pick
the documents that share the same key thatn the document we are rendering now.
We will go through all the schema documents array for the current project and pick
the documents that share the same key that the document we are rendering now.
With the info on those picked document we will build the index.
*/
let paragraph
@@ -628,7 +628,7 @@ function newFoundationsDocsDocumentPage() {
autoGeneratedParagraphIndex++
return
} else {
return 'Property ' + propertyName + ' not found at the placeholder object. This means that within the info recieved, this information is not available.'
return 'Property ' + propertyName + ' not found at the placeholder object. This means that within the info received, this information is not available.'
}
}
}
@@ -772,7 +772,7 @@ function newFoundationsDocsDocumentPage() {
}
} else {
if (imageItem.icon === undefined) {
/* This is the default behavious */
/* This is the default behaviours */
imageElement = UI.projects.foundations.spaces.designSpace.getIconByProjectAndType(imageItem.project, imageItem.type)
if (imageElement === undefined) {
console.log('[WARN] Image for project (' + imageItem.project + ') with name (' + imageItem.type + ') not found. As a consequence, the Docs Page will be rendered without the icon. ')
@@ -1179,7 +1179,7 @@ function newFoundationsDocsDocumentPage() {
autoGeneratedParagraphIndex++
paragraph = {
style: "Text",
text: "The following are the Node Referencing Rules that determine which nodes " + appSchemaDocument.type + " may stablish a reference to:"
text: "The following are the Node Referencing Rules that determine which nodes " + appSchemaDocument.type + " may establish a reference to:"
}
renderParagraph(paragraph, key)
autoGeneratedParagraphIndex++
@@ -1887,7 +1887,7 @@ function newFoundationsDocsDocumentPage() {
function putTheLines() {
/*
Now we will scan the Matrix to put the lines of the hirierchy.
Now we will scan the Matrix to put the lines of the hierarchy.
*/
for (let i = 0; i < contentMatrix.length; i++) {
let matrixRow = contentMatrix[i]
@@ -1904,7 +1904,7 @@ function newFoundationsDocsDocumentPage() {
function addImageContainers() {
/*
Add Image Conatiners
Add Image Containers
*/
for (let i = 0; i < contentMatrix.length; i++) {
let matrixRow = contentMatrix[i]
@@ -1990,7 +1990,7 @@ function newFoundationsDocsDocumentPage() {
if (UI.projects.education.spaces.docsSpace.contextMenu.getSelection() === false) {
/*
The click was in a place where we can not recognize an editable piece.
We will not open the menu in this circunstances.
We will not open the menu in this circumstances.
*/
return
}
@@ -2051,7 +2051,7 @@ function newFoundationsDocsDocumentPage() {
/*
We will detect if the user has created new paragraphs while editing.
For that we will inspect the value of the text area looking for a char
code representing carriedge return.
code representing carriage return.
*/
let paragraphs = []
let paragraph = ''
@@ -2078,7 +2078,7 @@ function newFoundationsDocsDocumentPage() {
UI.projects.education.utilities.docs.setTextBasedOnLanguage(docSchemaParagraph, paragraphs[0])
} else {
/*
Deleting paragarphs is only possible in the default language.
Deleting paragraphs is only possible in the default language.
*/
if (UI.projects.education.spaces.docsSpace.language === UI.projects.education.globals.docs.DEFAULT_LANGUAGE) {
UI.projects.education.spaces.docsSpace.documentPage.docsSchemaDocument.updated = true
@@ -2094,7 +2094,7 @@ function newFoundationsDocsDocumentPage() {
}
} else {
/*
Adding paragarphs is only possible in the default language.
Adding paragraphs is only possible in the default language.
*/
if (UI.projects.education.spaces.docsSpace.language === UI.projects.education.globals.docs.DEFAULT_LANGUAGE) {
/*
@@ -172,7 +172,6 @@ function newFoundationsDocsFooter() {
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeCurrentBranch(\'master\')">Master</a></li>'
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeCurrentBranch(\'develop\')">Develop</a></li>'
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeCurrentBranch(\'plugins-docs\')">Plugins-Docs</a></li>'
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeCurrentBranch(\'next-version\')">Next-Version</a></li>'
HTML = HTML + '</ul>'
HTML = HTML + '</div>'
@@ -183,7 +182,6 @@ function newFoundationsDocsFooter() {
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeContributionsBranch(\'master\')">Master</code></li>'
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeContributionsBranch(\'develop\')">Develop</a></li>'
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeContributionsBranch(\'plugins-docs\')">Plugins-Docs</a></li>'
HTML = HTML + '<li><a href="#" onClick="UI.projects.education.spaces.docsSpace.changeContributionsBranch(\'next-version\')">Next-Version</a></li>'
HTML = HTML + '</ul>'
HTML = HTML + '</ul>'
+4 -4
View File
@@ -120,7 +120,7 @@ function newEducationUtilitiesDocs() {
if (UI.projects.education.spaces.docsSpace.language === UI.projects.education.globals.docs.DEFAULT_LANGUAGE) {
if (paragraph.text !== text) {
/* This will make the Client to save this in a file overwritting the previous version*/
/* This will make the Client to save this in a file overwriting the previous version*/
UI.projects.education.spaces.docsSpace.documentPage.docsSchemaDocument.updated = true
paragraph.text = text
@@ -145,7 +145,7 @@ function newEducationUtilitiesDocs() {
if (translation.language === UI.projects.education.spaces.docsSpace.language) {
if (translation.text !== text) {
/* This will make the Client to save this in a file overwritting the previous version*/
/* This will make the Client to save this in a file overwriting the previous version*/
UI.projects.education.spaces.docsSpace.documentPage.docsSchemaDocument.updated = true
translation.text = text
@@ -161,7 +161,7 @@ function newEducationUtilitiesDocs() {
}
paragraph.translations.push(translation)
/* This will make the Client to save this in a file overwritting the previous version*/
/* This will make the Client to save this in a file overwriting the previous version*/
UI.projects.education.spaces.docsSpace.documentPage.docsSchemaDocument.updated = true
return
}
@@ -613,7 +613,7 @@ function newEducationUtilitiesDocs() {
function tagDefinedTypes(text, excludedType) {
const MAX_NUMBER_OF_WORDS = 10
text = text.trim()
let cleanText = text.replace(/'/g, ' AMPERSAND ') // scaping ampersands, separating them from other words
let cleanText = text.replace(/'/g, ' AMPERSAND ') // escaping ampersands, separating them from other words
.replaceAll(':', ' :')
.replaceAll(',', ' ,')
.replaceAll('.', ' .')
@@ -48,7 +48,7 @@
/* these are module specific variables: */
let bands = []; // Here we keep the bands to be ploted every time the Draw() function is called by the AAWebPlatform.
let bands = []; // Here we keep the bands to be plotted every time the Draw() function is called by the AAWebPlatform.
let onMouseOverEventSuscriptionId
let zoomChangedEventSubscriptionId
@@ -65,7 +65,7 @@
function finalize() {
try {
/* Stop listening to the necesary events. */
/* Stop listening to the necessary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
@@ -74,7 +74,7 @@
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId);
/* Destroyd References */
/* Destroyed References */
marketFiles = undefined;
dailyFiles = undefined;
@@ -119,7 +119,7 @@
marketFile = marketFiles.getFile(pTimeFrame);
fileCursor = dailyFiles.getFileCursor(pTimeFrame);
/* Listen to the necesary events. */
/* Listen to the necessary events. */
zoomChangedEventSubscriptionId = UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
@@ -385,7 +385,7 @@
currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS);
}
/* Lests check if all the visible screen is going to be covered by bands. */
/* Lets check if all the visible screen is going to be covered by bands. */
let lowerEnd = leftDate.valueOf();
let upperEnd = rightDate.valueOf();
@@ -587,7 +587,7 @@
if (userPositionDate >= band.begin && userPositionDate <= band.end) {
/* highlight the current band */
browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.05)'; // Current band accroding to time
browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.05)'; // Current band according to time
}
if (
@@ -603,7 +603,7 @@
/* Next we are drawing the outter bands lines */
/* Next we are drawing the outer bands lines */
browserCanvasContext.beginPath();
@@ -620,7 +620,7 @@
/* highlight the current band */
browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current band accroding to time
browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current band according to time
let currentBand = {
bodyWidth: bandPoint3.x - bandPoint2.x,
@@ -658,7 +658,7 @@
if (userPositionDate >= band.begin && userPositionDate <= band.end) {
/* highlight the current band */
browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current band accroding to time
browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current band according to time
}
browserCanvasContext.lineWidth = 0.2;
@@ -118,7 +118,7 @@ function newBollingerPlottersBollingerBandsBollingerBandsBollingerBandsPanel() {
y: Y_AXIS - currentBand.rightBodyHeight / 2 + currentBand.bottomDelta / 4
};
/* Extra bounderies due to constrained space */
/* Extra boundaries due to constrained space */
const upperLimit = frameTitleHeight + frameBodyHeight * 0.25;
const downLimit = frameTitleHeight + frameBodyHeight * 0.75;
@@ -141,7 +141,7 @@ function newCandlesPlottersCandlesVolumesCandlesCandlePanel() {
};
/* Extra bounderies due to constrained space */
/* Extra boundaries due to constrained space */
const upperLimit = frameTitleHeight + frameBodyHeight * 0.15;
const downLimit = frameTitleHeight + frameBodyHeight * 0.85;
@@ -38,7 +38,7 @@
/* these are module specific variables: */
let candles = []; // Here we keep the candles to be ploted every time the Draw() function is called by the AAWebPlatform.
let candles = []; // Here we keep the candles to be plotted every time the Draw() function is called by the AAWebPlatform.
let onMouseOverEventSuscriptionId
let zoomChangedEventSubscriptionId
@@ -55,7 +55,7 @@
function finalize() {
try {
/* Stop listening to the necesary events. */
/* Stop listening to the necessary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
@@ -64,7 +64,7 @@
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId);
/* Destroyd References */
/* Destroyed References */
marketFiles = undefined;
dailyFiles = undefined;
@@ -108,7 +108,7 @@
marketFile = marketFiles.getFile(pTimeFrame);
fileCursor = dailyFiles.getFileCursor(pTimeFrame);
/* Listen to the necesary events. */
/* Listen to the necessary events. */
zoomChangedEventSubscriptionId = UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = UI.projects.foundations.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
@@ -376,7 +376,7 @@
currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS);
}
/* Lests check if all the visible screen is going to be covered by candles. */
/* Lets check if all the visible screen is going to be covered by candles. */
let lowerEnd = leftDate.valueOf();
let upperEnd = rightDate.valueOf();
@@ -719,7 +719,7 @@
}
/* Draw mouse candel and Raise Event. */
/* Draw mouse candle and Raise Event. */
if (mouseCandle) {
/* highlight the current candle */
@@ -735,7 +735,7 @@
browserCanvasContext.closePath();
browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current candle accroding to time
browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current candle according to time
browserCanvasContext.fill();
@@ -141,7 +141,7 @@ function newCandlesPlottersCandlesVolumesCandlesCandlePanel() {
};
/* Extra bounderies due to constrained space */
/* Extra boundaries due to constrained space */
const upperLimit = frameTitleHeight + frameBodyHeight * 0.15;
const downLimit = frameTitleHeight + frameBodyHeight * 0.85;
@@ -1,7 +1,7 @@
{
"type": "API Server",
"definition": {
"text": "It is a server (usually running at the Internet) that provides programatic access to it;s resources. This enables algorithms to access those resources. When those resources are data, then it allow anyone to fetch that data by executing predefined queries to the API Server.",
"text": "It is a server (usually running at the Internet) that provides programmatic access to it;s resources. This enables algorithms to access those resources. When those resources are data, then it allow anyone to fetch that data by executing predefined queries to the API Server.",
"updated": 1621955731261
},
"paragraphs": [
@@ -1,7 +1,7 @@
{
"type": "Action",
"definition": {
"text": "An Action is somthing that users of the system can triggeer via the UI, usually by clicking on a Menu Item of a Node. Actions can also be triggered by other actions enabling a resulable set of functionality to be available to users of the Design Space. Once triggered the action executes pre-defined code.",
"text": "An Action is something that users of the system can trigger via the UI, usually by clicking on a Menu Item of a Node. Actions can also be triggered by other actions enabling a reusable set of functionality to be available to users of the Design Space. Once triggered the action executes pre-defined code.",
"updated": 1614784762410
},
"paragraphs": [
@@ -7,7 +7,7 @@
"paragraphs": [
{
"style": "Text",
"text": "The App Schema file is an array of objects, each objec defines a certain node type.",
"text": "The App Schema file is an array of objects, each object defines a certain node type.",
"updated": 1614785082978
},
{
@@ -43,7 +43,7 @@
},
{
"style": "Text",
"text": "It is an integer from 0 to 5, representing the importance of this type of node. 0 is the most important. The more important the node type, the bigger is rendered at the Design Space. The difference between level is barely noticable.",
"text": "It is an integer from 0 to 5, representing the importance of this type of node. 0 is the most important. The more important the node type, the bigger is rendered at the Design Space. The difference between level is barely noticeable.",
"updated": 1614785595122
},
{
@@ -94,7 +94,7 @@
},
{
"style": "List",
"text": "autoAdd: optional, menas if one instance of this children will be automatically created when this Node type is created."
"text": "autoAdd: optional, means if one instance of this children will be automatically created when this Node type is created."
},
{
"style": "Text",
@@ -115,7 +115,7 @@
},
{
"style": "Text",
"text": "This property defines to which nodes the current one being defined can attach to, considering those nodes as possible parents. The values are expresed in a string with a list of Node Types like in the following example:"
"text": "This property defines to which nodes the current one being defined can attach to, considering those nodes as possible parents. The values are expressed in a string with a list of Node Types like in the following example:"
},
{
"style": "Json",
@@ -133,7 +133,7 @@
},
{
"style": "Text",
"text": "This property defines to which nodes the current one being defined can reference to, considering those nodes as possible reference parents. The values are expresed in a string with a list of Node Types like in the following example:",
"text": "This property defines to which nodes the current one being defined can reference to, considering those nodes as possible reference parents. The values are expressed in a string with a list of Node Types like in the following example:",
"updated": 1614786699311
},
{
@@ -161,7 +161,7 @@
},
{
"style": "Text",
"text": "Although you are free to add any menu item you like, there are a few that have already become standarized. These standard Menu Items are also placed at a certain position within the menu for consistency.",
"text": "Although you are free to add any menu item you like, there are a few that have already become standardized. These standard Menu Items are also placed at a certain position within the menu for consistency.",
"updated": 1614787035329
},
{
@@ -1,7 +1,7 @@
{
"type": "CCXT",
"definition": {
"text": "CCXT is a popular open source library that aims to standarize crypto exchanges APIs so as to make it easier for trading bots developers to access crypto exchanges. ",
"text": "CCXT is a popular open source library that aims to standardize crypto exchanges APIs so as to make it easier for trading bots developers to access crypto exchanges. ",
"updated": 1621694347383,
"translations": [
{
@@ -1,7 +1,7 @@
{
"type": "Dataset",
"definition": {
"text": "In Superalgos, a Dataset is a colection of JSON / text files organized in a certain way. ",
"text": "In Superalgos, a Dataset is a collection of JSON / text files organized in a certain way. ",
"updated": 1621695840891
},
"paragraphs": [
@@ -1,7 +1,7 @@
{
"type": "Default Market",
"definition": {
"text": "The Default Market is the one referenced by the Market Data Tasks, Market Trading Tasks, Market Learning Tasks nodes of which a certain Task decends from. The Trading Bot running inside that Task will considered that reference market to be it's Default Market.",
"text": "The Default Market is the one referenced by the Market Data Tasks, Market Trading Tasks, Market Learning Tasks nodes of which a certain Task descends from. The Trading Bot running inside that Task will considered that reference market to be it's Default Market.",
"updated": 1612352846165
},
"paragraphs": [
@@ -12,7 +12,7 @@
},
{
"style": "Text",
"text": "Read the docs of the API you are trying to map, and indentify which endpoints they support. From there you can choose which endpoint holds the information you are interested in and begin to map it. For a detailed description of how to do this, please read the following description. In addtion please see the API Map page as well as the Data Mining topic for other important concepts surrounding setting up an api map. ",
"text": "Read the docs of the API you are trying to map, and identify which endpoints they support. From there you can choose which endpoint holds the information you are interested in and begin to map it. For a detailed description of how to do this, please read the following description. In addition please see the API Map page as well as the Data Mining topic for other important concepts surrounding setting up an api map. ",
"updated": 1622855071509
},
{
@@ -26,7 +26,7 @@
},
{
"style": "Important",
"text": "Becareful to write the exact string specified in the API documentation. Extra spaces, or capital letters will break the URL and cause it to return an error.",
"text": "Be careful to write the exact string specified in the API documentation. Extra spaces, or capital letters will break the URL and cause it to return an error.",
"updated": 1622773133088
},
{
@@ -7,7 +7,7 @@
"paragraphs": [
{
"style": "Success",
"text": "Even if you are not using every query parameter offered for an endpoint. For the sake of completness, it is a good idea to add it to the map and delete the value property.",
"text": "Even if you are not using every query parameter offered for an endpoint. For the sake of completeness, it is a good idea to add it to the map and delete the value property.",
"updated": 1622765045028
},
{
@@ -1,7 +1,7 @@
{
"type": "API Query Responses",
"definition": {
"text": "API calls produce responses. Under this node you can define how your map will interpret different responces from the API.",
"text": "API calls produce responses. Under this node you can define how your map will interpret different responses from the API.",
"updated": 1622862463288
},
"paragraphs": [
@@ -33,12 +33,12 @@
},
{
"style": "Text",
"text": "In order to extract individual values for each Record Property, the API Data Fetcher Bot needs to dynamically discover the nodePath for each Record Propety at the response data structure and can do it as long as the API Response Field referenced is under the Data Root. To autodiscover the nodePath it uses the API Response Schema nodePath to locate the Data Root, and then it follows the reference from the API Response Field Reference node to the API Response Field and climbs upwards until it reach the API Response Schema. While climbing upwards it discovers the nodePath that it needs to grab the value from the response data structure. That is how it works.",
"text": "In order to extract individual values for each Record Property, the API Data Fetcher Bot needs to dynamically discover the nodePath for each Record Property at the response data structure and can do it as long as the API Response Field referenced is under the Data Root. To auto discover the nodePath it uses the API Response Schema nodePath to locate the Data Root, and then it follows the reference from the API Response Field Reference node to the API Response Field and climbs upwards until it reach the API Response Schema. While climbing upwards it discovers the nodePath that it needs to grab the value from the response data structure. That is how it works.",
"updated": 1622372741883
},
{
"style": "Text",
"text": "When the referenced API Response Field is outside the scope of the Data Root, the process is not able to auto dicover this path and need users to manually define the nodePath (from the API Response Schema to the API Response Field that holds the value) and set it in this proeprty. That happens for instance when the API Response Field is part of the header of the API Server response.",
"text": "When the referenced API Response Field is outside the scope of the Data Root, the process is not able to auto discover this path and need users to manually define the nodePath (from the API Response Schema to the API Response Field that holds the value) and set it in this property. That happens for instance when the API Response Field is part of the header of the API Server response.",
"updated": 1621972505639
},
{
@@ -1,7 +1,7 @@
{
"type": "API Response Schema",
"definition": {
"text": "This node represents the map for the API response. APIs send ther data using a JSON object. The children of this node will map this JSON object so that the API Fetcher Bot knows how to extract the data you want.",
"text": "This node represents the map for the API response. APIs send their data using a JSON object. The children of this node will map this JSON object so that the API Fetcher Bot knows how to extract the data you want.",
"updated": 1622863829380
},
"paragraphs": [
@@ -50,7 +50,7 @@
},
{
"style": "Text",
"text": "In many cases it will be necessary to make several queries to the API Server in order to fetch all the data (think of pagination). Each page of data arrives at a certain location within the reponse data structure. That location is what we considered the Data Root.",
"text": "In many cases it will be necessary to make several queries to the API Server in order to fetch all the data (think of pagination). Each page of data arrives at a certain location within the response data structure. That location is what we considered the Data Root.",
"updated": 1622864086051
},
{
@@ -28,7 +28,7 @@
},
{
"style": "List",
"text": "codeName is the name of the dataset as used within the code. 'Single-File'is a special value. Use it for datasets that do not depend on Time Frames and that have a timestamp Record Property instead of the regular Begin and End. When this type of datasets are a dependency of Market or Daily datasets, they need the codeName'Single-File'in order to be found on disk.",
"text": "codeName is the name of the dataset as used within the code. 'Single-File' is a special value. Use it for datasets that do not depend on Time Frames and that have a timestamp Record Property instead of the regular Begin and End. When this type of datasets are a dependency of Market or Daily datasets, they need the codeName 'Single-File' in order to be found on disk.",
"updated": 1621100190528
},
{
@@ -10,7 +10,7 @@
},
{
"style": "Text",
"text": "Both entry and exit target sizes may be defined either denominated in the base asset or the quoted asset. Nevertheless, the sytem keeps track of target sizes in both assets. If the target is defined denominated in the base asset, then the target for the quoted asset is calculated using the current rate, and viceversa."
"text": "Both entry and exit target sizes may be defined either denominated in the base asset or the quoted asset. Nevertheless, the system keeps track of target sizes in both assets. If the target is defined denominated in the base asset, then the target for the quoted asset is calculated using the current rate, and vice versa."
},
{
"style": "Text",
@@ -12,7 +12,7 @@
},
{
"style": "Text",
"text": "Although, an opportunity to improve troubleshooting errors exists (e.g. providing more on-screen user feedback). A couple of errors occured for me during the getting started tutorials, which made my learning experience a little frustrating."
"text": "Although, an opportunity to improve troubleshooting errors exists (e.g. providing more on-screen user feedback). A couple of errors occurred for me during the getting started tutorials, which made my learning experience a little frustrating."
},
{
"style": "Text",
@@ -69,7 +69,7 @@
},
{
"style": "Text",
"text": "Same example as above but with RMA (Exponatial Moving Average) as the smoothing function."
"text": "Same example as above but with RMA (Exponential Moving Average) as the smoothing function."
}
]
}
@@ -32,7 +32,7 @@
},
{
"style": "Text",
"text": "The following is the Error Message of the Exception that occured at the Client:"
"text": "The following is the Error Message of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -44,7 +44,7 @@
},
{
"style": "Text",
"text": "The following is the Error Stack of the Exception that occured at the Client:"
"text": "The following is the Error Stack of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -56,7 +56,7 @@
},
{
"style": "Text",
"text": "The following is the Error Code of the Exception that occured at the Client:"
"text": "The following is the Error Code of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -69,7 +69,7 @@
},
{
"style": "Text",
"text": "The following are all the Error details of the Exception that occured at the Client:",
"text": "The following are all the Error details of the Exception that occurred at the Client:",
"updated": 1611154675224
},
{
@@ -58,7 +58,7 @@
},
{
"style": "Error",
"text": "Github Crendentials are Missing. The property token is missing or empty. Please create it following the guide below and try again.",
"text": "Github Credentials are Missing. The property token is missing or empty. Please create it following the guide below and try again.",
"updated": 1610559900470
},
{
@@ -32,7 +32,7 @@
},
{
"style": "Text",
"text": "The following is the Error Message of the Exception that occured at the Client:",
"text": "The following is the Error Message of the Exception that occurred at the Client:",
"updated": 1611151299633
},
{
@@ -45,7 +45,7 @@
},
{
"style": "Text",
"text": "The following is the Error Stack of the Exception that occured at the Client:",
"text": "The following is the Error Stack of the Exception that occurred at the Client:",
"updated": 1611151427220
},
{
@@ -58,7 +58,7 @@
},
{
"style": "Text",
"text": "The following is the Error Code of the Exception that occured at the Client:",
"text": "The following is the Error Code of the Exception that occurred at the Client:",
"updated": 1611151443562
},
{
@@ -71,7 +71,7 @@
},
{
"style": "Text",
"text": "The following are all the Error details of the Exception that occured at the Client:"
"text": "The following are all the Error details of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -3,7 +3,7 @@
"pageNumber": "1",
"type": "Bollinger by @luis_fernando_molina",
"definition": {
"text": "The Bollinger Data Mine features the Bollinger Bands (BB), Percentage Bandwisth (%B), Bollinger Channels, and Bollinger Subchannels indicators.",
"text": "The Bollinger Data Mine features the Bollinger Bands (BB), Percentage Bandwidth (%B), Bollinger Channels, and Bollinger Subchannels indicators.",
"updated": 1622481705188
},
"paragraphs": [
@@ -3,7 +3,7 @@
"pageNumber": "2",
"type": "Bollinger Bands (BB - %B) - Bollinger Indicator",
"definition": {
"text": "The indicator produces the Bollinger Bands (BB) and Percentage Bandwith (%B), both in standard settings.",
"text": "The indicator produces the Bollinger Bands (BB) and Percentage Bandwidth (%B), both in standard settings.",
"updated": 1610387450406
},
"paragraphs": [
@@ -3,7 +3,7 @@
"pageNumber": "3",
"type": "Switching Branches - Contributions Branch Changed",
"definition": {
"text": "Your Contributions Branch was succesfully changed. This will only have an impact the next time you run the App Contribute Command. This branch is going to receive the Pull Request with all your changes.",
"text": "Your Contributions Branch was successfully changed. This will only have an impact the next time you run the App Contribute Command. This branch is going to receive the Pull Request with all your changes.",
"updated": 1620591770153
},
"paragraphs": [
@@ -31,7 +31,7 @@
},
{
"style": "Text",
"text": "The following is the Error Message of the Exception that occured at the Client:"
"text": "The following is the Error Message of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -43,7 +43,7 @@
},
{
"style": "Text",
"text": "The following is the Error Stack of the Exception that occured at the Client:"
"text": "The following is the Error Stack of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -55,7 +55,7 @@
},
{
"style": "Text",
"text": "The following is the Error Code of the Exception that occured at the Client:"
"text": "The following is the Error Code of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -67,7 +67,7 @@
},
{
"style": "Text",
"text": "The following are all the Error details of the Exception that occured at the Client:"
"text": "The following are all the Error details of the Exception that occurred at the Client:"
},
{
"style": "Placeholder",
@@ -37,7 +37,7 @@
},
{
"style": "Text",
"text": "Use the following key combiantions for the same purpose:",
"text": "Use the following key combinations for the same purpose:",
"updated": 1610040210636
},
{
@@ -128,7 +128,7 @@
},
{
"style": "Text",
"text": "There are also keyboard shortcuts to acomplish node snapping. See Keyboard Shortcut Quick Guide page for more details.",
"text": "There are also keyboard shortcuts to accomplish node snapping. See Keyboard Shortcut Quick Guide page for more details.",
"updated": 1634915239339
},
{
@@ -137,7 +137,7 @@
},
{
"style": "Text",
"text": "Superalgos also offers a range of keyboard shortcuts to help make working with the platfom easier. You can find a list of all current shortcuts at the Keyboard Shortcut Quick Guide page.",
"text": "Superalgos also offers a range of keyboard shortcuts to help make working with the platform easier. You can find a list of all current shortcuts at the Keyboard Shortcut Quick Guide page.",
"updated": 1634915308602
},
{
@@ -3,7 +3,7 @@
"pageNumber": "3",
"type": "Value Not A Number",
"definition": {
"text": "At runtime some nodes might aquire a value, and when it is expected that the value is a number, this type of error will pop up. To avoid this to happen Make sure that at nodes that should have only numeric values, that they don't get by any means a non numeric one.",
"text": "At runtime some nodes might acquire a value, and when it is expected that the value is a number, this type of error will pop up. To avoid this to happen Make sure that at nodes that should have only numeric values, that they don't get by any means a non numeric one.",
"updated": 1611652261727
},
"paragraphs": [
Loaded 100 of 190 files, more files were not shown because too many files have changed in this diff. Show more