Merge develop --> portfolio-management
This commit and next resolve conflicts with the aforementioned merge possible unstashed new files have slipped through to p-m branch with these commits
This commit is contained in:
commit
67fccaae2d
225 files changed
+53365
-13616
No files matched your search
@@ -27,7 +27,7 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ steps.vars.outputs.tag }}.${{ steps.date.outputs.date }}
|
||||
tag_name: ${{ steps.vars.outputs.tag }}-${{ steps.date.outputs.date }}
|
||||
release_name: Superalgos-Beta-v${{ steps.vars.outputs.tag }} Snapshot ${{ steps.date.outputs.date }}
|
||||
keep_num: 5
|
||||
keep_tags: false
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@ exports.newDesktopRoot = function newDesktopRoot() {
|
||||
}
|
||||
for (let i = 0; i < SA.secrets.array.length; i++) {
|
||||
let secret = SA.secrets.array[i]
|
||||
SA.secrets.map.set (secret.signingAccountChildCodeName, secret)
|
||||
SA.secrets.map.set (secret.nodeCodeName, secret)
|
||||
}
|
||||
|
||||
run()
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ WORKDIR /app
|
||||
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 \
|
||||
&& npm ci \
|
||||
&& mkdir -p ./Platform/My-Data-Storage ./Platform/My-Log-Files ./Platform/My-Workspaces \
|
||||
&& addgroup superalgos \
|
||||
&& adduser --disabled-password --no-create-home --ingroup superalgos superalgos \
|
||||
|
||||
@@ -28,6 +28,7 @@ exports.newEnvironment = function () {
|
||||
PATH_TO_DESKTOP: './Desktop',
|
||||
PATH_TO_DEFAULT_WORKSPACE: path.join(basePath, './Projects/Foundations/Plugins/Workspaces'),
|
||||
PATH_TO_MY_WORKSPACES: path.join(basePath, './Platform/My-Workspaces'),
|
||||
PATH_TO_SECRETS: path.join(basePath, './My-Secrets'),
|
||||
PATH_TO_FONTS: path.join(basePath, './Platform/WebServer/Fonts'),
|
||||
DESKTOP_APP_SIGNING_ACCOUNT: 'Social-Trading-Desktop-App-1',
|
||||
DESKTOP_APP_MAX_OUTGOING_PEERS: 1,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const { exec, execSync } = require("child_process");
|
||||
const os = require("os");
|
||||
const os = require("os");
|
||||
|
||||
// Get the name of the main directory
|
||||
let cwd = __dirname;
|
||||
@@ -21,7 +21,7 @@ if (os.platform() == "win32") {
|
||||
// Place Shortcuts using powershell
|
||||
for (let dir of shortcutPaths) {
|
||||
let command = `$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut("${dir}"); $S.TargetPath = "${target}"; $S.IconLocation = "${icon}"; $S.Save()`;
|
||||
|
||||
|
||||
exec( command,
|
||||
{
|
||||
shell: "powershell.exe",
|
||||
@@ -52,12 +52,12 @@ if (os.platform() == "win32") {
|
||||
let icon = path.join( __dirname,"..", "/Projects/Foundations/Icons/superalgos.png");
|
||||
|
||||
// Create .desktop shortcut file
|
||||
fs.writeFileSync( `${name}.desktop`,
|
||||
fs.writeFileSync( `${name}.desktop`,
|
||||
`[Desktop Entry]
|
||||
Type=Application
|
||||
Encoding=UTF-8
|
||||
Name=${name}
|
||||
Comment=Launch Shortcut for Superalgos
|
||||
Comment=Launch Shortcut for Superalgos
|
||||
Path=${__dirname}
|
||||
Exec=gnome-terminal -e ${__dirname}/launch-linux-mac.sh
|
||||
Terminal=true
|
||||
@@ -87,20 +87,20 @@ if (os.platform() == "win32") {
|
||||
});
|
||||
|
||||
} else {
|
||||
console.log( "Automatic shortcut creation is not yet supported on your flavor of linux. If you would like to see this feature add, message @harrellbm on telegram or discord to ask how you can help!")
|
||||
console.log( "Automatic shortcut creation is not yet supported on your flavor of linux. If you would like to see this feature add, message @harrellbm on telegram or discord to ask how you can help!")
|
||||
}
|
||||
|
||||
|
||||
// Mac Shortcuts
|
||||
} else if (os.platform() == "darwin") {
|
||||
const icon = path.join( __dirname,"/superalgos.ico");
|
||||
const createShortcutCommand = `chmod +x ${name}.command & cp ${name}.command ~/Desktop/${name}.command`
|
||||
const installFileIconcommand = `npm install fileicon`;
|
||||
const installFileIconcommand = `npm install -g fileicon`;
|
||||
const changeIconCommand = `./node_modules/fileicon/bin/fileicon set ~/Desktop/${name}.command ./Launch-Scripts/superalgos.ico`
|
||||
const unInstallFileIconcommand = `npm uninstall fileicon`;
|
||||
|
||||
const unInstallFileIconcommand = `npm uninstall -g fileicon`;
|
||||
|
||||
try {
|
||||
// Create .desktop shortcut file
|
||||
fs.writeFileSync( `${name}.command`,
|
||||
fs.writeFileSync( `${name}.command`,
|
||||
`#!/bin/sh
|
||||
cd ${__dirname}
|
||||
cd ..
|
||||
@@ -113,14 +113,14 @@ if (os.platform() == "win32") {
|
||||
|
||||
// Remove temporary .command file
|
||||
fs.unlinkSync( `${name}.command` )
|
||||
|
||||
//Install fileicon utility
|
||||
|
||||
//Install fileicon utility
|
||||
execSync(installFileIconcommand, {stdio: 'inherit', timeout: 30000});
|
||||
|
||||
//change Icon
|
||||
execSync(changeIconCommand, {stdio: 'inherit', timeout: 30000});
|
||||
|
||||
//Un-Install fileicon utility
|
||||
//Un-Install fileicon utility
|
||||
execSync(unInstallFileIconcommand, {stdio: 'inherit', timeout: 30000});
|
||||
} catch (error) {
|
||||
console.log('');
|
||||
@@ -135,4 +135,4 @@ if (os.platform() == "win32") {
|
||||
// Misc Operating System
|
||||
} else {
|
||||
console.log("Automatic shortcut creation is not currently supported on your operating system. If you would like to see your operating system added please reachout on discord or telegram to let the devs know.")
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -62,7 +62,7 @@ exports.newNetworkRoot = function newNetworkRoot() {
|
||||
}
|
||||
for (let i = 0; i < SA.secrets.array.length; i++) {
|
||||
let secret = SA.secrets.array[i]
|
||||
SA.secrets.map.set(secret.signingAccountChildCodeName, secret)
|
||||
SA.secrets.map.set(secret.nodeCodeName, secret)
|
||||
}
|
||||
|
||||
NT.app = require('./Network/NetwokNode.js').newNetworkNode()
|
||||
|
||||
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Launch Program",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\..\\PlatformRoot.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"files.exclude": {
|
||||
"**/Data-Storage": true,
|
||||
"**/Log-Files": true,
|
||||
"**/node_modules": true,
|
||||
"**/My-Social-Trading-Data": true,
|
||||
"**/My-Network-Nodes-Data": true,
|
||||
"**/My-Workspaces": true,
|
||||
"**/My-Secrets": true,
|
||||
"**/My-Data-Storage": true,
|
||||
"**/My-Log-Files": true,
|
||||
},
|
||||
"search.exclude": {
|
||||
"**/Data-Storage": true,
|
||||
"**/Log-Files": true,
|
||||
"**/node_modules": true,
|
||||
"**/My-Social-Trading-Data": true,
|
||||
"**/My-Network-Nodes-Data": true,
|
||||
"**/My-Workspaces": true,
|
||||
"**/My-Secrets": true,
|
||||
"**/My-Data-Storage": true,
|
||||
"**/My-Log-Files": true,
|
||||
},
|
||||
"search.maintainFileSearchCache": true,
|
||||
"editor.mouseWheelZoom": true
|
||||
}
|
||||
@@ -4,6 +4,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
getGithubStars: getGithubStars,
|
||||
getGithubWatchers: getGithubWatchers,
|
||||
getGithubForks: getGithubForks,
|
||||
createGithubFork: createGithubFork,
|
||||
mergePullRequests: mergePullRequests,
|
||||
initialize: initialize,
|
||||
finalize: finalize,
|
||||
@@ -162,6 +163,46 @@ exports.newGithubServer = function newGithubServer() {
|
||||
}
|
||||
}
|
||||
|
||||
async function createGithubFork(token) {
|
||||
try {
|
||||
token = unescape(token)
|
||||
|
||||
await doGithub()
|
||||
|
||||
async function doGithub() {
|
||||
try {
|
||||
const { Octokit } = SA.nodeModules.octokit
|
||||
const octokit = new Octokit({
|
||||
auth: token,
|
||||
userAgent: 'Superalgos ' + SA.version
|
||||
})
|
||||
|
||||
await octokit.repos.createFork({
|
||||
owner: 'Superalgos',
|
||||
repo: 'Superalgos'
|
||||
})
|
||||
} catch (err) {
|
||||
if (err === undefined) { return }
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> doGithub -> err.stack = ' + err.stack)
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> Method call produced an error.')
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> err.stack = ' + err.stack)
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> repository = ' + repository)
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> username = ' + username)
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> token starts with = ' + token.substring(0, 10) + '...')
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> token ends with = ' + '...' + token.substring(token.length - 10))
|
||||
|
||||
let error = {
|
||||
result: 'Fail Because',
|
||||
message: err.message,
|
||||
stack: err.stack
|
||||
}
|
||||
return error
|
||||
}
|
||||
}
|
||||
|
||||
async function mergeGithubPullRequests(commitMessage, username, token) {
|
||||
try {
|
||||
commitMessage = unescape(commitMessage)
|
||||
@@ -323,6 +364,11 @@ exports.newGithubServer = function newGithubServer() {
|
||||
if (await validateUserProfileBlockchainAccountDoesNotBelongtoAnotherUserProfile() === false) { continue }
|
||||
if (await validateUserProfileSigningAccountsDoesNotBelongtoAnotherUserProfile() === false) { continue }
|
||||
|
||||
/*
|
||||
TODO: We need to check before merging a User Profile that none of id of the node of the profile hierearchy exists at any other
|
||||
User Profile already at the repository, to avoid atacts of users highjacking references of other user profiles.
|
||||
*/
|
||||
|
||||
if (await mergePullRequest() === false) {
|
||||
console.log('[WARN] Github Server -> mergeGithubPullRequests -> Merge Failed -> Pull Request "' + pullRequest.title + '" not merged because Github could not merge it. -> mergeResponse.message = ' + mergeResponse.data.message)
|
||||
} else {
|
||||
|
||||
+200
-136
@@ -139,7 +139,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
return
|
||||
}
|
||||
default: {
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify({error: 'Method ' + params.method + ' is invalid.'}), httpResponse)
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify({ error: 'Method ' + params.method + ' is invalid.' }), httpResponse)
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
@@ -325,6 +325,42 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
}
|
||||
break
|
||||
case 'Secrets': {
|
||||
switch (requestPath[2]) { // switch by command
|
||||
case 'Save-Secrets-File': {
|
||||
SA.projects.foundations.utilities.httpRequests.getRequestBody(httpRequest, httpResponse, processRequest)
|
||||
|
||||
async function processRequest(body) {
|
||||
try {
|
||||
|
||||
let filePath = global.env.PATH_TO_SECRETS + '/'
|
||||
let fileName = "Secrets.json"
|
||||
|
||||
createNewDir(filePath)
|
||||
SA.nodeModules.fs.writeFileSync(filePath + '/' + fileName, body)
|
||||
|
||||
console.log('[SUCCESS] ' + filePath + '/' + fileName + ' created.')
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse)
|
||||
|
||||
} catch (err) {
|
||||
console.log('[ERROR] httpInterface -> Secrets -> Save-Secrets-File -> Method call produced an error.')
|
||||
console.log('[ERROR] httpInterface -> Secrets -> Save-Secrets-File -> err.stack = ' + err.stack)
|
||||
console.log('[ERROR] httpInterface -> Secrets -> Save-Secrets-File -> Params Received = ' + body)
|
||||
|
||||
let error = {
|
||||
result: 'Fail Because',
|
||||
message: err.message,
|
||||
stack: err.stack
|
||||
}
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(error), httpResponse)
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
break
|
||||
case 'Docs': {
|
||||
switch (requestPath[2]) { // switch by command
|
||||
case 'Save-Node-Schema': {
|
||||
@@ -633,16 +669,6 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createNewDir(path) {
|
||||
try {
|
||||
fs.mkdirSync(path, {recursive: true})
|
||||
} catch (err) {
|
||||
if (err.message.indexOf('file already exists') < 0) {
|
||||
throw (err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return noErrorsDuringSaving
|
||||
@@ -697,7 +723,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
contribute()
|
||||
|
||||
async function contribute() {
|
||||
const {lookpath} = SA.nodeModules.lookpath
|
||||
const { lookpath } = SA.nodeModules.lookpath
|
||||
const gitpath = await lookpath('git')
|
||||
if (gitpath === undefined) {
|
||||
console.log('[ERROR] `git` not installed.')
|
||||
@@ -768,7 +794,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
async function doGithub() {
|
||||
|
||||
const {Octokit} = SA.nodeModules.octokit
|
||||
const { Octokit } = SA.nodeModules.octokit
|
||||
|
||||
const octokit = new Octokit({
|
||||
auth: token,
|
||||
@@ -832,7 +858,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
update()
|
||||
|
||||
async function update() {
|
||||
const {lookpath} = SA.nodeModules.lookpath
|
||||
const { lookpath } = SA.nodeModules.lookpath
|
||||
const gitpath = await lookpath('git');
|
||||
if (gitpath === undefined) {
|
||||
console.log('[ERROR] `git` not installed.')
|
||||
@@ -873,11 +899,11 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
let message
|
||||
try {
|
||||
message = await git.pull('https://github.com/Superalgos/Superalgos', currentBranch)
|
||||
return {message: message}
|
||||
return { message: message }
|
||||
} catch (err) {
|
||||
console.log('[ERROR] Error updating ' + currentBranch)
|
||||
console.log(err.stack)
|
||||
return {error: err}
|
||||
return { error: err }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -903,7 +929,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
checkout()
|
||||
|
||||
async function checkout() {
|
||||
const {lookpath} = SA.nodeModules.lookpath
|
||||
const { lookpath } = SA.nodeModules.lookpath
|
||||
const gitpath = await lookpath('git');
|
||||
if (gitpath === undefined) {
|
||||
console.log('[ERROR] `git` not installed.')
|
||||
@@ -1001,7 +1027,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
branch()
|
||||
|
||||
async function branch() {
|
||||
const {lookpath} = SA.nodeModules.lookpath
|
||||
const { lookpath } = SA.nodeModules.lookpath
|
||||
const gitpath = await lookpath('git');
|
||||
if (gitpath === undefined) {
|
||||
console.log('[ERROR] `git` not installed.')
|
||||
@@ -1135,7 +1161,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
try {
|
||||
console.log('fixSchemas...' + allAppSchemas.length)
|
||||
let projects = SA.projects.foundations.utilities.filesAndDirectories.getDirectories(global.env.PATH_TO_PROJECTS)
|
||||
const fs = SA.nodeModules.fs
|
||||
//const fs = SA.nodeModules.fs
|
||||
let needFixing = 0
|
||||
for (let i = 0; i < allAppSchemas.length; i++) {
|
||||
let schemaDocument = allAppSchemas[i]
|
||||
@@ -1183,13 +1209,13 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
}
|
||||
|
||||
if (wasUpdated === true) {
|
||||
let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
let filePath = allAppSchemasFilePaths[i]
|
||||
//if (wasUpdated === true) {
|
||||
//let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
//let filePath = allAppSchemasFilePaths[i]
|
||||
//console.log('Saving File at ' + filePath)
|
||||
//console.log(fileContent)
|
||||
//fs.writeFileSync(filePath, fileContent)
|
||||
}
|
||||
//}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err.stack)
|
||||
@@ -1286,6 +1312,15 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
return
|
||||
}
|
||||
case 'createGithubFork': {
|
||||
|
||||
let serverResponse = await PL.servers.GITHUB_SERVER.createGithubFork(
|
||||
params.token
|
||||
)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
return
|
||||
}
|
||||
case 'mergePullRequests': {
|
||||
|
||||
let serverResponse = await PL.servers.GITHUB_SERVER.mergePullRequests(
|
||||
@@ -1318,8 +1353,21 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
let error
|
||||
|
||||
await checkFork()
|
||||
await updateUser()
|
||||
|
||||
async function checkFork() {
|
||||
let serverResponse = await PL.servers.GITHUB_SERVER.createGithubFork(
|
||||
params.token
|
||||
)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
|
||||
if(error != undefined) {
|
||||
console.log('[ERROR] httpInterface -> Gov -> createFork -> You already have a fork. Good for you!')
|
||||
}
|
||||
}
|
||||
|
||||
async function updateUser() {
|
||||
|
||||
await doGithubUser()
|
||||
@@ -1343,7 +1391,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
async function doGithubUser() {
|
||||
|
||||
const {Octokit} = SA.nodeModules.octokit
|
||||
const { Octokit } = SA.nodeModules.octokit
|
||||
|
||||
const octokit = new Octokit({
|
||||
auth: token,
|
||||
@@ -1353,8 +1401,14 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
const repo = 'Superalgos'
|
||||
const owner = 'Superalgos'
|
||||
const head = username + ':' + contributionsBranch
|
||||
const base = currentBranch
|
||||
const title = 'Contribution: ' + mess
|
||||
//const base = currentBranch
|
||||
let base = undefined
|
||||
if (process.env.SA_MODE === 'gitDisable') {
|
||||
base = 'develop'
|
||||
} else {
|
||||
base = currentBranch
|
||||
}
|
||||
const title = 'Governance: ' + mess
|
||||
const path = 'Projects/Governance/Plugins/User-Profiles/' + username + '.json';
|
||||
|
||||
const sha = await getSHA(path);
|
||||
@@ -1429,11 +1483,11 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
async function getSHA(path) {
|
||||
let sha = ''
|
||||
const {graphql} = SA.nodeModules.graphql
|
||||
const { graphql } = SA.nodeModules.graphql
|
||||
|
||||
try {
|
||||
|
||||
const {repository} = await graphql(
|
||||
const { repository } = await graphql(
|
||||
'{ ' +
|
||||
' repository(name: "SuperAlgos", owner: "' + username + '") {' +
|
||||
' object(expression: "develop:' + path + '") {' +
|
||||
@@ -1518,7 +1572,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
return
|
||||
}
|
||||
default: {
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify({error: 'Method ' + params.method + ' is invalid.'}), httpResponse)
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify({ error: 'Method ' + params.method + ' is invalid.' }), httpResponse)
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
@@ -1549,132 +1603,132 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
break
|
||||
case 'Images': // This means the Images folder.
|
||||
{
|
||||
let path = global.env.PATH_TO_PLATFORM + '/WebServer/Images/' + requestPath[2]
|
||||
{
|
||||
let path = global.env.PATH_TO_PLATFORM + '/WebServer/Images/' + requestPath[2]
|
||||
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
break
|
||||
case 'Icons': // This means the Icons folder under Projects.
|
||||
{
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + requestPath[2] + '/Icons'
|
||||
{
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + requestPath[2] + '/Icons'
|
||||
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
break
|
||||
case 'GIFs': // This means the GIFs folder under Projects.
|
||||
{
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + requestPath[2] + '/GIFs'
|
||||
{
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + requestPath[2] + '/GIFs'
|
||||
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
break
|
||||
case 'PNGs': // This means the PNGs folder under Projects.
|
||||
{
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + requestPath[2] + '/PNGs'
|
||||
{
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + requestPath[2] + '/PNGs'
|
||||
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
if (requestPath[3] !== undefined) {
|
||||
path = path + '/' + requestPath[3]
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
|
||||
if (requestPath[4] !== undefined) {
|
||||
path = path + '/' + requestPath[4]
|
||||
}
|
||||
|
||||
if (requestPath[5] !== undefined) {
|
||||
path = path + '/' + requestPath[5]
|
||||
}
|
||||
|
||||
path = unescape(path)
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithImage(path, httpResponse)
|
||||
}
|
||||
break
|
||||
case 'WebServer': // This means the WebServer folder.
|
||||
{
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_PLATFORM + '/WebServer/' + requestPath[2], httpResponse)
|
||||
}
|
||||
{
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_PLATFORM + '/WebServer/' + requestPath[2], httpResponse)
|
||||
}
|
||||
break
|
||||
case 'externalScripts': // This means the WebServer folder.
|
||||
{
|
||||
// This allows to have sub-folders in externalScripts
|
||||
let fullPath = ''
|
||||
for (let i = 2; i < requestPath.length; i++) {
|
||||
fullPath += requestPath[i]
|
||||
if (i !== requestPath.length - 1) {
|
||||
fullPath += '/'
|
||||
{
|
||||
// This allows to have sub-folders in externalScripts
|
||||
let fullPath = ''
|
||||
for (let i = 2; i < requestPath.length; i++) {
|
||||
fullPath += requestPath[i]
|
||||
if (i !== requestPath.length - 1) {
|
||||
fullPath += '/'
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sometimes libs will call fonts/images etc. by themselves thus we should have a filter for file type to respond with the correct content and headers, but from the externalScripts folder
|
||||
* This code should be improved when needed with specific file types
|
||||
*/
|
||||
|
||||
let requestedFileExtension = requestPath[requestPath.length - 1].split('.').pop()
|
||||
switch (requestedFileExtension) {
|
||||
case 'otf':
|
||||
case 'ttf':
|
||||
case 'eot':
|
||||
case 'woff':
|
||||
case 'woff2':
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFont(global.env.PATH_TO_PLATFORM + '/WebServer/externalScripts/' + fullPath, httpResponse)
|
||||
break
|
||||
default:
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_PLATFORM + '/WebServer/externalScripts/' + fullPath, httpResponse)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sometimes libs will call fonts/images etc. by themselves thus we should have a filter for file type to respond with the correct content and headers, but from the externalScripts folder
|
||||
* This code should be improved when needed with specific file types
|
||||
*/
|
||||
|
||||
let requestedFileExtension = requestPath[requestPath.length - 1].split('.').pop()
|
||||
switch (requestedFileExtension) {
|
||||
case 'otf':
|
||||
case 'ttf':
|
||||
case 'eot':
|
||||
case 'woff':
|
||||
case 'woff2':
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFont(global.env.PATH_TO_PLATFORM + '/WebServer/externalScripts/' + fullPath, httpResponse)
|
||||
break
|
||||
default:
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_PLATFORM + '/WebServer/externalScripts/' + fullPath, httpResponse)
|
||||
}
|
||||
|
||||
}
|
||||
break
|
||||
case 'Plotters': // This means the plotter folder, not to be confused with the Plotters script!
|
||||
{
|
||||
let project = requestPath[2]
|
||||
let dataMine = requestPath[3]
|
||||
let codeName = requestPath[4]
|
||||
let moduleName = requestPath[5]
|
||||
let filePath = global.env.PATH_TO_PROJECTS + '/' + project + '/' + 'Bots-Plotters-Code' + '/' + dataMine + '/plotters/' + codeName + '/' + moduleName
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFile(filePath, httpResponse)
|
||||
}
|
||||
{
|
||||
let project = requestPath[2]
|
||||
let dataMine = requestPath[3]
|
||||
let codeName = requestPath[4]
|
||||
let moduleName = requestPath[5]
|
||||
let filePath = global.env.PATH_TO_PROJECTS + '/' + project + '/' + 'Bots-Plotters-Code' + '/' + dataMine + '/plotters/' + codeName + '/' + moduleName
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFile(filePath, httpResponse)
|
||||
}
|
||||
break
|
||||
case 'ChartLayers': {
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithFile(global.env.PATH_TO_PLATFORM + '/UI/' + endpointOrFile + '/' + requestPath[2], httpResponse)
|
||||
@@ -1872,8 +1926,8 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
fileName
|
||||
)
|
||||
.then(response => {
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(response, httpResponse)
|
||||
}
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(response, httpResponse)
|
||||
}
|
||||
)
|
||||
.catch(err => {
|
||||
let error = {
|
||||
@@ -2053,7 +2107,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
/* Create Dir if it does not exist */
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir, {recursive: true});
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
|
||||
fs.writeFile(filePath, fileContent, onFileWritten)
|
||||
@@ -2197,4 +2251,14 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createNewDir(path) {
|
||||
try {
|
||||
SA.nodeModules.fs.mkdirSync(path, { recursive: true })
|
||||
} catch (err) {
|
||||
if (err.message.indexOf('file already exists') < 0) {
|
||||
throw (err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 9.7 KiB |
@@ -42,6 +42,15 @@
|
||||
try {
|
||||
drawSplashText()
|
||||
loadSuperalgos()
|
||||
window.api.receive('fromMaster', (data) => {
|
||||
if(data.newUser){
|
||||
UI.projects.foundations.spaces.designSpace.workspace.replaceWorkspaceByLoadingOne(data.newUser[0], data.newUser[1])
|
||||
}else if(data.submit){
|
||||
UI.projects.governance.spaces.reportsSpace.commandInterface.command = data.submit[0]
|
||||
UI.projects.governance.spaces.reportsSpace.commandInterface.detectCommands()
|
||||
//const element = document.getElementsByClassName("governance-filter-input")[0]
|
||||
}
|
||||
})
|
||||
} catch (err) {
|
||||
console.log("[ERROR] UI can not be started. Please check that WebServer is running.", err);
|
||||
}
|
||||
@@ -66,6 +75,13 @@
|
||||
|
||||
function drawSplashText() {
|
||||
const splashTextArray = [
|
||||
{
|
||||
"splashTextLine1Html": '<span class="credits-red">Every month, 10M SA tokens, with a market value of more than 500,000 USD are distributed between everyone contributing to the project during that month. </span>'
|
||||
,
|
||||
"splashTextLine2Html": 'In October 2021 we counted around 50 contributors, with an average mining reward of 10,000 USD for each one. Contributing to Superalgos now is like mining Bitcoin in 2010 where there were no more than 50 people mining it. Ask the community moderators how to join a team an participate in the next distribution.'
|
||||
,
|
||||
"splashTextLine3Html": ''
|
||||
} /*,
|
||||
{
|
||||
"splashTextLine1Html": '<span class="credits-red">Superalgos is open source, forever free for everyone, and is constantly improving thanks to the involvement of contributors!</span>'
|
||||
,
|
||||
@@ -107,7 +123,7 @@
|
||||
"splashTextLine2Html": 'Look around, find something that is missing and start coding! If you need help, ask in the chat groups to find a mentor!'
|
||||
,
|
||||
"splashTextLine3Html": 'Follow our motto: Just code it!'
|
||||
}
|
||||
} */
|
||||
]
|
||||
|
||||
let arrayIndex = Math.trunc(Math.random() * splashTextArray.length)
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -17,7 +17,7 @@
|
||||
"situations": [
|
||||
{
|
||||
"type": "Situation",
|
||||
"name": "EMA crossover",
|
||||
"name": "Crossover",
|
||||
"project": "Foundations",
|
||||
"conditions": [
|
||||
{
|
||||
@@ -27,17 +27,17 @@
|
||||
"javascriptCode": {
|
||||
"type": "Javascript Code",
|
||||
"name": "New Javascript Code",
|
||||
"code": "chart.at01hs.EMA.previous.ema1 < chart.at01hs.EMA.previous.ema2",
|
||||
"code": "chart.at01hs.EMA.ema1 > chart.at01hs.EMA.ema2 && chart.at01hs.EMA.previous.ema1 < chart.at01hs.EMA.previous.ema2",
|
||||
"project": "Foundations",
|
||||
"id": "c4e9205d-5729-4c06-92ab-6c48ca195f9b",
|
||||
"id": "eac8aa9b-2ead-4376-8ea2-aaf1a276c568",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 29767.05237465183,
|
||||
"y": 30529.07127139445
|
||||
"x": 30145.01097090622,
|
||||
"y": 29906.8528149571
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30066.6412350782,
|
||||
"y": 30513.370484521565
|
||||
"x": 30357.143005262184,
|
||||
"y": 30118.984849313063
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -52,71 +52,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "3a2d3669-04fb-43dc-9f4f-1fc14643dec3",
|
||||
"id": "9d9ff49e-cb3b-4f2c-a562-3d33beb8fe32",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30066.6412350782,
|
||||
"y": 30513.370484521565
|
||||
"x": 30357.143005262184,
|
||||
"y": 30118.984849313063
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30366.230095504572,
|
||||
"y": 30497.669697648682
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Condition",
|
||||
"name": "Crossover",
|
||||
"code": "chart.at24hs.Fisher.begin > chart.at24hs.Fisher.begin",
|
||||
"project": "Foundations",
|
||||
"javascriptCode": {
|
||||
"type": "Javascript Code",
|
||||
"name": "New Javascript Code",
|
||||
"code": "chart.at01hs.EMA.ema1 > chart.at01hs.EMA.ema2",
|
||||
"project": "Foundations",
|
||||
"id": "b7f0dd1f-4d65-417a-b815-0fe0b138229e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30039.446674495557,
|
||||
"y": 29994.46735688143
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30202.838385000065,
|
||||
"y": 30246.068527265055
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "8dbc8bd5-b3a9-48b5-945b-881bf38b216b",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30202.838385000065,
|
||||
"y": 30246.068527265055
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30366.230095504572,
|
||||
"y": 30497.669697648682
|
||||
"x": 30569.275039618147,
|
||||
"y": 30331.116883669027
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -132,7 +76,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "66bd082e-2824-46c5-9791-d650ca28276d",
|
||||
"id": "567cfdbe-b067-4990-9611-dbfba9b9a793",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30569.275039618147,
|
||||
@@ -145,7 +89,7 @@
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
@@ -157,7 +101,7 @@
|
||||
}
|
||||
],
|
||||
"announcements": [],
|
||||
"id": "e6cb0b5d-da60-4cf1-9d0a-cce48aacdfdb",
|
||||
"id": "fc232171-151c-471b-a0b8-6ad2f7cb6adf",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30781.40707397411,
|
||||
@@ -186,7 +130,7 @@
|
||||
"situations": [
|
||||
{
|
||||
"type": "Situation",
|
||||
"name": "EMA Crossunder",
|
||||
"name": "Crossunder",
|
||||
"project": "Foundations",
|
||||
"conditions": [
|
||||
{
|
||||
@@ -195,17 +139,17 @@
|
||||
"project": "Foundations",
|
||||
"javascriptCode": {
|
||||
"type": "Javascript Code",
|
||||
"code": "chart.at01hs.EMA.ema1 < chart.at01hs.EMA.ema2",
|
||||
"code": "chart.at01hs.EMA.ema1 < chart.at01hs.EMA.ema2 && chart.at01hs.EMA.previous.ema1 > chart.at01hs.EMA.previous.ema2",
|
||||
"project": "Foundations",
|
||||
"id": "b4730ec2-fbc3-4b6c-b36e-71f1d4a5816e",
|
||||
"id": "f47f7cc3-395f-4a45-9e6e-21f02a522e3a",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30128.535252952344,
|
||||
"y": 30074.683073224664
|
||||
"x": 30993.539108330075,
|
||||
"y": 29555.380952380954
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30421.979533172485,
|
||||
"y": 30137.05658046999
|
||||
"x": 30993.539108330075,
|
||||
"y": 29855.380952380954
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -220,70 +164,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "7dde214e-8ecf-4541-bdab-9768c8236f65",
|
||||
"id": "13378aa9-2623-4f2b-a300-158a35bf46d6",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30421.979533172485,
|
||||
"y": 30137.05658046999
|
||||
"x": 30993.539108330075,
|
||||
"y": 29855.380952380954
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30715.423813392626,
|
||||
"y": 30199.43008771532
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Condition",
|
||||
"name": "New Condition",
|
||||
"project": "Foundations",
|
||||
"javascriptCode": {
|
||||
"type": "Javascript Code",
|
||||
"name": "New Javascript Code",
|
||||
"code": "chart.at01hs.EMA.previous.ema1 > chart.at01hs.EMA.previous.ema2",
|
||||
"project": "Foundations",
|
||||
"id": "82a1f178-10f4-4d9f-a41c-56f6e0cab768",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31116.902177207943,
|
||||
"y": 29753.543192428882
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30916.162995300285,
|
||||
"y": 29976.4866400721
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "f5c13131-c464-4510-9648-38be2d1905a5",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30916.162995300285,
|
||||
"y": 29976.4866400721
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 30715.423813392626,
|
||||
"y": 30199.43008771532
|
||||
"x": 30993.539108330075,
|
||||
"y": 30155.380952380954
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -299,7 +188,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "7f57d1a7-6c2f-4483-a3cc-2c04cb187cf3",
|
||||
"id": "2f91ed82-f85d-4b30-b255-465382b39a6f",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30993.539108330075,
|
||||
@@ -312,7 +201,7 @@
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 3,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
@@ -324,7 +213,7 @@
|
||||
}
|
||||
],
|
||||
"announcements": [],
|
||||
"id": "b2e64101-d51b-4c7b-9cd7-11df40ec6169",
|
||||
"id": "0e26f382-b651-4f73-98a3-90e154012560",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30993.539108330075,
|
||||
@@ -365,7 +254,7 @@
|
||||
"name": "New Javascript Code",
|
||||
"code": "true",
|
||||
"project": "Foundations",
|
||||
"id": "108efe9b-0e78-4650-95fa-5f47ea4566c3",
|
||||
"id": "b88c81e8-4f12-46bc-9d3f-2be795784a46",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31445.622609705046,
|
||||
@@ -388,7 +277,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "5c513fb3-8787-41ba-87e9-09e2611b26ae",
|
||||
"id": "8a94a57d-7752-4eb7-ac6c-587af40cef77",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31309.425459783182,
|
||||
@@ -412,7 +301,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "7be78fed-0640-4023-910b-b1404f16bd3a",
|
||||
"id": "ef049a10-10d0-4cd0-8174-b114c669860b",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31173.22830986132,
|
||||
@@ -437,7 +326,7 @@
|
||||
}
|
||||
],
|
||||
"announcements": [],
|
||||
"id": "09472203-67ee-4eba-ac2f-1f3cb48226df",
|
||||
"id": "6f7e0b1f-883b-4e9f-a997-4e531da4eb41",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31205.67114268604,
|
||||
@@ -461,7 +350,7 @@
|
||||
}
|
||||
},
|
||||
"announcements": [],
|
||||
"id": "e4f2b5cb-2cb8-4619-9de3-c066aaa1a214",
|
||||
"id": "829fe6d9-f8e8-44a7-8175-a884132e7497",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30993.539108330075,
|
||||
@@ -502,7 +391,7 @@
|
||||
"name": "Entry Target Rate",
|
||||
"code": "tradingEngine.tradingCurrent.tradingEpisode.candle.close.value",
|
||||
"project": "Foundations",
|
||||
"id": "f8736b16-edde-45a2-b565-49673a3d524e",
|
||||
"id": "3c57e8dc-6924-48b4-8275-3345e2535577",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31853.346729465407,
|
||||
@@ -525,7 +414,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "db001dc4-af5f-4059-a17c-0ce7c5583f78",
|
||||
"id": "934af723-db70-4eb3-bc63-1439c7669173",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31703.346729465407,
|
||||
@@ -557,7 +446,7 @@
|
||||
"name": "Target Size in Quoted Asset",
|
||||
"code": "tradingEngine.tradingCurrent.tradingEpisode.episodeQuotedAsset.balance.value\n",
|
||||
"project": "Foundations",
|
||||
"id": "c45c5654-232e-4ebe-a0eb-8103901a3fb6",
|
||||
"id": "801ccf6e-6b49-4433-8f3d-f6217c6caab7",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 32153.346729465407,
|
||||
@@ -580,7 +469,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "726c5b24-7420-4496-84fb-9ada5054e1b3",
|
||||
"id": "40607c04-0955-4e90-9367-d4a26806833a",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31853.346729465407,
|
||||
@@ -603,7 +492,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "1350ac22-df5a-422e-bce3-771e15a3c75f",
|
||||
"id": "298964cc-3b37-4019-b576-6f9a96b1dacd",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31553.346729465407,
|
||||
@@ -640,7 +529,7 @@
|
||||
{
|
||||
"type": "Market Buy Order",
|
||||
"name": "New Market Buy Order",
|
||||
"config": "{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}",
|
||||
"config": "{\n\"percentageOfAlgorithmSize\": 20, \n\"spawnMultipleOrders\": true \n}",
|
||||
"project": "Foundations",
|
||||
"createOrderEvent": {
|
||||
"type": "Create Order Event",
|
||||
@@ -659,9 +548,9 @@
|
||||
"javascriptCode": {
|
||||
"type": "Javascript Code",
|
||||
"name": "New Javascript Code",
|
||||
"code": "chart.at01hs.WEMAsignal.signal > 0.5 && chart.at01hs.WEMAsignal.signal >= chart.at01hs.WEMAsignal.previous.signal",
|
||||
"code": "chart.at01hs.WEMAsignal.signal >= 0.5 ",
|
||||
"project": "Foundations",
|
||||
"id": "8596b4b4-d567-4c5d-868e-65e6688c5e70",
|
||||
"id": "05bd7461-7d39-4620-ad3e-62ca086103c7",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 33112.1924562774,
|
||||
@@ -684,7 +573,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "71d536ee-8221-4903-981e-03e98374cbb8",
|
||||
"id": "8b212c49-db16-4604-ab38-c75386fe0ae8",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 32852.38483514207,
|
||||
@@ -708,7 +597,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "cc73b406-6cb8-45cd-9173-4565e2355337",
|
||||
"id": "602edc66-1cda-4517-80b0-8b70b8e837cd",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 32592.57721400674,
|
||||
@@ -733,7 +622,7 @@
|
||||
}
|
||||
],
|
||||
"announcements": [],
|
||||
"id": "4874e11f-9b13-4da0-ba2f-a48b6e50ab89",
|
||||
"id": "c155e10a-1cc7-48e6-b1f0-a8bd33f39710",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 32332.769592871406,
|
||||
@@ -756,7 +645,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "321a9446-757c-4f6b-bd08-b251cc5743dc",
|
||||
"id": "9790e36e-c011-420a-b37b-02411270d505",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 32072.961971736073,
|
||||
@@ -814,7 +703,7 @@
|
||||
"marketSellOrders": [],
|
||||
"limitBuyOrders": [],
|
||||
"limitSellOrders": [],
|
||||
"id": "9b82b9ad-205e-4bea-82ca-c51ba13e8a31",
|
||||
"id": "bca241c1-d104-4f57-82cf-910871e45362",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31813.15435060074,
|
||||
@@ -839,7 +728,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "ccf4976a-236f-4856-9061-bde952db5e57",
|
||||
"id": "66b8730e-850a-4a29-a205-5a81725e93b7",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31553.346729465407,
|
||||
@@ -863,7 +752,7 @@
|
||||
}
|
||||
},
|
||||
"announcements": [],
|
||||
"id": "2b77a85e-6bb5-4c68-997c-c9fce2b84388",
|
||||
"id": "9059702a-8b3a-47e2-a0a6-c2bd0e4397a8",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31293.539108330075,
|
||||
@@ -903,7 +792,7 @@
|
||||
"name": "Target Rate Formula",
|
||||
"code": "tradingEngine.tradingCurrent.tradingEpisode.candle.close.value",
|
||||
"project": "Foundations",
|
||||
"id": "08cd7f3b-d747-44c5-a69e-99303464414f",
|
||||
"id": "699d2c78-c689-4b1c-baad-43256bdfa585",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31663.15435060074,
|
||||
@@ -926,7 +815,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "10599ce9-11ac-4093-b633-fd8b9665d991",
|
||||
"id": "fe062d57-7da6-4773-bfec-5809514f3c66",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31403.346729465407,
|
||||
@@ -958,7 +847,7 @@
|
||||
"name": "New Formula",
|
||||
"code": "tradingEngine.tradingCurrent.tradingEpisode.episodeBaseAsset.balance.value",
|
||||
"project": "Foundations",
|
||||
"id": "50bc8bac-b0e4-462c-85c1-3767a4e5076f",
|
||||
"id": "20b4c043-a62c-458c-b0dd-9d9f0fe8e5a9",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31143.539108330075,
|
||||
@@ -981,7 +870,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "ba2f4863-486a-4215-a8dd-dac6b357c439",
|
||||
"id": "c89cb5c4-d81c-4232-8086-c3fcfc1b2c48",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31143.539108330075,
|
||||
@@ -1004,7 +893,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "aedbcfb2-3a10-4f76-ad0f-67d6952d6cb7",
|
||||
"id": "558b4a55-7cbd-4794-a3ad-009015aca2f3",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 31143.539108330075,
|
||||
@@ -1041,7 +930,7 @@
|
||||
{
|
||||
"type": "Market Sell Order",
|
||||
"name": "New Market Sell Order",
|
||||
"config": "{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}",
|
||||
"config": "{\n\"percentageOfAlgorithmSize\": 20, \n\"spawnMultipleOrders\": true \n}",
|
||||
"project": "Foundations",
|
||||
"createOrderEvent": {
|
||||
"type": "Create Order Event",
|
||||
@@ -1060,9 +949,9 @@
|
||||
"javascriptCode": {
|
||||
"type": "Javascript Code",
|
||||
"name": "New Javascript Code",
|
||||
"code": "chart.at01hs.WEMAsignal.previous.signal >= 0.5 && chart.at01hs.WEMAsignal.signal < 0.5",
|
||||
"code": "chart.at01hs.WEMAsignal.signal < 0.5",
|
||||
"project": "Foundations",
|
||||
"id": "d129d107-2206-4230-adaf-4976981c397d",
|
||||
"id": "e1fe9c08-832a-4411-9a46-19dad548583e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30626.476248922347,
|
||||
@@ -1085,7 +974,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "197420ae-f425-41ac-b4b4-d10a61c964ba",
|
||||
"id": "ad126cf6-3be8-431c-9221-d23ed5a9b318",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30548.83053539159,
|
||||
@@ -1109,7 +998,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "f1ba99a2-6819-44b5-9087-a24855b4b48a",
|
||||
"id": "e801551a-f69e-4433-bcf4-070b750fa909",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30471.184821860832,
|
||||
@@ -1144,9 +1033,9 @@
|
||||
"javascriptCode": {
|
||||
"type": "Javascript Code",
|
||||
"name": "New Javascript Code",
|
||||
"code": "tradingEngine.tradingCurrent.tradingEpisode.candle.close.value >= tradingEngine.tradingCurrent.position.entryTargetRate.value * 1.30",
|
||||
"code": "tradingEngine.tradingCurrent.tradingEpisode.candle.close.value >= tradingEngine.tradingCurrent.position.entryTargetRate.value * 1.17",
|
||||
"project": "Foundations",
|
||||
"id": "67ae2544-d4ec-4fcd-beaa-6768984bbf48",
|
||||
"id": "f6578611-b4d5-4cb8-84a5-af567b367c55",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 29943.539108330075,
|
||||
@@ -1169,7 +1058,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "03b9f164-f638-41c7-ad06-94cfeca007e7",
|
||||
"id": "ed0fb6c0-acf8-402f-9b62-21f9f6a2d204",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30093.539108330075,
|
||||
@@ -1193,7 +1082,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "3a2b7b7d-36a4-42d4-9147-4112115c53f7",
|
||||
"id": "9f1e5745-3edc-4c75-96a7-806c90146778",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30243.539108330075,
|
||||
@@ -1230,7 +1119,7 @@
|
||||
"name": "New Javascript Code",
|
||||
"code": "tradingEngine.tradingCurrent.tradingEpisode.candle.close.value < 0.99 * tradingEngine.tradingCurrent.position.entryTargetRate.value",
|
||||
"project": "Foundations",
|
||||
"id": "2b58539e-d6c9-4c81-aa81-d0f6d762f8f8",
|
||||
"id": "49d2a48c-caab-4ce6-9430-809c9f68345d",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 29524.20586466991,
|
||||
@@ -1253,7 +1142,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "55eb23dc-b9c8-4ed3-be4b-cceee33097ce",
|
||||
"id": "caaf0c1e-4faa-439c-b80e-53ffa2774540",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 29813.983612556633,
|
||||
@@ -1277,7 +1166,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "ce8433b3-1764-477d-b7fe-cb37c3e21f6c",
|
||||
"id": "e8fe9bbc-b9d8-4177-b291-e1e88952ea07",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30103.761360443354,
|
||||
@@ -1302,7 +1191,7 @@
|
||||
}
|
||||
],
|
||||
"announcements": [],
|
||||
"id": "7d35f880-508f-4de0-b8b4-1779fd3f85d0",
|
||||
"id": "fd3e6184-de9d-440d-8d1b-cc0f68f227bf",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30393.539108330075,
|
||||
@@ -1325,7 +1214,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "208a3dfa-fd43-4d88-97e9-cd72b9b7cf13",
|
||||
"id": "bacbbd95-ce0d-49de-9991-4820ea678296",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30543.539108330075,
|
||||
@@ -1382,7 +1271,7 @@
|
||||
],
|
||||
"limitBuyOrders": [],
|
||||
"limitSellOrders": [],
|
||||
"id": "e628be12-6c65-4c84-87f1-93b9743e3ff3",
|
||||
"id": "abf3b874-e889-4735-bb49-6e3cf7b0dbd1",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30693.539108330075,
|
||||
@@ -1406,7 +1295,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "e05fc323-fde9-4b43-9559-fb88abf5f3e3",
|
||||
"id": "d070d00a-5728-4ff7-8763-95e52e7eee86",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30843.539108330075,
|
||||
@@ -1430,7 +1319,7 @@
|
||||
}
|
||||
},
|
||||
"announcements": [],
|
||||
"id": "be7862dd-f241-4b73-9faf-ca0fb9bee6b7",
|
||||
"id": "392a1c94-23e2-45ac-bc59-f10284ec2f16",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30993.539108330075,
|
||||
@@ -1453,7 +1342,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "85ed96f4-8744-43ce-a7ca-d7277f3e8183",
|
||||
"id": "889d297a-c62d-4fcb-b7bc-1e6526111891",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30993.539108330075,
|
||||
@@ -1466,7 +1355,7 @@
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
@@ -1477,7 +1366,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"id": "e9a1f6f4-7f43-4355-921e-a4f24375de5f",
|
||||
"id": "9e13804e-0aca-4773-960a-fbe37184f0c6",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 30693.539108330075,
|
||||
|
||||
+1
-1
@@ -150,7 +150,7 @@ exports.newAlgorithmicTradingBotModulesSnapshots = function(processIndex) {
|
||||
}
|
||||
|
||||
/* Now we go down through all this node children */
|
||||
let schemaDocument = TS.projects.foundations.globals.taskConstants.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
let schemaDocument = SA.projects.foundations.globals.schemas.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
if (schemaDocument === undefined) { return }
|
||||
|
||||
if (schemaDocument.childrenNodesProperties !== undefined) {
|
||||
|
||||
+3
-3
@@ -112,7 +112,7 @@ exports.newAlgorithmicTradingBotModulesTradingEngine = function (processIndex) {
|
||||
destinationNode.value = originNode.value
|
||||
|
||||
/* Now we go down through all the children of the origin node, assuming the destination node has the same children structure*/
|
||||
let schemaDocument = TS.projects.foundations.globals.taskConstants.APP_SCHEMA_MAP.get(originNode.project + '-' + originNode.type)
|
||||
let schemaDocument = SA.projects.foundations.globals.schemas.APP_SCHEMA_MAP.get(originNode.project + '-' + originNode.type)
|
||||
if (schemaDocument === undefined) { return }
|
||||
|
||||
if (schemaDocument.childrenNodesProperties !== undefined) {
|
||||
@@ -151,7 +151,7 @@ exports.newAlgorithmicTradingBotModulesTradingEngine = function (processIndex) {
|
||||
nodesMap.set(node.id, node)
|
||||
|
||||
/* Now we go down through all this node children */
|
||||
let schemaDocument = TS.projects.foundations.globals.taskConstants.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
let schemaDocument = SA.projects.foundations.globals.schemas.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
if (schemaDocument === undefined) { return }
|
||||
|
||||
if (schemaDocument.childrenNodesProperties !== undefined) {
|
||||
@@ -194,7 +194,7 @@ exports.newAlgorithmicTradingBotModulesTradingEngine = function (processIndex) {
|
||||
}
|
||||
|
||||
/* Now we go down through all this node children */
|
||||
let schemaDocument = TS.projects.foundations.globals.taskConstants.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
let schemaDocument = SA.projects.foundations.globals.schemas.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
if (schemaDocument === undefined) { return }
|
||||
|
||||
if (schemaDocument.childrenNodesProperties !== undefined) {
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ exports.newAlgorithmicTradingBotModulesTradingOutput = function (processIndex) {
|
||||
/* Preparing everything for the Simulation */
|
||||
let tradingSimulationModuleObject = TS.projects.algorithmicTrading.botModules.tradingSimulation.newAlgorithmicTradingBotModulesTradingSimulation(processIndex)
|
||||
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasetsMap = new Map()
|
||||
|
||||
await TS.projects.foundations.functionLibraries.outputManagementFunctions.readFiles(
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ exports.newAlgorithmicTradingBotModulesTradingRecords = function (processIndex)
|
||||
we have a pointer to the node that have the information we need to extract.
|
||||
Later, based on the product record definition we will extract each individual value.
|
||||
*/
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
|
||||
for (let i = 0; i < outputDatasets.length; i++) {
|
||||
let outputDatasetNode = outputDatasets[i]
|
||||
|
||||
+2
-2
@@ -372,8 +372,8 @@ exports.newAlgorithmicTradingBotModulesTradingSimulation = function (processInde
|
||||
}
|
||||
|
||||
function positionChart(chart) {
|
||||
let dataDependencies = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processDependencies, 'Data Dependency')
|
||||
dataDependencies = TS.projects.visualScripting.utilities.nodeFunctions.filterOutNodeWihtoutReferenceParentFromNodeArray(dataDependencies)
|
||||
let dataDependencies = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processDependencies, 'Data Dependency')
|
||||
dataDependencies = SA.projects.visualScripting.utilities.nodeFunctions.filterOutNodeWihtoutReferenceParentFromNodeArray(dataDependencies)
|
||||
|
||||
/* Finding the Current Element on Daily Files */
|
||||
if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_PROCESSING_DAILY_FILES) {
|
||||
|
||||
+1
-1
@@ -272,7 +272,7 @@ exports.newAlgorithmicTradingBotModulesTradingSystem = function (processIndex) {
|
||||
}
|
||||
|
||||
/* Now we go down through all this node children */
|
||||
let schemaDocument = TS.projects.foundations.globals.taskConstants.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
let schemaDocument = SA.projects.foundations.globals.schemas.APP_SCHEMA_MAP.get(node.project + '-' + node.type)
|
||||
if (schemaDocument === undefined) { return }
|
||||
|
||||
if (schemaDocument.childrenNodesProperties !== undefined) {
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -201,7 +201,7 @@ exports.newDataMiningBotModulesFetchingProcess = function (processIndex) {
|
||||
if (recordProperty.apiResponseFieldReference !== undefined) {
|
||||
if (recordProperty.apiResponseFieldReference.referenceParent !== undefined) {
|
||||
let apiResponseField = recordProperty.apiResponseFieldReference.referenceParent
|
||||
let endpointNodeFound = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(apiResponseField, 'API Endpoint')
|
||||
let endpointNodeFound = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(apiResponseField, 'API Endpoint')
|
||||
/*
|
||||
Every Record Property with an apiResponseFieldReference must be on the path
|
||||
to a certain endpoint.
|
||||
|
||||
@@ -52,13 +52,13 @@
|
||||
}
|
||||
|
||||
/* The first phase here is about checking that we have everything we need at the definition level. */
|
||||
let dataDependencies = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
let dataDependencies = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processDependencies, 'Data Dependency'
|
||||
)
|
||||
|
||||
if (TS.projects.foundations.functionLibraries.singleMarketFunctions.validateDataDependencies(processIndex, dataDependencies, callBackFunction) !== true) { return }
|
||||
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset'
|
||||
)
|
||||
if (TS.projects.foundations.functionLibraries.singleMarketFunctions.validateOutputDatasets(processIndex, outputDatasets, callBackFunction) !== true) { return }
|
||||
@@ -138,9 +138,9 @@
|
||||
contextSummary.dataset = outputDatasetNode.referenceParent.config.codeName
|
||||
contextSummary.product = outputDatasetNode.referenceParent.parentNode.config.codeName
|
||||
|
||||
let botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Indicator Bot')
|
||||
let botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Indicator Bot')
|
||||
contextSummary.bot = botNode.config.codeName
|
||||
let dataMineNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Data Mine')
|
||||
let dataMineNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Data Mine')
|
||||
contextSummary.dataMine = dataMineNode.config.codeName
|
||||
contextSummary.mineType = dataMineNode.type.replace(' ', '-')
|
||||
contextSummary.project = dataMineNode.project
|
||||
|
||||
@@ -513,7 +513,7 @@
|
||||
}
|
||||
|
||||
function writeDataRanges(callBack) {
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasetIndex = -1;
|
||||
controlLoop()
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
|
||||
function writeTimeFramesFiles(callBack) {
|
||||
let outputDatasets =
|
||||
TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasetIndex = -1;
|
||||
controlLoop()
|
||||
|
||||
|
||||
+8
-7
@@ -119,16 +119,17 @@
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Custom Shortcuts"
|
||||
"text": "Custom Shortcuts to Nodes",
|
||||
"updated": 1637691249937
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Topic->Keyboard Shortcuts to Nodes->Custom Node Shortcuts",
|
||||
"updated": 1637691223240
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "It is also possible to set a custom shortcut to any node you would like. Simply hover over a node and hit Ctrl + Alt + your preferred key to assign the shortcut.",
|
||||
"updated": 1634909920250
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "A more detailed walk through can be found here: Keyboard Shortcuts to Nodes"
|
||||
"text": "It is also possible to set a custom shortcut to any node you would like. Simply hover over a node and hit Ctrl + Alt + your preferred key to assign the shortcut."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
|
||||
@@ -676,7 +676,7 @@ function newFoundationsDocsDocumentPage() {
|
||||
}
|
||||
case 'Tutorial': {
|
||||
orderedTutorialPageIndexArray = UI.projects.education.utilities.docs.buildOrderedPageIndex(
|
||||
UI.projects.education.spaces.docsSpace.currentDocumentBeingRendered.project,
|
||||
project,
|
||||
'Tutorial',
|
||||
chapterName
|
||||
)
|
||||
|
||||
@@ -141,6 +141,12 @@ function newFoundationsDocsFooter() {
|
||||
}
|
||||
HTML = HTML + '"></a>'
|
||||
|
||||
HTML = HTML + '<a href="#" onClick="UI.projects.education.spaces.docsSpace.changeLanguage(\'EL\')"><img src="Images/Languages/EL.png" title="Greek" class="docs-footer-language'
|
||||
if (languageCode === 'EL') {
|
||||
HTML = HTML + '-selected'
|
||||
}
|
||||
HTML = HTML + '"></a>'
|
||||
|
||||
HTML = HTML + '</div>'
|
||||
|
||||
HTML = HTML + '<div class="docs-footer-cell">'
|
||||
|
||||
@@ -52,6 +52,10 @@ function newEducationUtilitiesLanguages() {
|
||||
languageLabel = 'Arabic'
|
||||
break
|
||||
}
|
||||
case 'EL': {
|
||||
languageLabel = 'Greek'
|
||||
break
|
||||
}
|
||||
}
|
||||
return languageLabel
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
exports.newFoundationsGlobalsSchemas = function () {
|
||||
|
||||
let thisObject = {
|
||||
APP_SCHEMA_MAP: new Map()
|
||||
}
|
||||
|
||||
return thisObject
|
||||
}
|
||||
@@ -9,6 +9,16 @@
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "socialTradingBotReference",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Social Trading Bot Reference",
|
||||
"relatedUiObject": "Social Trading Bot Reference",
|
||||
"relatedUiObjectProject": "Governance"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
@@ -31,6 +41,12 @@
|
||||
"type": "array",
|
||||
"childType": "Trading Process Instance",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "socialTradingBotReference",
|
||||
"type": "node",
|
||||
"childType": "Social Trading Bot Reference",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "bot"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
|
||||
@@ -39,6 +39,13 @@
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add Specified Workspace Project",
|
||||
"label": "Add Specified Workspace Project",
|
||||
"relatedUiObject": "Workspace",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Check For Missing References",
|
||||
"label": "Check For Missing References",
|
||||
@@ -58,7 +65,8 @@
|
||||
"config": "{\"docsLanguage\": \"EN\"}"
|
||||
},
|
||||
"editors": {
|
||||
"config": true
|
||||
"config": true,
|
||||
"list": true
|
||||
},
|
||||
"isTitleAllwaysVisible": true,
|
||||
"addLeftIcons": false,
|
||||
|
||||
@@ -138,6 +138,11 @@
|
||||
"style": "Chapter",
|
||||
"text": "XI->Foundations->Tutorial->Setting Up a New Chart->This tutorial walks through the basic inner workings of the Charting Space to help you learn how to create your own custom charts.",
|
||||
"updated": 1621991930816
|
||||
},
|
||||
{
|
||||
"style": "Chapter",
|
||||
"text": "XII->Governance->Tutorial->Creating Your User Profile Tutorial->This tutorial covers everything you need to know about adding a user profile within the Superalgos Governance system.",
|
||||
"updated": 1637591853047
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -102,12 +102,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Chapter",
|
||||
"text": "XVII->Foundations->Topic->Contributing to Foundations->Superalgos is a Community project. Everything you build with Superalgos is susceptible to be contributed to the project. Contributing to the project earns you Superalgos (SA) tokens! This chapter covers how you may contribute some of the intelligence you build for yourself, and also how you may get involved with the project at a deeper level.",
|
||||
"text": "XVII->Foundations->Topic->Contributing to Superalgos->Superalgos is a Community project. Everything you build with Superalgos is susceptible to be contributed to the project. Contributing to the project earns you Superalgos (SA) tokens! This chapter covers how you may contribute some of the intelligence you build for yourself, and also how you may get involved with the project at a deeper level.",
|
||||
"updated": 1617708229948
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
+8
@@ -216,6 +216,14 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Token Distrabution Superalgos"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Creating Your User Profile Tutorial"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
|
||||
+16
-2
@@ -2,13 +2,27 @@
|
||||
"type": "Node JS Javsacript",
|
||||
"definition": {
|
||||
"text": "A Task in Superalgos runs in Node JS, which means that the Conditions and Formulas you write at your Trading System must comply with Javascript for Node JS syntax. ",
|
||||
"updated": 1611323749488
|
||||
"updated": 1611323749488,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Eine Task in Superalgos läuft in Node JS, was bedeutet, dass die Bedingungen und Formeln, die Sie in Ihrem Trading System schreiben, der Syntax von Javascript für Node JS entsprechen müssen.",
|
||||
"updated": 1637416496544
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The same is true for properties values in configs. They need to be valid data types of Javascript for Node JS.",
|
||||
"updated": 1611323797820
|
||||
"updated": 1611323797820,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das Gleiche gilt für propertie values in den Configs. Sie müssen gültige Datentypen von Javascript für Node JS sein.",
|
||||
"updated": 1637416588142
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"type": "Superalgos Project",
|
||||
"definition": {
|
||||
"text": "The Superalgos Project is the open Community, together with it's body of work.",
|
||||
"updated": 1630235520885
|
||||
"text": "The Superalgos Project is the open Community, together with its body of work.",
|
||||
"updated": 1637684804458
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -2,22 +2,50 @@
|
||||
"type": "API Endpoint",
|
||||
"definition": {
|
||||
"text": "Endpoints are important aspects of interacting with server-side web APIs, as they specify where resources can be accessed. Usually the access is via a URL to which HTTP requests are posted. Once these requests are posted correctly, the API will respond with the requested data.",
|
||||
"updated": 1622854645690
|
||||
"updated": 1622854645690,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Endpoints sind wichtige Aspekte der Interaktion mit serverseitigen Web-APIs, da sie angeben, wo auf Ressourcen zugegriffen werden kann. Normalerweise erfolgt der Zugriff über eine URL, an die HTTP-Anforderungen gesendet werden. Sobald diese Anfragen korrekt übermittelt wurden, antwortet die API mit den angeforderten Daten.",
|
||||
"updated": 1637406311302
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "How to Use an Endpoint Node",
|
||||
"updated": 1622854703461
|
||||
"updated": 1622854703461,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "So verwenden sie Endpoint Node`s:",
|
||||
"updated": 1637406356154
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"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
|
||||
"updated": 1622855071509,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Lesen Sie die Dokumentation der API, die Sie abbilden möchten, und stellen Sie fest, welche endpoints sie unterstützt. Von dort aus können Sie wählen, welcher Endpunkt die Informationen enthält, an denen Sie interessiert sind, und damit beginnen, diese zuzuordnen (mapping). Eine detaillierte Beschreibung der Vorgehensweise finden Sie in der folgenden Beschreibung. Darüber hinaus finden Sie auf der Seite API-Map und im Data Mining topic weitere wichtige Konzepte zur Einrichtung einer API-Map.",
|
||||
"updated": 1637406471296
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The first page of the Data Mining topic is Data Mining - Introduction."
|
||||
"text": "The first page of the Data Mining topic is Data Mining - Introduction.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die erste Seite des Themas Data Mining lautet: Data Mining - Introduction.",
|
||||
"updated": 1637406539017
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
@@ -27,15 +55,36 @@
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "API Endpoint Configuration",
|
||||
"updated": 1622895671396
|
||||
"updated": 1622895671396,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "API Endpoint Konfiguration",
|
||||
"updated": 1637406560957
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Properties"
|
||||
"text": "Properties",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Properties/Eigenschaften:",
|
||||
"updated": 1637406584743
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "codeName: Define the endpoint this branch of the map will handle."
|
||||
"text": "codeName: Define the endpoint this branch of the map will handle.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "codeName: Definieren Sie den endpoint, den dieser branch der Map behandeln soll.",
|
||||
"updated": 1637406633445
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -8,6 +8,11 @@
|
||||
"language": "ES",
|
||||
"text": "Un API Map representa el mapeo de una API para que pueda ser consumida por bots dentro de Superalgos. API Maps Son creados por los usuarios y compartidos como Plugins para que cualquier otro miembro de la comunidad pueda usarlos con sus bots.",
|
||||
"updated": 1628046227514
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Eine API-Map stellt das Mapping einer API dar, so dass sie von Bots innerhalb von Superalgos genutzt werden kann. API Maps werden von Nutzern erstellt und als Plugins geteilt, so dass jedes andere Community-Mitglied sie mit seinen Bots nutzen kann.",
|
||||
"updated": 1637407347172
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -15,40 +20,96 @@
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The way to create an API Map is to read the API's documentation for each endpoint as well as the Data Mining Topic. These sources will provide you with all the information you need to make a successful API Map.",
|
||||
"updated": 1622847308932
|
||||
"updated": 1622847308932,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Um eine API-Map zu erstellen, sollten Sie die API-Dokumentation für jeden Endpunkt sowie das Data Mining Topic lesen. Diese Quellen liefern Ihnen alle Informationen, die Sie für die Erstellung einer erfolgreichen API-Map benötigen.",
|
||||
"updated": 1637407413755
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The basic way you can think about an API Map is as a representation of the URL link needed to request information from the API as well as the layout of the data returned by the API. This means that an API Map hold all the information needed to request data and decipher the data once it is returned.",
|
||||
"updated": 1622847337343
|
||||
"updated": 1622847337343,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Grundsätzlich kann man sich eine API-Map als eine Darstellung des URL-Links vorstellen, der für die Anforderung (request) von Informationen von der API benötigt wird, sowie als das Layout der von der API zurückgegebenen Daten. Das bedeutet, dass eine API-Map alle Informationen enthält, die zum Anfordern von Daten und zum Entschlüsseln der zurückgegebenen Daten erforderlich sind.",
|
||||
"updated": 1637407595202
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "How are API Maps used?",
|
||||
"updated": 1622847013897
|
||||
"updated": 1622847013897,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wie werden API Maps verwendet?",
|
||||
"updated": 1637407620683
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "API Maps are used by API Data Fetcher Bots to request and save the data from an API. In order to do this a user needs to set up a task to run the bot. This set up is done automatically as part of the Install Market procedure if both an API Map and its data mine is detected within the Worksapce. From within that Task, a reference to the API Map is established.",
|
||||
"updated": 1622847596702
|
||||
"updated": 1622847596702,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "API Maps werden von API Data Fetcher Bots verwendet, um Daten von einer API anzufordern und zu speichern. Dazu muss der Benutzer eine Task zur Ausführung des Bots einrichten. Diese Einrichtung erfolgt automatisch als Teil des Install Market-Verfahrens, wenn sowohl eine API Map als auch die zugehörige Datamine im Workspace erkannt werden. In dieser Task wird ein Verweis (reference) auf die API-Map eingerichtet.",
|
||||
"updated": 1637407784736
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "When the Task is run, the UI will send to the Task Server all the definitions inside the API Map so that the API Data Fetcher Bot can use them to connect to the API Server, fetch data from it, and correctly interpret the responses."
|
||||
"text": "When the Task is run, the UI will send to the Task Server all the definitions inside the API Map so that the API Data Fetcher Bot can use them to connect to the API Server, fetch data from it, and correctly interpret the responses.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "When the Task is run, the UI will send to the Task Server all the definitions inside the API Map so that the API Data Fetcher Bot can use them to connect to the API Server, fetch data from it, and correctly interpret the responses. Wenn die Task ausgeführt wird, sendet die UI (Benutzeroberfläche) alle Definitionen in der API Map an den Task Server, damit der API Data Fetcher Bot sie verwenden kann, um eine Verbindung zum API Server herzustellen, Daten von ihm abzurufen und die Antworten korrekt zu interpretieren.",
|
||||
"updated": 1637407893809
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "How to Read an API Request URL",
|
||||
"updated": 1622847733042
|
||||
"updated": 1622847733042,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wie man eine \"API Request URL\" liest:",
|
||||
"updated": 1637407947758
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The API you are trying to map should have it's API Endpoints documented. If not, check any examples they may provide for how to request the data and see if there are inner folders below the main folder of the API Enpoint. Each one of these folders are an API Path Parameter that needs to be defined.",
|
||||
"updated": 1622847657548
|
||||
"updated": 1622847657548,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die API, die Sie abbilden (mappen) möchten, sollte über eine Dokumentation ihrer API Endpoints verfügen. Wenn dies nicht der Fall ist, prüfen Sie alle Beispiele, die sie für die Abfrage der Daten bereitstellen, und sehen Sie nach, ob es innere Ordner unterhalb des Hauptordners des API Endpoints gibt. Jeder dieser Ordner ist ein API Path Parameter, der definiert werden muss.",
|
||||
"updated": 1637408139914
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Here are some examples of API request URLs:"
|
||||
"text": "Here are some examples of API request URLs:",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Hier sind einige Beispiele für API request URLs:",
|
||||
"updated": 1637408182777
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -61,15 +122,37 @@
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Sections of an API Request URL"
|
||||
"text": "Sections of an API Request URL",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Abschnitte einer API Request URL:",
|
||||
"updated": 1637408214715
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let's break down one of these URLs and identify each part of it."
|
||||
"text": "Let's break down one of these URLs and identify each part of it.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Lassen Sie uns eine dieser URLs aufschlüsseln und jeden Teil davon identifizieren.",
|
||||
"updated": 1637408255353
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Internet Protocol: This is the section on the very front of almost any internet link you will see."
|
||||
"text": "Internet Protocol: This is the section at the beginning of almost any internet link you will see.",
|
||||
"updated": 1637408357293,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Internet Protocol: Dieser Teil steht am Anfang fast jedes Internet-Links, den Sie sehen werden.",
|
||||
"updated": 1637408455485
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -78,11 +161,25 @@
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You define this using the protocol config property in the main API Map node.",
|
||||
"updated": 1622847750228
|
||||
"updated": 1622847750228,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie definieren dies über die Eigenschaft protocol config in der main API Map node.",
|
||||
"updated": 1637408526085
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Root Domain Name: This is the section of the URL that is before the first backslash:"
|
||||
"text": "Root Domain Name: This is the section of the URL that is before the first backslash:",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Root Domain Name: Dies ist der Teil der URL, der vor dem ersten Backslash steht:",
|
||||
"updated": 1637408573940
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -91,11 +188,25 @@
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You define this using the hostName config property in the main API Map node.",
|
||||
"updated": 1622847770913
|
||||
"updated": 1622847770913,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie definieren dies über die hostName config property in der main API Map node.",
|
||||
"updated": 1637408669762
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "API Path: This is the section that defines the main path to the API:"
|
||||
"text": "API Path: This is the section that defines the main path to the API:",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "API Path: Dies ist der Abschnitt, der den Hauptpfad zur API definiert:",
|
||||
"updated": 1637408725011
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -104,25 +215,60 @@
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You define this using the path config property in the main API Map node.",
|
||||
"updated": 1622847800732
|
||||
"updated": 1622847800732,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie definieren dies über die path config property in der main API Map node.",
|
||||
"updated": 1637408876286
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "API Version Number: This is the section that defines the API version to which you are making requests."
|
||||
"text": "API Version Number: This is the section that defines the API version to which you are making requests.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "API Version Number: In diesem Abschnitt wird die API-Version definiert, an die Sie Anfragen stellen.",
|
||||
"updated": 1637408824379
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": " v1"
|
||||
"text": " v1",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "v1",
|
||||
"updated": 1637408808732
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You define this using the codeName config property in the API Version node.",
|
||||
"updated": 1622847982153
|
||||
"updated": 1622847982153,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Hinweis: Sie definieren dies über die codeName config property in der API Version node.",
|
||||
"updated": 1637408939849
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "API Endpoint: This is the section that tells the API what kind of data you wish to request.",
|
||||
"updated": 1622847877226
|
||||
"updated": 1622847877226,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "API Endpoint: In diesem Abschnitt wird der API mitgeteilt, welche Art von Daten Sie anfordern möchten.",
|
||||
"updated": 1637414433995
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -131,12 +277,26 @@
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You define this using the config codeName property of the API Endpoint node.",
|
||||
"updated": 1622847959761
|
||||
"updated": 1622847959761,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie definieren dies über die config codeName property des API-Endpoint node.",
|
||||
"updated": 1637414475525
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Path Parameters: These are the remaning sections of the path before the question mark they further narrow down what data you wish to request from the API. In this case we want to receive data about bitcoin:",
|
||||
"updated": 1622848189591
|
||||
"updated": 1622848189591,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Path Parameters: Dies sind die verbleibenden Abschnitte des Pfads vor dem Fragezeichen. Sie grenzen die Daten, die Sie von der API anfordern möchten, weiter ein. In diesem Fall möchten wir Daten über Bitcoin erhalten:",
|
||||
"updated": 1637414552491
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -145,12 +305,26 @@
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You define each of these using the codeName config property in the API Path Parameter node.",
|
||||
"updated": 1622848212517
|
||||
"updated": 1622848212517,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie definieren jedes dieser Elemente über die codeName config property in der API Path Parameter node.",
|
||||
"updated": 1637414615962
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Query Parameters: These are all the sections after the question mark. They are often used to pair down the amount of data returned by the API so that you only receive what you are interested in:",
|
||||
"updated": 1622848284105
|
||||
"updated": 1622848284105,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Query Parameters: Dies sind alle Abschnitte nach dem Fragezeichen. Sie werden häufig verwendet, um die von der API zurückgegebene Datenmenge zu reduzieren, damit Sie nur die Daten erhalten, an denen Sie interessiert sind:",
|
||||
"updated": 1637414650342
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -158,7 +332,14 @@
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You define these using the codeName and value config properties of the API Query Parameter node."
|
||||
"text": "You define these using the codeName and value config properties of the API Query Parameter node.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie definieren diese über die codeName und value config property der API Query Parameter node.",
|
||||
"updated": 1637414687252
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
@@ -173,7 +354,14 @@
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "API Map Configuration",
|
||||
"updated": 1622895474056
|
||||
"updated": 1622895474056,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "API Map Konfiguration:",
|
||||
"updated": 1637414725997
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
@@ -182,36 +370,85 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "codeName: this must be the same codename as the Data Mine codename in order for the Install New Market procedure to link them properly at the API Map Reference node.",
|
||||
"updated": 1622895563618
|
||||
"updated": 1622895563618,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dies muss derselbe Codename sein wie der Codename der Data Mine, damit die Prozedur Install New Market sie ordnungsgemäß mit der API Map Reference node verknüpfen kann.",
|
||||
"updated": 1637414868207
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "protocol: the protocol to be used to access the API. For now either http or https.",
|
||||
"updated": 1622895574503
|
||||
"updated": 1622895574503,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "protocol: das Protokoll, das für den Zugriff auf die API verwendet werden soll. Im Moment entweder http oder https.",
|
||||
"updated": 1637415023731
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "portNumber: the port at which the API server is listening.",
|
||||
"updated": 1622895581034
|
||||
"updated": 1622895581034,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "portNumber: der Port, an dem der API-Server lauscht.",
|
||||
"updated": 1637415047128
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "hostName: the domain name or IP address of the API server.",
|
||||
"updated": 1622895586641
|
||||
"updated": 1622895586641,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "hostName: der Domain Name oder die IP-Adresse des API Servers.",
|
||||
"updated": 1637415198987
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "path: the URL path to where the API is located within the remote server.",
|
||||
"updated": 1622895592146
|
||||
"updated": 1622895592146,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "path: der URL Pfad zu dem Ort, an dem sich die API auf dem entfernten Server befindet.",
|
||||
"updated": 1637415193838
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "millisecondsBetweenCalls: [Optional] the number of milliseconds to wait before calling the remote host. This is particuary useful if there is pagination, so that there is a delay before requesting each page.",
|
||||
"updated": 1622863477228
|
||||
"updated": 1622863477228,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "millisecondsBetweenCalls: [Optional] Die Anzahl der Millisekunden, die vor dem Aufruf des entfernten Hosts gewartet wird. Dies ist besonders nützlich, wenn es eine Paginierung gibt, so dass es eine Verzögerung gibt, bevor jede Seite angefordert wird.",
|
||||
"updated": 1637415663997
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Here is an example API Map config:"
|
||||
"text": "Here is an example API Map config:",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Hier ein Beispiel für eine API Map config:",
|
||||
"updated": 1637415687389
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El close stage se ocupa de las definiciones que componen la lógica para cerrar una posición, incluida la tasa y el tamaño objetivo, y la ejecución de la orden.",
|
||||
"updated": 1624460574874
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Статия закрытия имеет дело с определениями, которые составляют логику закрытия позиции, включая целевую ставку и размер, а также исполнение ордера.",
|
||||
"updated": 1637757567864
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Conditions son reglas dentro de una situación. Cuando todas las condiciones de una situación se validan como verdaderas, la situación también se valida y se activa el evento asociado.",
|
||||
"updated": 1624459710047
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Условия - это правила внутри ситуации. Когда все условия в ситуации проверяются на истинность, ситуация также проверяется, и запускается соответствующее событие.\n",
|
||||
"updated": 1637756827569
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "The trading bot realiza sus funciones con respecto las órdenes del exchange y cuentas en dos ciclos consecutivos para cada vela.",
|
||||
"updated": 1624457112696
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Торговый бот выполняет свои обязанности в отношении биржевых ордеров и счетов в два последовательных цикла для каждой свечи.",
|
||||
"updated": 1637596581446
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+13
-1
@@ -12,6 +12,11 @@
|
||||
"language": "RU",
|
||||
"text": "Процедура построения данных обрабатывает информацию, которая должна быть передана свойствам, хранящимся на выход�� данных.\n",
|
||||
"updated": 1636569783197
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die data building procedure verarbeitet die Informationen, die den Eigenschaften (properties) zugeführt werden, die im Ausgabedatensatz (output dataset) gespeichert sind.",
|
||||
"updated": 1637588171931
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -22,7 +27,14 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This procedure holds the core logic of the bot, as it features the code that performs the calculations required to produce the new data set. The code is split between a procedure initialization and a procedure loop."
|
||||
"text": "This procedure holds the core logic of the bot, as it features the code that performs the calculations required to produce the new data set. The code is split between a procedure initialization and a procedure loop.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Diese Prozedur enthält die Kernlogik des Bots, da sie den Code enthält, der die Berechnungen durchführt, die erforderlich sind, um den neuen Datensatz zu erzeugen. Der Code ist aufgeteilt in eine Prozedurinitialisierung (procedure initialization) und eine Prozedurschleife (procedure loop).",
|
||||
"updated": 1637588231987
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+5
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Un execution algorithmes es un conjunto de instrucciones que se utilizan para realizar y gestionar pedidos en el exchange.",
|
||||
"updated": 1624459612098
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Алгоритм выполнения - это набор инструкций, используемых для размещения и управления ордерами на бирже.",
|
||||
"updated": 1637756233547
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Una fórmula es una expresión matemática destinada a determinar un valor numérico que se aplicará dinámicamente a una determinada propiedad.",
|
||||
"updated": 1624460095928
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Формула - это математическое выражение, предназначенное для определения числового значения, которое будет динамически применяться к определенному свойству.",
|
||||
"updated": 1637757255574
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "Foundations Project",
|
||||
"definition": {
|
||||
"text": "The Superalgos Project hierarchy governs the assets that relate to Superalgos. In its current state, it serves the purpose of spawning hierarchies."
|
||||
"text": "The Foundations Project hierarchy governs the assets that relate to Superalgos. In its current state, it serves the purpose of spawning hierarchies."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Un limit sell order es una instrucción enviada al exchange para comprar el asset base, para su ejecución a una tasa específica o mejor.",
|
||||
"updated": 1624457049736
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Лимитный ордер на продажу - это приказ, отправленный на биржу для продажи базового актива, для исполнения по определенному курсу или выше.\n",
|
||||
"updated": 1637596266339
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El open stage se ocupa de las definiciones que componen la lógica para ingresar a una posición, incluida la tasa y el tamaño objetivo, y la ejecución de la orden.",
|
||||
"updated": 1624459561011
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "На открытой стадии рассматриваются определения, которые составляют логику входа в позицию, включая целевую ставку и размер, а также выполнение ордеров.",
|
||||
"updated": 1637756161148
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El nodo order rate define la tasa de órdenes límite.",
|
||||
"updated": 1624459989822
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узел скорости заказов определяет скорость лимитных ордеров.",
|
||||
"updated": 1637757390733
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Un plotter o trazadores un dispositivo que se utiliza para producir una representación gráfica de conjuntos de datos generados por bots.",
|
||||
"updated": 1624496084904
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Плоттер - это устройство, используемое для создания графического представления набора данных, сгенерированных ботами.",
|
||||
"updated": 1637657371222
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Un situation se refiere a un estado específico del mercado en el que debe tener lugar un determinado evento, definido por una serie de condiciones.",
|
||||
"updated": 1624496155342
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Ситуация относится к определенному состоянию, в котором должно произойти определенное событие, поределяемое любым количеством условий.",
|
||||
"updated": 1637756401865
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El trigger stage se ocupa del seguimiento del mercado en busca de oportunidades de trading con la estrategia correspondiente.",
|
||||
"updated": 1624459676185
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Стадия запуска занимается мониторингом рынка в поисках торговых возможностей с соответствующей стратегией.",
|
||||
"updated": 1637756311221
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"review": "Superalgos Project Review",
|
||||
"pageNumber": 38,
|
||||
"type": "Superalgos Review - SuperAlogs for the future",
|
||||
"definition": {
|
||||
"text": "Write a summary for this review page."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "During my Tutorial, I have come to the realization that the Superalgos platform will form an integral part of trading in the future.",
|
||||
"updated": 1637689604734
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Having a system that is free and managed by the community is awesome, this allows everyone to benefit form multiple people and share they`re knowledge. "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "A bit Thank you to the founders as this is and will be an amazing project for people to enjoy. "
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
+236
-26
@@ -11,6 +11,11 @@
|
||||
"text": "Este comando te permite contribuir con trabajo al proyecto. El aporte va al repositorio de Superalgos a través de un Pull Request de tu fork de Superalgos.",
|
||||
"updated": 1628205171216,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Mit diesem Befehl können Sie einen Beitrag zum Projekt leisten. Der Beitrag geht an das Superalgos-Repository über einen Pull Request von Ihrer Superalgos fork.",
|
||||
"updated": 1636810389931
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -24,6 +29,11 @@
|
||||
"language": "ES",
|
||||
"text": "Este comando envia todos los cambios que hayas hecho en las paginas de documentos pero también de but also en cualquier archivo de la carpeta de Superalgos (a excepción de My-Workspaces, Data-Storage, (Archivo de datos de mi espacio de trabajo) y My-Logs folders (mis carpetas de registros) a tu bifurcación en Github.com. También serán enviados desde tu bifurcación al repositorio principal de Superalgos Lo hará específicamente desde la rama actual a la rama de las contribuciones mencionados al final de ésta página.",
|
||||
"updated": 1633175695567
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dieser Befehl sendet alle Änderungen, die Sie an den Docs-Seiten, aber auch an allen Dateien innerhalb des Superalgos-Ordners (außer den Ordnern My-Workspaces, Data-Storage und My-Logs) vorgenommen haben, an Ihren Fork auf Github.com. Es wird sie auch von Ihrem Fork an das Main Superalgos Repository senden. Und zwar vom Current Branch zum Contributions Branch, der in der Fußzeile dieser Seite erwähnt wird.",
|
||||
"updated": 1636810799062
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -36,6 +46,11 @@
|
||||
"language": "ES",
|
||||
"text": "Nunca utilice su carpeta de Superalgos para almacenar archivos personales, ya que toda la carpeta, salvo las pocas excepciones mencionadas arriba, están sujetas a ser enviadas a través de internet a un sitio público.",
|
||||
"updated": 1633175880707
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Verwenden Sie niemals Ihren Superalgos-Ordner, um persönliche Dateien zu speichern, da der gesamte Ordner, mit Ausnahme der wenigen oben erwähnten Ausnahmen, über das Internet an eine öffentliche Website gesendet werden kann.",
|
||||
"updated": 1636810844509
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -48,6 +63,11 @@
|
||||
"language": "ES",
|
||||
"text": "En la mayoría de los casos,, las contribuciones deben ir desde la rama de desarrollo a la rama de desarrollo, o desde la rama de plugins-docs (documentos complementarios) a la rama de plugins-docs, salvo que previamente haya acordado con los miembros del equipo que enviará una contribución de master a master.",
|
||||
"updated": 1633176160361
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "In den meisten Fällen müssen Beiträge(contributions) vom develop branch zum develop branch oder vom plugins-docs branch zum plugins-docs branch gehen, es sei denn, Sie haben vorher mit den Teammitgliedern vereinbart, dass Sie einen Beitrag von master zu master schicken.",
|
||||
"updated": 1636811150520
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -60,6 +80,11 @@
|
||||
"language": "ES",
|
||||
"text": "Master ( Maestra) es una rama estable y es muy poco porbable que vayamos a emerger contribuciones allí. En cambio todas las contribuciones se espera que vayan a as ramas de desarrollo o de documentos complementarios, donde muchos usuarios están chequeando esa rama cada día. Las contribuciones de enchufes o documentos puede alcanzar a maenudo la rama maestra. Contribuciones a la rama de desarrollo llegará a la rama maestra en la siguiente liberación.",
|
||||
"updated": 1633176639433
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Master ist unser stable branch und es ist sehr unwahrscheinlich, dass wir contributions dorthin mergen werden. Stattdessen wird erwartet, dass alle contributions in den Zweigen develop oder plugins-docs landen, wo viele Benutzer diese branches jeden Tag testen. Beiträge zu Plugins und Docs werden oft den Master-branch erreichen. Contributions zum develop branch werden den master branch bei der nächsten Veröffentlichung erreichen.",
|
||||
"updated": 1636811857881
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -72,6 +97,11 @@
|
||||
"language": "ES",
|
||||
"text": "Es también muy poco probable que las contribuciones provenientes de la rama maestra será traída en la rama de desarrollo, ya que ello puede provocar que emergan conflictos.",
|
||||
"updated": 1633176834093
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Es ist auch sehr unwahrscheinlich, dass Beiträge aus dem master branch in den develop branch gemerged werden, da dies normalerweise zu Konflikten beim mergen führen kann.",
|
||||
"updated": 1636811942836
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -83,6 +113,11 @@
|
||||
"language": "ES",
|
||||
"text": "Chequear el pie de los documentos par qverificar que en que ramas está operando antes de enviar su contribución",
|
||||
"updated": 1633176955159
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Prüfen Sie in der Fußzeile der Dokumente, mit welchen Zweigen Sie arbeiten, bevor Sie Ihre contributions einreichen!",
|
||||
"updated": 1636812025309
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -102,12 +137,26 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Message: Enter a brief description of what your contribution is about. It is optional but appreciated.",
|
||||
"updated": 1610909386562
|
||||
"updated": 1610909386562,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Message: Geben Sie eine kurze Beschreibung, worum es in Ihrer contribution geht. Die Angabe ist freiwillig, wird aber geschätzt.",
|
||||
"updated": 1636812085622
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Example",
|
||||
"updated": 1609943733276
|
||||
"updated": 1609943733276,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Beispiel (dieser Befehl reicht für Übersetzungen vollkommen aus. Denken sie daran vor dem app.contribute command den docs.save command auszuführen um änderungen zu speichern)",
|
||||
"updated": 1636812385303
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -117,29 +166,71 @@
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "For Devs",
|
||||
"updated": 1609944102567
|
||||
"updated": 1609944102567,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Für Entwickler:",
|
||||
"updated": 1636812168426
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is what the command does:",
|
||||
"updated": 1610909409653
|
||||
"updated": 1610909409653,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dies ist die Funktion des Befehls:",
|
||||
"updated": 1636812191434
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "git.add: adds the changes you've made to contributable files to a git commit.",
|
||||
"updated": 1610909452789
|
||||
"updated": 1610909452789,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "git.add: fügt die Änderungen, die Sie an beitragsfähigen Dateien vorgenommen haben, einem Git-Commit hinzu.",
|
||||
"updated": 1636812217041
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "git.commit: commits all the changes."
|
||||
"text": "git.commit: commits all the changes.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "git.commit: überträgt alle Änderungen.",
|
||||
"updated": 1636812231989
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "git.push: pushes the changes to your fork."
|
||||
"text": "git.push: pushes the changes to your fork.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "git.push: überträgt die Änderungen auf Ihren Fork.",
|
||||
"updated": 1636812247666
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "github.createPullRequest: creates a Pull Request at the Superalgos repository, or add commits to an existing Pull Request."
|
||||
"text": "github.createPullRequest: creates a Pull Request at the Superalgos repository, or add commits to an existing Pull Request.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "github.createPullRequest: erstellt einen Pull Request im Superalgos Repository, oder fügt Commits zu einem bestehenden Pull Request hinzu.",
|
||||
"updated": 1636812305579
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
@@ -153,12 +244,26 @@
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For the App Contribute Command to run properly, two different authentications are required:",
|
||||
"updated": 1610909501561
|
||||
"updated": 1610909501561,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Damit der App Contribute-Befehl ordnungsgemäß ausgeführt werden kann, sind zwei verschiedene Authentifizierungen erforderlich:",
|
||||
"updated": 1636812413275
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Git Authentication: The first time you run this command, Git will open a pop up window that will ask you for your Github.com credentials. This happens only once. Git will use these credentials to push the commit to your Superalgos fork at Github.com.",
|
||||
"updated": 1610909551187
|
||||
"updated": 1610909551187,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Git Authentication: Wenn Sie diesen Befehl zum ersten Mal ausführen, öffnet Git ein Popup-Fenster, in dem Sie nach Ihren Github.com-Anmeldedaten gefragt werden. Dies geschieht nur einmal. Git verwendet diese Anmeldedaten, um den commit an Ihren Superalgos-Fork auf Github.com zu übertragen.",
|
||||
"updated": 1636812477503
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
@@ -172,7 +277,14 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Create the token by following this link:",
|
||||
"updated": 1610909635250
|
||||
"updated": 1610909635250,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Erstellen Sie den Token, indem Sie diesem Link folgen:",
|
||||
"updated": 1636812794679
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Link",
|
||||
@@ -186,7 +298,14 @@
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Once you have your token, find the GitHub API node (you may search for it in the Documentation). The configuration looks like this:",
|
||||
"updated": 1610909728136
|
||||
"updated": 1610909728136,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sobald Sie Ihr Token haben, suchen Sie die GitHub-API-Node (Sie können in der Documentation danach suchen). Die Konfiguration sieht wie folgt aus:",
|
||||
"updated": 1636812850344
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
@@ -195,8 +314,15 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you can't find the node by using the search box, it may not exist in the active workspace. The APIs hierarchy is included by default in the Getting Started workspace only. You may spawn a new APIs hierarchy from the Other Hierarchies node in the Superalgos Project hierarchy.",
|
||||
"updated": 1610909893231
|
||||
"text": "If you can't find the node by using the search box, it may not exist in the active workspace. The APIs hierarchy is included by default in the Getting Started workspace only. You may spawn a new APIs hierarchy from the Other Hierarchies node in the Foundations Project hierarchy.",
|
||||
"updated": 1610909893231,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie die node nicht über das Suchfeld finden können, ist er möglicherweise nicht im aktiven Arbeitsbereich vorhanden. Die APIs-Hierarchie ist standardmäßig nur im Arbeitsbereich \"Erste Schritte\" enthalten. Sie können eine neue APIs-Hierarchie über den Node \"Other Hierarchies\" in der Foundations Project hierarchy erstellen.",
|
||||
"updated": 1636813227032
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
@@ -205,31 +331,73 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "username: Type your GitHub.com username.",
|
||||
"updated": 1610909927500
|
||||
"updated": 1610909927500,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "username: Geben Sie Ihren GitHub.com-Benutzernamen ein.",
|
||||
"updated": 1636813245695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "token: Paste the token you created.",
|
||||
"updated": 1610909948426
|
||||
"updated": 1610909948426,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "token: Fügen Sie das von Ihnen erstellte Token ein.",
|
||||
"updated": 1636813265485
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You may run the command any time after you made and saved changes.",
|
||||
"updated": 1610910009790
|
||||
"updated": 1610910009790,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie können den Befehl jederzeit ausführen, nachdem Sie Änderungen vorgenommen und gespeichert haben.",
|
||||
"updated": 1636813300417
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Troubleshooting Authentication Issues",
|
||||
"updated": 1610909171028
|
||||
"updated": 1610909171028,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Fehlerbehebung bei Authentifizierungsproblemen",
|
||||
"updated": 1636813315620
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Some issues may arrise when you have more than one Git installation active in your OS.",
|
||||
"updated": 1610910061699
|
||||
"updated": 1610910061699,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Einige Probleme können auftreten, wenn Sie mehr als eine Git-Installation in Ihrem Betriebssystem aktiv haben.",
|
||||
"updated": 1636813483077
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For example, if you see the following authentication screen, it means an older version of Git is trying to deal with the authentication:"
|
||||
"text": "For example, if you see the following authentication screen, it means an older version of Git is trying to deal with the authentication:",
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie zum Beispiel den folgenden Authentifizierungsbildschirm sehen, bedeutet dies, dass eine ältere Version von Git versucht, die Authentifizierung durchzuführen:",
|
||||
"updated": 1636813517718
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Png",
|
||||
@@ -239,7 +407,14 @@
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The current authentication screen is similar to this one instead:",
|
||||
"updated": 1610910533633
|
||||
"updated": 1610910533633,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der derzeitige Authentifizierungsbildschirm sieht stattdessen ähnlich aus wie dieser:",
|
||||
"updated": 1636813625546
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Png",
|
||||
@@ -249,27 +424,62 @@
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "If you didn't install the latest version of Git before installing Superalgos, then that is likely the reason the authentication is not working. The latest version of Git is required.",
|
||||
"updated": 1610910817057
|
||||
"updated": 1610910817057,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie vor der Installation von Superalgos nicht die neueste Version von Git installiert haben, dann ist das wahrscheinlich der Grund, warum die Authentifizierung nicht funktioniert. Die neueste Version von Git ist erforderlich.",
|
||||
"updated": 1636813687527
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "If you did install Git and you are experiencing the issue described above, restarting your PC may help things sort themselves out.",
|
||||
"updated": 1610910739376
|
||||
"updated": 1610910739376,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie Git installiert haben und das oben beschriebene Problem auftritt, kann ein Neustart des PCs helfen, das Problem zu beheben.",
|
||||
"updated": 1636813720650
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
"text": "Linux and iOS",
|
||||
"updated": 1621085154588
|
||||
"updated": 1621085154588,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Linux und iOS",
|
||||
"updated": 1636813726982
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Input your personal authentication token (PAT) in place of your password and hit enter. ",
|
||||
"updated": 1621085095513
|
||||
"updated": 1621085095513,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Geben Sie Ihr persönliches Authentifizierungs-Token (PAT) anstelle Ihres Passworts ein und drücken Sie die Eingabetaste (Enter).",
|
||||
"updated": 1636813892055
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you don't want to keep entering in your token then you can have git cach your credentials:",
|
||||
"updated": 1621085196186
|
||||
"updated": 1621085196186,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie Ihr Token nicht ständig eingeben wollen, können Sie Ihre Anmeldedaten von Git zwischenspeichern lassen:",
|
||||
"updated": 1636813912653
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Link",
|
||||
|
||||
+2
-15
@@ -318,27 +318,14 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Data Mine->Definition",
|
||||
"text": "Data-Mining->Node->Data Mine->Definition",
|
||||
"updated": 1611407782909
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Data Mine->Content",
|
||||
"text": "Data-Mining->Node->Data Mine->Content",
|
||||
"updated": 1611407786577
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Concept->Reusable Snippets->Note for Hierarchy Tables No Discussion"
|
||||
},
|
||||
{
|
||||
"style": "Hierarchy",
|
||||
"text": "Foundations->Data Mine->2",
|
||||
"updated": 1611407832651
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Sensor Bot",
|
||||
|
||||
+22
@@ -99,6 +99,11 @@
|
||||
"text": "Ctrl or <kbd>⌘</kbd> + ↓ to pan downwards.",
|
||||
"updated": 1634912309430
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
"text": "Moving Node Shortcuts",
|
||||
"updated": 1637690456615
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Moving Nodes"
|
||||
@@ -131,6 +136,23 @@
|
||||
"text": "There are also keyboard shortcuts to accomplish node snapping. See Keyboard Shortcut Quick Guide page for more details.",
|
||||
"updated": 1634915239339
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "These UI tricks may also make your life easier:",
|
||||
"updated": 1637691123266
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Use the design space map as many times as required to find your way from one hierarchy to the other."
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Remove the pin once the reference is established so that the node goes back to its place."
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
"text": "Keyboard Shortcuts Reference"
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Keyboard Shortcuts"
|
||||
|
||||
+12
-2
@@ -7,10 +7,20 @@
|
||||
"updated": 1610043042775
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Block",
|
||||
"text": "Custom Node Shortcuts",
|
||||
"updated": 1637691199216
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may define shortcuts for frequently-used nodes with the following procedure:",
|
||||
"updated": 1610043064924
|
||||
"text": "It is also possible to set a custom shortcut to any node you would like. This is useful for accessing frequenty used nodes.",
|
||||
"updated": 1637691354831
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may define this type of shortcut using the following procedure:",
|
||||
"updated": 1637691378647
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
|
||||
+14
-71
@@ -3,8 +3,8 @@
|
||||
"pageNumber": "2",
|
||||
"type": "Establish and Remove References",
|
||||
"definition": {
|
||||
"text": "To establish a reference, right-click on the first node and drag it close to the target node. The remove a reference, use the delink button on the menu.",
|
||||
"updated": 1609949247846,
|
||||
"text": "To establish a reference, right-click on the first node and drag it close to the target node. To remove a reference, use the delink button on the menu.",
|
||||
"updated": 1637690929227,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
@@ -39,7 +39,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The reference is visually represented by a faint grey dotted line. Such line is visible only when both ends of the reference are visible.",
|
||||
"text": "The reference is visually represented by a faint grey dotted line.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
@@ -47,7 +47,12 @@
|
||||
"updated": 1633521251780,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
],
|
||||
"updated": 1637691076887
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "You may toggle these grey lines on and off using: Ctrl + Shift + Alt + Key-R"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -77,8 +82,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The process is exactly the same. All you need to do is master a few tricks so that you may drag one of the nodes all the way to where the second node is.",
|
||||
"updated": 1611940896508,
|
||||
"text": "The process is exactly the same. All you need to do is master a few tricks so that you may move one of the nodes all the way to where the second node is.",
|
||||
"updated": 1637690797249,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
@@ -89,71 +94,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
"text": "_7Qp8KmNmWU?rel=0&autoplay=1&mute=1",
|
||||
"updated": 1616182407466
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "These UI tricks may make your life easier:",
|
||||
"updated": 1611940968078,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Estos UI trucos pueden hacer tu vida más fácil:",
|
||||
"updated": 1633295979755,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Use the design space map as many times as required to find your way from one hierarchy to the other.",
|
||||
"updated": 1611940996169,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Use el design space map tantas veces como sea necesario para encontrar el camino desde una jeraquía a la otra.",
|
||||
"updated": 1633296062866,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Pin the node you are going to move across the design space, so that you may drop it at any point to check the design space map for directions.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Fije el nodo que va a mover a través del espacio de diseño, para que pueda soltarlo en cualquier punto para chequear las direcciones en el mapa del espacio de diseño.",
|
||||
"updated": 1633296213030,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Use Ctrl / Command + arrow keys to drag the node across the screen after clicking on it with the mouse. Keep keys pressed and the node flies!",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Use Ctrl / Command + arteclas de flechas para arrastrar el nodo a través dela pantalla despues de clickear en el con el mouse. Mantenga las teclas presionadas y el nodo vuela!",
|
||||
"updated": 1633296325908,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Remove the pin once the reference is established so that the node goes back to its place.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Remueve el fijado ona vez que la referencia sea establecida para que el nodo vuelva a su lugar.",
|
||||
"updated": 1633521325505,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
"style": "Include",
|
||||
"text": "Foundations->Topic->Basic Navigation->Moving Node Shortcuts",
|
||||
"updated": 1637690507758
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-1
@@ -54,7 +54,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": " Note: The Bots page brings these conceptual definitions down to earth and offers an overview of how what these top-level concepts are and how they interact with each other."
|
||||
"text": "The Bots page brings these conceptual definitions down to earth and offers an overview of how what these top-level concepts are and how they interact with each other.",
|
||||
"updated": 1637697607949
|
||||
}
|
||||
]
|
||||
}
|
||||
+20
-11
@@ -43,11 +43,18 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the pages describing data mines and trading mines you will learn that bots are algorithms defined in such mines. That is, mines hold the source code and configuration—the complete set of definitions—of the three existing kinds of bots: sensors, indicators, and the trading bot."
|
||||
"text": "Bots are a very fluid concept within superalgos. You can think of them like a set of personal assistants each with a very specific job to do. A sensor bot collects information. An indicator bot preforms calculations on that information to create trading indicators. A trading bot places trade orders or backtests strategies. A social bot sends notifications using a social platform based on the preformance of the other bots, etc.",
|
||||
"updated": 1637698573606
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As a user, you may use all bots in data mines shipping with the system. As a developer, you may create your own mines to develop your own sensors, indicators, and even a new trading bot."
|
||||
"text": "In the pages describing data mines and trading mines you will learn that bots are algorithms defined within these mines. That is, mines hold the source code and configuration—the complete set of definitions—of the existing kinds of bots: sensors, indicators, social, learning, the trading bots, etc. You can think of mines as the home for each kind of bot.",
|
||||
"updated": 1637698856223
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As a user, you may use all bots in data mines shipping with the system. As a developer, you may create your own mines to develop your own bots. Anything that can be executed using a computer algorithm can be turned into a bot! The sky is the limit, with developers adding new bots regularly.",
|
||||
"updated": 1637698955490
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -81,6 +88,15 @@
|
||||
"style": "Text",
|
||||
"text": "A good example of such dependencies may be found when running a live trading session. In such a case, the trading bot depends on the sensor and all indicator bots used in the referenced trading system. Indicators must process the data so that the trading bot may analyze it in realtime. Therefore, before running a live trading session, the data mining operation must be running and up to date."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Bots need to know what kind of data they will need to access to do its job. Trading bots need to know which market of which exchange they should work with. Exchanges and markets are defined in the crypto ecosystem hierarchy. Bots obtain that information by establishing references with the appropriate markets in that hierarchy. It also needs to know which type of trading session it should run, and what trading system’s rules it should follow. For those reasons, trading bots are paired with a specific session, which in turn, references a trading system.",
|
||||
"updated": 1637699705206
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Trading systems are themselves hierarchies. You may create a trading system by following a framework in which strategies are described in stages. You do not need to code to create a strategy, as the rules are written with simple mathematical statements. However, both basic and advanced knowledge of JavaScript will give you an edge. You may test and deploy your trading system by running trading sessions from within the network hierarchy."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Bots Execution"
|
||||
@@ -91,15 +107,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Bots need to know which market of which exchange they should work with. Exchanges and markets are defined in the crypto ecosystem hierarchy. Bots obtain that information by establishing references with the appropriate markets in that hierarchy."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the case of the trading bot, it also needs to know which type of trading session it should run, and what trading system’s rules it should follow. For those reasons, trading bots are paired with a specific session, which in turn, references a trading system."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Trading systems are themselves hierarchies. You may create a trading system by following a framework in which strategies are described in stages. You do not need to code to create a strategy, as the rules are written with simple mathematical statements. However, both basic and advanced knowledge of JavaScript will give you an edge. You may test and deploy your trading system by running trading sessions from within the network hierarchy."
|
||||
"text": "In the end, bots can be created to access and use data from all hierarchies within the Superalgos ecosystem. They use this data to preform a job that helps the whole system work together to acomplish fine tuned effective trading!",
|
||||
"updated": 1637699645798
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
+14
-14
@@ -31,12 +31,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Superalgos Project->Definition",
|
||||
"text": "Foundations->Node->Foundations Project->Definition",
|
||||
"updated": 1609944933341
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Superalgos Project->Content",
|
||||
"text": "Foundations->Node->Foundations Project->Content",
|
||||
"updated": 1609944944285
|
||||
},
|
||||
{
|
||||
@@ -105,12 +105,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading System->Definition",
|
||||
"text": "Algorithmic-Trading->Node->Trading System->Definition",
|
||||
"updated": 1609945942207
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading System->Content",
|
||||
"text": "Algorithmic-Trading->Node->Trading System->Content",
|
||||
"updated": 1609945952584
|
||||
},
|
||||
{
|
||||
@@ -119,12 +119,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Mine->Definition",
|
||||
"text": "Algorithmic-Trading->Node->Trading Mine->Definition",
|
||||
"updated": 1609945981528
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Mine->Content",
|
||||
"text": "Algorithmic-Trading->Node->Trading Mine->Content",
|
||||
"updated": 1609945984960
|
||||
},
|
||||
{
|
||||
@@ -134,12 +134,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Engine->Definition",
|
||||
"text": "Algorithmic-Trading->Node->Trading Engine->Definition",
|
||||
"updated": 1609945998216
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Engine->Content",
|
||||
"text": "Algorithmic-Trading->Node->Trading Engine->Content",
|
||||
"updated": 1609946001567
|
||||
},
|
||||
{
|
||||
@@ -149,12 +149,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Data Mine->Definition",
|
||||
"text": "Data-Mining->Node->Data Mine->Definition",
|
||||
"updated": 1609946022992
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Data Mine->Content",
|
||||
"text": "Data-Mining->Node->Data Mine->Content",
|
||||
"updated": 1609946026584
|
||||
},
|
||||
{
|
||||
@@ -164,12 +164,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Plugins->Definition",
|
||||
"text": "Community-Plugins->Node->Plugins->Definition",
|
||||
"updated": 1609946038957
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Plugins->Content",
|
||||
"text": "Community-Plugins->Node->Plugins->Content",
|
||||
"updated": 1609946042538
|
||||
},
|
||||
{
|
||||
@@ -179,12 +179,12 @@
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Tutorial->Definition",
|
||||
"text": "Education->Node->Tutorial->Definition",
|
||||
"updated": 1609946067573
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Tutorial->Content",
|
||||
"text": "Education->Node->Tutorial->Content",
|
||||
"updated": 1609946070683
|
||||
},
|
||||
{
|
||||
|
||||
+2
-2
@@ -9,12 +9,12 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Bot->Definition",
|
||||
"text": "Algorithmic-Trading->Node->Trading Bot->Definition",
|
||||
"updated": 1610218014743
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Bot->Content",
|
||||
"text": "Algorithmic-Trading->Node->Trading Bot->Content",
|
||||
"updated": 1610218017545
|
||||
},
|
||||
{
|
||||
|
||||
-24
@@ -115,30 +115,6 @@
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Execution Started Event->Content",
|
||||
"updated": 1610105598223
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Foundations->Node->XXXXXXXX->Definition"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Foundations->Node->XXXXXXXX->Content"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Foundations->Node->XXXXXXXX->Definition"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Foundations->Node->XXXXXXXX->Content"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Foundations->Node->XXXXXXXX->Definition"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Foundations->Node->XXXXXXXX->Content"
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -9,12 +9,12 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Engine->Definition",
|
||||
"text": "Algorithmic-Trading->Node->Trading Engine->Definition",
|
||||
"updated": 1611253576142
|
||||
},
|
||||
{
|
||||
"style": "Include",
|
||||
"text": "Foundations->Node->Trading Engine->Content"
|
||||
"text": "Algorithmic-Trading->Node->Trading Engine->Content"
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
|
||||
+24
-3
@@ -4,13 +4,27 @@
|
||||
"type": "Setting Up a New Chart Tutorial",
|
||||
"definition": {
|
||||
"text": "This Tutorial walks through the basic inner workings of the Charting Space to help you learn how to create your own custom charts.",
|
||||
"updated": 1617371694835
|
||||
"updated": 1617371694835,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dieses Tutorial führt Sie durch die grundlegenden Funktionen des Charting Space, damit Sie lernen, wie Sie Ihre eigenen benutzerdefinierten Charts erstellen können.",
|
||||
"updated": 1637608066574
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "About This Tutorial",
|
||||
"updated": 1621986758641
|
||||
"updated": 1621986758641,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Über dieses Tutorial:",
|
||||
"updated": 1637608082763
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
@@ -20,7 +34,14 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Maintainer: @harrellbm (Telegram, and Discord).",
|
||||
"updated": 1621986769553
|
||||
"updated": 1621986769553,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Betreuer: @harrellbm (Telegram, and Discord).",
|
||||
"updated": 1637608124979
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+15
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Hoy aprenderemos cómo agregar tus propios gráficos personalizados! Tendrás los conocimientos básicos que necesitas para desbloquear el poder de la Charting Space.",
|
||||
"updated": 1628637486011
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Heute werden wir lernen, wie Sie Ihre eigenen benutzerdefinierten Diagramme hinzufügen können! Am Ende dieses Tutorials werden Sie über die grundlegenden Kenntnisse verfügen, die Sie benötigen, um die Möglichkeiten des Charting Space zu nutzen.",
|
||||
"updated": 1637608290435
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "¡El sistema de gráficos dentro de Superalgos es poderoso! Reúne información de todo el sistema para que puedas visualizarla cómodamente en un solo lugar. Como habrás descubierto, hay muchas piezas móviles dentro de Superalgos. The Charting Space te permite acceder a la información específica que desea ver.",
|
||||
"updated": 1628637309713
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das charting system ist leistungsstark! Es fasst Informationen aus dem gesamten System zusammen, so dass Sie sie bequem an einem Ort visualisieren können. Wie Sie vielleicht schon gemerkt haben, gibt es bei Superalgos eine Menge beweglicher Teile. Mit dem Charting Space können Sie die spezifischen Informationen abrufen, die Sie sehen möchten.",
|
||||
"updated": 1637608487988
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -39,6 +49,11 @@
|
||||
"language": "ES",
|
||||
"text": "Puedes ver diferentes combinaciones de indicadores, backtesting y resultados de operaciones en vivo, ¡y datos de diferentes mercados y exchanges! Esta flexibilidad hace posible personalizar gráficos.",
|
||||
"updated": 1628637909692
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie können verschiedene Kombinationen von Indikatoren, Backtesting- und Live Trading Ergebnissen und sogar Daten von verschiedenen Markets (Märkten) und Exchanges (Börsen) betrachten! Dank dieser Flexibilität können Sie die Charts nach Herzenslust anpassen. Ziemlich cool, oder?",
|
||||
"updated": 1637608620263
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Antes de comenzar a crear gráficos personalizados, debes asegurate de conocer los conceptos básicos para moverse dentro de Superalgos.",
|
||||
"updated": 1628638892014
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bevor Sie mit der Erstellung von benutzerdefinierten Diagrammen beginnen, sollten Sie sicherstellen, dass Sie sich mit den Grundlagen in Superalgos vertraut gemacht haben.",
|
||||
"updated": 1637608746725
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "Antes de comenzar, este tutorial asume que has terminado los siguientes tutoriales:",
|
||||
"updated": 1628638917375
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bevor wir beginnen, geht dieses Tutorial davon aus, dass Sie die folgenden Tutorials abgeschlossen haben:",
|
||||
"updated": 1637608800606
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -55,6 +65,11 @@
|
||||
"language": "ES",
|
||||
"text": "Si no has completado estos tutoriales y no tienes un conocimiento básico de cómo moverte dentro de tu Workspace, este tutorial puede resultar confuso. Te sugiero que hagas una pausa y vuelvas aquí una vez que conozcas un poco el camino.",
|
||||
"updated": 1628638970811
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie diese Tutorials noch nicht absolviert haben und nicht wissen, wie Sie sich in Ihrem Arbeitsbereich bewegen, kann dieses Tutorial verwirrend sein. Ich würde vorschlagen, dass Sie eine Pause einlegen und hierher zurückkommen, sobald Sie sich ein wenig auskennen.",
|
||||
"updated": 1637609330133
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Es frustrante mirar un gráfico vacío. Estoy aquí para asegurarme de que no te sientas atrapado configurando los gráficos de tus sueños.",
|
||||
"updated": 1628639062880
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Es ist frustrierend, auf eine leere chart zu schauen. Ich bin hier, um dafür zu sorgen, dass Sie nicht das Gefühl haben, die charts Ihrer Träume nicht erstellen zu können.",
|
||||
"updated": 1637612228833
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "Si recién está comenzando aquí en Superalgos, toda esta libertad puede ser un poco abrumadora. Superalgos te permite hacer casi cualquier cosa que se te ocurra, pero hay algunas piezas clave del rompecabezas que deben estar en su lugar.",
|
||||
"updated": 1628639135840
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie gerade erst in Superalgos anfangen, könnte all diese Freiheit ein wenig überwältigend sein. Superalgos erlaubt es Ihnen, fast alles zu tun, was Sie sich ausdenken können, aber es gibt einige wichtige Puzzlestücke, die an ihrem Platz sein müssen.",
|
||||
"updated": 1637612271526
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -39,6 +49,11 @@
|
||||
"language": "ES",
|
||||
"text": "¡Ahí es donde entro yo! ¡Mis amigos y yo les explicaremos cómo personalizar gráficos de principio a fin! Cuando terminemos, tendrás las herramientas para crear gráficos limitados solo por su imaginación.",
|
||||
"updated": 1628639172038
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Genau da komme ich ins Spiel! Meine Freunde und ich werden Ihnen zeigen, wie Sie charts (Diagramme) von Anfang bis Ende anpassen können! Wenn wir fertig sind, werden Sie die Werkzeuge haben, um charts zu erstellen, die nur durch Ihre Fantasie begrenzt sind.",
|
||||
"updated": 1637612350300
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Seguí adelante e instalé algunos bloques de construcción básicos dentro de este Workspace para que podamos empezar a crear gráficos personalizados rápidamente.",
|
||||
"updated": 1628639251718
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Ich habe einige grundlegende building blocks (Bausteine) in diesem Arbeitsbereich installiert, damit wir schnell mit der Erstellung benutzerdefinierter charts beginnen können.",
|
||||
"updated": 1637612559440
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "Los bloques de construcción que instalé son:",
|
||||
"updated": 1628639290050
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die von mir installierten building blocks sind:",
|
||||
"updated": 1637612546766
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -51,6 +61,11 @@
|
||||
"language": "ES",
|
||||
"text": "Todo lo que hagamos hoy se construirá sobre esta configuración básica. Te guiaré a través de lo que instalé para darte una idea de lo que construiremos hoy.",
|
||||
"updated": 1628639317378
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Alles, was wir heute tun, wird auf diesem Basic setup aufbauen. Ich werde Ihnen zeigen, was ich installiert habe, um Ihnen eine Vorstellung davon zu geben, worauf wir heute aufbauen werden.",
|
||||
"updated": 1637612647749
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Antes de que podamos ver los gráficos, ¡necesitamos datos! He instalado algunos Data Mines y un Trading System.",
|
||||
"updated": 1628639352007
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bevor wir uns Charts ansehen können, brauchen wir Daten! Ich habe ein paar Data Mines und ein Trading System installiert.",
|
||||
"updated": 1637612731757
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "You should see the Candles, Masters, y Sparta data mine plugins. Estos nos dan acceso a una serie de indicadores interesantes. Para este tutorial solo usaremos el Candles Data Mine. Mis amigos te enseñarán cómo crear gráficos usando el otro data mines. También instalé el plugin Lighting Strike Trading System.",
|
||||
"updated": 1628639477988
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie sollten die Candles, Masters und Sparta data mine plugins ansehen. Diese ermöglichen uns den Zugang zu einer Reihe interessanter Indikatoren. In diesem Tutorial werden wir nur die Candles Data Mine verwenden. Meine Freunde werden Ihnen später zeigen, wie Sie charts mit den anderen data mines erstellen können. Ich habe auch das Lighting Strike Trading System Plugin installiert.",
|
||||
"updated": 1637613044410
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -39,6 +49,11 @@
|
||||
"language": "ES",
|
||||
"text": "Este es el mismo sistema comercial con el que interactuó durante los tutoriales de bienvenida.",
|
||||
"updated": 1628639517053
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dies ist dasselbe trading system, mit dem Sie während der Willkommens-Tutorials interagiert haben.",
|
||||
"updated": 1637613102882
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+26
-1
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Puedes recordar esta pregunta del tutorial de bienvenida. ¿Estás operando en binance.com o binance.us?",
|
||||
"updated": 1628639559252
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Vielleicht erinnern Sie sich an diese Frage aus dem Willkommenstutorial. Handeln Sie bei binance.com oder binance.us?",
|
||||
"updated": 1637613425795
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "Este espacio de trabajo fue construido usando binance.com. Si ese es su intercambio, continúe y omita este paso. Sin embargo, si sus datos están almacenados en binance.us, deberá realizar un ajuste rápido.",
|
||||
"updated": 1628639619761
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dieser workspace wurde mit binance.com erstellt. Wenn dies Ihr exchange ist, können Sie diesen Schritt überspringen. Wenn Ihre Daten jedoch auf binance.us gespeichert sind, müssen Sie eine kurze Anpassung vornehmen.",
|
||||
"updated": 1637613649493
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -39,18 +49,28 @@
|
||||
"language": "ES",
|
||||
"text": "Configure el nodo Binance a tu izquierda.",
|
||||
"updated": 1628639643918
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Konfigurieren Sie die Binance Node zu Ihrer Linken.",
|
||||
"updated": 1637613673124
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Open the configuration and change the codeName to binanceus. Move the mouse pointer out of the configuration bubble and it will close and save automatically.",
|
||||
"updated": 1628362245139,
|
||||
"updated": 1637613950322,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Open la configuración y cambiar la codeName a binanceus. Mueva el puntero del mouse fuera de la burbuja de configuración y se cerrará y guardará automáticamente.",
|
||||
"updated": 1628639735404
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Öffnen Sie die configuration und ändern Sie den CodeName in binance.us. Bewegen Sie den Mauszeiger aus der Konfigurationsblase und sie wird automatisch geschlossen und gespeichert",
|
||||
"updated": 1637614015199
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -63,6 +83,11 @@
|
||||
"language": "ES",
|
||||
"text": "Clic en Edit de la etiqueta del nodo a leer Binanceus.",
|
||||
"updated": 1628639820319
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Ändern Sie die Bezeichnung der Node so, dass sie Binanceus lautet.",
|
||||
"updated": 1637614035479
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Para finalizar esta configuración básica, seguí adelante e instalé el BTC/USDT mercado para usted.",
|
||||
"updated": 1628639995753
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Um dieses basic setup abzuschließen, habe ich den BTC/USDT-Markt für Sie installiert.",
|
||||
"updated": 1637614250929
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "El Install a New Market Tutorial le enseñó que instalar un mercado establece todo lo que necesita para un espacio de trabajo básico de Superalgos. Esto incluye configurar automáticamente un Backtesting Session, Live Trading Session, y gráficos para cada Trading System presente en el workspace.",
|
||||
"updated": 1628640053192
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Im Tutorial \"Install a New Market Tutorial\" haben Sie gelernt, dass die Installation eines Marktes alles einrichtet, was Sie für einen grundlegenden Superalgos Workspace benötigen. Dazu gehört das automatische Einrichten einer Backtesting Session, Live Trading Session, und von Charts für jedes Trading System, das im Workspace vorhanden ist.",
|
||||
"updated": 1637614488304
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -39,6 +49,11 @@
|
||||
"language": "ES",
|
||||
"text": "Puede ejecutar esta configuración básica tal como está. De hecho, si estás buscando una forma básica de configurar las cosas, instala un plugin Data Mine, Trading System, y terminando instalando un Market te pondrán en funcionamiento en poco tiempo. ¡Pero ese no es el objetivo de este tutorial! ",
|
||||
"updated": 1628641375531
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie können dieses basic setup in ihrer jetzigen Form verwenden. Wenn Sie nach einer einfachen Möglichkeit suchen, die Dinge einzurichten, reicht es aus, eine Plugin Data Mine, ein trading system und schließlich einen Markt zu installieren, damit Sie im Handumdrehen loslegen können. Aber das ist nicht der Sinn dieses Tutorials! Schauen wir uns ein paar custom charts (Benutzerdefinierte) an!",
|
||||
"updated": 1637614729947
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "Este tutorial te ayudará a configurar tu primer gráfico personalizado. Los conceptos fundamentales que aprenda aquí lo ayudarán a aprovechar al máximo la Charting Space.",
|
||||
"updated": 1628641477952
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dieses Tutorial hilft Ihnen, Ihre erste benutzerdefinierte chart zu erstellen. Die grundlegenden Konzepte, die Sie hier lernen, werden Ihnen helfen, das Beste aus dem Charting Space herauszuholen.",
|
||||
"updated": 1637615937010
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "En particular, vamos a conectar un Time Machine a los indicadores de la Candles Data Mine. Estos indicadores serán los datos básicos que trazamos en nuestro gráfico.",
|
||||
"updated": 1628641565219
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Insbesondere werden wir eine Time Machine mit den Indikatoren der Candles Data Mine verbinden. Diese Indikatoren werden die Kerndaten sein, die wir in unserer chart plotten (darstellen).",
|
||||
"updated": 1637616024944
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -39,6 +49,11 @@
|
||||
"language": "ES",
|
||||
"text": "Por ejemplo velas, bandas de bollinger, soportes, etc.",
|
||||
"updated": 1628641605085
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Zum Beispiel candles, bollinger bands, supports, etc.",
|
||||
"updated": 1637616191419
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -51,6 +66,11 @@
|
||||
"language": "ES",
|
||||
"text": "También adjuntaremos el Backtesting Session para el Lighting Strike Trading System. Esto nos permitirá ver la salida del trading system en nuestro gráfico también.",
|
||||
"updated": 1628641719712
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wir werden auch die Backtesting Session mit dem Lighting Strike Trading System verbinden. So können wir den Output des trading systems auch in unserem Chart sehen!",
|
||||
"updated": 1637616271842
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -14,6 +14,11 @@
|
||||
"language": "ES",
|
||||
"text": "El primer nodo del que aprenderemos hoy es el Dashboard. Un Dashboard nos ayuda a mantenernos organizados.",
|
||||
"updated": 1628641836641
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die erste node, welche wir heute kennenlernen werden, ist das Dashboard. Ein Dashboard hilft uns, organisiert zu bleiben.",
|
||||
"updated": 1637616416519
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -27,6 +32,11 @@
|
||||
"language": "ES",
|
||||
"text": "Para empezar, quiero que se sienta un poco más cómodo con la forma en que Charting Space está arreglado.",
|
||||
"updated": 1628641961306
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Für den Anfang möchte ich, dass Sie sich ein wenig mit dem Aufbau des Charting Space vertraut machen.",
|
||||
"updated": 1637616455845
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -39,6 +49,11 @@
|
||||
"language": "ES",
|
||||
"text": "Tómate unos minutos y observa esta jerarquía. ¿Que notaste?",
|
||||
"updated": 1628641984247
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Nehmen Sie sich ein paar Minuten Zeit und sehen Sie sich in dieser Hierarchie um. Was fällt Ihnen auf?",
|
||||
"updated": 1637616473699
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -51,6 +66,11 @@
|
||||
"language": "ES",
|
||||
"text": "¡Así es! Hay un Dashboard configurado para Backtesting,uno para Live Trading, Y un tercero para Learning Tasks. Dashboards son una forma conveniente de agrupar gráficos según el tipo o cualquier otro criterio, para el caso.",
|
||||
"updated": 1628642097225
|
||||
},
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das ist richtig! Es gibt ein Dashboard für das Backtesting, eines für das Live Trading und ein drittes für Learning Tasks. Dashboards sind eine bequeme Möglichkeit, Charts nach ihrem Typ oder nach anderen Kriterien zu gruppieren.",
|
||||
"updated": 1637616563270
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
"name": "Trading\\trading-system",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"text": "New trading systems are created from the Superalgos Project hierarchy, in particular, from the Trading node.",
|
||||
"text": "New trading systems are created from the Foundations Project hierarchy, in particular, from the Trading node.",
|
||||
"updated": 1636542869575
|
||||
},
|
||||
"paragraphs": [
|
||||
|
||||
+18
-11
@@ -47,8 +47,8 @@
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вы получаете доступ к Client с того же самого устройства, то можете кликнуть на кнопку Next и пропустить этот шаг на этом этапе.",
|
||||
"updated": 1635581922558
|
||||
"text": "Если Вы получаете доступ к Client с того же устройства, то можете нажать Next и пропустить этот шаг.",
|
||||
"updated": 1637439306449
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
@@ -100,8 +100,8 @@
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вы работаете на машине удаленно, то необходимо отрегулировать конфигурацию the Network Node перед тем, как Вы продолжите.",
|
||||
"updated": 1635517885096
|
||||
"text": "Если Вы получаете доступ к Client с удаленного устройства, то необходимо отрегулировать конфигурацию the LAN Network Node перед тем, как Вы продолжите. ",
|
||||
"updated": 1637439381746
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
@@ -160,8 +160,8 @@
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Нажмите Configure в правом верхнем углу в меню the Network Node;",
|
||||
"updated": 1635517953808
|
||||
"text": "Нажмите Configure в правом верхнем углу в меню the LAN Network Node.",
|
||||
"updated": 1637439430465
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
@@ -217,8 +217,8 @@
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Измените гостевой параметр для IP-адреса устройства, на котором выполняется серверная часть. If you use a reverse proxy you must manually add \"webSocketsExternalURL\": \"wss://mydomain.com:443\" config parameter.",
|
||||
"updated": 1636194777591
|
||||
"text": "Измените гостевой параметр для IP-адреса устройства, на котором выполняется серверная часть.",
|
||||
"updated": 1637439456800
|
||||
}
|
||||
],
|
||||
"updated": 1636909829414
|
||||
@@ -226,7 +226,14 @@
|
||||
{
|
||||
"style": "List",
|
||||
"text": "If you use a reverse proxy, add this parameter...",
|
||||
"updated": 1636909970492
|
||||
"updated": 1636909970492,
|
||||
"translations": [
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вы используете обратный прокси-сервер, добавьте этот параметр...",
|
||||
"updated": 1637439507774
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
@@ -280,8 +287,8 @@
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Выйдите из конфигурации, убрав указатель мыши из пузырька конфигурации! Если конфигурация происходит верно, то сообщение об ошибке в Network Node должно исчезнуть через минуту!",
|
||||
"updated": 1635581935285
|
||||
"text": "Теперь закройте редактор. Если конфигурация верна, сообщение об ошибке должно исчезнуть через минуту.",
|
||||
"updated": 1637439573679
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
|
||||
+15
@@ -42,6 +42,11 @@
|
||||
"language": "RU",
|
||||
"text": "На каждом рынке операция организована с помощью Data Mine. Superalgos поставляется вместе с несколькими шахтами данных с открытым исходным кодом, каждая - с множеством индикаторов.\n",
|
||||
"updated": 1636192680294
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "De operatie binnen elke markt is georganiseerd per Data Mine. Superalgos komt met verschillende open-source datamijnen, met meerdere indicatoren.",
|
||||
"updated": 1637497885132
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -83,6 +88,11 @@
|
||||
"language": "RU",
|
||||
"text": "Думайте о шахтах данных как о плагинах, которые разработчики могут создавать для расширения объема анализа данных системы. Indicator Bot может обрабатывать данные, которые производят другие индикаторы, производя более глубокий и насыщенный анализ.",
|
||||
"updated": 1636192861205
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Zie datamijnen als een plugins die door ontwikkelaars gemaakt zijn om de data analyse mogelijkheden van het systeem uite te breiden. Een Indicator Bot kan de data van andere indicator gebruiken om meer waarde, diepere en rijkere analyses te maken.",
|
||||
"updated": 1637498102349
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -123,6 +133,11 @@
|
||||
"language": "RU",
|
||||
"text": "Если у Вас имеется базовое понимание JavaScript, Вы также можете создать индикаторы! Если Вы внесете свой вклад в Data Mine, то заработаете токены Superalgos (SA)!",
|
||||
"updated": 1636193134329
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Als je een basiskennis van JavaScript hebt, kan jij ook indicatoren maken! Als je een contributie aan een Data Mine toevoegd, verdien je daar Superalgos SA Tokens mee!",
|
||||
"updated": 1637498198951
|
||||
}
|
||||
],
|
||||
"updated": 1622196189467
|
||||
|
||||
+20
@@ -42,6 +42,11 @@
|
||||
"language": "RU",
|
||||
"text": "Ядром операции интеллектуального анализа данных являются задачи, над которыми работают боты. Одна Task управляет одним ботом, а Task Manager может управлять несколькими задачами.\n",
|
||||
"updated": 1636193443379
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "De kern van een datamijn operatie bestaat uit taken van bots. Eén Task beheerd één bot, een Task Manager kan meerdere taken beheren.",
|
||||
"updated": 1637498357325
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,6 +89,11 @@
|
||||
"language": "RU",
|
||||
"text": "К настоящему времени Вы узнали о шести различных устройствах, которые Вы можете использовать для управления каждым ботом в своей операции и нтеллектуального анализа данных. На самом высоком уровне узел Data Tasks управляет всеми ботами интеллектуального анализа данных в Network Node.",
|
||||
"updated": 1636193596507
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Ondertussen heb je al 6 verschillende apparaten geleerd die je kan gebruiken om bot in een datamijn operatie te beheren. Op het hoogste niveau. beheerd de Data Tasks node alle datamijn bots in de Network Node.",
|
||||
"updated": 1637499321780
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -124,6 +134,11 @@
|
||||
"language": "RU",
|
||||
"text": "Мы поговорим о сетевых узлах через минуту...",
|
||||
"updated": 1636193625683
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "We gaan de netwerk nodes zodadelijk bespreken...",
|
||||
"updated": 1637499364707
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -165,6 +180,11 @@
|
||||
"language": "RU",
|
||||
"text": "На самом низком уровне отдельная Task управляет одним ботом. Промежуточные узлы - это организационные узлы, которые помогают поддерживать порядок в работе и позволяют осуществлять детальный контроль над различными разделами.",
|
||||
"updated": 1636193720622
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Op het laagste niveau, beheerd een individuele Task een enkele bot. De tussenliggende nodes zijn organisatorische nodes om orde in de operatie te houden en granulaire controle over de verschillende secties bieden.",
|
||||
"updated": 1637499812865
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -42,6 +42,11 @@
|
||||
"language": "RU",
|
||||
"text": "К этому моменту все процессы должны работать на 100%. Когда это происходит, мы называем операцию интеллектиуального анализа данных \"актуальной\".",
|
||||
"updated": 1636193865762
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Ondertussen horen alle processen op 100% te staan. We noemen de datamijn operatie dan \"up to date\".",
|
||||
"updated": 1637500003121
|
||||
}
|
||||
],
|
||||
"updated": 1616415623576
|
||||
@@ -84,6 +89,11 @@
|
||||
"language": "RU",
|
||||
"text": "Когда все процессы обновлены, боты продолжают работать, обрабатывая информацию в режиме реального времени по мере ее получения на бирже. То есть операция интеллектуального анализа данных не остановится, пока Вы ее не остановите!",
|
||||
"updated": 1636194015988
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Als alle processen up to date zijn, blijven de bots draaien om informatie van de exchange realtime te verwerken. De datamijn operatie blijft doorgaan tenzij je het zelf stopt!",
|
||||
"updated": 1637500291829
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -124,6 +134,11 @@
|
||||
"language": "RU",
|
||||
"text": "Оглянитесь вокруг и посмотрите, все ли процессы работают на 100%.",
|
||||
"updated": 1636194193682
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Kijk en controleer of alle processen op 100% staan.",
|
||||
"updated": 1637500340878
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -164,6 +179,11 @@
|
||||
"language": "RU",
|
||||
"text": "...To run a Live Trading Session, you need a constant feed of information from the exchange processed in realtime so that the Trading Bot may apply the rules of your Trading System to make live trading decisions.",
|
||||
"updated": 1636194159296
|
||||
},
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Om een Live Trading Session te draaien, heb je een constante stroom van informatie van de exchange nodig die realtime verwerkt wordt zodat de Trading Bot de regels van jouw Trading System kan toepassen om live trading beslissingen te maken.",
|
||||
"updated": 1637501395384
|
||||
}
|
||||
],
|
||||
"updated": 1616415667438
|
||||
|
||||
+20
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Ortasında \"L\" olan yeşil mermileri görüyor musunuz? Bahsettiğim limit alış emirleri bunlar.",
|
||||
"updated": 1636203165068
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы видите зеленые круги с буквой L в центре? Это те лимитные ордера на покупку, о которых я упоминал.",
|
||||
"updated": 1637594382201
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Her dakika bir siparişin nasıl verildiğine ve yeni bir sipariş verilmeden önce iptal edildiğine dikkat edin. Sipariş iptali sembolünü tanıyor musunuz? Ortasında beyaz yatay şerit bulunan daha küçük, daha koyu mermi!",
|
||||
"updated": 1636203192290
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Обратите внимание как ордер размещается каждую минуту и отменяется перед размещением нового ордера. Вы узнаете символ отмены заказа? Это меньший, более темный круг с белой горизонтальной полосой по середине!",
|
||||
"updated": 1637594519493
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Fiyatın 00:21'de düştüğüne dikkat edin! Fiyat, limit emrinin oranının çok altına düştü, bu nedenle emir yerine getirildi! Daha büyük, dolu yeşil mermi bunu gösteriyor!",
|
||||
"updated": 1636203809456
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Посмотрите на нож, падающий в 00:21 утра! Цена упала значительно ниже ставки лимитного ордера, следовательно, заказ был выполнен! Это обозначено на большом закрашенном зеленом круге.",
|
||||
"updated": 1637594840545
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -111,6 +126,11 @@
|
||||
"language": "DE",
|
||||
"text": "Und... was passiert danach?",
|
||||
"updated": 1634224328125
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Итак... Что происходит после?",
|
||||
"updated": 1637594867407
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Sipariş doldurulduktan sonra artık limit satın alma emri olmadığını fark etmişsinizdir. Bunun yerine, satış emirleri ortaya çıkmaya başlar!",
|
||||
"updated": 1636203864365
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я уверен, Вы заметили, что после того, как заказ был размещен, не осталось лимитных ордеров на покупку. Вместо этого начинают появляться заказы на продажу!",
|
||||
"updated": 1637595913971
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "İlk Limitli Satış Emrinin ( Limit Sell Order ), alış emrinin doldurulmasından bir dakika sonra 00:22 AM'de nasıl verildiğine dikkat edin!",
|
||||
"updated": 1636203947395
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Обратите внимание, что первый Limit Sell Order выставляется в 00:21 утра - через минуту после выполнения ордера на покупку.",
|
||||
"updated": 1637596009712
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -88,6 +98,11 @@
|
||||
"language": "TR",
|
||||
"text": "Superalgos'un borsadan siparişin doldurulduğuna dair bildirim almasıyla aynı dakika. Trading Bot, borsa ile bağlantı kurar ve iki farklı döngüden geçer.",
|
||||
"updated": 1636203973992
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "В ту же минуту Superalgos получил бы уведомление от биржи о том, что заказ был выполнен. Trading Bot соединяется с биржей и проходит два определенных цикла.",
|
||||
"updated": 1637596461485
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -116,6 +131,11 @@
|
||||
"language": "TR",
|
||||
"text": "İlk Döngüde mevcut siparişlerin durumunu öğrenir. İkincisinde yeni talimatlar verir.",
|
||||
"updated": 1636203996665
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "В первом Cycle он выясняет статус существующих ордеров. Во втором - дает новые инструкции.",
|
||||
"updated": 1637655276008
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -31,6 +31,11 @@
|
||||
"language": "TR",
|
||||
"text": "Satın alma emirlerinin verilmesinin ardındaki mantık, şöyle çalışır. Daha önce çalıştırdığınız Masters Data Mine'daki Dirençler ve Destekler botundan etkilenir.",
|
||||
"updated": 1636204198637
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "На логику размещения ордеров на покупку влияет Бот-индикатор Сопротивления и Поддержки из Masters Data Mine, которую Вы запускали ранее. ",
|
||||
"updated": 1637655375611
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -60,6 +65,11 @@
|
||||
"language": "TR",
|
||||
"text": "Size bu güzelliği göstermek için Destekler katmanını açtım... Umarım sakıncası yoktur!",
|
||||
"updated": 1636204235468
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я взял на себя смелость включить слой Поддержки, чтобы показать Вам эту красоту... Надеюсь, Вы не возражаете!",
|
||||
"updated": 1637655439829
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -88,6 +98,11 @@
|
||||
"language": "TR",
|
||||
"text": "Gösterge, fiyatın reddedildiği seviyeleri (fiyat aralıkları) tanımlar ve seviye ihlal edilene kadar kaç ret gerçekleştiğinin bir sayacını tutar.",
|
||||
"updated": 1636204267357
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Индикатор определяет уровни (ценовые диапазоны), на которых отклонилась цена, и ведет счет количества происходящих отклонений пока нарушен уровень",
|
||||
"updated": 1637655718746
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -116,6 +131,11 @@
|
||||
"language": "TR",
|
||||
"text": "Seviyelerin ekranda gösterilme şekli, seviyenin tanık olduğu reddedilmelerin sayısına göre değişir ve bize her bir destek seviyesinin ne kadar güçlü olabileceğine dair görsel bir ipucu verir. Bir seviye ihlal edildiğinde, kaybolur.",
|
||||
"updated": 1636204288960
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Способ отображений уровней на экране зависит от количества отклонений, наблюдаемых уровнем, что дает нам визуальное представление о том, насколько силным может быть каждый уровень Поддержки. Как только уровень нарушен, он исчезает.",
|
||||
"updated": 1637656234089
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+10
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Aşağıdaki tabloyu kontrol edin ve grafiklerde gördüğünüz destek seviyelerini yorumlayın. Her seviye ihlalinde barın rengi değişir. Örneğin Seviye 5 defa ihlal edilmişse yeşil renkli olur.",
|
||||
"updated": 1636204496181
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Проверьте таблицу ниже и посмотрите, если Вы сможете интерпретировать уровни поддержки, которые Вы видите на графиках.",
|
||||
"updated": 1637656295257
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -63,6 +68,11 @@
|
||||
"language": "TR",
|
||||
"text": "Reddedilen yeni bir destek seviyesi (noktalı çizgi ile ifade edilir), fiyatın sıçradığı tam seviyeyi gösterir. Daha sonraki retler için bloklar kullanılır ve sayıya göre renklendirilir.",
|
||||
"updated": 1636204639724
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Для нового уровня поддержки с одним отказом пунктирная линия отмечает точный уровень, на котором цена отскочила. Для дальнейших отказов блоки отмечают диапазоны ставок, в которых учитываются последующие отклонения.",
|
||||
"updated": 1637656618967
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Seviyeler neden yukarı ve aşağı zıplıyor? Sana henüz söylemediğim bir şey var, bu aklını başından alacak.",
|
||||
"updated": 1636205310660
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Почему уровни прыгают вверх и вниз? Есть кое-что, о чем я еще не рассказал Вам, потому что боюсь, что это может взорвать Вамш мозг!",
|
||||
"updated": 1637656806036
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bot, veri kümesinin başlangıcından bu yana tüm destek seviyelerini canlı olarak takip eder, ancak size yalnızca mevcut fiyata en yakın beş seviyeyi gösterir.",
|
||||
"updated": 1636205332521
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Бот отслеживает все уровни поддержки с момента запуска набора данных, но показывает Вам только пять уровней, наиболее близких к текущей цене.",
|
||||
"updated": 1637656876957
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -88,6 +98,11 @@
|
||||
"language": "TR",
|
||||
"text": "Veri kümesinin tüm aralığı için - ki bu yılları içerebilir - bilgi kaydını tutmak, veri madenciliğinin olağanüstü değeridir ve bir fonksiyonla anında hesaplayamayacağınız türden şeylerdir. Gösterge Botu ile ilişkili Plotter, fiyata en yakın beş destek seviyesini dinamik olarak gösterir, çünkü bunlar durum için ilgili seviyelerdir ve çizici bu şekilde inşa edilmiştir!",
|
||||
"updated": 1636205604729
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Отслеживание информации за весь период набора данных, который может исчисляться годами - это исключительная ценность интеллектуального анализа данных и подобного рода вещи Вы не смогли бы вычислить \"на лету\". Plotter, связанный с Indicator Bot, динамически показывает пять уровней поддержки, наиболее близких к цене, потому что это соответствующие уровни для контекста, и именно так устроен плоттер.",
|
||||
"updated": 1637657295196
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Artık göstergenin nasıl çalıştığını bildiğinize göre, satın alma siparişleri ile destek seviyeleri arasındaki ilişkiyi bulabilir misiniz?",
|
||||
"updated": 1636205670836
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Теперь, когда Вы знаете, как работает индикатор, можете ли Вы найти взаимосвязь между ордерами на покупку и уровнями поддержки?",
|
||||
"updated": 1637754997019
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Destek seviyelerinin Limitli Alış Emri oranını nasıl belirlediğine dair ipuçlarını aramak ve test edilen süreyi keşfetmek için biraz zaman ayırın!",
|
||||
"updated": 1636206011307
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Потратьте некоторое время на изучение проверенного периода времени в поисках подсказок о том, как уровни поддержки определяют скорость Limit Buy Order!",
|
||||
"updated": 1637755087157
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Fiyat yön değiştirdiğinde yeni seviyelerin nasıl oluştuğunu ve fiyat sıçradığında yerleşik bir seviyenin nasıl renk değiştirdiğini fark etmek eğlencelidir.",
|
||||
"updated": 1636206057671
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Забавно наблюдать, как формируются новые уровни, когда цена меняет направление и как установленный уровень меняет цвет, когда цена отскакивает от него.",
|
||||
"updated": 1637755157171
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -115,6 +130,11 @@
|
||||
"language": "TR",
|
||||
"text": "Ancak işin püf noktası, sıranın üzerindeki seviyeleri saymakta yatar!",
|
||||
"updated": 1636206075760
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Однако хитрость заключается в подсчете уровней выше порядка!",
|
||||
"updated": 1637755186829
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Trading Bot 'u, Limit Satın Alma Emri'ni ( Limit Buy Order ) dördüncü destek seviyesine yerleştirir! Bunun arkasındaki mantık nedir?",
|
||||
"updated": 1636206183071
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы поняли? Trading Bot размещает Limit Buy Order на четвертом уровне поддержки! Какая логика стоит за этим? ",
|
||||
"updated": 1637755292494
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bu biraz keyfi bir durumdur, ancak strateji, düşen bıçağı (fiyatın ani düşüşünü), tek bir dakika içinde en az üç destek seviyesini aşabilen ve dördüncü seviyeye ulaşabilen fiyat hareketi olarak tanımlar. İstatistiksel olarak, bu tür olaylar - bu zaman çerçevesinde - sürekli daha fazla sıçrama üretir. Emir defterindeki alış/satış farkını geçici olarak artıran büyük piyasa emirlerinden kaynaklanabilirler.",
|
||||
"updated": 1636206270568
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Это происходит произвольно, но стратегия определяет падающий нож как ценовое действие, способное пробить, по крайней мере, три уровня поддержки, и добраться до четвертого в течение одной минуты. По статистике, подобные явления - в этот период времени - производят больше отскоков, чем продолжений. Они могут быть вызваны крупными рыночными ордерами, которые временно увеличивают спрос/предложение в книге заказов.",
|
||||
"updated": 1637755586430
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Satın alma siparişlerinin dördüncü destek seviyesinde verildiğini doğrulamak için bir dakikanızı ayırın!",
|
||||
"updated": 1636206291919
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Потратьте минуту, чтобы убедиться, что заказы на покупку размещены на четвертом уровне поддержки!",
|
||||
"updated": 1637755660080
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+15
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Sizi grafiklerden uzaklaştırdığım için özür dilerim ama sizi biriyle tanıştırmak istedim: satın alma siparişlerini veren kişi sağdaki adam!",
|
||||
"updated": 1636206465488
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Извините, что оторвал Вас от графиков, но я хотел представить Вам кое-кого: парень справа - это тот, кто размещает заказы на покупку!",
|
||||
"updated": 1637755743535
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Lightning Strike Trading Sisteminin ( Trading System ), Open Stage tanımları içerisindeyiz. Bu aşamada, Tetik Aşamasında pozisyon alma kararı verildikten sonra Yürütme Algoritması ( Execution Algorithm ) devreye girer. Hala bir Durum ( Situation ) veya Koşulun ( Condition ) ne olduğunu bilmediğini biliyorum, ama yine de bir şeyler yapmanı istiyorum...",
|
||||
"updated": 1636207188259
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Мы находимся внутри Trading System - Lightning Strike - в рамках определений Open Stage. На этом этапе Execution Algorithm вступает в силу после того, как решение занять позицию уже было приянто на Trigger Stage. Я знаю, что Вы еще не знаете, что такое Situation или Condition, но я все равно бы хотел, чтобы Вы что-нибудь сделали...",
|
||||
"updated": 1637756027374
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Yürütme algoritmasının altındaki düğümleri keşfetmek için birkaç dakikanızı ayırın, formülleri ve koşulları kontrol edin ve bunlardan neler yapabileceğinizi görün!",
|
||||
"updated": 1636207209256
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Потратьте несколько минут на изучение узлов под алгоритмом выполнения, проверьте формулы и условия и посмотрите, что Вы можете из них сделать!",
|
||||
"updated": 1637756059992
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bu adım her dakika verilen ve iptal edilen Limitli Alış Emrinin (Limit Buy Order ) tanımıdır.",
|
||||
"updated": 1636208410014
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "То, что Вы только что прошли - это определение Limit Buy Order, который размещается и отменяется каждую минуту, пока не будет заполнен. ",
|
||||
"updated": 1637756921540
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -60,6 +65,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bu, limit emrinin oranını belirleyen düğümdür. Dördüncü destek seviyesi oranında sipariş vermekle ilgili daha önce tartıştığımız şeyi hatırlıyor musunuz?",
|
||||
"updated": 1636207410235
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Это узел, который определяет скорость лимитного ордера. Помните, что мы обсуждали ранее о размещении заказа по ставке четвертого уровня поддержки?",
|
||||
"updated": 1637757006124
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -88,6 +98,11 @@
|
||||
"language": "TR",
|
||||
"text": "Sipariş Oranı ( Order Rate ) düğümünnün altındaki formüle ( Formula ) düğümüne gidin ve menüden Düzenle'ye (Edit) tıklayın.",
|
||||
"updated": 1636207530541
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Перейдите к Formula, прикрепленной к узлу Order Rate и нажмите Edit в меню.",
|
||||
"updated": 1637757201102
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -116,6 +131,11 @@
|
||||
"language": "TR",
|
||||
"text": "İşte... böyle yapılır! Gördüğünüz gibi, sözdizimi neredeyse kendi kendini açıklayıcıdır! Zaman çerçevesini (chart.at01min), göstergeyi ( Suport ) ve ilgili gösterge özelliğini ( support4rate ) tanımlamayı içerir.",
|
||||
"updated": 1636207760464
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Итак... как это происходит? Как Вы можете видеть, синтаксис практически не требует пояснений. Это включает в себя определение временных рамок, индикатор и соответствующее свойство индикатора.",
|
||||
"updated": 1637757425980
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+20
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Artık Kapanış Aşamasındayız ( Close Stage ). Size yürütme algoritmaları hakkında başka bir örnekle daha fazla bilgi vermenin ilginç olacağını düşündüm.",
|
||||
"updated": 1636208526405
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сейчас мы находимся на Close Stage. Я думал, что было бы интересно рассказать Вам больше об алгоритмах выполнения на другом примере.",
|
||||
"updated": 1637757485185
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bir Yürütme Algoritması ( Execution Algorithm ), her türden birden fazla siparişi işleyebilir. Bu durumda çoklu limit satış emirleri tanımlanır.",
|
||||
"updated": 1636208571976
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Execution Algorithm может обрабатывать множество ордеров всех типов. В этом случае определяется множество лимитных ордеров на продажу.",
|
||||
"updated": 1637757731866
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Algoritmanın menüsünde Yapılandır'ı (Configure) seçin ve bu tanımın sonuçlarını düşünün!",
|
||||
"updated": 1636208699352
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Выберите Configure в меню алгоритма и подумайте над значением этого определения!",
|
||||
"updated": 1637757772068
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -115,6 +130,11 @@
|
||||
"language": "TR",
|
||||
"text": "Hem nasıl pozisyon alınacağını tanımladığınız açık aşama hem de nasıl çıkılacağını tanımladığınız kapalı aşama, her biri belirli bir miktarda sermayeyi işleyen birden fazla yürütme algoritması içerebilir.",
|
||||
"updated": 1636208733018
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Как на этапе открытия, где Вы определяете как открыть позицию, так и на этапе закрытия - как выйти, может быть множество алгоритмов выполнения, каждый из которых обрабатывает определенное количество капитала.",
|
||||
"updated": 1637757971911
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -375,14 +375,14 @@ exports.newFoundationsFunctionLibrariesDataDependenciesFunctions = function () {
|
||||
THe first thing we do is to build an array of all the
|
||||
declared dependencies of the Bot Process.
|
||||
*/
|
||||
let dataDependencies = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processDependencies, 'Data Dependency')
|
||||
let dataDependencies = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processDependencies, 'Data Dependency')
|
||||
/*
|
||||
Then we will filter out declared dependencies that are
|
||||
not referencing nodes currently present at the workspace.
|
||||
This will allow the user to have less Data Mines loaded at
|
||||
the workspace that the ones that a the Bot process depends on.
|
||||
*/
|
||||
dataDependencies = TS.projects.visualScripting.utilities.nodeFunctions.filterOutNodeWihtoutReferenceParentFromNodeArray(dataDependencies)
|
||||
dataDependencies = SA.projects.visualScripting.utilities.nodeFunctions.filterOutNodeWihtoutReferenceParentFromNodeArray(dataDependencies)
|
||||
/*
|
||||
We will run some validations to prevent starting the process
|
||||
if all needed config and nodes are not present.
|
||||
@@ -394,7 +394,7 @@ exports.newFoundationsFunctionLibrariesDataDependenciesFunctions = function () {
|
||||
we do it just to be able to validate that all nodes and config
|
||||
are ok before letting this process run too far.
|
||||
*/
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
/*
|
||||
Here we check that all output datasets configs are ok.
|
||||
*/
|
||||
|
||||
@@ -48,7 +48,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
node.dataDependency = dataDependenciesModule.curatedDependencyNodeArray[0]
|
||||
}
|
||||
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset'
|
||||
)
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ exports.newFoundationsFunctionLibrariesProcessFilesFunctions = function () {
|
||||
async function writeProcessFiles(processIndex, contextVariables, currentTimeFrame, processDate, statusDependencies) {
|
||||
|
||||
let fileStorage = TS.projects.foundations.taskModules.fileStorage.newFileStorage(processIndex)
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
|
||||
await writeTimeFramesFiles()
|
||||
await writeDataRanges()
|
||||
|
||||
@@ -91,15 +91,15 @@
|
||||
return
|
||||
}
|
||||
|
||||
let botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Indicator Bot')
|
||||
let botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Indicator Bot')
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Trading Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Trading Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Portfolio Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Portfolio Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Learning Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Learning Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] start -> Product Definition not attached to a Bot. ");
|
||||
@@ -113,13 +113,13 @@
|
||||
return
|
||||
}
|
||||
|
||||
let dataMineNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Data Mine')
|
||||
let dataMineNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Data Mine')
|
||||
if (dataMineNode === undefined) {
|
||||
let tradingMineNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Trading Mine')
|
||||
let tradingMineNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Trading Mine')
|
||||
if (tradingMineNode === undefined) {
|
||||
let portfolioMineNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Portfolio Mine');
|
||||
let portfolioMineNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Portfolio Mine');
|
||||
if (portfolioMineNode === undefined) {
|
||||
let learningMineNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Learning Mine')
|
||||
let learningMineNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDatasetNode, 'Learning Mine')
|
||||
if (learningMineNode === undefined) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] start -> Bot not attached to a Data Mine, Trading Mine or Learning Mine.");
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_FAIL_RESPONSE);
|
||||
@@ -224,7 +224,7 @@
|
||||
|
||||
function calculationsProcedure(processIndex, jsonArray, recordDefinition, calculationsProcedure, variableName, timeFrame) {
|
||||
|
||||
/*
|
||||
/*
|
||||
This function has as an input an array of JSON objects, and it adds calculated properties to
|
||||
complete the set of properties that will be available for Formulas.
|
||||
*/
|
||||
@@ -313,7 +313,7 @@
|
||||
parametersDefinition
|
||||
) {
|
||||
|
||||
/*
|
||||
/*
|
||||
This function has as an input the products object, with all the information
|
||||
of all products calculated so far by the process. Based on that information
|
||||
the function will evaluate user supplied code and formulas in order to build
|
||||
@@ -332,7 +332,7 @@
|
||||
|
||||
/*
|
||||
We are going to build a map structure so that users can easily get the current object of
|
||||
each data dependency based on the current element of the main data dependency.
|
||||
each data dependency based on the current element of the main data dependency.
|
||||
We will use as key for these maps the begin and end property, meaning only elements with exactly
|
||||
the same begin and end property will be matched.
|
||||
*/
|
||||
@@ -361,7 +361,7 @@
|
||||
}
|
||||
}
|
||||
/*
|
||||
This function allows users to locate an object at a dataset based on the begins and end properties
|
||||
This function allows users to locate an object at a dataset based on the begins and end properties
|
||||
of another object provided to the function as a parameter. For example, users can locate the
|
||||
bollinger band object that has the same begin and end than a candle object.
|
||||
*/
|
||||
@@ -522,7 +522,7 @@
|
||||
Here we have an special problem that occurs when an object spans several time periods. If not taken care of
|
||||
it can happen that the object gets splitted between 2 days, which we dont want since it would loose some of
|
||||
its properties.
|
||||
|
||||
|
||||
To solve this issue, we wont save objects which ends at the last candle of the day, because we will save it
|
||||
at the next day, in whole, even if it starts in the previous day.
|
||||
*/
|
||||
@@ -615,8 +615,8 @@
|
||||
}
|
||||
|
||||
function checkUpstreamOfTaskNode(processIndex) {
|
||||
/*
|
||||
Here we check that the Task Node received, comes with all the upstream nodes that will be
|
||||
/*
|
||||
Here we check that the Task Node received, comes with all the upstream nodes that will be
|
||||
needed to run this task in the context of a Single Market Bot.
|
||||
*/
|
||||
/* Validate that the minimum amount of input required are defined. */
|
||||
@@ -644,7 +644,7 @@
|
||||
return false
|
||||
}
|
||||
/*
|
||||
Checking the Market that is referenced.
|
||||
Checking the Market that is referenced.
|
||||
*/
|
||||
if (TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent === undefined) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_INSTANCE_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
@@ -694,7 +694,7 @@
|
||||
|
||||
function initializeFilePathRoot(processIndex) {
|
||||
/*
|
||||
For Single Market Files, the Root Path for files takes an specific structure
|
||||
For Single Market Files, the Root Path for files takes an specific structure
|
||||
which includes the exchange and market. Here that structure is defined.
|
||||
*/
|
||||
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).FILE_PATH_ROOT =
|
||||
|
||||
@@ -8,7 +8,6 @@ exports.newFoundationsGlobalsTaskConstants = function () {
|
||||
NETWORK_NODE: undefined,
|
||||
PROJECT_DEFINITION_NODE: undefined,
|
||||
PROJECTS_SCHEMA: undefined,
|
||||
APP_SCHEMA_MAP: new Map(),
|
||||
EVENT_SERVER_CLIENT_MODULE_OBJECT: undefined, // This is an instance of the Event Server Client pointing to the localhost server
|
||||
TASK_HEARTBEAT_INTERVAL_HANDLER: undefined
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ exports.newFoundationsProcessModulesDataDependencies = function (processIndex) {
|
||||
/*
|
||||
First we will get all the data dependencies of the bot, as defined at the Trading|Portfolio Mine.
|
||||
*/
|
||||
thisObject.curatedDependencyNodeArray = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processDependencies, 'Data Dependency')
|
||||
thisObject.curatedDependencyNodeArray = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processDependencies, 'Data Dependency')
|
||||
if (thisObject.curatedDependencyNodeArray.length === 0) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> It is not possible to not have data dependencies at all.")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_FAIL_RESPONSE)
|
||||
@@ -61,7 +61,7 @@ exports.newFoundationsProcessModulesDataDependencies = function (processIndex) {
|
||||
This will allow the user to have less Data Mines loaded at the workspace
|
||||
that the ones that a Trading|Portfolio Mine depends on.
|
||||
*/
|
||||
thisObject.curatedDependencyNodeArray = TS.projects.visualScripting.utilities.nodeFunctions.filterOutNodeWihtoutReferenceParentFromNodeArray(thisObject.curatedDependencyNodeArray)
|
||||
thisObject.curatedDependencyNodeArray = SA.projects.visualScripting.utilities.nodeFunctions.filterOutNodeWihtoutReferenceParentFromNodeArray(thisObject.curatedDependencyNodeArray)
|
||||
|
||||
} else {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> It is not possible not to have process dependencies, which means not data dependencies.")
|
||||
|
||||
@@ -222,7 +222,7 @@ exports.newFoundationsProcessModulesDataset = function (processIndex) {
|
||||
function scanNodeMesh(startingNode) {
|
||||
if (startingNode === undefined) { return }
|
||||
|
||||
let schemaDocument = TS.projects.foundations.globals.taskConstants.APP_SCHEMA_MAP.get(startingNode.project + '-' + startingNode.type)
|
||||
let schemaDocument = SA.projects.foundations.globals.schemas.APP_SCHEMA_MAP.get(startingNode.project + '-' + startingNode.type)
|
||||
if (schemaDocument === undefined) { return }
|
||||
|
||||
if (startingNode.id === productDefinition.id) {
|
||||
|
||||
@@ -18,26 +18,26 @@
|
||||
/* We will raise the events for the datasets impacted by the process that just finished. */
|
||||
|
||||
if (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput !== undefined) {
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
|
||||
for (let j = 0; j < outputDatasets.length; j++) {
|
||||
let outputDataset = outputDatasets[j]
|
||||
|
||||
let botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Indicator Bot')
|
||||
let botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Indicator Bot')
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Trading Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Trading Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Portfolio Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Sensor Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Sensor Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'API Data Fetcher Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'API Data Fetcher Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Learning Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Learning Bot')
|
||||
}
|
||||
|
||||
/* Some validations to verify that everything is in place. */
|
||||
@@ -115,26 +115,26 @@
|
||||
function asyncRaiseEvents(lastFile, timeFrames) {
|
||||
|
||||
if (TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput !== undefined) {
|
||||
let outputDatasets = TS.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
let outputDatasets = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput, 'Output Dataset')
|
||||
|
||||
for (let j = 0; j < outputDatasets.length; j++) {
|
||||
let outputDataset = outputDatasets[j]
|
||||
|
||||
let botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Indicator Bot')
|
||||
let botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Indicator Bot')
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Trading Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Trading Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Portfolio Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Sensor Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Sensor Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'API Data Fetcher Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'API Data Fetcher Bot')
|
||||
}
|
||||
if (botNode === undefined) {
|
||||
botNode = TS.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Learning Bot')
|
||||
botNode = SA.projects.visualScripting.utilities.nodeFunctions.findNodeInNodeMesh(outputDataset, 'Learning Bot')
|
||||
}
|
||||
|
||||
/* Some validations to verify that everything is in place. */
|
||||
|
||||
Loaded 100 of 225 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user